{"version":3,"sources":["Config/Config.js","Context/MessageContext.js","Hooks/Settings/useListAllSettings.js","Hooks/Statistics/useCreateStatistics.js","Hooks/Users/useReadProfile.js","Hooks/Settings/useListLocations.js","Hooks/Settings/useListServices.js","Hooks/Settings/useListChannels.js","Hooks/Settings/useListTypes.js","Hooks/Settings/useListTimeOfDays.js","Context/StateContext.js","Reusable/Buttons/Buttons.js","Reusable/Modals/GeneralModal.js","Layout/Navigation.js","Layout/Header.js","Layout/Content.js","Layout/Footer.js","Reusable/Question.js","Hooks/Aforisms/useListAforisms.js","Layout/Loading.js","Pages/SelectService.js","Layout/SubNavigation.js","Pages/Contact/ContactType.js","Pages/Contact/BackgroundInformation.js","Pages/Contact/PreviousSupport.js","Pages/Contact/Themes.js","Pages/Contact/SpecificInformation.js","Pages/Contact/Referral.js","Pages/Contact/Retrospective.js","Utils/utils.js","Reusable/Lists/PagedTable.js","Hooks/Users/useListUsers.js","Hooks/Settings/useListActivityTypes.js","Pages/User/UserList.js","Hooks/Users/useReadUser.js","Hooks/Users/useListUserServices.js","Hooks/Users/useListUserTypes.js","Pages/User/SubNavigation.js","Pages/User/UserDetail.js","Hooks/Users/useCreateUser.js","Hooks/Users/useCreateUserService.js","Hooks/Users/useCreateUserType.js","Pages/User/CreateUser.js","Hooks/Users/useUpdateUser.js","Hooks/Users/useDeleteUserService.js","Hooks/Users/useUpdateUserType.js","Hooks/Users/useDeleteUserType.js","Pages/User/EditUser.js","Pages/PageNotFound.js","Pages/AccessDenied.js","Hooks/Shifts/useSearchShifts.js","Pages/Shift/ShiftManagement.js","Hooks/Shifts/useSearchShiftTypes.js","Hooks/ShiftUsers/useCreateShiftUser.js","Hooks/ShiftUsers/useDeleteShiftUser.js","Hooks/SendQueue/useCreateSendQueueEmail.js","Pages/Shift/ShiftList.js","Hooks/Shifts/useReadShift.js","Hooks/Shifts/useListShiftTypes.js","Hooks/Shifts/useCreateShift.js","Hooks/Shifts/useCreateShiftType.js","Pages/Shift/CreateShift.js","Hooks/Shifts/useUpdateShift.js","Hooks/Shifts/useUpdateShiftType.js","Hooks/Shifts/useDeleteShiftType.js","Hooks/ShiftUsers/useListShiftUsers.js","Pages/Shift/UpdateShift.js","Hooks/Shifts/useDeleteShift.js","Pages/Shift/ShiftDetail.js","Pages/Shift/AddUserToShift.js","Pages/Alert/Start.js","Pages/Alert/Alerts.js","Pages/Alert/AddShifts.js","Hooks/Users/OneToOne/useListOneToOnes.js","Pages/OneToOne/OneToOneList.js","Hooks/Users/OneToOne/useCreateOneToOne.js","Pages/OneToOne/CreateOneToOne.js","Hooks/Users/OneToOne/useReadOneToOne.js","Hooks/Users/OneToOne/useDeleteOneToOne.js","Pages/OneToOne/OneToOneDetail.js","Hooks/Users/OneToOne/useUpdateOneToOne.js","Pages/OneToOne/EditOneToOne.js","Hooks/Users/BadgeOfMerit/useListBadgeOfMerits.js","Pages/BadgeOfMerit/BadgeOfMeritList.js","Hooks/Settings/useListBadgeOfMerits.js","Hooks/Users/BadgeOfMerit/useCreateBadgeOfMerit.js","Pages/BadgeOfMerit/CreateBadgeOfMerit.js","Hooks/Users/BadgeOfMerit/useReadBadgeOfMerit.js","Hooks/Users/BadgeOfMerit/useDeleteBadgeOfMerit.js","Pages/BadgeOfMerit/BadgeOfMeritDetail.js","Hooks/Users/BadgeOfMerit/useUpdateBadgeOfMerit.js","Pages/BadgeOfMerit/EditBadgeOfMerit.js","Pages/BadgeOfMerit/UserList.js","Hooks/Users/OtherParticipation/useListOtherParticipations.js","Pages/OtherParticipation/OtherParticipationList.js","Hooks/Settings/useListParticipationTypes.js","Hooks/Users/OtherParticipation/useCreateOtherParticipation.js","Pages/OtherParticipation/CreateOtherParticipation.js","Hooks/Users/OtherParticipation/useReadOtherParticipation.js","Hooks/Users/OtherParticipation/useDeleteOtherParticipation.js","Pages/OtherParticipation/OtherParticipationDetail.js","Hooks/Users/OtherParticipation/useUpdateOtherParticipation.js","Pages/OtherParticipation/EditOtherParticipation.js","Hooks/Users/Reminder/useListReminders.js","Pages/Reminder/ReminderList.js","Hooks/Users/Reminder/useCreateReminder.js","Pages/Reminder/CreateReminder.js","Hooks/Users/Reminder/useReadReminder.js","Hooks/Users/Reminder/useDeleteReminder.js","Pages/Reminder/ReminderDetail.js","Hooks/Users/Reminder/useUpdateReminder.js","Pages/Reminder/EditReminder.js","Hooks/Users/useListUserActivities.js","Pages/User/ActivityStatus.js","Layout/Routes.js","Reusable/Messages/Messages.js","Layout/Messages.js","Layout/MobileNavigation.js","Pages/Error.js","App.js","Utils/i18n.js","index.js"],"names":["selectedEnvironment","window","location","href","indexOf","authentication","auth","redirectUri","MessageContext","createContext","MessageContextProvider","children","useState","messages","setMessages","removeMessageAfterTimeout","id","timeout","setTimeout","filter","msg","type","Provider","value","addMessage","Array","isArray","clone","forEach","item","uuidv4","push","header","body","Error","removeMessage","useListAllSettings","settings","setSettings","rootPath","Config","api","instance","useMsal","useContext","t","useTranslation","listAllSettings","a","map","activeAccount","getActiveAccount","accounts","getAllAccounts","length","request","scopes","account","acquireTokenSilent","authResult","options","accessToken","Axios","get","result","status","data","err","response","name","message","toString","environment","console","log","useCreateStatistics","createStatistics","msgId","post","scrollTo","useReadProfile","profile","setProfile","fetchingProfile","setFetchingProfile","readProfile","useListLocations","locations","setLocations","fetchingLocations","setFetchingLocations","listLocations","useListServices","services","setServices","fetchingServices","setFetchingServices","listServices","sort","order","useListChannels","channels","setChannels","fetchingChannels","setFetchingChannels","listChannels","useListTypes","types","setTypes","fetchingTypes","setFetchingTypes","listTypes","useListTimeOfDays","timeOfDays","setTimeOfDays","fetchingTimeOfDays","setFetchingTimeOfDays","listTimeOfDays","StateContext","StateContextProvider","userDetailBackRoute","setUserDetailBackRoute","Date","getMonth","shiftMonth","setShiftMonth","getFullYear","shiftYear","setShiftYear","toISOString","shiftStartDate","setShiftStartDate","shiftService","setShiftService","shiftChannel","setShiftChannel","shiftType","setShiftType","shiftLocations","setShiftLocations","ownShiftsOnly","setOwnShiftsOnly","selectedShifts","setSelectedShifts","userName","setUserName","userLocation","setUserLocation","userService","setUserService","userType","setUserType","userActivityType","setUserActivityType","userRemote","setUserRemote","aforism","setAforism","service","setService","channel","setChannel","contactType","setContactType","contactorAge","setContactorAge","contactorCount","setContactorCount","contactorGender","setContactorGender","contactorLanguage","setContactorLanguage","previousContact","setPreviousContact","contactorRelationToFamily","setContactorRelationToFamily","familyChildAgeState","setFamilyChildAgeState","familyForm","setFamilyForm","familySocialNetwork","setFamilySocialNetwork","dialogue","setDialogue","dialogueDescription","setDialogueDescription","previousSupportSought","setPreviousSupportSought","previousSupportSources","setPreviousSupportSources","contactorID","setContactorID","authorID","setAuthorID","subjects","setSubjects","primarySubject","setPrimarySubject","contactRelatedToMedia","setContactRelatedToMedia","contactDescription","setContactDescription","contactPrimaryPurpose","setContactPrimaryPurpose","referralGiven","setReferralGiven","referralTargets","setReferralTargets","contactLength","setContactLength","userExperience","setUserExperience","contactorGaveFeedback","setContactorGaveFeedback","contactorFeedbackType","setContactorFeedbackType","contactorFeedbackDescriptions","setContactorFeedbackDescriptions","contactorFeedback","setContactorFeedback","highlightUnfilledRequiredFields","setHighlightUnfilledRequiredFields","useEffect","FirstName","LastName","tmp","Id","LocationId","Reference","globalState","clearContactData","contactDataOK","questions","find","required","route","ref","language","subjectAppliesTo","subjectChildAge","findIndex","childAge","subjectChildGender","childGender","subjectChildrenGroup","childrenGroup","subjectAdult","adult","isRelatedToMedia","descriptionRequired","saveContactData","history","statistic","description","previousSupportContactorId","previousSupportAuthorId","subs","JSON","parse","stringify","i","mediaClassification","fi","childTheme","adultTheme","themeSubjects","contactIsRelatedToMedia","createdBy","AzureADUserId","creatorName","creatorRole","IsOwner","created","city","LocationName","contactInProgress","ViewButton","props","noTitle","rest","Button","icon","color","labelPosition","size","Icon","title","YesButton","NoButton","CloseButton","ApproveButton","YesNoModal","text","method","open","setOpen","Modal","closeIcon","onClose","onOpen","content","Content","Actions","onClick","ApproveModal","withRouter","mobile","setMobileMenuOpen","cancelModalOpen","setCancelModalOpen","warningModalOpen","setWarningModalOpen","className","Container","Grid","columns","Row","stretched","Column","width","Menu","position","Item","to","exact","Image","src","alt","e","preventDefault","logout","Dropdown","Header","mobileMenuOpen","addEventListener","returnValue","createMedia","breakpoints","sm","md","lg","xl","MediaContextProvider","Media","greaterThan","lessThan","Footer","Question","selectedValue","setSelectedValue","subtitle","highlight","undefined","info","Popup","trigger","option","index","Form","Field","control","Radio","label","checked","onChange","freetext","Input","freeTextValue","setFreeText","Checkbox","disabled","limit","target","TextArea","useListAforisms","aforisms","setAforisms","listAforisms","Loading","Segment","Dimmer","active","Loader","SelectService","general","Math","floor","random","onSubmit","author","Divider","stackable","val","x","s","floated","SubNavigation","activePage","pointing","secondary","ContactType","saveModalOpen","setSaveModalOpen","saveContact","BackgroundInformation","newObj","obj","concat","PreviousSupport","validationError","setValidationError","isAuthorIDValid","charAt","regex","part","substr","match","handleAuthorID","circular","link","navigator","clipboard","readText","then","clipText","document","getElementById","Themes","theme","setTheme","subject","setSubject","currentSubject","setCurrentSubject","deleteModalOpen","setDeleteModalOpen","approveModalOpen","setApproveModalOpen","subjectToDelete","setSubjectToDelete","subjectLimitReached","config","configurations","subjectLimit","disableAddButton","themes","handleSelectTheme","handleSelectSubject","newSubjects","handleChangeSubject","handleAddSubject","handleEditSubject","sub","handleClickDelete","setSubjectAppliesTo","setSubjectAdultFreetext","subjectAdultFreeTextValue","freeTextOption","replace","List","as","setSubjectChildAge","setSubjectChildGender","setSubjectChildrenGroup","setSubjectAdult","bulleted","horizontal","SpecificInformation","subjectsRelatedToMedia","setSubjectsRelatedToMedia","first","filteredSubjects","descriptionSubtitle","Referral","Retrospective","path","sortByProperty","array","param","asc","slice","b","numbers","isNaN","parseInt","strings","PagedTableRow","row","contentKeys","collapsable","useHistory","collapsed","setCollapsed","cellContent","cellKey","targetKey","key","urlKey","rel","toLocaleDateString","toLocaleTimeString","hour","minute","ev","action","key2","key3","substring","Table","n","hideCollapsed","Cell","textAlign","cellAlign","faChevronCircleDown","colSpan","faChevronCircleUp","PagedTable","pageSize","resetPage","showPagingOnTop","tableprops","setActivePage","sortBy","setSortBy","sortedContent","setSortedContent","start","end","pagedContent","Utils","sortContent","Pagination","defaultActivePage","totalPages","ceil","firstItem","lastItem","ellipsisItem","innerWidth","onPageChange","HeaderCell","cellWidth","contentKey","sortType","Body","useListUsers","users","setUsers","fetchingUsers","setFetchingUsers","listUsers","useListActivityTypes","activityTypes","setActivityTypes","fetchingActivityTypes","setFetchingActivityTypes","listActivityTypes","UserList","locationOptions","l","Name","serviceOptions","typeOptions","ServiceId","Abbreviation","activityTypeOptions","user","viewUrl","ActivityAchieved","iconName","iconColor","filteredUsers","toLowerCase","UserServices","some","us","UserTypes","ut","TypeId","Present","ur","Remote","Value","ActivityTypeId","at","RefName","KeepOnMailingList","emailList","EmailAddress","placeholder","isMulti","unstackable","striped","celled","compact","onCopy","useReadUser","setUser","fetchingUser","setFetchingUser","readUser","useListUserServices","userServices","setUserServices","fetchingUserServices","setFetchingUserServices","listUserServices","userID","useListUserTypes","userTypes","setUserTypes","fetchingUserTypes","setFetchingUserTypes","listUserTypes","selectedPageTitle","IsEmployee","UserDetail","useParams","loadingContent","userShiftCount","UserShiftCount","UserShiftCountInPreviousSystem","inline","Username","PhoneNumber","IsActive","Description","SpecialDiet","StartDate","IsRemoteWorker","MllPhoneNumber","MllProperty","ServiceName","UserActivityType","ActivityChanged","BreakStartDate","NextOneToOne","BadgeOfMeritEarned","Message","positive","negative","back","goBack","useCreateUser","createUser","useCreateUserService","createUserService","showSuccess","useCreateUserType","createUserType","CreateUser","firstname","setFirstname","lastname","setLastname","setCity","username","setUsername","emailAddress","setEmailAddress","phoneNumber","setPhoneNumber","startDate","setStartDate","mllPhoneNumber","setMllPhoneNumber","mllProperty","setMllProperty","setDescription","specialDiet","setSpecialDiet","nextOneToOne","setNextOneToOne","keepOnMailingList","setKeepOnMailingList","setBreak","setSetBreak","breakStartDate","setBreakStartDate","isEmployee","setIsEmployee","isActive","setIsActive","onCallRemote","setOnCallRemote","selectedServices","setSelectedServices","selectedTypes","setSelectedTypes","userShiftCountInPreviousSystem","setUserShiftCountInPreviousSystem","selectedItem","present","remote","handleRemote","isRemote","handleSave","dateParts","startDateISO","split","padStart","nextOneToOneISO","breakStartDateISO","trim","code","userId","serviceId","typeId","Select","localization","dateFormat","iconPosition","closable","popupPosition","Group","handleActivityChange","useUpdateUser","updateUser","put","useDeleteUserService","deleteUserService","delete","useUpdateUserType","updateUserType","typeID","useDeleteUserType","deleteUserType","EditUser","selectedType","userTypeId","pagenotfound","pagenotfoundP","fontSize","fontWeight","PageNotFound","style","AccessDenied","useSearchShifts","shifts","setShifts","fetchingShifts","setFetchingShifts","searchShifts","searchParams","queryString","startdate","enddate","ShiftManagement","channelOptions","c","months","years","shift","typeArray","ShiftTypes","countArray","ShiftTypeUsers","ShiftUserCount","sendRequest","isSending","setIsSending","dateArray","enddateISO","params","defaultSearchDone","setDefaultSearchDone","widths","grouped","includes","newLocations","useSearchShiftTypes","shiftTypes","setShiftTypes","fetchingShiftTypes","setFetchingShiftTypes","searchShiftTypes","own","useCreateShiftUser","createShiftUser","shiftId","useDeleteShiftUser","deleteShiftUser","useCreateSendQueueEmail","createSendQueueEmail","ShiftList","detailOpen","setDetailOpen","registrationConfirmOpen","setRegistrationConfirmOpen","unregistrationConfirmOpen","setUnregistrationConfirmOpen","joinRequestConfirmOpen","setJoinRequestConfirmOpen","joinRequestConfirm","setJoinRequestConfirm","shiftInPastModalOpen","setShiftInPastModalOpen","selectedShift","setSelectedShift","refresh","setRefresh","weekdays","setWeekdays","showAllUpcomingEvents","setShowAllUpcomingEvents","sendReminder","setSendReminder","createDate","offset","d","day","getDate","setDate","typeName","startsWith","serviceColor","endsWith","channelColor","Shift","Time","StartTime","EndTime","InstructorName","InstructorPhone","ShiftUsersRegistered","ShiftUsers","ShiftUserCountLeft","getTime","InPast","UserId","actionLink","actionText","wds","num","getDay","date","wd","showAll","month","openDetail","openConfirm","register","enrollmentDate","shiftTypeId","ShiftTypeId","sendShiftReminder","ShiftId","unregister","shiftUserId","instructor","InstructorId","cc","bcc","replyTo","handleJoinRequestConfirm","time","getHours","getMinutes","usr","shiftDetail","setMonth","setYear","classname","useReadShift","setShift","fetchingShift","setFetchingShift","readShift","useListShiftTypes","listShiftTypes","useCreateShift","createShift","useCreateShiftType","createShiftType","CreateShift","timing","setTiming","startTime","setStartTime","endTime","setEndTime","shiftTypesSelection","setShiftTypesSelection","setLocation","supervisor","setSupervisor","isSaving","setIsSaving","newArray","amount","timeOfDayOptions","Rerefence","supervisors","validateTime","dates","getUTCHours","getUTCMinutes","endDate","setTimes","setPersonsOnCall","person","menuPlacement","useUpdateShift","updateShift","useUpdateShiftType","updateShiftType","useDeleteShiftType","deleteShiftType","useListShiftUsers","shiftUsers","setShiftUsers","fetchingShiftUsers","setFetchingShiftUsers","listShiftUsers","UpdateShift","errors","errTypes","usersOnCall","TypeName","sts","useDeleteShift","deleteShift","ShiftDetail","deleteShiftModalOpen","setDeleteShiftModalOpen","deleteUserModalOpen","setDeleteUserModalOpen","userToDelete","setUserToDelete","instructorName","removeUser","splice","AddUserToShift","personOnCall","setPersonOnCall","persons","Start","Alerts","setMessage","startdateISO","el","sendAlert","replaceAll","emails","Email","locObject","AddShifts","selectLink","selected","handleAddShifts","useListOneToOnes","oneToOnes","setOneToOnes","fetchingOneToOnes","setFetchingOneToOnes","listOneToOnes","OneToOneList","useCreateOneToOne","createOneToOne","CreateOneToOne","dateISO","useReadOneToOne","oneToOne","setOneToOne","fetchingOneToOne","setFetchingOneToOne","readOneToOne","oneToOneId","useDeleteOneToOne","deleteOneToOne","OneToOneDetail","modalOpen","setModalOpen","useUpdateOneToOne","updateOneToOne","oneToOneID","useListBadgeOfMerits","badgeOfMerits","setBadgeOfMerits","fetchingBadgeOfMerits","setFetchingBadgeOfMerits","listBadgeOfMerits","BadgeOfMeritList","basic","useCreateBadgeOfMerit","createBadgeOfMerit","CreateBadgeOfMerit","selectedBadgeOfMerit","setSelectedBadgeOfMerit","badgeOfMeritOptions","badge","useReadBadgeOfMerit","badgeOfMerit","setBadgeOfMerit","fetchingBadgeOfMerit","setFetchingBadgeOfMerit","readBadgeOfMerit","badgeOfMeritId","useDeleteBadgeOfMerit","deleteBadgeOfMerit","BadgeOfMeritDetail","BadgeOfMeritName","useUpdateBadgeOfMerit","updateBadgeOfMerit","badgeOfMeritID","EditBadgeOfMerit","BadgeOfMerit","serviceNames","shiftCount","BadgeName","useListOtherParticipations","otherParticipations","setOtherParticipations","fetchingOtherParticipations","setFetchingOtherParticipations","listOtherParticipations","OtherParticipationList","useListParticipationTypes","participationTypes","setParticipationTypes","fetchingParticipationTypes","setFetchingParticipationTypes","listParticipationTypes","useCreateOtherParticipation","createOtherParticipation","CreateOtherParticipation","selectedParticipationType","setSelectedParticipationType","participationTypeOptions","useReadOtherParticipation","otherParticipation","setOtherParticipation","fetchingOtherParticipation","setFetchingOtherParticipation","readOtherParticipation","participationId","useDeleteOtherParticipation","deleteOtherParticipation","OtherParticipationDetail","ParticipationTypeName","useUpdateOtherParticipation","updateOtherParticipation","otherParticipationID","EditOtherParticipation","ParticipationTypeId","useListReminders","reminders","setReminders","fetchingReminders","setFetchingReminders","listReminders","ReminderList","useCreateReminder","createReminder","CreateReminder","recipient","useReadReminder","reminder","setReminder","fetchingReminder","setFetchingReminder","readReminder","reminderId","useDeleteReminder","deleteReminder","ReminderDetail","Recipient","Subject","useUpdateReminder","updateReminder","reminderID","useListUserActivities","userActivities","setUserActivities","fetchingUserActivities","setFetchingUserActivities","listUserActivities","ActivityStatus","Year","y","Month","Achieved","ShiftCount","Routes","component","EditOneToOne","BOMUserList","EditReminder","InfoMessage","onDismiss","loading","PositiveMessage","optional","WarningMessage","warning","ErrorMessage","FetchingMessage","SavingMessage","Messages","marginBottom","adminOpen","setAdminOpen","Sidebar","Pushable","fixed","animation","onHide","vertical","visible","Pusher","dimmed","MsalContext","marginTop","App","interactionType","InteractionType","Redirect","authenticationRequest","errorComponent","ErrorComponent","loadingComponent","LoadingComponent","i18n","use","Backend","LanguageDetector","initReactI18next","init","fallbackLng","debug","whitelist","interpolation","escapeValue","pca","PublicClientApplication","ReactDOM","render","fallback"],"mappings":"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","file":"static/js/main.bf2dd1e7.chunk.js","sourcesContent":["\r\nconst config = {\r\n \"development\": {\r\n \"environment\": \"development\",\r\n \"api\": {\r\n \"rootPath\": \"https://statistics-api-dev.azurewebsites.net\",\r\n \"scopes\": [\"https://statistics-api-dev.azurewebsites.net/user_impersonation\"],\r\n },\r\n \"authentication\": {\r\n \"auth\": {\r\n \"clientId\": \"c60a53b7-e9a7-482d-94f7-21653770ccee\",\r\n \"authority\": \"https://login.microsoftonline.com/c76a02d4-bb26-466d-8b8f-135ed699f407\",\r\n \"redirectUri\": \"https://statistics-front-dev.azurewebsites.net/.auth/login/aad/callback\"\r\n },\r\n \"cache\": {\r\n \"cacheLocation\": \"sessionStorage\", // localStorage || sessionStorage\r\n \"storeAuthStateInCookie\": false\r\n }\r\n },\r\n \"configurations\": {\r\n \"subjectLimit\": 3\r\n }\r\n },\r\n \"production\": {\r\n \"environment\": \"production\",\r\n \"api\": {\r\n \"rootPath\": \"https://statistics-api-prod.azurewebsites.net\",\r\n \"scopes\": [\"https://statistics-api-prod.azurewebsites.net/user_impersonation\"],\r\n },\r\n \"authentication\": {\r\n \"auth\": {\r\n \"clientId\": \"41777de4-7b03-4077-b39d-9c6f6ea2d615\",\r\n \"authority\": \"https://login.microsoftonline.com/c76a02d4-bb26-466d-8b8f-135ed699f407\",\r\n //\"redirectUri\": \"https://statistics-front-prod.azurewebsites.net/.auth/login/aad/callback\"\r\n \"redirectUri\": \"https://paivystys.mll.fi/.auth/login/aad/callback\"\r\n },\r\n \"cache\": {\r\n \"cacheLocation\": \"sessionStorage\", // localStorage || sessionStorage\r\n \"storeAuthStateInCookie\": false\r\n }\r\n },\r\n \"configurations\": {\r\n \"subjectLimit\": 3\r\n }\r\n },\r\n \"configurations\": {\r\n \"subjectLimit\": 3\r\n },\r\n}\r\n\r\n// Choose environment [config.development || config.production ]\r\nlet selectedEnvironment = config.production;\r\n\r\n// Set localhost redirect url\r\nif (window.location.href.indexOf(\"localhost\") !== -1) {\r\n selectedEnvironment.authentication.auth.redirectUri = \"http://localhost:3000/.auth/login/aad/callback\";\r\n}\r\n\r\n// Export selected environment\r\nexport default selectedEnvironment;\r\n","import React, { createContext, useState } from 'react'; \r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nexport const MessageContext = createContext();\r\n\r\n/** Message provider for the application\r\n * Add all message properties and methods here. */\r\nconst MessageContextProvider = ({children}) => {\r\n\r\n const [ messages, setMessages ] = useState([]);\r\n\r\n // Remove message from the messages array (dont remove errors automatically!)\r\n const removeMessageAfterTimeout = (id, timeout) => {\r\n return setTimeout(() => {\r\n setMessages(messages => {\r\n return messages.filter(msg => {\r\n if (msg.type === 'error') return true;\r\n if (msg.id === id) return false;\r\n return true;\r\n });\r\n });\r\n }, timeout);\r\n }\r\n\r\n /** Function adds message to the container\r\n * @param {object || array} msg - Message object or array of objects \r\n * @example\r\n * Array: [{type:\"\", header:\"\", body:\"\"},{type:\"\", header:\"\", body:\"\"}]\r\n * Object: {type:\"\", header:\"\", body:\"\"} */\r\n const addMessage = (msg) => {\r\n\r\n // Message is array of objects \r\n if (Array.isArray(msg)) {\r\n\r\n return setMessages(messages => {\r\n const clone = [...messages]; //cloneArray(messages);\r\n msg.forEach(item => {\r\n item.id = uuidv4();\r\n clone.push(item);\r\n let timeout = 5000\r\n if(item.type==='warning') timeout = 8000\r\n removeMessageAfterTimeout(item.id,timeout);\r\n });\r\n return clone;\r\n });\r\n\r\n // Message is object \r\n } else if (msg && msg.header && msg.body && msg.type) {\r\n \r\n msg.id = uuidv4();\r\n setMessages(messages => {\r\n const clone = [...messages]; //cloneArray(messages);\r\n clone.push(msg);\r\n let timeout = 5000\r\n if(msg.type==='warning') timeout = 8000\r\n removeMessageAfterTimeout(msg.id,timeout);\r\n return clone;\r\n });\r\n return msg.id;\r\n \r\n // Error\r\n } else {\r\n throw new Error(\"Message is not an object or array!\");\r\n }\r\n }\r\n\r\n /* Function removes message from the container */\r\n const removeMessage = (id) => {\r\n setMessages(messages => {\r\n return messages.filter(item => {\r\n return item.id !== id; \r\n });\r\n });\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport default MessageContextProvider;","import { useState, useContext } from 'react';\r\nimport Axios from 'axios';\r\nimport { useMsal } from \"@azure/msal-react\";\r\nimport Config from './../../Config/Config';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useListAllSettings = () => {\r\n\r\n const [ settings, setSettings ] = useState([]);\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { t } = useTranslation();\r\n\r\n /** List all settings */\r\n const listAllSettings = async () => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n const result = await Axios.get(rootPath + \"/api/v1/settings\", options);\r\n\r\n if (result && result.status && result.status === 200 && result.data) setSettings(result.data);\r\n\r\n return result;\r\n\r\n } catch (error) {\r\n\r\n const err = error && error.response ? error.response : error;\r\n const name = err.name || \"\";\r\n const message = err.message || \"\";\r\n const status = err.status || 500;\r\n \r\n\r\n if (name === \"InteractionRequiredAuthError\") {\r\n addMessage({ type: \"error\", header: 'InteractionRequiredAuthError', body: message.toString() });\r\n return error;\r\n }\r\n\r\n switch(status){\r\n case 401:\r\n addMessage({ type: \"error\", header: t('errors.fetchingSettingsFailed'), body: t('errors.noAuthentication') });\r\n break;\r\n case 403:\r\n addMessage({ type: \"error\", header: t('errors.fetchingSettingsFailed'), body: t('errors.noPermission') });\r\n break;\r\n case 500:\r\n addMessage({ type: \"error\", header: t('errors.fetchingSettingsFailed'), body: t('errors.systemError') });\r\n break;\r\n default:\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingSettingsFailed') });\r\n break;\r\n }\r\n\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n\r\n return error;\r\n\r\n }\r\n }\r\n\r\n return { settings, listAllSettings };\r\n\r\n}\r\n\r\nexport default useListAllSettings;\r\n","import { useContext } from 'react';\r\nimport Axios from 'axios';\r\nimport Config from './../../Config/Config';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateStatistics = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n\r\n /** Create statistic\r\n * @param {string} -type - type of the statistics [ 'vpn' || 'lnpn' ] */\r\n const createStatistics = async (type, body) => {\r\n try {\r\n \r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingContact')});\r\n\r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n \r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n if (type === 'vpn') result = await Axios.post(rootPath + \"/api/v1/statistics/vpn\", body, options);\r\n if (type === 'lnpn') result = await Axios.post(rootPath + \"/api/v1/statistics/lnpn\", body, options); \r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n addMessage({type: \"success\", header: t('message.contactSaved'), body: t('message.continueToNextContact')});\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingContactFailed') });\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingContactFailed') });\r\n window.scrollTo(0,0);\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createStatistics };\r\n\r\n}\r\n\r\nexport default useCreateStatistics;","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useReadProfile = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ profile, setProfile ] = useState([]);\r\n const [ fetchingProfile, setFetchingProfile ] = useState(true);\r\n\r\n /** list contracts\r\n * @returns {object} - user profile */ \r\n const readProfile = async (type) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingProfile')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n \r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/profile\", options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200 && result.data) {\r\n setProfile(result.data);\r\n setFetchingProfile(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.profileNotFound') });\r\n setFetchingProfile(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingProfileFailed') });\r\n setFetchingProfile(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingProfileFailed') });\r\n setFetchingProfile(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { profile, fetchingProfile, readProfile };\r\n\r\n}\r\n\r\nexport default useReadProfile;\r\n","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListLocations = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage } = useContext(MessageContext);\r\n const [ locations, setLocations ] = useState([]);\r\n const [ fetchingLocations, setFetchingLocations ] = useState(true);\r\n\r\n /** list locations\r\n * @returns {array} - array of locations */ \r\n const listLocations = async () => {\r\n try {\r\n\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/locations\", options);\r\n\r\n \r\n if (result && result.status === 200 && result.data) {\r\n setLocations(result.data.data);\r\n setFetchingLocations(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.locationsNotFound') });\r\n setFetchingLocations(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingLocationsFailed') });\r\n setFetchingLocations(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingLocationsFailed') });\r\n setFetchingLocations(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { locations, fetchingLocations, listLocations };\r\n}\r\n\r\nexport default useListLocations;","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListServices = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage } = useContext(MessageContext);\r\n const [ services, setServices ] = useState([]);\r\n const [ fetchingServices, setFetchingServices ] = useState(true);\r\n\r\n /** list services\r\n * @param {string} sort - sort field \r\n * @param {string} order - sort order (asc/desc) */ \r\n const listServices = async (sort='Name', order='asc') => {\r\n try {\r\n\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/services?sort=\" + sort + \"&order=\" + order, options);\r\n\r\n \r\n if (result && result.status === 200 && result.data) {\r\n setServices(result.data.data);\r\n setFetchingServices(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.servicesNotFound') });\r\n setFetchingServices(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingServicesFailed') });\r\n setFetchingServices(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingServicesFailed') });\r\n setFetchingServices(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { services, fetchingServices, listServices };\r\n}\r\n\r\nexport default useListServices;","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListChannels = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage } = useContext(MessageContext);\r\n const [ channels, setChannels ] = useState([]);\r\n const [ fetchingChannels, setFetchingChannels ] = useState(true);\r\n\r\n /** list channels\r\n * @returns {array} - array of channels */ \r\n const listChannels = async () => {\r\n try {\r\n\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/channels\", options);\r\n\r\n \r\n if (result && result.status === 200 && result.data) {\r\n setChannels(result.data.data);\r\n setFetchingChannels(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.channelsNotFound') });\r\n setFetchingChannels(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingChannelsFailed') });\r\n setFetchingChannels(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingChannelsFailed') });\r\n setFetchingChannels(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { channels, fetchingChannels, listChannels };\r\n}\r\n\r\nexport default useListChannels;","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListTypes = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage } = useContext(MessageContext);\r\n const [ types, setTypes ] = useState([]);\r\n const [ fetchingTypes, setFetchingTypes ] = useState(true);\r\n\r\n /** list types\r\n * @returns {array} - array of types */ \r\n const listTypes = async () => {\r\n try {\r\n\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/types\", options);\r\n\r\n \r\n if (result && result.status === 200 && result.data) {\r\n setTypes(result.data.data);\r\n setFetchingTypes(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.typesNotFound') });\r\n setFetchingTypes(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingTypesFailed') });\r\n setFetchingTypes(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingTypesFailed') });\r\n setFetchingTypes(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { types, fetchingTypes, listTypes };\r\n}\r\n\r\nexport default useListTypes;","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListTimeOfDays = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage } = useContext(MessageContext);\r\n const [ timeOfDays, setTimeOfDays ] = useState([]);\r\n const [ fetchingTimeOfDays, setFetchingTimeOfDays ] = useState(true);\r\n\r\n /** list time of days\r\n * @param {string} sort - sort field \r\n * @param {string} order - sort order (asc/desc) */ \r\n const listTimeOfDays = async (sort='StartTime', order='asc') => {\r\n try {\r\n\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/timeofdays?sort=\" + sort + \"&order=\" + order, options);\r\n\r\n \r\n if (result && result.status === 200 && result.data) {\r\n setTimeOfDays(result.data.data);\r\n setFetchingTimeOfDays(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.timeOfDaysNotFound') });\r\n setFetchingTimeOfDays(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingTimeOfDaysFailed') });\r\n setFetchingTimeOfDays(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingTimeOfDaysFailed') });\r\n setFetchingTimeOfDays(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { timeOfDays, fetchingTimeOfDays, listTimeOfDays };\r\n}\r\n\r\nexport default useListTimeOfDays;","import React, { useState, createContext, useEffect } from 'react';\r\nimport useListAllSettings from '../Hooks/Settings/useListAllSettings';\r\nimport useCreateStatistics from '../Hooks/Statistics/useCreateStatistics';\r\nimport useReadProfile from '../Hooks/Users/useReadProfile';\r\nimport useListLocations from '../Hooks/Settings/useListLocations';\r\nimport useListServices from '../Hooks/Settings/useListServices';\r\nimport useListChannels from '../Hooks/Settings/useListChannels';\r\nimport useListTypes from '../Hooks/Settings/useListTypes';\r\nimport useListTimeOfDays from '../Hooks/Settings/useListTimeOfDays';\r\n//import { useMsal } from \"@azure/msal-react\";\r\n\r\nexport const StateContext = createContext();\r\n\r\nconst StateContextProvider = ({children}) => {\r\n\r\n //const { accounts } = useMsal();\r\n const { profile, fetchingProfile, readProfile } = useReadProfile();\r\n\r\n // return route for user detail (back button returns to this route)\r\n const [ userDetailBackRoute, setUserDetailBackRoute ] = useState('/')\r\n\r\n // data for value lists etc\r\n const { locations, listLocations } = useListLocations();\r\n const { services, listServices } = useListServices();\r\n const { channels, listChannels } = useListChannels();\r\n const { types, listTypes } = useListTypes();\r\n const { timeOfDays, listTimeOfDays } = useListTimeOfDays();\r\n\r\n // filters in shift search\r\n const [ shiftMonth, setShiftMonth ] = useState(new Date().getMonth() + 1);\r\n const [ shiftYear, setShiftYear ] = useState(new Date().getFullYear());\r\n const [ shiftStartDate, setShiftStartDate ] = useState(new Date().toISOString());\r\n\r\n const [ shiftService, setShiftService ] = useState('');\r\n const [ shiftChannel, setShiftChannel ] = useState('');\r\n const [ shiftType, setShiftType ] = useState('');\r\n const [ shiftLocations, setShiftLocations ] = useState([]);\r\n const [ ownShiftsOnly, setOwnShiftsOnly ] = useState(false);\r\n\r\n // array of shifts for alerts\r\n\r\n const [ selectedShifts, setSelectedShifts ] = useState([]);\r\n\r\n // filters in user search\r\n //const [ userActiveOnly, setUserActiveOnly ] = useState(true);\r\n const [ userName, setUserName ] = useState('');\r\n const [ userLocation, setUserLocation ] = useState('');\r\n const [ userService, setUserService ] = useState('');\r\n const [ userType, setUserType ] = useState('');\r\n const [ userActivityType, setUserActivityType ] = useState('');\r\n const [ userRemote, setUserRemote ] = useState('');\r\n\r\n // for statistics\r\n\r\n const { createStatistics } = useCreateStatistics();\r\n\r\n const { settings, listAllSettings } = useListAllSettings();\r\n const [ aforism, setAforism ] = useState('');\r\n\r\n const [ service, setService ] = useState('');\r\n const [ channel, setChannel ] = useState('');\r\n\r\n const [ contactType, setContactType ] = useState('');\r\n const [ contactorAge, setContactorAge ] = useState('');\r\n const [ contactorCount, setContactorCount ] = useState('');\r\n const [ contactorGender, setContactorGender ] = useState('');\r\n const [ contactorLanguage, setContactorLanguage ] = useState('');\r\n const [ previousContact, setPreviousContact ] = useState('');\r\n const [ contactorRelationToFamily, setContactorRelationToFamily ] = useState('');\r\n const [ familyChildAgeState, setFamilyChildAgeState ] = useState([]);\r\n const [ familyForm, setFamilyForm ] = useState('');\r\n const [ familySocialNetwork, setFamilySocialNetwork ] = useState('');\r\n const [ dialogue, setDialogue ] = useState(true);\r\n const [ dialogueDescription, setDialogueDescription ] = useState('');\r\n\r\n const [ previousSupportSought, setPreviousSupportSought ] = useState('');\r\n const [ previousSupportSources, setPreviousSupportSources ] = useState([]);\r\n const [ contactorID, setContactorID ] = useState('');\r\n const [ authorID, setAuthorID ] = useState('');\r\n\r\n const [ subjects, setSubjects ] = useState([]);\r\n\r\n const [ primarySubject, setPrimarySubject ] = useState('');\r\n const [ contactRelatedToMedia, setContactRelatedToMedia ] = useState('');\r\n const [ contactDescription, setContactDescription ] = useState('');\r\n const [ contactPrimaryPurpose, setContactPrimaryPurpose ] = useState([]);\r\n\r\n const [ referralGiven, setReferralGiven ] = useState('');\r\n const [ referralTargets, setReferralTargets ] = useState([]);\r\n\r\n const [ contactLength, setContactLength ] = useState('');\r\n const [ userExperience, setUserExperience ] = useState('');\r\n const [ contactorGaveFeedback, setContactorGaveFeedback ] = useState('');\r\n const [ contactorFeedbackType, setContactorFeedbackType ] = useState('');\r\n const [ contactorFeedbackDescriptions, setContactorFeedbackDescriptions ] = useState([]);\r\n const [ contactorFeedback, setContactorFeedback ] = useState('');\r\n\r\n const [ highlightUnfilledRequiredFields, setHighlightUnfilledRequiredFields ] = useState(false);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n await listAllSettings();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n //await readUserProfile();\r\n await readProfile();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const name = (profile.FirstName || '') + ' ' + (profile.LastName || '')\r\n\r\n // Fetch locations\r\n useEffect(() => {\r\n (async () => {\r\n await listLocations();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n \r\n // Fetch services\r\n useEffect(() => {\r\n (async () => {\r\n await listServices();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // Fetch channels\r\n useEffect(() => {\r\n (async () => {\r\n await listChannels();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // Fetch types\r\n useEffect(() => {\r\n (async () => {\r\n await listTypes();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // Fetch types\r\n useEffect(() => {\r\n (async () => {\r\n await listTimeOfDays();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // set default locations for shift search\r\n useEffect(() => {\r\n let tmp = []\r\n locations.map(item => {\r\n if(item.Id === profile.LocationId || item.Reference === 'remote'){\r\n tmp.push(item.Id)\r\n }\r\n })\r\n setShiftLocations(tmp)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[locations,profile]);\r\n\r\n const globalState = {\r\n name,\r\n settings, listAllSettings,\r\n aforism, setAforism,\r\n\r\n service, setService,\r\n channel, setChannel,\r\n contactType, setContactType,\r\n\r\n contactorAge, setContactorAge,\r\n contactorCount, setContactorCount,\r\n contactorGender, setContactorGender,\r\n contactorLanguage, setContactorLanguage,\r\n previousContact, setPreviousContact,\r\n contactorRelationToFamily, setContactorRelationToFamily,\r\n familyChildAgeState, setFamilyChildAgeState,\r\n familyForm, setFamilyForm,\r\n familySocialNetwork, setFamilySocialNetwork,\r\n dialogue, setDialogue,\r\n dialogueDescription, setDialogueDescription,\r\n\r\n previousSupportSought, setPreviousSupportSought,\r\n previousSupportSources, setPreviousSupportSources,\r\n contactorID, setContactorID,\r\n authorID, setAuthorID,\r\n\r\n subjects, setSubjects,\r\n\r\n primarySubject, setPrimarySubject,\r\n contactRelatedToMedia, setContactRelatedToMedia,\r\n contactDescription, setContactDescription,\r\n contactPrimaryPurpose, setContactPrimaryPurpose,\r\n\r\n referralGiven, setReferralGiven,\r\n referralTargets, setReferralTargets,\r\n\r\n contactLength, setContactLength,\r\n userExperience, setUserExperience,\r\n contactorGaveFeedback, setContactorGaveFeedback,\r\n contactorFeedbackType, setContactorFeedbackType,\r\n contactorFeedbackDescriptions, setContactorFeedbackDescriptions,\r\n contactorFeedback, setContactorFeedback,\r\n\r\n shiftMonth, setShiftMonth,\r\n shiftYear, setShiftYear,\r\n shiftStartDate, setShiftStartDate,\r\n shiftService, setShiftService,\r\n shiftChannel, setShiftChannel,\r\n shiftType, setShiftType,\r\n shiftLocations, setShiftLocations,\r\n ownShiftsOnly, setOwnShiftsOnly,\r\n\r\n selectedShifts, setSelectedShifts,\r\n\r\n //userActiveOnly, setUserActiveOnly,\r\n userName, setUserName,\r\n userLocation, setUserLocation,\r\n userService, setUserService,\r\n userType, setUserType,\r\n userActivityType, setUserActivityType,\r\n userRemote, setUserRemote\r\n }\r\n\r\n const clearContactData = () => {\r\n setContactType('');\r\n setContactorAge('');\r\n setContactorCount('');\r\n setContactorGender('');\r\n setContactorLanguage('');\r\n setPreviousContact('');\r\n setContactorRelationToFamily('');\r\n setFamilyChildAgeState([]);\r\n setFamilyForm('');\r\n setFamilySocialNetwork('');\r\n setDialogue(true);\r\n setDialogueDescription('');\r\n\r\n setPreviousSupportSought('');\r\n setPreviousSupportSources([]);\r\n setContactorID('');\r\n setAuthorID('');\r\n\r\n setSubjects([]);\r\n\r\n setPrimarySubject('');\r\n setContactRelatedToMedia('');\r\n setContactDescription('');\r\n setContactPrimaryPurpose([]);\r\n\r\n setReferralGiven('');\r\n setReferralTargets([]);\r\n\r\n setContactLength('');\r\n setUserExperience('');\r\n setContactorGaveFeedback('');\r\n setContactorFeedbackType('');\r\n setContactorFeedbackDescriptions([]);\r\n setContactorFeedback('');\r\n\r\n setHighlightUnfilledRequiredFields(false);\r\n }\r\n\r\n const contactInProgress = () => {\r\n if(contactType) return true;\r\n \r\n if(contactorAge) return true;\r\n if(contactorCount) return true;\r\n if(contactorGender) return true;\r\n if(contactorLanguage) return true;\r\n if(previousContact) return true;\r\n if(contactorRelationToFamily) return true;\r\n if(familyChildAgeState.length>0) return true;\r\n if(familyForm) return true;\r\n if(familySocialNetwork) return true;\r\n if(!dialogue) return true;\r\n if(dialogueDescription !== '') return true;\r\n\r\n if(previousSupportSought) return true;\r\n if(previousSupportSources.length>0) return true;\r\n if(contactorID !== '') return true;\r\n if(authorID !== '') return true;\r\n\r\n if(subjects.length>0) return true;\r\n\r\n if(primarySubject) return true;\r\n if(contactRelatedToMedia) return true;\r\n if(contactDescription !== '') return true;\r\n if(contactPrimaryPurpose.length>0) return true;\r\n\r\n if(referralGiven) return true;\r\n if(referralTargets.length>0) return true;\r\n\r\n if(contactLength) return true;\r\n if(userExperience) return true;\r\n if(contactorGaveFeedback) return true;\r\n if(contactorFeedbackType) return true;\r\n if(contactorFeedbackDescriptions.length>0) return true;\r\n if(contactorFeedback !== '') return true;\r\n\r\n return false;\r\n }\r\n\r\n const contactDataOK = () => {\r\n \r\n if(service){\r\n let questions = []\r\n if(service.type === 'vpn') questions = settings.find(item => item.type === 'vpn') || [];\r\n if(service.type === 'lnpn') questions = settings.find(item => item.type === 'lnpn') || [];\r\n \r\n //contact type\r\n if(questions.contactType.required===true && !contactType) return { result: false, route: '/contact/contacttype' };\r\n\r\n if(contactType.ref==='silentContact') return { result: true }\r\n if(contactType.ref==='excludedContact') return { result: true }\r\n\r\n //background information\r\n if(questions.contactorAge.required===true && !contactorAge) return { result: false, route: '/contact/backgroundinformation' };\r\n if(questions.contactorGender.required===true && !contactorGender) return { result: false, route: '/contact/backgroundinformation' };\r\n switch(service.type) {\r\n case \"vpn\":\r\n if(questions.contactorRelationToFamily.required===true && !contactorRelationToFamily) return { result: false, route: '/contact/backgroundinformation' };\r\n if(questions.familyChildAgeState.required===true && familyChildAgeState.length===0) return { result: false, route: '/contact/backgroundinformation' };\r\n if(questions.familyForm.required===true && !familyForm) return { result: false, route: '/contact/backgroundinformation' };\r\n if(questions.familySocialNetwork.required===true && !familySocialNetwork) return { result: false, route: '/contact/backgroundinformation' };\r\n break;\r\n case \"lnpn\":\r\n if(questions.contactorCount.required===true && !contactorCount) return { result: false, route: '/contact/backgroundinformation' };\r\n if(service.language==='sv' && questions.contactorLanguage.required===true && !contactorLanguage) return { result: false, route: '/contact/backgroundinformation' };\r\n if(channel.ref === 'phone' && questions.previousContact.required===true && !previousContact) return { result: false, route: '/contact/backgroundinformation' };\r\n if(channel.ref === 'chat' && questions.previousContact.required===true && !previousContact) return { result: false, route: '/contact/backgroundinformation' };\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if(!dialogue) return { result: true }\r\n\r\n //previous support\r\n if(questions.previousSupportSought.required===true && !previousSupportSought) return { result: false, route: '/contact/previoussupport' };\r\n if(previousSupportSought.ref==='yes' && questions.previousSupportSources.required===true && previousSupportSources.length===0) return { result: false, route: '/contact/previoussupport' };\r\n if(channel.ref==='internetletter' && questions.authorID.required===true && authorID==='') return { result: false, route: '/contact/previoussupport' };\r\n\r\n //subjects\r\n if(subjects.length===0) return { result: false, route: '/contact/themes' };\r\n\r\n if(service.type==='vpn') {\r\n //subject applies to\r\n if(questions.subjectAppliesTo.required===true && subjects.find(item => item.subjectAppliesTo.length===0)) return { result: false, route: '/contact/themes' };\r\n //if subject applies to child and child age is required\r\n if(questions.subjectChildAge.required===true && \r\n subjects.find(item =>\r\n item.subjectAppliesTo.findIndex(item => item.ref==='child')!==-1 && \r\n item.childAge.length===0 \r\n )\r\n ) return { result: false, route: '/contact/themes' };\r\n //if subject applies to child and child gender is required\r\n if(questions.subjectChildGender.required===true && \r\n subjects.find(item =>\r\n item.subjectAppliesTo.findIndex(item => item.ref==='child')!==-1 && \r\n item.childGender.length===0 \r\n )\r\n ) return { result: false, route: '/contact/themes' };\r\n //if subject applies to children and children group is required\r\n if(questions.subjectChildrenGroup.required===true && \r\n subjects.find(item =>\r\n item.subjectAppliesTo.findIndex(item => item.ref==='children')!==-1 && \r\n item.childrenGroup.length===0 \r\n )\r\n ) return { result: false, route: '/contact/themes' };\r\n //if subject applies to adult and adult is required\r\n if(questions.subjectAdult.required===true && \r\n subjects.find(item =>\r\n item.subjectAppliesTo.findIndex(item => item.ref==='adult')!==-1 && \r\n item.adult.length===0 \r\n )\r\n ) return { result: false, route: '/contact/themes' };\r\n }\r\n\r\n //specific information\r\n if(questions.primarySubject.required===true && !primarySubject) return { result: false, route: '/contact/specificinformation' };\r\n if(questions.contactRelatedToMedia.required===true && !contactRelatedToMedia) return { result: false, route: '/contact/specificinformation' };\r\n if(contactRelatedToMedia.ref==='yes' && subjects.filter(item => item.isRelatedToMedia===true).length===0) return { result: false, route: '/contact/specificinformation' };\r\n if(questions.contactDescription.required===true && contactDescription==='') return { result: false, route: '/contact/specificinformation' };\r\n if(contactRelatedToMedia.ref==='yes' && contactDescription==='') return { result: false, route: '/contact/specificinformation' };\r\n if(subjects.filter(item => item.descriptionRequired===true).length>0 && contactDescription==='') return { result: false, route: '/contact/specificinformation' };\r\n if(questions.contactPrimaryPurpose.required===true && contactPrimaryPurpose.length===0) return { result: false, route: '/contact/specificinformation' };\r\n\r\n //referral\r\n if(questions.referralGiven.required===true && !referralGiven) return { result: false, route: '/contact/referral' };\r\n if(referralGiven.ref==='yes' && questions.referralTargets.required===true && referralTargets.length===0) return { result: false, route: '/contact/referral' };\r\n\r\n //retrospective\r\n if(questions.contactLength.required===true && !contactLength) return { result: false, route: '/contact/retrospective' };\r\n if(questions.userExperience.required===true && !userExperience) return { result: false, route: '/contact/retrospective' };\r\n if(questions.contactorGaveFeedback.required===true && !contactorGaveFeedback) return { result: false, route: '/contact/retrospective' };\r\n if(contactorGaveFeedback.ref==='yes') {\r\n if(questions.contactorFeedbackType.required===true && !contactorFeedbackType) return { result: false, route: '/contact/retrospective' };\r\n if(contactorFeedbackType.ref==='positive' && questions.contactorFeedbackDescriptions.required===true && contactorFeedbackDescriptions.length===0) return { result: false, route: '/contact/retrospective' };\r\n if(questions.contactorFeedback.required===true && contactorFeedback==='') return { result: false, route: '/contact/retrospective' };\r\n };\r\n\r\n return { result: true };\r\n } else { \r\n return { result: false }\r\n }\r\n }\r\n\r\n const saveContactData = async (history) => {\r\n try {\r\n \r\n // Validate\r\n if(contactDataOK().result){\r\n \r\n // Create object\r\n let statistic = {};\r\n let result = null;\r\n\r\n statistic.service = service\r\n statistic.channel = channel\r\n statistic.contactType = contactType || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n\r\n //if contact type is not conversation contact, no other information is needed -> clear data\r\n //if(contactType.ref!=='conversationContact') clearContactData();\r\n\r\n if(contactType.ref==='conversationContact'){\r\n statistic.contactorAge = contactorAge || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.contactorGender = contactorGender || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n\r\n if(service.type==='vpn'){\r\n if(contactorRelationToFamily && !contactorRelationToFamily.description) contactorRelationToFamily.description = \"\";\r\n if(familyForm && !familyForm.description) familyForm.description = \"\";\r\n \r\n statistic.contactorRelationToFamily = contactorRelationToFamily || {\"ref\": \"\", \"name\": { \"fi\": \"\" }, \"description\": \"\"}\r\n statistic.familyChildAgeState = familyChildAgeState\r\n statistic.familyForm = familyForm || {\"ref\": \"\", \"name\": { \"fi\": \"\" }, \"description\": \"\"}\r\n statistic.familySocialNetwork = familySocialNetwork || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n }\r\n if(service.type==='lnpn'){\r\n statistic.contactorCount = contactorCount || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.previousContact = previousContact || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.language = contactorLanguage || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.dialogue = dialogue\r\n statistic.dialogueDescription = dialogueDescription\r\n }\r\n } else {\r\n statistic.contactorAge = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.contactorGender = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n\r\n if(service.type==='vpn'){\r\n statistic.contactorRelationToFamily = {\"ref\": \"\", \"name\": { \"fi\": \"\" }, \"description\": \"\"}\r\n statistic.familyChildAgeState = []\r\n statistic.familyForm = {\"ref\": \"\", \"name\": { \"fi\": \"\" }, \"description\": \"\"}\r\n statistic.familySocialNetwork = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n }\r\n if(service.type==='lnpn'){\r\n statistic.contactorCount = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.previousContact = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.language = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.dialogue = true\r\n statistic.dialogueDescription = \"\"\r\n }\r\n }\r\n\r\n //if there was no dialog in contact, no other information is needed -> clear data\r\n //if(!dialogue) clearContactData();\r\n\r\n if(contactType.ref==='conversationContact' && dialogue){\r\n\r\n statistic.previousSupportSought = previousSupportSought || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.previousSupportSources = previousSupportSources\r\n statistic.previousSupportContactorId = contactorID ? contactorID : '0'\r\n statistic.previousSupportAuthorId = authorID ? authorID : '0'\r\n\r\n // if subject is not related to media, remove media classification\r\n let subs = JSON.parse(JSON.stringify(subjects));\r\n for(let i=0;i item.ref==='child' || item.ref==='children')===-1){\r\n subs[i].childTheme.ref=\"\";\r\n subs[i].childTheme.name.fi=\"\";\r\n }\r\n // if subject is not related to child, remove additional information about child\r\n if(subs[i].subjectAppliesTo.findIndex(item => item.ref==='child')===-1){\r\n subs[i].childAge=[];\r\n subs[i].childGender=[];\r\n }\r\n // if subject is not related to child group, remove additional information about child group\r\n if(subs[i].subjectAppliesTo.findIndex(item => item.ref==='children')===-1){\r\n subs[i].childrenGroup=[];\r\n }\r\n // if subject is not related to adult, remove adult theme\r\n if(subs[i].subjectAppliesTo.findIndex(item => item.ref==='adult')===-1){\r\n subs[i].adultTheme.ref=\"\";\r\n subs[i].adultTheme.name.fi=\"\";\r\n subs[i].adult=[];\r\n }\r\n }\r\n }\r\n statistic.themeSubjects = subs\r\n statistic.primarySubject = primarySubject || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.contactIsRelatedToMedia = contactRelatedToMedia || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.contactDescription = contactDescription\r\n statistic.contactPrimaryPurpose = contactPrimaryPurpose\r\n statistic.referralGiven = referralGiven || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.referralTargets = referralTargets\r\n statistic.contactLength = contactLength || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.userExperience = userExperience || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.contactorGaveFeedback = contactorGaveFeedback || {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.contactorFeedbackType = contactorFeedbackType || {\"ref\": \"\", \"name\": {\"fi\": \"\"}}\r\n statistic.contactorFeedbackDescriptions = contactorFeedbackDescriptions\r\n statistic.contactorFeedback = contactorFeedback\r\n } else {\r\n statistic.previousSupportSought = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.previousSupportSources = []\r\n statistic.previousSupportContactorId = '0'\r\n statistic.previousSupportAuthorId = '0'\r\n statistic.themeSubjects = []\r\n statistic.primarySubject = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.contactIsRelatedToMedia = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.contactDescription = \"\"\r\n statistic.contactPrimaryPurpose = []\r\n statistic.referralGiven = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.referralTargets = []\r\n statistic.contactLength = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.userExperience = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.contactorGaveFeedback = {\"ref\": \"\", \"name\": { \"fi\": \"\" }}\r\n statistic.contactorFeedbackType = {\"ref\": \"\", \"name\": {\"fi\": \"\"}}\r\n statistic.contactorFeedbackDescriptions = []\r\n statistic.contactorFeedback = \"\"\r\n }\r\n statistic.createdBy = profile.AzureADUserId || \"\"\r\n statistic.creatorName = name || \"\"\r\n statistic.creatorRole = profile.IsOwner ? 'työntekijä' : 'päivystäjä'\r\n statistic.created = new Date().toISOString()\r\n statistic.city = profile.LocationName || \"\"\r\n \r\n if(service.type==='vpn') result = await createStatistics('vpn', statistic)\r\n if(service.type==='lnpn') result = await createStatistics('lnpn', statistic)\r\n \r\n //console.log(\"statistic\");\r\n //console.log(statistic);\r\n \r\n //console.log(\"result\");\r\n //console.log(result);\r\n \r\n if(result.status === 201) {\r\n history.push(\"/contact/contacttype\");\r\n clearContactData();\r\n setHighlightUnfilledRequiredFields(false);\r\n }\r\n } else {\r\n history.push(contactDataOK().route);\r\n }\r\n \r\n } catch (error) {\r\n if(error && error.response) return(error.response);\r\n return(error);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n\r\n}\r\n\r\nexport default StateContextProvider;\r\n","import React from 'react';\r\nimport { Button, Icon } from 'semantic-ui-react'\r\nimport { useTranslation } from 'react-i18next';\r\nimport './Buttons.css';\r\n\r\n/* Props:\r\n * noTitle: Title is not visible if set to true\r\n*/\r\n\r\nconst NewButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst CreateButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst ViewButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst EditButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst DeleteButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst SaveButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst CancelButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst YesButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst NoButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst OpenButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst CloseButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst ApproveButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst FullScreenButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n ); \r\n}\r\n\r\nconst ReportButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst CreatePDFButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst CreateCSVButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst DownloadButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst UploadButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst UserButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst ContactButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst HelpButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst QuestionButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst EmailButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst ToggleMenuButton = (props) => {\r\n const { t } = useTranslation();\r\n const { isOpen, noTitle, ...rest } = props;\r\n return (\r\n \r\n ); \r\n}\r\n\r\nconst LinkButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n ); \r\n}\r\n\r\nconst InfoButton = (props) => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst PrintPageButton = (props) => {\r\n const { t } = useTranslation();\r\n const { noTitle, ...rest } = props;\r\n return (\r\n \r\n ); \r\n}\r\n\r\n\r\nexport {\r\n NewButton,\r\n CreateButton,\r\n\tViewButton,\r\n\tEditButton,\r\n\tDeleteButton,\r\n\tSaveButton,\r\n\tCancelButton,\r\n\tYesButton,\r\n NoButton,\r\n OpenButton,\r\n\tCloseButton,\t\r\n\tApproveButton,\r\n\tFullScreenButton,\r\n\tReportButton,\r\n CreatePDFButton,\r\n CreateCSVButton,\r\n DownloadButton,\r\n UploadButton,\r\n ContactButton,\r\n UserButton,\r\n QuestionButton,\r\n HelpButton,\r\n EmailButton,\r\n ToggleMenuButton,\r\n LinkButton,\r\n InfoButton,\r\n PrintPageButton\r\n};\r\n","import React from 'react';\r\nimport { Header, Modal } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { YesButton, NoButton, ApproveButton } from './../Buttons/Buttons';\r\n\r\nconst YesNoModal = ({ type, header, text, method, item, open, setOpen }) => {\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n setOpen(false)}\r\n onOpen={() => setOpen(true)}\r\n >\r\n {type==='delete' &&\r\n
\r\n }\r\n {type==='save' &&\r\n
\r\n }\r\n {type==='cancel' &&\r\n
\r\n }\r\n {type==='warning' &&\r\n
\r\n }\r\n\r\n \r\n

{text || t('general.areYouSure')}

\r\n
\r\n \r\n \r\n {\r\n setOpen(false);\r\n }}/>\r\n {\r\n setOpen(false);\r\n if (method) {\r\n item ? method(item) : method();\r\n }\r\n }}/>\r\n \r\n\r\n \r\n );\r\n}\r\n\r\nconst ApproveModal = ({ type, header, text, open, setOpen }) => {\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n setOpen(false)}\r\n onOpen={() => setOpen(true)}\r\n >\r\n {type==='info' &&\r\n
\r\n }\r\n {type==='warning' &&\r\n
\r\n }\r\n\r\n \r\n

{text || t('general.areYouSure')}

\r\n
\r\n \r\n \r\n {\r\n setOpen(false);\r\n }}/>\r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport { YesNoModal, ApproveModal };","import React, { useContext, useState } from 'react';\r\nimport { NavLink, withRouter } from 'react-router-dom';\r\nimport { Menu, Dropdown, Container, Icon, Image, Grid } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { StateContext } from '../Context/StateContext';\r\nimport { MessageContext } from '../Context/MessageContext';\r\nimport { YesNoModal } from '../Reusable/Modals/GeneralModal';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nfunction Navigation(props) {\r\n\r\n const {mobile, setMobileMenuOpen} = props;\r\n\r\n const { t } = useTranslation();\r\n const { instance } = useMsal(); \r\n\r\n const { profile, globalState, clearContactData, contactInProgress } = useContext(StateContext);\r\n const { addMessage } = useContext(MessageContext);\r\n const [ cancelModalOpen, setCancelModalOpen] = useState(false);\r\n const [ warningModalOpen, setWarningModalOpen] = useState(false);\r\n\r\n const cancelContact = () => {\r\n props.history.push('/contact/contacttype');\r\n clearContactData();\r\n addMessage({type: \"success\", header: t('message.contactCanceled'), body: t('message.continueToNextContact')});\r\n }\r\n\r\n const cancelContactToChangeService = () => {\r\n props.history.push('/');\r\n clearContactData();\r\n }\r\n\r\n return (\r\n\r\n
\r\n\r\n \r\n \r\n\r\n {/* Desktop */}\r\n { !mobile && \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \"logo\"\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { globalState.service && globalState.channel &&\r\n <>\r\n {globalState.service.name.fi} - {globalState.channel.name.fi}\r\n {contactInProgress() ?\r\n {e.preventDefault();setWarningModalOpen(true)}}>{t('navigation.changeservice')}\r\n :\r\n {t('navigation.changeservice')}\r\n }\r\n \r\n }\r\n {globalState.name}\r\n {t('navigation.userinfo')}\r\n instance.logout()}>{t('navigation.logout')}\r\n \r\n \r\n \r\n \r\n { globalState.service && globalState.channel && contactInProgress() &&\r\n {e.preventDefault();setCancelModalOpen(true)}}>{t('navigation.cancelContact')}\r\n }\r\n { globalState.service && globalState.channel ?\r\n {t('navigation.contact')}\r\n :\r\n {t('navigation.contact')}\r\n }\r\n {profile.IsOwner ?\r\n \r\n \r\n props.history.push('/user/list')}>{t('navigation.users')}\r\n props.history.push('/shift/admin')}>{t('navigation.shifts')}\r\n props.history.push('/shift/alert/start')}>{t('navigation.alerts')}\r\n props.history.push('/shift/list')}>{t('navigation.shifts')} päivystäjä\r\n \r\n \r\n :\r\n {t('navigation.shifts')}\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n {/* Mobile */}\r\n { mobile && \r\n \r\n {t('navigation.MLLStatistics')}\r\n setMobileMenuOpen(true)} position='right'>\r\n \r\n }\r\n\r\n
\r\n );\r\n}\r\n\r\n\r\nexport default withRouter(Navigation);\r\n","import React from 'react';\r\nimport { createMedia } from \"@artsy/fresnel\";\r\nimport Navigation from './Navigation';\r\n\r\nconst Header = ({ mobileMenuOpen, setMobileMenuOpen }) => {\r\n\r\n window.addEventListener('beforeunload', function (e) {\r\n // Cancel the event\r\n e.preventDefault(); // If you prevent default behavior in Mozilla Firefox prompt will always be shown\r\n // Chrome requires returnValue to be set\r\n e.returnValue = '';\r\n });\r\n \r\n const { MediaContextProvider, Media } = createMedia({\r\n breakpoints: {\r\n sm: 0,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1192,\r\n },\r\n });\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default Header;\r\n\r\n","import React from 'react';\r\nimport { Container } from 'semantic-ui-react';\r\n\r\nconst Content = (props) => {\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n\r\n}\r\n\r\nexport default Content;\r\n","import React from 'react';\r\n//import { NavLink } from 'react-router-dom';\r\n//import { Container } from 'semantic-ui-react';\r\n\r\nconst Footer = (props) => {\r\n\r\n return (\r\n
\r\n\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default Footer;\r\n","import React, {Fragment, useContext} from 'react';\r\nimport { Form, Popup, Radio, Checkbox, TextArea, Input } from 'semantic-ui-react';\r\nimport { StateContext } from '../Context/StateContext';\r\n\r\nconst Question = (props) => {\r\n\r\n\tconst {data, selectedValue, setSelectedValue, ...rest} = props;\r\n\r\n\tconst { highlightUnfilledRequiredFields } = useContext(StateContext);\r\n\r\n\tconst options = data.options;\r\n\tconst name = data && data.name ? data.name.fi : \"\";\r\n\tlet subtitle = data && data.subtitle ? data.subtitle.fi : \"\";\r\n\tif(subtitle===\"\") subtitle=rest.subtitle || \"\";\r\n\t\r\n\t//console.log(data && data.name ? data.name.fi : \"\");\r\n\t//console.log(data);\r\n\r\n\tconst highlight = highlightUnfilledRequiredFields && (data.required || rest.required) && (!selectedValue || selectedValue.length===0);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{data.type !== 'checkbox' &&\r\n\t\t\t\t
\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t{name}\r\n\t\t\t\t\t\t{(data.required || rest.required) &&\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{data.info && data.info.fi && } />}\r\n\t\t\t\t\t

\r\n\t\t\t\t\t{subtitle &&\r\n\t\t\t\t\t\t
{subtitle}
\r\n\t\t\t\t\t}\r\n\t\t\t\t
\r\n\t\t\t}\r\n\r\n\t\t\t{/* type = radiogroup */}\r\n\t\t\t{data.type === 'radiogroup' &&\r\n\t\t\toptions.map((option,index)=>\r\n\t\t\t\t\r\n\t\t\t\t\t{option.info && option.info.fi ?\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t setSelectedValue(value)}\r\n\t\t\t\t\t\t\t\tclassName='float-left'\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t} />\r\n\t\t\t\t\t\t\t{option.freetext && selectedValue===option.ref &&\r\n\t\t\t\t\t\t\t\t props.setFreeText(e)}\r\n\t\t\t\t\t\t\t\t\tclassName='indented'\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t:\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t setSelectedValue(value)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t{option.freetext && selectedValue===option.ref &&\r\n\t\t\t\t\t\t\t props.setFreeText(e)}\r\n\t\t\t\t\t\t\t\tclassName='indented'\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\r\n\t\t\t{/* type = checkboxgroup */}\r\n\t\t\t{data.type === 'checkboxgroup' &&\r\n\t\t\toptions.map((option,index)=>\r\n\t\t\t\t<>\r\n\t\t\t\t\t{option.info && option.info.fi ?\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t item.ref === option.ref)}\r\n\t\t\t\t\t\t\t\tonChange={(e,{value}) => setSelectedValue(value)}\r\n\t\t\t\t\t\t\t\tclassName='float-left'\r\n\t\t\t\t\t\t\t\tdisabled={!selectedValue.find(item => item.ref === option.ref) && selectedValue.length>data.limit-1 ? true : false}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t} />\r\n\t\t\t\t\t\t\t{option.freetext && selectedValue.find(item => item.ref === option.ref) &&\r\n\t\t\t\t\t\t\t\t props.setFreeText(e)}\r\n\t\t\t\t\t\t\t\t\tclassName='indented'\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t:\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t item.ref === option.ref)}\r\n\t\t\t\t\t\t\tonChange={(e,{value}) => setSelectedValue(value)}\r\n\t\t\t\t\t\t\tdisabled={!selectedValue.find(item => item.ref === option.ref) && selectedValue.length>data.limit-1 ? true : false}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t{option.freetext && selectedValue.find(item => item.ref === option.ref) &&\r\n\t\t\t\t\t\t\t props.setFreeText(e,option.ref)}\r\n\t\t\t\t\t\t\t\tclassName='indented'\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t)}\r\n\r\n\t\t\t{/* type = checkbox */}\r\n\t\t\t{data.type === 'checkbox' &&\r\n\t\t\t\t setSelectedValue(value)}\r\n\t\t\t\tclassName='single-checkbox'\r\n\t\t\t/>\r\n\t\t\t}\r\n\r\n\t\t\t{/* type = textbox */}\r\n\t\t\t{data.type === 'textbox' &&\r\n\t\t\t\t setSelectedValue(e.target.value)}\r\n\t\t\t\t\tid={rest.id}\r\n\t\t\t\t\ticon={rest.icon}\r\n\t\t\t\t/>\r\n\t\t\t}\r\n\r\n\t\t\t{/* type = textarea */}\r\n\t\t\t{data.type === 'textarea' &&\r\n\t\t\t\t setSelectedValue(e.target.value)}\r\n\t\t\t\t/>\r\n\t\t\t}\r\n\t\t\r\n\t)\r\n\r\n}\r\n\r\nexport default Question;","import { useState } from 'react';\r\nimport Axios from 'axios';\r\nimport { useMsal } from \"@azure/msal-react\";\r\nimport Config from '../../Config/Config';\r\n\r\nconst useListAforisms = () => {\r\n\r\n const [ aforisms, setAforisms ] = useState([]);\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n\r\n /** List all settings */\r\n const listAforisms = async () => {\r\n try {\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n \r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n const result = await Axios.get(rootPath + \"/api/v1/aforisms\", options);\r\n\r\n if (result && result.status && result.status === 200 && result.data) setAforisms(result.data);\r\n\r\n return result;\r\n\r\n } catch (error) {\r\n return error;\r\n }\r\n }\r\n\r\n return { aforisms, listAforisms };\r\n\r\n}\r\n\r\nexport default useListAforisms;","import React from 'react';\r\nimport { Dimmer, Loader, Segment } from 'semantic-ui-react';\r\nimport './styles.css' ;\r\n\r\nconst Loading = ({text}) => {\r\n return (\r\n
\r\n \r\n \r\n {text}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default Loading;","import React, { useContext, useEffect, useState } from 'react';\r\nimport { Form, Button, Container, Divider, Grid, Segment } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Question from '../Reusable/Question';\r\nimport { StateContext } from './../Context/StateContext';\r\nimport { MessageContext } from '../Context/MessageContext';\r\nimport useListAforisms from '../Hooks/Aforisms/useListAforisms';\r\nimport Loading from '../Layout/Loading';\r\n\r\nconst SelectService = (props) => {\r\n\r\n const { t } = useTranslation();\r\n\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { globalState, clearContactData, profile, fetchingProfile } = useContext(StateContext);\r\n\r\n const [ service, setService ] = useState(globalState.service);\r\n const [ channel, setChannel ] = useState(globalState.channel);\r\n const [ aforism, setAforism ] = useState();\r\n\r\n let general = globalState.settings.find(item => item.type === 'general') || [];\r\n \r\n const { aforisms, listAforisms } = useListAforisms();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n await listAforisms();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n setAforism(aforisms[Math.floor(Math.random() * aforisms.length)]);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [aforisms]); \r\n\r\n useEffect(()=> {\r\n globalState.setService('');\r\n globalState.setChannel('');\r\n clearContactData();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const onSubmit = async () => {\r\n messages.map(item => removeMessage(item.id));\r\n if(service.ref && channel.ref) {\r\n globalState.setService(service);\r\n globalState.setChannel(channel);\r\n props.history.push('/contact/contacttype');\r\n } else {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n }\r\n }\r\n\r\n if(!fetchingProfile && profile.length===0){\r\n return (

{t('errors.userNotFound')}

)\r\n }\r\n\r\n \r\n return (\r\n
\r\n {(globalState.settings.length === 0 || !aforism || !globalState.name) &&\r\n \r\n }\r\n\r\n \r\n

{t('general.greeting')}

\r\n
\r\n {aforism &&\r\n \r\n \"{aforism.text}\" - {aforism.author}\r\n \r\n }\r\n \r\n
\r\n \r\n \r\n \r\n {\r\n const x = general.service.options.find(s => s.ref === val);\r\n setService(x);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n const x = general.channel.options.find(s => s.ref === val);\r\n setChannel(x);\r\n }} \r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('general.homepage')}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default SelectService;\r\n","import React, { useContext } from 'react';\r\nimport { NavLink, Redirect } from 'react-router-dom';\r\nimport { Menu, Container } from 'semantic-ui-react';\r\nimport { createMedia } from \"@artsy/fresnel\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport { StateContext } from '../Context/StateContext';\r\n\r\nconst SubNavigation = ({activePage}) => {\r\n\r\n const { t } = useTranslation();\r\n\r\n const { globalState } = useContext(StateContext);\r\n\r\n const { MediaContextProvider, Media } = createMedia({\r\n breakpoints: {\r\n sm: 0,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1192,\r\n }\r\n });\r\n\r\n return (\r\n \r\n
\r\n\r\n {!globalState.service.type &&\r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('subnavigation.contacttype')}\r\n \r\n \r\n {globalState.contactType.ref==='conversationContact' ?\r\n {t('subnavigation.backgroundinformation')}\r\n :\r\n {t('subnavigation.backgroundinformation')}\r\n }\r\n \r\n {globalState.contactType.ref==='conversationContact' && globalState.dialogue ?\r\n <>\r\n \r\n {t('subnavigation.previoussupport')}\r\n \r\n \r\n {t('subnavigation.themes')}\r\n \r\n \r\n {t('subnavigation.specificinformation')}\r\n \r\n \r\n {t('subnavigation.referral')}\r\n \r\n \r\n {t('subnavigation.retrospective')}\r\n \r\n \r\n :\r\n <>\r\n \r\n {t('subnavigation.previoussupport')}\r\n \r\n \r\n {t('subnavigation.themes')}\r\n \r\n \r\n {t('subnavigation.specificinformation')}\r\n \r\n \r\n {t('subnavigation.referral')}\r\n \r\n \r\n {t('subnavigation.retrospective')}\r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n {activePage==='contacttype' &&\r\n <>\r\n \r\n {t('subnavigation.next')}\r\n \r\n \r\n }\r\n {activePage==='backgroundinformation' &&\r\n <>\r\n {t('subnavigation.previous')}\r\n \r\n {t('subnavigation.next')}\r\n \r\n \r\n }\r\n {activePage==='previoussupport' &&\r\n <>\r\n {t('subnavigation.previous')}\r\n \r\n {t('subnavigation.next')}\r\n \r\n \r\n }\r\n {activePage==='themes' &&\r\n <>\r\n {t('subnavigation.previous')}\r\n \r\n {t('subnavigation.next')}\r\n \r\n \r\n }\r\n {activePage==='specificinformation' &&\r\n <>\r\n {t('subnavigation.previous')}\r\n \r\n {t('subnavigation.next')}\r\n \r\n \r\n }\r\n {activePage==='referral' &&\r\n <>\r\n {t('subnavigation.previous')}\r\n \r\n {t('subnavigation.next')}\r\n \r\n \r\n }\r\n {activePage==='retrospective' &&\r\n <>\r\n {t('subnavigation.previous')}\r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\n\r\nexport default SubNavigation;\r\n","import React, { useContext, useState } from 'react';\r\nimport SubNavigation from '../../Layout/SubNavigation';\r\nimport { Grid, Segment, Container, Divider, Form, Button } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Question from '../../Reusable/Question';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport { YesNoModal } from '../../Reusable/Modals/GeneralModal';\r\n\r\nconst ContactType = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { globalState, contactDataOK, saveContactData } = useContext(StateContext);\r\n const [ saveModalOpen, setSaveModalOpen ] = useState(false);\r\n\r\n let questions = []\r\n if(globalState.service.type === 'vpn') questions = globalState.settings.find(item => item.type === 'vpn') || [];\r\n if(globalState.service.type === 'lnpn') questions = globalState.settings.find(item => item.type === 'lnpn') || [];\r\n \r\n const saveContact = async () => {\r\n saveContactData(props.history);\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n {\r\n const x = questions.contactType.options.find(s => s.ref === val)\r\n globalState.setContactType(x)\r\n }} \r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('general.homepage')}\r\n \r\n {globalState.contactType.ref === 'silentContact' || globalState.contactType.ref === 'excludedContact' ?\r\n \r\n :\r\n <>\r\n {contactDataOK().result ?\r\n \r\n :\r\n \r\n }\r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ContactType;\r\n","import React, { useContext, useState } from 'react';\r\nimport SubNavigation from '../../Layout/SubNavigation';\r\nimport { Grid, Segment, Container, Divider, Form, Button, Checkbox, TextArea } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Question from '../../Reusable/Question';\r\nimport { YesNoModal } from '../../Reusable/Modals/GeneralModal';\r\n\r\nfunction BackgroundInformation(props) {\r\n\r\n const { t } = useTranslation();\r\n const [ saveModalOpen, setSaveModalOpen ] = useState(false);\r\n const { removeMessage, messages } = useContext(MessageContext);\r\n const { globalState, contactDataOK, saveContactData } = useContext(StateContext);\r\n \r\n let questions = []\r\n if(globalState.service.type === 'vpn') questions = globalState.settings.find(item => item.type === 'vpn') || [];\r\n if(globalState.service.type === 'lnpn') questions = globalState.settings.find(item => item.type === 'lnpn') || [];\r\n\r\n const setFamilyChildAgeState = (obj) => {\r\n let newObj = {};\r\n if(globalState.familyChildAgeState.find(item => item.ref === obj.ref)){\r\n // uncheck -> remove item from array\r\n newObj = globalState.familyChildAgeState.filter(item => item.ref !== obj.ref)\r\n } else {\r\n //check -> add item to array\r\n newObj = globalState.familyChildAgeState.concat(obj)\r\n }\r\n globalState.setFamilyChildAgeState(newObj)\r\n }\r\n\r\n const setContactorRelationToFamilyFreetext = (e) => {\r\n const newObj = JSON.parse(JSON.stringify(globalState.contactorRelationToFamily));\r\n newObj.description=e.target.value;\r\n globalState.setContactorRelationToFamily(newObj)\r\n }\r\n\r\n const setFamilyFormFreetext = (e) => {\r\n const newObj = JSON.parse(JSON.stringify(globalState.familyForm));\r\n newObj.description=e.target.value;\r\n globalState.setFamilyForm(newObj);\r\n }\r\n\r\n const saveContact = async () => {\r\n //remove old messages\r\n messages.map(item => removeMessage(item.id));\r\n saveContactData(props.history);\r\n }\r\n\r\n //console.log(globalState);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n \r\n\r\n {/* VPN */}\r\n { globalState.service.type === 'vpn' &&\r\n <>\r\n \r\n \r\n

{t('contact.contactorInformation')}

\r\n \r\n {\r\n const x = questions.contactorAge.options.find(s => s.ref === val)\r\n globalState.setContactorAge(x)\r\n }}\r\n />\r\n {\r\n const x = questions.contactorGender.options.find(s => s.ref === val)\r\n globalState.setContactorGender(x)\r\n }}\r\n />\r\n {\r\n const x = questions.contactorRelationToFamily.options.find(s => s.ref === val)\r\n globalState.setContactorRelationToFamily(x)\r\n }}\r\n freeTextValue={globalState.contactorRelationToFamily.description}\r\n setFreeText={setContactorRelationToFamilyFreetext}\r\n />\r\n
\r\n
\r\n \r\n \r\n

{t('contact.familyInformation')}

\r\n \r\n {\r\n const x = questions.familyChildAgeState.options.find(s => s.ref === val)\r\n setFamilyChildAgeState(x)\r\n }}\r\n />\r\n {\r\n const x = questions.familyForm.options.find(s => s.ref === val)\r\n globalState.setFamilyForm(x)\r\n }}\r\n freeTextValue={globalState.familyForm.description}\r\n setFreeText={setFamilyFormFreetext}\r\n />\r\n {\r\n const x = questions.familySocialNetwork.options.find(s => s.ref === val)\r\n globalState.setFamilySocialNetwork(x)\r\n }}\r\n />\r\n
\r\n
\r\n \r\n }\r\n\r\n {/* LNPN */}\r\n { globalState.service.type === 'lnpn' &&\r\n <>\r\n \r\n \r\n {\r\n const x = questions.contactorAge.options.find(s => s.ref === val)\r\n globalState.setContactorAge(x)\r\n }}\r\n />\r\n {\r\n const x = questions.contactorCount.options.find(s => s.ref === val)\r\n globalState.setContactorCount(x)\r\n }}\r\n />\r\n {\r\n const x = questions.contactorGender.options.find(s => s.ref === val)\r\n globalState.setContactorGender(x)\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {(globalState.channel.ref === 'phone' || globalState.channel.ref === 'chat') &&\r\n {\r\n const x = questions.previousContact.options.find(s => s.ref === val)\r\n globalState.setPreviousContact(x)\r\n }}\r\n />\r\n }\r\n {globalState.service.language === 'sv' &&\r\n {\r\n let x = {ref: '', name: { fi: '' }};\r\n if(!globalState.contactorLanguage || globalState.contactorLanguage.ref===''){\r\n x = {ref: val, name: { fi: questions.contactorLanguage.name.fi }}\r\n } \r\n globalState.setContactorLanguage(x)\r\n }}\r\n />\r\n }\r\n
\r\n \r\n \r\n globalState.setDialogue(!globalState.dialogue)}\r\n />\r\n \r\n {!globalState.dialogue &&\r\n <>\r\n

{t('contact.describeNoDialogueInContact')}

\r\n globalState.setDialogueDescription(e.target.value)}\r\n />\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n }\r\n\r\n
\r\n\r\n \r\n \r\n {!globalState.dialogue ?\r\n <>\r\n {contactDataOK().result ?\r\n \r\n :\r\n \r\n }\r\n \r\n :\r\n <>\r\n {contactDataOK().result ?\r\n \r\n :\r\n \r\n }\r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default BackgroundInformation;\r\n","import React, { useContext, useState } from 'react';\r\nimport SubNavigation from '../../Layout/SubNavigation';\r\nimport { Form, Grid, Segment, Container, Divider, Button, Icon } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport Question from '../../Reusable/Question';\r\n\r\nfunction PreviousSupport(props) {\r\n\r\n const { t } = useTranslation();\r\n const [ validationError, setValidationError ] = useState('');\r\n \r\n const { globalState, contactDataOK, saveContactData } = useContext(StateContext);\r\n\r\n let questions = []\r\n if(globalState.service.type === 'vpn') questions = globalState.settings.find(item => item.type === 'vpn') || [];\r\n if(globalState.service.type === 'lnpn') questions = globalState.settings.find(item => item.type === 'lnpn') || [];\r\n\r\n const setPreviousSupportSources = (obj) => {\r\n let newObj = {};\r\n if(globalState.previousSupportSources.find(item => item.ref === obj.ref)){\r\n // uncheck -> remove item from array\r\n newObj = globalState.previousSupportSources.filter(item => item.ref !== obj.ref)\r\n } else {\r\n //check -> add item to array\r\n newObj = globalState.previousSupportSources.concat(obj)\r\n }\r\n globalState.setPreviousSupportSources(newObj)\r\n }\r\n\r\n const isAuthorIDValid = (val) => {\r\n // example: 01234567-0123-0123-0123-0123456789AB\r\n if(val){\r\n if(val.length!==36) return false;\r\n if(val.charAt(8)!=='-') return false;\r\n if(val.charAt(13)!=='-') return false;\r\n if(val.charAt(18)!=='-') return false;\r\n if(val.charAt(23)!=='-') return false;\r\n\r\n const regex = /^[a-zA-Z0-9]*$/g;\r\n let part = val.substr(0,8)\r\n let match = part.match(regex)\r\n if(!match || match[0]!==part) return false;\r\n\r\n part = val.substr(9,4)\r\n match = part.match(regex)\r\n if(!match || match[0]!==part) return false;\r\n\r\n part = val.substr(14,4)\r\n match = part.match(regex)\r\n if(!match || match[0]!==part) return false;\r\n\r\n part = val.substr(19,4)\r\n match = part.match(regex)\r\n if(!match || match[0]!==part) return false;\r\n\r\n part = val.substr(24,12)\r\n match = part.match(regex)\r\n if(!match || match[0]!==part) return false;\r\n }\r\n return true;\r\n }\r\n\r\n const handleAuthorID = (val) => {\r\n setValidationError('');\r\n globalState.setAuthorID(val);\r\n if(!isAuthorIDValid(val)) setValidationError(t('errors.invalidInput'));\r\n }\r\n\r\n const handlePaste = () => {\r\n navigator.clipboard.readText().then(\r\n clipText => {\r\n document.getElementById('authorID').value = clipText\r\n setValidationError('');\r\n globalState.setAuthorID(clipText);\r\n if(!isAuthorIDValid(clipText)) setValidationError(t('errors.invalidInput'));\r\n }\r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n {\r\n const x = questions.previousSupportSought.options.find(s => s.ref === val)\r\n globalState.setPreviousSupportSought(x)\r\n }}\r\n />\r\n\r\n {globalState.channel.ref === 'internetletter' &&\r\n handleAuthorID(val)}\r\n id='authorID'\r\n icon={ handlePaste()} />}\r\n />\r\n }\r\n {validationError &&\r\n
{validationError}
\r\n }\r\n\r\n
\r\n
\r\n \r\n \r\n {globalState.previousSupportSought.ref === 'yes' &&\r\n {\r\n const x = questions.previousSupportSources.options.find(s => s.ref === val)\r\n setPreviousSupportSources(x)\r\n }}\r\n />\r\n }\r\n \r\n \r\n
\r\n \r\n \r\n \r\n {contactDataOK().result ?\r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default PreviousSupport;\r\n","import React, { useState, useContext } from 'react';\r\nimport SubNavigation from '../../Layout/SubNavigation';\r\nimport { Form, Grid, Segment, Container, Divider, Button, List, Popup } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport Question from '../../Reusable/Question';\r\nimport config from '../../Config/Config';\r\nimport { YesNoModal, ApproveModal } from '../../Reusable/Modals/GeneralModal';\r\n\r\nconst Themes = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const [ theme, setTheme ] = useState({});\r\n const [ subject, setSubject ] = useState({});\r\n const { globalState, contactDataOK, saveContactData, highlightUnfilledRequiredFields } = useContext(StateContext);\r\n const [ currentSubject, setCurrentSubject ] = useState(globalState.subjects.length === 0 ? 0 : -1);\r\n const [ deleteModalOpen, setDeleteModalOpen ] = useState(false);\r\n const [ approveModalOpen, setApproveModalOpen ] = useState(false);\r\n const [ subjectToDelete, setSubjectToDelete ] = useState('');\r\n\r\n const subjectLimitReached = globalState.subjects.length === config.configurations.subjectLimit\r\n const disableAddButton = globalState.subjects.length >= config.configurations.subjectLimit;\r\n\r\n let questions = []\r\n if(globalState.service.type === 'vpn') questions = globalState.settings.find(item => item.type === 'vpn') || [];\r\n if(globalState.service.type === 'lnpn') questions = globalState.settings.find(item => item.type === 'lnpn') || [];\r\n\r\n const themes = questions.themes;\r\n\r\n const handleSelectTheme = (theme) => {\r\n const newObj = {\r\n \"ref\": theme.ref,\r\n \"name\": { \"fi\": theme.name.fi }\r\n }\r\n setTheme(newObj);\r\n }\r\n\r\n const handleSelectSubject = (s) => {\r\n let newObj = JSON.parse(JSON.stringify(s));\r\n // test if subject is already selected (if editing, same subject can be selected)\r\n if(globalState.subjects.find(item => item.ref === s.ref) && globalState.subjects.findIndex(item => item.ref === s.ref)!==currentSubject) {\r\n setApproveModalOpen(true);\r\n } else {\r\n newObj.theme = theme;\r\n // initialize fields that are filled in later\r\n if(globalState.service.type==='vpn'){\r\n newObj.subjectAppliesTo = [];\r\n newObj.childAge = [];\r\n newObj.childGender = [];\r\n newObj.childrenGroup = [];\r\n newObj.adult = [];\r\n }\r\n\r\n let newSubjects = [];\r\n if(currentSubject {\r\n setSubject({});\r\n }\r\n\r\n const handleAddSubject = () => {\r\n setCurrentSubject(globalState.subjects.length);\r\n setTheme('');\r\n setSubject('');\r\n }\r\n\r\n const handleEditSubject = (sub) => {\r\n setTheme(globalState.subjects.find(item => item.ref === sub.ref).theme)\r\n setSubject(globalState.subjects.find(item => item.ref === sub.ref))\r\n setCurrentSubject(globalState.subjects.findIndex(item => item.ref === sub.ref))\r\n }\r\n\r\n const handleClickDelete = (sub) => {\r\n setSubjectToDelete(sub);\r\n setDeleteModalOpen(true);\r\n }\r\n const handleDeleteSubject = (sub) => {\r\n let newObj = globalState.subjects.filter(item => item.ref !== sub.ref);\r\n globalState.setSubjects(newObj);\r\n setCurrentSubject(globalState.subjects.length===0 ? 0 : -1);\r\n /*console.log(\"subjects\")\r\n console.log(globalState.subjects)\r\n console.log(\"subjects length\")\r\n console.log(globalState.subjects.length);\r\n console.log(\"current subject\")\r\n console.log(currentSubject || 'empty');*/\r\n }\r\n\r\n const handleClose = (index) => {\r\n setCurrentSubject(-1);\r\n setTheme('');\r\n setSubject('');\r\n }\r\n\r\n const setSubjectAppliesTo = (obj,index) => {\r\n let newSubjects = [...globalState.subjects]\r\n let newObj = {};\r\n if(newSubjects[index].subjectAppliesTo.find(item => item.ref === obj.ref)){\r\n // uncheck -> remove item from array\r\n newObj = newSubjects[index].subjectAppliesTo.filter(item => item.ref !== obj.ref);\r\n newSubjects[index].subjectAppliesTo=newObj;\r\n } else {\r\n //check -> add item to array\r\n newObj = JSON.parse(JSON.stringify(obj));\r\n newSubjects[index].subjectAppliesTo.push(newObj);\r\n }\r\n globalState.setSubjects(newSubjects);\r\n }\r\n\r\n //console.log(globalState.subjects)\r\n\r\n const setSubjectChildAge = (obj,index) => {\r\n let newSubjects = [...globalState.subjects]\r\n let newObj = {};\r\n if(newSubjects[index].childAge.find(item => item.ref === obj.ref)){\r\n // uncheck -> remove item from array\r\n newObj = newSubjects[index].childAge.filter(item => item.ref !== obj.ref);\r\n newSubjects[index].childAge=newObj;\r\n } else {\r\n //check -> add item to \r\n newObj = JSON.parse(JSON.stringify(obj));\r\n newSubjects[index].childAge.push(newObj);\r\n }\r\n globalState.setSubjects(newSubjects);\r\n }\r\n\r\n const setSubjectChildGender = (obj,index) => {\r\n let newSubjects = [...globalState.subjects]\r\n let newObj = {};\r\n if(newSubjects[index].childGender.find(item => item.ref === obj.ref)){\r\n // uncheck -> remove item from array\r\n newObj = newSubjects[index].childGender.filter(item => item.ref !== obj.ref);\r\n newSubjects[index].childGender=newObj;\r\n } else {\r\n //check -> add item to array\r\n newObj = JSON.parse(JSON.stringify(obj));\r\n newSubjects[index].childGender.push(newObj);\r\n }\r\n globalState.setSubjects(newSubjects);\r\n }\r\n\r\n const setSubjectChildrenGroup = (obj,index) => {\r\n let newSubjects = [...globalState.subjects]\r\n let newObj = {};\r\n if(newSubjects[index].childrenGroup.find(item => item.ref === obj.ref)){\r\n // uncheck -> remove item from array\r\n newObj = newSubjects[index].childrenGroup.filter(item => item.ref !== obj.ref);\r\n newSubjects[index].childrenGroup=newObj;\r\n } else {\r\n //check -> add item to array\r\n newObj = JSON.parse(JSON.stringify(obj));\r\n newSubjects[index].childrenGroup.push(newObj);\r\n }\r\n globalState.setSubjects(newSubjects);\r\n }\r\n\r\n //console.log(globalState.subjects);\r\n\r\n const setSubjectAdult = (obj,index) => {\r\n let newSubjects = [...globalState.subjects]\r\n let newObj = {};\r\n if(newSubjects[index].adult.find(item => item.ref === obj.ref)){\r\n // uncheck -> remove item from array\r\n newObj = newSubjects[index].adult.filter(item => item.ref !== obj.ref);\r\n newSubjects[index].adult=newObj;\r\n } else {\r\n //check -> add item to array\r\n newObj = JSON.parse(JSON.stringify(obj));\r\n newSubjects[index].adult.push(newObj);\r\n }\r\n globalState.setSubjects(newSubjects);\r\n }\r\n\r\n const setSubjectAdultFreetext = (e,ref) => {\r\n let newSubjects = [...globalState.subjects];\r\n console.log(\"new before freetext\");\r\n console.log(newSubjects);\r\n let newObj = newSubjects[currentSubject].adult.find(item => item.ref === ref);\r\n newObj.description=e.target.value;\r\n console.log(\"subjects after freetext\");\r\n console.log(newSubjects);\r\n globalState.setSubjects(newSubjects);\r\n }\r\n\r\n const subjectAdultFreeTextValue = (index) => {\r\n let newSubjects = [...globalState.subjects];\r\n let freeTextOption = questions.subjectAdult.options.find(item => item.freetext===true);\r\n let freeTextValue = '';\r\n if(newSubjects[index].adult.find(item => item.ref === freeTextOption.ref)){\r\n freeTextValue = newSubjects[index].adult.find(item => item.ref === freeTextOption.ref).description;\r\n }\r\n return (freeTextValue);\r\n }\r\n\r\n /* this is for developing */\r\n /*\r\n const clearSubjects = () => {\r\n setTheme('');\r\n setSubject('');\r\n setCurrentSubject(0);\r\n globalState.setSubjects([]);\r\n }\r\n */\r\n\r\n return (\r\n\r\n
\r\n {subjectToDelete &&\r\n \r\n }\r\n \r\n \r\n \r\n
\r\n

{t('heading.select1ToMaxThemes').replace(\"max\",config.configurations.subjectLimit)}

\r\n {globalState.subjects.map((item,index)=>\r\n <>\r\n \r\n \r\n \r\n \r\n {currentSubject === index ?\r\n <>\r\n

{t('contact.selectTheme')}

\r\n {subject.ref ?\r\n {theme.name.fi}\r\n :\r\n themes.map((t,index) =>\r\n handleSelectTheme(t)}>{t.name.fi}\r\n )\r\n }\r\n \r\n :\r\n <>\r\n {index === 0 &&

{t('heading.theme')}

}\r\n {item.theme.name.fi}\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {currentSubject === index && theme.ref ?\r\n <>\r\n

{t('contact.selectSubject')}

\r\n {subject.ref &&\r\n <>\r\n {subject.name.fi}\r\n {t('contact.changeSubject')}\r\n \r\n }\r\n {!subject.ref &&\r\n themes.filter(t => t.ref === theme.ref)[0].subjects.map((s) =>\r\n handleSelectSubject(s)}>\r\n {s.name.fi}\r\n {s.type !== 'subtitle' && s.info.fi &&\r\n } />\r\n }\r\n \r\n )\r\n }\r\n \r\n :\r\n <>\r\n {index === 0 &&

{t('heading.subject')}

}\r\n {item.name.fi}\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n {globalState.service.type === 'vpn' &&\r\n <>\r\n {currentSubject === index ?\r\n <>\r\n {/* subject is in edit mode */}\r\n {theme.ref && subject.ref ?\r\n <>\r\n {/* theme and subject is selected -> show other options */}\r\n

{questions.subjectAppliesTo.name.fi}{questions.subjectAppliesTo.required && }

\r\n\r\n {/* if subject can apply to a child, show questions about child */}\r\n {item.childTheme.ref &&\r\n item.ref === questions.subjectAppliesTo.options[0].ref)}\r\n onClick={(e,{value}) => setSubjectAppliesTo(questions.subjectAppliesTo.options[0],index)}\r\n />\r\n }\r\n {/* show more questions if checkbox is selected */}\r\n {item.subjectAppliesTo.find(item => item.ref === questions.subjectAppliesTo.options[0].ref) &&\r\n \r\n {\r\n const x = questions.subjectChildAge.options.find(s => s.ref === val)\r\n setSubjectChildAge(x,index)\r\n }}\r\n />\r\n {\r\n const x = questions.subjectChildGender.options.find(s => s.ref === val)\r\n setSubjectChildGender(x,index)\r\n }}\r\n />\r\n \r\n }\r\n \r\n {/* if subject can apply to a child, show questions about child group */}\r\n {item.childTheme.ref &&\r\n item.ref === questions.subjectAppliesTo.options[1].ref)}\r\n onClick={(e,{value}) => setSubjectAppliesTo(questions.subjectAppliesTo.options[1],index)}\r\n />\r\n }\r\n {/* show more questions if checkbox is selected */}\r\n {item.subjectAppliesTo.find(item => item.ref === questions.subjectAppliesTo.options[1].ref) &&\r\n \r\n {\r\n const x = questions.subjectChildrenGroup.options.find(s => s.ref === val)\r\n setSubjectChildrenGroup(x,index)\r\n }}\r\n />\r\n \r\n }\r\n \r\n {/* if subject can apply to an adult, show questions about adult */}\r\n {item.adultTheme.ref &&\r\n item.ref === questions.subjectAppliesTo.options[2].ref)}\r\n onClick={(e,{value}) => setSubjectAppliesTo(questions.subjectAppliesTo.options[2],index)}\r\n />\r\n }\r\n {/* show more questions if checkbox is selected */}\r\n {item.subjectAppliesTo.find(item => item.ref === questions.subjectAppliesTo.options[2].ref) &&\r\n \r\n {\r\n const x = questions.subjectAdult.options.find(s => s.ref === val)\r\n setSubjectAdult(x,index)\r\n }}\r\n freeTextValue={subjectAdultFreeTextValue(index)}\r\n setFreeText={setSubjectAdultFreetext}\r\n />\r\n \r\n }\r\n\r\n {/* subject is discussed in general */}\r\n item.ref === questions.subjectAppliesTo.options[3].ref)}\r\n onClick={(e,{value}) => setSubjectAppliesTo(questions.subjectAppliesTo.options[3],index)}\r\n />\r\n\r\n \r\n \r\n :\r\n <>\r\n {/* theme and subject is not selected -> don't show checkboxes */}\r\n {index === 0 &&

Kenen asioista aiheessa oli kyse?

}\r\n \r\n }\r\n \r\n :\r\n <>\r\n {/* subject is not in edit mode -> show edit and delete links */}\r\n {index === 0 &&

Kenen asioista aiheessa oli kyse?

}\r\n {item.subjectAppliesTo.length===0 &&\r\n

Tarkentavat tiedot puuttuu

\r\n }\r\n \r\n {item.subjectAppliesTo.map((i,index) =>\r\n \r\n {i.name.fi}\r\n \r\n )}\r\n \r\n \r\n handleEditSubject(item)}>{t('general.edit')}\r\n handleClickDelete(item)}>{t('general.delete')}\r\n \r\n \r\n }\r\n \r\n }\r\n\r\n {globalState.service.type === 'lnpn' && currentSubject !== index &&\r\n <>\r\n {/* subject is not in edit mode -> show edit and delete links */}\r\n {index === 0 &&

}\r\n \r\n handleEditSubject(item)}>{t('general.edit')}\r\n handleClickDelete(item)}>{t('general.delete')}\r\n \r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n )}\r\n\r\n {/* if edited subject is not saved yet and subject limit has not been reached */}\r\n {globalState.subjects.length === currentSubject && !subjectLimitReached &&\r\n \r\n \r\n \r\n

{t('contact.selectTheme')}

\r\n \r\n {subject.ref ?\r\n {theme.name.fi}\r\n :\r\n themes.map((t,index) =>\r\n handleSelectTheme(t)}>{t.name.fi}\r\n )\r\n }\r\n \r\n
\r\n
\r\n \r\n \r\n {theme.ref &&\r\n <>\r\n

{t('contact.selectSubject')}

\r\n \r\n {subject.ref &&\r\n <>\r\n {subject.name.fi}\r\n handleChangeSubject()}>{t('contact.changeSubject')}\r\n \r\n }\r\n {!subject.ref &&\r\n themes.filter(t => t.ref === theme.ref)[0].subjects.map((s) =>\r\n handleSelectSubject(s)}>\r\n {s.name.fi}\r\n {s.type !== 'subtitle' && s.info.fi &&\r\n } />\r\n }\r\n \r\n )\r\n }\r\n \r\n \r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n }\r\n\r\n\r\n \r\n \r\n \r\n {/**/}\r\n {contactDataOK().result ?\r\n \r\n :\r\n \r\n }\r\n {disableAddButton || subject.ref || theme.ref ?\r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Themes;\r\n","import React, { useContext } from 'react';\r\nimport SubNavigation from '../../Layout/SubNavigation';\r\nimport { Form, Grid, Segment, Container, Divider, Button, Radio, Checkbox } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Question from '../../Reusable/Question';\r\nimport { StateContext } from '../../Context/StateContext';\r\n\r\nfunction SpecificInformation(props) {\r\n\r\n const { t } = useTranslation();\r\n\r\n const { globalState, contactDataOK, saveContactData, highlightUnfilledRequiredFields } = useContext(StateContext);\r\n let questions = []\r\n if(globalState.service.type === 'vpn') questions = globalState.settings.find(item => item.type === 'vpn') || [];\r\n if(globalState.service.type === 'lnpn') questions = globalState.settings.find(item => item.type === 'lnpn') || [];\r\n\r\n //console.log(globalState.subjects);\r\n\r\n const setContactPrimaryPurpose = (obj) => {\r\n let newObj = {};\r\n if(globalState.contactPrimaryPurpose.find(item => item.ref === obj.ref)){\r\n // uncheck -> remove item from array\r\n newObj = globalState.contactPrimaryPurpose.filter(item => item.ref !== obj.ref)\r\n } else {\r\n //check -> add item to array\r\n newObj = globalState.contactPrimaryPurpose.concat(obj)\r\n }\r\n globalState.setContactPrimaryPurpose(newObj)\r\n }\r\n\r\n const setSubjectsRelatedToMedia = (value) => {\r\n const newObj = [...globalState.subjects];\r\n const index = newObj.findIndex(item => item.ref === value);\r\n newObj[index].isRelatedToMedia=!newObj[index].isRelatedToMedia;\r\n globalState.setSubjects(newObj);\r\n }\r\n\r\n const descriptionRequired = () => {\r\n //description is required if contact is related to media or certain subjects are selected\r\n if(globalState.contactRelatedToMedia.ref==='yes') return true;\r\n if(globalState.subjects.filter(item => item.descriptionRequired === true).length>0) return true;\r\n return false;\r\n }\r\n\r\n const descriptionSubtitle = () => {\r\n //description subtitle is formed based on other selections on form\r\n let first = true\r\n let subtitle = \"\"\r\n let filteredSubjects = globalState.subjects.filter(item => item.descriptionRequired === true)\r\n if(filteredSubjects.length>0) subtitle=t('heading.selectedSubjects');\r\n filteredSubjects.map(item => {\r\n first ? first=false : subtitle += ',';\r\n subtitle += ' ' + item.name.fi;\r\n return item;\r\n });\r\n if(filteredSubjects.length>0) subtitle += '. ' + t('heading.describeSubjects') + ' ';\r\n if(globalState.contactRelatedToMedia.ref==='yes') subtitle += t('heading.describeMedia');\r\n return subtitle;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n

{t('contact.specificInformation')}

\r\n
\r\n \r\n\r\n \r\n \r\n

{questions.primarySubject.name.fi}{questions.primarySubject.required && }

\r\n {globalState.subjects.map((subject,index)=>\r\n {\r\n const x = globalState.subjects.find(item => item.ref === value)\r\n globalState.setPrimarySubject({ ref: x.ref, name: { fi: x.name.fi }})\r\n }}\r\n />\r\n )}\r\n\r\n {\r\n const x = questions.contactRelatedToMedia.options.find(s => s.ref === val)\r\n globalState.setContactRelatedToMedia(x)\r\n }}\r\n />\r\n\r\n {globalState.contactRelatedToMedia.ref === 'yes' &&\r\n <>\r\n

item.isRelatedToMedia===true).length===0 ? 'highlight' : undefined}>{questions.subjectsRelatedToMedia.name.fi}{questions.subjectsRelatedToMedia.required && }

\r\n {globalState.subjects.map((subject,index)=>\r\n setSubjectsRelatedToMedia(value)}\r\n />\r\n )}\r\n \r\n }\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n {\r\n const x = questions.contactPrimaryPurpose.options.find(s => s.ref === val)\r\n setContactPrimaryPurpose(x)\r\n }}\r\n />\r\n \r\n \r\n\r\n
\r\n \r\n \r\n \r\n {contactDataOK().result ?\r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default SpecificInformation;\r\n","import React, { useContext } from 'react';\r\nimport SubNavigation from '../../Layout/SubNavigation';\r\nimport { Form, Grid, Segment, Container, Divider, Button } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport Question from '../../Reusable/Question';\r\n\r\nfunction Referral(props) {\r\n\r\n const { t } = useTranslation();\r\n \r\n const { globalState, contactDataOK, saveContactData } = useContext(StateContext);\r\n\r\n let questions = []\r\n if(globalState.service.type === 'vpn') questions = globalState.settings.find(item => item.type === 'vpn') || [];\r\n if(globalState.service.type === 'lnpn') questions = globalState.settings.find(item => item.type === 'lnpn') || [];\r\n\r\n const setReferralTargets = (obj) => {\r\n let newObj = {};\r\n if(globalState.referralTargets.find(item => item.ref === obj.ref)){\r\n // uncheck -> remove item from array\r\n newObj = globalState.referralTargets.filter(item => item.ref !== obj.ref)\r\n } else {\r\n //check -> add item to array\r\n newObj = globalState.referralTargets.concat(obj)\r\n }\r\n globalState.setReferralTargets(newObj)\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n {\r\n const x = questions.referralGiven.options.find(s => s.ref === val)\r\n globalState.setReferralGiven(x)\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {globalState.referralGiven.ref === 'yes' &&\r\n {\r\n const x = questions.referralTargets.options.find(s => s.ref === val)\r\n setReferralTargets(x)\r\n }}\r\n />\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {contactDataOK().result ?\r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Referral;\r\n","import React, { useContext } from 'react';\r\nimport SubNavigation from '../../Layout/SubNavigation';\r\nimport { Form, Grid, Segment, Container, Divider, Button } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { StateContext } from './../../Context/StateContext';\r\nimport Question from '../../Reusable/Question';\r\n\r\nconst Retrospective = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { globalState, contactDataOK, saveContactData, setHighlightUnfilledRequiredFields } = useContext(StateContext);\r\n\r\n let questions = []\r\n if(globalState.service.type === 'vpn') questions = globalState.settings.find(item => item.type === 'vpn') || [];\r\n if(globalState.service.type === 'lnpn') questions = globalState.settings.find(item => item.type === 'lnpn') || [];\r\n\r\n //console.log(\"globalState\");\r\n //console.log(globalState);\r\n\r\n const setContactorFeedbackDescriptions = (obj) => {\r\n let newObj = {};\r\n if(globalState.contactorFeedbackDescriptions.find(item => item.ref === obj.ref)){\r\n // uncheck -> remove item from array\r\n newObj = globalState.contactorFeedbackDescriptions.filter(item => item.ref !== obj.ref)\r\n } else {\r\n //check -> add item to array\r\n newObj = globalState.contactorFeedbackDescriptions.concat(obj)\r\n }\r\n globalState.setContactorFeedbackDescriptions(newObj)\r\n }\r\n\r\n const handleReturnToMissingInformation = (path) => {\r\n setHighlightUnfilledRequiredFields(true);\r\n props.history.push(path);\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n {\r\n const x = questions.contactLength.options.find(s => s.ref === val)\r\n globalState.setContactLength(x)\r\n }}\r\n />\r\n {\r\n const x = questions.userExperience.options.find(s => s.ref === val)\r\n globalState.setUserExperience(x)\r\n }}\r\n />\r\n {\r\n const x = questions.contactorGaveFeedback.options.find(s => s.ref === val)\r\n globalState.setContactorGaveFeedback(x)\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {globalState.contactorGaveFeedback.ref === 'yes' &&\r\n <>\r\n {\r\n const x = questions.contactorFeedbackType.options.find(s => s.ref === val)\r\n globalState.setContactorFeedbackType(x)\r\n }}\r\n />\r\n {globalState.contactorFeedbackType.ref === 'positive' &&\r\n {\r\n const x = questions.contactorFeedbackDescriptions.options.find(s => s.ref === val)\r\n setContactorFeedbackDescriptions(x)\r\n }}\r\n />\r\n }\r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {contactDataOK().result ?\r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Retrospective;\r\n","\r\nconst capitalizeFirstLetter = (string) => {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n}\r\n\r\nconst dateTimeToDate = (date) => {\r\n const d = new Date(date);\r\n return d.toLocaleDateString();\r\n}\r\n\r\nconst sortByProperty = (array, param, asc = true) => {\r\n if (!Array.isArray(array)) return;\r\n return array?.slice().sort((a, b) => {\r\n if(!a[param]) a[param] = ''\r\n if(!b[param]) b[param] = '' \r\n return asc ? (a[param] > b[param]) ? 1 : ((b[param] > a[param]) ? -1 : 0) :\r\n (a[param] > b[param]) ? -1 : ((b[param] > a[param]) ? 1 : 0)\r\n });\r\n}\r\n\r\nconst sortByPropertyAsInt = (array, param, asc = true) => {\r\n if (!Array.isArray(array)) return;\r\n const numbers = array\r\n .slice()\r\n .filter(item => !isNaN(parseInt(item[param])))\r\n .sort((a, b) => {\r\n if(!a[param]) a[param] = ''\r\n if(!b[param]) b[param] = '' \r\n return asc ? (parseInt(a[param]) > parseInt(b[param])) ? 1 : ((parseInt(b[param]) > parseInt(a[param])) ? -1 : 0) :\r\n (parseInt(a[param]) > parseInt(b[param])) ? -1 : (parseInt((b[param]) > parseInt(a[param])) ? 1 : 0)\r\n });\r\n \r\n \r\n const strings = sortByProperty(array.filter(item => isNaN(parseInt(item[param]))), param, asc)\r\n return asc ? numbers.concat(strings) : strings.concat(numbers);\r\n}\r\n\r\nconst sortByDate = (array, param, asc = true) => {\r\n if (!Array.isArray(array)) return;\r\n return array?.slice().sort((a, b) => asc ? new Date(a[param]) - new Date(b[param]) : new Date(b[param]) - new Date(a[param]))\r\n}\r\n\r\nconst groupArrayBy = (array, property) => {\r\n if (!Array.isArray(array)) return;\r\n const param = String(property);\r\n const grouped = array.reduce((memo, item) => {\r\n if (!memo[item[param]]) {\r\n memo[item[param]] = []; \r\n }\r\n memo[item[param]].push(item);\r\n return memo;\r\n }, []);\r\n\r\n return grouped.filter(item => Array.isArray(item));\r\n}\r\n\r\nconst convertImageToBase64 = (img) => {\r\n try {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n const ctx = canvas.getContext(\"2d\");\r\n ctx.drawImage(img, 0, 0);\r\n return canvas.toDataURL(\"image/png\");\r\n } catch (error) {\r\n return error;\r\n }\r\n}\r\n\r\nexport default { \r\n capitalizeFirstLetter,\r\n dateTimeToDate,\r\n sortByProperty,\r\n sortByPropertyAsInt,\r\n sortByDate,\r\n groupArrayBy,\r\n convertImageToBase64\r\n};\r\n","import React, { useState, useEffect, Fragment } from 'react';\r\nimport { useHistory, Link } from \"react-router-dom\";\r\nimport { Table, Pagination, Icon, Button } from 'semantic-ui-react';\r\nimport { ViewButton } from '../Buttons/Buttons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faChevronCircleDown, faChevronCircleUp } from '@fortawesome/pro-duotone-svg-icons';\r\nimport Utils from '../../Utils/utils';\r\nimport './PagedTable.css'\r\n\r\n/** Combination of Semantic UI Table and Pagination\r\n * @param {array} header - Translated strings of header cells\r\n * @param {array} content - Table content as array of objects \r\n * @param {array} contentKeys - Array of objects containing keys, actions and type of content fields rendered to table\r\n * @param {string} tableprops - Semantic UI table properties passed to component\r\n */\r\nfunction PagedTable({header, content, contentKeys, pageSize = 10, resetPage, collapsable = false, showPagingOnTop, ...tableprops}) {\r\n\r\n const [ activePage, setActivePage ] = useState(0)\r\n const [ sortBy, setSortBy ] = useState({key: null, asc: true, type: 'string'})\r\n const [ sortedContent, setSortedContent ] = useState(content) \r\n\r\n const start = activePage * pageSize;\r\n const end = parseInt(start) + parseInt(pageSize)\r\n const pagedContent = sortedContent.slice(start, end)\r\n\r\n function sortTableData(contentKey) {\r\n if (contentKey?.type !== 'linkButton' && content.length > 1) {\r\n setSortBy({\r\n key: contentKey?.key, \r\n asc: sortBy.key === contentKey?.key ? !sortBy.asc : true,\r\n type: contentKey?.sortType || \r\n (contentKey?.type === 'date' && 'date') || \r\n 'string'\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n const sortContent = (content) => {\r\n switch(sortBy.type) {\r\n case 'int':\r\n return Utils.sortByPropertyAsInt(content, sortBy.key, sortBy.asc)\r\n case 'date':\r\n return Utils.sortByDate(content, sortBy.key, sortBy.asc)\r\n default:\r\n return Utils.sortByProperty(content, sortBy.key, sortBy.asc)\r\n } \r\n } \r\n setSortedContent(sortBy.key ? sortContent(content) : content);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [sortBy, content])\r\n\r\n useEffect(() => {\r\n setActivePage(0)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [resetPage])\r\n\r\n return (\r\n <>\r\n {content.length > pageSize && showPagingOnTop &&\r\n
\r\n 767 ? undefined : null}\r\n onPageChange={(e, {activePage}) => setActivePage(activePage - 1)}\r\n /> \r\n
\r\n }\r\n
\r\n \r\n \r\n \r\n { header && header.map((item, i) =>\r\n \r\n {!contentKeys[i]?.hideCollapsed &&\r\n sortTableData(contentKeys[i])}\r\n >\r\n {item}\r\n {sortBy.key === contentKeys[i].key && sortBy.asc && \r\n \r\n }\r\n {sortBy.key === contentKeys[i].key && !sortBy.asc && \r\n \r\n }\r\n \r\n }\r\n \r\n )} \r\n \r\n \r\n \r\n {pagedContent.map((row, i) => \r\n \r\n )}\r\n \r\n
\r\n
\r\n {content.length > pageSize && \r\n
\r\n 767 ? undefined : null}\r\n onPageChange={(e, {activePage}) => setActivePage(activePage - 1)}\r\n /> \r\n
\r\n }\r\n \r\n )\r\n}\r\n\r\n/** CellKeys:\r\n * cellWidth: Column width\r\n *\r\n * key: Displayed object key (Name, Id, Phone...)\r\n * type: Type of the cell (link, date, linkButton...)\r\n * target: Target url (\"/contact/view/\")\r\n * targetKey: Target url parameter key (Id, FileName...) this is added end of the url/target (\"/contact/view/{Id}\")\r\n * action: Function\r\n * cellAlign: Cell text align (center)\r\n * hideCollapsed: Hide cell if collapsed? (true / false)\r\n * urlKey: Key which defined url , urlKey: 'viewUrl' when viewUrl: '/contracts/business/view/'\r\n *\r\n * Example objects with types:\r\n * Link: { key: 'title', type: 'link', target: '/contracts/business/view/', targetKey: 'id'}\r\n * Url: { key: 'title', type: 'url', urlKey:'viewUrl', targetKey: 'id'}\r\n * External link: \r\n * Link button: \r\n * Url button: { key: 'id', type: 'urlButton', urlKey:'viewUrl', cellAlign: 'left', targetKey: 'id' }\r\n * Date: { key: 'created', type: 'date' }\r\n * Boolean: \r\n * Action: \r\n * Two keys: \r\n */\r\nfunction PagedTableRow({header, row, contentKeys, collapsable}) {\r\n\r\n const history = useHistory();\r\n\r\n const [ collapsed, setCollapsed ] = useState(collapsable ? true : false)\r\n\r\n const cellContent = (row, cellKey) => {\r\n switch(cellKey.type) {\r\n case 'link':\r\n return {row[cellKey.key]};\r\n case 'url':\r\n return {row[cellKey.key]};\r\n case 'externalLink':\r\n return {row[cellKey.key]}; \r\n case 'linkButton':\r\n return history.push(`${cellKey.target}${row[cellKey.targetKey]}`)} />;\r\n case 'urlButton':\r\n return history.push(`${row[cellKey.urlKey]}${row[cellKey.targetKey]}`)} />;\r\n case 'date':\r\n return row[cellKey.key] ? new Date(row[cellKey.key]).toLocaleDateString() : '';\r\n case 'time':\r\n return new Date(row[cellKey.key]).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\r\n case \"datetime\":\r\n return new Date(row[cellKey.key]).toLocaleDateString() + ' ' + new Date(row[cellKey.key]).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\r\n case 'boolean':\r\n return row[cellKey.key] ? 'True' : 'False';\r\n case 'action':\r\n return { ev.preventDefault(); cellKey.action(ev, row, cellKey); } } >{row[cellKey.key]}\r\n case 'actionButton':\r\n if(row[cellKey.disabled]){\r\n return \r\n } else {\r\n return \r\n }\r\n case 'keyWithActionButton':\r\n if(row[cellKey.disabled]){\r\n return <>
{row[cellKey.key2]}
\r\n } else {\r\n return <>
{row[cellKey.key2]}
\r\n }\r\n case 'twokeys':\r\n return `${row[cellKey.key]} ${row[cellKey.key2] ? row[cellKey.key2] : ''}`\r\n case \"array\":\r\n return row[cellKey.key].map((item,index) =>
{item}
)\r\n case 'icons':\r\n return (\r\n <>\r\n \r\n {row[cellKey.key3] && }\r\n \r\n )\r\n case 'firstChars':\r\n if(row[cellKey.key] && row[cellKey.key].length>cellKey.limit){\r\n return row[cellKey.key] ? `${row[cellKey.key].substring(0,cellKey.limit)}...` : '';\r\n } else {\r\n return row[cellKey.key];\r\n }\r\n default: \r\n return row[cellKey.key];\r\n }\r\n }\r\n\r\n return (\r\n \r\n {!collapsable || collapsed ?\r\n \r\n {contentKeys.map((cellKey, n) =>\r\n \r\n {!cellKey.hideCollapsed &&\r\n collapsable && n === 0 && setCollapsed(!collapsed)}\r\n \r\n >\r\n {collapsable && n === 0 && }\r\n {cellContent(row, cellKey)}\r\n \r\n }\r\n \r\n )} \r\n \r\n :\r\n \r\n \r\n {contentKeys.map((cellKey, i) =>\r\n \r\n {collapsable && i === 0 && \r\n collapsable && i === 0 && setCollapsed(!collapsed)}\r\n >\r\n \r\n \r\n } \r\n
\r\n \r\n {`${header[i]}: `}\r\n \r\n {cellContent(row, cellKey)}\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default PagedTable;\r\n","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListUsers = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ users, setUsers ] = useState([]);\r\n const [ fetchingUsers, setFetchingUsers ] = useState(true);\r\n\r\n /** list contracts\r\n * @returns {array} - array of users */ \r\n const listUsers = async () => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingUsers')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users\", options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setUsers(result.data);\r\n setFetchingUsers(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.usersNotFound') });\r\n setFetchingUsers(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingUsersFailed') });\r\n setFetchingUsers(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingUsersFailed') });\r\n setFetchingUsers(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { users, fetchingUsers, listUsers };\r\n\r\n}\r\n\r\nexport default useListUsers;\r\n","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListActivityTypes = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ activityTypes, setActivityTypes ] = useState([]);\r\n const [ fetchingActivityTypes, setFetchingActivityTypes ] = useState(true);\r\n\r\n /** list contracts\r\n * @returns {array} - array of activity types */ \r\n const listActivityTypes = async () => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingActivityTypes')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/activitytypes\", options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setActivityTypes(result.data);\r\n setFetchingActivityTypes(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.activityTypesNotFound') });\r\n setFetchingActivityTypes(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingActivityTypesFailed') });\r\n setFetchingActivityTypes(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingActivityTypesFailed') });\r\n setFetchingActivityTypes(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { activityTypes, fetchingActivityTypes, listActivityTypes };\r\n\r\n}\r\n\r\nexport default useListActivityTypes;\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport PagedTable from '../../Reusable/Lists/PagedTable';\r\nimport { Divider, Button, Form, Grid } from 'semantic-ui-react';\r\nimport useListUsers from '../../Hooks/Users/useListUsers';\r\nimport useListActivityTypes from '../../Hooks/Settings/useListActivityTypes';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport Select from 'react-select';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst UserList = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { globalState, locations, services, types, setUserDetailBackRoute } = useContext(StateContext);\r\n const { addMessage } = useContext(MessageContext);\r\n const { users, listUsers } = useListUsers();\r\n const { activityTypes, listActivityTypes } = useListActivityTypes();\r\n\r\n setUserDetailBackRoute('/user/list');\r\n\r\n let locationOptions = [{label: t('user.location-options.all'), value: ''}]\r\n locations.map(l => {\r\n if(l.Reference!=='remote'){\r\n const tmp = {\r\n label: l.Name,\r\n value: l.Id\r\n }\r\n locationOptions.push(tmp)\r\n }\r\n return l;\r\n })\r\n\r\n let serviceOptions = []\r\n services.map(s => {\r\n const option = {\r\n label: s.Name,\r\n value: s.Id\r\n }\r\n serviceOptions.push(option);\r\n return s;\r\n })\r\n\r\n let typeOptions = []\r\n types.filter(i => i.ServiceId).map(i => {\r\n const option = {\r\n label: i.Abbreviation,\r\n value: i.Id\r\n }\r\n typeOptions.push(option);\r\n return t;\r\n })\r\n\r\n // Fetch activity types\r\n useEffect(() => {\r\n (async () => {\r\n await listActivityTypes();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n let activityTypeOptions = [\r\n {label: t('general.all'), value: ''},\r\n {label: t('user.mailing-list'), value: 'mailing'},\r\n {label: t('user.all-active'), value: 'active'}\r\n ]\r\n activityTypes.map(i => {\r\n const option = {\r\n label: i.Name,\r\n value: i.Id\r\n }\r\n activityTypeOptions.push(option);\r\n return t;\r\n })\r\n\r\n // Fetch users\r\n useEffect(() => {\r\n (async () => {\r\n await listUsers();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n \r\n // add view url and city name to users\r\n useEffect(() => {\r\n users.map(user => {\r\n user.viewUrl = 'detail/';\r\n user.link=user.LastName;\r\n if(user.ActivityAchieved){\r\n user.iconName = \"checkmark\"\r\n user.iconColor = \"green\"\r\n } else {\r\n user.iconName = \"checkmark\"\r\n user.iconColor = \"red\"\r\n }\r\n return user;\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[users,activityTypes]);\r\n \r\n // filter users by selected filters\r\n let filteredUsers = users;\r\n // name\r\n if(globalState.userName){\r\n filteredUsers = users.filter(user => user.LastName.toLowerCase().indexOf(globalState.userName.toLowerCase())===0 || user.FirstName.toLowerCase().indexOf(globalState.userName.toLowerCase())===0)\r\n };\r\n // location\r\n if(globalState.userLocation.value && globalState.userLocation.value!==''){\r\n filteredUsers = filteredUsers.filter(user => user.LocationId===globalState.userLocation.value);\r\n };\r\n // service\r\n if(globalState.userService && globalState.userService.length>0){\r\n filteredUsers = filteredUsers.filter(user => \r\n user.UserServices && user.UserServices.some(item => globalState.userService.find(us => us.value === item.ServiceId) !== undefined)\r\n );\r\n };\r\n // types\r\n if(globalState.userType && globalState.userType.length>0){\r\n filteredUsers = filteredUsers.filter(user => \r\n user.UserTypes && user.UserTypes.some(item => globalState.userType.find(ut => ut.value === item.TypeId) !== undefined && item.Present)\r\n );\r\n };\r\n // types remote\r\n if(globalState.userRemote && globalState.userRemote.length>0){\r\n filteredUsers = filteredUsers.filter(user => \r\n user.UserTypes && user.UserTypes.some(item => globalState.userRemote.find(ur => ur.value === item.TypeId) !== undefined && item.Remote)\r\n );\r\n };\r\n // activity\r\n if(globalState.userActivityType.value && globalState.userActivityType.value!==''){\r\n if(globalState.userActivityType.value==='mailing'){\r\n // mailing list -> activity type value is greater than zero or user on break and on mailing list\r\n filteredUsers = filteredUsers.filter(user => \r\n activityTypes.filter(item => item.Value>0).find(item => item.Id === user.ActivityTypeId) !== undefined ||\r\n (user.ActivityTypeId===activityTypes.find(at => at.RefName==='onBreak').Id && user.KeepOnMailingList)\r\n );\r\n } else if(globalState.userActivityType.value==='active'){\r\n // all active -> activity type value is greater than zero\r\n filteredUsers = filteredUsers.filter(user => \r\n activityTypes.filter(item => item.Value>0).find(item => item.Id === user.ActivityTypeId) !== undefined\r\n );\r\n } else {\r\n filteredUsers = filteredUsers.filter(user => user.ActivityTypeId===globalState.userActivityType.value);\r\n }\r\n };\r\n\r\n // email addresses for copying to clipboard\r\n let emailList = \"\"\r\n filteredUsers.filter(item => item.EmailAddress).map(item => {\r\n emailList+=item.EmailAddress + ';'\r\n return item;\r\n });\r\n\r\n return (\r\n
\r\n \r\n

{t('heading.users')}

\r\n \r\n
\r\n\r\n
\r\n
\r\n globalState.setUserName(e.target.value)} \r\n placeholder={t('user.searchWithLastnameOrFirstname')}\r\n />\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n\r\n \r\n\r\n {addMessage({type: \"success\", header: t('general.copied'), body: t('info.emailsCopiedToClipboard')});window.scrollTo(0,0)}}\r\n >\r\n \r\n \r\n {t('badgeOfMerit.showBOMUsers')}\r\n \r\n \r\n
\r\n );\r\n\r\n}\r\n\r\nexport default UserList;\r\n","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useReadUser = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ user, setUser ] = useState([]);\r\n const [ fetchingUser, setFetchingUser ] = useState(true);\r\n\r\n /** list contracts\r\n * @param {integer} id - user id\r\n * @returns {object} - user profile */ \r\n const readUser = async (id) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingProfile')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + id, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setUser(result);\r\n setFetchingUser(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.profileNotFound') });\r\n setFetchingUser(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingProfileFailed') });\r\n setFetchingUser(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingProfileFailed') });\r\n setFetchingUser(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { user, fetchingUser, readUser };\r\n\r\n}\r\n\r\nexport default useReadUser;\r\n","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListUserServices = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ userServices, setUserServices ] = useState([]);\r\n const [ fetchingUserServices, setFetchingUserServices ] = useState(true);\r\n\r\n /** list contracts\r\n * @returns {array} - array of users */ \r\n const listUserServices = async (userID) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingUserServices')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userID + \"/services\", options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200 && result.data) {\r\n setUserServices(result.data.data);\r\n setFetchingUserServices(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.userServicesNotFound') });\r\n setFetchingUserServices(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingUserServicesFailed') });\r\n setFetchingUserServices(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingUserServicesFailed') });\r\n setFetchingUserServices(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { userServices, fetchingUserServices, listUserServices };\r\n\r\n}\r\n\r\nexport default useListUserServices;\r\n","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListUserTypes = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ userTypes, setUserTypes ] = useState([]);\r\n const [ fetchingUserTypes, setFetchingUserTypes ] = useState(true);\r\n\r\n /** list contracts\r\n * @returns {array} - array of user types */ \r\n const listUserTypes = async (userID) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingUserTypes')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userID + \"/types\", options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200 && result.data) {\r\n setUserTypes(result.data);\r\n setFetchingUserTypes(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.userTypesNotFound') });\r\n setFetchingUserTypes(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingUserTypesFailed') });\r\n setFetchingUserTypes(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingUserTypesFailed') });\r\n setFetchingUserTypes(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { userTypes, fetchingUserTypes, listUserTypes };\r\n\r\n}\r\n\r\nexport default useListUserTypes;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { NavLink } from 'react-router-dom';\r\nimport { Menu, Container, Dropdown } from 'semantic-ui-react';\r\nimport { createMedia } from \"@artsy/fresnel\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\n\r\nconst SubNavigation = ({id, activePage}) => {\r\n\r\n const { t } = useTranslation();\r\n const { user, readUser } = useReadUser();\r\n\r\n const { MediaContextProvider, Media } = createMedia({\r\n breakpoints: {\r\n sm: 0,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1192,\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readUser(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n let selectedPageTitle = ''\r\n if(activePage === 'detail'){\r\n selectedPageTitle=t('user.detail')\r\n } else if (activePage === 'activity'){\r\n selectedPageTitle=t('user.activity')\r\n } else if (activePage === 'onetoones'){\r\n selectedPageTitle=t('user.oneToOnes')\r\n } else if (activePage === 'badges'){\r\n selectedPageTitle=t('user.badgesOfMerit')\r\n } else if (activePage === 'participations'){\r\n selectedPageTitle=t('user.otherParticipations')\r\n } else if (activePage === 'reminders'){\r\n selectedPageTitle=t('user.reminders')\r\n }\r\n\r\n return (\r\n \r\n
\r\n\r\n \r\n

{user && user.data && user.data.IsEmployee ? t('heading.employeeinfo') : t('heading.userinfo')}{user && user.data && ': ' + user.data.FirstName + ' ' + user.data.LastName}

\r\n \r\n \r\n \r\n \r\n {t('user.detail')}\r\n \r\n \r\n {t('user.activity')}\r\n \r\n \r\n {t('user.oneToOnes')}\r\n \r\n \r\n {t('user.badgesOfMerit')}\r\n \r\n \r\n {t('user.otherParticipations')}\r\n \r\n \r\n {t('user.reminders')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('user.detail')}\r\n \r\n \r\n {t('user.activity')}\r\n \r\n \r\n {t('user.oneToOnes')}\r\n \r\n \r\n {t('user.badgesOfMerit')}\r\n \r\n \r\n {t('user.otherParticipations')}\r\n \r\n \r\n {t('user.reminders')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nexport default SubNavigation;\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Divider, Button, Message, Grid, Loader } from 'semantic-ui-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useListUserServices from '../../Hooks/Users/useListUserServices';\r\nimport useListUserTypes from '../../Hooks/Users/useListUserTypes';\r\nimport useListActivityTypes from '../../Hooks/Settings/useListActivityTypes';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport { useParams, Redirect, useHistory } from 'react-router-dom';\r\nimport SubNavigation from '../../Pages/User/SubNavigation';\r\n\r\nconst UserDetail = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { user, fetchingUser, readUser } = useReadUser();\r\n const { userServices, fetchingUserServices, listUserServices } = useListUserServices();\r\n const { userTypes, fetchingUserTypes, listUserTypes } = useListUserTypes();\r\n const { activityTypes, fetchingActivityTypes, listActivityTypes } = useListActivityTypes();\r\n const { types, profile, userDetailBackRoute } = useContext(StateContext);\r\n const { id } = useParams();\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n (async() => {\r\n if(profile && (profile.IsOwner || parseInt(id) === profile.Id)){\r\n await readUser(id);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [profile]);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n if(profile && (profile.IsOwner || parseInt(id) === profile.Id)){\r\n await listUserServices(id);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[profile]);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n if(profile && (profile.IsOwner || parseInt(id) === profile.Id)){\r\n await listUserTypes(id);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[profile]);\r\n\r\n // Fetch activity types\r\n useEffect(() => {\r\n (async () => {\r\n if(profile && (profile.IsOwner || parseInt(id) === profile.Id)){\r\n await listActivityTypes();\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[profile]);\r\n\r\n const loadingContent = (profile.IsOwner || parseInt(id) === profile.Id) && (fetchingUser || fetchingUserServices || fetchingUserTypes || fetchingActivityTypes);\r\n const userShiftCount = user && user.data ? (user.data.UserShiftCount || 0) + (user.data.UserShiftCountInPreviousSystem || 0) : 0;\r\n\r\n return (\r\n\r\n
\r\n \r\n { loadingContent &&\r\n \r\n }\r\n\r\n {/* if not owner or own profile redirect to access denied page */}\r\n {profile.Id && !profile.IsOwner && parseInt(id) !== profile.Id &&\r\n \r\n }\r\n\r\n {!loadingContent &&\r\n <>\r\n {profile.IsOwner && !user.data.IsEmployee ?\r\n \r\n :\r\n

{t('heading.userinfo')}

\r\n }\r\n \r\n { user && user.data &&\r\n <>\r\n \r\n \r\n

{t('user.lastname')}

\r\n
{user.data.LastName}
\r\n \r\n

{t('user.firstname')}

\r\n
{user.data.FirstName}
\r\n\r\n

{t('user.city')}

\r\n
{user.data.LocationName}
\r\n\r\n

{t('user.username')}

\r\n
{user.data.Username}
\r\n\r\n {user.data.IsEmployee &&\r\n
{t('user.employee')}
\r\n }\r\n\r\n

{t('user.email')}

\r\n
{user.data.EmailAddress}
\r\n\r\n

{t('user.phone')}

\r\n
{user.data.PhoneNumber}
\r\n\r\n {user.data.IsEmployee ?\r\n <>\r\n

{t('user.active')}

\r\n
{user.data.IsActive ? t('general.yes') : t('general.no')}
\r\n \r\n :\r\n <>\r\n

{t('user.description')}

\r\n
{user.data.Description}
\r\n\r\n

{t('user.specialDiet')}

\r\n
{user.data.SpecialDiet}
\r\n\r\n

{t('user.startDate')} {t('user.basicCourseStartDate')}

\r\n
{user.data.StartDate && new Date(user.data.StartDate).toLocaleDateString()}
\r\n \r\n }\r\n\r\n
\r\n \r\n {!user.data.IsEmployee &&\r\n <>\r\n

{t('user.remote')}

\r\n
{user.data.IsRemoteWorker ? t('general.yes') : t('general.no')}
\r\n\r\n {user.data.IsRemoteWorker &&\r\n <>\r\n

{t('user.mllPhoneNumber')}

\r\n
{user.data.MllPhoneNumber}
\r\n

{t('user.mllProperty')}

\r\n
{user.data.MllProperty}
\r\n \r\n }\r\n\r\n

{t('user.services')}

\r\n {userServices.map(item =>\r\n
{item.ServiceName}
\r\n )}\r\n\r\n \r\n \r\n \r\n

{t('user.channels')}

\r\n
\r\n \r\n {t('user.isPresent')}\r\n \r\n \r\n {t('user.isRemote')}\r\n \r\n
\r\n {types.map(type => (\r\n userTypes.find(item => item.TypeId === type.Id) &&\r\n \r\n \r\n {type.Abbreviation}\r\n \r\n \r\n {userTypes.find(item => item.TypeId === type.Id) && userTypes.find(item => item.TypeId === type.Id).Present ?\r\n t('general.yes')\r\n :\r\n t('general.no')\r\n }\r\n \r\n \r\n {userTypes.find(item => item.TypeId === type.Id) && userTypes.find(item => item.TypeId === type.Id).Remote ?\r\n t('general.yes')\r\n :\r\n t('general.no')\r\n }\r\n \r\n \r\n ))}\r\n
\r\n\r\n

{t('user.activity')}

\r\n
\r\n {user && user.data && user.data.UserActivityType && activityTypes && activityTypes.find(item => item.Id === user.data.UserActivityType) &&\r\n <>\r\n {user.data.ActivityChanged ?\r\n activityTypes.find(item => item.Id === user.data.UserActivityType).Name + ' (' + t('user.activitySet') + ' ' + new Date(user.data.ActivityChanged).toLocaleDateString() + ')'\r\n :\r\n activityTypes.find(item => item.Id === user.data.UserActivityType).Name\r\n }\r\n \r\n }\r\n
\r\n\r\n

{t('user.active')}

\r\n
{user.data.IsActive ? t('general.yes') : t('general.no')}
\r\n\r\n {user.data.KeepOnMailingList &&\r\n

{t('user.onMailingList')}

\r\n }\r\n\r\n {user.data.BreakStartDate &&\r\n <>\r\n

{t('user.breakStartDate')}

\r\n
{user.data.BreakStartDate && new Date(user.data.BreakStartDate).toLocaleDateString()}
\r\n \r\n }\r\n\r\n

{t('user.nextOneToOne')}

\r\n
{user.data.NextOneToOne && new Date(user.data.NextOneToOne).toLocaleDateString()}
\r\n \r\n }\r\n
\r\n
\r\n\r\n {!user.data.IsEmployee &&\r\n <>\r\n

{t('user.shiftCount')}: {userShiftCount}

\r\n {user.data.BadgeOfMeritEarned>0 &&\r\n {t('user.badgeOfMeritInfo')}\r\n }\r\n {profile.IsOwner && \r\n <>\r\n {user.data.ActivityAchieved ?\r\n {t('user.activityAchieved')}\r\n :\r\n {t('user.activityNotAchieved')}\r\n }\r\n \r\n }\r\n \r\n }\r\n \r\n }\r\n\r\n
\r\n \r\n {profile.IsOwner && }\r\n {props.back ?\r\n \r\n :\r\n \r\n }\r\n \r\n }\r\n
\r\n )\r\n\r\n}\r\n\r\nexport default UserDetail;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateUser = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of users */ \r\n const createUser = async (body) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingUser')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/users\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.userSaved')});\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingUserFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingUserFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createUser };\r\n\r\n}\r\n\r\nexport default useCreateUser;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateUserService = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of user services */ \r\n const createUserService = async (userID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingUserService')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/users/\" + userID + \"/services\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.userServiceSaved')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingUserServiceFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingUserServiceFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createUserService };\r\n\r\n}\r\n\r\nexport default useCreateUserService;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateUserType = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of user types */ \r\n const createUserType = async (userID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingUserType')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/users/\" + userID + \"/types\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.userTypeSaved')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingUserTypeFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingUserTypeFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createUserType };\r\n\r\n}\r\n\r\nexport default useCreateUserType;\r\n","import React, { useState, useContext, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Form, Divider, Button, Grid } from 'semantic-ui-react';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport useCreateUser from '../../Hooks/Users/useCreateUser';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport useCreateUserService from '../../Hooks/Users/useCreateUserService';\r\nimport useCreateUserType from '../../Hooks/Users/useCreateUserType';\r\nimport useListActivityTypes from '../../Hooks/Settings/useListActivityTypes';\r\nimport { StateContext } from '../../Context/StateContext';\r\n\r\nconst CreateUser = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { createUser } = useCreateUser();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { createUserService } = useCreateUserService();\r\n const { createUserType } = useCreateUserType();\r\n const { activityTypes, listActivityTypes } = useListActivityTypes();\r\n const { locations, services, types } = useContext(StateContext);\r\n\r\n const [ firstname, setFirstname ] = useState('');\r\n const [ lastname, setLastname ] = useState('');\r\n const [ city, setCity ] = useState('');\r\n const [ username, setUsername ] = useState('');\r\n const [ emailAddress, setEmailAddress ] = useState('');\r\n const [ phoneNumber, setPhoneNumber ] = useState('');\r\n const [ startDate, setStartDate ] = useState('');\r\n const [ userActivityType, setUserActivityType ] = useState('');\r\n const [ mllPhoneNumber, setMllPhoneNumber ] = useState('');\r\n const [ mllProperty, setMllProperty ] = useState('');\r\n const [ description, setDescription ] = useState('');\r\n const [ specialDiet, setSpecialDiet ] = useState('');\r\n const [ nextOneToOne, setNextOneToOne ] = useState('');\r\n const [ keepOnMailingList, setKeepOnMailingList ] = useState(false);\r\n const [ setBreak, setSetBreak ] = useState(false);\r\n const [ breakStartDate, setBreakStartDate ] = useState('');\r\n const [ isEmployee, setIsEmployee ] = useState(false);\r\n const [ isActive, setIsActive ] = useState(true);\r\n const [ onCallRemote, setOnCallRemote ] = useState(undefined);\r\n const [ selectedServices, setSelectedServices ] = useState([]);\r\n const [ selectedTypes, setSelectedTypes ] = useState([]);\r\n const [ userShiftCountInPreviousSystem, setUserShiftCountInPreviousSystem ] = useState(0);\r\n\r\n\r\n let locationOptions = []\r\n locations.map(l => {\r\n if(l.Reference!=='remote'){\r\n const tmp = {\r\n key: l.Id,\r\n text: l.Name,\r\n value: l.Id\r\n }\r\n locationOptions.push(tmp);\r\n }\r\n return l;\r\n })\r\n\r\n // Fetch activity types\r\n useEffect(() => {\r\n (async () => {\r\n await listActivityTypes();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n let activityTypeOptions = []\r\n activityTypes.map(at => {\r\n const tmp = {\r\n key: at.Id,\r\n text: at.Name,\r\n value: at.Id\r\n }\r\n activityTypeOptions.push(tmp)\r\n return at;\r\n })\r\n\r\n const setServices = (value) => {\r\n const array = [...selectedServices]\r\n if(array.find(item => item === value)){\r\n // uncheck, remove item from array\r\n setSelectedServices(array.filter(item => item !== value))\r\n } else {\r\n // check, add item to array\r\n array.push(value)\r\n setSelectedServices(array)\r\n }\r\n }\r\n\r\n const setTypes = (value,type) => {\r\n const array = [...selectedTypes];\r\n const selectedItem = array.find(item => item.id === value);\r\n if(selectedItem){\r\n // type found, check if present or remote and change value\r\n if(type==='present'){\r\n selectedItem.present = !selectedItem.present;\r\n } else if(type==='remote') {\r\n selectedItem.remote = !selectedItem.remote;\r\n }\r\n } else {\r\n // type not found, add item to array\r\n if(type==='present'){\r\n array.push({id: value, present: true, remote: false});\r\n } else if(type==='remote') {\r\n array.push({id: value, present: false, remote: true});\r\n }\r\n }\r\n setSelectedTypes(array);\r\n }\r\n\r\n const handleRemote = (isRemote) => {\r\n setOnCallRemote(isRemote)\r\n // delete remote types from selected user types\r\n let array = [...selectedTypes]\r\n array = array.map(item => {\r\n item.remote = false;\r\n return item;\r\n })\r\n setSelectedTypes(array)\r\n }\r\n\r\n const handleActivityChange = (value) => {\r\n setUserActivityType(value)\r\n\r\n //set isActive\r\n if(activityTypes.find(item => item.Id === value).RefName === 'onBreak' || activityTypes.find(item => item.Id === value).RefName === 'quit') {\r\n setIsActive(false)\r\n } else {\r\n setIsActive(true)\r\n }\r\n }\r\n\r\n const handleEmployeeChoice = () => {\r\n if(!isEmployee){\r\n addMessage({type: \"warning\", header: t('message.dataMayBeLost'), body: t('message.onCallDataMayBeLost')})\r\n }\r\n setIsEmployee(!isEmployee)\r\n }\r\n\r\n const handleSave = async () => {\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!username || !firstname || !lastname || !city || !emailAddress || (!isEmployee && !userActivityType)) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n\r\n // Format dates\r\n let dateParts = []\r\n let startDateISO = null;\r\n if(startDate) {\r\n dateParts=startDate.split('.');\r\n startDateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n let nextOneToOneISO = null;\r\n if(nextOneToOne) {\r\n dateParts=nextOneToOne.split('.');\r\n nextOneToOneISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n let breakStartDateISO = null;\r\n if(setBreak && breakStartDate) {\r\n dateParts=breakStartDate.split('.');\r\n breakStartDateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n //create data\r\n let data = {}\r\n // some data is not saved for employees\r\n if(isEmployee){\r\n data = {\r\n \"username\": username.trim(),\r\n \"emailAddress\": emailAddress.trim(),\r\n \"firstName\": firstname,\r\n \"lastName\": lastname,\r\n \"locationId\": city,\r\n \"isActive\": true,\r\n \"sendInvitation\": true,\r\n \"isEmployee\": isEmployee,\r\n \"isRemoteWorker\": false,\r\n \"phoneNumber\": phoneNumber,\r\n \"startDate\": null,\r\n \"userActivityType\": 0,\r\n \"mllPhoneNumber\": '',\r\n \"mllProperty\": '',\r\n \"description\": '',\r\n \"specialDiet\": '',\r\n \"nextOneToOne\": null,\r\n \"keepOnMailingList\": false,\r\n \"breakStartDate\": null,\r\n \"userShiftCountInPreviousSystem\": null\r\n }\r\n } else {\r\n data = {\r\n \"username\": username.trim(),\r\n \"emailAddress\": emailAddress.trim(),\r\n \"firstName\": firstname,\r\n \"lastName\": lastname,\r\n \"locationId\": city,\r\n \"isActive\": isActive,\r\n \"sendInvitation\": true,\r\n \"isEmployee\": isEmployee,\r\n \"isRemoteWorker\": onCallRemote,\r\n \"phoneNumber\": phoneNumber,\r\n \"startDate\": startDateISO,\r\n \"userActivityType\": userActivityType,\r\n \"mllPhoneNumber\": mllPhoneNumber,\r\n \"mllProperty\": mllProperty,\r\n \"description\": description,\r\n \"specialDiet\": specialDiet,\r\n \"nextOneToOne\": nextOneToOneISO,\r\n \"keepOnMailingList\": keepOnMailingList,\r\n \"breakStartDate\": breakStartDateISO,\r\n \"userShiftCountInPreviousSystem\": parseInt(userShiftCountInPreviousSystem)\r\n }\r\n }\r\n\r\n //save\r\n let result = null;\r\n result = await createUser(data);\r\n\r\n if(result.status === 400 && result.data.code === -2){\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.userExists') });\r\n }\r\n\r\n const userId = result.data.id\r\n\r\n if(result.status === 201 && userId) {\r\n // save user services\r\n selectedServices.map(item => {\r\n data = { serviceId: item }\r\n result = createUserService(userId,data,false);\r\n return item;\r\n })\r\n\r\n // save user types\r\n selectedTypes.map(item => {\r\n data = { typeId: item.id, remote: item.remote, present: item.present}\r\n result = createUserType(userId,data,false);\r\n return item;\r\n })\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n\r\n //console.log(selectedTypes)\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{t('heading.user')}

\r\n\r\n \r\n \r\n

{t('user.lastname')}

\r\n setLastname(e.target.value)} />\r\n \r\n

{t('user.firstname')}

\r\n setFirstname(e.target.value)} />\r\n\r\n

{t('user.city')}

\r\n setCity(value)} />\r\n\r\n

{t('user.username')}

\r\n setUsername(e.target.value)} />\r\n\r\n handleEmployeeChoice()}\r\n />\r\n\r\n

{t('user.email')}

\r\n setEmailAddress(e.target.value)} />\r\n\r\n

{t('user.phone')}

\r\n setPhoneNumber(e.target.value)} />\r\n\r\n {!isEmployee &&\r\n <>\r\n

{t('user.description')}

\r\n setDescription(e.target.value)}\r\n />\r\n\r\n

{t('user.specialDiet')}

\r\n setSpecialDiet(e.target.value)}\r\n />\r\n\r\n

{t('user.startDate')} {t('user.basicCourseStartDate')}

\r\n setStartDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n \r\n }\r\n
\r\n \r\n {!isEmployee &&\r\n <>\r\n \r\n

{t('user.remote')}

\r\n handleRemote(true)}\r\n />\r\n handleRemote(false)}\r\n />\r\n
\r\n { onCallRemote &&\r\n <>\r\n

{t('user.mllPhoneNumber')}

\r\n setMllPhoneNumber(e.target.value)} />\r\n

{t('user.mllProperty')}

\r\n setMllProperty(e.target.value)} />\r\n \r\n }\r\n\r\n

{t('user.services')}

\r\n {services.map(item => (\r\n s === item.Id)!== undefined}\r\n onChange={(e,{value}) => setServices(value)}\r\n />\r\n ))}\r\n\r\n \r\n \r\n \r\n

{t('user.channels')}

\r\n
\r\n \r\n {t('user.isPresent')}\r\n \r\n \r\n {t('user.isRemote')}\r\n \r\n
\r\n {types.filter(item => item.ServiceId !== null).map(item => (\r\n \r\n \r\n {item.Abbreviation}\r\n \r\n \r\n s.id === item.Id && s.present)!== undefined}\r\n onChange={(e,{value}) => setTypes(value,'present')}\r\n />\r\n \r\n \r\n {onCallRemote &&\r\n s.id === item.Id && s.remote)!== undefined}\r\n onChange={(e,{value}) => setTypes(value,'remote')}\r\n />\r\n }\r\n \r\n \r\n ))}\r\n
\r\n\r\n

{t('user.activity')}

\r\n handleActivityChange(value)}\r\n />\r\n\r\n {activityTypes && userActivityType && activityTypes.find(item => item.Id === userActivityType).RefName === 'onBreak' ?\r\n setIsActive(!isActive)}\r\n />\r\n :\r\n \r\n }\r\n\r\n setKeepOnMailingList(!keepOnMailingList)}\r\n />\r\n setSetBreak(!setBreak)}\r\n />\r\n {setBreak &&\r\n <>\r\n

{t('user.breakStartDate')}

\r\n setBreakStartDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n \r\n }\r\n\r\n

{t('user.nextOneToOne')}

\r\n setNextOneToOne(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n\r\n

{t('user.shiftsInPreviousSystem')}

\r\n setUserShiftCountInPreviousSystem(e.target.value)} />\r\n \r\n }\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default CreateUser;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useUpdateUser = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of users */ \r\n const updateUser = async (body) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingUser')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.put(rootPath + \"/api/v1/users\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n addMessage({ type: \"success\", header: t('general.saved'), body: t('info.userSaved') });\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingUserFailed') });\r\n window.scrollTo(0,0);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingUserFailed') });\r\n window.scrollTo(0,0);\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { updateUser };\r\n\r\n}\r\n\r\nexport default useUpdateUser;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useDeleteUserService = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of shift users */ \r\n const deleteUserService = async (userId,serviceId,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"deleting\", header: t('general.moment'), body: t('info.deletingUserService')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.delete(rootPath + \"/api/v1/users/\" + userId + \"/services/\" + serviceId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 204) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.deleted'), body: t('info.UserServiceDeleted')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingUserServiceFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingUserServiceFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { deleteUserService };\r\n\r\n}\r\n\r\nexport default useDeleteUserService;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useUpdateUserType = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of users */ \r\n const updateUserType = async (userID,typeID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingUserType')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.put(rootPath + \"/api/v1/users/\" + userID + '/types/' + typeID, body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n if(showSuccess) addMessage({ type: \"success\", header: t('general.saved'), body: t('info.userTypeSaved') });\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingUserTypeFailed') });\r\n window.scrollTo(0,0);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingUserTypeFailed') });\r\n window.scrollTo(0,0);\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { updateUserType };\r\n\r\n}\r\n\r\nexport default useUpdateUserType;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useDeleteUserType = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of user types */ \r\n const deleteUserType = async (userId,TypeId,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"deleting\", header: t('general.moment'), body: t('info.deletingUserType')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.delete(rootPath + \"/api/v1/users/\" + userId + \"/types/\" + TypeId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 204) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.deleted'), body: t('info.UserTypeDeleted')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingUserTypeFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingUserTypeFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { deleteUserType };\r\n\r\n}\r\n\r\nexport default useDeleteUserType;\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Form, Divider, Button, Grid, Loader } from 'semantic-ui-react';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useUpdateUser from '../../Hooks/Users/useUpdateUser';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport useListUserServices from '../../Hooks/Users/useListUserServices';\r\nimport useCreateUserService from '../../Hooks/Users/useCreateUserService';\r\nimport useDeleteUserService from '../../Hooks/Users/useDeleteUserService';\r\nimport useListUserTypes from '../../Hooks/Users/useListUserTypes';\r\nimport useCreateUserType from '../../Hooks/Users/useCreateUserType';\r\nimport useUpdateUserType from '../../Hooks/Users/useUpdateUserType';\r\nimport useDeleteUserType from '../../Hooks/Users/useDeleteUserType';\r\nimport useListActivityTypes from '../../Hooks/Settings/useListActivityTypes';\r\nimport { StateContext } from '../../Context/StateContext';\r\n\r\nconst EditUser = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { id } = useParams();\r\n const { user, fetchingUser, readUser } = useReadUser();\r\n const { updateUser } = useUpdateUser();\r\n const { userServices, fetchingUserServices, listUserServices } = useListUserServices();\r\n const { createUserService } = useCreateUserService();\r\n const { deleteUserService } = useDeleteUserService();\r\n const { userTypes, fetchingUserTypes, listUserTypes } = useListUserTypes();\r\n const { createUserType } = useCreateUserType();\r\n const { updateUserType } = useUpdateUserType();\r\n const { deleteUserType } = useDeleteUserType();\r\n const { activityTypes, fetchingActivityTypes, listActivityTypes } = useListActivityTypes();\r\n const { locations, services, types } = useContext(StateContext);\r\n\r\n const [ firstname, setFirstname ] = useState('');\r\n const [ lastname, setLastname ] = useState('');\r\n const [ city, setCity ] = useState('');\r\n const [ username, setUsername ] = useState('');\r\n const [ emailAddress, setEmailAddress ] = useState('');\r\n const [ phoneNumber, setPhoneNumber ] = useState('');\r\n const [ startDate, setStartDate ] = useState('');\r\n const [ userActivityType, setUserActivityType ] = useState('');\r\n const [ mllPhoneNumber, setMllPhoneNumber ] = useState('');\r\n const [ mllProperty, setMllProperty ] = useState('');\r\n const [ description, setDescription ] = useState('');\r\n const [ specialDiet, setSpecialDiet ] = useState('');\r\n const [ nextOneToOne, setNextOneToOne ] = useState('');\r\n const [ keepOnMailingList, setKeepOnMailingList ] = useState(false);\r\n const [ setBreak, setSetBreak ] = useState(false);\r\n const [ breakStartDate, setBreakStartDate ] = useState('');\r\n const [ isActive, setIsActive ] = useState(false);\r\n const [ isEmployee, setIsEmployee ] = useState(false);\r\n const [ onCallRemote, setOnCallRemote ] = useState(false);\r\n const [ selectedServices, setSelectedServices ] = useState([]);\r\n const [ selectedTypes, setSelectedTypes ] = useState([]);\r\n const [ userShiftCountInPreviousSystem, setUserShiftCountInPreviousSystem ] = useState(0);\r\n\r\n // Fetch user\r\n useEffect(() => {\r\n (async () => {\r\n if (id) {\r\n await readUser(id);\r\n };\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n if (id) {\r\n await listUserServices(id);\r\n };\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n if (id) {\r\n await listUserTypes(id);\r\n };\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // Fetch activity types\r\n useEffect(() => {\r\n (async () => {\r\n await listActivityTypes();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n let activityTypeOptions = []\r\n activityTypes.map(at => {\r\n const tmp = {\r\n key: at.Id,\r\n text: at.Name,\r\n value: at.Id\r\n }\r\n activityTypeOptions.push(tmp)\r\n return at;\r\n })\r\n\r\n // Set user data\r\n useEffect(() => {\r\n (async () => {\r\n if (user.data && user.data.Id) {\r\n setFirstname(user.data.FirstName || '');\r\n setLastname(user.data.LastName || '');\r\n setCity(user.data.LocationId || '');\r\n setUsername(user.data.Username ||'');\r\n setEmailAddress(user.data.EmailAddress ||'');\r\n setIsActive(!user.data.IsActive ? false : true);\r\n setIsEmployee(!user.data.IsEmployee ? false : true);\r\n setOnCallRemote(user.data.IsRemoteWorker || false);\r\n setPhoneNumber(user.data.PhoneNumber || '');\r\n if(user.data.StartDate) setStartDate(new Date(user.data.StartDate).toLocaleDateString());\r\n setUserActivityType(user.data.UserActivityType || null);\r\n setMllPhoneNumber(user.data.MllPhoneNumber || '');\r\n setMllProperty(user.data.MllProperty || '');\r\n setDescription(user.data.Description || '');\r\n setSpecialDiet(user.data.SpecialDiet || '');\r\n if(user.data.NextOneToOne) setNextOneToOne(new Date(user.data.NextOneToOne).toLocaleDateString());\r\n setKeepOnMailingList(user.data.KeepOnMailingList || false);\r\n setSetBreak(user.data.BreakStartDate ? true : false);\r\n if(user.data.BreakStartDate) setBreakStartDate(new Date(user.data.BreakStartDate).toLocaleDateString());\r\n setUserShiftCountInPreviousSystem(user.data.UserShiftCountInPreviousSystem);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [user]);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n let array = []\r\n userServices.map(item => {\r\n array.push(item.ServiceId);\r\n return item;\r\n })\r\n setSelectedServices(array);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[userServices]);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n let array = []\r\n userTypes.map(item => {\r\n array.push({id: item.TypeId, present: item.Present, remote: item.Remote});\r\n return item;\r\n })\r\n setSelectedTypes(array);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[userTypes]);\r\n\r\n let locationOptions = []\r\n locations.map(l => {\r\n if(l.Reference!=='remote'){\r\n const tmp = {\r\n key: l.Id,\r\n text: l.Name,\r\n value: l.Id\r\n }\r\n locationOptions.push(tmp)\r\n }\r\n return l;\r\n })\r\n\r\n const setServices = (value) => {\r\n const array = [...selectedServices]\r\n if(array.find(item => item === value)){\r\n // uncheck, remove item from array\r\n setSelectedServices(array.filter(item => item !== value))\r\n } else {\r\n // check, add item to array\r\n array.push(value)\r\n setSelectedServices(array)\r\n }\r\n }\r\n\r\n const setTypes = (value,type) => {\r\n const array = [...selectedTypes];\r\n const selectedItem = array.find(item => item.id === value);\r\n if(selectedItem){\r\n // type found, check if present or remote and change value\r\n if(type==='present'){\r\n selectedItem.present = !selectedItem.present;\r\n } else if(type==='remote') {\r\n selectedItem.remote = !selectedItem.remote;\r\n }\r\n } else {\r\n // type not found, add item to array\r\n if(type==='present'){\r\n array.push({id: value, present: true, remote: false});\r\n } else if(type==='remote') {\r\n array.push({id: value, present: false, remote: true});\r\n }\r\n }\r\n // save types that have present or remote selected\r\n setSelectedTypes(array.filter(item => item.present || item.remote));\r\n }\r\n\r\n const handleRemote = (isRemote) => {\r\n setOnCallRemote(isRemote)\r\n // delete remote types from selected user types\r\n let array = [...selectedTypes]\r\n array = array.map(item => {\r\n item.remote = false;\r\n return item;\r\n })\r\n setSelectedTypes(array)\r\n }\r\n\r\n const handleActivityChange = (value) => {\r\n setUserActivityType(value)\r\n\r\n //set isActive\r\n if(activityTypes.find(item => item.Id === value).RefName === 'onBreak' || activityTypes.find(item => item.Id === value).RefName === 'quit') {\r\n setIsActive(false)\r\n } else {\r\n setIsActive(true)\r\n }\r\n }\r\n\r\n const handleEmployeeChoice = () => {\r\n if(!isEmployee){\r\n addMessage({type: \"warning\", header: t('message.dataMayBeLost'), body: t('message.onCallDataMayBeLost')})\r\n }\r\n setIsEmployee(!isEmployee)\r\n }\r\n\r\n const handleSave = async () => {\r\n // remove messages\r\n messages.map(item => removeMessage(item.id));\r\n\r\n //validate\r\n if(!username || !firstname || !lastname || !city || !emailAddress || (!isEmployee && !userActivityType)) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0,0);\r\n } else {\r\n\r\n // Format dates\r\n let dateParts = []\r\n let startDateISO = null;\r\n if(startDate) {\r\n dateParts=startDate.split('.');\r\n startDateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n \r\n let nextOneToOneISO = null;\r\n if(nextOneToOne) {\r\n dateParts=nextOneToOne.split('.');\r\n nextOneToOneISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n \r\n let breakStartDateISO = null;\r\n if(setBreak && breakStartDate) {\r\n dateParts=breakStartDate.split('.');\r\n breakStartDateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n //create data\r\n let data = {}\r\n // some data is not saved for employees\r\n if(isEmployee){\r\n data = {\r\n \"id\": parseInt(id),\r\n \"username\": username,\r\n \"emailAddress\": emailAddress.trim(),\r\n \"firstName\": firstname,\r\n \"lastName\": lastname,\r\n \"locationId\": city,\r\n \"isActive\": isActive,\r\n \"sendInvitation\": true,\r\n \"isEmployee\": isEmployee,\r\n \"isRemoteWorker\": false,\r\n \"phoneNumber\": phoneNumber,\r\n \"startDate\": null,\r\n \"userActivityType\": 0,\r\n \"mllPhoneNumber\": '',\r\n \"mllProperty\": '',\r\n \"description\": '',\r\n \"specialDiet\": '',\r\n \"nextOneToOne\": null,\r\n \"keepOnMailingList\": false,\r\n \"breakStartDate\": null,\r\n \"userShiftCountInPreviousSystem\": null\r\n }\r\n } else {\r\n data = {\r\n \"id\": parseInt(id),\r\n \"username\": username,\r\n \"emailAddress\": emailAddress.trim(),\r\n \"firstName\": firstname,\r\n \"lastName\": lastname,\r\n \"locationId\": city,\r\n \"isActive\": isActive,\r\n \"sendInvitation\": true,\r\n \"isEmployee\": isEmployee,\r\n \"isRemoteWorker\": onCallRemote,\r\n \"phoneNumber\": phoneNumber,\r\n \"startDate\": startDateISO,\r\n \"userActivityType\": userActivityType,\r\n \"mllPhoneNumber\": mllPhoneNumber,\r\n \"mllProperty\": mllProperty,\r\n \"description\": description,\r\n \"specialDiet\": specialDiet,\r\n \"nextOneToOne\": nextOneToOneISO,\r\n \"keepOnMailingList\": keepOnMailingList,\r\n \"breakStartDate\": breakStartDateISO,\r\n \"userShiftCountInPreviousSystem\": parseInt(userShiftCountInPreviousSystem)\r\n }\r\n }\r\n //console.log(data)\r\n\r\n //save user\r\n let result = null;\r\n result = await updateUser(data);\r\n\r\n if(result.status === 400 && result.data.code === -2){\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.userExists') });\r\n }\r\n \r\n if(result.status === 200) {\r\n\r\n if(isEmployee){\r\n // delete user services\r\n selectedServices.map(item => {\r\n result = deleteUserService(id,item,false);\r\n })\r\n // delete user types\r\n userTypes.map(item => {\r\n result = deleteUserType(id,item.Id,false);\r\n })\r\n } else {\r\n // save user services\r\n services.map(item => {\r\n if(selectedServices.find(s => s === item.Id)!==undefined && userServices.find(s => s.ServiceId===item.Id)===undefined){\r\n // if selected and was not selected before, add\r\n //console.log(\"lisätään \" + item.Name)\r\n data = { serviceId: item.Id }\r\n result = createUserService(id,data,false);\r\n } else if(selectedServices.find(s => s === item.Id)===undefined && userServices.find(s => s.ServiceId===item.Id)!==undefined){\r\n // if not selected and was selected before, delete\r\n //onsole.log(\"poistetaan \" + item.Name)\r\n result = deleteUserService(id,item.Id,false);\r\n }\r\n return item;\r\n })\r\n \r\n // save user types\r\n types.map(item => {\r\n const selectedType = selectedTypes.find(s => s.id === item.Id)\r\n if(selectedType!==undefined && userTypes.find(s => s.TypeId===item.Id)===undefined){\r\n // if is selected and was not selected before, add\r\n //console.log(\"lisätään \" + item.Name)\r\n data = { typeId: item.Id, remote: selectedType.remote, present: selectedType.present}\r\n result = createUserType(id,data,false);\r\n } else if(selectedType===undefined && userTypes.find(s => s.TypeId===item.Id)!==undefined){\r\n // if not selected and was selected before, delete\r\n //console.log(\"poistetaan \" + item.Name)\r\n result = deleteUserType(id,userTypes.find(s => s.TypeId===item.Id).Id,false);\r\n } else if(selectedType!==undefined && userTypes.find(s => s.TypeId===item.Id)!==undefined){\r\n // if is selected and was selected before, update\r\n //console.log(\"päivitetään \" + item.Name)\r\n const userTypeId = userTypes.find(ut => ut.TypeId === item.Id).Id\r\n data = { remote: selectedType.remote, present: selectedType.present}\r\n result = updateUserType(id,userTypeId,data,false);\r\n }\r\n return item;\r\n })\r\n }\r\n\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n\r\n const loadingContent = (fetchingUser || fetchingUserServices || fetchingUserTypes || fetchingActivityTypes);\r\n\r\n return (\r\n\r\n
\r\n\r\n { loadingContent &&\r\n \r\n }\r\n {!loadingContent &&\r\n <>\r\n \r\n

{t('heading.user')}

\r\n \r\n
\r\n\r\n \r\n \r\n

{t('user.lastname')}

\r\n setLastname(e.target.value)} />\r\n \r\n

{t('user.firstname')}

\r\n setFirstname(e.target.value)} />\r\n\r\n

{t('user.city')}

\r\n setCity(value)} />\r\n\r\n

{t('user.username')}

\r\n setUsername(e.target.value)} disabled />\r\n\r\n handleEmployeeChoice()}\r\n />\r\n\r\n

{t('user.email')}

\r\n setEmailAddress(e.target.value)} />\r\n\r\n

{t('user.phone')}

\r\n setPhoneNumber(e.target.value)} />\r\n\r\n {!isEmployee &&\r\n <>\r\n

{t('user.description')}

\r\n setDescription(e.target.value)}\r\n />\r\n\r\n

{t('user.specialDiet')}

\r\n setSpecialDiet(e.target.value)}\r\n />\r\n\r\n

{t('user.startDate')} {t('user.basicCourseStartDate')}

\r\n setStartDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n \r\n }\r\n \r\n {isEmployee &&\r\n setIsActive(!isActive)}\r\n />\r\n }\r\n\r\n
\r\n \r\n\r\n {!isEmployee &&\r\n <>\r\n \r\n

{t('user.remote')}

\r\n handleRemote(true)}\r\n />\r\n handleRemote(false)}\r\n />\r\n
\r\n { onCallRemote &&\r\n <>\r\n

{t('user.mllPhoneNumber')}

\r\n setMllPhoneNumber(e.target.value)} />\r\n

{t('user.mllProperty')}

\r\n setMllProperty(e.target.value)} />\r\n \r\n }\r\n\r\n

{t('user.services')}

\r\n {services.map(item => (\r\n s === item.Id)!== undefined}\r\n onChange={(e,{value}) => setServices(value)}\r\n />\r\n ))}\r\n\r\n \r\n \r\n \r\n

{t('user.channels')}

\r\n
\r\n \r\n {t('user.isPresent')}\r\n \r\n \r\n {t('user.isRemote')}\r\n \r\n
\r\n {types.filter(item => item.ServiceId !== null).map(item => (\r\n \r\n \r\n {item.Abbreviation}\r\n \r\n \r\n s.id === item.Id && s.present)!== undefined}\r\n onChange={(e,{value}) => setTypes(value,'present')}\r\n />\r\n \r\n \r\n {onCallRemote &&\r\n s.id === item.Id && s.remote)!== undefined}\r\n onChange={(e,{value}) => setTypes(value,'remote')}\r\n />\r\n }\r\n \r\n \r\n ))}\r\n
\r\n\r\n

{t('user.activity')}

\r\n handleActivityChange(value)}\r\n />\r\n\r\n {activityTypes && userActivityType && activityTypes.find(item => item.Id === userActivityType).RefName === 'onBreak' ?\r\n setIsActive(!isActive)}\r\n />\r\n :\r\n \r\n }\r\n \r\n setKeepOnMailingList(!keepOnMailingList)}\r\n />\r\n setSetBreak(!setBreak)}\r\n />\r\n {setBreak &&\r\n <>\r\n

{t('user.breakStartDate')}

\r\n setBreakStartDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n \r\n }\r\n\r\n

{t('user.nextOneToOne')}

\r\n setNextOneToOne(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n \r\n

{t('user.shiftsInPreviousSystem')}

\r\n setUserShiftCountInPreviousSystem(e.target.value)} />\r\n \r\n }\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n }\r\n
\r\n )\r\n\r\n}\r\n\r\nexport default EditUser;","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst pagenotfound = { textAlign: \"center\" }\r\nconst pagenotfoundP = { fontSize: \"72px\", fontWeight: \"bold\" }\r\n\r\nconst PageNotFound = (props) => {\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n
\r\n

{t('errors.pagenotfound')}

\r\n

404

\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default PageNotFound;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst pagenotfound = { textAlign: \"center\" }\r\nconst pagenotfoundP = { fontSize: \"72px\", fontWeight: \"bold\" }\r\n\r\nconst AccessDenied = (props) => {\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n
\r\n

{t('errors.accessdenied')}

\r\n

403

\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default AccessDenied;\r\n","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useSearchShifts = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ shifts, setShifts ] = useState([]);\r\n const [ fetchingShifts, setFetchingShifts ] = useState(true);\r\n\r\n /** search shifts\r\n * @param {searchParams} object including all search parameters\r\n * starttime - shifts after (and including) this date\r\n * endtime - shifts before (and including) this date\r\n * service - shifts having types with this service\r\n * channel - shifts having types with this channel\r\n * type - shifts having this type\r\n * location - shifts in this location\r\n * @returns {array} - array of shifts \r\n */ \r\n const searchShifts = async (searchParams) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingShifts')});\r\n\r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n let queryString = \"\"\r\n if (searchParams && searchParams.startdate) { queryString += \"starttime=\" + searchParams.startdate + '&'}\r\n if (searchParams && searchParams.enddate) { queryString += \"endtime=\" + searchParams.enddate + '&'}\r\n if (searchParams && searchParams.service) { queryString += \"service=\" + searchParams.service + '&'}\r\n if (searchParams && searchParams.channel) { queryString += \"channel=\" + searchParams.channel + '&'}\r\n if (searchParams && searchParams.type) { queryString += \"type=\" + searchParams.type + '&'}\r\n if (searchParams && searchParams.locations) { queryString += \"locations=\" + searchParams.locations}\r\n\r\n //console.log(queryString)\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/search/shifts?\" + queryString, options);\r\n\r\n removeMessage(msgId);\r\n\r\n \r\n if (result && result.status === 200 && result.data) {\r\n setShifts(result.data.data);\r\n setFetchingShifts(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.shiftsNotFound') });\r\n setFetchingShifts(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingShiftsFailed') });\r\n setFetchingShifts(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingShiftsFailed') });\r\n setFetchingShifts(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { shifts, fetchingShifts, searchShifts };\r\n}\r\n\r\nexport default useSearchShifts;","import React, { useState, useContext, useEffect } from 'react';\r\nimport { Form, Checkbox, Divider, Grid, Button } from 'semantic-ui-react';\r\nimport PagedTable from '../../Reusable/Lists/PagedTable';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport useSearchShifts from '../../Hooks/Shifts/useSearchShifts';\r\n\r\nconst ShiftManagement = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { globalState, locations, services, channels, types } = useContext(StateContext);\r\n const { shifts, searchShifts } = useSearchShifts();\r\n\r\n let serviceOptions = [{key: 'all', text: t('shift.service-options.all'), value: ''},]\r\n services.map(s => {\r\n const option = {\r\n key: s.Id,\r\n text: s.Name,\r\n value: s.Id\r\n }\r\n serviceOptions.push(option);\r\n return s;\r\n })\r\n\r\n let channelOptions = [{key: 'all', text: t('shift.channel-options.all'), value: ''},]\r\n channels.map(c => {\r\n const option = {\r\n key: c.Id,\r\n text: t('shift.channel-options.' + c.Reference),\r\n value: c.Id\r\n }\r\n channelOptions.push(option);\r\n return c;\r\n })\r\n\r\n let typeOptions = [{key: 'all', text: t('shift.type-options.all'), value: ''},]\r\n types.map(i => {\r\n const option = {\r\n key: i.Id,\r\n text: i.Name,\r\n value: i.Id\r\n }\r\n typeOptions.push(option);\r\n return t;\r\n })\r\n\r\n const months = [\r\n { key: '01', text: t('general.january'), value: 1 },\r\n { key: '02', text: t('general.february'), value: 2 },\r\n { key: '03', text: t('general.march'), value: 3 },\r\n { key: '04', text: t('general.april'), value: 4 },\r\n { key: '05', text: t('general.may'), value: 5 },\r\n { key: '06', text: t('general.june'), value: 6 },\r\n { key: '07', text: t('general.july'), value: 7 },\r\n { key: '08', text: t('general.august'), value: 8 },\r\n { key: '09', text: t('general.september'), value: 9 },\r\n { key: '10', text: t('general.october'), value: 10 },\r\n { key: '11', text: t('general.november'), value: 11 },\r\n { key: '12', text: t('general.december'), value: 12 }\r\n ]\r\n\r\n /* show years from beginning to year after current year */\r\n let years = []\r\n for (let i = 2021; i < new Date().getFullYear()+2; i++) {\r\n years.push({key: i, text: i, value: i });\r\n }\r\n\r\n // add detail links to shifts\r\n useEffect(() => {\r\n shifts.map(shift => {\r\n shift.viewUrl=\"detail/\"\r\n shift.link=t('general.view')\r\n shift.typeArray = shift.ShiftTypes ? shift.ShiftTypes.map(item => types.filter(type => type.Id === item.TypeId).map(type => type.Name)) : []\r\n shift.countArray = shift.ShiftTypes ? shift.ShiftTypes.map(item => (item.ShiftTypeUsers ? item.ShiftTypeUsers.length : '0') + '/' + item.ShiftUserCount) : []\r\n return shift;\r\n })\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[shifts,types]);\r\n\r\n const setLocations = (value) => {\r\n let newLocations = [];\r\n if(globalState.shiftLocations.includes(value)){\r\n // uncheck -> remove item from array\r\n newLocations = globalState.shiftLocations.filter(item => item!==value)\r\n } else {\r\n //check -> add item to array\r\n newLocations = globalState.shiftLocations.concat(value)\r\n }\r\n globalState.setShiftLocations(newLocations)\r\n }\r\n\r\n const sendRequest = async () => {\r\n // don't send again while we are sending\r\n if (isSending) return\r\n // update state\r\n setIsSending(true)\r\n\r\n let startdate = new Date(globalState.shiftYear + '-' + globalState.shiftMonth + '-01')\r\n let enddate = new Date(globalState.shiftYear,globalState.shiftMonth,1).toLocaleDateString()\r\n const dateArray = enddate.split('.')\r\n let enddateISO = new Date(dateArray[2] + '-' + dateArray[1].padStart(2,'0') + '-' + dateArray[0].padStart(2,'0')).toISOString()\r\n \r\n\r\n // for types that don'thave service (recreation, training etc.) show all shifts beginning from start date\r\n if(types.filter(item => item.ServiceId===null).some(item => item.Id === globalState.shiftType)){\r\n enddateISO = \"\"\r\n }\r\n\r\n let params = {\r\n startdate: startdate.toISOString(),\r\n enddate: enddateISO,\r\n service: globalState.shiftService,\r\n channel: globalState.shiftChannel,\r\n type: globalState.shiftType,\r\n locations: globalState.shiftLocations\r\n }\r\n // send the actual request\r\n await searchShifts(params);\r\n // once the request is sent, update state again\r\n setIsSending(false)\r\n }\r\n\r\n const [isSending, setIsSending] = useState(false)\r\n const [ defaultSearchDone, setDefaultSearchDone ] = useState(false);\r\n\r\n // make default search\r\n useEffect(() => {\r\n if(globalState.shiftLocations.length && !defaultSearchDone){\r\n setIsSending(true)\r\n sendRequest()\r\n setDefaultSearchDone(true)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[globalState.shiftLocations])\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{t('heading.searchShifts')}

\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n globalState.setShiftMonth(value)}\r\n label={t('shift.month')}\r\n options={months}\r\n />\r\n globalState.setShiftYear(value)}\r\n label={t('shift.year')}\r\n options={years}\r\n />\r\n \r\n \r\n globalState.setShiftService(value)}\r\n label={t('shift.service')}\r\n options={serviceOptions}\r\n placeholder={t('shift.service-options.all')}\r\n />\r\n globalState.setShiftChannel(value)}\r\n label={t('shift.channel')}\r\n options={channelOptions}\r\n placeholder={t('shift.channel-options.all')}\r\n />\r\n \r\n \r\n globalState.setShiftType(value)}\r\n label={t('shift.type')}\r\n options={typeOptions}\r\n placeholder={t('shift.type-options.all')}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {locations.map(item =>\r\n setLocations(value)}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default ShiftManagement;","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useSearchShiftTypes = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ shiftTypes, setShiftTypes ] = useState([]);\r\n const [ fetchingShiftTypes, setFetchingShiftTypes ] = useState(true);\r\n\r\n /** search shift types\r\n * @param {searchParams} object including all search parameters\r\n * starttime - shifts after (and including) this date\r\n * endtime - shifts before (and including) this date\r\n * service - shifts having types with this service\r\n * channel - shifts having types with this channel\r\n * type - shifts having this type\r\n * location - shifts in this location\r\n * @returns {array} - array of shift types \r\n */ \r\n const searchShiftTypes = async (searchParams) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingShifts')});\r\n\r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n let queryString = \"\"\r\n if (searchParams && searchParams.startdate) { queryString += \"starttime=\" + searchParams.startdate + '&'}\r\n if (searchParams && searchParams.enddate) { queryString += \"endtime=\" + searchParams.enddate + '&'}\r\n if (searchParams && searchParams.service) { queryString += \"service=\" + searchParams.service + '&'}\r\n if (searchParams && searchParams.channel) { queryString += \"channel=\" + searchParams.channel + '&'}\r\n if (searchParams && searchParams.type) { queryString += \"type=\" + searchParams.type + '&'}\r\n if (searchParams && searchParams.own) { queryString += \"own=\" + searchParams.own + '&'}\r\n if (searchParams && searchParams.locations) { queryString += \"locations=\" + searchParams.locations + '&'}\r\n if (searchParams && searchParams.sort) { queryString += \"sort=\" + searchParams.sort + '&'}\r\n if (searchParams && searchParams.order) { queryString += \"order=\" + searchParams.order + '&'}\r\n\r\n //console.log(queryString)\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/search/shifttypes?\" + queryString, options);\r\n\r\n removeMessage(msgId);\r\n\r\n \r\n if (result && result.status === 200 && result.data) {\r\n setShiftTypes(result.data.data);\r\n setFetchingShiftTypes(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.shiftsNotFound') });\r\n setFetchingShiftTypes(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingShiftsFailed') });\r\n setFetchingShiftTypes(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingShiftsFailed') });\r\n setFetchingShiftTypes(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { shiftTypes, fetchingShiftTypes, searchShiftTypes };\r\n}\r\n\r\nexport default useSearchShiftTypes;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateShiftUser = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** create shift user\r\n * @returns {array} - array of shift users */ \r\n const createShiftUser = async (shiftId, body, showSuccess = true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingShiftUser')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/Shifts/\" + shiftId + \"/users\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.shiftUserSaved')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingShiftUserFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingShiftUserFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createShiftUser };\r\n\r\n}\r\n\r\nexport default useCreateShiftUser;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useDeleteShiftUser = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of shift users */ \r\n const deleteShiftUser = async (shiftId,userId,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"deleting\", header: t('general.moment'), body: t('info.deletingShiftUser')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.delete(rootPath + \"/api/v1/Shifts/\" + shiftId + \"/users/\" + userId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 204) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.deleted'), body: t('info.shiftUserDeleted')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingShiftUserFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingShiftUserFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { deleteShiftUser };\r\n\r\n}\r\n\r\nexport default useDeleteShiftUser;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateSendQueueEmail = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** create shift user\r\n * @returns {array} - array of shift users */ \r\n const createSendQueueEmail = async (body, showSuccess = true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingSendQueueEmail')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/sendqueue\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.sendQueueEmailSaved')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingSendQueueEmailFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingSendQueueEmailFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createSendQueueEmail };\r\n\r\n}\r\n\r\nexport default useCreateSendQueueEmail;\r\n","import React, { useState, useContext, useEffect } from 'react';\r\nimport { Form, Checkbox, Divider, Grid, Button, Modal, Header, Icon } from 'semantic-ui-react';\r\nimport PagedTable from '../../Reusable/Lists/PagedTable';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport useSearchShiftTypes from '../../Hooks/Shifts/useSearchShiftTypes';\r\nimport useCreateShiftUser from '../../Hooks/ShiftUsers/useCreateShiftUser';\r\nimport useDeleteShiftUser from '../../Hooks/ShiftUsers/useDeleteShiftUser';\r\nimport useListUsers from '../../Hooks/Users/useListUsers';\r\nimport { YesButton, NoButton, CloseButton } from '../../Reusable/Buttons/Buttons';\r\nimport useCreateSendQueueEmail from '../../Hooks/SendQueue/useCreateSendQueueEmail';\r\nimport { createMedia } from \"@artsy/fresnel\";\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst ShiftList = (props) => {\r\n\r\n const { MediaContextProvider, Media } = createMedia({\r\n breakpoints: {\r\n sm: 0,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1192,\r\n }\r\n });\r\n\r\n const { t } = useTranslation();\r\n const { globalState, locations, services, channels, types, profile } = useContext(StateContext);\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { shiftTypes, searchShiftTypes } = useSearchShiftTypes();\r\n const { users, listUsers } = useListUsers();\r\n const { createShiftUser } = useCreateShiftUser();\r\n const { deleteShiftUser } = useDeleteShiftUser();\r\n const [ detailOpen, setDetailOpen ] = useState(false);\r\n const [ registrationConfirmOpen, setRegistrationConfirmOpen ] = useState(false);\r\n const [ unregistrationConfirmOpen, setUnregistrationConfirmOpen ] = useState(false);\r\n const [ joinRequestConfirmOpen, setJoinRequestConfirmOpen ] = useState(false);\r\n const [ joinRequestConfirm, setJoinRequestConfirm ] = useState('');\r\n const [ shiftInPastModalOpen, setShiftInPastModalOpen ] = useState(false);\r\n const [ selectedShift, setSelectedShift ] = useState(null);\r\n const [ refresh, setRefresh ] = useState(false);\r\n const [ weekdays, setWeekdays ] = useState([]);\r\n const [ showAllUpcomingEvents, setShowAllUpcomingEvents ] = useState(false);\r\n const [ sendReminder, setSendReminder ] = useState(true)\r\n const { createSendQueueEmail } = useCreateSendQueueEmail();\r\n\r\n let serviceOptions = [{key: 'all', text: t('shift.service-options.all'), value: ''},]\r\n services.map(s => {\r\n const option = {\r\n key: s.Id,\r\n text: s.Name,\r\n value: s.Id\r\n }\r\n serviceOptions.push(option);\r\n return s;\r\n })\r\n\r\n let channelOptions = [{key: 'all', text: t('shift.channel-options.all'), value: ''},]\r\n channels.map(c => {\r\n const option = {\r\n key: c.Id,\r\n text: t('shift.channel-options.' + c.Reference),\r\n value: c.Id\r\n }\r\n channelOptions.push(option);\r\n return c;\r\n })\r\n\r\n let typeOptions = [{key: 'all', text: t('shift.type-options.all'), value: ''},]\r\n types.map(i => {\r\n const option = {\r\n key: i.Id,\r\n text: i.Name,\r\n value: i.Id\r\n }\r\n typeOptions.push(option);\r\n return i;\r\n })\r\n\r\n const months = [\r\n { key: '01', text: t('general.january'), value: 1 },\r\n { key: '02', text: t('general.february'), value: 2 },\r\n { key: '03', text: t('general.march'), value: 3 },\r\n { key: '04', text: t('general.april'), value: 4 },\r\n { key: '05', text: t('general.may'), value: 5 },\r\n { key: '06', text: t('general.june'), value: 6 },\r\n { key: '07', text: t('general.july'), value: 7 },\r\n { key: '08', text: t('general.august'), value: 8 },\r\n { key: '09', text: t('general.september'), value: 9 },\r\n { key: '10', text: t('general.october'), value: 10 },\r\n { key: '11', text: t('general.november'), value: 11 },\r\n { key: '12', text: t('general.december'), value: 12 }\r\n ]\r\n\r\n const createDate = (startdate,offset) => {\r\n const d = new Date(startdate)\r\n const day = d.getDate()\r\n d.setDate(day + offset)\r\n return d.toLocaleDateString();\r\n }\r\n\r\n /* show years from beginning to year after current year */\r\n let years = []\r\n for (let i = 2021; i < new Date().getFullYear()+2; i++) {\r\n years.push({key: i, text: i, value: i });\r\n }\r\n\r\n // Fetch users\r\n useEffect(() => {\r\n (async () => {\r\n await listUsers();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // add detail links to shift types\r\n useEffect(() => {\r\n shiftTypes.map(shift => {\r\n shift.typeName=types.find(item => item.Id === shift.TypeId) !== undefined && types.find(item => item.Id === shift.TypeId).Name;\r\n if(shift.typeName.startsWith('LNPN')){\r\n shift.serviceColor=\"mll-pink\";\r\n } else if(shift.typeName.startsWith('VPN')){\r\n shift.serviceColor=\"mll-blue\";\r\n } else if(shift.typeName.startsWith('BUT')){\r\n shift.serviceColor=\"mll-black\";\r\n } else {\r\n shift.serviceColor=\"mll-blue\";\r\n }\r\n if(shift.typeName.endsWith('Puhelin') || shift.typeName.endsWith('Telefon')){\r\n shift.channelColor=\"mll-turqoise\";\r\n } else if(shift.typeName.endsWith('Chat')){\r\n shift.channelColor=\"mll-green\";\r\n } else if(shift.typeName.endsWith('Nettikirje') || shift.typeName.endsWith('Brevtjänst')){\r\n shift.channelColor=\"mll-beige\";\r\n } else {\r\n //shift.channelColor=\"mll-blue\";\r\n }\r\n if(shift.typeName.startsWith('LNPN') || shift.typeName.startsWith('VPN') || shift.typeName.startsWith('BUT')){\r\n shift.iconName=\"sticky note\";\r\n } else {\r\n shift.iconName=\"sticky note outline\";\r\n }\r\n shift.Date=shift.Shift[0].Date;\r\n shift.Time=new Date(shift.Shift[0].StartTime).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) + '-' + new Date(shift.Shift[0].EndTime).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\r\n shift.StartTime=shift.Shift[0].StartTime;\r\n shift.EndTime=shift.Shift[0].EndTime;\r\n shift.InstructorName=shift.Shift[0].InstructorName;\r\n shift.InstructorPhone=shift.Shift[0].InstructorPhone;\r\n shift.LocationName=shift.Shift[0].LocationName;\r\n shift.Description=shift.Shift[0].Description;\r\n shift.ShiftUsersRegistered = (shift.ShiftUsers ? shift.ShiftUsers.length : '0') + '/' + shift.ShiftUserCount\r\n shift.ShiftUserCountLeft = shift.ShiftUsers ? shift.ShiftUserCount - shift.ShiftUsers.length : shift.ShiftUserCount;\r\n if(new Date(shift.EndTime).getTime() < new Date().getTime()) {\r\n shift.InPast = true\r\n }\r\n if(shift.ShiftUsers && shift.ShiftUsers.find(item => item.UserId === profile.Id) !== undefined) {\r\n // user has registered\r\n shift.actionLink=t('shift.unregister')\r\n } else if(shift.ShiftUserCountLeft===0){\r\n // shift is full\r\n shift.actionLink=t('shift.register')\r\n shift.actionText=t('shift.full')\r\n } else {\r\n shift.actionLink=t('shift.register')\r\n }\r\n return shift;\r\n \r\n })\r\n\r\n // set weekdays to show in search result\r\n let wds = []\r\n if(showAllUpcomingEvents){\r\n shiftTypes.map(item => {\r\n const obj = {num: new Date(item.Shift[0].Date).getDay(), date: createDate(new Date(item.Shift[0].Date),0)}\r\n // if new date, add\r\n if(wds.findIndex(wd => wd.date === obj.date)===-1){\r\n wds.push(obj)\r\n }\r\n return item;\r\n })\r\n } else {\r\n wds = [\r\n {num: 1, date: createDate(globalState.shiftStartDate,0)},\r\n {num: 2, date: createDate(globalState.shiftStartDate,1)},\r\n {num: 3, date: createDate(globalState.shiftStartDate,2)},\r\n {num: 4, date: createDate(globalState.shiftStartDate,3)},\r\n {num: 5, date: createDate(globalState.shiftStartDate,4)},\r\n {num: 6, date: createDate(globalState.shiftStartDate,5)},\r\n {num: 0, date: createDate(globalState.shiftStartDate,6)}\r\n ]\r\n }\r\n setWeekdays(wds)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[shiftTypes,types,profile]);\r\n\r\n const [isSending, setIsSending] = useState(false)\r\n const [ defaultSearchDone, setDefaultSearchDone ] = useState(false);\r\n\r\n // make default search\r\n useEffect(() => {\r\n if(globalState.shiftLocations.length && !defaultSearchDone){\r\n setIsSending(true)\r\n sendRequest()\r\n setDefaultSearchDone(true)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[globalState.shiftLocations])\r\n\r\n const setLocations = (value) => {\r\n let newLocations = [];\r\n if(globalState.shiftLocations.includes(value)){\r\n // uncheck -> remove item from array\r\n newLocations = globalState.shiftLocations.filter(item => item!==value)\r\n } else {\r\n //check -> add item to array\r\n newLocations = globalState.shiftLocations.concat(value)\r\n }\r\n globalState.setShiftLocations(newLocations)\r\n }\r\n\r\n const sendRequest = async (offset = 0) => {\r\n\r\n // don't send again while we are sending\r\n if (isSending) return\r\n\r\n // update state\r\n setIsSending(true)\r\n\r\n // check if own shifts is selected or if selected type is training or recreation\r\n let showAll = false;\r\n if(globalState.ownShiftsOnly) {\r\n showAll = true;\r\n } else if(types.filter(item => item.ServiceId===null).some(item => item.Id === globalState.shiftType)){\r\n showAll = true;\r\n }\r\n\r\n setShowAllUpcomingEvents(showAll);\r\n\r\n let startdate = new Date();\r\n let enddate = new Date();\r\n if(!showAll){\r\n startdate = new Date(globalState.shiftStartDate);\r\n if(offset!==0){\r\n // offset from previous startdate\r\n startdate.setDate(startdate.getDate() + offset)\r\n } else {\r\n // month is selected, set startdate to monday\r\n startdate.setDate(startdate.getDate() - (startdate.getDay() + 6) % 7);\r\n }\r\n \r\n // set enddate to monday of next week\r\n enddate = new Date(startdate);\r\n enddate.setDate(startdate.getDate() + 7);\r\n }\r\n \r\n globalState.setShiftStartDate(new Date(startdate))\r\n\r\n // set time to 00:00:00.000\r\n let month = parseInt(startdate.getMonth()) + 1\r\n startdate = new Date(startdate.getFullYear() + '-' + month.toString().padStart(2,'0') + '-' + startdate.getDate().toString().padStart(2,'0'));\r\n month = parseInt(enddate.getMonth()) + 1\r\n enddate = new Date(enddate.getFullYear() + '-' + month.toString().padStart(2,'0') + '-' + enddate.getDate().toString().padStart(2,'0'));\r\n \r\n let params = null;\r\n if(showAll){\r\n params = {\r\n startdate: startdate.toISOString(),\r\n //enddate: enddate.toISOString(),\r\n service: globalState.shiftService,\r\n //channel: globalState.shiftChannel,\r\n type: globalState.shiftType,\r\n locations: globalState.shiftLocations,\r\n own: globalState.ownShiftsOnly ? 1 : 0,\r\n sort: 'starttime',\r\n order: 'asc'\r\n }\r\n } else {\r\n params = {\r\n startdate: startdate.toISOString(),\r\n enddate: enddate.toISOString(),\r\n service: globalState.shiftService,\r\n //channel: globalState.shiftChannel,\r\n type: globalState.shiftType,\r\n locations: globalState.shiftLocations,\r\n own: globalState.ownShiftsOnly ? 1 : 0,\r\n sort: 'starttime',\r\n order: 'asc'\r\n }\r\n }\r\n\r\n // send the actual request\r\n await searchShiftTypes(params);\r\n\r\n // once the request is sent, update state again\r\n setIsSending(false)\r\n setRefresh(!refresh)\r\n }\r\n \r\n const setMonth = (value) => {\r\n globalState.setShiftMonth(value);\r\n const d = new Date(globalState.shiftYear + '-' + value + '-01');\r\n globalState.setShiftStartDate(new Date(d))\r\n }\r\n\r\n const setYear = (value) => {\r\n globalState.setShiftYear(value);\r\n const d = new Date(value + '-' + globalState.shiftMonth + '-01');\r\n globalState.setShiftStartDate(new Date(d))\r\n }\r\n\r\n const openDetail = (ev,row,item) => {\r\n //console.log(row)\r\n setSelectedShift(row)\r\n setDetailOpen(true)\r\n setJoinRequestConfirm('')\r\n }\r\n\r\n const openConfirm = (ev,row,item) => {\r\n console.log(row)\r\n // find out which confirm modal to open\r\n setSelectedShift(row)\r\n // date is in the past\r\n if(new Date(row.EndTime).getTime() < new Date().getTime()) {\r\n setShiftInPastModalOpen(true)\r\n } else if(row.ShiftUsers && row.ShiftUsers.find(item => item.UserId === profile.Id) !== undefined) {\r\n // user has registered\r\n setUnregistrationConfirmOpen(true)\r\n } else if(row.ShiftUserCountLeft===0){\r\n // shift is full\r\n setJoinRequestConfirmOpen(true)\r\n } else {\r\n setRegistrationConfirmOpen(true)\r\n }\r\n }\r\n\r\n const register = async (shift) => {\r\n if(shift){\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //create shift user data\r\n let data = {\r\n userId: profile.Id,\r\n enrollmentDate: new Date().toISOString(),\r\n shiftTypeId: parseInt(shift.ShiftTypeId),\r\n sendShiftReminder: sendReminder\r\n }\r\n\r\n //save shift\r\n let result = null;\r\n result = await createShiftUser(shift.ShiftId,data);\r\n\r\n //console.log(result)\r\n\r\n if(result.data.status===400 && result.data.code===-2){\r\n addMessage({type: \"error\", header: t('message.alreadyRegistered'), body: t('message.removeRegistrationFirst')})\r\n window.scrollTo(0, 0)\r\n } else if(result.status===201){\r\n //search shifts again to re-render\r\n setIsSending(true)\r\n sendRequest()\r\n }\r\n }\r\n }\r\n\r\n const unregister = async (shift) => {\r\n if(shift){\r\n console.log(shift)\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const shiftUserId = shift.ShiftUsers.find(item => item.UserId === profile.Id).Id;\r\n\r\n //delete shift user\r\n let result = null;\r\n result = await deleteShiftUser(shift.ShiftId,shiftUserId);\r\n \r\n //search shifts again to re-render\r\n if(result.status===204){\r\n setIsSending(true)\r\n sendRequest()\r\n\r\n // send cancellation info to instructor\r\n const instructor = users.find(item => item.Id === shift.Shift[0].InstructorId);\r\n const typeName = types.find(item => item.Id === shift.TypeId).Name;\r\n let body = t('email.registrationCancelledBody')\r\n body = body.replace('$firstname$',profile.FirstName)\r\n body = body.replace('$lastname$',profile.LastName)\r\n body = body.replace('$type$',typeName)\r\n body = body.replace('$date$',new Date(shift.Date).toLocaleDateString())\r\n body = body.replace('$time$',shift.Time)\r\n let data = [{\r\n type: \"email\",\r\n to: instructor.EmailAddress || null,\r\n cc: null,\r\n bcc: null,\r\n subject: t('email.registrationCancelledSubject'),\r\n body: body,\r\n replyTo: profile.EmailAddress\r\n }]\r\n\r\n console.log(data)\r\n \r\n result = await createSendQueueEmail(data,false);\r\n }\r\n }\r\n }\r\n\r\n const handleJoinRequestConfirm = async () => {\r\n // send request to join shift\r\n const instructor = users.find(item => item.Id === selectedShift.Shift[0].InstructorId);\r\n const typeName = types.find(item => item.Id === selectedShift.TypeId).Name;\r\n let body = t('email.requestToJoinBody')\r\n body = body.replace('$firstname$',profile.FirstName)\r\n body = body.replace('$lastname$',profile.LastName)\r\n body = body.replace('$type$',typeName)\r\n body = body.replace('$date$',new Date(selectedShift.Date).toLocaleDateString())\r\n body = body.replace('$time$',selectedShift.Time)\r\n let data = [{\r\n type: \"email\",\r\n to: instructor.EmailAddress || null,\r\n cc: null,\r\n bcc: null,\r\n subject: t('email.requestToJoinSubject'),\r\n body: body,\r\n replyTo: profile.EmailAddress\r\n }]\r\n \r\n let result = null;\r\n result = await createSendQueueEmail(data);\r\n\r\n if(result.status === 201){\r\n setJoinRequestConfirm('sent')\r\n if(!detailOpen){\r\n window.scrollTo(0, 0)\r\n }\r\n }\r\n }\r\n\r\n const shiftDetail = (shift) => {\r\n //console.log(shift)\r\n let date = null;\r\n let time = null;\r\n if(shift.StartTime){\r\n date = new Date(shift.StartTime)\r\n time = date.getHours() + '.' + date.getMinutes().toString().padStart(2,'0')\r\n date = new Date(shift.EndTime)\r\n time += '-' + date.getHours() + '.' + date.getMinutes().toString().padStart(2,'0')\r\n }\r\n\r\n if(shift.ShiftUsers){\r\n shift.ShiftUsers.map(item => {\r\n const user = users.find(usr => usr.Id === item.UserId);\r\n item.Name = user.FirstName + ' ' + user.LastName.substring(0,1) + '.';\r\n return item;\r\n })\r\n }\r\n\r\n return (\r\n <>\r\n

{t('shift.timing')}

\r\n
{shift.Date && new Date(shift.Date).toLocaleDateString()} {time ? t('general.at') + ' ' + time : ''}
\r\n\r\n

{t('shift.type')}

\r\n
{shift.typeName}
\r\n\r\n

{t('shift.location')}

\r\n
{shift.LocationName}
\r\n\r\n

{t('shift.supervisor')}

\r\n
{shift.InstructorName} ({t('user.phone-abbreviation')} {shift.InstructorPhone})
\r\n\r\n {shift.Description &&\r\n <>\r\n

{t('shift.description')}

\r\n
{shift.Description}
\r\n \r\n }\r\n\r\n

{t('shift.onCallPositions')}

\r\n
{shift.ShiftUserCountLeft}/{shift.ShiftUserCount}
\r\n\r\n \r\n {joinRequestConfirm==='confirm' ?\r\n <>\r\n

{t('shift.shiftIsFull')}

\r\n

{t('shift.sendRequestToJoinConfirm')}

\r\n \r\n \r\n \r\n :\r\n <>\r\n {joinRequestConfirm==='sent' ?\r\n <>\r\n

{t('shift.shiftIsFull')}

\r\n

{t('info.joinRequestSent')}

\r\n \r\n :\r\n <>\r\n {shift.ShiftUserCountLeft===0 &&\r\n <>\r\n

{t('shift.shiftIsFull')}

\r\n \r\n \r\n }\r\n \r\n }\r\n \r\n }\r\n\r\n

{t('heading.personsOnCall')}

\r\n {shift.ShiftUsers ?\r\n shift.ShiftUsers.map(item => (\r\n
{item.Name}
\r\n )) \r\n : \r\n
{t('warnings.personsOnCallNotFound')}
\r\n }\r\n \r\n )\r\n \r\n }\r\n\r\n return (\r\n\r\n
\r\n\r\n setDetailOpen(false)}\r\n onOpen={() => setDetailOpen(true)}\r\n >\r\n
\r\n \r\n {/**/}\r\n {selectedShift && shiftDetail(selectedShift)}\r\n \r\n \r\n \r\n {\r\n setDetailOpen(false);\r\n }} />\r\n \r\n\r\n \r\n\r\n setRegistrationConfirmOpen(false)}\r\n onOpen={() => setRegistrationConfirmOpen(true)}\r\n >\r\n
\r\n \r\n

{t('shift.confirmRegistration')}

\r\n setSendReminder(!sendReminder)}\r\n />\r\n
\r\n \r\n \r\n {\r\n setRegistrationConfirmOpen(false);\r\n }} />\r\n {\r\n register(selectedShift)\r\n setRegistrationConfirmOpen(false);\r\n }} />\r\n \r\n \r\n\r\n setUnregistrationConfirmOpen(false)}\r\n onOpen={() => setUnregistrationConfirmOpen(true)}\r\n >\r\n
\r\n \r\n

{t('shift.confirmUnregistration')}

\r\n
\r\n \r\n \r\n {\r\n setUnregistrationConfirmOpen(false);\r\n }} />\r\n {\r\n unregister(selectedShift)\r\n setUnregistrationConfirmOpen(false);\r\n }} />\r\n \r\n \r\n\r\n setJoinRequestConfirmOpen(false)}\r\n onOpen={() => setJoinRequestConfirmOpen(true)}\r\n >\r\n
\r\n \r\n

{t('shift.sendRequestToJoinConfirmModal')}

\r\n
\r\n \r\n \r\n {\r\n setJoinRequestConfirmOpen(false);\r\n }} />\r\n {\r\n handleJoinRequestConfirm(selectedShift)\r\n setJoinRequestConfirmOpen(false);\r\n }} />\r\n \r\n \r\n\r\n setShiftInPastModalOpen(false)}\r\n onOpen={() => setShiftInPastModalOpen(true)}\r\n >\r\n
\r\n \r\n {t('modal.noRegistrationToShiftsInPast')}\r\n \r\n \r\n \r\n {\r\n setShiftInPastModalOpen(false);\r\n }} />\r\n \r\n\r\n \r\n\r\n
\r\n \r\n \r\n \r\n setMonth(value) }\r\n label={t('shift.month')}\r\n options={months}\r\n />\r\n setYear(value)}\r\n label={t('shift.year')}\r\n options={years}\r\n />\r\n \r\n \r\n globalState.setShiftService(value)}\r\n label={t('shift.service')}\r\n options={serviceOptions}\r\n placeholder={t('shift.service-options.all')}\r\n />\r\n globalState.setShiftType(value)}\r\n label={t('shift.type')}\r\n options={typeOptions}\r\n placeholder={t('shift.type-options.all')}\r\n />\r\n \r\n \r\n globalState.setOwnShiftsOnly(!globalState.ownShiftsOnly)}\r\n label={t('shift.showOwnShiftsOnly')}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {locations.map(item =>\r\n setLocations(value)}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n {showAllUpcomingEvents ?\r\n

{t('shift.upcomingShifts')}

\r\n :\r\n \r\n \r\n

{t('shift.shiftsForWeek')}

\r\n \r\n {isSending ?\r\n <>\r\n \r\n \r\n \r\n :\r\n <>\r\n \r\n \r\n \r\n }\r\n \r\n
\r\n
\r\n }\r\n \r\n {weekdays.length === 0 ?\r\n
{t('warnings.shiftsNotFound')}
\r\n :\r\n <>\r\n {weekdays.map((wd,index) =>\r\n <>\r\n {shiftTypes.filter(item => new Date(item.Date).getDay() === wd.num).length === 0 ?\r\n
\r\n

{t('general.weekdays.' + wd.num) + ' ' + wd.date}

\r\n
{t('warnings.shiftsNotFound')}
\r\n
\r\n :\r\n
\r\n

{t('general.weekdays.' + wd.num) + ' ' + wd.date}

\r\n
\r\n \r\n \r\n new Date(item.Date).toLocaleDateString() === wd.date)}\r\n contentKeys={[\r\n {key: 'Time', cellWidth: '2'},\r\n {key: 'typeName', type: 'action', action: openDetail, targetKey: 'Id', cellWidth: '6'},\r\n {key: 'iconName', key2: 'serviceColor', key3: 'channelColor', type: 'icons'},\r\n {key: 'LocationName', cellWidth: '3'},\r\n {key: 'InstructorName', cellWidth: '3'},\r\n {key: 'ShiftUsersRegistered'},\r\n {key: 'actionLink', key2: 'actionText', type: 'keyWithActionButton', action: openConfirm, targetKey: 'Id', cellWidth: '2', disabled: 'InPast'}\r\n ]}\r\n pageSize='20'\r\n \r\n />\r\n \r\n \r\n {shiftTypes.filter(item => new Date(item.Date).toLocaleDateString() === wd.date).map(shift =>\r\n <>\r\n
\r\n {shift.InPast ?\r\n \r\n :\r\n \r\n }\r\n
{shift.Time} {shift.LocationName}
\r\n
\r\n \r\n {shift.channelColor && }\r\n { ev.preventDefault(); openDetail(ev,shift,null)}}>{shift.typeName}\r\n
\r\n
{shift.InstructorName}
\r\n
{t('heading.personsOnCall')} {shift.ShiftUsersRegistered} {shift.actionText}
\r\n\r\n
\r\n {/*
\r\n
{shift.Time} {shift.LocationName}
\r\n
\r\n {shift.typeName} \r\n {shift.channelColor && }\r\n
\r\n
{t('shift.supervisor')} {shift.InstructorName}
\r\n
{shift.ShiftUsersRegistered} {shift.actionText}
\r\n {shift.InPast ?\r\n \r\n :\r\n \r\n }\r\n
\r\n
\r\n
\r\n
{shift.Time} {shift.typeName}
\r\n
{shift.LocationName}
\r\n
{t('shift.supervisor')} {shift.InstructorName}
\r\n
{shift.ShiftUsersRegistered}
\r\n
*/}\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n }\r\n \r\n )}\r\n \r\n }\r\n {!showAllUpcomingEvents &&\r\n
\r\n {isSending ?\r\n <>\r\n \r\n \r\n \r\n :\r\n <>\r\n \r\n \r\n \r\n }\r\n
\r\n }\r\n \r\n \r\n )\r\n}\r\n\r\nexport default ShiftList;","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useReadShift = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ shift, setShift ] = useState([]);\r\n const [ fetchingShift, setFetchingShift ] = useState(true);\r\n\r\n /** read shift\r\n * @param {integer} id - shift id\r\n * @returns {object} - shift */ \r\n const readShift = async (id) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingShift')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/shifts/\" + id, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200 && result.data) {\r\n setShift(result.data.data);\r\n setFetchingShift(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.shiftNotFound') });\r\n setFetchingShift(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingShiftFailed') });\r\n setFetchingShift(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingShiftFailed') });\r\n setFetchingShift(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { shift, fetchingShift, readShift };\r\n\r\n}\r\n\r\nexport default useReadShift;\r\n","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListShiftTypes = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage } = useContext(MessageContext);\r\n const [ shiftTypes, setShiftTypes ] = useState([]);\r\n const [ fetchingShiftTypes, setFetchingShiftTypes ] = useState(true);\r\n\r\n /** search shift types\r\n * @returns {array} - array of shift types \r\n */ \r\n const listShiftTypes = async (id) => {\r\n try {\r\n\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/shifts/\" + id + \"/types\", options);\r\n\r\n \r\n if (result && result.status === 200 && result.data) {\r\n setShiftTypes(result.data.data);\r\n setFetchingShiftTypes(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.shiftTypesNotFound') });\r\n setFetchingShiftTypes(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingShiftTypesFailed') });\r\n setFetchingShiftTypes(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingShiftTypesFailed') });\r\n setFetchingShiftTypes(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { shiftTypes, fetchingShiftTypes, listShiftTypes };\r\n}\r\n\r\nexport default useListShiftTypes;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateShift = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of shifts */ \r\n const createShift = async (body) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingShift')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/shifts\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.shiftSaved')});\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingShiftFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingShiftFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createShift };\r\n\r\n}\r\n\r\nexport default useCreateShift;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateShiftType = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** create shift type\r\n * @returns {array} - array of ShiftTypes */ \r\n const createShiftType = async (shiftId, body, showSuccess = true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingShiftType')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/Shifts/\" + shiftId + \"/types\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.shiftTypeSaved')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingShiftTypeFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingShiftTypeFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createShiftType };\r\n\r\n}\r\n\r\nexport default useCreateShiftType;\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { Form, Checkbox, Divider, Button, Grid, Popup } from 'semantic-ui-react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport useReadShift from '../../Hooks/Shifts/useReadShift';\r\nimport useListShiftTypes from '../../Hooks/Shifts/useListShiftTypes';\r\nimport useListUsers from '../../Hooks/Users/useListUsers';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport useCreateShift from '../../Hooks/Shifts/useCreateShift';\r\nimport useCreateShiftType from '../../Hooks/Shifts/useCreateShiftType';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Select from 'react-select';\r\n\r\nconst CreateShift = (props) => {\r\n\r\n const { t } = useTranslation()\r\n const { id } = useParams();\r\n const [ date, setDate ] = useState(null)\r\n const [ timing, setTiming ] = useState('')\r\n const [ startTime, setStartTime ] = useState('')\r\n const [ endTime, setEndTime ] = useState('')\r\n const [ shiftTypesSelection, setShiftTypesSelection ] = useState([])\r\n const [ location, setLocation ] = useState('')\r\n const [ supervisor, setSupervisor ] = useState('')\r\n const [ description, setDescription ] = useState('')\r\n const [ isSaving, setIsSaving ] = useState(false);\r\n const { shift, readShift } = useReadShift();\r\n const { shiftTypes, listShiftTypes } = useListShiftTypes();\r\n const { users, listUsers } = useListUsers();\r\n const { locations, types, timeOfDays } = useContext(StateContext)\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { createShift } = useCreateShift();\r\n const { createShiftType } = useCreateShiftType();\r\n\r\n // Fetch shift\r\n useEffect(() => {\r\n (async () => {\r\n if(id){\r\n await readShift(id);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[id]);\r\n\r\n // Fetch shift types\r\n useEffect(() => {\r\n (async () => {\r\n if(id){\r\n await listShiftTypes(id);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[shift]);\r\n\r\n // Set shift data\r\n useEffect(() => {\r\n (async () => {\r\n if (shift && shift.Id) {\r\n const startTime = new Date(shift.StartTime).getHours() + '.' + new Date(shift.StartTime).getMinutes().toString().padStart(2,'0')\r\n const endTime = new Date(shift.EndTime).getHours() + '.' + new Date(shift.EndTime).getMinutes().toString().padStart(2,'0')\r\n setDate(new Date(shift.Date).toLocaleDateString());\r\n setStartTime(startTime);\r\n setEndTime(endTime);\r\n setSupervisor(shift.InstructorId);\r\n setLocation(shift.LocationId);\r\n setDescription(shift.Description)\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [shift]);\r\n\r\n // Set shift types to shift data\r\n useEffect(() => {\r\n (async () => {\r\n let newArray = []\r\n shiftTypes.map(item => {\r\n newArray.push({type: item.TypeId, amount: item.ShiftUserCount})\r\n return item;\r\n })\r\n setShiftTypesSelection(newArray)\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[shiftTypes]);\r\n\r\n // Fetch users\r\n useEffect(() => {\r\n (async () => {\r\n await listUsers();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n let timeOfDayOptions = []\r\n timeOfDays.map(i => {\r\n const option = {\r\n key: i.Id,\r\n text: t('shift.' + i.Rerefence),\r\n value: i.Rerefence\r\n }\r\n timeOfDayOptions.push(option);\r\n return i;\r\n })\r\n\r\n let locationOptions = []\r\n locations.map(i => {\r\n const option = {\r\n key: i.Id,\r\n text: i.Name,\r\n value: i.Id\r\n }\r\n locationOptions.push(option);\r\n return i;\r\n })\r\n\r\n let typeOptions = []\r\n types.map(i => {\r\n const option = {\r\n key: i.Id,\r\n text: i.Name,\r\n value: i.Id\r\n }\r\n typeOptions.push(option);\r\n return i;\r\n })\r\n\r\n let supervisors = []\r\n users.filter(item => item.IsEmployee).map(item => {\r\n const supervisor = {\r\n key: item.Id,\r\n label: item.LastName + ' ' + item.FirstName,\r\n value: item.Id\r\n }\r\n supervisors.push(supervisor);\r\n return item;\r\n })\r\n\r\n const setTimes = (value) => {\r\n setTiming(value);\r\n if(value==='other'){\r\n setStartTime('')\r\n setEndTime('')\r\n } else {\r\n const startDate = timeOfDays.find(item => item.Rerefence===value).StartTime\r\n const startTime = new Date(startDate).getUTCHours().toString().padStart(2,'0') + '.' + new Date(startDate).getUTCMinutes().toString().padStart(2,'0')\r\n const endDate = timeOfDays.find(item => item.Rerefence===value).EndTime\r\n const endTime = new Date(endDate).getUTCHours().toString().padStart(2,'0') + '.' + new Date(endDate).getUTCMinutes().toString().padStart(2,'0')\r\n setStartTime(startTime)\r\n setEndTime(endTime)\r\n }\r\n }\r\n\r\n const setTypes = (value) => {\r\n if(shiftTypesSelection.find(item => item.type === value)){\r\n const newArray = shiftTypesSelection.filter(item => item.type !== value)\r\n // uncheck -> remove item from array\r\n setShiftTypesSelection(newArray)\r\n } else {\r\n //check -> add item to array\r\n const newObj = {type: value }\r\n setShiftTypesSelection(shiftTypesSelection.concat(newObj))\r\n }\r\n }\r\n\r\n const setPersonsOnCall = (type,value) => {\r\n const obj = shiftTypesSelection.filter(item => item.type !== type)\r\n if(value){\r\n obj.push({type: type, amount: parseInt(value)})\r\n } else {\r\n obj.push({type: type})\r\n }\r\n setShiftTypesSelection(obj)\r\n }\r\n\r\n const validateTime = (time) => {\r\n const timeReg = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):|.[0-5][0-9]$/\r\n return time.match(timeReg)\r\n }\r\n\r\n const handleSave = async () => {\r\n\r\n\r\n if(isSaving) return false;\r\n setIsSaving(true)\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!date || !startTime || !endTime || !location || !supervisor || shiftTypesSelection.length === 0 || shiftTypesSelection.find(item => item.amount === undefined)) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else if(!validateTime(startTime) || !validateTime(endTime)) {\r\n addMessage({type: \"error\", header: t('message.checkTimeFormat'), body: t('message.rightTimeFormat')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n //create shift data\r\n const dates = date + '.' + startTime.replace(':','.') + '.' + endTime.replace(':','.')\r\n const dateArray = dates.split('.')\r\n let data = {\r\n \"date\": new Date(dateArray[2] + '-' + dateArray[1].padStart(2,'0') + '-' + dateArray[0].padStart(2,'0')).toISOString(),\r\n \"startTime\": new Date(dateArray[2],dateArray[1]-1,dateArray[0],dateArray[3] || '00',dateArray[4] || '00').toISOString(),\r\n \"endTime\": new Date(dateArray[2],dateArray[1]-1,dateArray[0],dateArray[5] || '00',dateArray[6] || '00').toISOString(),\r\n \"locationId\": location,\r\n \"instructorId\": supervisor,\r\n \"description\": description\r\n }\r\n\r\n //save shift\r\n let result = null;\r\n result = await createShift(data);\r\n\r\n const shiftId = result.data.id\r\n\r\n if(result.status === 201 && shiftId) {\r\n // create shift types\r\n shiftTypesSelection.map(item => {\r\n if(item.type && item.amount){\r\n data = {\r\n \"typeId\": item.type,\r\n \"shiftUserCount\": item.amount\r\n }\r\n result = createShiftType(shiftId, data, false);\r\n }\r\n return item;\r\n })\r\n props.history.goBack();\r\n }\r\n }\r\n setIsSaving(false)\r\n }\r\n\r\n return (\r\n
\r\n

{t('heading.shift')}

\r\n
\r\n

{t('shift.date')}

\r\n setDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n
\r\n

{t('shift.timing')}

\r\n setTimes(value)}\r\n options={timeOfDayOptions}\r\n />\r\n \r\n \r\n

{t('shift.starttime')}

\r\n setStartTime(e.target.value)}\r\n value={startTime}\r\n />\r\n
\r\n \r\n

{t('shift.endtime')}

\r\n setEndTime(e.target.value)}\r\n value={endTime}\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n

{t('shift.type')}

\r\n \r\n {typeOptions.map(item =>\r\n \r\n setTypes(value)}\r\n value={item.value}\r\n checked={shiftTypesSelection.find(t => t.type === item.value)!==undefined}\r\n />\r\n {shiftTypesSelection.find(t => t.type === item.value) ?\r\n <>\r\n
Max.
\r\n t.type === item.value).amount}\r\n onChange={(e) => setPersonsOnCall(item.value,e.target.value)}\r\n className='small-text'\r\n />\r\n
{t('shift.numberOfPersonsOnCall')}} />
\r\n \r\n :\r\n <>
{t('shift.numberOfPersonsOnCall')}
\r\n }\r\n
\r\n )}\r\n
\r\n \r\n

{t('shift.location')}

\r\n setLocation(value)}\r\n options={locationOptions}\r\n />\r\n\r\n
\r\n

{t('shift.supervisor')}

\r\n item.value === supervisor)}\r\n onChange={person => setSupervisor(person.value)}\r\n options={supervisors}\r\n placeholder={t('user.searchWithLastnameOrFirstname')}\r\n menuPlacement='top'\r\n />\r\n
\r\n setDescription(e.target.value)}\r\n />\r\n \r\n \r\n {isSaving ?\r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default CreateShift;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useUpdateShift = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of Shifts */ \r\n const updateShift = async (body) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingShift')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.put(rootPath + \"/api/v1/Shifts\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n addMessage({ type: \"success\", header: t('general.saved'), body: t('info.shiftSaved') });\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingShiftFailed') });\r\n window.scrollTo(0,0);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingShiftFailed') });\r\n window.scrollTo(0,0);\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { updateShift };\r\n\r\n}\r\n\r\nexport default useUpdateShift;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useUpdateShiftType = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of shift types */ \r\n const updateShiftType = async (shiftId,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingShiftType')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.put(rootPath + \"/api/v1/Shifts/\" + shiftId + \"/types\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n if (showSuccess) {\r\n addMessage({ type: \"success\", header: t('general.saved'), body: t('info.shiftTypeSaved') });\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingShiftTypeFailed') });\r\n window.scrollTo(0,0);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingShiftTypeFailed') });\r\n window.scrollTo(0,0);\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { updateShiftType };\r\n\r\n}\r\n\r\nexport default useUpdateShiftType;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useDeleteShiftType = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of shift types */ \r\n const deleteShiftType = async (shiftId,shiftTypeId,showSuccess = true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"deleting\", header: t('general.moment'), body: t('info.deletingShiftType')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.delete(rootPath + \"/api/v1/Shifts/\" + shiftId + \"/types/\" + shiftTypeId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 204) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.deleted'), body: t('info.shiftTypeDeleted')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingShiftTypeFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingShiftTypeFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { deleteShiftType };\r\n\r\n}\r\n\r\nexport default useDeleteShiftType;\r\n","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListShiftUsers = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage } = useContext(MessageContext);\r\n const [ shiftUsers, setShiftUsers ] = useState([]);\r\n const [ fetchingShiftUsers, setFetchingShiftUsers ] = useState(true);\r\n\r\n /** search shift Users\r\n * @returns {array} - array of shift Users \r\n */ \r\n const listShiftUsers = async (id) => {\r\n try {\r\n\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/shifts/\" + id + \"/users\", options);\r\n\r\n \r\n if (result && result.status === 200 && result.data) {\r\n setShiftUsers(result.data.data);\r\n setFetchingShiftUsers(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.shiftUsersNotFound') });\r\n setFetchingShiftUsers(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingShiftUsersFailed') });\r\n setFetchingShiftUsers(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingShiftUsersFailed') });\r\n setFetchingShiftUsers(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { shiftUsers, fetchingShiftUsers, listShiftUsers };\r\n}\r\n\r\nexport default useListShiftUsers;","import React, { useState, useEffect, useContext } from 'react';\r\nimport { Form, Checkbox, Divider, Button } from 'semantic-ui-react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport useReadShift from '../../Hooks/Shifts/useReadShift';\r\nimport useListShiftTypes from '../../Hooks/Shifts/useListShiftTypes';\r\nimport useListUsers from '../../Hooks/Users/useListUsers';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport useUpdateShift from '../../Hooks/Shifts/useUpdateShift';\r\nimport useCreateShiftType from '../../Hooks/Shifts/useCreateShiftType';\r\nimport useUpdateShiftType from '../../Hooks/Shifts/useUpdateShiftType';\r\nimport useDeleteShiftType from '../../Hooks/Shifts/useDeleteShiftType';\r\nimport useListShiftUsers from '../../Hooks/ShiftUsers/useListShiftUsers';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Select from 'react-select';\r\n\r\nconst UpdateShift = (props) => {\r\n\r\n const { t } = useTranslation()\r\n const { id } = useParams();\r\n const { shift, readShift } = useReadShift();\r\n const { shiftTypes, listShiftTypes } = useListShiftTypes();\r\n const { users, listUsers } = useListUsers();\r\n const { locations, types } = useContext(StateContext)\r\n const [ date, setDate ] = useState('')\r\n const [ startTime, setStartTime ] = useState('')\r\n const [ endTime, setEndTime ] = useState('')\r\n const [ shiftTypesSelection, setShiftTypesSelection ] = useState([{}])\r\n const [ location, setLocation ] = useState('')\r\n const [ supervisor, setSupervisor ] = useState('')\r\n const [ description, setDescription ] = useState('')\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { updateShift } = useUpdateShift();\r\n const { createShiftType } = useCreateShiftType();\r\n const { updateShiftType } = useUpdateShiftType();\r\n const { deleteShiftType } = useDeleteShiftType();\r\n const { shiftUsers, listShiftUsers } = useListShiftUsers();\r\n\r\n // Fetch shift\r\n useEffect(() => {\r\n (async () => {\r\n await readShift(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // Fetch shift types\r\n useEffect(() => {\r\n (async () => {\r\n await listShiftTypes(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[shift]);\r\n\r\n // Fetch shift users\r\n useEffect(() => {\r\n (async () => {\r\n await listShiftUsers(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[shift]);\r\n\r\n // Set shift data\r\n useEffect(() => {\r\n (async () => {\r\n if (shift && shift.Id) {\r\n const startTime = new Date(shift.StartTime).getHours() + '.' + new Date(shift.StartTime).getMinutes().toString().padStart(2,'0')\r\n const endTime = new Date(shift.EndTime).getHours() + '.' + new Date(shift.EndTime).getMinutes().toString().padStart(2,'0')\r\n setDate(new Date(shift.Date).toLocaleDateString());\r\n setStartTime(startTime);\r\n setEndTime(endTime);\r\n setSupervisor(shift.InstructorId);\r\n setLocation(shift.LocationId);\r\n setDescription(shift.Description)\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [shift]);\r\n\r\n let d = null;\r\n let time = null;\r\n if(shift.StartTime){\r\n d = new Date(shift.StartTime)\r\n time = d.getHours() + '.' + d.getMinutes().toString().padStart(2,'0')\r\n d = new Date(shift.EndTime)\r\n time += '-' + d.getHours() + '.' + d.getMinutes().toString().padStart(2,'0')\r\n }\r\n\r\n // Set shift types to shift data\r\n useEffect(() => {\r\n (async () => {\r\n let newArray = []\r\n shiftTypes.map(item => {\r\n newArray.push({type: item.TypeId, amount: item.ShiftUserCount})\r\n return item;\r\n })\r\n setShiftTypesSelection(newArray)\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[shiftTypes]);\r\n\r\n // Fetch users\r\n useEffect(() => {\r\n (async () => {\r\n await listUsers();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n let locationOptions = []\r\n locations.map(i => {\r\n const option = {\r\n key: i.Id,\r\n text: i.Name,\r\n value: i.Id\r\n }\r\n locationOptions.push(option);\r\n return i;\r\n })\r\n\r\n let typeOptions = []\r\n types.map(i => {\r\n const option = {\r\n key: i.Id,\r\n text: i.Name,\r\n value: i.Id\r\n }\r\n typeOptions.push(option);\r\n return i;\r\n })\r\n\r\n let supervisors = []\r\n users.filter(item => item.IsEmployee).map(item => {\r\n const supervisor = {\r\n key: item.Id,\r\n label: item.LastName + ' ' + item.FirstName,\r\n value: item.Id\r\n }\r\n supervisors.push(supervisor);\r\n return item;\r\n })\r\n\r\n const setTypes = (value) => {\r\n if(shiftTypesSelection.find(item => item.type === value)){\r\n const newArray = shiftTypesSelection.filter(item => item.type !== value)\r\n // uncheck -> remove item from array\r\n setShiftTypesSelection(newArray)\r\n } else {\r\n //check -> add item to array\r\n const newObj = {type: value }\r\n setShiftTypesSelection(shiftTypesSelection.concat(newObj))\r\n }\r\n }\r\n\r\n const setPersonsOnCall = (type,value) => {\r\n const obj = shiftTypesSelection.filter(item => item.type !== type)\r\n if(value){\r\n obj.push({type: type, amount: parseInt(value)})\r\n } else {\r\n obj.push({type: type})\r\n }\r\n setShiftTypesSelection(obj)\r\n }\r\n\r\n const handleSave = async () => {\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!date || !startTime || !endTime || !location || !supervisor || shiftTypesSelection.length === 0 || shiftTypesSelection.find(item => item.amount === undefined)) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n let errors = false\r\n let errTypes = []\r\n shiftTypes.map(item => {\r\n const usersOnCall = shiftUsers.filter(user => user.ShiftTypeId === item.Id)\r\n const selectedType = shiftTypesSelection.find(t => t.type === item.TypeId)\r\n if(selectedType === undefined) {\r\n if(usersOnCall.length>0){\r\n // there are people enrolled and type is being deleted\r\n errors=true\r\n errTypes.push(item.TypeName)\r\n }\r\n } else if(usersOnCall.length>selectedType.amount){\r\n // there are more people enrolled than available places\r\n errors=true\r\n errTypes.push(item.TypeName)\r\n }\r\n return item;\r\n })\r\n\r\n\r\n if(errors){\r\n addMessage({type: \"error\", header: t('errors.usersEnrolled'), body: t('errors.usersEnrolledError') + ' ' + errTypes.toString()})\r\n window.scrollTo(0, 0)\r\n } else {\r\n\r\n //create data\r\n const dates = date + '.' + startTime + '.' + endTime\r\n const dateArray = dates.split('.')\r\n let data = {\r\n \"id\": parseInt(id),\r\n \"date\": new Date(dateArray[2] + '-' + dateArray[1].padStart(2,'0') + '-' + dateArray[0].padStart(2,'0')).toISOString(),\r\n \"startTime\": new Date(dateArray[2],dateArray[1]-1,dateArray[0],dateArray[3],dateArray[4]).toISOString(),\r\n \"endTime\": new Date(dateArray[2],dateArray[1]-1,dateArray[0],dateArray[5],dateArray[6]).toISOString(),\r\n \"locationId\": location,\r\n \"instructorId\": supervisor,\r\n \"description\": description || ''\r\n }\r\n\r\n //save\r\n let result = null;\r\n result = await updateShift(data);\r\n\r\n if(result.status === 200) {\r\n\r\n types.map(type => {\r\n const sts = shiftTypesSelection.find(item => item.type === type.Id)\r\n if (sts !== undefined) {\r\n // type is selected\r\n if (shiftTypes.find(item => item.TypeId === type.Id) !== undefined) {\r\n // type was selected before => update shift type\r\n data = {\r\n \"shiftTypeId\": shiftTypes.find(item => item.TypeId === type.Id).Id,\r\n \"typeId\": sts.type,\r\n \"shiftUserCount\": sts.amount\r\n }\r\n result = updateShiftType(id, data, false);\r\n } else {\r\n // type was not selected before => create new shift type\r\n data = {\r\n \"typeId\": sts.type,\r\n \"shiftUserCount\": sts.amount\r\n }\r\n result = createShiftType(id, data, false);\r\n }\r\n } else {\r\n // type is not selected\r\n const st = shiftTypes.find(item => item.TypeId === type.Id)\r\n if (st !== undefined) {\r\n // type was selected before => delete shift type\r\n const shiftTypeId = shiftTypes.find(item => item.TypeId === type.Id).Id,\r\n result = deleteShiftType(id, shiftTypeId, false);\r\n }\r\n }\r\n return type;\r\n })\r\n\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n

{t('heading.shift')}

\r\n
\r\n
\r\n

{t('shift.timing')}

\r\n
{shift.Date && new Date(shift.Date).toLocaleDateString()} {time ? t('general.at') + ' ' + time : ''}
\r\n
\r\n \r\n
\r\n {typeOptions.map(item =>\r\n \r\n setTypes(value)}\r\n value={item.value}\r\n checked={shiftTypesSelection.find(t => t.type === item.value)!==undefined}\r\n />\r\n {shiftTypesSelection.find(t => t.type === item.value) ?\r\n <>\r\n
Max.
\r\n t.type === item.value).amount}\r\n onChange={(e) => setPersonsOnCall(item.value,e.target.value)}\r\n className='small-text'\r\n />\r\n
{t('shift.numberOfPersonsOnCall')}
\r\n \r\n :\r\n <>
{t('shift.numberOfPersonsOnCall')}
\r\n }\r\n
\r\n )}\r\n \r\n
\r\n

{t('shift.location')}

\r\n
{locations.filter(item => item.Id === location).map(item => item.Name)}
\r\n
\r\n\r\n
\r\n item.value === personOnCall)}\r\n onChange={person => setPersonOnCall(person.value)}\r\n label={t('shift.selectPerson')}\r\n options={persons}\r\n placeholder={t('user.searchWithLastnameOrFirstname')}\r\n menuPlacement='top'\r\n />\r\n
\r\n setSendReminder(!sendReminder)}\r\n label={t('shift.sendReminderToUser')}\r\n />\r\n \r\n\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default AddUserToShift;","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Button } from 'semantic-ui-react';\r\n\r\nconst Start = (props) => {\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n
\r\n

{t('heading.newAlert')}

\r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default Start;","import React, { useState, useContext, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Divider, Button, Form, Checkbox, Popup, TextArea } from 'semantic-ui-react';\r\nimport PagedTable from '../../Reusable/Lists/PagedTable';\r\nimport useSearchShifts from '../../Hooks/Shifts/useSearchShifts';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport useListUsers from '../../Hooks/Users/useListUsers';\r\nimport useCreateSendQueueEmail from '../../Hooks/SendQueue/useCreateSendQueueEmail';\r\n\r\nconst Alerts = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const [ message, setMessage ] = useState('');\r\n const [ location, setLocation ] = useState('');\r\n const [ selectedServices, setSelectedServices ] = useState([]);\r\n const [ onCallRemote, setOnCallRemote ] = useState(false);\r\n const { shifts, searchShifts } = useSearchShifts();\r\n const { users, listUsers } = useListUsers();\r\n const { locations, types, services, globalState, profile } = useContext(StateContext);\r\n const { addMessage } = useContext(MessageContext);\r\n const { createSendQueueEmail } = useCreateSendQueueEmail();\r\n\r\n let locationOptions = [{key: 'all', text: t('shift.location-options.all'), value: ''}]\r\n locations.map(i => {\r\n if(i.Reference!=='remote'){\r\n const option = {\r\n key: i.Id,\r\n text: i.Name,\r\n value: i.Id\r\n }\r\n locationOptions.push(option);\r\n }\r\n return i;\r\n })\r\n\r\n // Fetch shifts\r\n useEffect(() => {\r\n (async () => {\r\n // startdate next monday\r\n let startdate = new Date()\r\n startdate.setDate(startdate.getDate() + (((1 + 7 - startdate.getDay()) % 7) || 7));\r\n \r\n // end date next sunday after start date\r\n let enddate= new Date(startdate)\r\n enddate.setDate(startdate.getDate() + 7)\r\n\r\n let dateArray = startdate.toLocaleDateString().split('.')\r\n let startdateISO = new Date(dateArray[2] + '-' + dateArray[1].padStart(2,'0') + '-' + dateArray[0].padStart(2,'0')).toISOString()\r\n dateArray = enddate.toLocaleDateString().split('.')\r\n let enddateISO = new Date(dateArray[2] + '-' + dateArray[1].padStart(2,'0') + '-' + dateArray[0].padStart(2,'0')).toISOString()\r\n \r\n let params = {\r\n startdate: startdateISO,\r\n enddate: enddateISO\r\n }\r\n \r\n // send the actual request\r\n await searchShifts(params);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // add delete links to shifts\r\n useEffect(() => {\r\n let newArray = []\r\n if (globalState.selectedShifts.length===0){\r\n newArray = [...shifts];\r\n } else {\r\n newArray = [...globalState.selectedShifts]\r\n }\r\n \r\n newArray.map(shift => {\r\n shift.link=t('general.delete')\r\n shift.typeArray = shift.ShiftTypes ? shift.ShiftTypes.map(item => types.filter(type => type.Id === item.TypeId).map(type => type.Name)) : []\r\n shift.countArray = shift.ShiftTypes ? shift.ShiftTypes.map(item => (item.ShiftTypeUsers ? item.ShiftTypeUsers.length : '0') + '/' + item.ShiftUserCount) : []\r\n return shift;\r\n })\r\n\r\n globalState.setSelectedShifts(newArray);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[shifts]);\r\n\r\n // Fetch users\r\n useEffect(() => {\r\n (async () => {\r\n await listUsers();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n const setServices = (value) => {\r\n const array = [...selectedServices]\r\n if(array.find(item => item === value)){\r\n // uncheck, remove item from array\r\n setSelectedServices(array.filter(item => item !== value))\r\n } else {\r\n // check, add item to array\r\n array.push(value)\r\n setSelectedServices(array)\r\n }\r\n }\r\n\r\n let filteredUsers = []\r\n if (location) {\r\n filteredUsers = users.filter(item => item.LocationId === location)\r\n }\r\n if (onCallRemote) {\r\n if(filteredUsers.length===0) filteredUsers = [...users];\r\n filteredUsers = filteredUsers.filter(item => item.IsRemoteWorker)\r\n }\r\n if(selectedServices.length>0){\r\n if(filteredUsers.length===0) filteredUsers = [...users];\r\n filteredUsers = filteredUsers.filter(item => selectedServices.some(el => item.UserServices && item.UserServices.find(i => i.ServiceId === el)))\r\n }\r\n if(filteredUsers.length>=0){\r\n // show only active users\r\n filteredUsers = filteredUsers.filter(item => item.IsActive)\r\n }\r\n\r\n const removeShift = (ev, row, item) => {\r\n const newArray = globalState.selectedShifts.filter(item => item.Id !== row.Id)\r\n globalState.setSelectedShifts(newArray)\r\n }\r\n\r\n const sendAlert = async () => {\r\n\r\n let body = \"\"\r\n body += \"

\" + message.replaceAll('\\n',\"
\") + \"

\"\r\n body += \"

\";\r\n globalState.selectedShifts.map(shift => {\r\n const time = new Date(shift.StartTime).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) + '-' + new Date(shift.EndTime).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\r\n body += \"\"\r\n body += \"\"\r\n body += \"\"\r\n body += \"\"\r\n return shift;\r\n })\r\n body += \"
\" + new Date(shift.Date).toLocaleDateString() + \"\" + time + \"\"\r\n shift.ShiftTypes.map(type => {\r\n const t = types.find(item => item.Id === type.TypeId)\r\n body += t.Name + \"
\"\r\n return type;\r\n })\r\n body += \"
\" + shift.InstructorName + \"

\"\r\n let emails = \"

\"\r\n locations.map(l => {\r\n if(l.Reference !== 'remote'){\r\n emails += l.Name + ': ' + l.Email + '
'\r\n }\r\n })\r\n body += \"

\" + t('email.alertBody').replace('$cityEmails$',emails) + \"

\"\r\n\r\n\r\n let bcc = [];\r\n filteredUsers.map(user => {\r\n bcc.push(user.EmailAddress)\r\n return user;\r\n })\r\n const locObject = locations.find(item => item.Id === location);\r\n let data = [{\r\n type: \"email\",\r\n to: locObject !== undefined ? locObject.Email : null,\r\n cc: null,\r\n bcc: bcc,\r\n subject: t('email.alertSubject'),\r\n body: body,\r\n replyTo: null\r\n }]\r\n\r\n //console.log(data)\r\n\r\n const result = await createSendQueueEmail(data,false);\r\n\r\n if(result.status === 201){\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.sendQueueEmailSaved')});\r\n globalState.setSelectedShifts([])\r\n props.history.goBack();\r\n }\r\n }\r\n\r\n const cancelAlert = () => {\r\n globalState.setSelectedShifts([])\r\n props.history.goBack();\r\n }\r\n\r\n return (\r\n
\r\n

{t('heading.newAlert')}

\r\n
\r\n

{t('heading.shifts')}} />

\r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n

{t('heading.personsOnCall')}

\r\n \r\n \r\n setLocation(value)}\r\n options={locationOptions}\r\n placeholder={t('shift.location-options.all')}\r\n />\r\n setOnCallRemote(!onCallRemote)}\r\n />\r\n \r\n {services.map(item => (\r\n s === item.Id)!==undefined}\r\n onChange={(e,{value}) => setServices(value)}\r\n />\r\n ))}\r\n \r\n \r\n \r\n\r\n

{t('heading.message')}

\r\n setMessage(e.target.value)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default Alerts;","import React, { useState, useContext, useEffect } from 'react';\r\nimport { Form, Checkbox, Divider, Grid, Button } from 'semantic-ui-react';\r\nimport PagedTable from '../../Reusable/Lists/PagedTable';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport useSearchShifts from '../../Hooks/Shifts/useSearchShifts';\r\n\r\nconst AddShifts = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { globalState, locations, services, channels, types } = useContext(StateContext);\r\n const { shifts, searchShifts } = useSearchShifts();\r\n const [ refresh, setRefresh ] = useState(false);\r\n\r\n let serviceOptions = [{key: 'all', text: t('shift.service-options.all'), value: ''},]\r\n services.map(s => {\r\n const option = {\r\n key: s.Id,\r\n text: s.Name,\r\n value: s.Id\r\n }\r\n serviceOptions.push(option);\r\n return s;\r\n })\r\n\r\n let channelOptions = [{key: 'all', text: t('shift.channel-options.all'), value: ''},]\r\n channels.map(c => {\r\n const option = {\r\n key: c.Id,\r\n text: t('shift.channel-options.' + c.Reference),\r\n value: c.Id\r\n }\r\n channelOptions.push(option);\r\n return c;\r\n })\r\n\r\n let typeOptions = [{key: 'all', text: t('shift.type-options.all'), value: ''},]\r\n types.map(i => {\r\n const option = {\r\n key: i.Id,\r\n text: i.Name,\r\n value: i.Id\r\n }\r\n typeOptions.push(option);\r\n return t;\r\n })\r\n\r\n const months = [\r\n { key: '01', text: t('general.january'), value: 1 },\r\n { key: '02', text: t('general.february'), value: 2 },\r\n { key: '03', text: t('general.march'), value: 3 },\r\n { key: '04', text: t('general.april'), value: 4 },\r\n { key: '05', text: t('general.may'), value: 5 },\r\n { key: '06', text: t('general.june'), value: 6 },\r\n { key: '07', text: t('general.july'), value: 7 },\r\n { key: '08', text: t('general.august'), value: 8 },\r\n { key: '09', text: t('general.september'), value: 9 },\r\n { key: '10', text: t('general.october'), value: 10 },\r\n { key: '11', text: t('general.november'), value: 11 },\r\n { key: '12', text: t('general.december'), value: 12 }\r\n ]\r\n\r\n /* show years from beginning to year after current year */\r\n let years = []\r\n for (let i = 2021; i < new Date().getFullYear()+2; i++) {\r\n years.push({key: i, text: i, value: i });\r\n }\r\n\r\n useEffect(() => {\r\n setIsSending(true)\r\n sendRequest()\r\n },[])\r\n\r\n // exclude shifts already selected, add links to remaining shifts\r\n useEffect(() => {\r\n shifts.map(shift => {\r\n //shift.viewUrl=\"/shift/detail/\"\r\n //shift.link=t('general.view')\r\n shift.selectLink=t('general.select');\r\n shift.selected=false;\r\n shift.typeArray = shift.ShiftTypes ? shift.ShiftTypes.map(item => types.filter(type => type.Id === item.TypeId).map(type => type.Name)) : []\r\n shift.countArray = shift.ShiftTypes ? shift.ShiftTypes.map(item => (item.ShiftTypeUsers ? item.ShiftTypeUsers.length : '0') + '/' + item.ShiftUserCount) : []\r\n return shift;\r\n })\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[shifts]);\r\n\r\n const setLocations = (value) => {\r\n let newLocations = [];\r\n if(globalState.shiftLocations.includes(value)){\r\n // uncheck -> remove item from array\r\n newLocations = globalState.shiftLocations.filter(item => item!==value)\r\n } else {\r\n //check -> add item to array\r\n newLocations = globalState.shiftLocations.concat(value)\r\n }\r\n globalState.setShiftLocations(newLocations)\r\n }\r\n\r\n const [isSending, setIsSending] = useState(false)\r\n const sendRequest = async () => {\r\n // don't send again while we are sending\r\n if (isSending) return\r\n // update state\r\n setIsSending(true)\r\n\r\n let startdate = new Date(globalState.shiftYear + '-' + globalState.shiftMonth + '-01')\r\n let enddate = new Date(globalState.shiftYear,globalState.shiftMonth,1).toLocaleDateString()\r\n const dateArray = enddate.split('.')\r\n let enddateISO = new Date(dateArray[2] + '-' + dateArray[1].padStart(2,'0') + '-' + dateArray[0].padStart(2,'0')).toISOString()\r\n\r\n let params = {\r\n startdate: startdate.toISOString(),\r\n enddate: enddateISO,\r\n service: globalState.shiftService,\r\n channel: globalState.shiftChannel,\r\n type: globalState.shiftType,\r\n location: globalState.shiftLocations\r\n }\r\n // send the actual request\r\n await searchShifts(params);\r\n // once the request is sent, update state again\r\n setIsSending(false)\r\n }\r\n\r\n const selectShift = (ev,row,item) => {\r\n shifts.find(item => item.Id === row.Id).selected=!shifts.find(item => item.Id === row.Id).selected\r\n shifts.find(item => item.Id === row.Id).selectLink=shifts.find(item => item.Id === row.Id).selected ? t('general.unselect') : t('general.select')\r\n setRefresh(!refresh);\r\n }\r\n\r\n const handleAddShifts = () => {\r\n const newArray = globalState.selectedShifts.concat(shifts.filter(item => item.selected))\r\n globalState.setSelectedShifts(newArray)\r\n props.history.goBack();\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{t('heading.addShiftsToAlert')}

\r\n \r\n
\r\n \r\n \r\n \r\n globalState.setShiftMonth(value)}\r\n label={t('shift.month')}\r\n options={months}\r\n />\r\n globalState.setShiftYear(value)}\r\n label={t('shift.year')}\r\n options={years}\r\n />\r\n \r\n \r\n globalState.setShiftService(value)}\r\n label={t('shift.service')}\r\n options={serviceOptions}\r\n placeholder={t('shift.service-options.all')}\r\n />\r\n globalState.setShiftChannel(value)}\r\n label={t('shift.channel')}\r\n options={channelOptions}\r\n placeholder={t('shift.channel-options.all')}\r\n />\r\n \r\n \r\n globalState.setShiftType(value)}\r\n label={t('shift.type')}\r\n options={typeOptions}\r\n placeholder={t('shift.type-options.all')}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {locations.map(item =>\r\n setLocations(value)}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n globalState.selectedShifts.find(item => item.Id === shift.Id) === undefined)}\r\n contentKeys={[\r\n {key: 'selectLink', type: 'action', action: selectShift},\r\n {key: 'Date', type: 'date'},\r\n {key: 'StartTime', type: 'time'},\r\n {key: 'EndTime', type: 'time'},\r\n {key: 'typeArray', type: 'array'},\r\n {key: 'countArray', type: 'array'},\r\n {key: 'LocationName'},\r\n {key: 'InstructorName'}\r\n //,{key: 'link', type: 'url', urlKey:'viewUrl', cellAlign: 'left', targetKey: 'Id'}\r\n ]}\r\n pageSize='20'\r\n \r\n />\r\n
\r\n\r\n {/*resetPage={name || activeOnly}*/}\r\n\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default AddShifts;","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListOneToOnes = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ oneToOnes, setOneToOnes ] = useState([]);\r\n const [ fetchingOneToOnes, setFetchingOneToOnes ] = useState(true);\r\n\r\n /** list contracts\r\n * @returns {array} - array of one to Ones */ \r\n const listOneToOnes = async (userID) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingOneToOnes')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userID + \"/onetoones\", options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setOneToOnes(result.data);\r\n setFetchingOneToOnes(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.oneToOnesNotFound') });\r\n setFetchingOneToOnes(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingOneToOnesFailed') });\r\n setFetchingOneToOnes(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingOneToOnesFailed') });\r\n setFetchingOneToOnes(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { oneToOnes, fetchingOneToOnes, listOneToOnes };\r\n\r\n}\r\n\r\nexport default useListOneToOnes;\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport PagedTable from '../../Reusable/Lists/PagedTable';\r\nimport { Divider, Button, Form, Grid } from 'semantic-ui-react';\r\nimport useListOneToOnes from '../../Hooks/Users/OneToOne/useListOneToOnes';\r\nimport { useParams } from 'react-router-dom';\r\nimport SubNavigation from '../../Pages/User/SubNavigation';\r\nimport { StateContext } from '../../Context/StateContext';\r\n\r\nconst OneToOneList = (props) => {\r\n\r\n const { id } = useParams();\r\n const { t } = useTranslation();\r\n const { oneToOnes, listOneToOnes } = useListOneToOnes();\r\n const { userDetailBackRoute } = useContext(StateContext);\r\n\r\n // Fetch one to ones\r\n useEffect(() => {\r\n (async () => {\r\n await listOneToOnes(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // add detail link to one to one array\r\n useEffect(() => {\r\n oneToOnes.map(item => {\r\n item.viewUrl = 'detail/';\r\n item.link=t('general.view');\r\n return item;\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[oneToOnes]);\r\n \r\n return (\r\n
\r\n \r\n\r\n \r\n

{t('heading.oneToOnes')}

\r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n\r\n}\r\n\r\nexport default OneToOneList;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateOneToOne = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of user types */ \r\n const createOneToOne = async (userID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingOneToOne')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/users/\" + userID + \"/onetoones\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.oneToOneSaved')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingOneToOneFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingOneToOneFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createOneToOne };\r\n\r\n}\r\n\r\nexport default useCreateOneToOne;\r\n","import React, { useState, useContext, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Form, Divider, Button } from 'semantic-ui-react';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport useCreateOneToOne from '../../Hooks/Users/OneToOne/useCreateOneToOne';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport { useParams } from 'react-router-dom';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\n\r\nconst CreateOneToOne = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { createOneToOne } = useCreateOneToOne();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { id } = useParams();\r\n const { user, readUser } = useReadUser();\r\n \r\n const [ date, setDate ] = useState(null);\r\n const [ description, setDescription ] = useState('');\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readUser(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const handleSave = async () => {\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!date) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n // Format date\r\n let dateParts = []\r\n let dateISO = null;\r\n if(date) {\r\n dateParts=date.split('.');\r\n dateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n //create data\r\n let data = {\r\n \"date\": dateISO,\r\n \"description\": description\r\n }\r\n\r\n //save\r\n let result = null;\r\n result = await createOneToOne(id,data);\r\n\r\n if(result.status === 201) {\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{t('heading.oneToOne')}

\r\n\r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n \r\n

{t('oneToOne.date')}

\r\n setDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n \r\n

{t('oneToOne.description')}

\r\n setDescription(e.target.value)}\r\n />\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default CreateOneToOne;","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useReadOneToOne = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ oneToOne, setOneToOne ] = useState([]);\r\n const [ fetchingOneToOne, setFetchingOneToOne ] = useState(true);\r\n\r\n /** read one to one\r\n * @param {integer} userId - user id\r\n * * @param {integer} oneToOneId - one to one id id\r\n * @returns {object} - one to one */ \r\n const readOneToOne = async (userId, oneToOneId) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingOneToOne')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userId + \"/onetoones/\" + oneToOneId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setOneToOne(result);\r\n setFetchingOneToOne(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.oneToOneNotFound') });\r\n setFetchingOneToOne(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingOneToOneFailed') });\r\n setFetchingOneToOne(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingOneToOneFailed') });\r\n setFetchingOneToOne(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { oneToOne, fetchingOneToOne, readOneToOne };\r\n\r\n}\r\n\r\nexport default useReadOneToOne;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useDeleteOneToOne = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** delete one to one\r\n * @returns {array} - array of shift users */ \r\n const deleteOneToOne = async (userId,oneToOneId,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"deleting\", header: t('general.moment'), body: t('info.deletingOneToOne')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.delete(rootPath + \"/api/v1/users/\" + userId + \"/onetoones/\" + oneToOneId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 204) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.deleted'), body: t('info.oneToOneDeleted')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingOneToOneFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingOneToOneFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { deleteOneToOne };\r\n\r\n}\r\n\r\nexport default useDeleteOneToOne;\r\n","import React, { useEffect, useContext, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Divider, Button, Message, Grid } from 'semantic-ui-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useReadOneToOne from '../../Hooks/Users/OneToOne/useReadOneToOne';\r\nimport useDeleteOneToOne from '../../Hooks/Users/OneToOne/useDeleteOneToOne';\r\nimport { useParams } from 'react-router-dom';\r\nimport { YesNoModal } from '../../Reusable/Modals/GeneralModal';\r\n\r\nconst OneToOneDetail = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { oneToOne, readOneToOne } = useReadOneToOne();\r\n const { user, readUser } = useReadUser();\r\n const { deleteOneToOne } = useDeleteOneToOne();\r\n const { userId, oneToOneId } = useParams();\r\n const [ modalOpen, setModalOpen ] = useState(false);\r\n\r\n //console.log(oneToOne)\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readOneToOne(userId,oneToOneId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n if(oneToOne && oneToOne.data && oneToOne.data.UserId){\r\n await readUser(oneToOne.data.UserId);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [oneToOne]);\r\n\r\n const delOneToOne = () => {\r\n (async () => {\r\n let result = null;\r\n result = await deleteOneToOne(userId,oneToOneId);\r\n if(result.status === 204){\r\n props.history.goBack();\r\n }\r\n })();\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n

{t('heading.oneToOne')}

\r\n { oneToOne && oneToOne.data &&\r\n <>\r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n\r\n

{t('oneToOne.date')}

\r\n
{new Date(oneToOne.data.Date).toLocaleDateString()}
\r\n\r\n

{t('oneToOne.description')}

\r\n
{oneToOne.data.Description}
\r\n \r\n }\r\n\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default OneToOneDetail;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useUpdateOneToOne = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** update one to one\r\n * @returns {array} - array of users */ \r\n const updateOneToOne = async (userID,oneToOneID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingOneToOne')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.put(rootPath + \"/api/v1/users/\" + userID + '/onetoones/' + oneToOneID, body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n addMessage({ type: \"success\", header: t('general.saved'), body: t('info.oneToOneSaved') });\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingOneToOneFailed') });\r\n window.scrollTo(0,0);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingOneToOneFailed') });\r\n window.scrollTo(0,0);\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { updateOneToOne };\r\n\r\n}\r\n\r\nexport default useUpdateOneToOne;\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Form, Divider, Button, Table, Grid } from 'semantic-ui-react';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useReadOneToOne from '../../Hooks/Users/OneToOne/useReadOneToOne';\r\nimport useUpdateOneToOne from '../../Hooks/Users/OneToOne/useUpdateOneToOne';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\n\r\nconst EditUser = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { userId, oneToOneId } = useParams();\r\n const { user, readUser } = useReadUser();\r\n const { oneToOne, readOneToOne } = useReadOneToOne();\r\n const { updateOneToOne } = useUpdateOneToOne();\r\n\r\n const [ date, setDate ] = useState(null);\r\n const [ description, setDescription ] = useState('');\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readOneToOne(userId,oneToOneId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readUser(userId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // Set user data\r\n useEffect(() => {\r\n (async () => {\r\n if (oneToOne.data && oneToOne.data.Id) {\r\n setDate(oneToOne.data.Date ? new Date(oneToOne.data.Date).toLocaleDateString() : '');\r\n setDescription(oneToOne.data.Description || '');\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [oneToOne]);\r\n\r\n const handleSave = async () => {\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!date) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n // Format date\r\n let dateParts = []\r\n let dateISO = null;\r\n if(date) {\r\n dateParts=date.split('.');\r\n dateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n //create data\r\n let data = {\r\n \"date\": dateISO,\r\n \"description\": description\r\n }\r\n\r\n //save\r\n let result = null;\r\n result = await updateOneToOne(userId,oneToOneId,data);\r\n\r\n if(result.status === 200) {\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{t('heading.user')}

\r\n \r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n \r\n

{t('oneToOne.date')}

\r\n setDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n \r\n

{t('oneToOne.description')}

\r\n setDescription(e.target.value)}\r\n />\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default EditUser;","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListBadgeOfMerits = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ badgeOfMerits, setBadgeOfMerits ] = useState([]);\r\n const [ fetchingBadgeOfMerits, setFetchingBadgeOfMerits ] = useState(true);\r\n\r\n /** list contracts\r\n * @returns {array} - array of one to Ones */ \r\n const listBadgeOfMerits = async (userID) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingBadgeOfMerits')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userID + \"/badgeofmerits\", options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setBadgeOfMerits(result.data);\r\n setFetchingBadgeOfMerits(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.badgeOfMeritsNotFound') });\r\n setFetchingBadgeOfMerits(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingBadgeOfMeritsFailed') });\r\n setFetchingBadgeOfMerits(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingBadgeOfMeritsFailed') });\r\n setFetchingBadgeOfMerits(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { badgeOfMerits, fetchingBadgeOfMerits, listBadgeOfMerits };\r\n\r\n}\r\n\r\nexport default useListBadgeOfMerits;\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport PagedTable from '../../Reusable/Lists/PagedTable';\r\nimport { Divider, Button, Grid, Segment } from 'semantic-ui-react';\r\nimport useListBadgeOfMerits from '../../Hooks/Users/BadgeOfMerit/useListBadgeOfMerits';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport { useParams } from 'react-router-dom';\r\nimport SubNavigation from '../User/SubNavigation';\r\nimport { StateContext } from '../../Context/StateContext';\r\n\r\nconst BadgeOfMeritList = (props) => {\r\n\r\n const { id } = useParams();\r\n const { t } = useTranslation();\r\n const { badgeOfMerits, listBadgeOfMerits } = useListBadgeOfMerits();\r\n const { user, readUser } = useReadUser();\r\n const { userDetailBackRoute } = useContext(StateContext);\r\n\r\n // Fetch badges of merit\r\n useEffect(() => {\r\n (async () => {\r\n await listBadgeOfMerits(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // add detail link to badge array\r\n useEffect(() => {\r\n badgeOfMerits.map(item => {\r\n item.viewUrl = 'detail/';\r\n item.link=t('general.view');\r\n return item;\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[badgeOfMerits]);\r\n\r\n // Fetch user data\r\n useEffect(() => {\r\n (async () => {\r\n await readUser(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n const userShiftCount = user && user.data ? (user.data.UserShiftCount || 0) + (user.data.UserShiftCountInPreviousSystem || 0) : 0;\r\n\r\n \r\n return (\r\n
\r\n \r\n\r\n \r\n

{t('heading.badgeOfMerits')}

\r\n \r\n \r\n \r\n
\r\n\r\n \r\n {t('user.hasStarted')} {user && user.data && user.data.StartDate ? new Date(user.data.StartDate).toLocaleDateString() : '-'}. {t('user.shiftCount')} {userShiftCount} {t('general.pcs')}.\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n );\r\n\r\n}\r\n\r\nexport default BadgeOfMeritList;\r\n","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListBadgeOfMerits = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage } = useContext(MessageContext);\r\n const [ badgeOfMerits, setBadgeOfMerits ] = useState([]);\r\n const [ fetchingBadgeOfMerits, setFetchingBadgeOfMerits ] = useState(true);\r\n\r\n /** list time of days\r\n * @param {string} sort - sort field \r\n * @param {string} order - sort order (asc/desc) */ \r\n const listBadgeOfMerits = async (sort='StartTime', order='asc') => {\r\n try {\r\n\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/badgeofmerits\", options);\r\n\r\n \r\n if (result && result.status === 200) {\r\n setBadgeOfMerits(result.data);\r\n setFetchingBadgeOfMerits(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.badgeOfMeritsNotFound') });\r\n setFetchingBadgeOfMerits(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingBadgeOfMeritsFailed') });\r\n setFetchingBadgeOfMerits(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingBadgeOfMeritsFailed') });\r\n setFetchingBadgeOfMerits(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { badgeOfMerits, fetchingBadgeOfMerits, listBadgeOfMerits };\r\n}\r\n\r\nexport default useListBadgeOfMerits;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateBadgeOfMerit = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of user types */ \r\n const createBadgeOfMerit = async (userID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingBadgeOfMerit')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/users/\" + userID + \"/badgeofmerits\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.badgeOfMeritSaved')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingBadgeOfMeritFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingBadgeOfMeritFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createBadgeOfMerit };\r\n\r\n}\r\n\r\nexport default useCreateBadgeOfMerit;\r\n","import React, { useState, useContext, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Form, Divider, Button } from 'semantic-ui-react';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport useListBadgeOfMerits from '../../Hooks/Settings/useListBadgeOfMerits';\r\nimport useCreateBadgeOfMerit from '../../Hooks/Users/BadgeOfMerit/useCreateBadgeOfMerit';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport { useParams } from 'react-router-dom';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\n\r\nconst CreateBadgeOfMerit = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { badgeOfMerits, listBadgeOfMerits } = useListBadgeOfMerits();\r\n const { createBadgeOfMerit } = useCreateBadgeOfMerit();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { id } = useParams();\r\n const { user, readUser } = useReadUser();\r\n \r\n const [ date, setDate ] = useState(null);\r\n const [ selectedBadgeOfMerit, setSelectedBadgeOfMerit ] = useState(null);\r\n const [ description, setDescription ] = useState('');\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readUser(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await listBadgeOfMerits();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n let badgeOfMeritOptions = []\r\n if (badgeOfMerits) {\r\n badgeOfMerits.map(badge => {\r\n const tmp = {\r\n key: badge.Id,\r\n text: badge.Name,\r\n value: badge.Id\r\n }\r\n badgeOfMeritOptions.push(tmp)\r\n return badge;\r\n })\r\n }\r\n\r\n const handleSave = async () => {\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!date || !selectedBadgeOfMerit) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n // Format date\r\n let dateParts = []\r\n let dateISO = null;\r\n if(date) {\r\n dateParts=date.split('.');\r\n dateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n //create data\r\n let data = {\r\n \"date\": dateISO,\r\n \"badgeOfMerit\": selectedBadgeOfMerit,\r\n \"description\": description\r\n }\r\n\r\n //save\r\n let result = null;\r\n result = await createBadgeOfMerit(id,data);\r\n\r\n if(result.status === 201) {\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{t('heading.badgeOfMerit')}

\r\n\r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n \r\n

{t('badgeOfMerit.date')}

\r\n setDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n\r\n

{t('heading.badgeOfMerit')}

\r\n setSelectedBadgeOfMerit(value)}\r\n />\r\n \r\n

{t('badgeOfMerit.description')}

\r\n setDescription(e.target.value)}\r\n />\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default CreateBadgeOfMerit;","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useReadBadgeOfMerit = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ badgeOfMerit, setBadgeOfMerit ] = useState([]);\r\n const [ fetchingBadgeOfMerit, setFetchingBadgeOfMerit ] = useState(true);\r\n\r\n /** read one to one\r\n * @param {integer} userId - user id\r\n * * @param {integer} badgeOfMeritId - one to one id id\r\n * @returns {object} - one to one */ \r\n const readBadgeOfMerit = async (userId, badgeOfMeritId) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingBadgeOfMerit')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userId + \"/badgeofmerits/\" + badgeOfMeritId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setBadgeOfMerit(result);\r\n setFetchingBadgeOfMerit(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.badgeOfMeritNotFound') });\r\n setFetchingBadgeOfMerit(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingBadgeOfMeritFailed') });\r\n setFetchingBadgeOfMerit(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingBadgeOfMeritFailed') });\r\n setFetchingBadgeOfMerit(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { badgeOfMerit, fetchingBadgeOfMerit, readBadgeOfMerit };\r\n\r\n}\r\n\r\nexport default useReadBadgeOfMerit;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useDeleteBadgeOfMerit = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** delete one to one\r\n * @returns {array} - array of shift users */ \r\n const deleteBadgeOfMerit = async (userId,badgeOfMeritId,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"deleting\", header: t('general.moment'), body: t('info.deletingBadgeOfMerit')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.delete(rootPath + \"/api/v1/users/\" + userId + \"/badgeofmerits/\" + badgeOfMeritId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 204) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.deleted'), body: t('info.badgeOfMeritDeleted')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingBadgeOfMeritFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingBadgeOfMeritFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { deleteBadgeOfMerit };\r\n\r\n}\r\n\r\nexport default useDeleteBadgeOfMerit;\r\n","import React, { useEffect, useContext, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Divider, Button, Message, Grid } from 'semantic-ui-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useReadBadgeOfMerit from '../../Hooks/Users/BadgeOfMerit/useReadBadgeOfMerit';\r\nimport useDeleteBadgeOfMerit from '../../Hooks/Users/BadgeOfMerit/useDeleteBadgeOfMerit';\r\nimport { useParams } from 'react-router-dom';\r\nimport { YesNoModal } from '../../Reusable/Modals/GeneralModal';\r\n\r\nconst BadgeOfMeritDetail = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { badgeOfMerit, readBadgeOfMerit } = useReadBadgeOfMerit();\r\n const { user, readUser } = useReadUser();\r\n const { deleteBadgeOfMerit } = useDeleteBadgeOfMerit();\r\n const { userId, badgeOfMeritId } = useParams();\r\n const [ modalOpen, setModalOpen ] = useState(false);\r\n\r\n //console.log(badgeOfMerit)\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readBadgeOfMerit(userId,badgeOfMeritId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n if(badgeOfMerit && badgeOfMerit.data && badgeOfMerit.data.UserId){\r\n await readUser(badgeOfMerit.data.UserId);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [badgeOfMerit]);\r\n\r\n const delBadgeOfMerit = () => {\r\n (async () => {\r\n let result = null;\r\n result = await deleteBadgeOfMerit(userId,badgeOfMeritId);\r\n if(result.status === 204){\r\n props.history.goBack();\r\n }\r\n })();\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n

{t('heading.badgeOfMerit')}

\r\n { badgeOfMerit && badgeOfMerit.data &&\r\n <>\r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n\r\n

{t('badgeOfMerit.date')}

\r\n
{new Date(badgeOfMerit.data.Date).toLocaleDateString()}
\r\n\r\n

{t('badgeOfMerit.name')}

\r\n
{badgeOfMerit.data.BadgeOfMeritName}
\r\n\r\n

{t('badgeOfMerit.description')}

\r\n
{badgeOfMerit.data.Description}
\r\n \r\n }\r\n\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default BadgeOfMeritDetail;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useUpdateBadgeOfMerit = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** update one to one\r\n * @returns {array} - array of users */ \r\n const updateBadgeOfMerit = async (userID,badgeOfMeritID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingBadgeOfMerit')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.put(rootPath + \"/api/v1/users/\" + userID + '/badgeofmerits/' + badgeOfMeritID, body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n addMessage({ type: \"success\", header: t('general.saved'), body: t('info.badgeOfMeritSaved') });\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingBadgeOfMeritFailed') });\r\n window.scrollTo(0,0);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingBadgeOfMeritFailed') });\r\n window.scrollTo(0,0);\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { updateBadgeOfMerit };\r\n\r\n}\r\n\r\nexport default useUpdateBadgeOfMerit;\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Form, Divider, Button, Table, Grid } from 'semantic-ui-react';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useListBadgeOfMerits from '../../Hooks/Settings/useListBadgeOfMerits';\r\nimport useReadBadgeOfMerit from '../../Hooks/Users/BadgeOfMerit/useReadBadgeOfMerit';\r\nimport useUpdateBadgeOfMerit from '../../Hooks/Users/BadgeOfMerit/useUpdateBadgeOfMerit';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\n\r\nconst EditBadgeOfMerit= (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { userId, badgeOfMeritId } = useParams();\r\n const { user, readUser } = useReadUser();\r\n const { badgeOfMerits, listBadgeOfMerits } = useListBadgeOfMerits();\r\n const { badgeOfMerit, readBadgeOfMerit } = useReadBadgeOfMerit();\r\n const { updateBadgeOfMerit } = useUpdateBadgeOfMerit();\r\n\r\n const [ date, setDate ] = useState(null);\r\n const [ selectedBadgeOfMerit, setSelectedBadgeOfMerit ] = useState(null);\r\n const [ description, setDescription ] = useState('');\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await listBadgeOfMerits();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n let badgeOfMeritOptions = []\r\n if (badgeOfMerits) {\r\n badgeOfMerits.map(badge => {\r\n const tmp = {\r\n key: badge.Id,\r\n text: badge.Name,\r\n value: badge.Id\r\n }\r\n badgeOfMeritOptions.push(tmp)\r\n return badge;\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readBadgeOfMerit(userId,badgeOfMeritId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readUser(userId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // Set user data\r\n useEffect(() => {\r\n (async () => {\r\n if (badgeOfMerit.data && badgeOfMerit.data.Id) {\r\n setDate(badgeOfMerit.data.Date ? new Date(badgeOfMerit.data.Date).toLocaleDateString() : '');\r\n setDescription(badgeOfMerit.data.Description || '');\r\n setSelectedBadgeOfMerit(badgeOfMerit.data.BadgeOfMerit || null);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [badgeOfMerit]);\r\n\r\n const handleSave = async () => {\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!date || !selectedBadgeOfMerit) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n // Format date\r\n let dateParts = []\r\n let dateISO = null;\r\n if(date) {\r\n dateParts=date.split('.');\r\n dateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n //create data\r\n let data = {\r\n \"date\": dateISO,\r\n \"badgeOfMerit\": selectedBadgeOfMerit,\r\n \"description\": description\r\n }\r\n\r\n //save\r\n let result = null;\r\n result = await updateBadgeOfMerit(userId,badgeOfMeritId,data);\r\n\r\n if(result.status === 200) {\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{t('heading.user')}

\r\n \r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n \r\n

{t('badgeOfMerit.date')}

\r\n setDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n\r\n

{t('heading.badgeOfMerit')}

\r\n setSelectedBadgeOfMerit(value)}\r\n />\r\n \r\n

{t('badgeOfMerit.description')}

\r\n setDescription(e.target.value)}\r\n />\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default EditBadgeOfMerit;","import React, { useEffect, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport PagedTable from '../../Reusable/Lists/PagedTable';\r\nimport { Divider, Button, Grid, Message } from 'semantic-ui-react';\r\nimport useListUsers from '../../Hooks/Users/useListUsers';\r\nimport useListBadgeOfMerits from '../../Hooks/Settings/useListBadgeOfMerits';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\n\r\nconst UserList = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { globalState, locations, services, setUserDetailBackRoute } = useContext(StateContext);\r\n const { addMessage } = useContext(MessageContext);\r\n const { users, listUsers } = useListUsers();\r\n const { badgeOfMerits, listBadgeOfMerits } = useListBadgeOfMerits();\r\n\r\n setUserDetailBackRoute('/user/badgeofmerit/list');\r\n\r\n let locationOptions = [{label: t('user.location-options.all'), value: ''}]\r\n locations.map(l => {\r\n if(l.Reference!=='remote'){\r\n const tmp = {\r\n label: l.Name,\r\n value: l.Id\r\n }\r\n locationOptions.push(tmp)\r\n }\r\n return l;\r\n })\r\n\r\n // Fetch users\r\n useEffect(() => {\r\n (async () => {\r\n await listUsers();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // Fetch badges of merit\r\n useEffect(() => {\r\n (async () => {\r\n await listBadgeOfMerits();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // add view url and city name to users\r\n useEffect(() => {\r\n users.map(user => {\r\n user.viewUrl = '/user/detail/';\r\n user.link=user.LastName;\r\n user.serviceNames = '';\r\n user.shiftCount = user.UserShiftCountInPreviousSystem + user.UserShiftCount;\r\n if(user.UserServices) {\r\n user.UserServices.map(item => {\r\n if(user.serviceNames.length>0) user.serviceNames += ', '\r\n user.serviceNames += services.find(s => s.Id === item.ServiceId).Name;\r\n return item;\r\n })\r\n }\r\n if(user.BadgeOfMeritEarned && badgeOfMerits && badgeOfMerits.find(item => item.Id === user.BadgeOfMeritEarned)){\r\n user.BadgeName=badgeOfMerits.find(item => item.Id === user.BadgeOfMeritEarned).Name || '';\r\n }\r\n return user;\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[users,badgeOfMerits]);\r\n \r\n // filter users that earn a badge of merit\r\n const filteredUsers = users.filter(user => user.BadgeOfMeritEarned)\r\n\r\n return (\r\n
\r\n \r\n

{t('heading.BOMUsers')}

\r\n
\r\n {t('info.badgeUserList')}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n\r\n}\r\n\r\nexport default UserList;\r\n","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListOtherParticipations = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ otherParticipations, setOtherParticipations ] = useState([]);\r\n const [ fetchingOtherParticipations, setFetchingOtherParticipations ] = useState(true);\r\n\r\n /** list contracts\r\n * @returns {array} - array of one to Ones */ \r\n const listOtherParticipations = async (userID) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingOtherParticipations')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userID + \"/participations\", options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setOtherParticipations(result.data);\r\n setFetchingOtherParticipations(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.otherParticipationsNotFound') });\r\n setFetchingOtherParticipations(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingOtherParticipationsFailed') });\r\n setFetchingOtherParticipations(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingOtherParticipationsFailed') });\r\n setFetchingOtherParticipations(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { otherParticipations, fetchingOtherParticipations, listOtherParticipations };\r\n\r\n}\r\n\r\nexport default useListOtherParticipations;\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport PagedTable from '../../Reusable/Lists/PagedTable';\r\nimport { Divider, Button, Form, Grid } from 'semantic-ui-react';\r\nimport useListOtherParticipations from '../../Hooks/Users/OtherParticipation/useListOtherParticipations';\r\nimport { useParams } from 'react-router-dom';\r\nimport SubNavigation from '../User/SubNavigation';\r\nimport { StateContext } from '../../Context/StateContext';\r\n\r\nconst OtherParticipationList = (props) => {\r\n\r\n const { id } = useParams();\r\n const { t } = useTranslation();\r\n const { otherParticipations, listOtherParticipations } = useListOtherParticipations();\r\n const { userDetailBackRoute } = useContext(StateContext);\r\n\r\n // Fetch one to ones\r\n useEffect(() => {\r\n (async () => {\r\n await listOtherParticipations(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // add detail link to one to one array\r\n useEffect(() => {\r\n otherParticipations.map(item => {\r\n item.viewUrl = 'detail/';\r\n item.link=t('general.view');\r\n return item;\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[otherParticipations]);\r\n \r\n return (\r\n
\r\n \r\n\r\n \r\n

{t('heading.otherParticipations')}

\r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n );\r\n\r\n}\r\n\r\nexport default OtherParticipationList;\r\n","\r\nimport { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListParticipationTypes = () => {\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage } = useContext(MessageContext);\r\n const [ participationTypes, setParticipationTypes ] = useState([]);\r\n const [ fetchingParticipationTypes, setFetchingParticipationTypes ] = useState(true);\r\n\r\n /** list time of days\r\n * @param {string} sort - sort field \r\n * @param {string} order - sort order (asc/desc) */ \r\n const listParticipationTypes = async (sort='StartTime', order='asc') => {\r\n try {\r\n\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n \r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/participationtypes\", options);\r\n\r\n \r\n if (result && result.status === 200) {\r\n setParticipationTypes(result.data);\r\n setFetchingParticipationTypes(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.participationTypesNotFound') });\r\n setFetchingParticipationTypes(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingParticipationTypesFailed') });\r\n setFetchingParticipationTypes(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingParticipationTypesFailed') });\r\n setFetchingParticipationTypes(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { participationTypes, fetchingParticipationTypes, listParticipationTypes };\r\n}\r\n\r\nexport default useListParticipationTypes;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateOtherParticipation = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of user types */ \r\n const createOtherParticipation = async (userID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingOtherParticipation')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/users/\" + userID + \"/participations\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.otherParticipationSaved')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingOtherParticipationFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingOtherParticipationFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createOtherParticipation };\r\n\r\n}\r\n\r\nexport default useCreateOtherParticipation;\r\n","import React, { useState, useContext, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Form, Divider, Button } from 'semantic-ui-react';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport useListParticipationTypes from '../../Hooks/Settings/useListParticipationTypes';\r\nimport useCreateOtherParticipation from '../../Hooks/Users/OtherParticipation/useCreateOtherParticipation';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport { useParams } from 'react-router-dom';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\n\r\nconst CreateOtherParticipation = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { participationTypes, listParticipationTypes } = useListParticipationTypes();\r\n const { createOtherParticipation } = useCreateOtherParticipation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { id } = useParams();\r\n const { user, readUser } = useReadUser();\r\n \r\n const [ date, setDate ] = useState(null);\r\n const [ selectedParticipationType, setSelectedParticipationType ] = useState(null);\r\n const [ description, setDescription ] = useState('');\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readUser(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await listParticipationTypes();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n let participationTypeOptions = []\r\n if (participationTypes) {\r\n participationTypes.map(type => {\r\n const tmp = {\r\n key: type.Id,\r\n text: type.Name,\r\n value: type.Id\r\n }\r\n participationTypeOptions.push(tmp)\r\n return type;\r\n })\r\n }\r\n\r\n const handleSave = async () => {\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!date || !selectedParticipationType) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n // Format date\r\n let dateParts = []\r\n let dateISO = null;\r\n if(date) {\r\n dateParts=date.split('.');\r\n dateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n //create data\r\n let data = {\r\n \"date\": dateISO,\r\n \"typeId\": selectedParticipationType,\r\n \"description\": description\r\n }\r\n\r\n //save\r\n let result = null;\r\n result = await createOtherParticipation(id,data);\r\n\r\n if(result.status === 201) {\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{t('heading.otherParticipation')}

\r\n\r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n \r\n

{t('otherParticipation.date')}

\r\n setDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n\r\n

{t('otherParticipation.type')}

\r\n setSelectedParticipationType(value)}\r\n />\r\n \r\n

{t('otherParticipation.description')}

\r\n setDescription(e.target.value)}\r\n />\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default CreateOtherParticipation;","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useReadOtherParticipation = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ otherParticipation, setOtherParticipation ] = useState([]);\r\n const [ fetchingOtherParticipation, setFetchingOtherParticipation ] = useState(true);\r\n\r\n /** read one to one\r\n * @param {integer} userId - user id\r\n * * @param {integer} participationId - one to one id id\r\n * @returns {object} - one to one */ \r\n const readOtherParticipation = async (userId, participationId) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingOtherParticipation')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userId + \"/participations/\" + participationId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setOtherParticipation(result);\r\n setFetchingOtherParticipation(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.otherParticipationNotFound') });\r\n setFetchingOtherParticipation(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingOtherParticipationFailed') });\r\n setFetchingOtherParticipation(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingOtherParticipationFailed') });\r\n setFetchingOtherParticipation(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { otherParticipation, fetchingOtherParticipation, readOtherParticipation };\r\n\r\n}\r\n\r\nexport default useReadOtherParticipation;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useDeleteOtherParticipation = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** delete one to one\r\n * @returns {array} - array of shift users */ \r\n const deleteOtherParticipation = async (userId,participationId,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"deleting\", header: t('general.moment'), body: t('info.deletingOtherParticipation')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.delete(rootPath + \"/api/v1/users/\" + userId + \"/participations/\" + participationId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 204) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.deleted'), body: t('info.otherParticipationDeleted')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingOtherParticipationFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingOtherParticipationFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { deleteOtherParticipation };\r\n\r\n}\r\n\r\nexport default useDeleteOtherParticipation;\r\n","import React, { useEffect, useContext, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Divider, Button, Message, Grid } from 'semantic-ui-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useReadOtherParticipation from '../../Hooks/Users/OtherParticipation/useReadOtherParticipation';\r\nimport useDeleteOtherParticipation from '../../Hooks/Users/OtherParticipation/useDeleteOtherParticipation';\r\nimport { useParams } from 'react-router-dom';\r\nimport { YesNoModal } from '../../Reusable/Modals/GeneralModal';\r\n\r\nconst OtherParticipationDetail = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { otherParticipation, readOtherParticipation } = useReadOtherParticipation();\r\n const { user, readUser } = useReadUser();\r\n const { deleteOtherParticipation } = useDeleteOtherParticipation();\r\n const { userId, participationId } = useParams();\r\n const [ modalOpen, setModalOpen ] = useState(false);\r\n\r\n //console.log(otherParticipation)\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readOtherParticipation(userId,participationId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n if(otherParticipation && otherParticipation.data && otherParticipation.data.UserId){\r\n await readUser(otherParticipation.data.UserId);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [otherParticipation]);\r\n\r\n const delOtherParticipation = () => {\r\n (async () => {\r\n let result = null;\r\n result = await deleteOtherParticipation(userId,participationId);\r\n if(result.status === 204){\r\n props.history.goBack();\r\n }\r\n })();\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n

{t('heading.otherParticipation')}

\r\n { otherParticipation && otherParticipation.data &&\r\n <>\r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n\r\n

{t('otherParticipation.date')}

\r\n
{new Date(otherParticipation.data.Date).toLocaleDateString()}
\r\n\r\n

{t('otherParticipation.type')}

\r\n
{otherParticipation.data.ParticipationTypeName}
\r\n\r\n

{t('otherParticipation.description')}

\r\n
{otherParticipation.data.Description}
\r\n \r\n }\r\n\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default OtherParticipationDetail;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useUpdateOtherParticipation = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** update one to one\r\n * @returns {array} - array of users */ \r\n const updateOtherParticipation = async (userID,otherParticipationID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingOtherParticipation')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.put(rootPath + \"/api/v1/users/\" + userID + '/participations/' + otherParticipationID, body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n addMessage({ type: \"success\", header: t('general.saved'), body: t('info.otherParticipationSaved') });\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingOtherParticipationFailed') });\r\n window.scrollTo(0,0);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingOtherParticipationFailed') });\r\n window.scrollTo(0,0);\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { updateOtherParticipation };\r\n\r\n}\r\n\r\nexport default useUpdateOtherParticipation;\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Form, Divider, Button, Table, Grid } from 'semantic-ui-react';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useListParticipationTypes from '../../Hooks/Settings/useListParticipationTypes';\r\nimport useReadOtherParticipation from '../../Hooks/Users/OtherParticipation/useReadOtherParticipation';\r\nimport useUpdateOtherParticipation from '../../Hooks/Users/OtherParticipation/useUpdateOtherParticipation';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\n\r\nconst EditOtherParticipation = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { userId, participationId } = useParams();\r\n const { user, readUser } = useReadUser();\r\n const { participationTypes, listParticipationTypes } = useListParticipationTypes();\r\n const { otherParticipation, readOtherParticipation } = useReadOtherParticipation();\r\n const { updateOtherParticipation } = useUpdateOtherParticipation();\r\n\r\n const [ date, setDate ] = useState(null);\r\n const [ selectedParticipationType, setSelectedParticipationType ] = useState(null);\r\n const [ description, setDescription ] = useState('');\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await listParticipationTypes();\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n let participationTypeOptions = []\r\n if (participationTypes) {\r\n participationTypes.map(badge => {\r\n const tmp = {\r\n key: badge.Id,\r\n text: badge.Name,\r\n value: badge.Id\r\n }\r\n participationTypeOptions.push(tmp)\r\n return badge;\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readOtherParticipation(userId,participationId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readUser(userId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // Set user data\r\n useEffect(() => {\r\n (async () => {\r\n if (otherParticipation.data && otherParticipation.data.Id) {\r\n setDate(otherParticipation.data.Date ? new Date(otherParticipation.data.Date).toLocaleDateString() : '');\r\n setDescription(otherParticipation.data.Description || '');\r\n setSelectedParticipationType(otherParticipation.data.ParticipationTypeId || null);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [otherParticipation]);\r\n\r\n const handleSave = async () => {\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!date || !selectedParticipationType) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n // Format date\r\n let dateParts = []\r\n let dateISO = null;\r\n if(date) {\r\n dateParts=date.split('.');\r\n dateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n //create data\r\n let data = {\r\n \"date\": dateISO,\r\n \"typeId\": selectedParticipationType,\r\n \"description\": description\r\n }\r\n\r\n //save\r\n let result = null;\r\n result = await updateOtherParticipation(userId,participationId,data);\r\n\r\n if(result.status === 200) {\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{t('heading.user')}

\r\n \r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n \r\n

{t('otherParticipation.date')}

\r\n setDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n\r\n

{t('otherParticipation.type')}

\r\n setSelectedParticipationType(value)}\r\n />\r\n \r\n

{t('otherParticipation.description')}

\r\n setDescription(e.target.value)}\r\n />\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default EditOtherParticipation;","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListReminders = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ reminders, setReminders ] = useState([]);\r\n const [ fetchingReminders, setFetchingReminders ] = useState(true);\r\n\r\n /** list contracts\r\n * @returns {array} - array of one to Ones */ \r\n const listReminders = async (userID) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingReminders')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userID + \"/notifications\", options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setReminders(result.data);\r\n setFetchingReminders(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.remindersNotFound') });\r\n setFetchingReminders(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingRemindersFailed') });\r\n setFetchingReminders(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingRemindersFailed') });\r\n setFetchingReminders(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { reminders, fetchingReminders, listReminders };\r\n\r\n}\r\n\r\nexport default useListReminders;\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport PagedTable from '../../Reusable/Lists/PagedTable';\r\nimport { Divider, Button, Grid } from 'semantic-ui-react';\r\nimport useListReminders from '../../Hooks/Users/Reminder/useListReminders';\r\nimport { useParams } from 'react-router-dom';\r\nimport SubNavigation from '../../Pages/User/SubNavigation';\r\nimport { StateContext } from '../../Context/StateContext';\r\n\r\nconst ReminderList = (props) => {\r\n\r\n const { id } = useParams();\r\n const { t } = useTranslation();\r\n const { reminders, listReminders } = useListReminders();\r\n const { userDetailBackRoute } = useContext(StateContext);\r\n\r\n // Fetch one to ones\r\n useEffect(() => {\r\n (async () => {\r\n await listReminders(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n // add detail link to one to one array\r\n useEffect(() => {\r\n reminders.map(item => {\r\n item.viewUrl = 'detail/';\r\n item.link=t('general.view');\r\n return item;\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[reminders]);\r\n \r\n return (\r\n
\r\n \r\n\r\n \r\n

{t('heading.reminders')}

\r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n );\r\n\r\n}\r\n\r\nexport default ReminderList;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useCreateReminder = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** list contracts\r\n * @returns {array} - array of user types */ \r\n const createReminder = async (userID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingReminder')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.post(rootPath + \"/api/v1/users/\" + userID + \"/notifications\", body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 201 && result.data) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.saved'), body: t('info.reminderSaved')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingReminderFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingReminderFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { createReminder };\r\n\r\n}\r\n\r\nexport default useCreateReminder;\r\n","import React, { useState, useContext, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Form, Divider, Button } from 'semantic-ui-react';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport useCreateReminder from '../../Hooks/Users/Reminder/useCreateReminder';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport { useParams } from 'react-router-dom';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport { StateContext } from '../../Context/StateContext';\r\n\r\nconst CreateReminder = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { createReminder } = useCreateReminder();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { locations } = useContext(StateContext);\r\n const { id } = useParams();\r\n const { user, readUser } = useReadUser();\r\n \r\n const [ date, setDate ] = useState(null);\r\n const [ subject, setSubject ] = useState('');\r\n const [ description, setDescription ] = useState('');\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readUser(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // get the email address for users location\r\n let recipient=\"\"\r\n if(user && user.data && user.data.LocationId && locations.length>0){\r\n recipient = locations.find(item => item.Id === user.data.LocationId).Email;\r\n }\r\n\r\n const handleSave = async () => {\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!date || !description || !subject) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n // Format date\r\n let dateParts = []\r\n let dateISO = null;\r\n if(date) {\r\n dateParts=date.split('.');\r\n dateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n //create data\r\n let data = {\r\n \"date\": dateISO,\r\n \"subject\": subject,\r\n \"body\": description,\r\n \"recipient\": recipient\r\n }\r\n\r\n //save\r\n let result = null;\r\n result = await createReminder(id,data);\r\n\r\n if(result.status === 201) {\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{t('heading.reminder')}

\r\n\r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n\r\n

{t('reminder.recipient')}

\r\n
{recipient}
\r\n \r\n

{t('reminder.date')}

\r\n setDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n\r\n

{t('reminder.subject')}

\r\n setSubject(e.target.value)}\r\n />\r\n \r\n

{t('reminder.description')}

\r\n setDescription(e.target.value)}\r\n />\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default CreateReminder;","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useReadReminder = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ reminder, setReminder ] = useState([]);\r\n const [ fetchingReminder, setFetchingReminder ] = useState(true);\r\n\r\n /** read one to one\r\n * @param {integer} userId - user id\r\n * * @param {integer} reminderId - one to one id id\r\n * @returns {object} - one to one */ \r\n const readReminder = async (userId, reminderId) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingReminder')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userId + \"/notifications/\" + reminderId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n setReminder(result);\r\n setFetchingReminder(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.reminderNotFound') });\r\n setFetchingReminder(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingReminderFailed') });\r\n setFetchingReminder(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingReminderFailed') });\r\n setFetchingReminder(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { reminder, fetchingReminder, readReminder };\r\n\r\n}\r\n\r\nexport default useReadReminder;\r\n","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useDeleteReminder = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** delete one to one\r\n * @returns {array} - array of shift users */ \r\n const deleteReminder = async (userId,reminderId,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"deleting\", header: t('general.moment'), body: t('info.deletingReminder')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n result = await Axios.delete(rootPath + \"/api/v1/users/\" + userId + \"/notifications/\" + reminderId, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 204) {\r\n if(showSuccess){\r\n addMessage({type: \"success\", header: t('general.deleted'), body: t('info.reminderDeleted')});\r\n }\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingReminderFailed') });\r\n window.scrollTo(0, 0)\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.deletingReminderFailed') });\r\n window.scrollTo(0, 0)\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { deleteReminder };\r\n\r\n}\r\n\r\nexport default useDeleteReminder;\r\n","import React, { useEffect, useContext, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Divider, Button, Message, Grid } from 'semantic-ui-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useReadReminder from '../../Hooks/Users/Reminder/useReadReminder';\r\nimport useDeleteReminder from '../../Hooks/Users/Reminder/useDeleteReminder';\r\nimport { useParams } from 'react-router-dom';\r\nimport { YesNoModal } from '../../Reusable/Modals/GeneralModal';\r\n\r\nconst ReminderDetail = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { reminder, readReminder } = useReadReminder();\r\n const { user, readUser } = useReadUser();\r\n const { deleteReminder } = useDeleteReminder();\r\n const { userId, reminderId } = useParams();\r\n const [ modalOpen, setModalOpen ] = useState(false);\r\n\r\n //console.log(reminder)\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readReminder(userId,reminderId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n if(reminder && reminder.data && reminder.data.UserId){\r\n await readUser(reminder.data.UserId);\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [reminder]);\r\n\r\n const delReminder = () => {\r\n (async () => {\r\n let result = null;\r\n result = await deleteReminder(userId,reminderId);\r\n if(result.status === 204){\r\n props.history.goBack();\r\n }\r\n })();\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n

{t('heading.reminder')}

\r\n { reminder && reminder.data &&\r\n <>\r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n\r\n

{t('reminder.recipient')}

\r\n
{reminder.data.Recipient}
\r\n\r\n

{t('reminder.date')}

\r\n
{new Date(reminder.data.Date).toLocaleDateString()}
\r\n\r\n

{t('reminder.subject')}

\r\n
{reminder.data.Subject}
\r\n\r\n

{t('reminder.description')}

\r\n
{reminder.data.Body}
\r\n \r\n }\r\n\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default ReminderDetail;","import { useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useUpdateReminder = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n \r\n /** update one to one\r\n * @returns {array} - array of users */ \r\n const updateReminder = async (userID,reminderID,body,showSuccess=true) => {\r\n try {\r\n\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n const msgId = addMessage({ type: \"saving\", header: t('general.moment'), body: t('info.savingReminder')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.put(rootPath + \"/api/v1/users/\" + userID + '/notifications/' + reminderID, body, options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200) {\r\n addMessage({ type: \"success\", header: t('general.saved'), body: t('info.reminderSaved') });\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingReminderFailed') });\r\n window.scrollTo(0,0);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.savingReminderFailed') });\r\n window.scrollTo(0,0);\r\n if(error && error.response){\r\n return error.response;\r\n }\r\n return error;\r\n }\r\n }\r\n\r\n return { updateReminder };\r\n\r\n}\r\n\r\nexport default useUpdateReminder;\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Container, Form, Divider, Button, Table, Grid } from 'semantic-ui-react';\r\nimport { DateInput } from 'semantic-ui-calendar-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useReadReminder from '../../Hooks/Users/Reminder/useReadReminder';\r\nimport useUpdateReminder from '../../Hooks/Users/Reminder/useUpdateReminder';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport { StateContext } from '../../Context/StateContext';\r\n\r\nconst EditUser = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage, messages } = useContext(MessageContext);\r\n const { locations } = useContext(StateContext);\r\n const { userId, reminderId } = useParams();\r\n const { user, readUser } = useReadUser();\r\n const { reminder, readReminder } = useReadReminder();\r\n const { updateReminder } = useUpdateReminder();\r\n\r\n const [ date, setDate ] = useState(null);\r\n const [ subject, setSubject ] = useState('');\r\n const [ description, setDescription ] = useState('');\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readReminder(userId,reminderId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n (async() => {\r\n await readUser(userId);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // get the email address for users location\r\n let recipient=\"\"\r\n if(user && user.data && user.data.LocationId && locations.length>0){\r\n recipient = locations.find(item => item.Id === user.data.LocationId).Email;\r\n }\r\n\r\n // Set user data\r\n useEffect(() => {\r\n (async () => {\r\n if (reminder.data && reminder.data.Id) {\r\n setDate(reminder.data.Date ? new Date(reminder.data.Date).toLocaleDateString() : '');\r\n setSubject(reminder.data.Subject || '');\r\n setDescription(reminder.data.Body || '');\r\n }\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [reminder]);\r\n\r\n const handleSave = async () => {\r\n messages.map(msg => removeMessage(msg.id));\r\n\r\n //validate\r\n if(!date || !description || !subject) {\r\n addMessage({type: \"error\", header: t('message.fillInRequiredInformation'), body: t('message.requiredMarkedWithAsterisk')})\r\n window.scrollTo(0, 0)\r\n } else {\r\n // Format date\r\n let dateParts = []\r\n let dateISO = null;\r\n if(date) {\r\n dateParts=date.split('.');\r\n dateISO=new Date(dateParts[2] + \"-\" + dateParts[1].padStart(2,\"0\") + \"-\" + dateParts[0].padStart(2,\"0\")).toISOString();\r\n }\r\n\r\n //create data\r\n let data = {\r\n \"date\": dateISO,\r\n \"description\": description,\r\n \"subject\": subject,\r\n \"recipient\": recipient\r\n }\r\n\r\n //save\r\n let result = null;\r\n result = await updateReminder(userId,reminderId,data);\r\n\r\n if(result.status === 200) {\r\n props.history.goBack();\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{t('heading.user')}

\r\n \r\n

{t('heading.user')}

\r\n
{user.data && user.data.FirstName} {user.data && user.data.LastName}
\r\n\r\n

{t('reminder.recipient')}

\r\n
{recipient}
\r\n \r\n

{t('reminder.date')}

\r\n setDate(value) }\r\n closable={true}\r\n popupPosition='bottom left'\r\n />\r\n\r\n

{t('reminder.subject')}

\r\n setSubject(e.target.value)}\r\n />\r\n \r\n

{t('reminder.description')}

\r\n setDescription(e.target.value)}\r\n />\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n\r\n}\r\n\r\nexport default EditUser;","import { useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MessageContext } from '../../Context/MessageContext';\r\nimport Axios from 'axios';\r\nimport Config from '../../Config/Config';\r\nimport { useMsal } from \"@azure/msal-react\";\r\n\r\nconst useListUserActivities = () => {\r\n\r\n const rootPath = Config.api.rootPath;\r\n const { instance } = useMsal();\r\n const { t } = useTranslation();\r\n const { addMessage, removeMessage } = useContext(MessageContext);\r\n const [ userActivities, setUserActivities ] = useState([]);\r\n const [ fetchingUserActivities, setFetchingUserActivities ] = useState(true);\r\n\r\n /** list contracts\r\n * @returns {array} - array of users */ \r\n const listUserActivities = async (userID) => {\r\n try {\r\n\r\n const msgId = addMessage({ type: \"loading\", header: t('general.moment'), body: t('info.fetchingUserActivities')});\r\n \r\n const activeAccount = instance.getActiveAccount();\r\n const accounts = instance.getAllAccounts();\r\n\r\n if (!activeAccount && accounts.length === 0) return;\r\n\r\n const request = {\r\n scopes: Config.api.scopes,\r\n account: activeAccount || accounts[0]\r\n }\r\n\r\n const authResult = await instance.acquireTokenSilent(request);\r\n\r\n const options = {\r\n \"headers\": {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + authResult.accessToken\r\n }\r\n }\r\n\r\n let result = null;\r\n\r\n result = await Axios.get(rootPath + \"/api/v1/users/\" + userID + \"/activities\", options);\r\n\r\n removeMessage(msgId);\r\n\r\n if (result && result.status === 200 && result.data) {\r\n setUserActivities(result.data);\r\n setFetchingUserActivities(false);\r\n return result;\r\n }\r\n\r\n if (result && result.status === 404) {\r\n addMessage({ type: \"warning\", header: t('general.error'), body: t('warnings.userActivitiesNotFound') });\r\n setFetchingUserActivities(false);\r\n return result;\r\n }\r\n\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingUserActivitiesFailed') });\r\n setFetchingUserActivities(false);\r\n return result;\r\n\r\n } catch (error) {\r\n if (Config.environment === 'development' || Config.environment === 'test') console.log(error);\r\n addMessage({ type: \"error\", header: t('general.error'), body: t('errors.fetchingUserActivitiesFailed') });\r\n setFetchingUserActivities(false);\r\n return error;\r\n }\r\n }\r\n\r\n return { userActivities, fetchingUserActivities, listUserActivities };\r\n\r\n}\r\n\r\nexport default useListUserActivities;\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Message, Table, Divider, Button } from 'semantic-ui-react';\r\nimport useReadUser from '../../Hooks/Users/useReadUser';\r\nimport useListUserActivities from '../../Hooks/Users/useListUserActivities';\r\nimport { StateContext } from '../../Context/StateContext';\r\nimport { useParams } from 'react-router-dom';\r\nimport SubNavigation from '../../Pages/User/SubNavigation';\r\n\r\nconst ActivityStatus = (props) => {\r\n\r\n const { t } = useTranslation();\r\n const { id } = useParams();\r\n const { user, readUser } = useReadUser();\r\n const { userActivities, listUserActivities } = useListUserActivities();\r\n const { userDetailBackRoute } = useContext(StateContext);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n await readUser(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n await listUserActivities(id);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[]);\r\n\r\n const years = []\r\n userActivities.map(item => {\r\n if(!years.includes(item.Year)){\r\n years.push(item.Year)\r\n }\r\n return item;\r\n })\r\n \r\n return (\r\n
\r\n \r\n\r\n

{t('user.activityStatus')}

\r\n {user && user.data && user.data.ActivityAchieved ?\r\n {t('user.activityAchieved')}\r\n :\r\n {t('user.activityNotAchieved')}\r\n }\r\n \r\n\r\n {years.map(y =>\r\n \r\n \r\n \r\n {y}\r\n {t('user.achieved')}\r\n {t('user.shiftCount')}\r\n \r\n \r\n \r\n {userActivities && userActivities.filter(item => item.Year === y).map(item =>\r\n \r\n {t(\"general.months.\" + item.Month)}\r\n {item.Achieved ? t('general.yes'): t('general.no')}\r\n {item.ShiftCount}\r\n \r\n )}\r\n \r\n
\r\n )}\r\n \r\n \r\n
\r\n\r\n\r\n );\r\n\r\n}\r\n\r\nexport default ActivityStatus;","import React, { useContext } from 'react';\r\nimport { Switch, Route, Redirect } from 'react-router-dom';\r\nimport SelectService from '../Pages/SelectService';\r\nimport ContactType from '../Pages/Contact/ContactType';\r\nimport BackgroundInformation from '../Pages/Contact/BackgroundInformation';\r\nimport PreviousSupport from '../Pages/Contact/PreviousSupport';\r\nimport Themes from '../Pages/Contact/Themes';\r\nimport SpecificInformation from '../Pages/Contact/SpecificInformation';\r\nimport Referral from '../Pages/Contact/Referral';\r\nimport Retrospective from '../Pages/Contact/Retrospective';\r\nimport UserList from '../Pages/User/UserList';\r\nimport UserDetail from '../Pages/User/UserDetail';\r\nimport CreateUser from '../Pages/User/CreateUser';\r\nimport EditUser from '../Pages/User/EditUser';\r\nimport PageNotFound from '../Pages/PageNotFound';\r\nimport AccessDenied from '../Pages/AccessDenied';\r\nimport ShiftManagement from '../Pages/Shift/ShiftManagement';\r\nimport ShiftList from '../Pages/Shift/ShiftList';\r\nimport CreateShift from '../Pages/Shift/CreateShift';\r\nimport UpdateShift from '../Pages/Shift/UpdateShift';\r\nimport ShiftDetail from '../Pages/Shift/ShiftDetail';\r\nimport AddUserToShift from '../Pages/Shift/AddUserToShift';\r\nimport Start from '../Pages/Alert/Start';\r\nimport Alerts from '../Pages/Alert/Alerts';\r\nimport AddShifts from '../Pages/Alert/AddShifts';\r\nimport OneToOneList from '../Pages/OneToOne/OneToOneList';\r\nimport CreateOneToOne from '../Pages/OneToOne/CreateOneToOne';\r\nimport OneToOneDetail from '../Pages/OneToOne/OneToOneDetail';\r\nimport EditOneToOne from '../Pages/OneToOne/EditOneToOne';\r\nimport BadgeOfMeritList from '../Pages/BadgeOfMerit/BadgeOfMeritList';\r\nimport CreateBadgeOfMerit from '../Pages/BadgeOfMerit/CreateBadgeOfMerit';\r\nimport BadgeOfMeritDetail from '../Pages/BadgeOfMerit/BadgeOfMeritDetail';\r\nimport EditBadgeOfMerit from '../Pages/BadgeOfMerit/EditBadgeOfMerit';\r\nimport BOMUserList from '../Pages/BadgeOfMerit/UserList';\r\nimport OtherParticipationList from '../Pages/OtherParticipation/OtherParticipationList';\r\nimport CreateOtherParticipation from '../Pages/OtherParticipation/CreateOtherParticipation';\r\nimport OtherParticipationDetail from '../Pages/OtherParticipation/OtherParticipationDetail';\r\nimport EditOtherParticipation from '../Pages/OtherParticipation/EditOtherParticipation';\r\nimport ReminderList from '../Pages/Reminder/ReminderList';\r\nimport CreateReminder from '../Pages/Reminder/CreateReminder';\r\nimport ReminderDetail from '../Pages/Reminder/ReminderDetail';\r\nimport EditReminder from '../Pages/Reminder/EditReminder';\r\nimport ActivityStatus from '../Pages/User/ActivityStatus';\r\nimport { StateContext } from '../Context/StateContext';\r\n\r\nfunction Routes() {\r\n\r\n const { profile } = useContext(StateContext);\r\n\r\n return (\r\n <>\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n {/* user views for admins only */}\r\n \r\n \r\n \r\n\r\n {/* one to ones for admins only */}\r\n \r\n \r\n \r\n \r\n\r\n {/* badge of merits for admins only */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* other participations for admins only */}\r\n \r\n \r\n \r\n \r\n\r\n {/* reminders for admins only */}\r\n \r\n \r\n \r\n \r\n\r\n {/* activity status for admins only */}\r\n \r\n\r\n \r\n\r\n {/* shift views for admins only */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* alerts for admins only */}\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport default Routes;\r\n","import React from 'react';\r\nimport { Message, Icon } from 'semantic-ui-react';\r\n\r\nconst InfoMessage = (props) => {\r\n const onDismiss = () => {\r\n if (props && props.onDismiss) props.onDismiss();\r\n }\r\n return (\r\n onDismiss()}>\r\n \r\n \r\n \r\n {props.header}\r\n \r\n {props.content}\r\n \r\n \r\n )\r\n}\r\n\r\nconst PositiveMessage = (props) => {\r\n const onDismiss = () => {\r\n if (props && props.onDismiss) props.onDismiss();\r\n }\r\n return (\r\n onDismiss()}>\r\n \r\n \r\n \r\n {props.header}\r\n {props.content}\r\n
\r\n {props.optional}\r\n
\r\n
\r\n )\r\n}\r\n\r\nconst WarningMessage = (props) => {\r\n const onDismiss = () => {\r\n if (props && props.onDismiss) props.onDismiss();\r\n }\r\n return (\r\n onDismiss()}>\r\n \r\n \r\n \r\n {props.header}\r\n \r\n {props.content}\r\n
\r\n {props.optional}\r\n
\r\n
\r\n )\r\n}\r\n\r\nconst ErrorMessage = (props) => {\r\n const onDismiss = () => {\r\n if (props && props.onDismiss) props.onDismiss();\r\n }\r\n return (\r\n onDismiss()}>\r\n \r\n \r\n \r\n {props.header}\r\n \r\n {props.content}\r\n
\r\n {props.optional}\r\n
\r\n
\r\n )\r\n}\r\n\r\nconst FetchingMessage = (props) => {\r\n const onDismiss = () => {\r\n if (props && props.onDismiss) props.onDismiss();\r\n }\r\n return (\r\n onDismiss()}>\r\n \r\n \r\n \r\n {props.header}\r\n \r\n {props.content}\r\n \r\n \r\n )\r\n}\r\n\r\nconst SavingMessage = (props) => {\r\n const onDismiss = () => {\r\n if (props && props.onDismiss) props.onDismiss();\r\n }\r\n return (\r\n onDismiss()}>\r\n \r\n \r\n \r\n {props.header}\r\n \r\n {props.content}\r\n \r\n \r\n )\r\n}\r\n\r\nexport {\r\n InfoMessage,\r\n PositiveMessage,\r\n WarningMessage,\r\n ErrorMessage,\r\n SavingMessage,\r\n FetchingMessage\r\n};","import React, { useContext } from 'react';\r\nimport {MessageContext} from './../Context/MessageContext';\r\nimport {InfoMessage,PositiveMessage,WarningMessage,ErrorMessage,SavingMessage,FetchingMessage} from '../Reusable/Messages/Messages';\r\n\r\nconst Messages = (props) => {\r\n\r\n const { messages, removeMessage } = useContext(MessageContext);\r\n\r\n const msg = messages.map(msg => {\r\n\r\n let selectedType = null;\r\n\r\n switch (msg.type) {\r\n case \"success\":\r\n selectedType = removeMessage(msg.id)} />\r\n break;\r\n case \"warning\":\r\n selectedType = removeMessage(msg.id)} />\r\n break;\r\n case \"error\":\r\n selectedType = removeMessage(msg.id)} />\r\n break;\r\n case \"saving\":\r\n selectedType = removeMessage(msg.id)} />\r\n break;\r\n case \"loading\":\r\n selectedType = removeMessage(msg.id)} />\r\n break;\r\n default:\r\n selectedType = removeMessage(msg.id)} />\r\n break;\r\n }\r\n \r\n return selectedType;\r\n\r\n });\r\n\r\n return (\r\n
\r\n {msg}\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default Messages;\r\n","import React, { useContext, useState } from 'react';\r\nimport { NavLink, withRouter } from 'react-router-dom';\r\nimport { Segment, Menu, Sidebar, Image } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useMsal } from \"@azure/msal-react\";\r\nimport { StateContext } from '../Context/StateContext';\r\nimport { MessageContext } from '../Context/MessageContext';\r\nimport { YesNoModal } from '../Reusable/Modals/GeneralModal';\r\n\r\nconst MobileNavigation = (props) => {\r\n\r\n const { children, mobileMenuOpen, setMobileMenuOpen } = props;\r\n const { instance } = useMsal();\r\n const { globalState, clearContactData, contactInProgress, profile } = useContext(StateContext);\r\n const { addMessage } = useContext(MessageContext);\r\n const { t } = useTranslation();\r\n const [ cancelModalOpen, setCancelModalOpen] = useState(false);\r\n const [ warningModalOpen, setWarningModalOpen] = useState(false);\r\n const [ adminOpen, setAdminOpen ] = useState(false);\r\n\r\n const cancelContact = () => {\r\n props.history.push('/contact/contacttype');\r\n clearContactData();\r\n addMessage({type: \"success\", header: t('message.contactCanceled'), body: t('message.continueToNextContact')});\r\n }\r\n\r\n const cancelContactToChangeService = () => {\r\n props.history.push('/');\r\n clearContactData();\r\n }\r\n\r\n return (\r\n
\r\n\r\n \r\n \r\n\r\n\r\n {/* Sticky side bar wont work if transform is not set to none !!! */}\r\n {/* But If style={{ transform: 'none' }} is added then the app wont work :( \r\n These is a patch: add patch class to pusahble and sidebar and add css classes\r\n .pushable:not(body).patch { -webkit-transform: unset; transform: unset;} .pushable:not(body) .patch.ui.sidebar {position: fixed;}\r\n (popup visibility caused by this is fxed with z-index in div after body)\r\n https://topic.alibabacloud.com/a/how-to-use-the-fixed-menu-and-sidebar-of-semantic-ui-in-react_1_51_31205875.html\r\n */}\r\n \r\n\r\n setMobileMenuOpen(false)} vertical visible={mobileMenuOpen}>\r\n\r\n { globalState.service && globalState.channel && contactInProgress() &&\r\n {e.preventDefault();setMobileMenuOpen(false);setCancelModalOpen(true)}}>{t('navigation.cancelContact')}\r\n }\r\n { globalState.service && globalState.channel ?\r\n setMobileMenuOpen(false)} exact>{t('navigation.contact')}\r\n :\r\n setMobileMenuOpen(false)} exact>{t('navigation.contact')}\r\n }\r\n {profile.IsOwner ?\r\n <>\r\n setAdminOpen(!adminOpen)} header className={adminOpen ? 'open' : 'close'}>Hallinta\r\n {adminOpen &&\r\n <>\r\n {props.history.push('/user/list');setMobileMenuOpen(false)}}>\r\n {t('navigation.users')} \r\n \r\n {props.history.push('/shift/admin');setMobileMenuOpen(false)}}>\r\n {t('navigation.shifts')}\r\n \r\n {props.history.push('/shift/alert/start');setMobileMenuOpen(false)}}>\r\n {t('navigation.alerts')}\r\n \r\n \r\n }\r\n \r\n :\r\n setMobileMenuOpen(false)}>{t('navigation.shifts')}\r\n }\r\n \r\n { globalState.service && globalState.channel &&\r\n <>\r\n {globalState.service.name.fi} - {globalState.channel.name.fi}\r\n {contactInProgress() ?\r\n {e.preventDefault();setMobileMenuOpen(false);setWarningModalOpen(true)}}>{t('navigation.changeservice')}\r\n :\r\n setMobileMenuOpen(false)}>{t('navigation.changeservice')}\r\n }\r\n \r\n }\r\n {globalState.name}\r\n setMobileMenuOpen(false)}>{t('navigation.userinfo')}\r\n instance.logout()}>{t('navigation.logout')}\r\n \r\n {/* Nav logo */}\r\n \r\n setMobileMenuOpen(false)} exact>\r\n \"logo\"\r\n \r\n \r\n\r\n \r\n \r\n \r\n {children}\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default withRouter(MobileNavigation);\r\n","import React, { useContext } from 'react';\r\n//import { Dimmer } from 'semantic-ui-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MsalContext, UnauthenticatedTemplate } from \"@azure/msal-react\";\r\n\r\nconst Error = () => {\r\n\r\n const { t } = useTranslation();\r\n const { accounts } = useContext(MsalContext);\r\n const error = { textAlign: \"center\", marginTop: \"100px\" }\r\n const errorP = { fontSize: \"72px\", fontWeight: \"bold\" }\r\n\r\n return (\r\n
\r\n

{t('errors.errorOccurred')}

\r\n

500

\r\n\r\n {accounts && accounts.length === 0 && \r\n \r\n

{t('errors.noPermission')}

\r\n
\r\n }\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default Error;","import React, { useState } from 'react';\r\nimport { BrowserRouter as Router } from 'react-router-dom';\r\nimport Header from './Layout/Header';\r\nimport Content from './Layout/Content';\r\nimport Footer from './Layout/Footer';\r\nimport Routes from './Layout/Routes';\r\nimport Messages from './Layout/Messages';\r\nimport MobileNavigation from './Layout/MobileNavigation';\r\nimport StateContextProvider from './Context/StateContext';\r\nimport MessageContextProvider from './Context/MessageContext';\r\nimport { MsalAuthenticationTemplate } from \"@azure/msal-react\";\r\nimport { InteractionType } from \"@azure/msal-browser\";\r\nimport LoadingComponent from './Layout/Loading';\r\nimport ErrorComponent from './Pages/Error';\r\nimport 'semantic-ui-css/semantic.min.css';\r\nimport './App.css';\r\nimport './Layout/styles.css';\r\n\r\nfunction App(props) {\r\n\r\n const [ mobileMenuOpen, setMobileMenuOpen ] = useState(false);\r\n\r\n const loginRequestTokenScope = {\r\n scopes: [\"user.read\"]\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n\r\n}\r\n\r\nexport default App;\r\n","import i18n from 'i18next';\r\nimport Backend from 'i18next-xhr-backend';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport { initReactI18next } from 'react-i18next';\r\n\r\nconst Languages = ['fi', 'en'];\r\n\r\ni18n\r\n // load translation using xhr -> see /public/locales\r\n // learn more: https://github.com/i18next/i18next-xhr-backend\r\n .use(Backend)\r\n // detect user language\r\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\r\n .use(LanguageDetector)\r\n // pass the i18n instance to react-i18next.\r\n .use(initReactI18next)\r\n // init i18next\r\n // for all options read: https://www.i18next.com/overview/configuration-options\r\n .init({\r\n fallbackLng: 'fi',\r\n debug: false,\r\n whitelist: Languages,\r\n interpolation: {\r\n escapeValue: false, // not needed for react as it escapes by default\r\n }\r\n });\r\n\r\nexport default i18n;\r\n","import React, { Suspense } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { MsalProvider } from \"@azure/msal-react\";\r\nimport { PublicClientApplication } from \"@azure/msal-browser\";\r\nimport config from './Config/Config';\r\nimport App from './App';\r\nimport Loading from './Layout/Loading';\r\n//import reportWebVitals from './reportWebVitals';\r\nimport './index.css';\r\nimport './Utils/i18n'; // import i18n (needs to be bundled ;))\r\nimport 'moment/locale/fi';\r\n\r\nconst pca = new PublicClientApplication(config.authentication);\r\n\r\nReactDOM.render(\r\n }>\r\n {/**/}\r\n \r\n \r\n \r\n {/**/}\r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\n//reportWebVitals();\r\n"],"sourceRoot":""}