{"version":3,"sources":["utilities/get-page-from-id.js","utilities/get-back-button-url.js","components/ui/DatePicker.jsx","utilities/request-utility.js","components/ui/TextareaInput.jsx","actions/pagesActions.js","components/ui/PDFRenderComponent.jsx","utilities/get-link-path-from-page-object.js","components/ui/TabBar.jsx","components/ui/DropDownList.jsx","components/ui/TabView.jsx","components/ui/ListItem.jsx","actions/actionTypes.js","utilities/save-state-to-local-storage.js","store.js","reducers/authReducer.js","reducers/appConfigReducer.js","reducers/languageReducer.js","reducers/pagesReducer.js","reducers/paperReducer.js","reducers/sideMenuReducer.js","reducers/weldLogReducer.js","reducers/redmarkLogReducer.js","reducers/uiReducer.js","reducers/userReducer.js","reducers/semcompletionReducer.js","reducers/index.js","utilities/load-state-from-local-storage.js","utilities/navigation-history.js","components/ui/InlineSpinner.jsx","actions/uiActions.js","components/semcompletion/ImageUploadMultiple.jsx","components/WorkTimeDK/customerApproval/TimesheetSignatureComponents/TimesheetListItem.jsx","components/semcompletion/punch/PunchModal.jsx","components/ui/DropDown.jsx","components/ui/Page.jsx","utilities/style-type-normalizer.js","components/ui/Button.jsx","components/semcompletion/punch/hooks/useOverviewData.js","utilities/get-error-message.js","components/WorkTimeDK/customerApproval/TimesheetSignatureComponents/TimesheetRenderModal.jsx","style/common.js","utilities/parse-date.js","components/ui/SearchInput.jsx","components/ui/StatusBox.jsx","utilities/page-navigator.js","components/ui/TopBar.jsx","components/ui/ActionWrapper.jsx","components/ui/TextInput.jsx","components/installationFlow/installation-video-ios-EN.mp4","components/installationFlow/installation-video-ios-DA.mp4","components/installationFlow/installation-video-android-EN.mp4","components/installationFlow/installation-video-android-DA.mp4","components/ui/ScrollView.jsx","utilities/smooth-scroll-to-top.js","components/WorkTimeDK/customerApproval/TimeSheetForeman.jsx","components/WorkTimeDK/customerApproval/TimesheetsPendingSignature.jsx","components/WorkTimeDK/customerApproval/TimesheetSignatureComponents/TimesheetSignaturePadModal.jsx","components/WorkTimeDK/customerApproval/TimesheetSignatureComponents/TimesheetCorrectedModal.jsx","components/WorkTimeDK/reports/WorkTimeNptHottReportDK.jsx","components/WorkTimeDK/reports/WorkTimePendingApprovalHoursTimesheetDK.jsx","components/WorkTimeDK/reports/WorkTimePendingApprovalHoursTimesheetTeamSelectedDK.jsx","config/animations.js","style/colors.js","utilities/get-app-name.js","actions/languageActions.js","actions/authActions.js","actions/appConfigActions.js","utilities/set-icons.js","actions/sideMenuActions.js","actions/userActions.js","utilities/fa-to-mdi-converter.jsx","utilities/mdi-string-to-mdi-icon-converter.jsx","utilities/icon-converter.js","utilities/clear-local-storage.js","components/ui/Notification.jsx","components/semco-time/CorrectionAlert.jsx","components/FrontPage.jsx","components/installationFlow/ios-add-to-homescreen-icon.svg","components/installationFlow/ios-share-icon.svg","components/ui/LoadingPage.jsx","components/installationFlow/InstallationFlow.jsx","config/breakpoints.js","components/ui/Overlay.jsx","components/ui/ContextMenu.jsx","components/login/config/loginTypes.js","components/login/PasswordDots.jsx","components/ui/Numpad.jsx","components/login/utilities/keyPressProxy.js","components/login/PhoneLogin.jsx","components/login/EmailLogin.jsx","components/login/ForgotPassword.jsx","components/login/AdLogin.jsx","components/ui/ModalPage.jsx","components/ui/Dialog.jsx","components/login/LoginPage.jsx","components/NavigationList.jsx","components/ui/ImageUploadSingle.jsx","utilities/get-profile-picture-from-user-object.jsx","components/profile/UserProfileEditModal.jsx","components/profile/UserProfile.jsx","components/ui/TableList.jsx","components/profile/UserPointlog.jsx","components/ui/Toggle.jsx","components/profile/UserSettings.jsx","components/profile/Profile.jsx","components/SideMenu.jsx","components/semcompletion/SemcompletionOverviewLazy.js","config/punchStatuses.js","components/semcompletion/punch/PunchStatus.jsx","components/semcompletion/punch/PunchOverview.jsx","components/ui/ButtonRounded.jsx","components/semcompletion/punch/PunchSingleHeader.jsx","components/semcompletion/punch/PunchActivityLog.jsx","components/semcompletion/punch/hooks/usePunchSingleData.js","components/semcompletion/punch/PunchSingle.jsx","components/semcompletion/JobPackageLazy.jsx","components/semcompletion/TestSheetLazy.jsx","components/semcompletion/SearchLazy.jsx","components/semcompletion/SemcompletionProjectChooser.jsx","components/semcompletion/SemcompletionInitializer.jsx","components/semcompletion/admin/masterGroupProjects/hooks/useOverviewData.js","components/semcompletion/admin/masterGroupProjects/Modal.jsx","components/semcompletion/admin/masterGroupProjects/Overview.jsx","utilities/zero-pad.js","components/ui/CheckboxGroup.jsx","components/semco-time/WorkTimeRegistration.jsx","components/semco-time/WorkTimeDetails.jsx","components/semco-time/WorkTimeListItem.jsx","components/semco-time/WorkTimeOverview.jsx","components/semco-time/AbsenceRegistration.jsx","components/semco-time/AbsenceListItem.jsx","components/semco-time/AbsenceOverview.jsx","components/semco-time/CorrectionListItem.jsx","components/semco-time/CorrectionOverview.jsx","components/semco-time/ForemanListItem.jsx","components/WorkTimeDK/hooks.js","config/semcotimedk-workhour-states.js","components/semco-time/TimeRegistrationList.jsx","utilities/compute-total-time-registartion-hours.js","components/semco-time/nptAndHott.jsx","components/semco-time/ForemanTeam/ForemanWorkHourForm2.jsx","utilities/get-total-hours.js","utilities/get-quarter-title-from-hour-value.js","utilities/get-timer-options.js","components/semco-time/ForemanTeam/ForemanSubRecordForm.jsx","components/semco-time/ForemanTeam/ForemanWorkHourForm.jsx","components/semco-time/ForemanTeam/ForemanAbsenceForm.jsx","components/semco-time/SubmitAllComponent.jsx","components/WorkTimeDK/WorkTimeAlertDK.js","components/semco-time/ForemanRegistration.jsx","components/semco-time/ForemanTeam/ForemanTeamUser.jsx","components/semco-time/ForemanTeam/ForemanTeamPage.jsx","components/semco-time/ForemanTeam/AdminWorkHourForm.jsx","components/semco-time/AdminView.jsx","components/ui/Lightbox.jsx","components/ui/SkeletonPage.jsx","components/AbsenceDK/AbsenceRegistrationDK.jsx","components/AbsenceDK/AbsenceListItemDK.jsx","components/AbsenceDK/AbsenceOverviewDK.jsx","components/semco-time/WorkTimeTable.jsx","components/WorkTimeDK/WorkTimeRegistrationDK2.jsx","components/WorkTimeDK/WorkTimeDetailsDK.jsx","components/WorkTimeDK/WorkTimeRegistrationDK.jsx","components/WorkTimeDK/WorkTimeListItemDK.js","components/WorkTimeDK/WorkTimeOverviewDK.jsx","components/ui/ContactItSupport.jsx","components/ui/CustomMessageModal.jsx","components/WorkTimeDK/customerApproval/TimeSheetCommissioning.jsx","components/WorkTimeDK/customerApproval/TimeSheetSemsupport.jsx","components/WorkTimeDK/customerApproval/TimeSheetUnapprovedHours.jsx","components/WorkTimeDK/customerApproval/TimesheetsSigned.jsx","components/WorkTimeDK/corrections/WorktimeCorrectionsTimeAppSide.jsx","components/WorkTimeDK/corrections/WorkTimeCorrectionsIFSSide .jsx","App.jsx","components/ui/ErrorCatcher.jsx","registerServiceWorker.js","utilities/set-manifest.js","index.js","hooks/usePageAndBackButtonURL.jsx"],"names":["getPageFromId","pages","id","i","length","Number","found","console","log","page","queryString","parse","window","location","search","caller","parentId","parentPage","getLinkPathFromPageObject","getAppName","componentStyle","css","colors","darkGrey","lightGrey","midGrey","common","fontStack","DatePicker","props","disabled","onDateChange","onChange","defaultDate","name","style","value","className","type","e","target","state","store","getState","axios","create","baseURL","appConfig","apiUrl","headers","authorization","auth","token","semcompletion","selectedProject","backgroundColor","black","minHeight","primaryColor","connect","placeholder","defaultValue","initText","data-test-id","getPages","dispatch","GET_PAGES","req","get","then","res","data","GET_PAGES_SUCCESS","payload","catch","err","GET_PAGES_FAILURE","setTransitionModeToForward","SET_TRANSITION_DIRECTION","setTransitionModeToBackward","PDFRenderComponent","orientation","pdfData","size","file","onLoadError","renderMode","isIOS","marginLeft","pageNumber","mode","prefix","module","slice","toLowerCase","dataId","TabBar","onClickProxy","next","scrollActiveTabIntoView","activeTab","duration","clickedElPosition","getBoundingClientRect","windowWidth","innerWidth","el","targetRef","current","right","newScrollDeltaX","width","x","TinyAnimate","animate","scrollLeft","React","createRef","disableBodyScroll","this","activeTabIndex","tabs","customColor","ref","map","tab","tabIndex","onClick","key","borderBottomColor","color","title","Component","white","topBarHeight","DropDownList","dropdownChanged","prevProps","prevState","snapshot","selectedContentId","setState","hidden","dropDownListContent","item","itemIndex","contentId","contentName","height","durations","normal","TabView","useScrollView","useState","animationDirection","setAnimationDirection","currActiveTabIndex","setCurrActiveTabIndex","scrollMap","setScrollMap","useEffect","requestAnimationFrame","document","getElementById","scrollTo","onScroll","index","timeout","classNames","in","mountOnEnter","unmountOnExit","tabStyle","scrollTop","updateScrollMap","onScrollEnd","maxWidth","clickable","ultraLightGrey","imageLeft","ListItem","scrollTopRef","dataTestId","itemNumberLeft","iconLeft","wrapContent","dataTestIdTitle","dataTestIdSubTitle","subTitle","notificationsRight","iconRight","contentRight","OPEN_SIDE_MENU","CLOSE_SIDE_MENU","GET_LANGUAGE","GET_LANGUAGE_SUCCESS","GET_LANGUAGE_FAILURE","DOCUMENTS","CANCEL","REQUEST","SUCCESS","FAILURE","EDIT","FETCH","RESET","SAVE","SETVIEW","SETFORM","WELDLOGS","SETFORMPROP","USERS","SETUSER","REDMARKLOGS","SET_TOOL","UPDATE_USER_DATA","SIGN_IN","SIGN_IN_SUCCESS","SIGN_IN_FAILURE","AD_SIGN_IN_FAILURE","AD_SIGN_IN_FAILURE_HANDLED","SIGN_IN_FAILURE_HANDLED","SIGN_OUT","CHECK_TOKEN","CHECK_TOKEN_VALID","CHECK_TOKEN_INVALID","CHECK_TOKEN_SERVICE_UNAVAILABLE","RENEW_TOKEN_SUCCESS","RENEW_TOKEN_FAILURE","RENEW_PASSWORD_SUCCESS","RENEW_PASSWORD_FAILED","RENEW_PASSWORD_HANDLED","GET_APP_CONFIG","GET_APP_CONFIG_SUCCESS","GET_APP_CONFIG_FAILURE","SET_APP_LANGUAGE","CLEAR_APP_CONFIG_LOGIN_TYPES","SHOW_CONTEXT_MENU","HIDE_CONTEXT_MENU","CLEAR_CONTEXT_MENU_ACTIONS","SHOW_DIALOG","HIDE_DIALOG","CLEAR_DIALOG","SHOW_LIGHT_BOX","HIDE_LIGHT_BOX","SHOW_MODAL_PAGE","UPDATE_MODAL_PAGE_CONTENT","HIDE_MODAL_PAGE","CLEAR_MODAL_PAGE","TOGGLE_WORK_HOUR_MODAL","SC_SET_SELECTED_PROJECT","stateToSave","language","users","serializedState","JSON","stringify","localStorage","setItem","initialState","renewPasswordSuccess","renewPasswordError","signingIn","signInError","adLoginFailed","isAuthenticated","checkingToken","user","loading","error","appId","icon","image","frontPageImage","customerLogo","allowedLoginTypes","enableHighscore","transitionDirection","INITIAL_STATE","action","activeTool","editing","formLoading","imageHeight","imageURL","imageWidth","svg","svgJSON","view","active","end","form","limit","offset","contextMenu","actions","defaultActionTitle","undefined","closeOnActionCallback","Lightbox","images","modalPage","content","closeCallback","actionRight","dialog","primaryActionTitle","secondaryActionTitle","primaryAction","styleType","disableSecondaryAction","workHourModal","lists","selectedUser","number","description","projectType","combineReducers","paper","sideMenu","ui","Array","isArray","weldLog","d","toUpperCase","redmarkLog","getItem","loadStateFromLocalStorage","middleware","thunk","createStore","rootReducer","composeWithDevTools","applyMiddleware","subscribe","clearTimeout","setTimeout","saveStateToLocalStorage","createBrowserHistory","showContextMenu","hideContextMenu","showDialog","hideDialog","showLightBox","hideLightBox","showModalPage","updateModalPage","hideModalPage","toggleWorkHourModal","ImageUploadMultiple","getUploadedFiles","uploadedFiles","Object","assign","status","originalImage","deleteToken","updated","files","concat","onFileSelect","notification","message","formData","FormData","append","uploadFile","progress","scrollImagePreviewToRight","post","urlPrefix","onUploadProgress","onFileUploadSuccess","onFileUploadFailure","deleteFile","onFileUpdate","filter","f","progressPercent","loaded","total","disablePreview","imageSliderRef","scrollWidth","boxPadding","allowedAmountOfImages","fontWeight","accept","Math","round","flexGrow","src","alt","onLoad","previewHeight","TimesheetListItem","employeeView","sheets","setSelectedTimesheet","setToggleModal","bordered","dataSource","renderItem","sheet","blueCollarName","foremanName","canceled","submittedDate","signed","canceledBySemsupport","date","moment","format","actionTags","push","listTitle","Item","cursor","Text","container","PunchModal","refreshData","initialFormData","testSheetData","editMode","testSheetMode","afterFormSubmitHook","useDispatch","useSelector","project","metaData","useOverviewData","isRIG","punchId","punchList","punchOwner","punchOrigin","punchCategory","platformLocation","platformLocationText","workType","tagNumber","system","setFormData","setFormloading","savePunch","formDate","isFormValidData","handleOk","success","handleError","getErrorMessage","put","isEmpty","defaultPunchList","punchLists","punchCategories","c","preSelectedCategory","punchOrigins","o","preSelectedOrigin","taskId","cableNumber","jobPackageId","questionAnswerValue","answerValue","questionId","chunk","label","required","options","punchOwners","platformLocations","workTypes","systems","row","column","htmlFor","renderDropdownLabels","marginBottom","display","margin","DropDown","allowClear","changeGetPopupContainer","multiple","isTabletOrMobile","useMediaQuery","query","listHeight","optionFilterProp","getPopupContainer","trigger","parentElement","showSearch","Option","Page","hostRef","children","fullWidth","tinycolor","darken","toString","green","red","buttonType","styleTypeNormalizer","marginTop","statusCountTimeout","s","useQuery","staleTime","metaDataIsLoading","isLoading","metaDataError","endOfFeed","openPunches","setOpenPunches","clearedPunches","setClearedPunches","closedPunches","setClosedPunches","statusCounts","setStatusCounts","getRefreshDataLenght","getStatusCounts","filterData","setAsLoading","template","getData","clearDataBeforeFetch","punchLocation","searchterm","URL","response","TimesheetRenderModal","isTimesheetSubmitting","onCancelTimesheetRequest","onApproveTimesheet","selectedTimesheet","setDraftSignedTimesheet","setToggleSignaturePadModal","toggleModal","draftSignedTimesheet","canceledBy","canceledDate","originalFile","signedBy","signedDate","signedFile","isMobile","updatedBy","modalTitle","PDFFile","footerButtons","flexDirection","onConfirm","okText","cancelText","danger","timesheetCancelRequest","updateTimeStamp","unshift","maskClosable","visible","onCancel","Modal","confirm","onOk","footer","overflowX","boxShadowSubtle","parseDatetime","datetimeString","parseDate","dateString","midLightGrey","searching","paddingLeft","onClearSearch","StatusBox","callback","path","direction","replace","history","pathname","split","join","atFrontPage","setAlpha","actionLeft","componentStyles","disableFocusStyle","ActionWrapper","regExFormat","showCount","suffix","otherProps","Input","Password","TextArea","maxLength","minLength","RegExp","test","innerRef","exports","ScrollView","bind","enableBodyScroll","scrollHeight","element","currentScroll","endScroll","smoothScrollToTop","setScrollTop","scrollToTop","allowHorizontalScroll","isUser","TimeSheetForeman","userAppId","loggedUserTypeDK","usePageAndBackButtonURL","backButtonURL","pdfFile","empty","tableData","setTableData","timesheetID","setTimesheetID","rawPdfBuffer","setRawPdfBuffer","setIsTimesheetSubmitting","foremanTeamMembers","foremanTeamMembersIsLoading","isFetching","schema","refetch","yup","shape","blueCollarId","foremanId","fromDate","toDate","defaultValues","startOfMonth","Date","endOfMonth","useForm","resolver","yupResolver","control","getValues","formState","errors","handleSubmit","reset","setValue","watch","onSubmit","a","param","responseType","metadata","pdfBuffer","timeSheetId","referenceID","info","pdfBufferData","Buffer","from","receivedBlob","Blob","createObjectURL","downloadIOS","blobUrl","fileName","createElement","href","download","body","appendChild","click","removeChild","onDownload","FileSaver","saveAs","onSubmitForApproval","blobData","timesheetRequestedSignature","pageNavigator","render","field","onBlur","fieldState","externalId","ticketNumber","keys","TimesheetsPendingSignature","loggedInUser","match","params","pageId","getBackButtonUrl","selectedForeman","setSelectedForeman","toggleSignaturePadModal","lang","queryKey","refetchOnWindowFocus","needsSignatureData","needsSignatureIsFetching","needsSignatureIsLoading","needsSignatureRefetch","archiveData","archiveIsFetching","archiveIsLoading","archiveRefetch","correctedBySemsupportData","correctedBySemsupportRefetch","enabled","foremen","all","foremenIsFetching","onAddSignature","signatureData","modifiedPdfBytes","onGenerateNewTimesheet","padding","defaultActiveKey","TabPane","timesheetNeedsSignature","archive","TimesheetSignaturePadModal","signaturePadRef","useRef","clear","warning","toDataURL","justifyContent","penColor","canvasProps","TimesheetCorrectedModal","closable","WorkTimeNptHottReportDK","excelData","setExcelData","exportAndGenerateTemplate","workbook","ExcelJS","addWorksheet","columns","header","getRow","eachCell","cell","border","top","left","bottom","forEach","rowData","addRow","xlsx","writeBuffer","buffer","keepPreviousData","projectData","projectIsFetching","employeesData","employeesDataIsFetching","projectNumber","min","employees","employeeIds","userId","foremattedRegistrations","fileData","p","detailedReportingEnabled","WorkTimePendingApprovalHoursTimesheetDK","foremenIsLoading","employeeCategory","timeRegistrations","notificationFailed","timeSheetSelecUserCategory","timeSheetSelectForeman","timeSheetFromDate","timeSheetToDate","WorkTimePendingApprovalHoursTimesheetTeamSelectedDK","employeeId","ultraFast","fast","slow","routeTransition","trueBlack","midDarkGrey","blackOverlay","greenLight","greenBright","vividBlue","blue","blueLight","orange","redLight","yellow","yellowLight","yellowDark","substring","getLanguage","updateUserData","signIn","credentials","localCredentials","password","applicationId","phone","email","saveStateToLocalstorage","checkToken","Authorization","renewToken","renewPassword","renewPasswordHandled","getAppConfig","manifestEl","apiURL","getAttribute","origin","setAttribute","closeSideMenu","set","faIconName","styles","trim","mdiString","iconString","faIconConverter","mdiIconConverter","removeItem","notifications","Notification","hide","CorrectionsAlert","modal","corrections","setCorrections","CorrectionsProps","find","subDays","unreadCorrections","sortBy","justify","showIcon","Panel","itemLayout","registrations","registration","Meta","avatar","confirmed","grey","reportCodeDescription","gutter","span","activity","valueStyle","fontSize","reportCode","note","iconsContainer","getBackgroundImageURL","icons","toRgbString","memo","clickCount","setClickCount","isEqual","userName","userExternalId","userList","userListLoading","isTimeAppAdmin","masterGroupId","masterGroup","setSelectedUser","clearLocalStorage","semcoTimeCorrectionsNotification","semcoTimeCorrectionsNotificationData","currentUser","TopBar","querySelector","actionsRight","SearchInput","hello","num","animationDelay","showAtFrontPage","linkPathCreator","iconConverter","position","transform","_extends","arguments","source","prototype","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_ref","svgRef","y","viewBox","enableBackground","xmlSpace","fill","x1","y1","x2","y2","stroke","strokeWidth","strokeLinecap","strokeMiterlimit","ForwardRef","forwardRef","points","LoadingPage","alignItems","InlineSpinner","userLanguage","setLang","setIsReady","setError","userAgent","navigator","vendor","opera","setIsIOS","isAndroid","setIsAndroid","setUser","setUserLanguage","isReady","extended","setExtended","queryStrings","getLang","string","locations","insertIcon","installationHello","welcomeTo__placeholder__app","iosClickOn__placeholderShareIcon__","androidClickOn__placeholderMoreOptionsIcon__","iosChoose__placeholderAddToHomescreenIcon__","androidChooseAddToHomescreen","iosOpenTheAppFromYourHomescreen","androidOpentheAppFromYourHomescreen","needHelp","extendedInstallationGuide","hideHelp","installationVideoIOSEN","installationVideoIOSDA","installationVideoAndroidEN","installationVideoAndroidDA","play","seeInstallationVideo","changeGuideTo__placeholder__","seeAndroidGuide","seeIOSGuide","textAlign","commonProblems","cantFind__placeholder__icon","cantFindShareIconContent","cantFindAddToHomescreenIconContent__placeholderShareIcon____placeholderAddToHomescreenIcon__","part","shift","dontHaveAnIphone","dontHaveAnIphoneContent","alreadyAddedTheApp","alreadyAddedTheAppContent","onCloseGuide","closeGuide","Overlay","breakpoints","bindActionCreators","actionIndex","stopPropagation","cancel","PhoneLogin","Numpad","data-key","onKeyPress","regex","phoneEntered","passwordEntered","showNumpad","refProps","refState","potentialPhoneNumber","addEventListener","keyProxy","handleTabKey","removeEventListener","enableInput","preventDefault","shiftKey","handleKeyPress","keyPressProxy","freshState","clipboard","readText","clipboardText","PasswordDots","emailInputHasFocus","activeElement","blur","focus","onFocus","prefillValue","phoneNumber","setPhoneNumber","TextInput","AdLogin","appName","marginRight","verticalAlign","tertiaryActionTitle","secondaryAction","tertiaryAction","disableTertiaryAction","firstRenderManual","LoginPage","currentLoginType","setCurrentLoginType","setEnableInput","appConfigLoading","getDefaultLoginType","loginTypes","opacity","EmailLogin","includes","NavigationList","subPage","ImageUploadSingle","onFile","borderRight","userObject","profilePicture","imageUrl","borderRadius","backgroundImage","backgroundSize","flexShrink","UserProfileEditModal","handleChange","submitForm","submittingForm","closeForm","heyThere","closeFormWarningContent","yesCloseForm","noDontCloseForm","getProfilePicture","userGroup","deleteProfilePicture","aboutMe","TextareaInput","about","myCompetencies","skills","saveChanges","allowUserToEdit","userDataLoading","userDataError","userData","edit","editProfile","skill","address","basePadding","TableList","colSpan","headerLeft","headerCenter","headerRight","values","valueKey","center","UserPointLog","pointlog","pointlogLoading","pointlogError","paddingTop","reduce","on","dropdownWrapperStyle","contentContainer","settingsLoading","settingsError","settings","activeIdentifiers","updateSetting","isModalVisible","setIsModalVisible","isFeedbackSubmitting","setIsFeedbackSubmitting","rating","setRating","feedback","setFeedback","ratings","1","2","3","4","5","submitFeedback","slug","Subject","recipients","Rating","Value","Feedback","User","setting","settingIndex","identifier","selectedOption","option","extra","logOutWarning","logOutWarningTitle","logOutWarningContent","logOutWarningAction","version","caches","cacheNames","cacheName","delete","alert","reload","rows","MyProfile","onSettingToggle","groupIndex","_mounted","reloadingLanguage","enablePointLog","backButtonUrl","getBackButtonURL","profileEditModalActive","getUserData","getPointlog","getSettings","myProfile","tabComponents","UserPointlog","config","lighten","pageKey","iconConvertor","parseInt","lazy","Promise","r","m","offsetBottom","PunchStatus","punchStatuses","Tab","punches","punch","category","categoryName","locationName","punchOriginName","punchOwnerName","systemName","workTypeName","createdDate","url","idPrefix","PunchOverview","setFilterData","setActiveTabIndex","handleDropdownChange","flexBasis","open","cleared","closed","minWidth","secondary","small","OpenPunchForm","isFormVisible","setIsFormVisibile","getPunch","punchAllowances","comment","canClear","ButtonRounded","animateOpacity","apiReadyData","clearPunch","ClosePunchForm","useCallback","openPunch","canOpen","ClearPunchForm","canClose","PunchSingleHeader","LogEntry","logEntry","isExpanded","setIsExpanded","ActionEmblem","PunchActivityLog","activityLog","usePunchSingleData","setPunch","setPunchAllowances","createdBy","punchData","goBack","canEdit","nl2br","SemcompltionProjectChooser","projects","projectId","newProject","changeDefaultProject","uiStates","SemcompletionInitializer","uiState","setUiState","handleProjectResponse","masterGroupsLoading","masterGroupsError","masterGroups","customersLoading","customersError","customers","currentValues","customer","isFormValid","save","customerIds","setMasterGroup","resolve","masterGroupsFetching","masterGroupsData","masterGroupsRefetch","onDelete","connectionId","String","onSelectOutside","onSelect","selected","selectedIds","setSelectedIds","stringifiedSelected","checkbox","checkboxId","checkboxIdIndex","newIds","rotationStatuses","WorkTimeRegistration","componentDidMount","updateRegistration","initializeFormForEdit","getDefaultProjectSubProjectAndActivity","getProjects","getWageCodes","lastUsedTime","startTimeHours","startTimeMinutes","endTimeHours","endTimeMinutes","reject","getSubProjects","subProjects","getProjectActivities","isProjectActivitiesEmpty","subProject","projectActivities","wageType","wageCodes","loadingWageCodes","subProjectId","projectActivity","activitySequence","handleTimeInput","isNaN","handleFormChange","wageCodesNightTime","absenceNightTime","selectedActivity","midRotation","rotationStatus","courses","persist","activities","handleSave","addRegistration","getStartAndEndTimeAndDate","startTime","endTime","extras","wageCode","hours","preRotation","firstDay","firstDayNightShift","endOfRotation","changeShift","preRotationDayShift","preRotationNightShift","oneDayCourse","startMultiDayCourse","course","endOfMultiDayCourse","savedRegistrationToastContent","errorMessage","errorSavingRegistrationToastContent","handleUpdate","transactionId","isFormReady","errorLoadingFormData","midRotationStatuses","courseRotations","fetchDate","timeCardTransactionId","incrementTransactionId","aaa","getRotationStatusFromExistingData","apiData","zeroPad","addDays","noActivities","chooseActivity","selectedUserName","general","chooseProject","subproject","chooseSubproject","getProjectActivityPlaceholder","rotationStatusList","midRotationNoChangeStatus","noChangeInRotationStatus","preRotationDay","preRotationNight","midRotationFirstDayDay","firstDayPlanRotation","midRotationFirstDayNight","firstDayPlanRotationNightShift","midRotationLastDay","courseStatus","dateAndTime","minutes","sc_extra","addActivities","Group","wageCodeList","findIndex","showInCourses","chooseExtras","lineHeight","add","enterHours","registrationExtract","detailsData","setDetailsData","setWageCodes","ids","getParsedDateTime","noDate","getDetailsData","beforePlannedRotation","getRotationStatusText","w","expanded","setExpanded","allowEdit","editable","titleString","returnString","getTitle","totalHours","details","registerWorkTime","deleteRegistration","sort","b","borderTop","WorkTimeOverview","getRegistrations","fetchToDate","mutRegistrations","_isMounted","refreshRegistrations","getShowingDisplay","displayingRegistrationsFor","untilToday","diplayingRegistrationsFrom","validRegistrationForm","loadingDateKeys","register","errorLoadingRegistrationToastTitle","errorLoadingRegistrationToastContent","loadAnotherWeek","absenceCode","startDate","endDate","hoursPerDay","absenceCodes","setAbsenceCodes","setSubmittingForm","isAbsenceCodeLoading","setIsAbsenceCodeLoading","errorGeneral","tryAgainOrContactSupport","getAbsenceCodes","absenceType","chooseAbsenceType","max","enterNote","errorAbsencesRequiredFieldsContent","deleting","setDeleting","AbsenceOverview","isFirstFetch","absenceData","accountDate","updatedAbsenceData","absence","dropDownLists","filteredRegistrations","registerAbsence","AbsenceListItem","wageCodeName","isDismissed","setIsDismissed","CorrectionsOverview","noCorrectionsTitle","noCorrectionsContent","CorrectionListItem","ForemanListItem","selectAllApproved","isNewType","lockedByForeman","selectedLanguage","isRecordApproved","approvedByForeman","locale","useDropdownData","retry","defaultEmployeeValues","defaultEmployeeValuesIsFetching","defaultEmployeeValuesStatus","defaultEmployeeValuesRefetch","defaultProjectSubProjectAndActivity","defaultProjectSubProjectAndActivityStatus","projectStatus","subProjectStatus","subProjectIsFetching","projectActivityStatus","dabTradeCodes","dabTradeIsFetching","dabLocations","dabLocationsIsFetching","nptHottLabels","nptHottLabelsIsFetching","nptHottLabelsStatus","nptHottLabelsRefetch","defaultProjectSubProjectAndActivityData","v1","WorkOrderNo","OperationNo","Comment","Hours","projectActivityData","subProjectData","isForeman","locationIFSRules","locationIsLoading","isView","extendMoment","Moment","dataList","setDataList","showMobileHelpText","setshowMobileHelpText","timeRegistrationsTypes","IfsValue","handleAddRegistration","val","toReturn","customerDetail","customerNote","savedByBlueCollar","foremanChanges","locationRegistrationRules","locationRules","DabLocationValue","handleRegistrationChanges","newDataList","unsavedRegistrations","sortedRegistrations","diff","range","start","valueOf","sortTimeRegistrations","timeRegistrationListLocationChange","destroy","checkShift","momentStartTime","isSameOrBefore","timeRegistrationListLabel","timeRegistrationListPlaceholder","rowKey","CloseCircleOutlined","CheckCircleOutlined","timeRegistrationListUnapprove","timeRegistrationListApprove","isValid","allSavedStandby","totalHoursStandby","utc","isBefore","savedTimeRegistrations","isTimeValid","every","currentSavedStartDate","incomingStartDate","currentSavedEndDate","incomingEndDate","toSaveDateRange","savedDateRange","overlaps","handleRegistrationSave","SaveOutlined","timeRegistrationListEdit","timeRegistrationListSave","placement","handleDeleteRegistration","DeleteOutlined","ExclamationCircleOutlined","zIndex","minuteStep","picker","obj","timeRegistrationListFrom","timeRegistrationListTo","timeRegistrationListDay","timeRegistrationListNight","paddingBottom","checked","timeRegistrationListChangeShift","TextField","variant","timeRegistrationFormRemark","computeTotalHours","now","ms","floor","asHours","labelings","groupBy","showLabelings","setShowLabelings","hoursToLabel","setHoursToLabel","totalHoursLabel","setTotalHoursLabel","handleLabelInputChanges","newLabel","labelHours","fields","workOrder","operationNumber","comments","Description","onStep","fround","parseFloat","currentTarget","precision","step","renderListItems","Category","renderCardItems","MinusCircleFilled","PlusCircleFilled","readOnly","toFixed","scrollViewStyles","bottomPanelHeight","footerButtonStyles","footerButtonStylesMobile","onDeleteParent","onSubmitParent","sentToIFSAt","ifsData","loggedUserAuthorizedForeman","archived","useMemo","lockedByIFS","needsProcessing","setForemen","setIsFormReady","isDeleting","setIsDeleting","setErrorLoadingFormData","tradeCodesList","setTradeCodesList","showMobileFormAction","setShowMobileFormAction","foreman","trade","of","nptHott","break","employeeTrade","defaultEmployeeTrade","DabTradeId","tradeNotDefault","DabTradeDesc","foremanGroupIdentifier","assignedIds","assigned","getForemen","localStorageForm","lastForm","renderForm","layout","onFinish","workHourState","chooseADabLocation","timeRegistrationFormProjectPlaceholder","chooseASubproject","no","dabTrade","chooseADabTrade","timeRegistrationFormForeman","timeRegistrationFormForemanPlaceholder","some","foremanLastDayInRotation","foremanRegistrationWorkTimeSave","foremanRegistrationWorkTimeSaveAndCopyToNextDay","foremanRegistrationWorkTimeSaveAndSubmit","foremanRegistrationWorkTimeSaveAndSubmitGoToNextDay","foremanRegistrationWorkTimeSaveAndGoToNextDay","confirmText","confirmYes","confirmNo","centered","onVisibleChange","z","parsedStartDate","parsedEndDate","interval","intervalToDuration","hourValue","hour","totalValue","dropDownOptions","getQuarterTitleFromHourValue","deleteSubRecord","duplicateRecord","subRecords","totalRemainingHours","timerOptions","getTimerOptions","duplicate","renderSubRecords","subRecordBtnStyles","getLastUsedFormValues","formDataInitialNewValues","formDataInitialValues","dabLocation","unpaidBreak","paidBreak","transport","heliTime","standby","isSubmitting","setIsSubmitting","formDataOrig","setFormDataOrig","setSelectedActivity","additionalData","setAdditionalData","hoursOptions","setHoursOptions","fetchingProjects","setFetchingProjects","fetchingSubprojects","setFetchingSubprojects","fetchingActivities","setFetchingActivities","fetchingWageCodes","setFetchingWageCodes","fetchingDabTrade","setFetchingDabTrade","fetchingDabLocations","setFetchingDabLocations","getDABTradeCodes","getDABLocations","getDefaultEmployeeTradeRequest","getAdditionalData","requests","dkDropdownsFail","setDefaultEmployeeTrade","useImperativeHandle","isFormDataChanged","getTotalHours","otherValuesChange","subRecordId","subRecordData","addSubRecord","uuidv4","duplicateData","prevRecordIndex","newHour","totalSubRecordsHours","splice","keyBy","omit","onChangeTimeInputs","loadingForm","chooseAProject","chooseASubProject","chooseADabLocations","code","WageCode","WageCodeDesc","WageHours","addUnderRegistration","requiresManualApproval","approved","blueCollarExternalId","fullDay","fetchAbsenceCodes","getTime","registrationForm","FullTimeAppUser","isAfter","absenceRegistrationFormAbsenceCode","absenceRegistrationFormAbsenceCodePlaceholder","absenceRegistrationFormStartTime","absenceRegistrationFormEndTime","absenceRegistrationFormFullDay","absenceRegistrationFormForeman","absenceRegistrationFormForemanPlaceholder","setIsSubmittingAll","setShowSubmitAllComponent","needsProcessingData","needsProcessingIsFetching","needsProcessingRefetch","approvedRecords","setApprovedRecords","successfullySubmittedData","setSuccessfullySubmittedData","percentage","submissionStatusData","setSubmissionStatusData","getApprovedRecords","approvedRecordsPlaceHolder","record","recordID","submittedRecords","currentDate","statusText","hanldeRetry","progressBarStatus","submitting","resultIconStatus","renderSubmitAllComponent","percent","capitalize","WorkTimeAlertDk","schedInfo","time","absences","showModal","setShowModal","days","getCurrentDaysAndPrev","week","setDate","getDate","getDay","checkIfDone","regHours","tm","reg","absencesHours","abs","timeKey","result","entries","mergeHours","notReported","day","needToReport","daysNeedToComplete","sched","Day","WorkHoursSum","RemainingTime","SheduleHours","ScheduleId","DaysNotReported","DaysNotComplete","notReportedLength","notCompleteLength","workTimeAlertLoadingLabel","foremanRegistrationWorkTimeAlertEmployeeIsOnTime","workTimeAlertAllCaughtUpLabel","lg","sm","formatter","md","isSubmittingAll","ForemanRegistration","isLoggedUserAuthorizedForeman","foremanWorkHourFormRef","foremanAbsenceFormRef","myTeam","setMyteam","selectedRegistration","setSelectedRegistration","selectedAbsence","setSelectedAbsence","timeSchedInfo","setTimeSchedInfo","afterOnSubmit","setAfterOnSubmit","isTemporaryUser","isSelectedUserTemporary","setIsSelectedUserTemporary","showSubmitAllComponent","needsProcessingIsLoading","beingProcessed","beingProcessedIsFetching","beingProcessedIsLoading","beingProcessedRefetch","archivedIsFetching","archivedIsLoading","archivedRefetch","getSchedInfo","getTeamMembers","setRegistration","withCheck","unsavedChanges","closeRegistrationFormWarningContent","discardChanges","keepChanges","setAbsence","changeTab","missingStartOrEndTime","dateIsRequired","dabLocationIsRequired","dabTradeIsRequired","projectSubProjectActivityAreRequired","newForm","onSubmit2","nextRecordIndex","nextRecordMessage","deletedRegistrationToastContent","errorDeletingRegistrationToastContent","archivedCount","needsProcessingCount","beingProcessedCount","username","team","registeredTimeForWholeWeek","substr","formatted","normalDate","dates","registeredTime","regTime","registeredAbsence","WorkTimeAlertDK","noRecordsFound","foremanRegistrationAbsenceAdd","selectDateToStart","ForemanWorkHourForm2","ForemanTeamUser","isSelected","getProfilePictureFromUserObject","isDeletable","interfaceIsBusy","setInterfaceIsBusy","filterTerm","setFilterTerm","dataUsers","isErrorUsers","isError","isLoadingUsers","dataTeamUsers","isErrorTeamUsers","isLoadingTeamUsers","refetchTeamUsers","tempData","teamUsers","teamUserIds","addToTeam","removeFromTeam","filterList","AdminView","uniqBy","foremanregistrationAbsenceAdd","zoom","setZoom","translateX","setTranslateX","translateY","setTranslateY","dataOnPinchStart","setDataOnPinchStart","impetus","Impetus","update","pause","impetusEl","ready","fittedImageSize","setFittedImageSize","imageRef","onImageLoad","imageData","viewport","innerHeight","naturalWidth","naturalHeight","getFittedImageSize","updateBounds","bounds","getBounds","setBoundX","setBoundY","restrictTranslateX","MAX_newTranslateX","MIN_newTranslateX","restrictTranslateY","MAX_newTranslateY","MIN_newTranslateY","isOverScaled","isUnderScaled","isWithinBounds","restrictedTranslates","setValues","onDoubleTap","newWidth","newHeight","newScale","touchPos","offsetLeft","offsetTop","relativeLeft","relativeTop","newTranslateX","newTranslateY","resume","zoomInWithTap","onPinchStart","initialZoom","initialTranslateX","initialTranslateY","onPinch","scale","extraScale","pow","translateXOffset","translateYOffset","deltaX","deltaY","onPinchEnd","reenableImpetus","downScaleFactor","delay","translates","newZoom","recognizers","pinch","enable","SkeletonPage","AbsenceOverviewDK","sortedAbsenceData","AbsenceListItemDK","WorkTimeTable","showDetails","setShowDetails","filterDates","setFilterDates","handleDateChange","useLayoutEffect","transition","acc","dataPoint","compact","v","toOtherDay","proceedToSubmit","request","nextDay","timeRegistrationFormDateNowIs","timeRegistrationFormDate","isDetailedReportingEnabled","timeRegistrationFormSaveAndCopyToNewDay","setMetaData","dabTradeObj","dataTrade","toDateString","setLoadingWageCodes","setEditMode","setTotalHours","getDefaultEmployeeTrade","errorRegistrationRequiredFields","hourTotal","noAvailableSupplements","mandatoryField","updateRegistrationNew","ContextMenu","WorkTimeDetailsDK","WorkTimeRegistrationDK2","WorkTimeRegistrationDK","WorkTimeOverviewDK","updatingUI","setUpdatingUI","errMsg","setRegistrations","absencesThisWeek","setAbsencesThisWeek","getAbsencesThisWeek","showWriteToUs","setShowWriteToUs","Issue","Attachments","img","AttachmentRecordEntity","AttachmentRecordField","saveRecord","Employee","parsedData","Fab","sx","bgcolor","aria-label","background","closeIcon","MailOutlined","PhoneOutlined","multiline","hideMessage","setHideMessage","strong","stron","italic","TimeSheetCommissioning","timeSheetNoUserError","timeSheetSelectUser","timeSheetLoading","timeSheetNoResult","timeSheetNoResultSubtitle","TimeSheetSemsupport","TimeSheetUnapprovedHours","TimesheetsSigned","loggedInUserID","selectedEmployee","setSelectedEmployee","allSubmittedData","allSubmittedIsFetching","allSubmittedIsLoading","WorkTimeCorrectionsTimeAppSide","getAllUnreadCorrections","setGetAllUnreadCorrections","Collapse","queryClient","useQueryClient","correctionsData","correctionsDataIsFetching","correctionsDataRefetch","correctionsDataError","markCorrectionRead","markCorrectionAsRead","useMutation","onSuccess","setQueryData","old","originalData","recordId","isCorrectionRead","mutateAsync","6","7","renderCorrectedRegistrations","renderCorrectedFormFields","formChanges","isUpdated","fieldValue","accordion","foremanLastEditedBy","formattedRegistrations","xs","dataIndex","pagination","rowClassName","WorkTimeCorrectionsIFSSide","userEmployeeId","setCorrectionsData","startCase","originalFormData","correctedFormData","correctedBy","timeRegistrationChanges","pdfjs","GlobalWorkerOptions","workerSrc","App","closeInstallationGuide","showInstallationGuide","isStandalone","checkPotentialRedirect","findUserAgent","detectStandalone","remove","hostname","host","matchMedia","matches","installationHeyThere","dialogNotAddedToHomescreenContent","dialogNotAddedToHomescreenPrimaryAction","dialogNotAddedToHomescreenSecondaryAction","Rollbar","configure","captureIp","person","data-app-root","fallback","exact","component","Profile","CorrectionOverview","ForemanTeamPage","WorktimeCorrectionsTimeAppSide","FrontPage","SemcompletionOverview","JobPackage","TestSheet","Search","PunchSingle","MasterGroupProjects","rollbarConfig","accessToken","captureUncaught","autoInstrument","network","dom","navigation","connectivity","environment","process","appVersion","rollbar","ErrorCatcher","hasError","critical","fontFamily","isLocalhost","Boolean","registerValidSW","swUrl","serviceWorker","onupdatefound","installingWorker","installing","onstatechange","controller","apiConfig","setManifest","code_version","QueryClient","ReactDOM","client","initialIsOpen","fetch","unregister","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.79723ba2.chunk.js","sourcesContent":["export default function getPageFromId(pages, id) {\n if (!pages || !id) {\n console.log(\"[WARNING] get-page-from-id.js called without pages or id\");\n return;\n }\n\n for (let i = 0; i < pages.length; i++) {\n if (Number(pages[i].id) === Number(id)) return pages[i];\n\n if (pages[i].pages) {\n let found = getPageFromId(pages[i].pages, id);\n if (found) return found;\n }\n }\n}\n","import getLinkPathFromPageObject from \"./get-link-path-from-page-object\";\nimport getAppName from \"./get-app-name\";\nimport queryString from \"query-string\";\nimport getPageFromId from \"./get-page-from-id\";\n\nexport default function (page = {}, pages) {\n /**\n * Checks if page has a parentId. If it has, it will find it's parent-page and\n * returns the url to it.\n * If the page doesn't have a parentId it will navigate to the frontpage\n * ---------------------------------\n * @argument {object} page Default to an empty object\n * @argument {array of objects} pages No default value\n *\n */\n\n let { caller } = queryString.parse(window.location.search);\n\n if (caller) {\n return caller;\n }\n\n if (page.parentId) {\n let { parentId } = page;\n\n let parentPage = getPageFromId(pages, parentId);\n\n return getLinkPathFromPageObject(parentPage, \"absolute\");\n } else {\n return `/${getAppName()}/`;\n }\n}\n","import React from \"react\";\nimport { css } from \"emotion\";\nimport { CalendarRangeIcon } from \"mdi-react\";\nimport PropTypes from \"prop-types\";\n//Style\n\nimport common from \"../../style/common\";\nimport colors from \"../../style/colors\";\n\n/**\n * Component for handling a user picking a date\n * @param {function} onDateChange - A change listener that returns only the new date\n * @param {function} onChange - A regular onchange listener that returns the original event\n * @param {string} defaultDate - A specific date already selected\n * @param {string} name - html-attribute. Used to assicate inputs with label. `name={props.name}`\n */\nfunction DatePicker(props) {\n const { disabled = false, onDateChange, onChange, defaultDate, name = \"\", style, value } = props;\n\n return (\n
\n \n
\n );\n}\nvar height = 40;\nconst componentStyle = () => css`\n display: flex;\n align-items: end;\n line-height: ${height}px;\n width: 100%;\n\n label {\n display: flex;\n width: 100%;\n }\n\n .svg {\n position: relative;\n margin-right: -40px;\n padding: 0.45rem;\n width: 40px;\n color: ${colors.darkGrey};\n height: ${height}px;\n border-right: 1px solid ${colors.lightGrey};\n }\n\n input {\n border: 1px solid ${colors.midGrey};\n\n background: transparent;\n padding-left: 3rem;\n display: block;\n height: ${height}px;\n color: #6e6e6e;\n width: 100%;\n font-family: ${common.fontStack};\n font-size: 1rem;\n }\n`;\nDatePicker.propTypes = {\n /** function to execute when a date is selected/clicked -> Returns only the selected date*/\n onDateChange: PropTypes.func,\n /** function to execute when a date is selected/clicked -> Returns a regular event*/\n onChange: PropTypes.func,\n};\nexport default DatePicker;\n","import axios from \"axios\";\r\nimport store from \"../store\";\r\n\r\n/**\r\n * Utility to make requests. Cane easily be used inside components that are rendered\r\n * after authentication. You can simply import it as:\r\n * import req from \"./utilities/request-utility\"\r\n *\r\n * This will export a preconfigured request utility that are authenticated and points\r\n * to our node api.\r\n *\r\n * Note that's this is just an axios-instance so use axios's documentation for usage.\r\n *\r\n * A simple example would be:\r\n * ------\r\n * import req from \"./utilities/request-utility\"\r\n * req().get(\"/users/2\").then(res => console.log(res))\r\n * req()(\"/users/2\").then(res => console.log(res))\r\n * req().post(\"/users/\", {name: \"New user's name\"}).then(res => console.log(res))\r\n *\r\n */\r\n\r\n// let state = store.getState();\r\n// export default axios.create({\r\n// baseURL: state.appConfig.apiUrl,\r\n// headers: {\r\n// authorization: \"bearer \" + state.auth.token\r\n// }\r\n// })\r\n\r\nexport default () => {\r\n let state = store.getState();\r\n return axios.create({\r\n baseURL: state.appConfig.apiUrl,\r\n headers: {\r\n authorization: \"bearer \" + state.auth.token,\r\n \"x-project-id\": state.semcompletion.selectedProject.id,\r\n },\r\n });\r\n};\r\n","import React from \"react\";\nimport { css } from \"emotion\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\n\nimport colors from \"../../style/colors\";\nimport common from \"../../style/common\";\n\n/** Component to handle multiline textinput\n * \n * ```\n * \n * ```\n */\nconst TextareaInput = (props) => (\n \n);\n\nconst style = (props) => css`\n border: 1px solid ${props.backgroundColor || colors.midGrey};\n display: block;\n width: 100%;\n border-radius: 3px;\n font-size: 1rem;\n color: ${colors.black};\n resize: vertical;\n min-height: ${props.minHeight || \"120px\"};\n font-family: ${common.fontStack};\n padding: 0.5rem;\n -webkit-appearance: none;\n\n &:focus {\n outline: 0;\n border: 1px solid ${props.primaryColor};\n }\n`;\n\nconst mapStateToProps = (state) => ({\n primaryColor: state.appConfig.primaryColor,\n});\n\nTextareaInput.propTypes = {\n /** Sets an HTML attribute */\n name: PropTypes.string,\n /** Visible text when you haven't anything typed in */\n placeholder: PropTypes.string,\n /** Function that executes everytime you type something in this component */\n onChange: PropTypes.func,\n /** sets a className for easy styling */\n className: PropTypes.string,\n /** Used for overriding styles */\n style: PropTypes.object,\n};\n\nexport default connect(mapStateToProps)(TextareaInput);\n","import req from \"../utilities/request-utility\";\r\n\r\nimport { GET_PAGES, SET_TRANSITION_DIRECTION, GET_PAGES_SUCCESS, GET_PAGES_FAILURE } from \"./actionTypes\";\r\n\r\nexport function getPages() {\r\n return function (dispatch, getState) {\r\n dispatch({\r\n type: GET_PAGES,\r\n });\r\n\r\n req()\r\n .get(\"/pages\")\r\n .then((res) => res.data)\r\n .then((pages) => {\r\n dispatch({\r\n type: GET_PAGES_SUCCESS,\r\n payload: pages,\r\n });\r\n })\r\n .catch((err) => {\r\n dispatch({\r\n type: GET_PAGES_FAILURE,\r\n });\r\n });\r\n };\r\n}\r\n\r\nexport function setTransitionModeToForward() {\r\n return {\r\n type: SET_TRANSITION_DIRECTION,\r\n payload: \"forward\",\r\n };\r\n}\r\n\r\nexport function setTransitionModeToBackward() {\r\n return {\r\n type: SET_TRANSITION_DIRECTION,\r\n payload: \"backward\",\r\n };\r\n}\r\n","import React from 'react';\nimport { Document, Page } from 'react-pdf';\nimport isIOS from 'is-ios';\n\nfunction PDFRenderComponent(props) {\n\tconst { orientation = 'landscape', pdfData, size = 'A4' } = props;\n\n\treturn (\n\t\t console.log('PDF Render Error: ', e)}\n\t\t\trenderMode={isIOS ? 'svg' : 'canvas'}>\n\t\t\t\n\t\t\n\t);\n}\n\nexport default PDFRenderComponent;\n","import getAppName from \"../utilities/get-app-name\";\r\n\r\nexport default function (page, mode) {\r\n /**\r\n * Function that returns a url for a given page object\r\n * -----------------------------------------------\r\n * page must be a page object.\r\n * mode must be a string of either \"relative\" or \"absolute\"\r\n *\r\n * Absolute:\r\n * at: url.com/app/some-page/\r\n * navigate to: /some-other-page/\r\n * result: url.com/some-other-page&\r\n *\r\n * Relative:\r\n * at: url.com/app/some-page/\r\n * navigate to: some-other-page/\r\n * result: url.com/app/some-page/some-other-page/\r\n * */\r\n\r\n let prefix = \"\";\r\n\r\n if (mode === \"absolute\") {\r\n prefix += `/${getAppName()}/`;\r\n }\r\n\r\n /**\r\n * One-off rules for semcompletion. The semcompletion modules are names as:\r\n * \"SemcompletionInstallation\"\r\n * \"SemcompletionPulling\"\r\n * \"SemcompletionTermination\"\r\n * \"SemcompletionMechanicalCompletion\"\r\n *\r\n * The desired routes are:\r\n * \"semcompletion/:jobPackageType/\"\r\n *\r\n * The module name are therefore stripped of the first 13 characters (\"Semcompletion\")\r\n * so it becomes \"installation\", \"pulling\" etc.\r\n */\r\n if (\r\n page.module === \"SemcompletionInstallation\" ||\r\n page.module === \"SemcompletionPulling\" ||\r\n page.module === \"SemcompletionTermination\" ||\r\n page.module === \"SemcompletionMechanicalCompletion\" ||\r\n page.module === \"SemcompletionMechanicalCompletionEquipment\"\r\n ) {\r\n return `${prefix}SemcompletionOverview/${page.id}/${page.module.slice(13).toLowerCase()}/`;\r\n\r\n // For every other module (with a dataId)\r\n } else if (page.dataId) {\r\n return `${prefix}${page.module}/${page.id}/?dataId=${page.dataId}`;\r\n // For every other module (without a dataId)\r\n } else {\r\n return `${prefix}${page.module}/${page.id}/`;\r\n }\r\n}\r\n","import React, { Component } from \"react\";\nimport { css } from \"emotion\";\nimport { connect } from \"react-redux\";\nimport TinyAnimate from \"TinyAnimate\";\n\nimport colors from \"../../style/colors\";\nimport common from \"../../style/common\";\nimport PropTypes from \"prop-types\";\nimport { disableBodyScroll } from \"body-scroll-lock\";\n\n/** used for adding tab functionality to a component, should always be played just under Topbar component\n * Remember to add Tabview component, if you want to make this work\n * \n * ```jsx\n * \n ({\n title: tab,\n onClick: () => {\n this.setState({ activeTab: tabIndex });\n }\n }))}\n />\n SOME CODE LATER\n \n {this.state.contacts\n .filter(contact => contact.type === \"customGroup\")\n .map(contact => (\n pageNavigator(match.url + \"/\" + contact.id)}\n title={contact.title}\n iconRight={}\n key={contact.id}\n />\n ))}\n ,\n \n <>\n {this.state.contacts\n .filter(contact => contact.type !== \"customGroup\")\n .map(contact => (\n pageNavigator(match.url + \"/\" + contact.id)}\n title={contact.title}\n iconRight={}\n key={contact.id}\n />\n ))}\n \n ]}\n />\n * ```\n */\nclass TabBar extends Component {\n constructor(props) {\n super(props);\n this.targetRef = React.createRef();\n }\n\n componentDidMount() {\n disableBodyScroll(this.targetRef.current);\n }\n\n onClickProxy = (next, e) => {\n // Continue with actual navigation\n next();\n\n // Scroll into view\n this.scrollActiveTabIntoView(e.target);\n };\n\n scrollActiveTabIntoView = (activeTab, duration = 240) => {\n // Get clicked element position\n let clickedElPosition = activeTab.getBoundingClientRect();\n let windowWidth = window.innerWidth;\n let { current: el } = this.targetRef;\n\n // Scroll into view from right\n if (windowWidth - clickedElPosition.right < 0) {\n let newScrollDeltaX = clickedElPosition.width - (windowWidth - clickedElPosition.x);\n TinyAnimate.animate(\n el.scrollLeft,\n el.scrollLeft + newScrollDeltaX,\n duration,\n (x) => {\n el.scrollLeft = x;\n },\n \"easeInOutQuart\"\n );\n }\n // Scroll into view from left\n if (clickedElPosition.x < 0) {\n TinyAnimate.animate(\n el.scrollLeft,\n el.scrollLeft + clickedElPosition.x,\n duration,\n (x) => {\n el.scrollLeft = x;\n },\n \"easeInOutQuart\"\n );\n }\n };\n\n render() {\n let { primaryColor, activeTabIndex, tabs, customColor } = this.props;\n\n return (\n
\n
\n {tabs.map((tab, tabIndex) => (\n this.onClickProxy(tab.onClick, e)}\n key={tabIndex}\n style={{ borderBottomColor: tab.color }}\n >\n {tab.title}\n
\n ))}\n
\n \n );\n }\n}\n\nconst style = (primaryColor, customColor) => css`\n background-color: ${colors.white};\n border-bottom: 1px ${colors.midGrey} solid;\n overflow: hidden;\n flex: ${common.topBarHeight + 1}px 0 0;\n\n .scroll-hider {\n // This is added because of x-axes scrolling lagging on IOS 11.3\n -webkit-overflow-scrolling: touch;\n\n overflow-x: auto;\n white-space: nowrap;\n }\n\n svg {\n vertical-align: sub;\n width: 1.25rem;\n height: 1.25rem;\n margin-right: 0.15rem;\n }\n\n div.tab {\n line-height: ${common.topBarHeight - 3}px;\n padding: 0 2rem;\n display: inline-block;\n color: ${colors.darkGrey};\n\n &.active {\n border-bottom: 3px ${primaryColor} solid;\n color: ${primaryColor};\n }\n }\n`;\n\nTabBar.propTypes = {\n /** Numerical value which determines current active tab */\n activeTabIndex: PropTypes.number,\n /** Array which holds tab title */\n tabs: PropTypes.array,\n /** Override component style with this */\n style: PropTypes.object,\n};\n\nconst mapStateToProps = (state) => ({\n primaryColor: state.appConfig.primaryColor,\n});\nexport default connect(mapStateToProps)(TabBar);\n","import React, { Component } from \"react\";\nimport { css } from \"emotion\";\nimport { connect } from \"react-redux\";\nimport { ChevronDownIcon } from \"mdi-react\";\nimport PropTypes from \"prop-types\";\n//Style\nimport common from \"../../style/common\";\nimport colors from \"../../style/colors\";\n\n/** This is a customly styled drop-down list\n *\n * It accepts the following props:\n * @param {*} props - A react style object\n * @param {object} style - A react style object\n * @param {string} className - A class or a list of classes\n * @param {function} onChange - Fires when somthing is is selected\n * @param {string} initText - The placeholder text to appear before something is selected\n * @param {string} placeholder - Can be used instead of initText\n * @param {Object[]} dropDownListContent - an array of elements to show.\n * @param {integer} dropDownListContent[].id - Id of the element to show.\n * @param {string} dropDownListContent[].title - Title of the element to show.\n * @\n * \n * OR\n *\n * [{ value: XX, name: YY}]\n * ```\n * \n * EXAMPLE:\n * \n * ```\n * {\n this.setState({\n selectedDropDownContentId: event.target.value\n });\n }}\n />\n * ```\n */\n\nclass DropDownList extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n /**\n * Clears the current value of select element when the previous state of selectedContentId\n * is not equal to previous props of selectedContentId, e.g. previous props is equal to ''\n */\n if (prevState.selectedContentId !== prevProps.selectedContentId) {\n this.setState({ selectedContentId: prevProps.selectedContentId });\n }\n }\n\n dropdownChanged = (e) => {\n this.props.onChange(e);\n };\n\n render() {\n return (\n
\n this.dropdownChanged(e)}\n name={this.props.name}\n >\n \n {this.props.dropDownListContent &&\n this.props.dropDownListContent.map((item, itemIndex) => (\n \n ))}\n \n \n
\n );\n }\n}\n\nconst componentStyle = (props) => css`\n display: flex;\n align-items: end;\n\n select option:hidden {\n display: none;\n }\n\n select {\n background: none;\n width: 100%;\n border: 1px solid ${colors.midGrey};\n background: transparent;\n padding-left: 1rem;\n padding-right: 2.5rem;\n display: block;\n height: ${props.height ? props.height : \"40px\"};\n font-size: 1rem;\n font-family: ${common.fontStack};\n appearance: none;\n color: #6e6e6e;\n\n &:focus {\n outline: 0;\n border: 1px solid ${props.primaryColor};\n }\n }\n\n svg {\n margin-left: -40px;\n height: 40px;\n pointer-events: none;\n }\n`;\n\nDropDownList.propTypes = {\n /** object for overriding css styles */\n style: PropTypes.object,\n /** A class or a list of classes used for selecting classes that live inside DropDownList.jsx*/\n className: PropTypes.string,\n /** Function to be executed when an item is selected */\n onChange: PropTypes.func,\n /** The text that appears before anything is selected */\n initText: PropTypes.string,\n /** The elements to be shown in the dropdownlist, look above for required structure on the elements */\n dropDownListContent: PropTypes.array,\n};\n\nconst mapStateToProps = (state) => ({\n primaryColor: state.appConfig.primaryColor,\n});\n\nexport default connect(mapStateToProps)(DropDownList);\n","import React, { useState, useEffect } from \"react\";\nimport { css } from \"emotion\";\nimport ScrollView from \"./ScrollView\";\nimport PropTypes from \"prop-types\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { durations } from \"../../config/animations\";\n\n/** Used in conjunction with tabBar component. This component shows whatever content, that is in the current tab */\nconst TabView = props => {\n const { activeTabIndex, tabs, useScrollView, style } = props;\n const [animationDirection, setAnimationDirection] = useState(\"\");\n const [currActiveTabIndex, setCurrActiveTabIndex] = useState(0);\n const [scrollMap, setScrollMap] = useState({});\n\n useEffect(() => {\n // Set direction\n if (currActiveTabIndex >= activeTabIndex) {\n setAnimationDirection(\"left\");\n } else {\n setAnimationDirection(\"right\");\n }\n\n // Set state variable to actually trigger tab change\n setCurrActiveTabIndex(activeTabIndex);\n\n // Restores scroll-position\n if (scrollMap[activeTabIndex]) {\n // Wait for next frame (div will not be mounted before repaint)\n requestAnimationFrame(() => {\n // Update scroll pos\n document.getElementById(`scroll-view-${activeTabIndex}`).scrollTo(0, scrollMap[activeTabIndex]);\n });\n }\n\n // eslint-disable-next-line\n }, [activeTabIndex]);\n\n // Updates map of stored scroll positions. Consider debouncing this. I saw no perfomance issues though\n function updateScrollMap(index, scrollTop) {\n setScrollMap({\n ...scrollMap,\n [index]: scrollTop\n });\n }\n\n return (\n
\n {tabs.map((tab, index) => (\n \n {useScrollView === false ? (\n
\n {tab}\n
\n ) : (\n updateScrollMap(index, e.target.scrollTop)}\n onScrollEnd={() => (props.onScrollEnd ? props.onScrollEnd(index) : null)}\n data-test-id=\"scroll-view\"\n >\n {tab}\n \n )}\n \n ))}\n
\n );\n};\n\nconst componentStyle = tabIndex => css`\n width: 100%;\n height: 100%;\n white-space: nowrap;\n overflow: hidden;\n position: relative;\n\n .tab {\n position: absolute;\n width: 100%;\n height: 100%;\n vertical-align: top;\n }\n .tab-left-enter {\n opacity: 0;\n transform: translateX(-200px);\n }\n .tab-left-enter-active {\n opacity: 1;\n transform: translateX(0px);\n transition: opacity ${durations.normal}ms ease, transform ${durations.normal}ms ease;\n }\n .tab-left-exit {\n opacity: 1;\n transform: translateX(0px);\n }\n .tab-left-exit-active {\n opacity: 0;\n transform: translateX(200px);\n transition: opacity ${durations.normal}ms ease, transform ${durations.normal}ms ease;\n }\n\n .tab-right-enter {\n opacity: 0;\n transform: translateX(200px);\n }\n .tab-right-enter-active {\n opacity: 1;\n transform: translateX(0px);\n transition: opacity ${durations.normal}ms ease, transform ${durations.normal}ms ease;\n }\n .tab-right-exit {\n opacity: 1;\n transform: translateX(0px);\n }\n .tab-right-exit-active {\n opacity: 0;\n transform: translateX(-200px);\n transition: opacity ${durations.normal}ms ease, transform ${durations.normal}ms ease;\n }\n`;\n\nTabView.propTypes = {\n /** Array of all possible tabs */\n tabs: PropTypes.array,\n /** index of current active Tab */\n activeTabIndex: PropTypes.number,\n /** Function to be executed when the user scrolls on the current tab, can be used to enable lazyloading */\n onScroll: PropTypes.func,\n /** Boolean to indicate if the current implementation of tabView uses Scrollview component */\n useScrollView: PropTypes.bool,\n /** Object to override style on tabs */\n tabStyle: PropTypes.object\n};\nexport default TabView;\n","import React from \"react\";\r\nimport { css } from \"emotion\";\r\nimport colors from \"../../style/colors\";\r\nimport PropTypes from \"prop-types\";\r\n\r\n/** used for displaying item as part of a list, usecase could be: users on a highscore, events you can sign up to etc. \r\n * ```\r\n * \r\n * ```\r\n*/\r\n\r\nconst ListItem = (props) => (\r\n \r\n {/* Number left */}\r\n {props.itemNumberLeft &&
{props.itemNumberLeft}
}\r\n {/* Icon left */}\r\n {props.iconLeft &&
{props.iconLeft}
}\r\n {/* Image left */}\r\n {props.imageLeft &&
{props.imageLeft}
}\r\n
\r\n

\r\n {props.title}\r\n

\r\n

\r\n {props.subTitle}\r\n

\r\n
\r\n {props.notificationsRight &&
{props.notificationsRight}
}\r\n {props.iconRight &&
{props.iconRight}
}\r\n {props.contentRight &&
{props.contentRight}
}\r\n \r\n);\r\n\r\nconst componentStyle = (props) => css`\r\n margin-bottom: -1px;\r\n background-color: ${colors.white};\r\n border-top: 1px solid ${colors.midGrey};\r\n border-bottom: 1px solid ${colors.midGrey};\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 1rem 1rem;\r\n color: ${colors.black};\r\n flex-shrink: 0;\r\n\r\n &.enable-max-width {\r\n @media screen and (min-width: ${props.maxWidth}px) {\r\n max-width: ${props.maxWidth}px;\r\n margin-left: auto !important;\r\n margin-right: auto !important;\r\n border: 1px solid ${colors.midGrey};\r\n }\r\n }\r\n\r\n &:active,\r\n &:hover {\r\n ${props.clickable && `background-color: ${colors.ultraLightGrey};`}\r\n ${props.clickable && `cursor: pointer;`}\r\n }\r\n\r\n .icon-left {\r\n margin-right: ${props.imageLeft === false ? \"5px\" : \"0.5rem\"};\r\n margin-left: ${props.imageLeft === false ? \"-5px\" : \"initial\"};\r\n }\r\n .icon-right {\r\n margin-right: 0rem;\r\n }\r\n .icon-left,\r\n .icon-right {\r\n flex-basis: 20px;\r\n flex-shrink: 0;\r\n display: flex;\r\n justify-content: center;\r\n }\r\n .content {\r\n flex: 1 1 100%;\r\n overflow: hidden;\r\n min-width: 0;\r\n padding-right: 0.5rem;\r\n\r\n /* Default option */\r\n &.nowrap {\r\n .title {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n .meta {\r\n color: ${colors.darkGrey};\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n\r\n /* Wraps content to new line if it overflows */\r\n &.wrap {\r\n .title {\r\n white-space: initial;\r\n }\r\n\r\n .meta {\r\n color: ${colors.darkGrey};\r\n white-space: initial;\r\n }\r\n }\r\n }\r\n .image-wrapper {\r\n width: 30px;\r\n height: 30px;\r\n border: 1px #ccc solid;\r\n border-radius: 50%;\r\n flex: 0 0 30px;\r\n margin-right: 0.5rem;\r\n }\r\n`;\r\n\r\nListItem.propTypes = {\r\n /** Used for displaying an icon on the left side */\r\n iconLeft: PropTypes.object,\r\n /** Used for displaying an image on the left side */\r\n imageLeft: PropTypes.object,\r\n /** Used for displaying an icon on the right side */\r\n iconRight: PropTypes.object,\r\n /** Used for displaying text-based content on the right side */\r\n contentRight: PropTypes.string,\r\n /** Content main title, for related info, use subtitle Prop */\r\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n /** Descriptive textblock related to title prop */\r\n subTitle: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n /** used for deciding if content should wrap */\r\n wrapContent: PropTypes.bool,\r\n};\r\nexport default ListItem;\r\n","// Side menu\r\nexport const OPEN_SIDE_MENU = \"OPEN_SIDE_MENU\";\r\nexport const CLOSE_SIDE_MENU = \"CLOSE_SIDE_MENU\";\r\n\r\n// Language\r\nexport const GET_LANGUAGE = \"GET_LANGUAGE\";\r\nexport const GET_LANGUAGE_SUCCESS = \"GET_LANGUAGE_SUCCESS\";\r\nexport const GET_LANGUAGE_FAILURE = \"GET_LANGUAGE_FAILURE\";\r\n\r\n// Pages\r\nexport const GET_PAGES = \"GET_PAGES\";\r\nexport const GET_PAGES_SUCCESS = \"GET_PAGES_SUCCESS\";\r\nexport const GET_PAGES_FAILURE = \"GET_PAGES_FAILURE\";\r\nexport const SET_TRANSITION_DIRECTION = \"SET_TRANSITION_DIRECTION\";\r\n\r\n// Paper\r\nexport const DOCUMENTS = {\r\n CANCEL: {\r\n REQUEST: \"CANCEL_DOCUMENTS_PENDING\",\r\n SUCCESS: \"CANCEL_DOCUMENTS_SUCCESS\",\r\n FAILURE: \"CANCEL_DOCUMENTS_FAILURE\",\r\n },\r\n EDIT: {\r\n REQUEST: \"EDIT_DOCUMENTS_PENDING\",\r\n SUCCESS: \"EDIT_DOCUMENTS_SUCCESS\",\r\n FAILURE: \"EDIT_DOCUMENTS_FAILURE\",\r\n },\r\n FETCH: {\r\n REQUEST: \"FETCH_DOCUMENTS_PENDING\",\r\n SUCCESS: \"FETCH_DOCUMENTS_SUCCESS\",\r\n FAILURE: \"FETCH_DOCUMENTS_FAILURE\",\r\n },\r\n RESET: \"RESET_DOCUMENTS\",\r\n SAVE: {\r\n REQUEST: \"SAVE_DOCUMENTS_PENDING\",\r\n SUCCESS: \"SAVE_DOCUMENTS_SUCCESS\",\r\n FAILURE: \"SAVE_DOCUMENTS_FAILURE\",\r\n },\r\n SETVIEW: \"SET_DOCUMENTS_VIEW\",\r\n SETFORM: \"SET_FORM\",\r\n};\r\n\r\nexport const WELDLOGS = {\r\n EDIT: {\r\n REQUEST: \"EDIT_WELDLOGS_PENDING\",\r\n SUCCESS: \"EDIT_WELDLOGS_SUCCESS\",\r\n FAILURE: \"EDIT_WELDLOGS_FAILURE\",\r\n },\r\n FETCH: {\r\n REQUEST: \"FETCH_WELDLOGS_PENDING\",\r\n SUCCESS: \"FETCH_WELDLOGS_SUCCESS\",\r\n FAILURE: \"FETCH_WELDLOGS_FAILURE\",\r\n },\r\n RESET: \"RESET_WELDLOGS\",\r\n SAVE: {\r\n REQUEST: \"SAVE_WELDLOGS_PENDING\",\r\n SUCCESS: \"SAVE_WELDLOGS_SUCCESS\",\r\n FAILURE: \"SAVE_WELDLOGS_FAILURE\",\r\n },\r\n SETFORM: \"SET_FORM\",\r\n SETFORMPROP: \"SET_FORM_PROP\",\r\n};\r\n\r\nexport const USERS = {\r\n FETCH: {\r\n REQUEST: \"FETCH_USERS_PENDING\",\r\n SUCCESS: \"FETCH_USERS_SUCCESS\",\r\n FAILURE: \"FETCH_USERS_FAILURE\",\r\n },\r\n SETUSER: \"SET_USER\",\r\n};\r\n\r\nexport const REDMARKLOGS = {\r\n EDIT: {\r\n REQUEST: \"EDIT_REDMARKLOGS_PENDING\",\r\n SUCCESS: \"EDIT_REDMARKLOGS_SUCCESS\",\r\n FAILURE: \"EDIT_REDMARKLOGS_FAILURE\",\r\n },\r\n FETCH: {\r\n REQUEST: \"FETCH_REDMARKLOGS_PENDING\",\r\n SUCCESS: \"FETCH_REDMARKLOGS_SUCCESS\",\r\n FAILURE: \"FETCH_REDMARKLOGS_FAILURE\",\r\n },\r\n RESET: \"RESET_REDMARKLOGS\",\r\n SAVE: {\r\n REQUEST: \"SAVE_REDMARKLOGS_PENDING\",\r\n SUCCESS: \"SAVE_REDMARKLOGS_SUCCESS\",\r\n FAILURE: \"SAVE_REDMARKLOGS_FAILURE\",\r\n },\r\n SETFORM: \"SET_FORM\",\r\n SETFORMPROP: \"SET_FORM_PROP\",\r\n};\r\n\r\nexport const SET_TOOL = \"SET_TOOL\";\r\n\r\n// Auth\r\nexport const UPDATE_USER_DATA = \"UPDATE_USER_DATA\";\r\nexport const SIGN_IN = \"SIGN_IN\";\r\nexport const SIGN_IN_SUCCESS = \"SIGN_IN_SUCCESS\";\r\nexport const SIGN_IN_FAILURE = \"SIGN_IN_FAILURE\";\r\nexport const AD_SIGN_IN_FAILURE = \"AD_SIGN_IN_FAILURE\";\r\nexport const AD_SIGN_IN_FAILURE_HANDLED = \"AD_SIGN_IN_FAILURE_HANDLED\";\r\nexport const SIGN_IN_FAILURE_HANDLED = \"SIGN_IN_FAILURE_HANDLED\";\r\nexport const SIGN_OUT = \"SIGN_OUT\";\r\nexport const CHECK_TOKEN = \"CHECK_TOKEN\";\r\nexport const CHECK_TOKEN_VALID = \"CHECK_TOKEN_VALID\";\r\nexport const CHECK_TOKEN_INVALID = \"CHECK_TOKEN_INVALID\";\r\nexport const CHECK_TOKEN_SERVICE_UNAVAILABLE = \"CHECK_TOKEN_SERVICE_UNAVAILABLE\";\r\nexport const RENEW_TOKEN = \"RENEW_TOKEN\";\r\nexport const RENEW_TOKEN_SUCCESS = \"RENEW_TOKEN_SUCCESS\";\r\nexport const RENEW_TOKEN_FAILURE = \"RENEW_TOKEN_FAILURE\";\r\nexport const RENEW_PASSWORD_SUCCESS = \"RENEW_PASSWORD_SUCCESS\";\r\nexport const RENEW_PASSWORD_FAILED = \"RENEW_PASSWORD_FAILED\";\r\nexport const RENEW_PASSWORD_HANDLED = \"RENEW_PASSWORD_HANDLED\";\r\n\r\n// App Config\r\nexport const GET_APP_CONFIG = \"GET_APP_CONFIG\";\r\nexport const GET_APP_CONFIG_SUCCESS = \"GET_APP_CONFIG_SUCCESS\";\r\nexport const GET_APP_CONFIG_FAILURE = \"GET_APP_CONFIG_FAILURE\";\r\nexport const SET_APP_LANGUAGE = \"SET_APP_LANGUAGE\";\r\nexport const CLEAR_APP_CONFIG_LOGIN_TYPES = \"CLEAR_APP_CONFIG_LOGIN_TYPES\";\r\n\r\n// UI\r\n// -> Context menu\r\nexport const SHOW_CONTEXT_MENU = \"SHOW_CONTEXT_MENU\";\r\nexport const HIDE_CONTEXT_MENU = \"HIDE_CONTEXT_MENU\";\r\nexport const CLEAR_CONTEXT_MENU_ACTIONS = \"CLEAR_CONTEXT_MENU_ACTIONS\";\r\n\r\n// -> Dialog\r\nexport const SHOW_DIALOG = \"SHOW_DIALOG\";\r\nexport const HIDE_DIALOG = \"HIDE_DIALOG\";\r\nexport const CLEAR_DIALOG = \"CLEAR_DIALOG\";\r\n\r\n// -> Lightbox\r\nexport const SHOW_LIGHT_BOX = \"SHOW_LIGHT_BOX\";\r\nexport const HIDE_LIGHT_BOX = \"HIDE_LIGHT_BOX\";\r\n\r\n// -> Modal page\r\nexport const SHOW_MODAL_PAGE = \"SHOW_MODAL_PAGE\";\r\nexport const UPDATE_MODAL_PAGE_CONTENT = \"UPDATE_MODAL_PAGE_CONTENT\";\r\nexport const HIDE_MODAL_PAGE = \"HIDE_MODAL_PAGE\";\r\nexport const CLEAR_MODAL_PAGE = \"CLEAR_MODAL_PAGE\";\r\n\r\n// -> Tab bar navigation\r\nexport const SET_ACTIVE_TAB = \"SET_ACTIVE_TAB\";\r\n\r\n// -> Work hour modal\r\nexport const TOGGLE_WORK_HOUR_MODAL = \"TOGGLE_WORK_HOUR_MODAL\";\r\n/******************************* SEMCO ****************************/\r\n/* If there are too many of theese find a way to seperate them from the main bundle */\r\nexport const SC_SET_SELECTED_PROJECT = \"SC_SET_SELECTED_PROJECT\";\r\n","import getAppName from \"./get-app-name\";\n\nexport default (state) => {\n try {\n const stateToSave = {\n appConfig: state.appConfig,\n auth: state.auth,\n language: state.language,\n pages: state.pages,\n semcompletion: state.semcompletion,\n users: state.users,\n };\n\n const serializedState = JSON.stringify(stateToSave);\n localStorage.setItem(`${getAppName()}-state`, serializedState);\n } catch (err) {\n // Could not write state to localstorage\n }\n};\n","import { createStore, applyMiddleware } from \"redux\";\r\nimport { composeWithDevTools } from \"redux-devtools-extension\";\r\n\r\nimport loadStateFromLocalStorage from \"./utilities/load-state-from-local-storage\";\r\nimport saveStateToLocalStorage from \"./utilities/save-state-to-local-storage\";\r\nimport thunk from \"redux-thunk\";\r\nimport rootReducer from \"./reducers\"; // reducers/index.js\r\n\r\n// Load initial state\r\nconst initialState = loadStateFromLocalStorage();\r\n\r\n// Register middleware\r\nconst middleware = [thunk];\r\n\r\n// Create store\r\nconst store = createStore(rootReducer, initialState, composeWithDevTools(applyMiddleware(...middleware)));\r\n\r\n// Save state to ls after 2s of redux-inactivity\r\nlet timeout;\r\nstore.subscribe(() => {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => {\r\n saveStateToLocalStorage({ ...store.getState() });\r\n }, 2000);\r\n});\r\n\r\nexport default store;\r\n","import {\r\n SIGN_IN,\r\n SIGN_IN_SUCCESS,\r\n SIGN_IN_FAILURE,\r\n SIGN_IN_FAILURE_HANDLED,\r\n AD_SIGN_IN_FAILURE,\r\n SIGN_OUT,\r\n CHECK_TOKEN,\r\n CHECK_TOKEN_VALID,\r\n CHECK_TOKEN_INVALID,\r\n CHECK_TOKEN_SERVICE_UNAVAILABLE,\r\n RENEW_TOKEN_SUCCESS,\r\n RENEW_TOKEN_FAILURE,\r\n UPDATE_USER_DATA,\r\n RENEW_PASSWORD_FAILED,\r\n RENEW_PASSWORD_SUCCESS,\r\n RENEW_PASSWORD_HANDLED,\r\n AD_SIGN_IN_FAILURE_HANDLED\r\n} from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n renewPasswordSuccess: false,\r\n renewPasswordError: false,\r\n signingIn: false,\r\n signInError: false,\r\n adLoginFailed: false,\r\n isAuthenticated: false,\r\n checkingToken: false,\r\n user: {},\r\n token: null\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch (action.type) {\r\n case UPDATE_USER_DATA:\r\n return {\r\n ...state,\r\n user: action.payload\r\n };\r\n\r\n case SIGN_IN:\r\n return {\r\n ...state,\r\n signingIn: true\r\n };\r\n\r\n case SIGN_IN_SUCCESS:\r\n return {\r\n ...state,\r\n signingIn: false,\r\n signInError: false,\r\n isAuthenticated: true,\r\n token: action.payload.token,\r\n user: action.payload.user\r\n };\r\n\r\n case SIGN_IN_FAILURE:\r\n return {\r\n ...state,\r\n signingIn: false,\r\n signInError: true,\r\n isAuthenticated: false,\r\n token: null,\r\n user: {}\r\n };\r\n\r\n case SIGN_IN_FAILURE_HANDLED:\r\n return {\r\n ...state,\r\n signInError: false\r\n };\r\n\r\n case AD_SIGN_IN_FAILURE:\r\n return {\r\n ...state,\r\n adLoginFailed: true\r\n };\r\n\r\n case AD_SIGN_IN_FAILURE_HANDLED:\r\n return {\r\n ...state,\r\n adLoginFailed: false\r\n };\r\n\r\n case SIGN_OUT:\r\n return {\r\n ...state,\r\n signingIn: false,\r\n signInError: false,\r\n isAuthenticated: false,\r\n token: null,\r\n user: {}\r\n };\r\n\r\n case CHECK_TOKEN:\r\n return {\r\n ...state,\r\n checkingToken: true\r\n };\r\n\r\n case CHECK_TOKEN_VALID:\r\n return {\r\n ...state,\r\n isAuthenticated: true,\r\n checkingToken: false\r\n };\r\n\r\n case CHECK_TOKEN_INVALID:\r\n return {\r\n ...state,\r\n signingIn: false, // Prevent eternal spinner-bug\r\n isAuthenticated: false,\r\n token: null,\r\n checkingToken: false\r\n };\r\n\r\n case CHECK_TOKEN_SERVICE_UNAVAILABLE:\r\n return {\r\n ...state,\r\n signingIn: false, // Prevent eternal spinner-bug\r\n checkingToken: false\r\n };\r\n\r\n case RENEW_TOKEN_SUCCESS:\r\n return {\r\n ...state,\r\n token: action.payload.token, // Token\r\n user: action.payload.user // Token\r\n };\r\n\r\n case RENEW_TOKEN_FAILURE:\r\n return {\r\n ...state,\r\n isAuthenticated: false,\r\n token: null,\r\n user: {}\r\n };\r\n\r\n case RENEW_PASSWORD_FAILED:\r\n return {\r\n ...state,\r\n renewPasswordError: true\r\n };\r\n\r\n case RENEW_PASSWORD_SUCCESS:\r\n return {\r\n ...state,\r\n renewPasswordSuccess: true\r\n };\r\n\r\n case RENEW_PASSWORD_HANDLED:\r\n return {\r\n ...state,\r\n renewPasswordError: false,\r\n renewPasswordSuccess: false\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n","import {\r\n GET_APP_CONFIG,\r\n GET_APP_CONFIG_SUCCESS,\r\n GET_APP_CONFIG_FAILURE,\r\n SET_APP_LANGUAGE,\r\n CLEAR_APP_CONFIG_LOGIN_TYPES,\r\n} from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n loading: false,\r\n error: false,\r\n appId: null,\r\n title: \"\",\r\n primaryColor: \"\",\r\n apiUrl: \"\",\r\n icon: {\r\n baseURL: \"\",\r\n image: \"\",\r\n },\r\n frontPageImage: {\r\n baseURL: \"\",\r\n image: \"\",\r\n },\r\n customerLogo: {\r\n baseURL: \"\",\r\n image: \"\",\r\n },\r\n allowedLoginTypes: [],\r\n enableHighscore: false,\r\n language: \"en\",\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n switch (action.type) {\r\n case GET_APP_CONFIG:\r\n return {\r\n ...state,\r\n loading: true,\r\n };\r\n\r\n case GET_APP_CONFIG_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n appId: action.payload.appId,\r\n title: action.payload.title,\r\n primaryColor: action.payload.primaryColor,\r\n apiUrl: action.payload.apiUrl,\r\n icon: action.payload.icon,\r\n frontPageImage: action.payload.frontPageImage,\r\n customerLogo: action.payload.customerLogo,\r\n allowedLoginTypes: action.payload.allowedLoginTypes,\r\n enableHighscore: action.payload.enableHighscore,\r\n };\r\n\r\n case GET_APP_CONFIG_FAILURE:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true,\r\n };\r\n\r\n case SET_APP_LANGUAGE:\r\n return {\r\n ...state,\r\n language: action.payload,\r\n };\r\n\r\n case CLEAR_APP_CONFIG_LOGIN_TYPES:\r\n return {\r\n ...state,\r\n allowedLoginTypes: [],\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n","import {\r\n GET_LANGUAGE,\r\n GET_LANGUAGE_SUCCESS,\r\n GET_LANGUAGE_FAILURE,\r\n} from \"../actions/actionTypes\"\r\n\r\nconst initialState = {\r\n language: {},\r\n loading: true,\r\n error: false\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n switch (action.type) {\r\n\r\n case GET_LANGUAGE:\r\n return {\r\n ...state,\r\n loading: true,\r\n error: false\r\n };\r\n\r\n case GET_LANGUAGE_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: false,\r\n language: action.payload\r\n };\r\n\r\n case GET_LANGUAGE_FAILURE:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n\r\n\r\n default:\r\n return state\r\n }\r\n}","import { GET_PAGES, SET_TRANSITION_DIRECTION, GET_PAGES_FAILURE, GET_PAGES_SUCCESS } from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n pages: [],\r\n loading: true,\r\n error: false,\r\n transitionDirection: \"\"\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch (action.type) {\r\n case GET_PAGES:\r\n return {\r\n ...state,\r\n loading: true,\r\n error: false\r\n };\r\n\r\n case GET_PAGES_FAILURE:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n\r\n case GET_PAGES_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: false,\r\n pages: action.payload\r\n };\r\n\r\n case SET_TRANSITION_DIRECTION:\r\n return {\r\n ...state,\r\n transitionDirection: action.payload\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { DOCUMENTS, SET_TOOL } from \"../actions/actionTypes\";\n\nconst INITIAL_STATE = {\n action: null,\n activeTool: null,\n editing: false,\n error: null,\n formLoading: false,\n imageHeight: \"\",\n imageURL: \"\",\n imageWidth: \"\",\n loading: true,\n svg: null,\n svgJSON: null,\n type: null,\n view: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n const { payload, type } = action;\n\n switch (type) {\n case DOCUMENTS.RESET:\n return { ...state, ...INITIAL_STATE };\n case DOCUMENTS.SETVIEW:\n return { ...state, view: payload };\n\n case DOCUMENTS.FETCH.REQUEST:\n return {\n ...state,\n imageHeight: \"\",\n imageURL: \"\",\n imageWidth: \"\",\n loading: true,\n error: null,\n svg: null,\n svgJSON: null,\n };\n case DOCUMENTS.FETCH.SUCCESS:\n return { ...state, ...payload, error: null, loading: false };\n case DOCUMENTS.FETCH.FAILURE:\n return { ...state, error: payload, loading: false };\n\n case DOCUMENTS.CANCEL.REQUEST:\n return { ...state, action: \"cancel\", formLoading: true, error: null };\n case DOCUMENTS.CANCEL.SUCCESS:\n return { ...state, ...payload, action: null, editing: false, error: null, formLoading: false, type: null };\n case DOCUMENTS.CANCEL.FAILURE:\n return { ...state, action: null, error: payload, formLoading: false };\n\n case DOCUMENTS.EDIT.REQUEST:\n return { ...state, action: \"edit\", formLoading: true, error: null, type: payload };\n case DOCUMENTS.EDIT.SUCCESS:\n return { ...state, action: null, editing: true, error: null, formLoading: false };\n case DOCUMENTS.EDIT.FAILURE:\n return { ...state, action: null, error: payload, formLoading: false };\n\n case DOCUMENTS.SAVE.REQUEST:\n return { ...state, action: \"save\", formLoading: true, error: null };\n case DOCUMENTS.SAVE.SUCCESS:\n return { ...state, action: null, editing: false, error: null, formLoading: false, type: null };\n case DOCUMENTS.SAVE.FAILURE:\n return { ...state, action: null, error: payload, formLoading: false };\n\n case SET_TOOL:\n return { ...state, activeTool: payload };\n\n default:\n return state;\n }\n}\n","import {\r\n OPEN_SIDE_MENU,\r\n CLOSE_SIDE_MENU\r\n} from \"../actions/actionTypes\"\r\n\r\nconst initialState = {\r\n active: false\r\n}\r\n\r\nexport default function (state = initialState, action) {\r\n switch (action.type) {\r\n\r\n case OPEN_SIDE_MENU:\r\n return {\r\n ...state,\r\n active: true\r\n }\r\n\r\n case CLOSE_SIDE_MENU:\r\n return {\r\n ...state,\r\n active: false\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}","import { WELDLOGS } from \"../actions/actionTypes\";\n\nconst INITIAL_STATE = {\n data: [],\n end: false,\n error: null,\n form: null,\n formLoading: false,\n limit: 10,\n loading: false,\n offset: 0,\n};\n\nexport default (state = INITIAL_STATE, action) => {\n const { payload, type } = action;\n\n switch (type) {\n case WELDLOGS.SETFORM:\n return { ...state, form: payload };\n case WELDLOGS.SETFORMPROP:\n return { ...state, form: { ...state.form, [payload.key]: payload.value } };\n\n case WELDLOGS.FETCH.REQUEST:\n return { ...state, ...payload, loading: true };\n case WELDLOGS.FETCH.SUCCESS:\n if (payload.id) return { ...state, form: payload.data, error: null, loading: false };\n\n return {\n ...state,\n data: [...state.data, ...payload.data],\n end: payload.end,\n error: null,\n loading: false,\n offset: state.offset + 10,\n };\n case WELDLOGS.FETCH.FAILURE:\n return { ...state, error: payload, loading: false };\n\n case WELDLOGS.EDIT.REQUEST:\n return { ...state, formLoading: true, error: null };\n case WELDLOGS.EDIT.SUCCESS:\n return {\n ...state,\n data: payload.id ? [...state.data] : [payload.data, ...state.data],\n error: null,\n formLoading: false,\n form: payload.data,\n };\n case WELDLOGS.EDIT.FAILURE:\n return { ...state, error: payload, formLoading: false };\n\n case WELDLOGS.SAVE.REQUEST:\n return { ...state, formLoading: true, error: null };\n case WELDLOGS.SAVE.SUCCESS:\n return {\n ...state,\n data: state.data.map((d) => (d.id.toUpperCase() === payload.id.toUpperCase() ? payload : d)),\n error: null,\n form: null,\n formLoading: false,\n };\n case WELDLOGS.SAVE.FAILURE:\n return { ...state, action: null, error: payload, formLoading: false };\n\n case WELDLOGS.RESET:\n return { ...state, data: [], end: false, form: null };\n\n default:\n return state;\n }\n};\n","import { REDMARKLOGS } from \"../actions/actionTypes\";\n\nconst INITIAL_STATE = {\n data: [],\n end: false,\n error: null,\n form: null,\n formLoading: false,\n limit: 10,\n loading: false,\n offset: 0,\n};\n\nexport default (state = INITIAL_STATE, action) => {\n const { payload, type } = action;\n\n switch (type) {\n case REDMARKLOGS.SETFORM:\n return { ...state, form: payload };\n case REDMARKLOGS.SETFORMPROP:\n return { ...state, form: { ...state.form, [payload.key]: payload.value } };\n\n case REDMARKLOGS.FETCH.REQUEST:\n return { ...state, ...payload, loading: true };\n case REDMARKLOGS.FETCH.SUCCESS:\n if (payload.id) return { ...state, form: payload.data, error: null, loading: false };\n return { ...state, data: [...state.data, ...payload.data], end: payload.end, error: null, loading: false };\n case REDMARKLOGS.FETCH.FAILURE:\n return { ...state, error: payload, loading: false };\n\n case REDMARKLOGS.EDIT.REQUEST:\n return { ...state, formLoading: true, error: null };\n case REDMARKLOGS.EDIT.SUCCESS:\n return {\n ...state,\n data: payload.id ? [...state.data] : [payload.data, ...state.data],\n error: null,\n formLoading: false,\n form: payload.data,\n };\n case REDMARKLOGS.EDIT.FAILURE:\n return { ...state, error: payload, formLoading: false };\n\n case REDMARKLOGS.SAVE.REQUEST:\n return { ...state, formLoading: true, error: null };\n case REDMARKLOGS.SAVE.SUCCESS:\n return {\n ...state,\n data: state.data.map((d) => (d.id.toUpperCase() === payload.id.toUpperCase() ? payload : d)),\n error: null,\n form: null,\n formLoading: false,\n };\n case REDMARKLOGS.SAVE.FAILURE:\n return { ...state, action: null, error: payload, formLoading: false };\n\n case REDMARKLOGS.RESET:\n return { ...state, data: [], end: false, form: null };\n\n default:\n return state;\n }\n};\n","import {\r\n SHOW_CONTEXT_MENU,\r\n HIDE_CONTEXT_MENU,\r\n SHOW_DIALOG,\r\n HIDE_DIALOG,\r\n SHOW_MODAL_PAGE,\r\n UPDATE_MODAL_PAGE_CONTENT,\r\n HIDE_MODAL_PAGE,\r\n SHOW_LIGHT_BOX,\r\n HIDE_LIGHT_BOX,\r\n CLEAR_CONTEXT_MENU_ACTIONS,\r\n CLEAR_MODAL_PAGE,\r\n CLEAR_DIALOG,\r\n TOGGLE_WORK_HOUR_MODAL,\r\n} from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n contextMenu: {\r\n active: false,\r\n actions: [],\r\n defaultActionTitle: undefined,\r\n closeOnActionCallback: true,\r\n },\r\n Lightbox: {\r\n active: false,\r\n images: [],\r\n },\r\n modalPage: {\r\n active: false,\r\n title: null,\r\n content: null,\r\n closeCallback: null,\r\n actionRight: null,\r\n },\r\n dialog: {\r\n active: false,\r\n actions: [],\r\n title: null,\r\n content: null,\r\n icon: null,\r\n primaryActionTitle: null,\r\n secondaryActionTitle: null,\r\n primaryAction: null,\r\n styleType: null,\r\n disableSecondaryAction: false,\r\n },\r\n workHourModal: false,\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n switch (action.type) {\r\n // Context menu\r\n case SHOW_CONTEXT_MENU:\r\n // Let you dispatch actions as an array if no options are needed\r\n if (Array.isArray(action.payload)) {\r\n action.payload.actions = action.payload;\r\n }\r\n\r\n return {\r\n ...state,\r\n contextMenu: {\r\n active: true,\r\n actions: action.payload.actions,\r\n closeOnActionCallback: action.payload.closeOnActionCallback,\r\n defaultActionTitle: action.payload.defaultActionTitle || undefined,\r\n },\r\n };\r\n\r\n case HIDE_CONTEXT_MENU:\r\n return {\r\n ...state,\r\n contextMenu: {\r\n ...state.contextMenu,\r\n active: false,\r\n },\r\n };\r\n\r\n case CLEAR_CONTEXT_MENU_ACTIONS:\r\n return {\r\n ...state,\r\n contextMenu: {\r\n ...state.contextMenu,\r\n actions: [],\r\n },\r\n };\r\n\r\n // Lightbox\r\n case SHOW_LIGHT_BOX:\r\n return {\r\n ...state,\r\n Lightbox: {\r\n active: true,\r\n images: action.payload.images,\r\n },\r\n };\r\n\r\n case HIDE_LIGHT_BOX:\r\n return {\r\n ...state,\r\n Lightbox: {\r\n ...state.Lightbox,\r\n active: false,\r\n },\r\n };\r\n\r\n // Modal page\r\n case SHOW_MODAL_PAGE:\r\n return {\r\n ...state,\r\n modalPage: {\r\n active: true,\r\n title: action.payload.title,\r\n actionRight: action.payload.actionRight,\r\n content: action.payload.content,\r\n closeCallback: action.payload.closeCallback,\r\n },\r\n };\r\n\r\n case UPDATE_MODAL_PAGE_CONTENT:\r\n return {\r\n ...state,\r\n modalPage: {\r\n ...state.modalPage,\r\n ...action.payload,\r\n },\r\n };\r\n\r\n case HIDE_MODAL_PAGE:\r\n return {\r\n ...state,\r\n modalPage: {\r\n ...state.modalPage,\r\n active: false,\r\n },\r\n };\r\n\r\n case CLEAR_MODAL_PAGE:\r\n return {\r\n ...state,\r\n modalPage: {\r\n active: false,\r\n actionRight: null,\r\n title: null,\r\n closeCallback: null,\r\n content: null,\r\n },\r\n };\r\n\r\n // Dialog\r\n case SHOW_DIALOG:\r\n return {\r\n ...state,\r\n dialog: {\r\n active: true,\r\n ...action.payload,\r\n },\r\n };\r\n case HIDE_DIALOG:\r\n return {\r\n ...state,\r\n dialog: {\r\n ...state.dialog,\r\n active: false,\r\n },\r\n };\r\n case CLEAR_DIALOG:\r\n return {\r\n ...state,\r\n dialog: {\r\n active: false,\r\n actions: [],\r\n title: null,\r\n content: null,\r\n icon: null,\r\n primaryActionTitle: null,\r\n secondaryActionTitle: null,\r\n primaryAction: null,\r\n styleType: null,\r\n disableSecondaryAction: false,\r\n },\r\n };\r\n\r\n case TOGGLE_WORK_HOUR_MODAL:\r\n return {\r\n ...state,\r\n workHourModal: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { USERS } from \"../actions/actionTypes\";\n\nconst initialState = {\n loading: false,\n lists: [],\n selectedUser: null,\n};\n\nexport default (state = initialState, action) => {\n const { payload, type } = action;\n\n switch (type) {\n case USERS.FETCH.REQUEST:\n return { ...state, loading: true };\n case USERS.FETCH.SUCCESS:\n return { ...state, lists: payload, loading: false };\n case USERS.FETCH.FAILURE:\n return { ...state, loading: false };\n case USERS.SETUSER:\n return { ...state, selectedUser: payload };\n default:\n return state;\n }\n};\n","import { SC_SET_SELECTED_PROJECT } from \"../actions/actionTypes\";\n\nconst initialState = {\n selectedProject: {\n id: \"\",\n number: \"\",\n description: \"\",\n projectType: \"\",\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case SC_SET_SELECTED_PROJECT:\n return {\n ...state,\n selectedProject: {\n ...state.selectedProject,\n id: action.payload.id,\n number: action.payload.number,\n description: action.payload.description,\n projectType: action.payload.projectType,\n },\n };\n\n default:\n return state;\n }\n}\n","import { combineReducers } from \"redux\";\r\n\r\n// Reducers\r\nimport authReducer from \"./authReducer\";\r\nimport appConfigReducer from \"./appConfigReducer\";\r\nimport languageReducer from \"./languageReducer\";\r\nimport pagesReducer from \"./pagesReducer\";\r\nimport paper from \"./paperReducer\";\r\nimport sideMenuReducer from \"./sideMenuReducer\";\r\nimport weldLogReducer from \"./weldLogReducer\";\r\nimport redmarkLogReducer from \"./redmarkLogReducer\";\r\nimport uiReducer from \"./uiReducer\";\r\nimport userReducer from \"./userReducer\";\r\n\r\n// Semco\r\nimport semcompletionReducer from \"./semcompletionReducer\";\r\n\r\nexport default combineReducers({\r\n appConfig: appConfigReducer,\r\n auth: authReducer,\r\n language: languageReducer,\r\n pages: pagesReducer,\r\n paper,\r\n sideMenu: sideMenuReducer,\r\n ui: uiReducer,\r\n weldLog: weldLogReducer,\r\n redmarkLog: redmarkLogReducer,\r\n semcompletion: semcompletionReducer,\r\n users: userReducer,\r\n});\r\n","import getAppName from \"./get-app-name\";\n\nexport default () => {\n try {\n const serializedState = localStorage.getItem(`${getAppName()}-state`);\n if (!serializedState) return undefined;\n return JSON.parse(serializedState);\n } catch (err) {\n return undefined;\n }\n};\n","import {\r\n createBrowserHistory\r\n} from 'history'\r\nexport default createBrowserHistory()","import React from \"react\";\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\n/** Component used for displaying an ongoing, unfinished action. It shows a contious spinner all the time,\n * so you need to have condition that handles this, otherwise, the spinner just confuses the user */\nconst Spinner = props => (\n
\n
\n {props.title &&

{props.title}

}\n
\n);\n\nconst style = props => css`\n .spinner {\n width: ${props.size || 38}px;\n height: ${props.size || 38}px;\n border-radius: 50%;\n border: 3px solid #000;\n border-color: ${props.color || props.primaryColor} ${props.color || props.primaryColor}\n ${props.color || props.primaryColor} rgba(0, 0, 0, 0);\n margin: 0 auto 0.5rem auto;\n animation: spin 0.7s infinite linear;\n }\n text-align: center;\n p.meta {\n color: ${colors.darkGrey};\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nconst mapStateToProps = state => ({\n primaryColor: state.appConfig.primaryColor\n});\n\nSpinner.propTypes = {\n /** Used for overiding primaryColor, in case you need a spinner in a different color than primaryColor */\n color: PropTypes.string,\n /** The applications primary color */\n primaryColor: PropTypes.string\n};\nexport default connect(mapStateToProps)(Spinner);\n","import React from \"react\";\r\nimport { durations } from \"../config/animations\";\r\n\r\nimport {\r\n SHOW_CONTEXT_MENU,\r\n HIDE_CONTEXT_MENU,\r\n SHOW_DIALOG,\r\n HIDE_DIALOG,\r\n CLEAR_DIALOG,\r\n SHOW_LIGHT_BOX,\r\n HIDE_LIGHT_BOX,\r\n SHOW_MODAL_PAGE,\r\n UPDATE_MODAL_PAGE_CONTENT,\r\n HIDE_MODAL_PAGE,\r\n CLEAR_CONTEXT_MENU_ACTIONS,\r\n CLEAR_MODAL_PAGE,\r\n TOGGLE_WORK_HOUR_MODAL,\r\n} from \"./actionTypes\";\r\n\r\n// Context menu\r\nexport function showContextMenu(payload) {\r\n return {\r\n type: SHOW_CONTEXT_MENU,\r\n payload,\r\n };\r\n}\r\nexport function hideContextMenu() {\r\n return function (dispatch, getState) {\r\n dispatch({\r\n type: HIDE_CONTEXT_MENU,\r\n });\r\n\r\n setTimeout(\r\n () =>\r\n dispatch({\r\n type: CLEAR_CONTEXT_MENU_ACTIONS,\r\n }),\r\n durations.normal\r\n );\r\n };\r\n}\r\n\r\n/** Creates a new dialog\r\n * @param {Object} dialog\r\n * @param {String} dialog.title\r\n * @param {ReactElement|String|Function} dialog.content\r\n * @param {ReactElement} dialog.icon\r\n * @param {String} dialog.primaryActionTitle\r\n * @param {Function} dialog.primaryAction\r\n * @param {String} dialog.secondaryActionTitle\r\n * @param {Function} dialog.secondaryAction\r\n * @param {Boolean} dialog.disableSecondaryOption\r\n */\r\nexport function showDialog(dialog) {\r\n return {\r\n type: SHOW_DIALOG,\r\n payload: dialog,\r\n };\r\n}\r\nexport function hideDialog() {\r\n return function (dispatch, getState) {\r\n dispatch({\r\n type: HIDE_DIALOG,\r\n });\r\n\r\n setTimeout(\r\n () =>\r\n dispatch({\r\n type: CLEAR_DIALOG,\r\n }),\r\n durations.normal\r\n );\r\n };\r\n}\r\n\r\n// Lightbox\r\nexport function showLightBox(payload) {\r\n return {\r\n type: SHOW_LIGHT_BOX,\r\n payload: payload,\r\n };\r\n}\r\n\r\nexport function hideLightBox(payload) {\r\n return {\r\n type: HIDE_LIGHT_BOX,\r\n };\r\n}\r\n\r\n// Modal page\r\nexport function showModalPage(payload) {\r\n return {\r\n type: SHOW_MODAL_PAGE,\r\n payload: payload,\r\n };\r\n}\r\n\r\n/**\r\n * @param {Object} payload\r\n * @param {Boolean} payload.active - Displays a spinner instead of action right\r\n * @param {String} payload.title - The title that is displayed in the TopBar\r\n * @param {ReactComponent} payload.content - The content in the ModalPage (For scrollable contant, wrap it in a ScrollView)\r\n * @param {function} payload.closeCallback - Function which is invoked before closing the modalpage. If the function is specified\r\n * the modalPage will not close itself. You'll have to manually import the hideModalPage action and call it. This feature is\r\n * usefull for prompting users before exiting a form with unsaved changes.\r\n * actionRight: null\r\n * @param {ReactComponent} payload.actionRight - The component that handles the primary modalPage action\r\n * `

Click Me

`\r\n *\r\n */\r\nexport function updateModalPage(payload) {\r\n return {\r\n type: UPDATE_MODAL_PAGE_CONTENT,\r\n payload: payload,\r\n };\r\n}\r\nexport function hideModalPage() {\r\n return function (dispatch, getState) {\r\n dispatch({\r\n type: HIDE_MODAL_PAGE,\r\n });\r\n setTimeout(() => dispatch({ type: CLEAR_MODAL_PAGE }), durations.normal);\r\n };\r\n}\r\n\r\nexport function toggleWorkHourModal(payload = true) {\r\n return {\r\n type: TOGGLE_WORK_HOUR_MODAL,\r\n payload: payload,\r\n };\r\n}\r\n","import React, { Component } from \"react\";\nimport { css } from \"emotion\";\nimport { connect } from \"react-redux\";\nimport TinyAnimate from \"TinyAnimate\";\nimport { notification } from \"antd\";\n\n// Components\nimport { UploadIcon, DeleteIcon, AlertCircleIcon } from \"mdi-react\";\nimport InlineSpinner from \"../ui/InlineSpinner\";\n\n// Utilities\nimport req from \"../../utilities/request-utility\";\n\n// Styles\nimport colors from \"../../style/colors\";\nimport common from \"../../style/common\";\nclass ImageUploadMultiple extends Component {\n constructor(props) {\n super(props);\n this.state = {\n files: [],\n imageSliderRef: React.createRef(),\n };\n }\n\n componentDidMount() {\n this.props.uploadedFiles && this.getUploadedFiles();\n }\n\n // create list of objects\n getUploadedFiles = () => {\n let uploadedFiles = this.props.uploadedFiles.map((x) =>\n Object.assign(\n {},\n {\n status: \"uploaded\",\n image: x.image,\n originalImage: x.originalImage,\n deleteToken: x.deleteToken ? x.deleteToken : undefined,\n }\n )\n );\n\n // Assign uploaded files to files-object\n if (uploadedFiles.length > 0) {\n const files = [...this.state.files];\n const updated = files.concat(uploadedFiles);\n this.setState({ files: updated }, () => {});\n }\n };\n\n onFileSelect = (e) => {\n // TODO: Validate file size and type\n let file = e.target.files[0];\n\n // Check if file is selected\n if (!file) return; // No file is selected\n\n // Check file size\n if (file.size > 200000000) {\n return notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"The file you are trying to upload is too big. Choose a smaller file\",\n });\n } else if (file.size > 39999900) {\n // TO DO! Reimplement with dialog, once that is implemented\n return notification.error({\n duration: 7,\n message: \"FAILED\",\n description:\n \"You're about to upload a rather large file. This might take some time. Consider finding some decent Wi-Fi.\",\n });\n }\n\n // Construct formData with file\n let formData = new FormData();\n formData.append(\"file\", file);\n\n // Start upload and set state\n this.uploadFile(formData, this.state.files.length);\n this.setState({\n files: [...this.state.files, { status: \"uploading\", progress: 0 }],\n });\n\n // Scroll upload div into view\n setTimeout(this.scrollImagePreviewToRight, 100);\n\n // Reset input\n e.target.value = \"\";\n };\n\n uploadFile = (file, index) => {\n req()\n .post(`${this.props.urlPrefix || \"\"}/images`, file, { onUploadProgress: (e) => this.onUploadProgress(e, index) })\n // .post(\"/file\", file, { onUploadProgress: e => this.onUploadProgress(e, index) })\n .then(({ data }) => data)\n .then((data) => this.onFileUploadSuccess(data, index))\n .catch((err) => this.onFileUploadFailure(err, index));\n };\n\n deleteFile = (index) => {\n let files = [...this.state.files];\n files[index].status = \"deleted\";\n this.setState({\n files: files,\n });\n this.props.onFileUpdate(this.state.files.filter((f) => f.status === \"uploaded\"));\n };\n\n onUploadProgress = (progress, index) => {\n let progressPercent = (progress.loaded / progress.total) * 100;\n let files = [...this.state.files];\n files[index].progress = progressPercent;\n this.setState({\n files: files,\n });\n };\n\n onFileUploadSuccess = (res, index) => {\n let files = [...this.state.files];\n files[index] = {\n status: \"uploaded\",\n image: res.image,\n originalImage: res.originalImage,\n deleteToken: \"deleteable\",\n };\n this.setState({\n files: files,\n });\n this.props.onFileUpdate(this.state.files.filter((f) => f.status === \"uploaded\"));\n };\n\n onFileUploadFailure = (err, index) => {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"Could not upload your image. Try again or contact support@toecho.dk\",\n });\n\n if (this.state.files[index]) {\n let files = [...this.state.files];\n files[index].status = \"error\";\n this.setState({\n files: files,\n });\n }\n };\n\n scrollImagePreviewToRight = () => {\n if (this.props.disablePreview) return null;\n\n let { imageSliderRef } = this.state;\n TinyAnimate.animate(\n imageSliderRef.current.scrollLeft,\n imageSliderRef.current.scrollWidth - imageSliderRef.current.getBoundingClientRect().width,\n 300,\n (x) => {\n imageSliderRef.current.scrollLeft = x;\n },\n \"easeInOutQuart\"\n );\n };\n\n render() {\n let { placeholder, primaryColor, style, boxPadding, allowedAmountOfImages = 1, disablePreview } = this.props;\n let { files, imageSliderRef } = this.state;\n\n return (\n
\n {allowedAmountOfImages > files.filter((f) => f.status === \"uploading\" || f.status === \"uploaded\").length && (\n \n )}\n\n {/* Image preview in post-like carousel */}\n {!disablePreview && files.filter((f) => f.status === \"uploading\" || f.status === \"uploaded\").length > 0 && (\n
\n
\n {files.map((image, index) => {\n if (image.status === \"uploading\") {\n return (\n
\n \n
\n
\n
\n
\n
\n );\n }\n if (image.status === \"uploaded\") {\n return (\n
\n \"\"\n this.deleteFile(index)} />\n
\n );\n }\n return null;\n })}\n
\n
\n )}\n
\n );\n }\n}\n\nconst previewHeight = 150;\nconst componentHeight = 40;\n\nconst componentStyle = (primaryColor, boxPadding) => css`\n font-size: 1rem;\n color: ${colors.black};\n\n /* Upload button/Input */\n label {\n display: flex !important;\n align-items: center;\n height: ${componentHeight}px;\n background: ${colors.white};\n border: 1px ${colors.midGrey} solid;\n color: ${colors.black};\n font-family: ${common.fontStack};\n margin-bottom: ${boxPadding};\n border-radius: 3px;\n\n svg {\n position: relative;\n width: ${componentHeight}px;\n height: ${componentHeight}px;\n margin-right: 0.45rem;\n padding: 0.45rem;\n color: ${colors.darkGrey};\n border-right: 1px solid ${colors.midGrey};\n }\n }\n\n input[type=\"file\"] {\n display: none;\n }\n\n .image-preview-container {\n height: ${previewHeight}px;\n overflow: hidden;\n margin: 0 -${boxPadding};\n\n .scroll-hider {\n padding: 0 ${boxPadding};\n height: ${previewHeight + 50}px;\n white-space: nowrap;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n\n .image-preview {\n width: 150px;\n white-space: initial;\n position: relative;\n vertical-align: top;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n height: 150px;\n min-width: 150px;\n max-width: 80vw;\n border: 1px ${colors.midGrey} solid;\n border-radius: 3px;\n margin-right: 0.5rem;\n\n img {\n width: 150%;\n }\n\n &:last-child {\n margin-right: 0;\n }\n\n /* Delete icon */\n svg {\n position: absolute;\n top: 0;\n right: 0;\n width: 2rem;\n height: 2rem;\n padding: 0.25rem;\n border-bottom-left-radius: 4px;\n color: ${colors.darkGrey};\n border: 1px solid ${colors.midGrey};\n background-color: ${colors.white};\n }\n }\n }\n /* Progress bar */\n .progress-bar-container {\n position: absolute;\n bottom: 0px;\n left: 0;\n width: 100%;\n height: 3px;\n display: flex;\n justify-content: space-between;\n\n .progress-bar {\n height: 3px;\n }\n\n .progress-bar.colored {\n background-color: ${primaryColor};\n }\n }\n`;\nconst mapStateToProps = (state) => ({\n primaryColor: state.appConfig.primaryColor,\n});\n\nexport default connect(mapStateToProps, null)(ImageUploadMultiple);\n","import React from 'react';\nimport { List, Tag, Typography } from 'antd';\n\nimport moment from 'moment';\n\nconst TimesheetListItem = props => {\n\tconst { employeeView = false, sheets = [], setSelectedTimesheet, setToggleModal } = props;\n\n\treturn (\n\t\t {\n\t\t\t\tconst { id, blueCollarName, foremanName, canceled, submittedDate, signed, canceledBySemsupport } =\n\t\t\t\t\tsheet;\n\n\t\t\t\tconst date = moment(submittedDate, 'YYYYMMDDHHmmss').format('DD-MM-YYYY HH:mm');\n\t\t\t\tconst actionTags = [];\n\n\t\t\t\tlet status = 'Pending';\n\t\t\t\tif (signed) status = 'Signed';\n\t\t\t\tif (canceled) status = 'Canceled';\n\t\t\t\tif (canceledBySemsupport) status = 'Corrected';\n\n\t\t\t\tif (status !== 'Pending')\n\t\t\t\t\tactionTags.push({status});\n\n\t\t\t\tif (employeeView && status === 'Pending') actionTags.push(Pending);\n\n\t\t\t\tactionTags.push({`ID : ${id}`});\n\n\t\t\t\tconst listTitle = employeeView ? `Requested to ${foremanName}` : `Requested by ${blueCollarName} `;\n\t\t\t\treturn (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetSelectedTimesheet(sheet);\n\t\t\t\t\t\t\tsetToggleModal(true);\n\t\t\t\t\t\t}}>\n\t\t\t\t\t\t{`${date} - ${listTitle} `} \n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n};\n\nexport default TimesheetListItem;\n","import React, { useEffect, useState } from \"react\";\nimport { chunk, isEmpty } from \"lodash\";\nimport { notification } from \"antd\";\n\n// styling\nimport { css } from \"emotion\";\nimport colors from \"../../../style/colors\";\n// utlities\nimport req from \"../../../utilities/request-utility\";\nimport getErrorMessage from \"../../../utilities/get-error-message\";\n\n//actions\n\n// ui-Components\nimport DropDown from \"../../ui/DropDown\";\nimport TextInput from \"../../ui/TextInput\";\nimport TextareaInput from \"../../ui/TextareaInput\";\nimport Button from \"../../ui/Button\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport ScrollView from \"../../ui/ScrollView\";\nimport ImageUploadMultiple from \"../ImageUploadMultiple\";\nimport { hideModalPage } from \"../../../actions/uiActions\";\n\nimport InlineSpinner from \"../../ui/InlineSpinner\";\n\nimport useOverviewData from \"./hooks/useOverviewData\";\n\nfunction PunchModal({\n refreshData,\n initialFormData = {},\n testSheetData = {},\n editMode = false,\n testSheetMode = false,\n afterFormSubmitHook = () => {},\n}) {\n const dispatch = useDispatch();\n const { project = null } = useSelector(({ semcompletion }) => ({ project: semcompletion.selectedProject }));\n const { metaData } = useOverviewData();\n\n const isRIG = project ? (project.projectType === \"02B\" ? true : false) : false;\n\n const [formData, setFormData] = useState({\n punchId: initialFormData.punchId || \"\",\n punchList: initialFormData.punchList || \"\",\n punchOwner: initialFormData.punchOwner || \"\",\n punchOrigin: initialFormData.punchOrigin || \"\",\n punchCategory: initialFormData.punchCategory || \"\",\n platformLocation: initialFormData.platformLocation || \"\",\n platformLocationText: initialFormData.platformLocationText || \"\",\n workType: initialFormData.workType || \"\",\n tagNumber: initialFormData.tagNumber || \"\",\n system: initialFormData.system || \"\",\n title: initialFormData.title || \"\",\n description: initialFormData.description || \"\",\n name: initialFormData.name || \"\",\n images: initialFormData.images || [],\n });\n const [formLoading, setFormloading] = useState(false);\n\n useEffect(() => {\n if (metaData.loading) return;\n if (!isEmpty(initialFormData)) return;\n\n // Set defaults to punchList\n let defaultPunchList = \"\";\n if (!initialFormData.punchList && metaData.data.punchLists.length !== 0)\n defaultPunchList = metaData.data.punchLists[0].id;\n\n // This sets up all the data needed when adding punches from a testsheet\n if (testSheetMode === true) {\n let [preSelectedCategory] = metaData.data.punchCategories.filter((c) => c.name.toLowerCase() === \"b\");\n let [preSelectedOrigin] = metaData.data.punchOrigins.filter((o) => o.name.toLowerCase() === \"construction\");\n\n setFormData({\n ...formData,\n punchCategory: preSelectedCategory ? preSelectedCategory.id : \"\",\n punchList: defaultPunchList,\n punchOrigin: preSelectedOrigin ? preSelectedOrigin.id : \"\",\n taskId: testSheetData ? testSheetData.taskId : \"\",\n tagNumber: testSheetData ? testSheetData.cableNumber : \"\",\n jobPackageId: testSheetData ? testSheetData.jobPackageId : \"\",\n questionAnswerValue: testSheetData ? testSheetData.answerValue : \"\",\n questionId: testSheetData ? testSheetData.questionId : \"\",\n });\n } else {\n setFormData({ ...formData, punchList: defaultPunchList });\n }\n\n // eslint-disable-next-line\n }, [JSON.stringify(metaData), JSON.stringify(initialFormData)]);\n\n function isFormValid(formDate) {\n if (\n (!isRIG && !formDate.punchList) ||\n !formDate.punchOwner ||\n !formDate.punchOrigin ||\n (!isRIG && !formDate.punchCategory) ||\n !formDate.system ||\n !formDate.name ||\n !formDate.title\n ) {\n return {\n status: false,\n message: `Make sure to fill out punch list, punch owner, punch origin, ${\n !isRIG ? \"punch category,\" : \"\"\n } issue type, title, system description and name and then try again`,\n };\n } else if (!formDate.workType && !formDate.description) {\n return {\n status: false,\n message: \"Make sure to fill out at least issue type or description and then try again\",\n };\n }\n\n return { status: true };\n }\n\n function savePunch() {\n const isFormValidData = isFormValid(formData);\n\n if (!isFormValidData.status)\n return notification.error({ duration: 7, message: \"FAILED\", description: isFormValidData.message });\n\n setFormloading(true);\n\n if (editMode) {\n req().put(`semcompletion/v2/punches/${initialFormData.id}`, formData).then(handleOk).catch(handleError);\n } else {\n req().post(`semcompletion/v2/punches/`, formData).then(handleOk).catch(handleError);\n }\n\n function handleOk() {\n dispatch(hideModalPage());\n if (refreshData) refreshData();\n afterFormSubmitHook();\n setFormloading(false);\n\n notification.success({ duration: 7, message: \"SUCCESS\", description: \"You have successfully added a punch\" });\n }\n\n function handleError(err) {\n const error = getErrorMessage(err);\n\n notification.error({ duration: 7, message: \"FAILED\", description: error });\n\n afterFormSubmitHook();\n setFormloading(false);\n }\n }\n\n function onChange(e) {\n setFormData({\n ...formData,\n [e.target.name]: e.target.value,\n });\n }\n\n const form =\n metaData.loading !== 0\n ? chunk(\n [\n initialFormData.punchId\n ? { disabled: true, id: \"punchId\", label: \"Punch no\", required: true, type: \"text\" }\n : null,\n !isRIG ? { id: \"punchList\", label: \"Punch list\", options: metaData.data.punchLists, type: \"dropdown\" } : null,\n { id: \"punchOwner\", label: \"Punch owner\", options: metaData.data.punchOwners, type: \"dropdown\" },\n { id: \"punchOrigin\", label: \"Punch origin\", options: metaData.data.punchOrigins, type: \"dropdown\" },\n // Don't display the punch category for SemCompletion RIG\n !isRIG\n ? { id: \"punchCategory\", label: \"Punch category\", options: metaData.data.punchCategories, type: \"dropdown\" }\n : null,\n !isRIG\n ? {\n id: \"platformLocation\",\n label: \"Punch location\",\n options: metaData.data.platformLocations,\n type: \"dropdown\",\n }\n : {\n id: \"platformLocationText\",\n label: \"Punch location\",\n type: \"text\",\n },\n { id: \"workType\", label: \"Issue type\", options: metaData.data.workTypes, type: \"dropdown\" },\n !isRIG ? { id: \"tagNumber\", label: \"Tag number / Procedure\", type: \"text\" } : null,\n { id: \"system\", label: \"System\", options: metaData.data.systems, type: \"dropdown\" },\n ].filter((d) => d),\n 2\n )\n : [];\n\n const renderDropdownLabels = (column) => {\n let required = \"\";\n if (\n column.id === \"punchList\" ||\n column.id === \"punchOrigin\" ||\n column.id === \"punchOwner\" ||\n column.id === \"punchCategory\" ||\n column.id === \"system\" ||\n column.required\n ) {\n required = *;\n }\n return (\n \n );\n };\n\n return (\n \n {form.map((row, index) => (\n
\n {row.map((column) => {\n const { disabled = false } = column;\n return (\n
\n \n {column.type === \"dropdown\" && (\n ({ label: d.name, value: d.id })) : []}\n placeholder=\"Click to choose\"\n value={formData[column.id]}\n />\n )}\n {column.type === \"text\" && (\n \n )}\n
\n );\n })}\n
\n ))}\n\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n {\n setFormData({ ...formData, images: files });\n }}\n />\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n {\n if (!project) {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `There's no selected Project, please select from the main menu`,\n });\n } else {\n savePunch();\n }\n }}\n >\n {formLoading && }{\" \"}\n {editMode ? \"Edit\" : \"Create\"} punch\n \n
\n
\n
\n );\n}\n\nconst container = () => css`\n background-color: ${colors.white};\n padding: 1rem 0;\n\n label {\n font-weight: 700;\n margin-bottom: 0.35rem;\n display: block;\n }\n\n .row {\n padding: 0 1rem;\n display: flex;\n justify-content: space-between;\n max-width: 1200px;\n margin: 0 auto 1.25rem auto;\n\n .col-50 {\n flex-basis: 49%;\n }\n\n .col-100 {\n flex-basis: 100%;\n }\n\n @media screen and (max-width: 650px) {\n flex-wrap: wrap;\n\n .col-50 {\n flex-basis: 100%;\n\n &:nth-child(odd) {\n margin-bottom: 1.25rem;\n }\n }\n }\n }\n\n .required {\n color: #808080;\n }\n`;\n\nexport default PunchModal;\n","import React from 'react';\nimport { useMediaQuery } from 'react-responsive';\nimport { Select } from 'antd';\n\nconst DropDown = ({\n\tallowClear = false,\n\tchangeGetPopupContainer = true,\n\tdisabled = false,\n\tloading = false,\n\tname = '',\n\tmultiple = false,\n\tonChange = () => {},\n\toptions = [],\n\tplaceholder = 'Select one from the list',\n\tstyle = {},\n\tvalue = undefined,\n\tsize = 'large'\n}) => {\n\tconst isTabletOrMobile = useMediaQuery({ query: '(max-width: 1224px)' });\n\n\treturn (\n\t\t onChange({ target: { name, value: e } })}\n\t\t\toptionFilterProp=\"children\"\n\t\t\tgetPopupContainer={changeGetPopupContainer ? trigger => trigger.parentElement : null}\n\t\t\tplaceholder={loading ? 'Loading' : placeholder}\n\t\t\tshowSearch\n\t\t\tsize={size}\n\t\t\tstyle={{ width: '100%', ...style }}\n\t\t\tvalue={loading || options.length === 0 ? (multiple ? [] : null) : value || null}>\n\t\t\t{options.map((d, i) => (\n\t\t\t\t\n\t\t\t\t\t{d.label}\n\t\t\t\t\n\t\t\t))}\n\t\t\n\t);\n};\n\nexport default DropDown;\n","import React from \"react\";\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\n\nconst Page = props => (\n \n {props.children}\n
\n);\n\nconst componentStyle = props => css`\n background-color: ${props.backgroundColor || colors.lightGrey};\n height: 100vh;\n width: 100vw;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n overflow: hidden;\n position: fixed;\n will-change: auto;\n`;\n\nexport default Page;\n","export default styleType => {\n switch (styleType) {\n case \"none\":\n case \"default\":\n case \"neutral\":\n case \"standard\":\n return \"neutral\";\n\n case \"ok\":\n case \"success\":\n case \"succes\":\n case \"positive\":\n return \"ok\";\n\n case \"error\":\n case \"warning\":\n case \"failed\":\n case \"fail\":\n return \"error\";\n\n default:\n return \"neutral\";\n }\n};\n","import React from \"react\";\nimport { css } from \"emotion\";\nimport tinycolor from \"tinycolor2\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport styleTypeNormalizer from \"../../utilities/style-type-normalizer\";\nimport InlineSpinner from \"./InlineSpinner\";\nimport colors from \"../../style/colors\";\n\n/** Generic button component to be used across our application.\n * @param {*} props\n * @param {string} props.styleType - The type of button. Supported types: `neutral|error|success|secondary`\n * @param {boolean} props.disabled - Makes the button disabled\n * @param {boolean} props.active - Shows a spinner inside the button\n * @param {function} props.onClick - Main event handler\n * @param {string} props['data-test-id'] - Test id\n * @param {reactElement} props.iconLeft - DEPRECATION WARNING! May be removed! See examples. Icon to display left of the title\n * @param {reactElement} props.iconRight - DEPRECATION WARNING! May be removed! See examples. Icon to display right of the title\n * @param {string} props.title - DEPRECATION WARNING! May be removed! See examples. Title of the button\n *\n * Previously we used props to control title and icons but have since opted in for using\n * the children prop, making it way more flexible.\n *\n * @example\n * ```jsx static\n * // Current usage\n * \n *\n *\n * // LEGACY USAGE! DONT DO THIS GOING FORWARD!\n * }\n * title={\"Terminate\"}\n * />\n * ```\n */\nconst Button = (props) => (\n \n {/* Left icon (is hidden if button is active) */}\n {!props.active && props.iconLeft}\n\n {/* Main content OR spinner */}\n {props.active ? (\n \n ) : (\n <>\n {props.title || \"\"}\n {props.children && typeof props.children === \"function\" && props.children()}\n {props.children && typeof props.children === \"object\" && props.children}\n {props.children && typeof props.children === \"string\" && props.children}\n \n )}\n\n {/* Icon right (is hidden if button is active) */}\n {!props.active && props.iconRight}\n \n);\n\nconst style = (props) => css`\n display: block;\n width: ${props.fullWidth !== false ? \"100%\" : props.width ? props.width : \"auto\"};\n border: none;\n border-radius: 3px;\n font-size: 1rem;\n padding: 0.75rem 1.5rem;\n transition: background-color 120ms ease;\n\n &:focus {\n outline: 0;\n }\n\n &.neutral {\n font-weight: 700;\n background-color: ${props.primaryColor};\n color: ${colors.white};\n text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n border-bottom: 3px solid ${tinycolor(props.primaryColor).darken(15).toString()};\n\n &:active {\n border-top: 3px solid transparent;\n background-color: ${tinycolor(props.primaryColor).darken(10).toString()};\n border-bottom: 0px solid ${tinycolor(props.primaryColor).darken(10).toString()};\n }\n\n &:focus {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n }\n\n &.disabled {\n transition: all 120ms ease;\n background-color: ${colors.midGrey};\n border-bottom: 3px solid ${tinycolor(colors.midGrey).darken(15).toString()};\n }\n }\n\n &.ok {\n font-weight: 700;\n background-color: ${colors.green};\n color: ${colors.white};\n text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n border-bottom: 3px solid ${tinycolor(colors.green).darken(15).toString()};\n\n &:active,\n &.active {\n border-top: 3px solid transparent;\n background-color: ${tinycolor(colors.green).darken(10).toString()};\n border-bottom: 0px solid ${tinycolor(colors.green).darken(10).toString()};\n }\n }\n\n &.error {\n font-weight: 700;\n background-color: ${colors.red};\n color: ${colors.white};\n text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n border-bottom: 3px solid ${tinycolor(colors.red).darken(15).toString()};\n\n &:active,\n &.active {\n border-top: 3px solid transparent;\n background-color: ${tinycolor(colors.red).darken(10).toString()};\n border-bottom: 0px solid ${tinycolor(colors.red).darken(10).toString()};\n }\n }\n\n &.secondary {\n color: ${colors.darkGrey};\n background-color: transparent;\n border: 1px ${colors.midGrey} solid;\n text-shadow: 0 0 0 transparent;\n transition: background-color 180ms ease;\n transition-delay: 240ms;\n\n &:active {\n background-color: ${colors.lightGrey};\n border: 1px ${colors.midGrey} solid;\n transition: background-color 80ms ease;\n }\n\n &:focus {\n border: 1px ${props.primaryColor} solid;\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);\n }\n }\n`;\n\nconst mapStateToProps = (state) => ({\n primaryColor: state.appConfig.primaryColor,\n});\n\nexport default connect(mapStateToProps)(Button);\n\nButton.propTypes = {\n /** The id to use for testing. Is written as data-test-id=\"prop\" to the DOM */\n \"data-test-id\": PropTypes.string,\n /** Describes what type of button to use, primary,secondary etc. */\n buttonType: PropTypes.string,\n /** Used for displaying neutral/error/Ok events on the button */\n styleType: PropTypes.string,\n /** Used for handling submitting/creation, for example set this =true when waiting for response on network request */\n active: PropTypes.bool,\n /** Overriding of style in component, if you have very specific needs */\n style: PropTypes.object,\n /** The function which is called when the button is clicked */\n onClick: PropTypes.func,\n /** The svg icon used on the button, this is optional */\n iconLeft: PropTypes.object,\n};\n","import { useDispatch, useSelector } from \"react-redux\";\nimport { useState } from \"react\";\nimport { useQuery } from \"react-query\";\n\nimport req from \"../../../../utilities/request-utility\";\n\nconst LIMIT = 40;\nlet statusCountTimeout;\n\nfunction useOverviewData() {\n const dispatch = useDispatch();\n\n const selectedProject = useSelector((s) => s.semcompletion.selectedProject);\n\n // META DATA\n const {\n isLoading: metaDataIsLoading,\n error: metaDataError,\n data: { data: metaDataData = {} } = {},\n } = useQuery(\n `${selectedProject ? selectedProject.id : \"project\"}-punch-metaData`,\n () => req()(`semcompletion/v2/punches/meta-data?projectId=${selectedProject.id}`),\n {\n staleTime: 60 * 60 * 1000, //1 hour\n }\n );\n const metaData = { data: metaDataData, loading: metaDataIsLoading, error: metaDataError };\n\n // Data states\n const [openPunches, setOpenPunches] = useState({\n data: [],\n loading: false,\n error: false,\n endOfFeed: false,\n });\n const [clearedPunches, setClearedPunches] = useState({\n data: [],\n loading: false,\n error: false,\n endOfFeed: false,\n });\n const [closedPunches, setClosedPunches] = useState({\n data: [],\n loading: false,\n error: false,\n endOfFeed: false,\n });\n const [statusCounts, setStatusCounts] = useState({\n data: {},\n loading: true,\n error: false,\n });\n\n function getStatusCounts({ filterData = {}, setAsLoading = false }) {\n if (setAsLoading) setStatusCounts({ ...statusCounts, loading: true });\n\n clearTimeout(statusCountTimeout);\n statusCountTimeout = setTimeout(() => {\n req()(`semcompletion/v2/punches/status-count?projectId=${selectedProject.id}&punchList=${filterData.punchList || \"\"}`)\n .then(({ data }) => setStatusCounts({ data, loading: false, error: false }))\n .catch(() => dispatch({ template: \"error\", content: \"Could not get task punch count\" }));\n }, 700);\n }\n\n function getRefreshDataLenght(number) {\n if (number < LIMIT) {\n return LIMIT;\n } else {\n return number;\n }\n }\n\n /**\n * @param {Object} options\n * @param {Number} options.tabIndex - The index of the for which to get data\n * @param {Number} options.refreshData - If set to true, the already loaded data will be replaced with new data\n */\n const getData = ({ tabIndex, refreshData = false, filterData, clearDataBeforeFetch = false }) => {\n let baseURL = `semcompletion/v2/punches?projectId=${selectedProject.id}`;\n\n // Add query params to list\n if (filterData.punchList) baseURL += `&punchList=${filterData.punchList}`;\n if (filterData.punchOwner) baseURL += `&punchOwner=${filterData.punchOwner}`;\n if (filterData.punchOrigin) baseURL += `&punchOrigin=${filterData.punchOrigin}`;\n if (filterData.punchCategory) baseURL += `&punchCategory=${filterData.punchCategory}`;\n if (filterData.punchLocation) baseURL += `&punchLocation=${filterData.punchLocation}`;\n if (filterData.system) baseURL += `&system=${filterData.system}`;\n if (filterData.searchterm) baseURL += `&searchterm=${filterData.searchterm}`;\n\n // Open\n if (tabIndex === 0) {\n if (refreshData === false && (openPunches.loading || openPunches.endOfFeed)) return;\n\n setOpenPunches({\n ...openPunches,\n loading: true,\n error: false,\n data: clearDataBeforeFetch ? [] : openPunches.data,\n });\n\n let URL = baseURL;\n URL += \"&status=Open\";\n URL += `&limit=${refreshData ? getRefreshDataLenght(openPunches.data.length) : LIMIT}`;\n URL += `&offset=${refreshData ? 0 : openPunches.data.length}`;\n\n req()(URL)\n .then(({ data }) =>\n setOpenPunches({\n data: [...(refreshData ? [] : openPunches.data), ...data],\n loading: false,\n error: false,\n endOfFeed: data.length < LIMIT ? true : false,\n })\n )\n .catch((err) => {\n dispatch({ template: \"error\", content: \"Failed to get open punches\" });\n setOpenPunches({\n ...openPunches,\n error: true,\n loading: false,\n });\n });\n }\n\n // Cleared\n if (tabIndex === 1) {\n if (refreshData === false && (clearedPunches.loading || clearedPunches.endOfFeed)) return;\n\n setClearedPunches({\n ...clearedPunches,\n loading: true,\n error: false,\n data: clearDataBeforeFetch ? [] : clearedPunches.data,\n });\n\n let URL = baseURL;\n URL += \"&status=Cleared\";\n URL += `&limit=${refreshData ? getRefreshDataLenght(clearedPunches.data.length) : LIMIT}`;\n URL += `&offset=${refreshData ? 0 : clearedPunches.data.length}`;\n\n req()(URL)\n .then(({ data }) =>\n setClearedPunches({\n data: [...(refreshData ? [] : clearedPunches.data), ...data],\n loading: false,\n error: false,\n endOfFeed: data.length < LIMIT ? true : false,\n })\n )\n .catch((err) => {\n dispatch({ template: \"error\", content: \"Failed to get cleared punches\" });\n setClearedPunches({\n ...clearedPunches,\n error: true,\n loading: false,\n });\n });\n }\n\n // Cleared\n if (tabIndex === 2) {\n if (refreshData === false && (closedPunches.loading || closedPunches.endOfFeed)) return;\n\n setClosedPunches({\n ...closedPunches,\n loading: true,\n error: false,\n data: clearDataBeforeFetch ? [] : closedPunches.data,\n });\n\n let URL = baseURL;\n URL += \"&status=Closed\";\n URL += `&limit=${refreshData ? getRefreshDataLenght(closedPunches.data.length) : LIMIT}`;\n URL += `&offset=${refreshData ? 0 : closedPunches.data.length}`;\n\n req()(URL)\n .then(({ data }) =>\n setClosedPunches({\n data: [...(refreshData ? [] : closedPunches.data), ...data],\n loading: false,\n error: false,\n endOfFeed: data.length < LIMIT ? true : false,\n })\n )\n .catch((err) => {\n dispatch({ template: \"error\", content: \"Failed to get closed punches\" });\n setClosedPunches({\n ...closedPunches,\n error: true,\n loading: false,\n });\n });\n }\n };\n\n return { openPunches, clearedPunches, closedPunches, statusCounts, getStatusCounts, metaData, getData };\n}\n\nexport default useOverviewData;\n","const getErrorMessage = (err) => {\n if (err.response) {\n if (err.response.data.message) return err.response.data.message;\n return err.response.data;\n }\n if (err.message) return err.message;\n return \"Something went wrong\";\n};\n\nexport default getErrorMessage;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Modal, Button, Popconfirm } from 'antd';\nimport moment from 'moment';\nimport { useMediaQuery } from 'react-responsive';\n\nimport PDFRenderComponent from '../../../ui/PDFRenderComponent';\n\nconst TimesheetRenderModal = props => {\n\tconst language = useSelector(s => s.language.language);\n\n\tconst {\n\t\temployeeView = false,\n\t\tisTimesheetSubmitting,\n\t\tonCancelTimesheetRequest,\n\t\tonApproveTimesheet,\n\t\tselectedTimesheet = {},\n\t\tsetDraftSignedTimesheet,\n\t\tsetToggleModal,\n\t\tsetToggleSignaturePadModal,\n\t\ttoggleModal,\n\t\tdraftSignedTimesheet = null\n\t} = props;\n\n\tconst {\n\t\tblueCollarName,\n\t\tcanceled,\n\t\tcanceledBy,\n\t\tcanceledDate,\n\t\tcanceledBySemsupport,\n\t\tforemanName,\n\t\tid,\n\t\toriginalFile,\n\t\tsigned,\n\t\tsignedBy,\n\t\tsignedDate,\n\t\tsignedFile,\n\t\tsubmittedDate\n\t} = selectedTimesheet;\n\n\tconst isMobile = useMediaQuery({ maxWidth: '1024px' });\n\tconst date = moment(submittedDate, 'YYYYMMDDHHmmss').format('DD-MM-YYYY HH:mm');\n\tconst status = signed ? 'Signed' : canceled ? 'Canceled' : 'Pending';\n\tconst updatedBy = signed ? signedBy : canceledBy;\n\tconst modalTitle = employeeView ? `Requested to ${foremanName}` : `Requested by ${blueCollarName} `;\n\n\tlet PDFFile = originalFile;\n\tif (signed || (canceledBySemsupport && canceled)) PDFFile = signedFile;\n\tif (draftSignedTimesheet !== null) PDFFile = draftSignedTimesheet;\n\n\tconst footerButtons = [];\n\n\tif (!employeeView && status === 'Pending')\n\t\tfooterButtons.push(\n\t\t\t
\n\t\t\t\t onCancelTimesheetRequest(id)}\n\t\t\t\t\tokText=\"Yes\"\n\t\t\t\t\tcancelText=\"No\">\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t setToggleSignaturePadModal(true)}\n\t\t\t\t\tkey=\"draft\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\tstyle={{ margin: '5px' }}>\n\t\t\t\t\t{`${draftSignedTimesheet ? 'Edit' : 'Add'} Signature`}\n\t\t\t\t\n\t\t\t\t{draftSignedTimesheet && (\n\t\t\t\t\t onApproveTimesheet(id)}\n\t\t\t\t\t\tkey=\"save\"\n\t\t\t\t\t\tstyle={{ margin: '5px' }}\n\t\t\t\t\t\ttype=\"primary\">\n\t\t\t\t\t\tApprove Timesheet\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t);\n\n\tif (status !== 'Pending') {\n\t\tconst updateTimeStamp = status === 'Signed' ? signedDate : canceledDate;\n\n\t\tfooterButtons.unshift(\n\t\t\t

{`${status} on ${moment(updateTimeStamp, 'YYYYMMDDHHmmss').format(\n\t\t\t\t'DD-MM-YYYY HH:mm'\n\t\t\t)} by ${updatedBy} ${canceledBySemsupport ? ' (Record Corrected)' : ''}`}

\n\t\t);\n\t}\n\n\tconst handleClose = () => {\n\t\tif (!draftSignedTimesheet) return setToggleModal(false);\n\n\t\tif (draftSignedTimesheet) {\n\t\t\tModal.confirm({\n\t\t\t\ttitle: 'Signature will be lost, are you sure to cancel?',\n\t\t\t\tonOk: () => {\n\t\t\t\t\tsetDraftSignedTimesheet(null);\n\t\t\t\t\tsetToggleModal(false);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n};\n\nexport default TimesheetRenderModal;\n","export default {\r\n topBarHeight: 50,\r\n boxShadowSubtle: \"0 2px 6px rgba(0, 0, 0, 0.1)\",\r\n fontStack: \"'Open Sans', sans-serif\"\r\n};\r\n","import { format, parse } from \"date-fns\";\n\n/* PARSE DATES */\n\nexport function parseDatetime(datetimeString) {\n /**\n * Expects a string-formatted timestamp and returns a human-friendly date\n * --------------\n * @parameter dateTimeString [string] a datetime string in the format of YYYYMMDDHHmm (201812302230)\n * @returns [string] formatted string 201812302230 -> 30/12-2018 22:30\n */\n\n return format(parse(datetimeString, \"yyyyMMddHHmm\", 0), \"dd/MM-yyyy HH:mm\");\n}\n\nexport function parseDate(dateString) {\n /**\n * Expects a string-formatted timestamp and returns a human-friendly date\n * --------------\n * @parameter dateTimeString [string] a datetime string in the format of YYYYMMDD (20181230)\n * @returns [string] formatted string 20181230 -> 30/12-2018\n */\n\n return format(parse(dateString, \"yyyyMMdd\", 0), \"dd/MM-yyyy\");\n}\n\nexport function parseTime(timeString) {\n /**\n * Expects a string-formatted timestamp and returns a human-friendly date\n * --------------\n * @parameter dateTimeString [string] a datetime string in the format of YYYYMMDDHHmm (0120)\n * @returns [string] formatted string 0120 -> 1:20\n */\n\n return format(parse(timeString, \"HHmm\", 0), \"HH:mm\");\n}\n\n/* GET DATES */\n\nexport function getDatetimeString() {\n /**\n * Returns now as a datetimeString (yyyyMMddHHmm)\n * --------------\n * No params\n * @returns [string] yyyyMMddHHmm example: 201801282359\n */\n\n return format(new Date(), \"yyyyMMddHHmm\");\n}\n\nexport function getTimeString() {\n /**\n * Returns now as a timeString (yyyyMMddHHmm)\n * --------------\n * No params\n * @returns [string] yyyyMMddHHmm example: 201801282359\n */\n\n return format(new Date(), \"HHmm\");\n}\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { css } from \"emotion\";\nimport { SearchIcon, CloseIcon } from \"mdi-react\";\nimport colors from \"../../style/colors\";\nimport PropTypes from \"prop-types\";\nimport InlineSpinner from \"./InlineSpinner\";\n\n/** Component used for search functionality\n * ```\n * IN IMPLEMENTING FILE:\n * filterContacts = event => {\n let filteredContacts = [...this.state.contacts];\n filteredContacts = filteredContacts.filter(\n item =>\n item.name.toLowerCase().search(event.target.value.toLowerCase()) !== -1 ||\n item.userGroup.title.toLowerCase().search(event.target.value.toLowerCase()) !== -1 ||\n item.masterGroup.title.toLowerCase().search(event.target.value.toLowerCase()) !== -1\n );\n this.setState({ filteredContacts, filterTerm: event.target.value });\n };\n * \n * \n * \n * ```\n * \n */\nconst SearchInput = props => (\n
\n {props.searching && }\n \n {props.value === \"\" && }\n {props.value !== \"\" && }\n
\n);\n\nconst height = 40;\n\nconst style = primaryColor => css`\n display: flex;\n align-items: center;\n position: relative;\n background-color: ${colors.midLightGrey};\n border-radius: 3px;\n font-size: 1rem;\n color: ${colors.black};\n height: ${height}px;\n\n input {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n font-size: 1rem;\n background-color: transparent;\n border: 1px transparent solid;\n border-radius: 3px;\n padding: 0 2rem 0 0.75rem;\n\n &:focus {\n outline: 0;\n border: 1px ${primaryColor} solid;\n }\n }\n\n .right {\n position: absolute;\n right: 0.5rem;\n }\n\n svg {\n fill: ${colors.darkGrey};\n }\n`;\nSearchInput.propTypes = {\n /** Function which is executed to clear input */\n onClearSearch: PropTypes.func,\n /** Text value in input part of component, this is being used when searching */\n value: PropTypes.string,\n /** Boolean value used to decide if a search has been initiated. usecase could be that you dont want a user to type something while a search is ongoing */\n searching: PropTypes.bool,\n /** Function to be executed when something new has been typed */\n onChange: PropTypes.func,\n /** Placeholder text displayed when nothing has been typed */\n placeholder: PropTypes.string,\n /** Used to set className for styling */\n className: PropTypes.string\n};\nconst mapStateToProps = state => ({\n primaryColor: state.appConfig.primaryColor\n});\n\nexport default connect(mapStateToProps)(SearchInput);\n","import React from \"react\";\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport Button from \"./Button\";\nimport { SmileySadIcon } from \"mdi-react\";\nimport PropTypes from \"prop-types\";\n\n/** Element to notify users of the current status of content, eg. No more readable posts, an error occured while fetching data. then use this component\n * Use icon to indicate how good/bad the current statusbox is\n * ```\n * \n * }\n action={{\n callback: this.getChecklist,\n title: \"Try again\"\n }}\n />\n * ```\n * ```\n * If you need to add an action to the statusbox, this is the required structure\n * {\n callback: this.getChecklist,\n title: \"Try again\"\n }\n * ```\n */\nconst StatusBox = props => (\n
\n {props.icon || }\n {props.title !== false &&

{props.title || \"Oops.\"}

}\n

{props.content || \"An error occurred\"}

\n {props.action && (\n \n )}\n
\n);\n\nconst componentStyle = props => css`\n svg {\n width: 2rem;\n height: 2rem;\n }\n\n margin-left: auto;\n margin-right: auto;\n padding: 0 3rem;\n text-align: center;\n color: ${colors.darkGrey};\n white-space: initial;\n`;\n\nStatusBox.propTypes = {\n /** Override styles locally */\n style: PropTypes.object,\n /** Svg icon from mdi-react which indicates severity of statusbox */\n icon: PropTypes.object,\n /** Main title of statusbox */\n title: PropTypes.string,\n /** More descriptive textblock to further explain the main title and status */\n content: PropTypes.string,\n /** Object holding logic regarding \"try again functionality\" */\n action: PropTypes.object\n};\nexport default StatusBox;\n","import store from \"../store\";\nimport history from \"./navigation-history\";\nimport getAppName from \"./get-app-name\";\nimport req from \"./request-utility\";\n\nimport { setTransitionModeToBackward, setTransitionModeToForward } from \"../actions/pagesActions\";\n\nexport default function(path, direction = \"backward\") {\n /**\n * Utiltity function to animate transitions between routes\n * -------------------------------------\n * Take two arguments:\n * @argument {string} path Required\n * @argument {string} directon optional (defaults to \"forward\")\n *\n * It dispatches an action setting the global transition state,\n * and hereafter animates the route transition according to the\n * dispatched state\n *\n * Special options for path:\n *\n * `BACK`\n * The previous route (\"pops\" a level off from the routes)\n * Example: pageNavigator(\"BACK\", \"backward\")\n * domain.com/users/12343/likes -> domain.com/users/12343\n *\n * `FRONTPAGE`\n * Goes to the frontpage\n */\n\n // Set the direction\n if (direction === \"forward\") {\n store.dispatch(setTransitionModeToForward());\n } else if (direction === \"backward\") {\n store.dispatch(setTransitionModeToBackward());\n }\n\n // Replaces double slashes with single (url.com/lorem//ipsum -> url.com/lorem/ipsum)\n path = path.replace(/\\/\\//gm, \"/\");\n\n // Special path arguments\n if (path === \"BACK\") {\n // Goes up one level in the paths\n path = history.location.pathname\n .split(\"/\")\n .slice(0, -1)\n .join(\"/\");\n }\n //implemented 29/04/2019 by niclas\n //comment: when navigating within a testsheet, we dont have a view for a single task within a jobpackage, so we would get a white screen if we use just BACK.\n //I figured that this functionality might be needed in other places where we don't have the intermediate view, and need to navigate further back than 1 level\n if (path === \"DOUBLEBACK\") {\n // Goes up two level in the paths\n path = history.location.pathname\n .split(\"/\")\n .slice(0, -2)\n .join(\"/\");\n }\n\n if (path === \"TRIPLEBACK\") {\n // Goes up two level in the paths\n path = history.location.pathname\n .split(\"/\")\n .slice(0, -3)\n .join(\"/\");\n }\n\n // Special path arguments\n if (path === \"FRONTPAGE\") {\n // Goes to frontpage\n path = `/${getAppName()}/`;\n }\n\n // Set the direction\n requestAnimationFrame(() => {\n history.replace(path);\n\n // Log app visit. Logic for duplicated visit-logs is handled in node api\n // It's fine to fire this request as many times a needed. The api will make sure\n // the log wont be registered multiple times. See business rules in Node-api for further details\n // req().post(\"statistics/app/visits\");\n });\n}\n","import React from \"react\";\r\nimport { css } from \"emotion\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport tinycolor from \"tinycolor2\";\r\n\r\n// Styles\r\nimport colors from \"../../style/colors\";\r\nimport common from \"../../style/common\";\r\n\r\n/** Bar element which always is placed at the top of an page. it holds 2 actions, and the page title\r\n *\r\n * ```\r\n * pageNavigator(\"/FrontPage\", \"backward\")} />} />\r\n *\r\n * ```\r\n */\r\nconst TopBar = props => (\r\n
\r\n
\r\n {props.actionLeft || \"\"}\r\n
\r\n {props.title && (\r\n
\r\n

{props.title}

\r\n
\r\n )}\r\n {/* Is positioned after topbar in markup to not have to specify a z-index for children */}\r\n
\r\n {props.actionLeft || \"\"}\r\n
\r\n
{props.actionRight || \"\"}
\r\n
\r\n);\r\n\r\nconst style = (atFrontPage, primaryColor) => css`\r\n width: 100vw;\r\n display: block;\r\n height: ${common.topBarHeight}px;\r\n background-color: ${atFrontPage ? colors.white : primaryColor};\r\n color: ${atFrontPage ? colors.black : colors.white};\r\n box-shadow: ${atFrontPage ? \"none\" : common.boxShadowSubtle};\r\n z-index: 1;\r\n flex-shrink: 0;\r\n\r\n svg {\r\n fill: ${atFrontPage ? colors.black : colors.white};\r\n /* background-color: ${atFrontPage ? colors.white : primaryColor}; */\r\n padding: ${common.topBarHeight * 0.256}px;\r\n height: ${common.topBarHeight}px;\r\n width: ${common.topBarHeight}px;\r\n\r\n &:active {\r\n fill: ${tinycolor(atFrontPage ? colors.black : colors.white)\r\n .setAlpha(0.8)\r\n .toString()};\r\n }\r\n }\r\n\r\n .action-left,\r\n .action-right {\r\n position: absolute;\r\n top: 0;\r\n }\r\n\r\n .action-right {\r\n right: 0;\r\n height: ${common.topBarHeight}px;\r\n overflow: hidden;\r\n }\r\n .action-left {\r\n left: 0;\r\n height: ${common.topBarHeight}px;\r\n overflow: hidden;\r\n }\r\n\r\n .title {\r\n font-weight: 700;\r\n text-align: center;\r\n line-height: ${common.topBarHeight}px;\r\n padding: 0 50px;\r\n\r\n p {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n width: 100%;\r\n }\r\n\r\n img {\r\n max-height: 35px;\r\n margin-top: 0.5rem;\r\n }\r\n }\r\n`;\r\n\r\nconst mapStateToProps = state => ({\r\n primaryColor: state.appConfig.primaryColor\r\n});\r\n\r\nTopBar.propTypes = {\r\n /** Bool value that helps with styling element differently if its at the frontpage */\r\n atFrontPage: PropTypes.bool,\r\n /** Override styles with this */\r\n style: PropTypes.object,\r\n /** Click event to be executed when left Element is clicked */\r\n actionLeft: PropTypes.object,\r\n /** Click event to be executed when right Element is clicked */\r\n actionRight: PropTypes.object\r\n};\r\n\r\nexport default connect(mapStateToProps)(TopBar);\r\n","import React from \"react\";\nimport { css } from \"emotion\";\nimport PropTypes from \"prop-types\";\n\n/** Wrapper for non-button actions\n *\n * For accecibility reasons (and testability) it is strongly recommended to have\n * everything that is clickable inside a button. This is an attempt at creating a\n * \"invisible\" button wrapper to wrap elements in. Use it as is and apply styling\n * if nescecary\n *\n * @example\n * ```jsx\n * \n * \n * \n *\n * \n * \n * \n * ```\n */\nconst ActionWrapper = (props) => {\n return (\n \n {props.children}\n \n );\n};\n\nconst componentStyles = (props) => css`\n display: block;\n background-color: transparent;\n border: 0px transparent solid;\n outline: 0;\n border-radius: 4px;\n font-size: inherit;\n color: inherit;\n font-weight: inherit;\n cursor: pointer;\n\n /* Only applies to non-touch devices */\n @media (hover: hover) and (pointer: fine) {\n &:focus {\n background-color: ${props.disableFocusStyle ? \"inherit\" : \"rgba(0, 0, 0, 0.1)\"};\n }\n }\n`;\n\nexport default ActionWrapper;\n\nActionWrapper.propTypes = {\n /** The id to use for testing. Is written as data-test-id=\"prop\" to the DOM */\n \"data-test-id\": PropTypes.string,\n /** Callback function */\n onClick: PropTypes.func,\n /** Disables active and focus styling. The default active-style is always disabled for non touch-screen devices. Will apply a almost transparent dark background */\n disableFocusStyle: PropTypes.bool,\n /** Override styles */\n style: PropTypes.object,\n /** Apply class'es from parent component */\n className: PropTypes.string,\n};\n","import React from 'react';\nimport { css } from 'emotion';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { Input } from 'antd';\nimport colors from '../../style/colors';\n\n/** This component is quite similar to Textareainput, but its different in that way, that its only a one line input */\nconst TextInput = props => {\n\tconst { defaultValue, disabled = false, regExFormat = null, showCount = false, suffix, value } = props;\n\n\tlet otherProps = { value: value || '' };\n\tif (typeof value === 'undefined') otherProps = { defaultValue: defaultValue || '' };\n\n\tlet Component = Input;\n\tif (props.type === 'password') Component = Input.Password;\n\tif (props.type === 'textarea') Component = Input.TextArea;\n\n\treturn (\n\t\t {\n\t\t\t\tif (\n\t\t\t\t\t(regExFormat && e.target.value !== '' && e.target.value !== '+') ||\n\t\t\t\t\t(regExFormat && e.target.value !== '' && e.target.name === 'pin')\n\t\t\t\t) {\n\t\t\t\t\tconst result = new RegExp(regExFormat, 'gi').test(e.target.value);\n\t\t\t\t\tif (!result) return;\n\t\t\t\t}\n\n\t\t\t\tprops.onChange(e);\n\t\t\t}}\n\t\t\tref={props.innerRef}\n\t\t\tshowCount={showCount}\n\t\t\tsize=\"large\"\n\t\t\tstyle={props.style}\n\t\t\tsuffix={suffix || null}\n\t\t\ttype={props.type || 'text'}\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n\n\treturn ;\n};\n\nconst style = props => css`\n\tbackground-color: ${props.backgroundColor || colors.white};\n\tborder: 1px solid ${props.backgroundColor || colors.midGrey};\n\tpadding: 0.5rem;\n\tdisplay: block;\n\twidth: 100%;\n\tborder-radius: 3px;\n\tfont-size: 1rem;\n\tcolor: ${colors.black};\n\tresize: vertical;\n\tfont-family: 'Open Sans', sans-serif;\n\t-webkit-appearance: none;\n\n\t&:focus {\n\t\toutline: 0;\n\t\tborder: 1px solid ${props.primaryColor};\n\t}\n`;\n\nconst mapStateToProps = state => ({\n\tprimaryColor: state.appConfig.primaryColor\n});\n\nTextInput.propTypes = {\n\t/** Sets an HTML attribute */\n\tname: PropTypes.string,\n\t/** Visible text when you haven't anything typed in */\n\tplaceholder: PropTypes.string,\n\t/** Function that executes everytime you type something in this component */\n\tonChange: PropTypes.func,\n\t/** sets a className for easy styling */\n\tclassName: PropTypes.string,\n\t/** Used for overriding styles */\n\tstyle: PropTypes.object\n};\n\nexport default connect(mapStateToProps)(TextInput);\n","module.exports = __webpack_public_path__ + \"static/media/installation-video-ios-EN.0065c8be.mp4\";","module.exports = __webpack_public_path__ + \"static/media/installation-video-ios-DA.dde53c79.mp4\";","module.exports = __webpack_public_path__ + \"static/media/installation-video-android-EN.a25d0d4f.mp4\";","module.exports = __webpack_public_path__ + \"static/media/installation-video-android-DA.a25d0d4f.mp4\";","import React, { Component } from \"react\";\nimport { css } from \"emotion\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\nimport smoothScrollToTop from \"../../utilities/smooth-scroll-to-top\";\n\nclass ScrollView extends Component {\n constructor(props) {\n super(props);\n this.targetRef = React.createRef();\n this.onScroll = this.onScroll.bind(this);\n }\n\n componentDidMount() {\n disableBodyScroll(this.targetRef.current);\n }\n\n componentWillUnmount() {\n enableBodyScroll(this.targetRef.current);\n }\n\n onScroll(e) {\n if (\n typeof this.props.onScrollEnd === \"function\" &&\n e.target.scrollTop + e.target.getBoundingClientRect().height + (200 || this.props.scrollThreshold) >\n e.target.scrollHeight\n ) {\n this.props.onScrollEnd();\n }\n\n if (typeof this.props.onScroll === \"function\") {\n // For legacy implementations where the scrollView's scroll is handled in parent component\n this.props.onScroll(e);\n }\n }\n\n scrollToTop() {\n smoothScrollToTop(this.targetRef.current, 100);\n this.props.setScrollTop(false);\n }\n\n render() {\n if (this.props.scrollTop) {\n this.scrollToTop();\n }\n\n return (\n \n {this.props.children}\n
\n );\n }\n}\n\nconst componentStyle = (props) => css`\n flex: 100% 1 1;\n overflow-x: ${props.allowHorizontalScroll === true ? \"auto\" : \"hidden\"};\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n\n &.use-max-width {\n max-width: ${props.maxWidth}px;\n margin: 0 auto;\n }\n`;\n\nexport default ScrollView;\n","import TinyAnimate from \"TinyAnimate\";\nexport default function(element, duration = 300) {\n /** Smoothly scrools to top of given element in specified time\n * @param element [HTMLElement] required\n * @param duration [integer] optional - default to 300\n *\n */\n\n // Fail silently if element is missing...\n if (!element) return;\n\n let scrollHeight = element.scrollHeight;\n let currentScroll = element.scrollTop;\n let endScroll = scrollHeight - element.getBoundingClientRect().height;\n\n TinyAnimate.animate(\n currentScroll,\n endScroll,\n duration,\n x => {\n element.scrollTo(x, 0);\n },\n \"easeInOutQuart\"\n );\n}","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { ArrowBackIcon, DownloadIcon, InfoOutlineIcon, MagnifyIcon, PencilBoxOutlineIcon } from 'mdi-react';\nimport { Button, notification } from 'antd';\nimport { format, startOfMonth, endOfMonth } from 'date-fns';\nimport { css } from 'emotion';\nimport { useQuery } from 'react-query';\nimport param from 'jquery-param';\nimport { Controller, useForm } from 'react-hook-form';\nimport * as yup from 'yup';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport FileSaver from 'file-saver';\nimport isIOS from 'is-ios';\n\nimport usePageAndBackButtonURL from '../../../hooks/usePageAndBackButtonURL';\nimport pageNavigator from '../../../utilities/page-navigator';\nimport req from '../../../utilities/request-utility';\n\nimport colors from '../../../style/colors';\nimport InlineSpinner from '../../ui/InlineSpinner';\nimport StatusBox from '../../ui/StatusBox';\nimport DropDown from '../../ui/DropDown';\nimport ActionWrapper from '../../ui/ActionWrapper';\nimport ComponentPage from '../../ui/Page';\nimport TopBar from '../../ui/TopBar';\nimport PDFRenderComponent from '../../ui/PDFRenderComponent';\n\nfunction TimeSheetForeman(props) {\n\tconst { user = {} } = props;\n\tconst { id: userAppId = '', loggedUserTypeDK = 'user' } = user;\n\tconst { page, backButtonURL } = usePageAndBackButtonURL(props);\n\tconst language = useSelector(s => s.language.language);\n\n\tconst [tableData, setTableData] = useState({\n\t\tpdfFile: '',\n\t\terror: false,\n\t\tloading: false,\n\t\tempty: false\n\t});\n\tconst [timesheetID, setTimesheetID] = useState(null);\n\tconst [rawPdfBuffer, setRawPdfBuffer] = useState(null);\n\tconst [isTimesheetSubmitting, setIsTimesheetSubmitting] = useState(false);\n\n\tconst {\n\t\tdata: { data: foremanTeamMembers = {} } = {},\n\t\tisFetching: foremanTeamMembersIsFetching,\n\t\tisLoading: foremanTeamMembersIsLoading,\n\t\trefetch: foremanTeamMembersRefetch\n\t} = useQuery(\n\t\t['GetForemanTeamMembers'],\n\t\t() => {\n\t\t\tif (loggedUserTypeDK === 'admin') return req()(`semcotime/foremen-teams/my-team/all`);\n\n\t\t\treturn req()(`semcotime/foremen-teams/my-team`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconst schema = yup.object().shape({\n\t\tblueCollarId: yup.string().required('User is required'),\n\t\tforemanId: yup.string(),\n\t\tfromDate: yup.string().required('From date is required'),\n\t\ttoDate: yup.string().required('To date is required')\n\t});\n\n\tconst defaultValues = {\n\t\tblueCollarId: loggedUserTypeDK === 'user' ? userAppId : '',\n\t\tforemanId: '',\n\t\tfromDate: format(startOfMonth(new Date()), 'yyyy-MM-dd'),\n\t\ttoDate: format(endOfMonth(new Date()), 'yyyy-MM-dd')\n\t};\n\n\tconst {\n\t\tcontrol,\n\t\tformState: { errors },\n\t\tgetValues,\n\t\treset,\n\t\tsetValue,\n\t\thandleSubmit,\n\t\twatch\n\t} = useForm({\n\t\tdefaultValues,\n\t\tresolver: yupResolver(schema)\n\t});\n\n\tconst onSubmit = async formData => {\n\t\ttry {\n\t\t\tconst { blueCollarId = '', foremanId = '', fromDate = '', toDate = '' } = formData;\n\n\t\t\tsetTableData({ pdfFile: '', loading: true, error: false, empty: false });\n\n\t\t\tconst response = await req()(\n\t\t\t\t`semcotime/customer-approval/foreman?${param({ blueCollarId, foremanId, fromDate, toDate })}`,\n\t\t\t\t{\n\t\t\t\t\tresponseType: 'json'\n\t\t\t\t}\n\t\t\t);\n\t\t\tconst { data: { metadata, pdfBuffer } = {} } = response;\n\t\t\tconst { timeSheetId = '', referenceID = '' } = metadata;\n\n\t\t\tif (timeSheetId === null && referenceID) {\n\t\t\t\tnotification.info({\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tmessage: 'INFO',\n\t\t\t\t\tdescription: `Specific date(s) is already included in a pending/signed timesheet (ID: ${referenceID})`\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsetRawPdfBuffer(pdfBuffer);\n\t\t\tconst pdfBufferData = Buffer.from(pdfBuffer);\n\t\t\tconst receivedBlob = new Blob([pdfBufferData], { type: 'application/pdf' });\n\t\t\tsetTimesheetID(timeSheetId);\n\t\t\tsetTableData({\n\t\t\t\tloading: false,\n\t\t\t\tpdfFile: window.URL.createObjectURL(receivedBlob),\n\t\t\t\terror: false,\n\t\t\t\tempty: false\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconst { status } = err.response;\n\t\t\tif (status === 404) return setTableData({ loading: false, pdfFile: '', error: false, empty: true });\n\n\t\t\tsetTableData({ loading: false, pdfFile: '', error: true, empty: false });\n\t\t}\n\t};\n\n\tconst downloadIOS = (blobUrl, fileName) => {\n\t\tconst a = document.createElement('a');\n\t\ta.href = blobUrl;\n\t\ta.download = fileName || 'download';\n\t\t// Append the anchor element to the body\n\t\tdocument.body.appendChild(a);\n\t\t// Trigger a click on the anchor element\n\t\ta.click();\n\t\t// Remove the anchor element\n\t\tdocument.body.removeChild(a);\n\t};\n\n\tconst onDownload = async () => {\n\t\tconst { blueCollarId = '', foremanId = '', fromDate = '', toDate = '' } = watch();\n\t\tconst { name } = foremanTeamMembers.filter(d => d.id === blueCollarId)[0];\n\n\t\tif (timesheetID) await req().put(`semcotime/timesheet/markAsDownloaded/${timesheetID}`);\n\n\t\tif (isIOS) return downloadIOS(tableData.pdfFile, `${name}-${fromDate}-${toDate}`);\n\n\t\tFileSaver.saveAs(tableData.pdfFile, `${name}-${fromDate}-${toDate}`);\n\t};\n\n\tconst onSubmitForApproval = async () => {\n\t\tconst pdfBufferData = Buffer.from(rawPdfBuffer);\n\t\tconst blobData = new Blob([pdfBufferData], { type: 'application/pdf' });\n\t\tconst formData = new FormData();\n\t\tconst blueCollarId = getValues('blueCollarId');\n\n\t\tformData.append('file', blobData);\n\t\tformData.append('blueCollarId', blueCollarId);\n\n\t\ttry {\n\t\t\tsetIsTimesheetSubmitting(true);\n\t\t\tawait req().put(`semcotime/timesheet/submitToForeman/${timesheetID}`, formData, {\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'multipart/form-data' // Set the content type to multipart/form-data\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetIsTimesheetSubmitting(false);\n\n\t\t\tnotification.success({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'SUCCESS',\n\t\t\t\tdescription: language.timesheetRequestedSignature\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tsetIsTimesheetSubmitting(false);\n\n\t\t\tnotification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: error.response.data.message\n\t\t\t});\n\t\t}\n\t};\n\n\treturn (\n\t\t\n\t\t\t pageNavigator(backButtonURL, 'backward')}>\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t/>\n\t\t\t
\n\t\t\t\t{loggedUserTypeDK != 'user' && (\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t onChange(e)}\n\t\t\t\t\t\t\t\t\t\t\tloading={foremanTeamMembersIsLoading}\n\t\t\t\t\t\t\t\t\t\t\toptions={\n\t\t\t\t\t\t\t\t\t\t\t\t!foremanTeamMembersIsLoading\n\t\t\t\t\t\t\t\t\t\t\t\t\t? foremanTeamMembers\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(d => d.externalId)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(d => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: `${d.name} | Ticket No. ${\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td.ticketNumber ? d.ticketNumber : 'N/A'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: d.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

From:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t

To:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t onSubmit(e),\n\t\t\t\t\t\t\t\te => {\n\t\t\t\t\t\t\t\t\tnotification.error({\n\t\t\t\t\t\t\t\t\t\tduration: 1,\n\t\t\t\t\t\t\t\t\t\tmessage: 'FAILED',\n\t\t\t\t\t\t\t\t\t\tdescription: Object.keys(e).map(d => e[d].message)[0]\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{timesheetID && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t{tableData.loading && }\n\n\t\t\t{!tableData.loading && tableData.empty && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t{!tableData.loading && tableData.error && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t{!tableData.loading && !tableData.error && tableData.pdfFile && (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)}\n\t\t\n\t);\n}\n\nconst componentStyles = isUser => css`\n\t.inline-scroll-wrapper {\n\t\toverflow-x: auto;\n\t\toverflow-y: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\n\t\t.react-pdf__Page__canvas {\n\t\t\tmargin: 0 auto !important;\n\t\t}\n\t}\n\n\t.date-selector-bar {\n\t\theight: 55px;\n\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\tbackground-color: ${colors.white};\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: ${isUser ? 'end' : 'space-between'};\n\t\tfont-size: 1rem;\n\t\tpadding-right: 15px;\n\t\tpadding-left: 15px;\n\n\t\t.dropdown-fields {\n\t\t\twidth: 35%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-evenly;\n\n\t\t\t& > div {\n\t\t\t\tflex-grow: 1;\n\t\t\t}\n\t\t}\n\n\t\t.right {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t.date-inputs {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\tinput {\n\t\t\tmargin: 0 0.5rem;\n\t\t\tcolor: ${colors.darkGrey};\n\t\t\tborder: 1px ${colors.darkGrey} dashed;\n\t\t\tborder-width: 0 0 1px 0;\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 769px) {\n\t\t.date-selector-bar {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\theight: initial;\n\t\t\tgap: 15px;\n\t\t\t// justify-content: ${isUser ? 'start' : 'space-between'};\n\n\t\t\t.dropdown-fields {\n\t\t\t\tmargin-top: 10px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.right {\n\t\t\t\tdisplay: block;\n\n\t\t\t\t.date-inputs {\n\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t}\n\n\t\t\t\t.buttons {\n\t\t\t\t\tmargin-top: 10px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tmargin-bottom: 10px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttable {\n\t\tposition: relative;\n\t\tborder-collapse: collapse;\n\t\tmin-width: 100%;\n\t\tmin-width: calc(100% + 1px);\n\t\tmin-height: calc(100% + 1px);\n\n\t\t.fake-total-column {\n\t\t\twidth: 40px;\n\t\t\ttext-align: center;\n\t\t\tmargin-left: 1rem;\n\t\t\tpadding-left: 0.3rem;\n\t\t\theight: 100%;\n\t\t\tflex-shrink: 0;\n\t\t}\n\n\t\tth.no-data {\n\t\t\tcolor: ${colors.midGrey};\n\t\t}\n\n\t\t.body-label {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t.show-more-button {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\twhite-space: nowrap;\n\n\t\t\tsvg {\n\t\t\t\tmargin-right: 0.15rem;\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\t\t}\n\n\t\t&.show-details {\n\t\t\t.meta-info-wrapper {\n\t\t\t\tmargin-bottom: 0.3rem;\n\t\t\t}\n\t\t}\n\n\t\t&.hide-details {\n\t\t\t.meta-info-wrapper {\n\t\t\t\tmargin-bottom: 0.15rem;\n\t\t\t\t/* white-space: nowrap; */\n\t\t\t}\n\t\t}\n\n\t\t/* All cells */\n\t\ttd,\n\t\tth {\n\t\t\tpadding: 0.5em;\n\t\t\tfont-size: 0.85rem;\n\t\t\tfont-weight: 400;\n\t\t\tcolor: ${colors.black};\n\t\t\tmin-width: 50px;\n\t\t}\n\n\t\t/* Cells in header */\n\t\tthead th {\n\t\t\tposition: -webkit-sticky; /* for Safari */\n\t\t\tposition: sticky;\n\t\t\ttop: 0;\n\t\t\tz-index: 1;\n\t\t\tbackground-color: ${colors.ultraLightGrey};\n\t\t\tcolor: ${colors.darkGrey};\n\t\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\t\tborder-right: 1px ${colors.midGrey} solid;\n\t\t\tbox-shadow: 1px 1px 0 0 ${colors.midGrey};\n\n\t\t\t&:first-child {\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 2;\n\t\t\t}\n\t\t}\n\n\t\t/* Cells in header */\n\n\t\ttbody th {\n\t\t\tposition: -webkit-sticky; /* for Safari */\n\t\t\tposition: sticky;\n\t\t\tleft: 0;\n\t\t\tbackground: #fff;\n\t\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\t\tborder-right: 1px ${colors.midGrey} solid;\n\n\t\t\t&:first-of-type {\n\t\t\t\tz-index: 1;\n\t\t\t\ttext-align: left;\n\t\t\t\tbackground-color: ${colors.white};\n\t\t\t\tbox-shadow: 1px 0 0 0 ${colors.midGrey};\n\n\t\t\t\tspan.meta {\n\t\t\t\t\tcolor: ${colors.darkGrey};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport default TimeSheetForeman;\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useQuery } from 'react-query';\nimport { notification, Tabs } from 'antd';\nimport { useMediaQuery } from 'react-responsive';\nimport params from 'jquery-param';\n\n// css\nimport { css } from 'emotion';\nimport { ArrowBackIcon } from 'mdi-react';\nimport colors from '../../../style/colors';\n\nimport TopBar from '../../ui/TopBar';\nimport Page from '../../ui/Page';\nimport getBackButtonUrl from '../../../utilities/get-back-button-url';\nimport getPageFromId from '../../../utilities/get-page-from-id';\nimport ActionWrapper from '../../ui/ActionWrapper';\nimport pageNavigator from '../../../utilities/page-navigator';\nimport DropDown from '../../ui/DropDown';\nimport InlineSpinner from '../../ui/InlineSpinner';\n\nimport TimesheetRenderModal from './TimesheetSignatureComponents/TimesheetRenderModal';\nimport TimesheetListItem from './TimesheetSignatureComponents/TimesheetListItem';\nimport TimesheetSignaturePadModal from './TimesheetSignatureComponents/TimesheetSignaturePadModal';\nimport TimesheetCorrectedModal from './TimesheetSignatureComponents/TimesheetCorrectedModal';\n\n// utilities\nimport req from '../../../utilities/request-utility';\n\nconst TimesheetsPendingSignature = props => {\n\tconst pages = useSelector(s => s.pages.pages);\n\tconst loggedInUser = props.user;\n\tconst { id, loggedUserTypeDK } = loggedInUser;\n\tconst page = getPageFromId(pages, props.match.params.pageId);\n\tconst backButtonURL = getBackButtonUrl(page);\n\n\tconst [selectedForeman, setSelectedForeman] = useState(loggedUserTypeDK === 'foreman' ? id : null);\n\tconst [selectedTimesheet, setSelectedTimesheet] = useState({});\n\tconst [toggleModal, setToggleModal] = useState(false);\n\tconst [isTimesheetSubmitting, setIsTimesheetSubmitting] = useState(false);\n\n\tconst [toggleSignaturePadModal, setToggleSignaturePadModal] = useState(false);\n\tconst [draftSignedTimesheet, setDraftSignedTimesheet] = useState(null);\n\n\tconst lang = useSelector(({ language }) => language.language);\n\n\tconst isMobile = useMediaQuery({ maxWidth: '414px' });\n\n\tconst {\n\t\tdata: { data: needsSignatureData = [] } = {},\n\t\tisFetching: needsSignatureIsFetching,\n\t\tisLoading: needsSignatureIsLoading,\n\t\trefetch: needsSignatureRefetch\n\t} = useQuery(\n\t\t['NeedsSignature', selectedForeman],\n\t\t({ queryKey: [key, selectedForeman] = [] }) => {\n\t\t\tif (!selectedForeman) return;\n\t\t\treturn req()(`semcotime/timesheet/getAllPending/${selectedForeman}`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000,\n\t\t\trefetchOnWindowFocus: false\n\t\t}\n\t);\n\n\tconst {\n\t\tdata: { data: archiveData = [] } = {},\n\t\tisFetching: archiveIsFetching,\n\t\tisLoading: archiveIsLoading,\n\t\trefetch: archiveRefetch\n\t} = useQuery(\n\t\t['archiveTimesheets', selectedForeman],\n\t\t({ queryKey: [key, selectedForeman] = [] }) => {\n\t\t\tif (!selectedForeman) return;\n\t\t\treturn req()(`semcotime/timesheet/getAllArchive/${selectedForeman}`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000,\n\t\t\trefetchOnWindowFocus: false\n\t\t}\n\t);\n\n\tconst {\n\t\tdata: { data: correctedBySemsupportData = [] } = {},\n\t\tisFetching: correctedBySemsupportIsFetching,\n\t\tisLoading: correctedBySemsupportIsLoading,\n\t\trefetch: correctedBySemsupportRefetch\n\t} = useQuery(\n\t\t['correctedTimesheets', selectedForeman],\n\t\t({ queryKey: [key, selectedForeman] = [] }) => {\n\t\t\tif (!selectedForeman) return;\n\t\t\treturn req()(`semcotime/timesheet/getAllCorrectedBySemsupport/${selectedForeman}`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000,\n\t\t\trefetchOnWindowFocus: true\n\t\t}\n\t);\n\n\tconst { data: { data: foremen = { all: [] } } = {}, isFetching: foremenIsFetching } = useQuery(\n\t\t['GetForemen'],\n\t\t() => {\n\t\t\treturn req()(`semcotime/foremen/with-admin`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000,\n\t\t\trefetchOnWindowFocus: false,\n\t\t\tenabled: loggedUserTypeDK === 'admin'\n\t\t}\n\t);\n\n\tconst onCancelTimesheetRequest = async timesheetID => {\n\t\ttry {\n\t\t\tsetIsTimesheetSubmitting(true);\n\t\t\tawait req().put(`semcotime/timesheet/markAsCanceled/${timesheetID}`);\n\n\t\t\tsetIsTimesheetSubmitting(false);\n\n\t\t\tnotification.success({ duration: 7, message: 'SUCCESS', description: 'Timesheet is rejected' });\n\t\t\tsetToggleModal(false);\n\t\t\tneedsSignatureRefetch();\n\t\t\tarchiveRefetch();\n\t\t} catch (error) {\n\t\t\tsetIsTimesheetSubmitting(false);\n\n\t\t\tnotification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: error.response.data.message\n\t\t\t});\n\t\t}\n\t};\n\n\tconst onAddSignature = async ({ signatureData }) => {\n\t\ttry {\n\t\t\tsetIsTimesheetSubmitting(true);\n\t\t\tconst { id: timesheetID = '' } = selectedTimesheet;\n\n\t\t\tconst response = await req().post(\n\t\t\t\t`semcotime/timesheet/draftSignatureTimesheet/${timesheetID}`,\n\t\t\t\t{ signatureData },\n\t\t\t\t{\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'application/json'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tconst { data: { modifiedPdfBytes: pdfBuffer } = {} } = response;\n\n\t\t\tsetIsTimesheetSubmitting(false);\n\t\t\tconst pdfBufferData = Buffer.from(pdfBuffer);\n\t\t\tconst receivedBlob = new Blob([pdfBufferData], { type: 'application/pdf' });\n\t\t\tsetDraftSignedTimesheet(receivedBlob);\n\t\t} catch (error) {\n\t\t\tsetIsTimesheetSubmitting(false);\n\n\t\t\tnotification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: error.response.data.message\n\t\t\t});\n\t\t}\n\t};\n\n\tconst onApproveTimesheet = async () => {\n\t\ttry {\n\t\t\tsetIsTimesheetSubmitting(true);\n\t\t\tconst { blueCollarId = '', id: timesheetID = '' } = selectedTimesheet;\n\n\t\t\tconst formData = new FormData();\n\n\t\t\tformData.append('file', draftSignedTimesheet);\n\t\t\tformData.append('blueCollarId', blueCollarId);\n\n\t\t\tawait req().put(`semcotime/timesheet/markAsApproved/${timesheetID}`, formData, {\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/json'\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tneedsSignatureRefetch();\n\t\t\tnotification.success({ duration: 7, message: 'SUCCESS', description: 'Timesheet is Approved' });\n\t\t\tarchiveRefetch();\n\t\t\tsetIsTimesheetSubmitting(false);\n\t\t\tsetToggleModal(false);\n\t\t\tsetDraftSignedTimesheet(null);\n\t\t} catch (error) {\n\t\t\tsetIsTimesheetSubmitting(false);\n\t\t\tnotification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: error.response.data.message\n\t\t\t});\n\t\t}\n\t};\n\n\tconst onGenerateNewTimesheet = async id => {\n\t\ttry {\n\t\t\tsetIsTimesheetSubmitting(true);\n\t\t\tawait req().put(`semcotime/timesheet/generateNewTimesheet/${id}`);\n\n\t\t\tawait correctedBySemsupportRefetch();\n\t\t\tsetIsTimesheetSubmitting(false);\n\n\t\t\tnotification.success({ duration: 7, message: 'SUCCESS', description: 'Timesheet is generated' });\n\t\t\tneedsSignatureRefetch();\n\t\t} catch (err) {\n\t\t\tsetIsTimesheetSubmitting(false);\n\t\t\tnotification.error({ duration: 7, message: 'FAILED', description: err.response.data.message });\n\t\t}\n\t};\n\n\treturn (\n\t\t\n\t\t\t pageNavigator(backButtonURL, 'backward')}>\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t\ttitle={page.title}\n\t\t\t/>\n\t\t\t{loggedUserTypeDK === 'admin' && (\n\t\t\t\t
\n\t\t\t\t\t ({\n\t\t\t\t\t\t\tlabel: `${d.name} | Ticket No. ${d.ticketNumber ? d.ticketNumber : 'N/A'}`,\n\t\t\t\t\t\t\tvalue: d.id\n\t\t\t\t\t\t}))}\n\t\t\t\t\t\tplaceholder=\"Select Foreman\"\n\t\t\t\t\t\tvalue={selectedForeman}\n\t\t\t\t\t\tonChange={e => setSelectedForeman(e.target.value)}\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t)}\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t{lang.timesheetNeedsSignature}{' '}\n\t\t\t\t\t\t\t\t{needsSignatureData.length > 0 ? <>{needsSignatureData.length} : ''}\n\t\t\t\t\t\t\t\t{(needsSignatureIsLoading || needsSignatureIsFetching) && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkey=\"1\">\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{needsSignatureIsLoading && }\n\n\t\t\t\t\t\t\t{!needsSignatureIsLoading && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t{lang.archive} {archiveData.length > 0 ? <>{archiveData.length} : ''}\n\t\t\t\t\t\t\t\t{(archiveIsLoading || archiveIsFetching) && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkey=\"2\">\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{archiveIsLoading && }\n\n\t\t\t\t\t\t\t{!archiveIsLoading && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\n\t\t\t{correctedBySemsupportData.length !== 0 && (\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n\nconst componentStyles = isUser => css`\n\tbackground-color: ${colors.white} !important;\n\n\t.inline-scroll-wrapper {\n\t\toverflow-x: auto;\n\t\toverflow-y: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\n\t\tpadding: 1rem;\n\n\t\t.react-pdf__Page__canvas {\n\t\t\tmargin: 0 auto !important;\n\t\t}\n\t}\n`;\n\nexport default TimesheetsPendingSignature;\n","import React, { useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Button, Modal } from 'antd';\nimport SignatureCanvas from 'react-signature-canvas';\n\nconst TimesheetSignaturePadModal = props => {\n\tconst { isTimesheetSubmitting, onAddSignature, setToggleModal, toggleModal } = props;\n\n\tconst language = useSelector(s => s.language.language);\n\n\tconst signaturePadRef = useRef(null);\n\n\tconst footerButtons = [\n\t\t,\n\t\t {\n\t\t\t\tconst { isEmpty } = signaturePadRef.current;\n\n\t\t\t\tif (isEmpty()) {\n\t\t\t\t\treturn Modal.warning({ title: 'Please sign before submitting' });\n\t\t\t\t}\n\n\t\t\t\tawait onAddSignature({ signatureData: signaturePadRef.current.toDataURL() });\n\t\t\t\tsignaturePadRef.current.clear();\n\t\t\t\tsetToggleModal(false);\n\t\t\t}}>\n\t\t\tAdd\n\t\t\n\t];\n\n\treturn (\n\t\t {\n\t\t\t\tsignaturePadRef.current.clear();\n\t\t\t\tsetToggleModal(false);\n\t\t\t}}\n\t\t\tfooter={footerButtons}>\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n};\n\nexport default TimesheetSignaturePadModal;\n","import React from 'react';\nimport { Modal, List, Button, Typography } from 'antd';\nimport moment from 'moment';\n\nconst TimesheetCorrectedModal = props => {\n\tconst { correctedBySemsupportData, isTimesheetSubmitting = false, onGenerateNewTimesheet } = props;\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tconst { id, canceledDate, canceledBy } = sheet;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\tonGenerateNewTimesheet(id);\n\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\tGenerate New\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\tkey={id}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{`Timesheet ID : ${id} | Corrected by ${canceledBy} on ${moment(\n\t\t\t\t\t\t\t\t\tcanceledDate,\n\t\t\t\t\t\t\t\t\t'YYYYMMDDHHmmss'\n\t\t\t\t\t\t\t\t).format('DD-MM-YYYY HH:mm')}`}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}}\n\t\t\t/>\n\t\t\n\t);\n};\n\nexport default TimesheetCorrectedModal;\n","import React, { useEffect, useLayoutEffect, useState } from 'react';\nimport { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\nimport { ArrowBackIcon, InfoOutlineIcon, PlusIcon, FilePdfIcon, FileExcelIcon, MagnifyIcon } from 'mdi-react';\n\nimport { Button, notification } from 'antd';\nimport { parse, format, startOfMonth, endOfMonth } from 'date-fns';\nimport { css } from 'emotion';\nimport { useQuery } from 'react-query';\nimport param from 'jquery-param';\nimport { Controller, useForm } from 'react-hook-form';\nimport * as yup from 'yup';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport FileSaver from 'file-saver';\nimport * as ExcelJS from 'exceljs';\n\nimport usePageAndBackButtonURL from '../../../hooks/usePageAndBackButtonURL';\nimport pageNavigator from '../../../utilities/page-navigator';\nimport req from '../../../utilities/request-utility';\n\nimport colors from '../../../style/colors';\nimport InlineSpinner from '../../ui/InlineSpinner';\nimport StatusBox from '../../ui/StatusBox';\nimport DropDown from '../../ui/DropDown';\nimport ActionWrapper from '../../ui/ActionWrapper';\nimport ComponentPage from '../../ui/Page';\nimport TopBar from '../../ui/TopBar';\nimport PDFRenderComponent from '../../ui/PDFRenderComponent';\n\nfunction WorkTimeNptHottReportDK(props) {\n\tconst { user = {} } = props;\n\tconst { id: userAppId = '', loggedUserTypeDK = 'user' } = user;\n\n\tconst { page, backButtonURL } = usePageAndBackButtonURL(props);\n\tconst [excelData, setExcelData] = useState([]);\n\tconst [tableData, setTableData] = useState({\n\t\tpdfFile: '',\n\t\terror: false,\n\t\tloading: false,\n\t\tempty: false\n\t});\n\n\tconst exportAndGenerateTemplate = async () => {\n\t\tconst workbook = new ExcelJS.Workbook();\n\t\tconst sheet = workbook.addWorksheet('table');\n\n\t\tsheet.columns = [\n\t\t\t{ header: 'Employee.', key: 'employee', width: 30 },\n\t\t\t{ header: 'Ticket No.', key: 'ticketNo', width: 30 },\n\t\t\t{ header: 'Project', key: 'project', width: 30 },\n\t\t\t{ header: 'Date', key: 'date', width: 30 },\n\t\t\t{ header: 'NPT Activity', key: 'nptActivity', width: 20 },\n\t\t\t{ header: 'NPT Description', key: 'nptDescription', width: 50 },\n\t\t\t{ header: 'NPT Hours', key: 'nptHours', width: 15 },\n\t\t\t{ header: 'HOTT Work Order No.', key: 'hottWorkOrderNo', width: 20 },\n\t\t\t{ header: 'HOTT Operation No.', key: 'hottOperationNo', width: 50 },\n\t\t\t{ header: 'HOTT Description', key: 'hottDescription', width: 50 },\n\t\t\t{ header: 'HOTT Hours', key: 'hottHours', width: 15 }\n\t\t];\n\n\t\tconst headerRange = sheet.getRow(1);\n\t\theaderRange.eachCell(cell => {\n\t\t\tcell.border = {\n\t\t\t\ttop: { style: 'medium' },\n\t\t\t\tleft: { style: 'medium' },\n\t\t\t\tbottom: { style: 'medium' },\n\t\t\t\tright: { style: 'medium' }\n\t\t\t};\n\t\t});\n\n\t\tif (excelData.length === 0)\n\t\t\treturn notification.error({\n\t\t\t\tduration: 1,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: 'Empty, no data to show'\n\t\t\t});\n\n\t\texcelData.forEach(rowData => {\n\t\t\tsheet.addRow(rowData);\n\t\t});\n\n\t\tconst buffer = await workbook.xlsx.writeBuffer();\n\t\tconst blobData = new Blob([buffer], {\n\t\t\ttype: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'\n\t\t});\n\n\t\tonDownload(blobData);\n\t};\n\n\tconst { data: { data: projectData = [] } = {}, isFetching: projectIsFetching } = useQuery(\n\t\t'project',\n\t\t() => req()(`semcotime/projects`),\n\t\t{\n\t\t\tkeepPreviousData: true,\n\t\t\trefetchOnWindowFocus: false,\n\t\t\tstaleTime: 60 * 60 * 1000\n\t\t}\n\t);\n\n\tconst { data: { data: employeesData = [] } = {}, isFetching: employeesDataIsFetching } = useQuery(\n\t\t['GetForemanTeamMembers'],\n\t\t() => {\n\t\t\tif (loggedUserTypeDK === 'admin') return req()(`semcotime/foremen-teams/my-team/all`);\n\n\t\t\treturn req()(`semcotime/foremen-teams/my-team`);\n\t\t},\n\t\t{\n\t\t\tkeepPreviousData: true,\n\t\t\trefetchOnWindowFocus: false,\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconst schema = yup.object().shape({\n\t\tfromDate: yup.string().required('From date is required'),\n\t\tprojectNumber: yup.array().min(1, 'Project Number is required'),\n\t\ttoDate: yup.string().required('To date is required')\n\t});\n\n\tconst defaultValues = {\n\t\temployees: [],\n\t\tfromDate: format(startOfMonth(new Date()), 'yyyy-MM-dd'),\n\t\tprojectNumber: [],\n\t\ttoDate: format(endOfMonth(new Date()), 'yyyy-MM-dd')\n\t};\n\n\tconst { control, handleSubmit, getValues } = useForm({\n\t\tdefaultValues,\n\t\tresolver: yupResolver(schema)\n\t});\n\n\tconst onSubmit = async formData => {\n\t\ttry {\n\t\t\tconst { employees = [], fromDate = '', projectNumber = [], toDate = '' } = formData;\n\n\t\t\t//to separate the userId and externalId , to reduce extra fetching for user DB\n\t\t\tconst employeeIds = employees.map(d => ({ userId: d.split(';')[0], externalId: d.split(';')[1] }));\n\n\t\t\tsetTableData({ pdfFile: '', loading: true, error: false, empty: false });\n\n\t\t\tconst response = await req()(\n\t\t\t\t`semcotime/reports/nptHottReport?${param({\n\t\t\t\t\temployeeIds,\n\t\t\t\t\tfromDate,\n\t\t\t\t\tprojectNumber,\n\t\t\t\t\ttoDate\n\t\t\t\t})}`,\n\t\t\t\t{\n\t\t\t\t\tresponseType: 'json'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tconst pdfBuffer = Buffer.from(response.data.pdfBuffer.data);\n\n\t\t\t// Create a Blob from the Buffer data\n\t\t\tconst receivedBlob = new Blob([pdfBuffer], { type: 'application/pdf' });\n\n\t\t\tsetExcelData(response.data.foremattedRegistrations);\n\t\t\tsetTableData({\n\t\t\t\tloading: false,\n\t\t\t\tpdfFile: window.URL.createObjectURL(receivedBlob),\n\t\t\t\terror: false,\n\t\t\t\tempty: false\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconst { status } = err.response;\n\t\t\tif (status === 404) return setTableData({ loading: false, pdfFile: '', error: false, empty: true });\n\n\t\t\tsetTableData({ loading: false, pdfFile: '', error: true, empty: false });\n\t\t}\n\t};\n\n\tconst onDownload = fileData => {\n\t\tconst { employees = [], fromDate = '', toDate = '' } = getValues();\n\n\t\tconst employeeIds = employees.map(d => d.split(';')[1]);\n\n\t\tFileSaver.saveAs(fileData, `NPT & HOTT Report ${employeeIds.join(' ')} ${fromDate} to ${toDate}`);\n\t};\n\n\treturn (\n\t\t\n\t\t\t pageNavigator(backButtonURL, 'backward')}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t/>\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t p.detailedReportingEnabled === 'YES')\n\t\t\t\t\t\t\t\t\t\t.map(p => ({ label: p.id, value: p.id }))}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t ({\n\t\t\t\t\t\t\t\t\t\tlabel: p.name,\n\t\t\t\t\t\t\t\t\t\tvalue: `${p.id};${p.externalId}`\n\t\t\t\t\t\t\t\t\t}))}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

From:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t

To:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t onSubmit(e),\n\t\t\t\t\t\t\t\te => {\n\t\t\t\t\t\t\t\t\tnotification.error({\n\t\t\t\t\t\t\t\t\t\tduration: 1,\n\t\t\t\t\t\t\t\t\t\tmessage: 'FAILED',\n\t\t\t\t\t\t\t\t\t\tdescription: Object.keys(e).map(d => e[d].message)[0]\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t onDownload(tableData.pdfFile)}\n\t\t\t\t\t\t\tdisabled={!tableData.pdfFile || tableData.loading}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t{tableData.loading && }\n\n\t\t\t{!tableData.loading && tableData.empty && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t{!tableData.loading && tableData.error && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t{!tableData.loading && !tableData.error && tableData.pdfFile && (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)}\n\t\t
\n\t);\n}\n\nconst componentStyles = isUser => css`\n\t.inline-scroll-wrapper {\n\t\toverflow-x: auto;\n\t\toverflow-y: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\n\t\t.react-pdf__Page__canvas {\n\t\t\tmargin: 0 auto !important;\n\t\t}\n\t}\n\n\t.date-selector-bar {\n\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\tbackground-color: ${colors.white};\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: ${isUser ? 'end' : 'space-between'};\n\t\tfont-size: 1rem;\n\t\tpadding: 15px 15px 15px 15px;\n\n\t\t.dropdown-fields {\n\t\t\twidth: 50%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-evenly;\n\t\t}\n\n\t\t.right {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t.date-inputs {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\tinput {\n\t\t\tmargin: 0 0.5rem;\n\t\t\tcolor: ${colors.darkGrey};\n\t\t\tborder: 1px ${colors.darkGrey} dashed;\n\t\t\tborder-width: 0 0 1px 0;\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 944px) {\n\t\t.date-selector-bar {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\theight: initial;\n\t\t\tgap: 15px;\n\n\t\t\t.dropdown-fields {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.right {\n\t\t\t\tdisplay: block;\n\n\t\t\t\t.date-inputs {\n\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t}\n\n\t\t\t\t.buttons {\n\t\t\t\t\tmargin-top: 10px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tmargin-bottom: 10px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport default WorkTimeNptHottReportDK;\n","import React, { useEffect, useLayoutEffect, useState } from \"react\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\nimport { ArrowBackIcon, InfoOutlineIcon, PlusIcon, DownloadIcon, MagnifyIcon } from \"mdi-react\";\nimport { FilePdfIcon, FileExcelIcon } from \"mdi-react\";\n\nimport { Button, notification } from \"antd\";\nimport { parse, format, startOfMonth, endOfMonth } from \"date-fns\";\nimport { css } from \"emotion\";\nimport { useQuery } from \"react-query\";\nimport param from \"jquery-param\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport FileSaver from \"file-saver\";\nimport { Document, Page } from \"react-pdf\";\nimport * as ExcelJS from \"exceljs\";\nimport { useSelector } from \"react-redux\";\n\nimport usePageAndBackButtonURL from \"../../../hooks/usePageAndBackButtonURL\";\nimport pageNavigator from \"../../../utilities/page-navigator\";\nimport req from \"../../../utilities/request-utility\";\n\nimport colors from \"../../../style/colors\";\nimport InlineSpinner from \"../../ui/InlineSpinner\";\nimport StatusBox from \"../../ui/StatusBox\";\nimport DropDown from \"../../ui/DropDown\";\nimport ActionWrapper from \"../../ui/ActionWrapper\";\nimport ComponentPage from \"../../ui/Page\";\nimport TopBar from \"../../ui/TopBar\";\n\nfunction WorkTimePendingApprovalHoursTimesheetDK(props) {\n const { user = {} } = props;\n const { id: userAppId = \"\", loggedUserTypeDK = \"user\" } = user;\n const lang = useSelector((s) => s.language.language);\n\n const { page, backButtonURL } = usePageAndBackButtonURL(props);\n const [excelData, setExcelData] = useState([]);\n const [tableData, setTableData] = useState({\n pdfFile: \"\",\n error: false,\n loading: false,\n empty: false,\n });\n\n const {\n data: { data: foremen = {} } = {},\n isFetching: foremenIsFetching,\n isLoading: foremenIsLoading,\n refetch: foremenRefetch,\n } = useQuery(\n [\"GetForemen\"],\n () => {\n return req()(`semcotime/foremen/with-admin`);\n },\n {\n staleTime: 30 * 1000,\n }\n );\n\n const schema = yup.object().shape({\n employeeCategory: yup.string().required(\"Employee Category is required\"),\n foremanId: yup.string(),\n fromDate: yup.string().required(\"From date is required\"),\n toDate: yup.string().required(\"To date is required\"),\n });\n\n const defaultValues = {\n employeeCategory: \"temporary\",\n foremanId: \"\",\n fromDate: format(startOfMonth(new Date()), \"yyyy-MM-dd\"),\n toDate: format(endOfMonth(new Date()), \"yyyy-MM-dd\"),\n };\n\n const {\n control,\n formState: { errors },\n getValues,\n reset,\n setValue,\n handleSubmit,\n watch,\n } = useForm({\n defaultValues,\n resolver: yupResolver(schema),\n });\n\n const onSubmit = async (formData) => {\n try {\n const { employeeCategory = \"\", foremanId = \"\", fromDate = \"\", toDate = \"\" } = formData;\n\n setTableData({ pdfFile: \"\", loading: true, error: false, empty: false });\n\n // const { data } = await req()(\n // `semcotime/reports/pendingApproval?${param({ employeeCategory, foremanId, fromDate, toDate })}`,\n // {\n // responseType: \"blob\",\n // }\n // );\n // console.log(\"data: \", data);\n\n // setTableData({ loading: false, pdfFile: window.URL.createObjectURL(data), error: false, empty: false });\n\n const response = await req()(\n `semcotime/reports/pendingApproval?${param({ employeeCategory, foremanId, fromDate, toDate })}`,\n {\n responseType: \"json\",\n }\n );\n const pdfBuffer = Buffer.from(response.data.pdfBuffer.data);\n\n // Create a Blob from the Buffer data\n const receivedBlob = new Blob([pdfBuffer], { type: \"application/pdf\" });\n\n setExcelData(response.data.timeRegistrations);\n setTableData({\n loading: false,\n pdfFile: window.URL.createObjectURL(receivedBlob),\n error: false,\n empty: false,\n });\n } catch (err) {\n console.log(\"err: \", err);\n const { status } = err.response;\n if (status === 404) return setTableData({ loading: false, pdfFile: \"\", error: false, empty: true });\n\n setTableData({ loading: false, pdfFile: \"\", error: true, empty: false });\n }\n };\n\n const onDownload = () => {\n const { employeeCategory = \"\", foremanId = \"\", fromDate = \"\", toDate = \"\" } = watch();\n FileSaver.saveAs(tableData.pdfFile, `Pending Registrations ${employeeCategory}-${fromDate}-${toDate}`);\n };\n\n const exportAndGenerateTemplate = async () => {\n const workbook = new ExcelJS.Workbook();\n const sheet = workbook.addWorksheet(\"table\");\n\n sheet.columns = [\n { header: \"Ticket No.\", key: \"ticketNumber\", width: 30 },\n { header: \"Employee No.\", key: \"employeeNumber\", width: 30 },\n { header: \"Employee Name.\", key: \"employeeName\", width: 30 },\n { header: \"Foreman\", key: \"foremanName\", width: 30 },\n { header: \"Account Date\", key: \"accountDate\", width: 30 },\n { header: \"From\", key: \"fromHour\", width: 15 },\n { header: \"To\", key: \"toHour\", width: 15 },\n { header: \"Work Hours\", key: \"WorkHours\", width: 15 },\n { header: \"Rest Hours\", key: \"PaidRest\", width: 15 },\n { header: \"Waiting Hours\", key: \"WaitingHours\", width: 15 },\n { header: \"Heli Hours\", key: \"HeliHours\", width: 15 },\n { header: \"Standby\", key: \"StandBy\", width: 15 },\n ];\n\n const headerRange = sheet.getRow(1);\n headerRange.eachCell((cell) => {\n cell.border = {\n top: { style: \"medium\" },\n left: { style: \"medium\" },\n bottom: { style: \"medium\" },\n right: { style: \"medium\" },\n };\n });\n\n if (excelData.length === 0)\n return notification.error({\n duration: 1,\n message: lang.notificationFailed,\n description: \"Empty, no data to show\",\n });\n\n excelData.forEach((rowData) => {\n sheet.addRow(rowData);\n });\n\n const buffer = await workbook.xlsx.writeBuffer();\n const blobData = new Blob([buffer], {\n type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8\",\n });\n const { employeeCategory = \"\", fromDate = \"\", toDate = \"\" } = watch();\n\n FileSaver.saveAs(blobData, `Pending Registrations ${employeeCategory}-${fromDate}-${toDate}.xlsx`);\n };\n\n return (\n \n pageNavigator(backButtonURL, \"backward\")}>\n \n \n }\n />\n
\n {loggedUserTypeDK != \"user\" && (\n
\n
\n {\n return (\n onChange(e)}\n options={[\n { label: \"Full Time App Users\", value: \"fulltime\" },\n { label: \"Temporary Time App Users\", value: \"temporary\" },\n ]}\n value={value}\n />\n );\n }}\n />\n
\n
\n {\n return (\n onChange(e)}\n options={!foremenIsLoading ? foremen.all.map((d) => ({ label: d.name, value: d.id })) : []}\n value={value}\n />\n );\n }}\n />\n
\n
\n )}\n
\n
\n

{lang.timeSheetFromDate}:

\n {\n return onChange(e)} />;\n }}\n />\n

{lang.timeSheetToDate}:

\n {\n return onChange(e)} />;\n }}\n />\n
\n
\n onSubmit(e),\n (e) => {\n notification.error({\n duration: 1,\n message: lang.notificationFailed,\n description: Object.keys(e).map((d) => e[d].message)[0],\n });\n }\n )}\n >\n \n \n \n \n
\n
\n
\n {tableData.loading && }\n\n {!tableData.loading && tableData.empty && (\n }\n >\n )}\n\n {!tableData.loading && tableData.error && (\n }>\n )}\n\n {!tableData.loading && !tableData.error && tableData.pdfFile && (\n
\n console.log(\"PDF Render Error: \", e)}\n // onLoadSuccess={(e) => console.log(e)}\n >\n \n \n
\n )}\n
\n );\n}\n\nconst componentStyles = (isUser) => css`\n .inline-scroll-wrapper {\n overflow-x: auto;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n\n .react-pdf__Page__canvas {\n margin: 0 auto !important;\n }\n }\n\n .date-selector-bar {\n height: 55px;\n border-bottom: 1px ${colors.midGrey} solid;\n background-color: ${colors.white};\n display: flex;\n align-items: center;\n justify-content: ${isUser ? \"end\" : \"space-between\"};\n font-size: 1rem;\n padding-right: 15px;\n padding-left: 15px;\n\n .dropdown-fields {\n width: 35%;\n display: flex;\n justify-content: space-evenly;\n\n & > div {\n flex-grow: 1;\n }\n }\n\n .right {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .date-inputs {\n display: contents;\n }\n\n input {\n margin: 0 0.5rem;\n color: ${colors.darkGrey};\n border: 1px ${colors.darkGrey} dashed;\n border-width: 0 0 1px 0;\n font-size: 1rem;\n }\n }\n\n @media screen and (max-width: 944px) {\n .date-selector-bar {\n display: flex;\n flex-direction: column;\n height: initial;\n gap: 15px;\n\n .dropdown-fields {\n display: block;\n margin-top: 10px;\n width: 100%;\n }\n\n .right {\n display: block;\n\n .date-inputs {\n display: inline-flex;\n }\n\n .buttons {\n margin-top: 10px;\n display: flex;\n justify-content: center;\n margin-bottom: 10px;\n }\n }\n }\n }\n`;\n\nexport default WorkTimePendingApprovalHoursTimesheetDK;\n","import React, { useEffect, useLayoutEffect, useState } from \"react\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\nimport { ArrowBackIcon, InfoOutlineIcon, PlusIcon, FilePdfIcon, FileExcelIcon, MagnifyIcon } from \"mdi-react\";\n\nimport { Button, notification } from \"antd\";\nimport { parse, format, startOfMonth, endOfMonth } from \"date-fns\";\nimport { css } from \"emotion\";\nimport { useQuery } from \"react-query\";\nimport param from \"jquery-param\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport FileSaver from \"file-saver\";\nimport { Document, Page } from \"react-pdf\";\nimport * as ExcelJS from \"exceljs\";\nimport { useSelector } from \"react-redux\";\n\nimport usePageAndBackButtonURL from \"../../../hooks/usePageAndBackButtonURL\";\nimport pageNavigator from \"../../../utilities/page-navigator\";\nimport req from \"../../../utilities/request-utility\";\n\nimport colors from \"../../../style/colors\";\nimport InlineSpinner from \"../../ui/InlineSpinner\";\nimport StatusBox from \"../../ui/StatusBox\";\nimport DropDown from \"../../ui/DropDown\";\nimport ActionWrapper from \"../../ui/ActionWrapper\";\nimport ComponentPage from \"../../ui/Page\";\nimport TopBar from \"../../ui/TopBar\";\n\nfunction WorkTimePendingApprovalHoursTimesheetTeamSelectedDK(props) {\n const { user = {} } = props;\n const { id: userAppId = \"\", loggedUserTypeDK = \"user\" } = user;\n const lang = useSelector((s) => s.language.language);\n\n const { page, backButtonURL } = usePageAndBackButtonURL(props);\n const [excelData, setExcelData] = useState([]);\n const [tableData, setTableData] = useState({\n pdfFile: \"\",\n error: false,\n loading: false,\n empty: false,\n });\n\n const exportAndGenerateTemplate = async () => {\n const workbook = new ExcelJS.Workbook();\n const sheet = workbook.addWorksheet(\"table\");\n\n sheet.columns = [\n { header: \"Ticket No.\", key: \"ticketNumber\", width: 30 },\n { header: \"Employee No.\", key: \"employeeNumber\", width: 30 },\n { header: \"Employee Name.\", key: \"employeeName\", width: 30 },\n { header: \"Foreman\", key: \"foremanName\", width: 30 },\n { header: \"Account Date\", key: \"accountDate\", width: 30 },\n { header: \"From\", key: \"fromHour\", width: 15 },\n { header: \"To\", key: \"toHour\", width: 15 },\n { header: \"Work Hours\", key: \"WorkHours\", width: 15 },\n { header: \"Rest Hours\", key: \"PaidRest\", width: 15 },\n { header: \"Waiting Hours\", key: \"WaitingHours\", width: 15 },\n { header: \"Heli Hours\", key: \"HeliHours\", width: 15 },\n { header: \"Standby\", key: \"StandBy\", width: 15 },\n ];\n\n const headerRange = sheet.getRow(1);\n headerRange.eachCell((cell) => {\n cell.border = {\n top: { style: \"medium\" },\n left: { style: \"medium\" },\n bottom: { style: \"medium\" },\n right: { style: \"medium\" },\n };\n });\n\n if (excelData.length === 0)\n return notification.error({\n duration: 1,\n message: lang.notificationFailed,\n description: \"Empty, no data to show\",\n });\n\n excelData.forEach((rowData) => {\n sheet.addRow(rowData);\n });\n\n const buffer = await workbook.xlsx.writeBuffer();\n const blobData = new Blob([buffer], {\n type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8\",\n });\n const { employeeCategory = \"\", fromDate = \"\", toDate = \"\" } = watch();\n\n FileSaver.saveAs(blobData, `Pending Registrations ${employeeCategory}-${fromDate}-${toDate}.xlsx`);\n };\n\n const {\n data: { data: foremen = {} } = {},\n isFetching: foremenIsFetching,\n isLoading: foremenIsLoading,\n refetch: foremenRefetch,\n } = useQuery(\n [\"GetForemen\"],\n () => {\n return req()(`semcotime/foremen/with-admin`);\n },\n {\n staleTime: 30 * 1000,\n }\n );\n\n const schema = yup.object().shape({\n employeeCategory: yup.string().required(\"Employee Category is required\"),\n foremanId: yup.string().required(\"Foreman is required\"),\n fromDate: yup.string().required(\"From date is required\"),\n toDate: yup.string().required(\"To date is required\"),\n });\n\n const defaultValues = {\n employeeCategory: \"temporary\",\n foremanId: \"\",\n employeeId: \"\",\n fromDate: format(startOfMonth(new Date()), \"yyyy-MM-dd\"),\n toDate: format(endOfMonth(new Date()), \"yyyy-MM-dd\"),\n };\n\n const {\n control,\n formState: { errors },\n getValues,\n reset,\n setValue,\n handleSubmit,\n watch,\n } = useForm({\n defaultValues,\n resolver: yupResolver(schema),\n });\n\n const onSubmit = async (formData) => {\n try {\n const { employeeCategory, foremanId, fromDate = \"\", toDate = \"\" } = formData;\n\n setTableData({ pdfFile: \"\", loading: true, error: false, empty: false });\n\n // const { data } = await req()(\n // `semcotime/reports/pendingApprovalTeamSelected?${param({ employeeCategory, foremanId, fromDate, toDate })}`,\n // {\n // responseType: \"blob\",\n // }\n // );\n\n // setTableData({ loading: false, pdfFile: window.URL.createObjectURL(data), error: false, empty: false });\n\n const response = await req()(\n `semcotime/reports/pendingApprovalTeamSelected?${param({\n employeeCategory,\n foremanId,\n fromDate,\n toDate,\n })}`,\n {\n responseType: \"json\",\n }\n );\n\n const pdfBuffer = Buffer.from(response.data.pdfBuffer.data);\n\n // Create a Blob from the Buffer data\n const receivedBlob = new Blob([pdfBuffer], { type: \"application/pdf\" });\n\n setExcelData(response.data.timeRegistrations);\n setTableData({\n loading: false,\n pdfFile: window.URL.createObjectURL(receivedBlob),\n error: false,\n empty: false,\n });\n } catch (err) {\n const { status } = err.response;\n if (status === 404) return setTableData({ loading: false, pdfFile: \"\", error: false, empty: true });\n\n setTableData({ loading: false, pdfFile: \"\", error: true, empty: false });\n }\n };\n\n const onDownload = () => {\n const { employeeCategory = \"\", foremanId = \"\", fromDate = \"\", toDate = \"\" } = watch();\n FileSaver.saveAs(tableData.pdfFile, `Pending Registrations ${employeeCategory}-${fromDate}-${toDate}`);\n };\n\n return (\n \n pageNavigator(backButtonURL, \"backward\")}>\n \n \n }\n />\n
\n {loggedUserTypeDK != \"user\" && (\n
\n
\n {\n return (\n {\n setValue(\"employeeId\", \"\");\n onChange(e);\n }}\n options={[\n { label: \"Full Time App Users\", value: \"fulltime\" },\n { label: \"Temporary Time App Users\", value: \"temporary\" },\n ]}\n value={value}\n />\n );\n }}\n />\n
\n
\n {\n return (\n onChange(e)}\n options={!foremenIsLoading ? foremen.all.map((d) => ({ label: d.name, value: d.id })) : []}\n value={value}\n />\n );\n }}\n />\n
\n
\n )}\n
\n
\n

{lang.timeSheetFromDate}:

\n {\n return onChange(e)} />;\n }}\n />\n

{lang.timeSheetToDate}:

\n {\n return onChange(e)} />;\n }}\n />\n
\n
\n onSubmit(e),\n (e) => {\n notification.error({\n duration: 1,\n message: lang.notificationFailed,\n description: Object.keys(e).map((d) => e[d].message)[0],\n });\n }\n )}\n >\n \n \n \n \n
\n
\n
\n {tableData.loading && }\n\n {!tableData.loading && tableData.empty && (\n }\n >\n )}\n\n {!tableData.loading && tableData.error && (\n }>\n )}\n\n {!tableData.loading && !tableData.error && tableData.pdfFile && (\n
\n console.log(\"PDF Render Error: \", e)}\n // onLoadSuccess={(e) => console.log(e)}\n >\n \n \n
\n )}\n
\n );\n}\n\nconst componentStyles = (isUser) => css`\n .inline-scroll-wrapper {\n overflow-x: auto;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n\n .react-pdf__Page__canvas {\n margin: 0 auto !important;\n }\n }\n\n .date-selector-bar {\n height: 55px;\n border-bottom: 1px ${colors.midGrey} solid;\n background-color: ${colors.white};\n display: flex;\n align-items: center;\n justify-content: ${isUser ? \"end\" : \"space-between\"};\n font-size: 1rem;\n padding-right: 15px;\n padding-left: 15px;\n\n .dropdown-fields {\n width: 35%;\n display: flex;\n justify-content: space-evenly;\n\n & > div {\n flex-grow: 1;\n }\n }\n\n .right {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .date-inputs {\n display: contents;\n }\n\n input {\n margin: 0 0.5rem;\n color: ${colors.darkGrey};\n border: 1px ${colors.darkGrey} dashed;\n border-width: 0 0 1px 0;\n font-size: 1rem;\n }\n }\n\n @media screen and (max-width: 944px) {\n .date-selector-bar {\n display: flex;\n flex-direction: column;\n height: initial;\n gap: 15px;\n\n .dropdown-fields {\n display: block;\n margin-top: 10px;\n width: 100%;\n }\n\n .right {\n display: block;\n\n .date-inputs {\n display: inline-flex;\n }\n\n .buttons {\n margin-top: 10px;\n display: flex;\n justify-content: center;\n margin-bottom: 10px;\n }\n }\n }\n }\n`;\n\nexport default WorkTimePendingApprovalHoursTimesheetTeamSelectedDK;\n","export const durations = {\n ultraFast: 80,\n fast: 200,\n normal: 280,\n slow: 800,\n routeTransition: 240\n};\n","export default {\r\n trueBlack: \"#000000\",\r\n black: \"#242424\",\r\n white: \"#ffffff\",\r\n ultraLightGrey: \"#F5F5F5\",\r\n lightGrey: \"#E8EBED\",\r\n midLightGrey: \"#E2E6E8\",\r\n midGrey: \"#d1d1d1\",\r\n midDarkGrey: \"#737578\",\r\n darkGrey: \"#6E6E6E\",\r\n blackOverlay: \"rgba(0,0,0,0.6)\",\r\n // Used for \"action-semantics\" (red -> danger/warning/error etc)\r\n green: \"#0E9E72\",\r\n greenLight: \"#E9F5EB\",\r\n greenBright: \"#5bc775\",\r\n vividBlue: \"#2D92E8\",\r\n blue: \"#386FA6\",\r\n blueLight: \"#EFF9FF\",\r\n orange: \"#DD7F36\",\r\n red: \"#CF5757\",\r\n redLight: \"#FFEFEF\",\r\n yellow: \"#ffe065\",\r\n yellowLight: \"#ffface\",\r\n yellowDark: \"#e19312\",\r\n};\r\n","/**\n * Function that takes the current window location and returns the app name from it.\n * ---\n * Will return empty string if at the root level of the application\n * Can be called at any time - with or without react, redux or whatever available\n *\n * (and yes it's an extremely simple function but it's needed in multiple places\n * which i've chosen to make this utility-abstraction)\n *\n * @returns {string} The url name of the current app (as described by the url)\n */\n\nexport default () => {\n return window.location.pathname.substring(1).split(\"/\")[0];\n};\n","import req from \"../utilities/request-utility\";\r\nimport { GET_LANGUAGE, GET_LANGUAGE_SUCCESS, GET_LANGUAGE_FAILURE } from \"./actionTypes\";\r\n\r\nexport function getLanguage() {\r\n return function(dispatch, getState) {\r\n dispatch({\r\n type: GET_LANGUAGE\r\n });\r\n\r\n req()(\"/language/\")\r\n .then(({ data }) => {\r\n return dispatch({\r\n type: GET_LANGUAGE_SUCCESS,\r\n payload: data\r\n });\r\n })\r\n .catch(() => {\r\n return dispatch({\r\n type: GET_LANGUAGE_FAILURE\r\n });\r\n });\r\n };\r\n}\r\n","import req from \"../utilities/request-utility\";\r\nimport { getLanguage } from \"../actions/languageActions\";\r\nimport { getPages } from \"../actions/pagesActions\";\r\nimport saveStateToLocalstorage from \"../utilities/save-state-to-local-storage\";\r\n\r\nimport {\r\n SIGN_IN,\r\n SIGN_IN_SUCCESS,\r\n SIGN_IN_FAILURE,\r\n SIGN_IN_FAILURE_HANDLED,\r\n UPDATE_USER_DATA,\r\n CHECK_TOKEN,\r\n CHECK_TOKEN_VALID,\r\n CHECK_TOKEN_INVALID,\r\n CHECK_TOKEN_SERVICE_UNAVAILABLE,\r\n RENEW_TOKEN_SUCCESS,\r\n RENEW_TOKEN_FAILURE,\r\n RENEW_PASSWORD_FAILED,\r\n RENEW_PASSWORD_SUCCESS,\r\n RENEW_PASSWORD_HANDLED,\r\n AD_SIGN_IN_FAILURE,\r\n AD_SIGN_IN_FAILURE_HANDLED\r\n} from \"./actionTypes\";\r\nimport axios from \"axios\";\r\nimport getAppName from \"../utilities/get-app-name\";\r\n\r\nexport function updateUserData(user) {\r\n return dispatch => {\r\n dispatch({\r\n type: UPDATE_USER_DATA,\r\n payload: user\r\n });\r\n };\r\n}\r\n\r\nexport function signInWithAdToken(token) {\r\n return (dispatch, getState) => {\r\n dispatch({ type: SIGN_IN });\r\n\r\n req()\r\n .post(`/auth/sign-in-with-ad-token/`, { token, appName: getAppName() })\r\n .then(({ data }) => {\r\n dispatch({\r\n type: SIGN_IN_SUCCESS,\r\n payload: {\r\n token: data.token,\r\n user: data.user\r\n }\r\n });\r\n\r\n dispatch(getLanguage());\r\n dispatch(getPages());\r\n // Save state (wait for eventloop to not get stale state)\r\n setTimeout(() => saveStateToLocalstorage(getState()), 0);\r\n })\r\n .catch(() => {\r\n dispatch({\r\n type: SIGN_IN_FAILURE\r\n });\r\n dispatch({\r\n type: AD_SIGN_IN_FAILURE\r\n });\r\n });\r\n };\r\n}\r\n\r\nexport function adSignInErrorHandled() {\r\n return {\r\n type: AD_SIGN_IN_FAILURE_HANDLED\r\n };\r\n}\r\n\r\nexport function signIn(credentials) {\r\n return (dispatch, getState) => {\r\n dispatch({ type: SIGN_IN });\r\n\r\n let state = getState();\r\n\r\n // Create login credentials (password and appId will always be the same, login identifier (email or phone) can vary)\r\n let localCredentials = {\r\n password: credentials.password,\r\n applicationId: state.appConfig.appId\r\n };\r\n\r\n if (credentials.phone) localCredentials.phone = credentials.phone;\r\n if (credentials.email) localCredentials.email = credentials.email;\r\n\r\n req()\r\n .post(\"/auth/sign-in\", localCredentials)\r\n .then(({ data }) => {\r\n dispatch({\r\n type: SIGN_IN_SUCCESS,\r\n payload: {\r\n token: data.token,\r\n user: data.user\r\n }\r\n });\r\n dispatch(getLanguage());\r\n dispatch(getPages());\r\n // Save state (wait for eventloop to not get stale state)\r\n setTimeout(() => saveStateToLocalstorage(getState()), 0);\r\n })\r\n .catch(() => {\r\n dispatch({\r\n type: SIGN_IN_FAILURE\r\n });\r\n });\r\n };\r\n}\r\n\r\nexport function signInFailureHandled() {\r\n return {\r\n type: SIGN_IN_FAILURE_HANDLED\r\n };\r\n}\r\n\r\nexport function checkToken() {\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: CHECK_TOKEN\r\n });\r\n\r\n // If there's no token in state, just invalidate it\r\n if (getState().auth.token === null) {\r\n return dispatch({\r\n type: CHECK_TOKEN_INVALID\r\n });\r\n }\r\n\r\n /**\r\n * Why are you not using the req-instance here?\r\n * A good question. For some reason the req-instance returns a nicely formatted\r\n * human-friendly error message when something goes wrong and not the actual response.\r\n * I tried multiple different approaches with no luck so i figured that since this\r\n * solves the issue i'll leave it here.\r\n * This way we can programmatically check why the request failed in the catch block.\r\n * If the request failed due to anything else than the token being invalid, we will\r\n * let the user keep the token (service unavailable, user offline, etc.). And check\r\n * it next time. Worst that can happen is a user having access to date-less pages.\r\n */\r\n\r\n let apiUrl = getState().appConfig.apiUrl;\r\n let token = getState().auth.token;\r\n\r\n axios\r\n .post(`${apiUrl}auth/verify-token`, {}, { headers: { Authorization: `bearer ${token}` } })\r\n .then(res => {\r\n // Token is ok. Get language and pages\r\n dispatch(getLanguage());\r\n dispatch(getPages());\r\n\r\n // After 1 second renew token\r\n setTimeout(() => dispatch(renewToken()), 1000);\r\n\r\n // Dispatch action\r\n return dispatch({\r\n type: CHECK_TOKEN_VALID\r\n });\r\n })\r\n .catch(err => {\r\n // Token is invalid, it's been tampered with or we've changed our secret\r\n if (err.response && err.response.status === 403) {\r\n return dispatch({\r\n type: CHECK_TOKEN_INVALID\r\n });\r\n\r\n // Service to check token isn't available right now for whatever reason\r\n } else {\r\n return dispatch({\r\n type: CHECK_TOKEN_SERVICE_UNAVAILABLE\r\n });\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport function renewToken(callback) {\r\n return (dispatch, getState) => {\r\n // Get token from state\r\n\r\n req()\r\n .post(\"/auth/renew-token\")\r\n .then(({ data }) => {\r\n // Token renewed\r\n dispatch({\r\n type: RENEW_TOKEN_SUCCESS,\r\n payload: data\r\n });\r\n if (callback) callback();\r\n })\r\n .catch(() => {\r\n // Token could no be renewed\r\n dispatch({\r\n type: RENEW_TOKEN_FAILURE\r\n });\r\n if (callback) callback();\r\n });\r\n\r\n // req().post(\"statistics/app/visits\");\r\n };\r\n}\r\n\r\nexport function renewPassword(phone) {\r\n return (dispatch, getState) => {\r\n let state = getState();\r\n req()\r\n .post(\"auth/renew-password\", { phone, applicationId: state.appConfig.appId })\r\n .then(({ data }) => {\r\n return dispatch({\r\n type: RENEW_PASSWORD_SUCCESS\r\n });\r\n })\r\n .catch(() => {\r\n // Call toaster if error happened\r\n return dispatch({\r\n type: RENEW_PASSWORD_FAILED\r\n });\r\n });\r\n };\r\n}\r\n\r\nexport function renewPasswordHandled() {\r\n return {\r\n type: RENEW_PASSWORD_HANDLED\r\n };\r\n}\r\n","import axios from \"axios\";\r\nimport {\r\n GET_APP_CONFIG,\r\n GET_APP_CONFIG_SUCCESS,\r\n GET_APP_CONFIG_FAILURE,\r\n SET_APP_LANGUAGE,\r\n CLEAR_APP_CONFIG_LOGIN_TYPES,\r\n} from \"./actionTypes\";\r\nimport getAppName from \"../utilities/get-app-name\";\r\n\r\nimport setIcons from \"../utilities/set-icons\";\r\n\r\nexport function getAppConfig() {\r\n return async function (dispatch) {\r\n dispatch({\r\n type: GET_APP_CONFIG,\r\n });\r\n\r\n // For semco-apps don't get api-config\r\n let manifestEl = document.getElementById(\"elManifest\");\r\n let apiURL = manifestEl.getAttribute(\"data-base-url\");\r\n\r\n // Special value. You can set base-url to CURRENT_DOMAIN to use the current domain instead of a external domain\r\n if (apiURL === \"CURRENT_DOMAIN\") apiURL = `${window.location.origin}/api/`;\r\n\r\n // Special value for local development\r\n if (process.env.NODE_ENV === \"development\") apiURL = `http://localhost:3030/api/`;\r\n\r\n axios\r\n .get(`${apiURL}apps/config/${getAppName()}`)\r\n .then(({ data }) => {\r\n // Set document title\r\n document.title = data.title;\r\n\r\n // Set icons (favicon and touch-icons)\r\n setIcons(data.icon);\r\n\r\n return dispatch({\r\n type: GET_APP_CONFIG_SUCCESS,\r\n payload: {\r\n appId: data.id,\r\n title: data.title,\r\n primaryColor: data.primaryColor,\r\n apiUrl: apiURL,\r\n icon: data.icon,\r\n frontPageImage: data.frontPageImage,\r\n customerLogo: data.customerLogo,\r\n allowedLoginTypes: data.allowedLoginTypes,\r\n enableHighscore: data.enableHighscore,\r\n },\r\n });\r\n })\r\n .catch(() => {\r\n return dispatch({\r\n type: GET_APP_CONFIG_FAILURE,\r\n });\r\n });\r\n };\r\n}\r\n\r\nexport function setAppLanguage(language) {\r\n return {\r\n type: SET_APP_LANGUAGE,\r\n payload: language,\r\n };\r\n}\r\n\r\nexport function clearLoginTypes() {\r\n return {\r\n type: CLEAR_APP_CONFIG_LOGIN_TYPES,\r\n };\r\n}\r\n","export default function(icon) {\n document.getElementById(\"elAppleTouchIcon\").setAttribute(\"href\", `${icon.baseURL}w_72,h_72/${icon.image}`);\n document.getElementById(\"elAppleTouchIcon72x72\").setAttribute(\"href\", `${icon.baseURL}w_72,h_72/${icon.image}`);\n document.getElementById(\"elAppleTouchIcon114x114\").setAttribute(\"href\", `${icon.baseURL}w_72,h_72/${icon.image}`);\n document.getElementById(\"elFavicon\").setAttribute(\"href\", `${icon.baseURL}w_72,h_72/${icon.image}`);\n}\n","import { OPEN_SIDE_MENU, CLOSE_SIDE_MENU } from \"./actionTypes\";\r\nimport { disableBodyScroll } from \"body-scroll-lock\";\r\n\r\nexport function openSideMenu() {\r\n setTimeout(() => disableBodyScroll(document.querySelector(\".side-menu.scroll-hider\")), 300);\r\n return {\r\n type: OPEN_SIDE_MENU\r\n };\r\n}\r\n\r\nexport function closeSideMenu() {\r\n return {\r\n type: CLOSE_SIDE_MENU\r\n };\r\n}\r\n","import params from \"jquery-param\";\n\nimport { USERS } from \"./actionTypes\";\n\nimport req from \"../utilities/request-utility\";\n\nexport const set = (payload) => ({ type: USERS.SETUSER, payload });\n\nexport const fetch = () => async (dispatch, getState) => {\n try {\n const { user } = getState().auth;\n\n dispatch({ type: USERS.FETCH.REQUEST });\n\n const { data } = await req()(`users?${params({ all: true, masterGroupId: user.masterGroup.id })}`);\n\n dispatch({ type: USERS.FETCH.SUCCESS, payload: data });\n } catch (error) {\n dispatch({ type: USERS.FETCH.FAILURE });\n throw error.response.data;\n }\n};\n","import React from \"react\";\r\nimport {\r\n AccountCardDetailsIcon,\r\n AlertCircleOutlineIcon,\r\n CakeVariantIcon,\r\n CalendarRangeIcon,\r\n ChartLineIcon,\r\n ClipboardCheckOutlineIcon,\r\n CommentMultipleOutlineIcon,\r\n CommentProcessingIcon,\r\n CommentQuestionIcon,\r\n EmoticonHappyIcon,\r\n HeartIcon,\r\n HotelIcon,\r\n HumanMaleIcon,\r\n LightbulbOnOutlineIcon,\r\n NewspaperIcon,\r\n PencilIcon,\r\n PhoneIcon,\r\n RoutesIcon,\r\n SchoolIcon,\r\n SilverwareVariantIcon,\r\n SoccerIcon,\r\n TrophyVariantIcon,\r\n PineTreeIcon,\r\n ChartBarIcon,\r\n BookOpenVariantIcon,\r\n GlassCocktailIcon,\r\n BellOutlineIcon,\r\n CheckIcon,\r\n ClipboardAccountIcon,\r\n AccountGroupIcon,\r\n OfficeBuildingIcon,\r\n GavelIcon,\r\n DiamondIcon,\r\n ShoppingBasketIcon,\r\n TrainIcon,\r\n EyeOutlineIcon,\r\n InformationIcon,\r\n FeatherIcon,\r\n WrenchIcon,\r\n CursorPointerIcon,\r\n FileIcon,\r\n TruckIcon,\r\n HeadphonesIcon,\r\n LoginIcon,\r\n PodcastIcon,\r\n CommentOutlineIcon,\r\n CalendarCheckIcon,\r\n LifePreserverIcon,\r\n FolderIcon,\r\n LockIcon,\r\n SettingsIcon,\r\n StarIcon,\r\n StarOutlineIcon,\r\n BarcodeIcon,\r\n ArchiveIcon\r\n} from \"mdi-react\";\r\n\r\nexport default function(faIconName, styles = null) {\r\n faIconName = faIconName.trim().toLowerCase();\r\n\r\n switch (faIconName) {\r\n case \"fa-exclamation\":\r\n return ;\r\n case \"fa-archive\":\r\n return ;\r\n case \"fa-map-signs\":\r\n return ;\r\n case \"fa-male\":\r\n return ;\r\n case \"fa-newspaper-o\":\r\n return ;\r\n case \"fa-trophy\":\r\n return ;\r\n case \"fa-comments-o\":\r\n case \"fa fa-comments-o\":\r\n return ;\r\n case \"fa-comment-o\":\r\n return ;\r\n case \"fa-smile-o\":\r\n return ;\r\n case \"fa-chart\":\r\n return ;\r\n case \"fa-lightbulb-o\":\r\n return ;\r\n case \"fa-question\":\r\n case \"fa fa-question\":\r\n return ;\r\n case \"fa-book\":\r\n return ;\r\n case \"fa-phone\":\r\n case \"fa fa-phone\":\r\n return ;\r\n case \"fa-cutlery\":\r\n return ;\r\n case \"fa-graduation-cap\":\r\n case \"fa-mortar-borad\":\r\n case \"fa fa-mortar-board\":\r\n return ;\r\n case \"fa-pencil\":\r\n return ;\r\n case \"fa-heart\":\r\n case \"fa fa-heart\":\r\n return ;\r\n case \"fa-id-card-o\":\r\n case \"fa-address-card-o\":\r\n case \"fa-address-card\":\r\n return ;\r\n case \"fa-bed\":\r\n return ;\r\n case \"fa-commenting-o\":\r\n case \"fa fa-commenting\":\r\n return ;\r\n case \"fa-birthday-cake\":\r\n case \"fa fa-birthday-cake\":\r\n return ;\r\n case \"fa-calendar\":\r\n case \"fa fa-calendar\":\r\n return ;\r\n case \"fa-tasks\":\r\n return ;\r\n case \"fa-futbol-o\":\r\n case \"fa-soccer-ball-o\":\r\n return ;\r\n case \"fa-tree\":\r\n return ;\r\n case \"fa-bar-chart\":\r\n return ;\r\n case \"fa-glass\":\r\n case \"fa fa-glass\":\r\n return ;\r\n case \"fa-bell-o\":\r\n case \"fa fa-bell-o\":\r\n return ;\r\n case \"fa-check\":\r\n return ;\r\n case \"fa-id-badge\":\r\n return ;\r\n case \"fa-users\":\r\n return ;\r\n case \"fa-building-o\":\r\n return ;\r\n case \"fa-gavel\":\r\n return ;\r\n case \"fa-diamond\":\r\n return ;\r\n case \"fa-shopping-basket\":\r\n return ;\r\n case \"fa-train\":\r\n return ;\r\n case \"fa-eye\":\r\n return ;\r\n case \"fa-info-circle\":\r\n return ;\r\n case \"fa-envira\":\r\n return ;\r\n case \"fa-wrench\":\r\n return ;\r\n case \"fa-hand-pointer-o\":\r\n case \"fa-hand-pointer\":\r\n return ;\r\n case \"fa-file\":\r\n case \"fa fa-file\":\r\n return ;\r\n case \"fa-truck\":\r\n return ;\r\n case \"fa-headphones\":\r\n return ;\r\n case \"fa-sign-in\":\r\n return ;\r\n case \"fa-podcast\":\r\n return ;\r\n // Der findes ingen Handshake-icon i Material Design derfor har jeg brugt CalendarCheckIcon.\r\n case \"fa-handshake-o\":\r\n return ;\r\n case \"fa-life-ring\":\r\n return ;\r\n case \"fa-folder\":\r\n return ;\r\n case \"fa-lock\":\r\n return ;\r\n case \"fa-gear\":\r\n return ;\r\n case \"fa-star-o\":\r\n return ;\r\n case \"fa-star\":\r\n return ;\r\n case \"fa-line-chart\":\r\n return ;\r\n case \"fa-barcode\":\r\n return ;\r\n default:\r\n return null;\r\n }\r\n}\r\n","import React from 'react';\nimport {\n\tWrenchIcon,\n\tEthernetCableIcon,\n\tBookOpenVariantIcon,\n\tClipboardCheckOutlineIcon,\n\tClipboardTextOutlineIcon,\n\tPowerPlugIcon,\n\tTableSearchIcon,\n\tCalendarClockIcon,\n\tCalendarRemoveIcon,\n\tCalendarQuestionIcon,\n\tMenuSwapOutlineIcon,\n\tTableIcon,\n\tAccountGroupIcon,\n\tDatabaseTickIcon,\n\tClipboardCheckIcon,\n\tPencilBoxOutlineIcon\n} from 'mdi-react';\n\nexport default function (mdiString, styles = null) {\n\tmdiString = mdiString.trim().toLowerCase();\n\n\tswitch (mdiString) {\n\t\tcase 'account-group':\n\t\t\treturn ;\n\t\tcase 'database-import':\n\t\t\treturn ;\n\t\tcase 'table-account':\n\t\t\treturn ;\n\t\tcase 'calendar-clock':\n\t\t\treturn ;\n\t\tcase 'calendar-remove':\n\t\t\treturn ;\n\t\tcase 'calendar-question':\n\t\t\treturn ;\n\t\tcase 'wrench-outline':\n\t\t\treturn ;\n\t\tcase 'ethernet-cable':\n\t\t\treturn ;\n\t\tcase 'power-plug':\n\t\t\treturn ;\n\t\tcase 'book-open-variant':\n\t\t\treturn ;\n\t\tcase 'clipboard-check-outline':\n\t\t\treturn ;\n\t\tcase 'clipboard-text-outline':\n\t\t\treturn ;\n\t\tcase 'table-search':\n\t\t\treturn ;\n\t\tcase 'menu-swap-outline':\n\t\t\treturn ;\n\t\tcase 'clipboard-check':\n\t\t\treturn ;\n\t\tcase 'pen-outline':\n\t\t\treturn ;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import faIconConverter from \"./fa-to-mdi-converter\";\nimport mdiIconConverter from \"./mdi-string-to-mdi-icon-converter\";\n\nexport default (iconString, styles = null) => {\n /**\n * Delegator function to determine wether an icon-string comes from Font-awesome or material design icons\n * ---------------\n * @param iconString [string] string describing the icon. If the first to characters of the string is \"fa\"\n * it will be treated a font-awesome and converted to a supported mdi-icon\n * @return [reactComponent] or [null]\n */\n\n\n if (iconString.substring(0, 2).toLowerCase() === \"fa\") {\n return faIconConverter(iconString, styles);\n } else {\n return mdiIconConverter(iconString, styles);\n }\n};\n","import getAppName from \"./get-app-name\";\n\nexport default callback => {\n try {\n localStorage.removeItem(`${getAppName()}-state`);\n callback(null, \"ok\");\n } catch (err) {\n callback(err, \"error\");\n }\n};\n","import React from \"react\";\nimport { css } from \"emotion\";\n\nimport colors from \"../../style/colors\";\nimport common from \"../../style/common\";\nimport PropTypes from \"prop-types\";\n\n/** Small components to display the unread/unhandled elements for the specific user since their last interaction,\n * this could for example be: display a different number for notfications over 50 */\nconst Notification = props => (\n \n {props.notifications > 99 ? \"99+\" : props.notifications}\n \n);\nconst style = (primaryColor, notifications) => css`\n background-color: ${notifications > 0 ? colors.red : colors.white};\n border-radius: 30px;\n height: 21px;\n text-align: center;\n color: ${colors.white};\n display: inline-flex;\n justify-content: center;\n align-items: center;\n padding: 0.5rem;\n font-size: 0.9rem;\n font-weight: 700;\n font-family: ${common.fontStack};\n transform: scale(1);\n opacity: 1;\n transition: transform 500ms ease, opacity 500ms ease;\n\n &.hide {\n transform: scale(0);\n opacity: 0;\n transition: transform 500ms ease, opacity 500ms ease;\n }\n`;\n\nNotification.propTypes = {\n /** override styles in your current implementation */\n style: PropTypes.object,\n /** Numerical value for the number of elements not seen/activated by the user */\n notifications: PropTypes.number,\n /** The applications primary color */\n primaryColor: PropTypes.string\n};\nexport default Notification;\n","import React, { useState, useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { sortBy } from \"lodash\";\nimport { format, subDays } from \"date-fns\";\nimport { Alert, Row, Col, Button, Skeleton, Collapse, List, Statistic } from \"antd\";\nimport { CheckboxMarkedIcon, TimerSandEmptyIcon } from \"mdi-react\";\nimport params from \"jquery-param\";\n\nimport colors from \"../../style/colors\";\n\nimport req from \"../../utilities/request-utility\";\nimport Modal from \"antd/lib/modal/Modal\";\n\nconst CorrectionsAlert = ({ pages }) => {\n const [modal, toggleModal] = useState(false);\n const [corrections, setCorrections] = useState([]);\n const CorrectionsProps = pages.pages.find((d) => d.module === \"SemcoTimeCorrections\") || {};\n\n const selectedUser = useSelector((s) => s.users.selectedUser);\n\n useEffect(() => {\n (function async() {\n const toDate = format(new Date(), \"yyyyMMdd\");\n const fromDate = format(subDays(new Date(), 90), \"yyyyMMdd\");\n\n req()(`semcotime/corrections?${params({ externalId: selectedUser, fromDate, toDate })}`)\n .then(({ data }) => {\n let unreadCorrections = [];\n Object.keys(data).map((key) => {\n if (data[key].notifications !== 0) unreadCorrections = [...unreadCorrections, { date: key, ...data[key] }];\n });\n setCorrections(sortBy(unreadCorrections, \"date\"));\n })\n .catch((err) => {\n console.log(\"Error: \", err);\n });\n })();\n }, [JSON.stringify(corrections)]);\n\n return (\n <>\n \n \n toggleModal(!modal)} size=\"small\" type=\"text\">\n Show All\n \n }\n message={`You have ${CorrectionsProps.notifications} new corrections`}\n type=\"info\"\n showIcon\n />\n \n \n toggleModal(!modal)} title=\"Corrections\" footer={null} width={\"30vw\"}>\n {corrections.length === 0 && (\n <>\n \n \n \n \n )}\n\n {corrections.length !== 0 && (\n <>\n {corrections.map((d, index) => (\n \n \n (\n \n \n ) : (\n \n )\n }\n title={registration.reportCodeDescription}\n description={\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n }\n />\n \n )}\n />\n \n \n ))}\n \n )}\n \n \n );\n};\n\nexport default CorrectionsAlert;\n","import React, { memo, useState, useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport tinycolor from \"tinycolor2\";\r\nimport { css } from \"emotion\";\r\nimport { isEqual } from \"lodash\";\r\n\r\n// Actions\r\nimport { openSideMenu } from \"../actions/sideMenuActions\";\r\nimport { showModalPage } from \"../actions/uiActions\";\r\nimport { getPages } from \"../actions/pagesActions\";\r\nimport { fetch as fetchUsers, set as setSelectedUser } from \"../actions/userActions\";\r\nimport StatusBox from \"./ui/StatusBox\";\r\n\r\n// Style\r\nimport colors from \"../style/colors\";\r\n\r\n// Utilities\r\nimport iconConverter from \"../utilities/icon-converter\";\r\nimport linkPathCreator from \"../utilities/get-link-path-from-page-object\";\r\nimport pageNavigator from \"../utilities/page-navigator\";\r\nimport clearLocalStorage from \"../utilities/clear-local-storage\";\r\nimport getAppName from \"../utilities/get-app-name\";\r\n\r\n// Components\r\nimport Page from \"../components/ui/Page\";\r\nimport TopBar from \"../components/ui/TopBar\";\r\nimport SearchInput from \"../components/ui/SearchInput\";\r\nimport Notification from \"./ui/Notification\";\r\nimport Dropdown from \"./ui/DropDown\";\r\nimport CorrectionsAlert from \"./semco-time/CorrectionAlert\";\r\n\r\n// Icons\r\nimport { MenuIcon, SearchIcon, CheckboxBlankCircleIcon } from \"mdi-react\";\r\n\r\nconst FrontPage = () => {\r\n const [clickCount, setClickCount] = useState(0);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const pages = useSelector(({ pages }) => pages, isEqual);\r\n const project = useSelector(({ semcompletion }) => semcompletion.selectedProject, isEqual);\r\n const lang = useSelector(({ language }) => language.language, isEqual);\r\n const userName = useSelector(({ auth }) => auth.user.name, isEqual);\r\n const userExternalId = useSelector(({ auth }) => auth.user.externalId, isEqual);\r\n const userList = useSelector(({ users }) => users.lists, isEqual);\r\n const userListLoading = useSelector(({ users }) => users.loading, isEqual);\r\n const selectedUser = useSelector(({ users }) => users.selectedUser, isEqual);\r\n const isTimeAppAdmin = useSelector(({ auth }) => auth.user.isTimeAppAdmin, isEqual);\r\n const appConfig = useSelector(({ appConfig }) => appConfig, isEqual);\r\n\r\n // This is set because of notifications - when a user clicks on a module, the pages need to update..\r\n useEffect(() => {\r\n dispatch(getPages());\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (isTimeAppAdmin) {\r\n if (userList.length === 0) dispatch(fetchUsers());\r\n else if (userList.length !== 0 && !selectedUser) dispatch(setSelectedUser(userExternalId));\r\n }\r\n }, [isTimeAppAdmin, userList.length]);\r\n\r\n useEffect(() => {\r\n // Toggles dialog if name is pressed 15 times\r\n if (clickCount === 15) {\r\n if (window.confirm(\"You are about to reset the app. This will log you out. Are you sure you want to continue?\")) {\r\n clearLocalStorage((err) => {\r\n window.location = window.location.origin + \"/\" + getAppName();\r\n });\r\n } else {\r\n setClickCount(0);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [clickCount]);\r\n\r\n let semcoTimeCorrectionsNotification = false;\r\n if (pages.pages) {\r\n const semcoTimeCorrectionsNotificationData = pages.pages.find((d) => d.module === \"SemcoTimeCorrections\");\r\n semcoTimeCorrectionsNotification = semcoTimeCorrectionsNotificationData\r\n ? semcoTimeCorrectionsNotificationData.notifications !== \"0\"\r\n ? true\r\n : false\r\n : false;\r\n }\r\n\r\n const currentUser = userList.length !== 0 ? userList.find((d) => d.externalId === selectedUser) : null;\r\n\r\n return (\r\n \r\n {/* Topbar */}\r\n dispatch(openSideMenu())} />}\r\n title={\r\n appConfig &&\r\n appConfig.customerLogo && (\r\n {`Logo\r\n )\r\n }\r\n atFrontPage={true}\r\n actionsRight={[\r\n {\r\n dispatch(\r\n showModalPage({\r\n title: \"Search\",\r\n content: () => ,\r\n })\r\n );\r\n }}\r\n />,\r\n ]}\r\n />\r\n\r\n {/* Header */}\r\n
setClickCount(clickCount + 1)}>\r\n

\r\n {lang.hello}, {currentUser ? currentUser.name : userName}\r\n {!!project.number && (\r\n <>\r\n
\r\n \r\n {project.number} - {project.description}\r\n \r\n \r\n )}\r\n

\r\n {isTimeAppAdmin && (\r\n dispatch(setSelectedUser(e.target.value))}\r\n options={userList.map((d) => ({ label: d.name, value: d.externalId }))}\r\n changeGetPopupContainer={false}\r\n placeholder=\"Select an employee\"\r\n style={{ width: \"30%\" }}\r\n value={selectedUser}\r\n />\r\n )}\r\n
\r\n {semcoTimeCorrectionsNotification && }\r\n\r\n {/* Loading -> \"Skeleton\" icons with blinking animations */}\r\n {pages.pages.length === 0 && pages.loading && !pages.error && (\r\n
\r\n {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].map((num, index) => (\r\n
\r\n \r\n
\r\n
\r\n ))}\r\n
\r\n )}\r\n\r\n {/* App misconfigured */}\r\n {pages.pages.length === 0 && !pages.loading && !pages.error && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {/* Error getting pages */}\r\n {pages.pages.length === 0 && !pages.loading && pages.error && (\r\n \r\n )}\r\n\r\n {/* Pages present */}\r\n {pages.pages.length > 0 && !pages.error && (\r\n
\r\n {pages.pages\r\n .filter((el) => el.showAtFrontPage)\r\n .map((page, index) => (\r\n pageNavigator(linkPathCreator(page, \"absolute\"), \"forward\")}\r\n className={icons()}\r\n key={index}\r\n >\r\n {iconConverter(page.icon)}\r\n {page.title}\r\n {page.notifications > 0 && (\r\n \r\n )}\r\n
\r\n ))}\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nconst header = () => css`\r\n flex: 0 0 70px;\r\n display: flex;\r\n z-index: 0;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: column;\r\n box-shadow: 0 6px 6px rgba(0, 0, 0, 0.15);\r\n`;\r\n\r\nconst iconsContainer = (appConfig) => css`\r\n flex: 0 1 100%;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n background-image: url(${getBackgroundImageURL(appConfig)});\r\n background-size: cover;\r\n background-position: center;\r\n background-color: ${appConfig.primaryColor};\r\n`;\r\n\r\nconst icons = () => css`\r\n position: relative;\r\n display: inline-flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n width: 33.333%;\r\n height: 25%;\r\n padding: 0.5rem;\r\n vertical-align: top;\r\n font-size: 0.8rem;\r\n color: ${colors.white};\r\n text-align: center;\r\n text-decoration: none;\r\n text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);\r\n border-bottom: 1px solid ${tinycolor(colors.white).setAlpha(0.2).toRgbString()};\r\n\r\n /* First column */\r\n &:nth-child(3n + 1) {\r\n border-right: 1px solid ${tinycolor(colors.white).setAlpha(0.2).toRgbString()};\r\n }\r\n /* Second column */\r\n &:nth-child(3n + 2) {\r\n border-right: 1px solid ${tinycolor(colors.white).setAlpha(0.2).toRgbString()};\r\n }\r\n\r\n svg {\r\n margin-bottom: 0.5rem;\r\n width: 2rem;\r\n height: 2rem;\r\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\r\n }\r\n\r\n svg.placeholder-icon {\r\n width: 2.25rem;\r\n height: 2.25rem;\r\n animation: blink 1.5s ease infinite;\r\n opacity: 0.3;\r\n }\r\n\r\n .fake-title {\r\n width: 65px;\r\n height: 7px;\r\n border-radius: 5px;\r\n margin-top: 7px;\r\n background-color: rgba(255, 255, 255, 0.6);\r\n animation: blink 1.5s ease infinite;\r\n opacity: 0.3;\r\n }\r\n\r\n @keyframes blink {\r\n 0% {\r\n opacity: 0.3;\r\n }\r\n 35% {\r\n opacity: 0.3;\r\n }\r\n 55% {\r\n opacity: 0.7;\r\n }\r\n 100% {\r\n opacity: 0.3;\r\n }\r\n }\r\n`;\r\n\r\nconst getBackgroundImageURL = (appConfig) =>\r\n `${appConfig.frontPageImage.baseURL}b_black,o_50,h_800,q_auto,f_auto/${appConfig.frontPageImage.image}`;\r\n\r\nexport default memo(FrontPage);\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar SvgIosAddToHomescreenIcon = function SvgIosAddToHomescreenIcon(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 24 24\",\n style: {\n enableBackground: \"new 0 0 24 24\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n style: {\n fill: \"#717079\"\n },\n d: \"M18.8,23.2H5.2c-1.4,0-2.6-1.2-2.6-2.6V6.9c0-1.4,1.2-2.6,2.6-2.6h13.7c1.4,0,2.6,1.2,2.6,2.6v13.7 C21.4,22,20.3,23.2,18.8,23.2z\"\n }), /*#__PURE__*/React.createElement(\"line\", {\n style: {\n fill: \"none\"\n },\n x1: 12,\n y1: 10.1,\n x2: 12,\n y2: 17.4\n }), /*#__PURE__*/React.createElement(\"line\", {\n style: {\n fill: \"none\",\n stroke: \"#FFFFFF\",\n strokeWidth: 1.3487,\n strokeLinecap: \"round\",\n strokeMiterlimit: 10\n },\n x1: 12,\n y1: 10.1,\n x2: 12,\n y2: 17.4\n }), /*#__PURE__*/React.createElement(\"line\", {\n style: {\n fill: \"none\",\n stroke: \"#FFFFFF\",\n strokeWidth: 1.3487,\n strokeLinecap: \"round\",\n strokeMiterlimit: 10\n },\n x1: 15.7,\n y1: 13.8,\n x2: 8.3,\n y2: 13.8\n })));\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIosAddToHomescreenIcon, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ios-add-to-homescreen-icon.e2d84667.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar SvgIosShareIcon = function SvgIosShareIcon(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 24 24\",\n style: {\n enableBackground: \"new 0 0 24 24\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"polyline\", {\n style: {\n fill: \"none\",\n stroke: \"#2782B6\",\n strokeWidth: 1.2229,\n strokeMiterlimit: 10\n },\n points: \"14.2,7.1 19.5,7.1 19.5,22.2 4.5,22.2 4.5,7.1 9.8,7.1 \"\n }), /*#__PURE__*/React.createElement(\"line\", {\n style: {\n fill: \"none\",\n stroke: \"#2782B6\",\n strokeWidth: 1.2229,\n strokeMiterlimit: 10\n },\n x1: 12,\n y1: 14.7,\n x2: 12,\n y2: 1.2\n }), /*#__PURE__*/React.createElement(\"polyline\", {\n style: {\n fill: \"none\",\n stroke: \"#2782B6\",\n strokeWidth: 1.2229,\n strokeMiterlimit: 10\n },\n points: \"9,4.1 12,1.1 15,4.1 \"\n })));\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIosShareIcon, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ios-share-icon.c684a2a2.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\nimport Page from \"./Page\";\nimport InlineSpinner from \"./InlineSpinner\";\n\nfunction LoadingPage(props) {\n return (\n \n \n \n );\n}\n\nexport default LoadingPage;\n","import React, { useState, useEffect, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { css } from \"emotion\";\nimport queryString from \"query-string\";\nimport \"../../style/installation-flow-styles.css\";\nimport req from \"../../utilities/request-utility\";\n\n//css\nimport colors from \"../../style/colors\";\n\n// icons\nimport { PlayCircleIcon, LifebuoyIcon, AndroidIcon, EarthIcon, AppleIcon, MoreVertIcon } from \"mdi-react\";\nimport { ReactComponent as IosAddToHomeScreenIcon } from \"./ios-add-to-homescreen-icon.svg\";\nimport { ReactComponent as IosShareIcon } from \"./ios-share-icon.svg\";\n\n// components\nimport Button from \"../ui/Button\";\nimport StatusBox from \"../ui/StatusBox\";\nimport LoadingPage from \"../ui/LoadingPage\";\n\n// Media\nimport installationVideoIOSEN from \"./installation-video-ios-EN.mp4\";\nimport installationVideoIOSDA from \"./installation-video-ios-DA.mp4\";\nimport installationVideoAndroidEN from \"./installation-video-android-EN.mp4\";\nimport installationVideoAndroidDA from \"./installation-video-android-DA.mp4\";\n\n/**\n * Installation flow component. Shows how to install the app.\n *\n * The component will respond to certain query-params and as these are a bit difficult to document\n * otherwise they are listed here:\n * - `lang` {String} sets the users language. examples: \"da\", \"en\", \"se\", \"fi\" etc.\n * - `user` {String} sets the users name. examples: \"John\", \"Jens\", \"Rikke\"\n * - `showInstallationScreen` {Boolean} if true, the app will show the installation screen at startup instead of the frontpage\n *\n */\n\nconst InstallationFlow = (props) => {\n // User name (can be passed as a queryString since user isn't logged in)\n async function getLang() {\n try {\n let { data } = await req()(`language/installation-flow/${userLanguage}`);\n setLang(data);\n // requestAnimationFrame is used to prevent the app from crashing.\n // This way the language is defined and then the we weait for at least\n // a single event-loop cycle before continuing.\n requestAnimationFrame(() => {\n setIsReady(true);\n });\n } catch (err) {\n setIsReady(true);\n setError(true);\n }\n }\n\n // State variables\n // Extracts the user agent (can be saved in different places)\n let userAgent = navigator.userAgent || navigator.vendor || window.opera;\n // Sets isIOS for ipad iphone and ipod\n let [isIOS, setIsIOS] = useState(userAgent.match(/iPad|iPhone|iPod/) !== null ? true : false);\n // Sets isAndroid for android\n let [isAndroid, setIsAndroid] = useState(userAgent.match(/Android/) !== null ? true : false);\n // User name used for greeting (\"Hi ${user}!\")\n let [user, setUser] = useState(\"\");\n // Defines the users current language (\"da\", \"en\", \"fi\", etc)\n let [userLanguage, setUserLanguage] = useState(\"\");\n // Language variables (lang.hi -> \"Hi\" | \"Hej\" | \"Hey\")\n let [lang, setLang] = useState({});\n // Controls the inital spinner (can be retoggled if language changes)\n let [isReady, setIsReady] = useState(false);\n let [error, setError] = useState(false);\n // controls wether or not the extended guidance is shown\n let [extended, setExtended] = useState(false);\n\n // Parse query-strings\n useEffect(() => {\n // Get potential user from query-string\n let queryStrings = queryString.parse(window.location.search);\n // Set user\n if (queryStrings.user) setUser(queryStrings.user);\n // set language\n if (queryStrings.lang) {\n setUserLanguage(queryStrings.lang);\n } else {\n setUserLanguage(\"en\");\n }\n }, []);\n\n // Get the language-variables\n useEffect(() => {\n if (userLanguage) {\n setIsReady(false);\n getLang();\n }\n // eslint-disable-next-line\n }, [userLanguage]);\n\n /** Takes a string and replaces the location string with a react element\n * @param {String} string\n * @param {String} location\n * @param {ReactComponent} icon\n * @returns {ReactComponent}\n * @example\n * let string = \"some string {{placeholder}} rest of string\";\n * let location = \"{{placeholder}}\";\n * let icon = \n *\n * insertIcon(string, location, icon)\n * -> (<>some string rest of string)\n */\n const insertIcon = (string, location, icon) => (\n <>\n {string.split(location)[0]}\n {icon}\n {string.split(location)[1]}\n \n );\n\n const insertIcons = (string, locations, icons) => (\n <>\n {string.split(locations).map((part, i) => {\n return (\n \n {part}\n {icons.shift()}\n \n );\n })}\n \n );\n\n // Show loading page while content isn't ready\n if (!isReady && !error && (!lang || !props.appConfig)) {\n return ;\n }\n\n return (\n
\n {isReady && error && (\n /* This is intentionally not translated as the error could be that language-variables weren't fetched */\n \n )}\n\n {isReady && !error && lang && props.appConfig && (\n
\n {/* Hi and welcome-text */}\n

\n {lang.installationHello} {user} 👋\n

\n

\n {lang.welcomeTo__placeholder__app.replace(/{{placeholder}}/g, props.appConfig.title)}\n

\n\n {/* Installation instructions */}\n\n {/* (1) */}\n
\n
1
\n

\n {isIOS &&\n insertIcon(\n lang.iosClickOn__placeholderShareIcon__,\n \"{{placeholder-share-icon}}\",\n \n )}\n {isAndroid &&\n insertIcon(\n lang.androidClickOn__placeholderMoreOptionsIcon__,\n \"{{placeholder-more-options-icon}}\",\n \n )}\n

\n
\n\n {/* (2) */}\n
\n
2
\n

\n {isIOS &&\n insertIcon(\n lang.iosChoose__placeholderAddToHomescreenIcon__,\n \"{{placeholder-add-to-homescreen-icon}}\",\n \n )}\n {isAndroid && lang.androidChooseAddToHomescreen}\n

\n
\n\n {/* (3) */}\n
\n
3
\n

{isIOS ? lang.iosOpenTheAppFromYourHomescreen : lang.androidOpentheAppFromYourHomescreen}

\n
\n
\n )}\n\n {/* Need help / more info */}\n {isReady && !error && !extended && (\n
\n
\n

setTimeout(() => setExtended(!extended), 200)}>\n \n {lang.needHelp}\n

\n
\n )}\n\n {/* Extended guide */}\n {isReady && !error && extended && (\n <>\n
\n
\n

{lang.extendedInstallationGuide}

\n

setTimeout(() => setExtended(!extended), 200)}>\n {lang.hideHelp}\n

\n\n \n\n {/* Button list */}\n }\n buttonType=\"primary\"\n onClick={() => document.querySelector(\"video\").play()}\n >\n {lang.seeInstallationVideo}\n \n }\n buttonType=\"secondary\"\n onClick={() => (userLanguage === \"en\" ? setUserLanguage(\"da\") : setUserLanguage(\"en\"))}\n >\n {lang.changeGuideTo__placeholder__.replace(\"{{placeholder}}\", userLanguage === \"en\" ? \"danish\" : \"english\")}\n \n : }\n buttonType=\"secondary\"\n onClick={() => {\n setIsIOS(!isIOS);\n setIsAndroid(!isAndroid);\n }}\n >\n {isIOS ? lang.seeAndroidGuide : lang.seeIOSGuide}\n \n\n
    \n {isIOS && (\n <>\n

    {lang.commonProblems}

    \n
  • \n

    \n {insertIcon(\n lang.cantFind__placeholder__icon,\n \"{{placeholder}}\",\n \n )}\n

    \n

    {lang.cantFindShareIconContent}

    \n
  • \n
  • \n

    \n {insertIcon(\n lang.cantFind__placeholder__icon,\n \"{{placeholder}}\",\n \n )}\n

    \n

    \n {insertIcons(\n lang.cantFindAddToHomescreenIconContent__placeholderShareIcon____placeholderAddToHomescreenIcon__,\n /{{placeholder-share-icon}}|{{placeholder-add-to-homescreen-icon}}/,\n [\n ,\n ,\n ]\n )}\n

    \n
  • \n
  • \n

    I do not speak danish

    \n

    Scroll up and find the \"Change guide to english\" button above.

    \n
  • \n
  • \n

    {lang.dontHaveAnIphone}

    \n

    {lang.dontHaveAnIphoneContent}

    \n
  • \n
  • \n

    {lang.alreadyAddedTheApp}

    \n

    {lang.alreadyAddedTheAppContent}

    \n
  • \n \n )}\n
\n
\n\n {/*
\n

\n {isIOS && phrases.device.ios[lang].commonProblemsHeadline}\n {isAndroid && phrases.device.android[lang].commonProblemsHeadline}\n

\n
    \n
  • \n

    \n {isIOS && phrases.device.ios[lang].commonProblenmsbullet1Headline}\n {isAndroid && phrases.device.android[lang].phrase1}\n

    \n

    \n {isIOS && phrases.device.ios[lang].commonProblenmsbullet1text}\n {isAndroid && phrases.device.android[lang].phrase1}\n

    \n
  • \n
  • \n

    \n {isIOS && phrases.device.ios[lang].commonProblenmsbullet2Headline}\n {isAndroid && phrases.device.android[lang].phrase1}\n

    \n

    \n {isIOS && phrases.device.ios[lang].commonProblenmsbullet2text}\n {isAndroid && phrases.device.android[lang].phrase1}\n

    \n
  • \n
  • \n

    \n {isIOS && phrases.device.ios[lang].commonProblenmsbullet3Headline}\n {isAndroid && phrases.device.android[lang].phrase1}\n

    \n

    \n {isIOS && phrases.device.ios[lang].commonProblenmsbullet3text}\n {isAndroid && phrases.device.android[lang].phrase1}\n

    \n
  • \n
  • \n

    \n {isIOS && phrases.device.ios[lang].commonProblenmsbullet4Headline}\n {isAndroid && phrases.device.android[lang].phrase1}\n

    \n

    \n {isIOS && phrases.device.ios[lang].commonProblenmsbullet4text}\n {isAndroid && phrases.device.android[lang].phrase1}\n

    \n
  • \n
\n
*/}\n \n )}\n

props.onCloseGuide()}>\n {lang.closeGuide}\n

\n
\n );\n};\n\nconst paddingSides = 1.5;\n\nconst componentStyle = (props) => css`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n min-height: 110vh; /* Appr. viewport height in a mobile browser with toolbars visible */\n padding: 2rem ${paddingSides}rem 0 ${paddingSides}rem;\n\n .text-body {\n margin: 2rem;\n }\n .main-content {\n flex: 1 0 90%;\n }\n\n .need-help-container {\n margin-bottom: 4.5rem;\n }\n\n .extended-content {\n margin-top: 4rem;\n\n h2 {\n text-align: center;\n }\n\n ul {\n .header {\n font-weight: 700;\n margin-bottom: 0.5rem;\n color: ${colors.black};\n }\n\n li {\n margin-bottom: 2rem;\n }\n\n p {\n color: ${colors.darkGrey};\n }\n }\n }\n\n /* General \"global\" styles */\n svg {\n margin: 0 0.5rem 0 0.5rem;\n vertical-align: sub;\n }\n\n button {\n margin-bottom: 0.75rem;\n }\n\n svg.inline-svg-icon {\n display: inline-block;\n width: 1.5rem;\n height: 1.5rem;\n margin: 0;\n vertical-align: center;\n }\n\n .list-element {\n display: flex;\n align-items: center;\n margin-bottom: 1.5rem;\n\n .circled-number {\n margin-right: 1rem;\n border: 1px solid ${colors.midGrey};\n border-radius: -0.2rem;\n border-radius: 50%;\n text-align: center;\n min-width: 30px;\n height: 30px;\n color: ${props.appConfig.primaryColor};\n font-weight: bold;\n font-size: 1.2rem;\n margin-top: 0.2rem;\n }\n\n p {\n padding: 0;\n }\n }\n\n .seperator {\n margin: 0 -${paddingSides}rem;\n height: 1px;\n background-color: ${colors.midGrey};\n }\n\n .need-help {\n text-align: center;\n color: ${colors.darkGrey};\n padding: 0.5rem 1rem;\n margin: 0.5rem 0;\n text-decoration: underline;\n\n svg {\n margin-bottom: -2px;\n }\n\n &:active {\n background-color: ${colors.lightGrey};\n border-radius: 5px;\n }\n }\n`;\n\nconst mapStateToProps = (state) => ({\n userName: state.auth.user.name,\n lang: state.language.language,\n appConfig: state.appConfig,\n});\n\nexport default connect(mapStateToProps)(InstallationFlow);\n","/** @namespace breakpoints */\nexport default {\n xs: 600,\n md: 750,\n lg: 960,\n xl: 1200\n};\n","import React from \"react\";\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport { CSSTransition } from \"react-transition-group\";\nimport tinycolor from \"tinycolor2\";\nimport { durations } from \"../../config/animations\";\n\nconst Overlay = props => {\n const { active, onClick } = props;\n\n return (\n \n
\n \n );\n};\n\nconst componentStyles = props => css`\n will-change: auto;\n position: fixed;\n /* z-index: 3; */\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background-color: ${tinycolor(colors.black)\n .setAlpha(0.7)\n .toString()};\n\n &.overlay-enter {\n opacity: 0;\n }\n &.overlay-enter-active {\n opacity: 1;\n transition: opacity ${durations.normal}ms;\n }\n &.overlay-exit {\n opacity: 1;\n }\n &.overlay-exit-active {\n opacity: 0;\n transition: opacity ${durations.normal}ms;\n }\n`;\n\nexport default Overlay;\n","// Libs\r\nimport React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport { hideContextMenu } from \"../../actions/uiActions\";\r\nimport { css } from \"emotion\";\r\nimport PropTypes from \"prop-types\";\r\nimport { CSSTransition } from \"react-transition-group\";\r\n\r\n// Styles\r\nimport colors from \"../../style/colors\";\r\nimport { durations } from \"../../config/animations\";\r\nimport breakpoints from \"../../config/breakpoints\";\r\n\r\n// Icons\r\nimport { CloseIcon } from \"mdi-react\";\r\nimport Overlay from \"./Overlay\";\r\n\r\n/**\r\n * Component is implemented through a redux action, this means you should NOT implement this component directly but rather implement is as:\r\n * ```\r\n * this.props.showContextMenu([\r\n {\r\n icon: ,\r\n title: \"Rediger\",\r\n callback: () => {}\r\n },\r\n {\r\n icon: ,\r\n title: \"Slet registrering\",\r\n callback: () => {}\r\n }\r\n ]);\r\n * ```\r\n * import the needed action from ./actions\r\n * And remember to do this on the implementing component\r\n * ```\r\n * const mapDispatchToProps = dispatch => ({\r\n * showContextMenu: bindActionCreators(showContextMenu, dispatch)\r\n * });\r\n * ```\r\n * showContext takes an Array of the options you want to have displayed + a cancel option. so you dont need to write that.\r\n * To write an action for the context menu follow the structure above:\r\n * ```\r\n * {\r\n * icon: the icon you want to be displayed to the left of the title\r\n * title: the text on the element\r\n * callback: the function to execute when the element is clicked, NOTE: don't forget () =>, as this prevents the function from executing on component mount.\r\n * }\r\n * ```\r\n */\r\nconst ContextMenu = props => {\r\n let { active, actions, defaultActionTitle, closeOnActionCallback } = props.contextMenu;\r\n let { lang } = props;\r\n return (\r\n
\r\n \r\n \r\n
\r\n {actions.map((action, actionIndex) => (\r\n {\r\n e.stopPropagation();\r\n action.callback();\r\n if (closeOnActionCallback !== false) props.hideContextMenu();\r\n }}\r\n >\r\n {action.icon} {action.title}\r\n {actionIndex !== actions.length - 1 &&
}\r\n
\r\n ))}\r\n\r\n
\r\n {defaultActionTitle || lang.cancel}\r\n
\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nconst componentStyles = () => css`\r\n .context-menu {\r\n position: fixed;\r\n bottom: 0px; /* Component enters with a spring animation, and needs extra padding in bottom */\r\n padding-bottom: 0px;\r\n left: 0;\r\n /* z-index: 6; */\r\n width: 100%;\r\n background-color: ${colors.white};\r\n will-change: auto;\r\n\r\n @media screen and (min-width: ${breakpoints.md}px) {\r\n width: ${breakpoints.md}px;\r\n bottom: 1rem;\r\n border-radius: 6px;\r\n left: 0;\r\n right: 0;\r\n margin-left: auto;\r\n margin-right: auto;\r\n overflow: hidden;\r\n }\r\n\r\n &.context-menu-enter {\r\n opacity: 0;\r\n transform: translate3d(0, 100%, 0);\r\n }\r\n &.context-menu-enter-active {\r\n transform: translate3d(0, 0%, 0);\r\n opacity: 1;\r\n transition: transform 190ms ease, opacity ${durations.normal}ms;\r\n }\r\n &.context-menu-exit {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n &.context-menu-exit-active {\r\n opacity: 0;\r\n transform: translate3d(0, 100%, 0);\r\n transition: transform ${durations.normal}ms ease, opacity ${durations.normal}ms;\r\n }\r\n\r\n .action {\r\n padding: 0.75rem;\r\n display: flex;\r\n position: relative;\r\n transition: ${durations.normal}ms;\r\n transition-delay: 400ms;\r\n\r\n &:active {\r\n background-color: ${colors.lightGrey};\r\n transition: 80ms;\r\n }\r\n\r\n &:hover {\r\n cursor: pointer;\r\n }\r\n\r\n svg {\r\n padding: 0.25rem;\r\n fill: ${colors.darkGrey};\r\n margin-right: 0.5rem;\r\n }\r\n\r\n .seperator {\r\n position: absolute;\r\n height: 1px;\r\n bottom: 0;\r\n right: 0;\r\n background-color: ${colors.midGrey};\r\n width: 95%;\r\n }\r\n\r\n &.default-action {\r\n border-top: 1px ${colors.midGrey} solid;\r\n }\r\n }\r\n }\r\n`;\r\n\r\nContextMenu.propTypes = {\r\n /** Language object from redux, needed for easy translated text elements */\r\n lang: PropTypes.object\r\n};\r\nconst mapStateToProps = state => ({\r\n contextMenu: state.ui.contextMenu,\r\n lang: state.language.language\r\n});\r\nconst mapDispatchToProps = dispatch => ({\r\n hideContextMenu: bindActionCreators(hideContextMenu, dispatch)\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenu);\r\n","export default {\n phone: \"phone\",\n email: \"email\",\n ad: \"ad\"\n};\n","import React from \"react\";\nimport { LockIcon } from \"mdi-react\";\nimport { css } from \"emotion\";\n\nconst PhoneLogin = ({ onClick, password = \"\", active, hide }) => {\n return (\n
\n \n
\n \n \n \n \n
\n\n
\n
\n );\n};\n\nconst componentStyles = () => css`\n &.hide {\n opacity: 0;\n max-height: 0px;\n transition: opacity 400ms ease, max-height 400ms ease;\n }\n\n opacity: 1;\n max-height: 60px;\n transition: opacity 400ms ease, max-height 400ms ease;\n`;\n\nexport default PhoneLogin;\n","import React from \"react\";\nimport { css } from \"emotion\";\nimport { BackspaceIcon } from \"mdi-react\";\nimport colors from \"../../style/colors\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { durations } from \"../../config/animations\";\n\nconst Numpad = props => {\n const { active } = props;\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
props.onKeyPress(\"1\")}>\n 1\n props.onKeyPress(\"2\")}>\n 2\n props.onKeyPress(\"3\")}>\n 3\n
props.onKeyPress(\"4\")}>\n 4\n props.onKeyPress(\"5\")}>\n 5\n props.onKeyPress(\"6\")}>\n 6\n
props.onKeyPress(\"7\")}>\n 7\n props.onKeyPress(\"8\")}>\n 8\n props.onKeyPress(\"9\")}>\n 9\n
props.onKeyPress(\"delete\")}>\n \n props.onKeyPress(\"0\")}>\n 0\n props.onKeyPress(\"+\")}>\n +\n
\n
\n );\n};\n\nconst componentStyle = () => css`\n overflow: hidden;\n border-collapse: collapse;\n background-color: ${colors.white};\n width: 100%;\n height: 40vh;\n max-height: 300px;\n min-height: 150px;\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.07);\n position: absolute;\n bottom: 0;\n\n @media screen and (min-width: 1000px) {\n width: 800px;\n margin: 0 auto 1rem auto;\n border: 1px ${colors.lightGrey} solid;\n border-radius: 4px;\n box-shadow: 0px 8px 13px rgba(0, 0, 0, 0.1);\n }\n\n &.numpad-enter {\n opacity: 0;\n transform: translate3d(0, 100%, 0);\n }\n &.numpad-enter-active {\n opacity: 1;\n transform: translate3d(0, 0px, 0);\n transition: opacity ${durations.normal}ms, transform ${durations.normal}ms;\n }\n &.numpad-exit {\n opacity: 1;\n transform: translate3d(0, 0px, 0);\n }\n &.numpad-exit-active {\n opacity: 0;\n\n transform: translate3d(0, 100%, 0);\n transition: opacity ${durations.normal}ms, transform ${durations.normal}ms;\n }\n\n td {\n border: 1px ${colors.lightGrey} solid;\n border-top: 1px ${colors.midLightGrey} solid;\n width: 33%;\n height: 25%;\n text-align: center;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 700;\n color: ${colors.black};\n font-size: 1rem;\n transition: background-color 100ms ease;\n transition-delay: 100ms;\n\n &:active {\n background-color: ${colors.ultraLightGrey};\n transition: background-color 60ms ease;\n }\n }\n\n svg {\n color: ${colors.darkGrey};\n }\n`;\n\nexport default Numpad;\n","export default function (e) {\n switch (e.key) {\n case \"0\":\n return 0;\n case \"1\":\n return 1;\n case \"2\":\n return 2;\n case \"3\":\n return 3;\n case \"4\":\n return 4;\n case \"5\":\n return 5;\n case \"6\":\n return 6;\n case \"7\":\n return 7;\n case \"8\":\n return 8;\n case \"9\":\n return 9;\n case \"+\":\n return \"+\";\n case \"Backspace\":\n case \"Escape\":\n return \"delete\";\n default:\n return \"\";\n }\n}\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { CellphoneIphoneIcon, ClipboardTextIcon } from \"mdi-react\";\nimport PasswordDots from \"./PasswordDots\";\nimport Numpad from \"../ui/Numpad\";\nimport keyPressProxy from \"./utilities/keyPressProxy\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { signIn } from \"../../actions/authActions\";\n\nimport { Button, notification } from \"antd\";\n\nconst PhoneLogin = (props) => {\n const dispatch = useDispatch();\n const signingIn = useSelector((s) => s.auth.signingIn);\n const regex = /^[+]?\\d+$/;\n\n const [state, setState] = useState({\n phone: \"\",\n password: \"\",\n phoneEntered: false,\n passwordEntered: false,\n showNumpad: true,\n });\n\n const refProps = useRef(props);\n const refState = useRef(state);\n useEffect(() => {\n refState.current = state;\n refProps.current = props;\n }, [state, props]);\n\n useEffect(() => {\n if (state.phone) localStorage.setItem(\"last-used-phone-login\", state.phone);\n }, [state]);\n\n useEffect(() => {\n // Try to get last used phone\n let potentialPhoneNumber = localStorage.getItem(\"last-used-phone-login\");\n if (potentialPhoneNumber) setState({ ...state, phone: potentialPhoneNumber, phoneEntered: true });\n\n // Bind event listeners for keys\n document.addEventListener(\"keyup\", keyProxy);\n document.addEventListener(\"keydown\", handleTabKey);\n\n return () => {\n // Unbind event listeners for keys\n document.removeEventListener(\"keyup\", keyProxy);\n document.removeEventListener(\"keydown\", handleTabKey);\n };\n // eslint-disable-next-line\n }, []);\n\n let { showNumpad, phone, password, phoneEntered } = state;\n\n function handleTabKey(e) {\n if (refProps.current.enableInput === false) return;\n\n // Moves focus between phone and password with tab and shift-tab\n let { phoneEntered } = refState.current;\n\n // If tab is pressed and phone is not entered (and mode is phone)\n if (e.key === \"Tab\" || (e.key === \"Enter\" && !phoneEntered)) {\n e.preventDefault();\n setState({ ...refState.current, phoneEntered: true });\n }\n\n if (e.shiftKey && e.key === \"Tab\" && phoneEntered) {\n e.preventDefault();\n setState({ ...refState.current, phoneEntered: false });\n }\n }\n\n function keyProxy(e) {\n handleKeyPress(keyPressProxy(e));\n }\n\n function handleKeyPress(key) {\n if (refProps.current.enableInput === false) return;\n\n let freshState = refState.current;\n let { phoneEntered, passwordEntered, password, phone } = refState.current;\n\n // Handle delete button\n if (key === \"delete\") {\n if (!phoneEntered) {\n setState({ ...freshState, phone: freshState.phone.slice(0, -1) });\n } else if (phoneEntered && !passwordEntered && password.length > 0) {\n setState({ ...freshState, password: password.slice(0, -1) });\n } else if (phoneEntered && passwordEntered) {\n setState({ ...freshState, passwordEntered: false });\n } else if (phoneEntered && !passwordEntered) {\n setState({ ...freshState, phoneEntered: false });\n }\n return;\n }\n // If logintype is phone and phone isn't entered, append values to phone\n if (!phoneEntered) {\n setState({ ...freshState, phone: freshState.phone + key });\n\n // If logintype is phone and phone is entered, append values to password (as long as theres is 3 or less characters)\n } else if (phoneEntered && key !== \"delete\" && key !== \"enter\" && !passwordEntered && password.length < 3) {\n setState({ ...freshState, password: password + key });\n\n // If logintype is phone and phone is entered, and the password is exactly 3 characters long, the current character is\n // the last in the password. Therefore append it to the password and automatically try to login\n } else if (phoneEntered && key !== \"delete\" && key !== \"enter\" && !passwordEntered && password.length === 3) {\n setState({ ...freshState, password: password + key, passwordEntered: true });\n tryLogin({\n phone,\n password: password + key,\n });\n }\n\n function tryLogin(credentials) {\n dispatch(signIn(credentials));\n\n setState({\n ...refState.current,\n password: \"\",\n passwordEntered: false,\n });\n }\n }\n\n function handlePaste() {\n if (navigator.clipboard) {\n navigator.clipboard\n .readText()\n .then((clipboardText) => {\n if (regex.test(clipboardText)) {\n setState({\n ...state,\n phone: clipboardText,\n phoneEntered: true,\n });\n } else {\n notification.error({\n duration: 7,\n message: \"Invalid Phone Number\",\n description: `Please copy a valid phone number and try again.`,\n });\n }\n })\n .catch((error) => {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"Couldn't read clipboard\",\n });\n });\n } else {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"Clipboard API not supported in this browser\",\n });\n }\n }\n\n return (\n <>\n \n setState({\n ...state,\n phoneEntered: false,\n })\n }\n >\n \n

{phone}

\n {phone.length !== 0 && !phoneEntered &&
}\n {phone.length === 0 && (\n \n )}\n
\n {\n setState({\n ...state,\n phoneEntered: true,\n });\n }}\n />\n\n handleKeyPress(key)} />\n \n );\n};\n\nexport default PhoneLogin;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { EmailOutlineIcon } from \"mdi-react\";\nimport PasswordDots from \"./PasswordDots\";\nimport Numpad from \"../ui/Numpad\";\nimport keyPressProxy from \"./utilities/keyPressProxy\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { signIn } from \"../../actions/authActions\";\n\nconst PhoneLogin = props => {\n const dispatch = useDispatch();\n const signingIn = useSelector(s => s.auth.signingIn);\n const [state, setState] = useState({\n phone: \"\",\n password: \"\",\n phoneEntered: false,\n passwordEntered: false,\n showNumpad: true\n });\n\n const refProps = useRef(props);\n const refState = useRef(state);\n useEffect(() => {\n refState.current = state;\n refProps.current = props;\n }, [state, props]);\n\n useEffect(() => {\n // Bind event listeners for keys\n document.addEventListener(\"keyup\", keyProxy);\n document.addEventListener(\"keydown\", handleTabKey);\n\n return () => {\n // Unbind event listeners for keys\n document.removeEventListener(\"keyup\", keyProxy);\n document.removeEventListener(\"keydown\", handleTabKey);\n };\n // eslint-disable-next-line\n }, []);\n\n let { showNumpad, password, phoneEntered } = state;\n\n function handleTabKey(e) {\n if (refProps.current.enableInput === false) return;\n\n // Moves focus between phone and password with tab and shift-tab\n let { phoneEntered } = refState.current;\n let emailInputHasFocus = document.querySelector(\"input[type='email']\") === document.activeElement;\n\n // If key is tab and email has focus move focus to passsword\n if (e.key === \"Tab\" && emailInputHasFocus) {\n e.preventDefault();\n document.querySelector(\"input[type='email']\").blur();\n setState({ ...refState.current, phoneEntered: true });\n }\n\n // If keys is tab+shift and password has focus move focus to email input\n if (e.shiftKey && e.key === \"Tab\" && phoneEntered) {\n e.preventDefault();\n document.querySelector(\"input[type='email']\").focus();\n setState({ ...refState.current, phoneEntered: false });\n }\n }\n\n function keyProxy(e) {\n handleKeyPress(keyPressProxy(e));\n }\n\n function handleKeyPress(key) {\n if (refProps.current.enableInput === false) return;\n\n // let state = refState.current;\n let freshState = refState.current;\n let { phoneEntered, passwordEntered, password, email } = refState.current;\n\n // Handle delete button\n if (key === \"delete\") {\n if (phoneEntered && !passwordEntered && password.length > 0) {\n setState({ ...freshState, password: password.slice(0, -1) });\n } else if (phoneEntered && passwordEntered) {\n setState({ ...freshState, passwordEntered: false });\n } else if (phoneEntered && !passwordEntered) {\n setState({ ...freshState, phoneEntered: false });\n }\n return;\n }\n\n let emailInputHasFocus = document.querySelector(\"input[type='email']\") === document.activeElement;\n\n if (!emailInputHasFocus && phoneEntered && !passwordEntered && password.length < 3) {\n setState({ ...freshState, password: password + key });\n } else if (!emailInputHasFocus && !passwordEntered && password.length === 3) {\n setState({ ...freshState, password: password + key, passwordEntered: true });\n tryLogin({\n email,\n password: password + key\n });\n }\n }\n\n function tryLogin(credentials) {\n dispatch(signIn(credentials));\n\n setState({\n ...refState.current,\n password: \"\",\n passwordEntered: false\n });\n }\n\n return (\n <>\n
\n \n setState({ ...state, email: e.target.value })}\n onFocus={() => setState({ ...state, showNumpad: false, phoneEntered: false })}\n onBlur={() => setState({ ...state, showNumpad: true })}\n />\n
\n\n {\n setState({\n ...state,\n phoneEntered: true\n });\n }}\n />\n\n handleKeyPress(key)} />\n \n );\n};\n\nexport default PhoneLogin;\n","import React, { useState } from \"react\";\nimport { css } from \"emotion\";\nimport { bindActionCreators } from \"redux\";\nimport { connect, useSelector } from \"react-redux\";\nimport { notification } from \"antd\";\n\nimport { hideDialog, hideModalPage, showDialog } from \"../../actions/uiActions\";\n\n// Icons\nimport { LockQuestionIcon, AlertDecagramIcon, ErrorOutlineIcon } from \"mdi-react\";\n\n// Components\nimport TextInput from \"../ui/TextInput\";\nimport Button from \"../ui/Button\";\nimport ScrollView from \"../ui/ScrollView\";\nimport { renewPassword, renewPasswordHandled } from \"../../actions/authActions\";\nimport colors from \"../../style/colors\";\n\nconst ForgotPassword = (props) => {\n const [phoneNumber, setPhoneNumber] = useState(props.prefillValue || \"\");\n const appConfig = useSelector((state) => state.appConfig);\n\n const renewPasswordError = useSelector((state) => state.auth.renewPasswordError);\n\n // If something goes wrong when reset password\n if (renewPasswordError) {\n props.renewPasswordHandled();\n notification.error({ duration: 7, message: \"FAILED\", description: \"Could not reset your password\" });\n }\n\n function handlePasswordReset() {\n let dialog = {\n title: \"Warning\",\n content:\n \"You are about to request a new password. Doing so will deactivate your old password and you will no longer be able to access the app with it\",\n icon: ,\n styleType: \"warning\",\n primaryActionTitle: \"Okay, request a new password\",\n secondaryActionTitle: \"Cancel, keep my old password\",\n primaryAction: () => {\n props.renewPassword(phoneNumber);\n },\n };\n props.showDialog(dialog);\n }\n\n return (\n <>\n \n
\n
\n \n
\n

Forgot your password?

\n

\n Use the form below to reset your password. You will receive a new one to your phone\n

\n setPhoneNumber(e.target.value)}\n placeholder={`Enter your phone number here`}\n value={phoneNumber}\n />\n
\n
\n \n );\n};\n\nconst componentStyle = (props) => css`\n .forgot-password-container {\n padding: 0.7rem;\n width: 100%;\n height: 100%;\n max-width: 500px;\n margin: 0 auto;\n color: ${colors.black};\n text-align: center;\n\n .icon-container {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 78px;\n height: 78px;\n border: 1px ${colors.lightGrey} solid;\n border-radius: 50%;\n margin: 2rem auto;\n\n svg {\n width: 32px;\n height: 32px;\n }\n }\n }\n`;\n\nconst mapDispatchToProps = (dispatch) => ({\n renewPasswordHandled: bindActionCreators(renewPasswordHandled, dispatch),\n renewPassword: bindActionCreators(renewPassword, dispatch),\n showDialog: bindActionCreators(showDialog, dispatch),\n hideDialog: bindActionCreators(hideDialog, dispatch),\n hideModalPage: bindActionCreators(hideModalPage, dispatch),\n});\n\nexport default connect(null, mapDispatchToProps)(ForgotPassword);\n","import React, { useEffect } from \"react\";\nimport queryString from \"query-string\";\nimport { notification } from \"antd\";\n\nimport Button from \"../ui/Button\";\nimport { ExternalLinkIcon, AlertDecagramIcon } from \"mdi-react\";\nimport { signInWithAdToken } from \"../../actions/authActions\";\nimport { useDispatch } from \"react-redux\";\nimport { clearLoginTypes } from \"../../actions/appConfigActions\";\nimport getAppName from \"../../utilities/get-app-name\";\n\nconst AdLogin = (props) => {\n const dispatch = useDispatch();\n\n /** The AD-login process is fairly simple:\n *\n * 1) The react app loads, it then fetches the app-config for current application. If\n * this app-config has \"ad\" as one of the \"allowedLoginTypes\" then AD-login is initiated\n * 2) The app redirects to the AD-login-page located at `https://login.ekkoapp.dk/api/v2/sso/${appName}`\n * Examples: https://login.ekkoapp.dk/api/v2/sso/nrgi-rep https://login.ekkoapp.dk/api/v2/sso/test etc.\n * The appName parameter decides which ad should be used and where the page redirects back to\n * 3) If the user succesfully logs in, they will be redirected back to our app at ekkoapp.app/${appName}/?token=${userToken}\n * The token returned is valid for a few seconds and matches a email.\n * 4) This token is posted to an endpoint at our api (/api/auth/sign-in-with-ad-token/) At this endpoint the\n * api tries to exchange the token for a user. If this succeeds, a regular user and token will be returned\n * just as if the user had logged in using password and email/phone instead\n * 5) The returned user and token is inserted into localstorage. From here on out there is nothing special about it.\n *\n *\n */\n\n useEffect(() => {\n let queryStrings = queryString.parse(window.location.search);\n if (queryStrings.token) {\n dispatch(signInWithAdToken(queryStrings.token));\n } else {\n if (process.env.NODE_ENV === \"development\") {\n return console.warn(\"AD-Redirect prevented because app is running in development mode\");\n }\n\n // BUGFIX! Don't redirect for iOS version 12.4.X as this won't work in this specific version.\n if (navigator.userAgent.search(/CPU iPhone OS 12_4/gi) !== -1)\n return notification.error({\n duration: 7,\n message: \"FAILED\",\n description:\n \"Your device doesn't support AD login. If possible upgrade iOS. If you cannot upgrade your device try to log in with a different login method using the 'Need help?' button.\",\n });\n\n dispatch(clearLoginTypes());\n window.location = `https://login.ekkoapp.dk/api/v2/sso/${getAppName()}`;\n }\n // eslint-disable-next-line\n }, []);\n\n return (\n
\n {\n window.location = `https://login.ekkoapp.dk/api/v2/sso/${getAppName()}`;\n }}\n >\n \n Go to AD-login\n \n
\n );\n};\n\nexport default AdLogin;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { hideModalPage } from \"../../actions/uiActions\";\nimport { css } from \"emotion\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { durations } from \"../../config/animations\";\nimport { CloseIcon } from \"mdi-react\";\nimport Page from \"./Page\";\nimport Overlay from \"./Overlay\";\n\n// Components\nimport TopBar from \"./TopBar\";\nimport ActionWrapper from \"./ActionWrapper\";\n\nconst ModalPage = props => {\n let { active, closeCallback, title, actionRight, content } = props.modalPage;\n\n return (\n <>\n \n \n \n closeCallback(hideModalPage) : props.hideModalPage}\n data-test-id=\"modal-page__action-left\"\n >\n \n \n }\n actionRight={actionRight}\n title={title}\n />\n {/* {content && content()} */}\n {content && typeof content === \"function\" && content()}\n {content && typeof content === \"object\" && content}\n \n \n \n );\n};\n\nconst container = () => css`\n position: fixed;\n top: 0;\n left: 0;\n will-change: auto;\n\n &.modal-page-enter {\n opacity: 0;\n\n /**\n Animates from scren edge for screen less than 700px, for screen larger than 700px\n it will animate with a fixed pixel offset since the duration of the animations is fixed\n and a fast animation from screen edge has to rapid movement. Its also quite difficult\n to get it to run smooth on smaller hardware \n */\n @media screen and (max-height: 700px) {\n transform: translate3d(0, 100%, 0);\n }\n @media screen and (min-height: 701px) {\n transform: translate3d(0, 300px, 0);\n }\n }\n &.modal-page-enter-active {\n opacity: 1;\n transform: translate3d(0, 0px, 0);\n transition: opacity ${durations.normal}ms, transform ${durations.normal}ms;\n }\n &.modal-page-exit {\n opacity: 1;\n transform: translate3d(0, 0px, 0);\n }\n &.modal-page-exit-active {\n opacity: 0;\n @media screen and (max-height: 700px) {\n transform: translate3d(0, 100%, 0);\n }\n @media screen and (min-height: 701px) {\n transform: translate3d(0, 300px, 0);\n }\n transition: opacity ${durations.normal}ms, transform ${durations.normal}ms;\n }\n`;\n\nconst mapStateToProps = state => ({\n modalPage: state.ui.modalPage,\n primaryColor: state.appConfig.primaryColor\n});\n\nconst mapDispatchToProps = dispatch => ({\n hideModalPage: bindActionCreators(hideModalPage, dispatch)\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ModalPage);\n","// Libs\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { hideDialog } from \"../../actions/uiActions\";\nimport { css } from \"emotion\";\nimport PropTypes from \"prop-types\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { durations } from \"../../config/animations\";\nimport breakpoints from \"../../config/breakpoints\";\n\n// Utilities\nimport styleTypeNormalizer from \"../../utilities/style-type-normalizer\";\n\n// Styles\nimport colors from \"../../style/colors\";\n\n// Icons\nimport { CloseIcon } from \"mdi-react\";\nimport Overlay from \"./Overlay\";\n\n/**\n * Component implemented through redux. Import showDialog/hideDialog from ./actions to use this.\n *\n * Is used as a confirmation checkpoint so a flow that uses it would be:\n * ```\n * 1. User clicks delete button\n * 2. Dialog component shows, asking the user if they are sure they want to delete the element\n * 3. User clicks PrimaryAction to confirm or secondary action to abort the current action.\n * ```\n * Dialog is different from contextmenu in that Dialog only allows 2 options, PrimaryAction or SecondaryAction\n * ```\n * this.props.showDialog({\n title: \"Obs!\",\n content: \"Do you want to mark task as done? \",\n icon: ,\n\n styleType: \"neutral\",\n primaryActionTitle: \"Yes, mark task as done, and close page\",\n secondaryActionTitle: \"No, don't mark as done\",\n primaryAction: () => {\n //All questions have to be answered, before TestSheet can be submitted\n this.props.updateModalPage({\n actionRight: (\n \n )\n });\n this.props.hideDialog();\n this.putTestSheet(task.id);\n\n // this.props.hideModalPage();\n },\n secondaryAction: () => {\n //What you want the dialog main action to be\n \n this.props.hideDialog();\n }\n });\n * ```\n * The example above is an example you can copy paste into your code, and use. with the required import, and dispatchToProps.\n * ```\n * Title: headline of the dialog\n * Content: textblock used to desribe the action about to be taken\n * Icon: svg icon for headline\n * styletype: OK/Error/Neutral - Sets the color scheme\n * PrimaryActionTitle: name on primaryAction\n * PrimaryAction: function to be executed when primaryAction is clicked\n * SecondaryActionTitle/SecondaryAction - Same as above, just for SecondaryAction\n * ```\n */\nconst Dialog = (props) => {\n let {\n active,\n actions = [], //title, action\n styleType,\n icon,\n title,\n content,\n primaryActionTitle,\n secondaryActionTitle,\n tertiaryActionTitle,\n primaryAction,\n secondaryAction,\n tertiaryAction,\n disableSecondaryAction,\n disableTertiaryAction = true,\n } = props.dialog;\n let { lang } = props;\n\n return (\n
\n \n\n \n e.stopPropagation()}\n >\n {/* Header */}\n

\n \n {icon}\n {title}\n \n

\n\n {/* Content */}\n

{content}

\n\n {/* Actions */}\n {actions.length !== 0 &&\n actions.map((d) => {\n const { disabled = false } = d;\n\n return (\n \n {d.title}\n
\n );\n })}\n\n {primaryActionTitle && (\n {\n primaryAction();\n props.hideDialog();\n }}\n >\n {primaryActionTitle}\n
\n )}\n\n {!disableSecondaryAction && secondaryActionTitle && (\n \n {secondaryActionTitle || lang.cancel}\n
\n )}\n\n {!disableTertiaryAction && (\n \n {tertiaryActionTitle || lang.cancel}\n
\n )}\n \n \n \n );\n};\n\nconst componentStyles = (props) => css`\n .dialog {\n padding: 0.5rem;\n position: fixed;\n bottom: 0px; /* Component enters with a spring animation, and needs extra padding in bottom */\n left: 0;\n width: 100%;\n background-color: ${colors.white};\n will-change: auto;\n\n @media screen and (min-width: ${breakpoints.md}px) {\n width: ${breakpoints.md}px;\n padding: 0.75rem;\n bottom: 1rem;\n border-radius: 6px;\n left: 0;\n right: 0;\n margin-left: auto;\n margin-right: auto;\n overflow: hidden;\n }\n\n &.dialog-enter {\n opacity: 0;\n transform: translate3d(0, 100%, 0);\n }\n &.dialog-enter-active {\n transform: translate3d(0, 0%, 0);\n opacity: 1;\n transition: transform 190ms ease, opacity ${durations.normal}ms;\n }\n &.dialog-exit {\n opacity: 1;\n }\n &.dialog-exit-active {\n opacity: 0;\n transform: translate3d(0, 100%, 0);\n transition: transform ${durations.normal}ms ease, opacity ${durations.normal}ms;\n }\n\n .header {\n display: flex;\n justify-content: space-between;\n padding-bottom: 0.5rem;\n font-weight: 700;\n\n svg {\n width: 1.25rem;\n height: 1.25rem;\n margin-bottom: -3px;\n margin-right: 0.25rem;\n }\n\n svg.close-icon {\n color: ${colors.darkGrey};\n width: 1.5rem;\n height: 1.5rem;\n margin-right: 0rem;\n }\n }\n\n .content {\n margin: 0.5rem 0 1.5rem 0;\n }\n\n .action {\n margin-top: 0.5rem;\n font-weight: 700;\n padding: 0.75rem;\n text-align: center;\n border-radius: 2px;\n color: ${colors.white};\n\n &.secondary {\n border: 1px solid ${colors.midGrey};\n color: ${colors.darkGrey};\n }\n\n &.tertiary {\n border: 1px solid ${colors.midGrey};\n color: ${colors.darkGrey};\n }\n\n &:hover {\n cursor: pointer;\n }\n\n &.disabled {\n background-color: ${colors.midGrey};\n cursor: not-allowed;\n }\n }\n\n /* Style types */\n &.ok {\n .header {\n color: ${colors.green};\n font-weight: 700;\n }\n .action.primary {\n border-bottom: 2px solid rgba(0, 0, 0, 0.5);\n background-color: ${colors.green};\n }\n }\n\n &.neutral {\n .header {\n color: ${props.primaryColor};\n }\n .action.primary {\n border-bottom: 2px solid rgba(0, 0, 0, 0.5);\n background-color: ${props.primaryColor};\n }\n }\n\n &.error {\n .header {\n color: ${colors.red};\n font-weight: 700;\n }\n .action.primary {\n border-bottom: 2px solid rgba(0, 0, 0, 0.5);\n background-color: ${colors.red};\n }\n }\n }\n`;\n\nconst mapStateToProps = (state) => ({\n dialog: state.ui.dialog,\n primaryColor: state.appConfig.primaryColor,\n lang: state.language.language,\n});\nconst mapDispatchToProps = (dispatch) => ({\n hideDialog: bindActionCreators(hideDialog, dispatch),\n});\n\nDialog.propTypes = {\n /** object that holds most logic for component, look at example , on how to pass it*/\n dialog: PropTypes.object,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Dialog);\n","import React, { useState, useEffect } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { notification } from \"antd\";\n\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\n\n// Redux actions\nimport { showContextMenu, showModalPage, hideModalPage } from \"../../actions/uiActions\";\nimport { renewPasswordHandled, signInFailureHandled } from \"../../actions/authActions\";\n\n// components\nimport Page from \"../ui/Page\";\nimport ContextMenu from \"../ui/ContextMenu\";\nimport { CellphoneIphoneIcon, EmailOutlineIcon, LifebuoyIcon, LockQuestionIcon, MicrosoftWindowsIcon } from \"mdi-react\";\nimport loginTypes from \"./config/loginTypes\";\nimport PhoneLogin from \"./PhoneLogin\";\nimport EmailLogin from \"./EmailLogin\";\nimport ForgotPassword from \"./ForgotPassword\";\nimport AdLogin from \"./AdLogin\";\nimport ModalPage from \"../ui/ModalPage\";\nimport Dialog from \"../ui/Dialog\";\nimport InlineSpinner from \"../ui/InlineSpinner\";\n\n/** Page that log's in users\n * Is registered as a route and therefore doesn't need any props.\n *\n * The implementation of email login is a bit cramped in. I initially though the implementation\n * would be leaner by reusing the main functionality and just changing the input element but it\n * turned out a bit weird, so for the next login type we add i would argue for seperate login\n * components: a PhoneLogin.jsx, EmailLogin.jsx, ADLogin.jsx, EmployeeNubmerLogin.jsx etc.\n *\n */\n\n// Hack to prevent ad-login to start before appConfig has been updated\nlet firstRenderManual = true;\n\nfunction LoginPage(props) {\n const [currentLoginType, setCurrentLoginType] = useState(\"\");\n const [enableInput, setEnableInput] = useState(true);\n const dispatch = useDispatch();\n const appConfig = useSelector((s) => s.appConfig);\n const appConfigLoading = useSelector((s) => s.appConfig.loading);\n const { renewPasswordSuccess, signInError, signingIn } = useSelector((s) => s.auth);\n\n // This effect makes sure that the app-config is refreshed before any redirects will happen\n useEffect(() => {\n if (firstRenderManual === false && appConfig.apiUrl !== \"\" && appConfig.loading === false) {\n getDefaultLoginType();\n }\n firstRenderManual = false;\n\n // eslint-disable-next-line\n }, [appConfig, appConfigLoading]);\n\n useEffect(() => {\n getDefaultLoginType();\n // eslint-disable-next-line\n }, []);\n\n function getDefaultLoginType() {\n /**\n * Determines which login type to use as default. It will use the first in the array\n * of allowed login types if the first is regonized. Otherwise it will default to \"phone\".\n * The array is found in the app-config returned from the api\n *\n * Examples\n * [\"email\", \"phone\", \"ad\"] -> default will be \"email\"\n * [\"phone\", \"email\", \"ad\"] -> default will be \"phone\"\n * [\"blablaLoremIpsum\", \"email\", \"phone\", \"ad\"] -> default will be \"phone\"\n *\n */\n\n let { allowedLoginTypes, title } = appConfig;\n\n if (!allowedLoginTypes || title === \"SemcoTime DK\") allowedLoginTypes = [loginTypes.phone];\n\n switch (allowedLoginTypes[0]) {\n case loginTypes.phone:\n setCurrentLoginType(loginTypes.phone);\n break;\n case loginTypes.email:\n setCurrentLoginType(loginTypes.email);\n break;\n case loginTypes.ad:\n setCurrentLoginType(loginTypes.ad);\n break;\n default:\n setCurrentLoginType(loginTypes.phone);\n }\n }\n\n if (signInError) {\n dispatch(signInFailureHandled());\n notification.error({ duration: 7, message: \"FAILED\", description: \"Your credentials were invalid\" });\n }\n\n // If everything goes right when resetting password\n if (renewPasswordSuccess) {\n dispatch(renewPasswordHandled());\n notification.success({\n duration: 7,\n message: \"SUCCESS\",\n description: \"You will receive a text message with your new password shortly\",\n });\n }\n\n function showChangeLoginTypeMenu() {\n let actions = [\n {\n icon: ,\n title: \"Forgot password\",\n callback: () => {\n setEnableInput(false);\n dispatch(\n showModalPage({\n title: \"Forgot password\",\n closeCallback: () => {\n setEnableInput(true);\n dispatch(hideModalPage());\n },\n content: ,\n })\n );\n },\n },\n ];\n\n if (appConfig.allowedLoginTypes.includes(loginTypes.email) && currentLoginType !== loginTypes.email) {\n actions.push({\n icon: ,\n title: \"Login with email\",\n callback: () => setCurrentLoginType(loginTypes.email),\n });\n }\n\n if (appConfig.allowedLoginTypes.includes(loginTypes.phone) && currentLoginType !== loginTypes.phone) {\n actions.push({\n icon: ,\n title: \"Login with phone\",\n callback: () => setCurrentLoginType(loginTypes.phone),\n });\n }\n\n if (appConfig.allowedLoginTypes.includes(loginTypes.ad) && currentLoginType !== loginTypes.ad) {\n actions.push({\n icon: ,\n title: \"Login with AD\",\n callback: () => setCurrentLoginType(loginTypes.ad),\n });\n }\n\n dispatch(showContextMenu({ actions: actions, defaultActionTitle: \"Cancel\" }));\n }\n\n return (\n \n
\n
\n
\n {signingIn && }\n
\n
\n\n {/* Actual login part */}\n {currentLoginType === loginTypes.phone && }\n {currentLoginType === loginTypes.email && }\n {currentLoginType === loginTypes.ad && }\n\n {currentLoginType !== \"\" && (\n \n )}\n {/* Load frontpage image so its cached and ready for frontpage */}\n \n
\n\n \n \n \n
\n );\n}\nconst componentStyle = (appConfig) => css`\n .app-logo {\n width: 80px;\n height: 80px;\n border-radius: 18px;\n border: 1px ${colors.lightGrey} solid;\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);\n background-image: url(${appConfig.icon.baseURL + \"w_80,h_80,q_auto,f_auto/\" + appConfig.icon.image});\n background-color: rgba(255, 255, 255, 0.75);\n background-size: cover;\n background-position: center;\n margin: 0 auto 5vh auto;\n position: relative;\n overflow: hidden;\n\n .loading-container {\n transition: opacity 400ms ease;\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n background-color: rgba(255, 255, 255, 0.75);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n }\n .login-container {\n margin: 10vh auto 0 auto;\n max-width: 400px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n button.toggle-input-types {\n display: block;\n font-size: 0.925rem;\n color: ${appConfig.primaryColor};\n padding: 0.5rem 1.45rem;\n border: 1px ${colors.midGrey} solid;\n border-radius: 1rem;\n outline: 0px;\n background-color: transparent;\n transition: background-color 200ms ease;\n margin-top: 2vh;\n &:active {\n background-color: ${colors.midGrey};\n transition: background-color 80ms ease;\n }\n svg {\n width: 1rem;\n height: 1rem;\n margin-bottom: -0.15rem;\n margin-right: 0.35rem;\n }\n }\n div.input {\n display: inline-block;\n padding: 0.75rem;\n margin: 0 auto;\n font-size: 1.3rem;\n letter-spacing: 2px;\n color: ${colors.black};\n white-space: nowrap;\n font-weight: 700;\n &.phone p,\n &.password .password-dots-container {\n display: inline-block;\n margin-left: 1rem;\n }\n &.phone {\n min-width: 179px;\n }\n &.email {\n height: 52px; /* Sry. Another magic number */\n }\n\n &.email input {\n padding: 0.5rem;\n border: 1px ${colors.midGrey} solid;\n appearance: none;\n border-radius: 2px;\n background-color: rgba(0, 0, 0, 0.03);\n margin-left: 0.5rem;\n font-size: 0.85rem;\n\n &:focus {\n outline: 0;\n border: 1px ${appConfig.primaryColor} solid;\n }\n }\n\n svg {\n color: ${colors.darkGrey};\n vertical-align: middle;\n width: 1.5rem;\n height: 1.5rem;\n margin-top: -5px;\n\n &.lock-icon {\n margin-top: -18px;\n }\n }\n }\n\n /* Phone cursor */\n .phone .phone-cursor {\n width: 16px;\n height: 3px;\n background-color: ${colors.midGrey};\n display: inline-block;\n vertical-align: text-bottom;\n animation: cursorBlinkPhone 1s linear infinite;\n }\n\n @keyframes cursorBlinkPhone {\n 0% {\n opacity: 0;\n }\n 10% {\n opacity: 1;\n }\n 60% {\n opacity: 1;\n }\n 70% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n }\n }\n\n /* Password dots */\n .password-dots-container {\n .password-dot {\n display: inline-block;\n width: 22px;\n height: 22px;\n margin-right: 0.4rem;\n border-radius: 50%;\n border: 1px ${colors.midGrey} solid;\n\n &.blink {\n animation: cursorBlinkPassword 1s linear infinite;\n }\n\n @keyframes cursorBlinkPassword {\n 0% {\n border-width: 1px;\n }\n 5% {\n border-width: 4px;\n border-color: ${appConfig.primaryColor};\n }\n 53% {\n border-width: 4px;\n border-color: ${appConfig.primaryColor};\n }\n 60% {\n border-width: 1px;\n }\n }\n\n &.filled {\n background-color: ${appConfig.primaryColor};\n border: 0px;\n }\n }\n }\n`;\n\nexport default LoginPage;\n","import React, { useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nimport TopBar from \"../components/ui/TopBar\";\r\nimport ListItem from \"../components/ui/ListItem\";\r\nimport { ArrowBackIcon, ChevronRightIcon } from \"mdi-react\";\r\nimport Page from \"./ui/Page\";\r\nimport ScrollView from \"./ui/ScrollView\";\r\n\r\nimport pageNavigator from \"../utilities/page-navigator\";\r\nimport linkPathCreator from \"../utilities/get-link-path-from-page-object\";\r\nimport getPageFromId from \"../utilities/get-page-from-id\";\r\nimport Notification from \"./ui/Notification\";\r\nimport getBackButtonUrl from \"../utilities/get-back-button-url\";\r\nimport ActionWrapper from \"./ui/ActionWrapper\";\r\nimport breakpoints from \"../config/breakpoints\";\r\n\r\nfunction NavigationList(props) {\r\n const pages = useSelector((state) => state.pages.pages);\r\n const [page] = useState(getPageFromId(pages, props.match.params.pageId));\r\n\r\n return (\r\n \r\n pageNavigator(getBackButtonUrl(page, pages), \"backward\")}>\r\n \r\n \r\n }\r\n />\r\n \r\n {page.pages.map((subPage) => (\r\n pageNavigator(linkPathCreator(subPage, \"absolute\"), \"forward\")}\r\n title={subPage.title}\r\n notificationsRight={subPage.notifications > 0 && }\r\n iconRight={}\r\n key={subPage.id}\r\n />\r\n ))}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default NavigationList;\r\n","import React, { Component } from \"react\";\nimport { css } from \"emotion\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { notification } from \"antd\";\n\n// Components\nimport { UploadIcon } from \"mdi-react\";\nimport InlineSpinner from \"../ui/InlineSpinner\";\n\n// Utilities\nimport req from \"../../utilities/request-utility\";\n\n// Styles\nimport colors from \"../../style/colors\";\nimport common from \"../../style/common\";\n\n/** Used for handling a single image/file upload, please note that a POST request is sent to our api,\n * with the required data, and you should get the response you need, from there. */\nclass ImageUploadSingle extends Component {\n constructor(props) {\n super(props);\n this.state = {\n image: {},\n };\n }\n\n onFileSelect = (e) => {\n // TODO: Validate file size and type\n let file = e.target.files[0];\n\n // Check if file is selected\n if (!file) return; // No file is selected\n\n // Check file size\n if (file.size > 200000000) {\n return notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"The file you are trying to upload is too big. Choose a smaller file\",\n });\n } else if (file.size > 39999900) {\n return notification.error({\n duration: 7,\n message: \"FAILED\",\n description:\n \"You're about to upload a rather large file. This might take some time. Consider finding some decent Wi-Fi.\",\n });\n }\n\n // Construct formData with file\n let formData = new FormData();\n formData.append(\"file\", file);\n\n // Start upload and set state\n this.uploadFile(formData);\n this.setState({\n image: { status: \"uploading\", progress: 0 },\n });\n\n // Reset input\n e.target.value = \"\";\n };\n\n uploadFile = (file) => {\n req()\n .post(\"/images/\", file, { onUploadProgress: (e) => this.onUploadProgress(e) })\n .then(({ data }) => data)\n .then((data) => this.onFileUploadSuccess(data))\n .catch((err) => this.onFileUploadFailure(err));\n };\n\n deleteFile = (index) => {\n // let files = [...this.state.files];\n // files[index].status = \"deleted\";\n // this.setState({\n // files: files\n // });\n // this.props.onFileUpdate(this.state.files.filter(f => f.status === \"uploaded\"));\n };\n\n onUploadProgress = (progress) => {\n let progressPercent = (progress.loaded / progress.total) * 100;\n this.setState({\n image: {\n ...this.state.image,\n progress: progressPercent,\n },\n });\n };\n\n onFileUploadSuccess = (res) => {\n this.setState({\n image: {\n status: \"uploaded\",\n baseURL: res.baseURL,\n image: res.image,\n deleteToken: res.deleteToken,\n },\n });\n this.props.onFile({ file: res.image, baseURL: res.baseURL, deleteToken: res.deleteToken });\n };\n\n onFileUploadFailure = (err, index) => {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"Could not upload your image. Try again or contact support@toecho.dk\",\n });\n\n if (this.state.files[index]) {\n this.setState({\n image: {\n ...this.state.image,\n status: \"error\",\n },\n });\n }\n };\n\n render() {\n let { placeholder, primaryColor, style, boxPadding } = this.props;\n let { image } = this.state;\n\n return (\n
\n
\n\n
\n\n {/* Activity log */}\n
\n
\n

Activity Log

\n
\n
\n\n
\n
\n \n
\n
\n \n \n )}\n \n );\n}\n\nconst container = () => css`\n .seperator {\n border-bottom: 1px ${colors.midGrey} solid;\n }\n\n .edit-button {\n display: block;\n height: ${common.topBarHeight}px;\n line-height: ${common.topBarHeight}px;\n padding: 0 1rem;\n background-color: transparent;\n font-size: 1rem;\n color: ${colors.white};\n border: 0px;\n\n svg {\n color: ${colors.white};\n width: 1rem;\n height: 1rem;\n padding: 0;\n margin-bottom: -2px;\n margin-right: 0.15rem;\n }\n }\n\n .image-container {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n max-width: 1200px;\n margin: 0 auto 2rem auto;\n padding: 0 0.5rem;\n\n .image-wrapper {\n flex: 1 1 46%;\n min-width: 300px;\n padding-bottom: 40%;\n border: 1px ${colors.midGrey} solid;\n border-radius: 5px;\n background-size: cover;\n background-position: center;\n margin: 0.5rem;\n position: relative;\n\n button.fullscreen-toggle {\n position: absolute;\n top: 1rem;\n right: 1rem;\n background-color: ${colors.white};\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 1.25rem;\n border: 1px ${colors.lightGrey} solid;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.9;\n\n &:hover {\n cursor: pointer;\n opacity: 1;\n }\n\n svg {\n color: ${colors.darkGrey};\n width: 1.5rem;\n height: 1.5rem;\n }\n }\n }\n }\n\n .row {\n padding: 0 1rem;\n display: flex;\n justify-content: space-between;\n max-width: 1200px;\n margin: 0 auto 1.25rem auto;\n\n .col-50 {\n flex-basis: 49%;\n }\n\n .col-100 {\n flex-basis: 100%;\n }\n\n p {\n color: ${colors.black};\n }\n\n span.label {\n font-weight: 700;\n color: ${colors.black};\n\n &:after {\n content: \": \";\n }\n }\n\n @media screen and (max-width: 650px) {\n flex-wrap: wrap;\n\n .col-50 {\n flex-basis: 100%;\n\n &:nth-child(odd) {\n margin-bottom: 1.25rem;\n }\n }\n }\n }\n`;\n\nexport default PunchOverview;\n","import { lazy } from \"react\";\nimport { durations } from \"../../config/animations\";\n\nexport default lazy(() =>\n Promise.all([import(\"./JobPackage\"), new Promise(r => setTimeout(r, durations.routeTransition + 20))]).then(m => m[0])\n);\n","import { lazy } from \"react\";\nimport { durations } from \"../../config/animations\";\n\nexport default lazy(() =>\n Promise.all([import(\"./TestSheet\"), new Promise(r => setTimeout(r, durations.routeTransition + 40))]).then(m => m[0])\n);\n","import { lazy } from \"react\";\nimport { durations } from \"../../config/animations\";\n\nexport default lazy(() =>\n Promise.all([import(\"./Search\"), new Promise(r => setTimeout(r, durations.routeTransition + 40))]).then(m => m[0])\n);\n","import React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { css } from \"emotion\";\nimport { useQuery } from \"react-query\";\n\nimport Page from \"../ui/Page\";\nimport ScrollView from \"../ui/ScrollView\";\nimport TopBar from \"../ui/TopBar\";\nimport ActionWrapper from \"../ui/ActionWrapper\";\nimport { ArrowLeftIcon } from \"mdi-react\";\nimport DropDown from \"../ui/DropDown\";\n\nimport usePageAndBackButtonURL from \"../../hooks/usePageAndBackButtonURL\";\nimport pageNavigator from \"../../utilities/page-navigator\";\nimport req from \"../../utilities/request-utility\";\nimport colors from \"../../style/colors\";\nimport { SC_SET_SELECTED_PROJECT } from \"../../actions/actionTypes\";\n\nfunction SemcompltionProjectChooser(props) {\n const { page, backButtonURL } = usePageAndBackButtonURL(props);\n const { selectedProject } = useSelector((s) => s.semcompletion);\n const primaryColor = useSelector((s) => s.appConfig.primaryColor);\n const dispatch = useDispatch();\n\n const { data: { data: projects = [] } = {}, isLoading } = useQuery(\"Projects\", () => req()(\"semcompletion/projects/\"));\n\n function changeDefaultProject(projectId) {\n let [newProject] = projects.filter((p) => p.id === projectId);\n dispatch({\n type: SC_SET_SELECTED_PROJECT,\n payload: newProject,\n });\n req().put(`semcompletion/projects/selected/${newProject.id}`);\n }\n\n return (\n \n pageNavigator(backButtonURL, \"backward\")}>\n \n \n }\n title={page.title}\n />\n\n \n
\n
\n

\n Current project:\n {selectedProject.id && selectedProject.number && selectedProject.description ? (\n <>\n {selectedProject.number} - {selectedProject.description}\n \n ) : (\n No project selected\n )}\n

\n
\n\n \n changeDefaultProject(e.target.value)}\n options={projects.map((p) => ({ label: `${p.number} - ${p.description}`, value: p.id }))}\n style={{ marginBottom: \"2rem\" }}\n value={selectedProject.id}\n />\n
\n
\n
\n );\n}\n\nconst componentStyles = (primaryColor) => css`\n background-color: ${colors.white};\n padding: 2rem 1rem;\n\n .wrapper {\n max-width: 800px;\n margin: 0 auto;\n }\n\n .current-project-status {\n border-radius: 3px;\n margin-bottom: 1rem;\n display: flex;\n padding-bottom: 2rem;\n margin-bottom: 2rem;\n border-bottom: 1px ${colors.lightGrey} solid;\n\n svg {\n width: 1.25rem;\n height: 1.25rem;\n margin-right: 0.5rem;\n color: ${colors.darkGrey};\n }\n }\n\n .seperator {\n height: 1px;\n background-color: ${colors.lightGrey};\n margin-bottom: 1rem;\n }\n\n label {\n font-weight: 700;\n }\n\n p {\n strong {\n margin-right: 0.5rem;\n }\n\n span {\n color: ${colors.darkGrey};\n font-size: 0.9rem;\n }\n svg {\n width: 1rem;\n height: 1rem;\n color: ${colors.darkGrey};\n margin: 0 0.15rem -3px 0rem;\n }\n }\n`;\n\nexport default SemcompltionProjectChooser;\n","import React, { useEffect, useState } from \"react\";\nimport { css } from \"emotion\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { notification } from \"antd\";\n\n// Redux actions\nimport InlineSpinner from \"../ui/InlineSpinner\";\nimport colors from \"../../style/colors\";\nimport req from \"../../utilities/request-utility\";\nimport { showDialog } from \"../../actions/uiActions\";\nimport { AlertDecagramIcon } from \"mdi-react\";\nimport { SC_SET_SELECTED_PROJECT } from \"../../actions/actionTypes\";\nimport getLinkPathFromPageObject from \"../../utilities/get-link-path-from-page-object\";\nimport pageNavigator from \"../../utilities/page-navigator\";\nimport getAppName from \"../../utilities/get-app-name\";\n\nconst uiStates = {\n loading: \"loading\",\n hidden: \"hidden\",\n};\n\nfunction SemcompletionInitializer(props) {\n const [uiState, setUiState] = useState(uiStates.loading);\n const pages = useSelector((s) => s.pages.pages);\n const dispatch = useDispatch();\n\n function getProjectChooserPage() {\n return pages.filter((p) => p.module === \"SemcompletionProjectChooser\")[0];\n }\n\n useEffect(() => {\n if (getAppName() === \"semcompletion\" || getAppName() === \"semcompletion-rig\") {\n req()(`semcompletion/projects/selected`)\n .then(handleProjectResponse)\n .catch((err) => {\n setUiState(uiStates.hidden);\n notification.error({ duration: 7, message: \"FAILED\", description: \"Make sure the correct project is selected\" });\n });\n } else {\n setUiState(uiStates.hidden);\n return;\n }\n // eslint-disable-next-line\n }, []);\n\n function handleProjectResponse({ data: project }) {\n if (Object.keys(project).length === 0) {\n setUiState(uiStates.hidden);\n dispatch(\n showDialog({\n title: \"No project is selected\",\n content: \"You need to select a project before using semcompletion.\",\n primaryAction: () => pageNavigator(getLinkPathFromPageObject(getProjectChooserPage(), \"absolute\"), \"forward\"),\n primaryActionTitle: \"Choose a project now\",\n styleType: \"neutral\",\n disableSecondaryAction: true,\n })\n );\n } else {\n setUiState(uiStates.hidden);\n dispatch({\n type: SC_SET_SELECTED_PROJECT,\n payload: project,\n });\n }\n }\n\n return (\n
\n {uiState === uiStates.loading && (\n <>\n

Syncing...

\n \n \n )}\n
\n );\n}\n\nconst componentStyles = () => css`\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem;\n display: flex;\n align-items: center;\n\n div.spinner {\n margin-bottom: 0px;\n margin-left: 0.35rem;\n margin-right: 0.15rem;\n }\n\n p {\n font-size: 0.8rem;\n color: ${colors.darkGrey};\n }\n`;\n\nexport default SemcompletionInitializer;\n","import { useQuery } from \"react-query\";\n\nimport req from \"../../../../../utilities/request-utility\";\n\nfunction useOverviewData() {\n const {\n isLoading: masterGroupsLoading,\n error: masterGroupsError,\n data: { data: masterGroupsData = [] } = {},\n } = useQuery(\"MasterGroups\", () => req()(\"/masterGroups\"), {\n staleTime: 60 * 60 * 1000, //1 hour\n });\n const masterGroups = {\n isLoading: masterGroupsLoading,\n error: masterGroupsError,\n data: masterGroupsData.map((d) => ({ ...d, name: d.title })),\n };\n\n const {\n isLoading: customersLoading,\n error: customersError,\n data: { data: customersData = [] } = {},\n } = useQuery(\"Customers\", () => req()(\"/semcompletion/customers\"), {\n staleTime: 60 * 60 * 1000, //1 hour\n });\n const customers = {\n isLoading: customersLoading,\n error: customersError,\n data: customersData,\n };\n\n return { customers, masterGroups };\n}\n\nexport default useOverviewData;\n","import React, { useState } from \"react\";\nimport { notification } from \"antd\";\nimport { css } from \"emotion\";\n\n// styling\nimport colors from \"../../../../style/colors\";\n\n// utlities\nimport req from \"../../../../utilities/request-utility\";\nimport getErrorMessage from \"../../../../utilities/get-error-message\";\n\n// ui-Components\nimport DropDown from \"../../../ui/DropDown\";\nimport Button from \"../../../ui/Button\";\nimport { useDispatch } from \"react-redux\";\nimport ScrollView from \"../../../ui/ScrollView\";\nimport { hideModalPage } from \"../../../../actions/uiActions\";\n\nimport InlineSpinner from \"../../../ui/InlineSpinner\";\n\nimport useOverviewData from \"./hooks/useOverviewData\";\n\nfunction PunchModal({ currentValues = [], masterGroup, refreshData }) {\n const dispatch = useDispatch();\n const { customers } = useOverviewData();\n\n const [formData, setFormData] = useState({ customer: \"\" });\n const [formLoading, setFormloading] = useState(false);\n\n const isFormValid = (formData) => {\n if (!formData.customer) {\n return {\n status: false,\n message: \"Make sure to fill out customer and then try again\",\n };\n }\n\n return { status: true };\n };\n\n const save = async () => {\n const isFormValidData = isFormValid(formData);\n if (!isFormValidData.status)\n return notification.error({ duration: 7, message: \"FAILED\", description: isFormValidData.message });\n\n try {\n setFormloading(true);\n await req().post(`/masterGroups/${masterGroup}/customers`, formData);\n dispatch(hideModalPage());\n if (refreshData) refreshData();\n setFormloading(false);\n\n notification.success({\n duration: 7,\n message: \"SUCCESS\",\n description: \"You have successfully added a customer to the user group\",\n });\n } catch (error) {\n notification.error({ duration: 7, message: \"FAILED\", description: getErrorMessage(error) });\n setFormloading(false);\n }\n };\n\n const onChange = (e) => setFormData({ ...formData, [e.target.name]: e.target.value });\n\n const customerIds = currentValues.map((d) => d.id);\n\n return (\n \n
\n
\n \n (customerIds.includes(d.id) ? false : true))\n .map((d) => ({ label: d.name, value: d.id }))\n : []\n }\n placeholder=\"Click to choose\"\n value={formData[\"customer\"]}\n />\n
\n
\n\n
\n
\n \n
\n
\n
\n );\n}\n\nconst container = () => css`\n background-color: ${colors.white};\n padding: 1rem 0;\n\n label {\n font-weight: 700;\n margin-bottom: 0.35rem;\n display: block;\n }\n\n .row {\n padding: 0 1rem;\n display: flex;\n justify-content: space-between;\n max-width: 1200px;\n margin: 0 auto 1.25rem auto;\n\n .col-50 {\n flex-basis: 49%;\n }\n\n .col-100 {\n flex-basis: 100%;\n }\n\n @media screen and (max-width: 650px) {\n flex-wrap: wrap;\n\n .col-50 {\n flex-basis: 100%;\n\n &:nth-child(odd) {\n margin-bottom: 1.25rem;\n }\n }\n }\n }\n\n .required {\n color: #808080;\n }\n`;\n\nexport default PunchModal;\n","import React, { useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useQuery } from \"react-query\";\nimport { Modal, notification } from \"antd\";\n\n// styling\nimport { css } from \"emotion\";\nimport colors from \"../../../../style/colors\";\n\n// hooks\nimport useOverviewData from \"./hooks/useOverviewData\";\n\n// ui-Components\nimport InlineSpinner from \"../../../ui/InlineSpinner\";\nimport DropDownList from \"../../../ui/DropDownList\";\nimport Page from \"../../../ui/Page\";\nimport { AlertCircleOutlineIcon, ArrowBackIcon, PlusIcon, TrashCanIcon } from \"mdi-react\";\nimport Button from \"../../../ui/Button\";\nimport usePageAndBackButtonURL from \"../../../../hooks/usePageAndBackButtonURL\";\nimport TopBar from \"../../../ui/TopBar\";\nimport pageNavigator from \"../../../../utilities/page-navigator\";\nimport StatusBox from \"../../../ui/StatusBox\";\nimport ListItem from \"../../../ui/ListItem\";\nimport { showModalPage } from \"../../../../actions/uiActions\";\n\nimport ModalCustom from \"./Modal\";\n\nimport req from \"../../../../utilities/request-utility\";\n\nfunction PunchOverview(props) {\n const dispatch = useDispatch();\n\n const [masterGroup, setMasterGroup] = useState(\"\");\n const { backButtonURL } = usePageAndBackButtonURL(props);\n const { masterGroups } = useOverviewData();\n\n const {\n isFetching: masterGroupsFetching = false,\n error: masterGroupsError = null,\n data: { data: masterGroupsData = [] } = {},\n refetch: masterGroupsRefetch,\n } = useQuery(\n [\"CustomersProjects\", masterGroup],\n ({ queryKey: [key, masterGroup] }) => {\n if (masterGroup === \"\") return new Promise((resolve) => resolve({ data: [] }));\n return req()(`/masterGroups/${masterGroup}/customers`);\n },\n {\n keepPreviousData: true,\n refetchOnWindowFocus: false,\n staleTime: 60 * 60 * 1000, //1 hour\n }\n );\n\n const onDelete = async (id) => {\n console.log(id);\n\n Modal.confirm({\n title: \"Are you sure you want to remove this customer to the user group?\",\n onOk: async () => {\n try {\n await req().delete(`/masterGroups/${masterGroup}/customers/${id}`);\n masterGroupsRefetch();\n notification.success({\n duration: 7,\n message: \"SUCCESS\",\n description: \"You have successfully removed a customer to this user group\",\n });\n } catch (error) {\n notification.error({ duration: 7, message: \"FAILED\", description: error.message });\n }\n },\n });\n };\n\n return (\n \n pageNavigator(backButtonURL, \"backward\")} />}\n />\n {!masterGroups.isLoading && !masterGroups.error && (\n <>\n
\n
\n setMasterGroup(e.target.value)}\n selectedContentId={masterGroup}\n />\n
\n {masterGroup && (\n \n dispatch(\n showModalPage({\n content: (\n \n ),\n })\n )\n }\n style={{ flexBasis: \"30%\", flexShrink: 0, width: \"100%\" }}\n >\n Add Customer \n \n )}\n
\n
\n
\n {masterGroupsFetching && !masterGroupsError && }\n {!masterGroupsFetching && masterGroupsError && }\n {!masterGroup && } content=\" \" />}\n {masterGroup && !masterGroupsFetching && !masterGroupsError && masterGroupsData.length === 0 && (\n }\n content=\" \"\n />\n )}\n\n {masterGroup &&\n !masterGroupsFetching &&\n !masterGroupsError &&\n masterGroupsData.length !== 0 &&\n masterGroupsData.map((d) => {\n return (\n onDelete(d.connectionId)}\n title={d.number}\n subTitle={d.name}\n iconRight={}\n key={d.id}\n />\n );\n })}\n
\n \n )}\n \n );\n}\n\nconst container = () => css`\n .header {\n background-color: ${colors.white};\n padding: 1rem;\n\n .punch-count-container {\n flex-basis: 50%;\n padding: 0 0.5rem;\n display: flex;\n }\n\n .row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.85rem;\n\n &:last-of-type {\n margin-bottom: 0;\n }\n\n .dropdown {\n flex-grow: 1;\n margin: 0 0.35rem;\n flex-basis: 25%;\n\n &:first-of-type {\n margin-left: 0;\n }\n &:last-of-type {\n margin-right: 0;\n }\n }\n }\n }\n\n button svg {\n display: inline-block;\n margin-bottom: -0.35rem;\n }\n`;\n\nexport default PunchOverview;\n","export default function(num) {\n if (String(num).length === 1) {\n return `0${num}`;\n } else {\n return num;\n }\n}\n","import React, { useEffect, useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { css } from \"emotion\";\r\nimport { CheckBoxOutlineBlankIcon, CheckboxMarkedIcon } from \"mdi-react\";\r\nimport PropTypes from \"prop-types\";\r\n//Style\r\nimport common from \"../../style/common\";\r\nimport colors from \"../../style/colors\";\r\n\r\n/**\r\n * List for selection of multiple elements. If you need a list with only one selectable element at a time, see RadioGroup\r\n */\r\nconst CheckboxGroup = (props) => {\r\n const { appConfig, disabled = false, onSelect: onSelectOutside, options = [], selected = [], style = {} } = props;\r\n const { primaryColor } = appConfig;\r\n\r\n const [selectedIds, setSelectedIds] = useState([]);\r\n\r\n const onSelect = (checkboxId) => {\r\n let checkboxIdIndex = selectedIds.indexOf(checkboxId);\r\n\r\n if (checkboxIdIndex === -1) {\r\n setSelectedIds((selectedIds) => {\r\n const newIds = [...selectedIds, checkboxId];\r\n onSelectOutside(newIds);\r\n return newIds;\r\n });\r\n } else {\r\n setSelectedIds((selectedIds) => {\r\n const newIds = [...selectedIds.slice(0, checkboxIdIndex), ...selectedIds.slice(checkboxIdIndex + 1)];\r\n onSelectOutside(newIds);\r\n return newIds;\r\n });\r\n }\r\n };\r\n\r\n const stringifiedSelected = JSON.stringify(selected);\r\n\r\n useEffect(() => {\r\n setSelectedIds(selected); // eslint-disable-next-line\r\n }, [stringifiedSelected]);\r\n\r\n return (\r\n
\r\n {options.map((checkbox, index) => (\r\n \r\n ))}\r\n
\r\n );\r\n};\r\nconst componentStyle = (primaryColor) => css`\r\n border: 1px solid ${colors.midGrey};\r\n border-radius: 3px;\r\n\r\n .checkbox {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n -webkit-appearance: none;\r\n border-bottom: 1px solid ${colors.midGrey};\r\n padding: 0.75rem 0.85rem;\r\n font-weight: 400;\r\n\r\n svg {\r\n color: ${colors.midGrey};\r\n flex-shrink: 0;\r\n }\r\n\r\n p {\r\n margin-left: 0.5rem;\r\n font-size: 1rem;\r\n font-family: ${common.fontStack};\r\n }\r\n\r\n &.selected,\r\n &.selected svg {\r\n font-weight: 700;\r\n color: ${primaryColor};\r\n }\r\n }\r\n label:last-child div {\r\n border-bottom: none;\r\n }\r\n`;\r\nCheckboxGroup.propTypes = {\r\n /** Array of items to be displayed, its structure should be [ { id: XX, title: \"YY\" } ]*/\r\n options: PropTypes.array,\r\n\r\n /** Overriding of style in component, if you have very specific needs */\r\n style: PropTypes.object,\r\n};\r\nconst mapStateToProps = (state) => ({\r\n appConfig: state.appConfig,\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(CheckboxGroup);\r\n","import React, { Component } from \"react\";\nimport { parse, format, addDays } from \"date-fns\";\nimport { connect } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { Input, notification } from \"antd\";\nimport params from \"jquery-param\";\n\nimport req from \"../../utilities/request-utility\";\n\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport { CloseIcon, InformationOutlineIcon } from \"mdi-react\";\n\n// actions\nimport { hideModalPage } from \"../../actions/uiActions\";\n\n// ui-components\nimport ScrollView from \"../ui/ScrollView\";\nimport Page from \"../ui/Page\";\nimport TextInput from \"../ui/TextInput\";\nimport DropDown from \"../ui/DropDown\";\nimport DatePicker from \"../ui/DatePicker\";\nimport TextAreaInput from \"../ui/TextareaInput\";\nimport Button from \"../ui/Button\";\nimport common from \"../../style/common\";\nimport zeroPad from \"../../utilities/zero-pad\";\nimport InlineSpinner from \"../ui/InlineSpinner\";\nimport StatusBox from \"../ui/StatusBox\";\nimport CheckboxGroup from \"../ui/CheckboxGroup\";\n\nconst rotationStatuses = {\n noChange: \"NO_CHANGE\",\n beforePlan: \"BEFORE_PLAN_ROTATION\",\n startPlanned: \"START_PLANNED_ROTATION\",\n startPlannedNightShift: \"START_PLANNED_ROTATION_NIGHT_SHIFT\",\n endOfRotation: \"END_OF_ROTATION\",\n changeShift: \"CHANGE_SHIFT\",\n preRotationDayShift: \"PRE_ROTATION_DAY_SHIFT\",\n preRotationNightShift: \"PRE_ROTATION_NIGHT_SHIFT\",\n oneDayCourse: \"ONE_DAY_COURSE\",\n startMultiDayCourse: \"START_MULTI_DAY_COURSE\",\n course: \"COURSE\",\n endOfMultiDayCourse: \"END_OF_MULTI_DAY_COURSE\",\n};\n\nclass WorkTimeRegistration extends Component {\n constructor(props) {\n super(props);\n this.state = {\n // Formdata\n formData: {\n location: undefined, //offshore/onshore\n project: undefined,\n subProject: undefined,\n projectActivity: undefined,\n activities: [],\n description: \"\",\n date: undefined,\n startTimeHours: \"00\",\n startTimeMinutes: \"00\",\n endTimeHours: \"00\",\n endTimeMinutes: \"00\",\n rotationStatus: rotationStatuses.noChange,\n absenceNightTime: false,\n midRotation: false,\n courses: false,\n },\n\n // Api data\n projects: [],\n subProjects: [],\n projectActivities: [],\n wageCodes: [],\n loadingWageCodes: true,\n\n // Local state\n isProjectActivitiesEmpty: false,\n selectedActivity: null,\n isFormReady: true,\n submittingForm: false,\n editMode: false,\n errorLoadingFormData: false,\n // wageCodesCourses: [\"315\", \"301\", \"320\"],\n wageCodesNightTime: [\"311\", \"313\", \"352\", \"362\"],\n midRotationStatuses: [\"NO_CHANGE\", \"START_PLANNED_ROTATION\", \"START_PLANNED_ROTATION_NIGHT_SHIFT\", \"END_OF_ROTATION\"],\n courseRotations: [\"ONE_DAY_COURSE\", \"START_MULTI_DAY_COURSE\", \"COURSE\", \"END_OF_MULTI_DAY_COURSE\"],\n };\n }\n\n componentDidMount = () => {\n let { updateRegistration } = this.props;\n // EDIT MODE\n if (updateRegistration) {\n this.initializeFormForEdit();\n this.setState({ editMode: true });\n\n // ADD MODE\n } else {\n let date = format(new Date(), \"yyyy-MM-dd\");\n this.setState({ formData: { ...this.state.formData, date } }); // Default date to today (nice detail)\n\n // Initialize data-fetching\n this.getDefaultProjectSubProjectAndActivity().then(this.getProjects);\n this.getWageCodes();\n\n // Gets last used time-item in local storage (uses whatever the user entered last)\n let lastUsedTime = localStorage.getItem(\"semcotime-last-time-input-norway\");\n if (lastUsedTime) {\n lastUsedTime = JSON.parse(lastUsedTime);\n this.setState((state) => ({\n formData: {\n ...state.formData,\n startTimeHours: lastUsedTime.startTimeHours,\n startTimeMinutes: lastUsedTime.startTimeMinutes,\n endTimeHours: lastUsedTime.endTimeHours,\n endTimeMinutes: lastUsedTime.endTimeMinutes,\n },\n }));\n }\n }\n };\n\n async initializeFormForEdit() {\n const { registration, fetchDate, selectedUser } = this.props;\n\n try {\n this.setState({ isFormReady: false });\n let { data } = await req()(\n `semcotime/work-hours/v3/${registration.timeCardTransactionId || registration.incrementTransactionId}?${params({\n date: fetchDate,\n externalId: selectedUser,\n })}`\n );\n\n await this.getProjects();\n //temp solution\n const aaa = this.state.projects.filter((d) => d.name === registration.registrations[0].project)[0];\n this.setState({ formData: { ...this.state.formData, project: aaa.id } });\n await this.getSubProjects();\n this.setState({\n formData: { ...this.state.formData, subProject: registration.registrations[0].subProjectId },\n });\n await this.getProjectActivities();\n this.setState({ formData: { ...this.state.formData, projectActivity: data.activitySequence } });\n await this.getWageCodes();\n\n this.setState({\n formData: {\n ...this.state.formData,\n date: format(parse(data.date, \"yyyyMMdd\", 0), \"yyyy-MM-dd\"),\n startTimeHours: data.startTime === \"Invalid date\" ? \"\" : format(parse(data.startTime, \"yyyyMMddHHmmss\", 0), \"HH\"),\n startTimeMinutes:\n data.startTime === \"Invalid date\" ? \"\" : format(parse(data.startTime, \"yyyyMMddHHmmss\", 0), \"mm\"),\n endTimeHours: data.endTime === \"Invalid date\" ? \"\" : format(parse(data.endTime, \"yyyyMMddHHmmss\", 0), \"HH\"),\n endTimeMinutes: data.endTime === \"Invalid date\" ? \"\" : format(parse(data.endTime, \"yyyyMMddHHmmss\", 0), \"mm\"),\n description: data.description,\n transactionId: data.transactionId,\n rotationStatus: this.getRotationStatusFromExistingData(data),\n courses: data.courses,\n activities: data.extras.map((extra) => {\n const wageCode = this.state.wageCodes.find((d) => d.id === extra.wageCode);\n return {\n id: extra.wageCode,\n name: wageCode ? wageCode.name : extra.wageCode,\n hours: extra.hours,\n transactionId: extra.transactionId,\n };\n }),\n absenceNightTime: data.absenceNightTime,\n midRotation: data.midRotation,\n },\n });\n\n this.setState({ isFormReady: true });\n } catch (err) {\n console.log(\"err: \", err.response);\n this.setState({ errorLoadingFormData: true });\n }\n }\n\n getRotationStatusFromExistingData(apiData) {\n if (apiData.endOfRotation === true) return rotationStatuses.endOfRotation;\n else if (apiData.firstDay === true) return rotationStatuses.startPlanned;\n else if (apiData.firstDayNightShift === true) return rotationStatuses.startPlannedNightShift;\n else if (apiData.preRotation === true) return rotationStatuses.beforePlan;\n else if (apiData.changeShift === true) return rotationStatuses.changeShift;\n else if (apiData.preRotationDayShift) return rotationStatuses.preRotationDayShift;\n else if (apiData.preRotationNightShift) return rotationStatuses.preRotationNightShift;\n else if (apiData.oneDayCourse === true) return rotationStatuses.oneDayCourse;\n else if (apiData.startMultiDayCourse === true) return rotationStatuses.startMultiDayCourse;\n else if (apiData.course === true) return rotationStatuses.course;\n else if (apiData.endOfMultiDayCourse === true) return rotationStatuses.endOfMultiDayCourse;\n else return rotationStatuses.noChange;\n }\n\n getProjects = () => {\n const { selectedUser } = this.props;\n\n return new Promise((resolve, reject) => {\n req()(`semcotime/projects?${params({ externalId: selectedUser })}`)\n .then((res) => res.data)\n .then((projects) => this.setState({ projects }))\n .then(resolve)\n .catch((err) => {\n reject();\n });\n });\n };\n\n getSubProjects = () => {\n return new Promise((resolve, reject) => {\n req()(`semcotime/projects/${this.state.formData.project}/sub-projects`)\n .then((res) => res.data)\n .then((subProjects) => this.setState({ subProjects }))\n .then(resolve)\n .catch((err) => {\n reject(err);\n });\n });\n };\n\n getProjectActivities = () => {\n this.setState({ isProjectActivitiesEmpty: false });\n let { project, subProject, date } = this.state.formData;\n\n return new Promise((resolve, reject) => {\n req()(\n `semcotime/projects/${project}/sub-projects/${subProject}/activities?${params({\n date: date ? date : format(new Date(), \"yyyy-MM-dd\"),\n })}`\n )\n .then((res) => res.data)\n .then((projectActivities) => {\n if (projectActivities.length === 0) {\n this.setState({ isProjectActivitiesEmpty: true });\n }\n this.setState({ projectActivities });\n })\n .then(resolve)\n .catch((err) => {\n reject(err);\n });\n });\n };\n\n getWageCodes = () => {\n const { selectedUser } = this.props;\n\n return new Promise((resolve, reject) => {\n req()(`semcotime/wage-codes?${params({ externalId: selectedUser, wageType: \"increment\" })}`)\n .then((res) => res.data)\n .then((wageCodes) => {\n this.setState({ wageCodes, loadingWageCodes: false });\n resolve();\n })\n .catch((err) => {\n reject(err);\n });\n });\n };\n\n getDefaultProjectSubProjectAndActivity = () => {\n const { selectedUser } = this.props;\n\n return new Promise((resolve, reject) => {\n req()(`semcotime/projects/default-project-sub-project-and-activity?${params({ externalId: selectedUser })}`)\n .then(async ({ data }) => {\n // No default project for current user\n if (!data.projectId) {\n resolve();\n return;\n }\n\n await this.getProjects();\n // 1. set project id\n this.setState({ formData: { ...this.state.formData, project: data.projectId } });\n // 2. Fetch subProjects for given project id\n await this.getSubProjects();\n // 3. Set subProjectId\n this.setState({ formData: { ...this.state.formData, subProject: data.subProjectId } });\n // 4. Fetch project-activities\n await this.getProjectActivities();\n // 5. Set project-activitiy\n this.setState({ formData: { ...this.state.formData, projectActivity: data.activitySequence } });\n })\n .catch((err) => {\n resolve();\n });\n });\n };\n\n handleTimeInput = (e, type) => {\n // Exception for deleing\n if (e.target.value === \"\") {\n this.setState({\n formData: {\n ...this.state.formData,\n [e.target.name]: e.target.value,\n },\n });\n }\n\n let num = parseInt(e.target.value);\n\n if (\n // If not a number\n isNaN(num) ||\n // If length is more than two digits\n e.target.value.length > 2 ||\n // type is hours and value is not between 0-23\n (type === \"hours\" && (num < 0 || num > 23)) ||\n // type is minutes and value is not between 0-59\n (type === \"minutes\" && (num < 0 || num > 59))\n ) {\n return;\n }\n\n this.setState({\n formData: {\n ...this.state.formData,\n [e.target.name]: e.target.value,\n },\n });\n };\n\n handleFormChange = (e) => {\n let { formData, wageCodesNightTime } = this.state;\n const defaultTimeStamp = {\n endTimeHours: \"00\",\n endTimeMinutes: \"00\",\n startTimeHours: \"00\",\n startTimeMinutes: \"00\",\n };\n\n // Handling of absence night\n if (e.absenceNightTime) {\n this.setState({\n formData: {\n ...formData,\n absenceNightTime: e.absenceNightTime.length !== 0 ? true : false,\n // activities: formData.activities.filter((d) => wageCodesNightTime.includes(d.id)),\n // ...defaultTimeStamp\n },\n selectedActivity: null,\n });\n }\n\n if (e.midRotation) {\n this.setState({\n formData: {\n ...formData,\n midRotation: e.midRotation.length !== 0 ? true : false,\n rotationStatus: \"NO_CHANGE\",\n },\n });\n }\n\n // Handling of Courses\n if (e.courses) {\n const courses = e.courses.length !== 0 ? true : false;\n\n this.setState({\n selectedActivity: null,\n formData: {\n ...formData,\n courses,\n rotationStatus: courses ? \"COURSE\" : \"NO_CHANGE\",\n ...defaultTimeStamp,\n },\n });\n }\n\n // Handling of date\n if (e.date) {\n this.setState({\n formData: {\n ...formData,\n date: e.date,\n // projectActivity: undefined,\n },\n });\n\n return;\n }\n\n if (e.persist) e.persist();\n\n // Handling of rest\n if (e.target) {\n this.setState(\n {\n formData: {\n ...formData,\n [e.target.name]: e.target.value,\n },\n },\n () => {\n // Update formData variable (prevents stale state)\n formData = this.state.formData;\n\n // If a project is chosen, remove potentially chosen subProjects and projectActivites.\n // Both in the formData object, but also in the api-responses\n if (e.target.name === \"project\") {\n this.setState(\n {\n subProjects: [],\n projectActivities: [],\n formData: {\n ...formData,\n subProject: undefined,\n projectActivity: undefined,\n },\n },\n this.getSubProjects\n );\n }\n\n // The same as above, but only with subProject\n if (e.target.name === \"subProject\") {\n this.setState(\n {\n projectActivities: [],\n formData: {\n ...formData,\n projectActivities: undefined,\n },\n },\n this.getProjectActivities\n );\n }\n }\n );\n }\n };\n\n isFormValid = () => {\n let { formData } = this.state;\n\n // Cases hvor form er valid:\n // -------------------------\n // 1) For alle cases skal projekt, underprojekt, aktivitet og dato skal være udfyldt.\n // 2) Hvis der ikke er valgt en aktivitet skal både start- og sluttidspunkt være udfyldt\n // 3) Hvis der er valgt mindst en aktivitet, men ingen start og sluttidspunkt\n // 4) Hvis der er valgt mindst en aktivtet og både start og sluttidspunkt\n\n // 1)\n if (!formData.project || !formData.subProject || !formData.date) {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"Du mangler at vælge entet projekt, underprojekt eller dato\",\n });\n return false;\n }\n\n // if (!formData.absenceNightTime) { removed condition if NIGHT is checked\n // 2)\n if (\n formData.activities.length === 0 &&\n (!formData.startTimeHours || !formData.startTimeMinutes || !formData.endTimeHours || !formData.endTimeMinutes)\n ) {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"Du mangler start- og/eller sluttidspunkt.\",\n });\n return false;\n }\n\n // 4)\n if (\n formData.activities.length > 0 &&\n (formData.startTimeHours || formData.startTimeMinutes || formData.endTimeHours || formData.endTimeMinutes) &&\n !(formData.startTimeHours && formData.startTimeMinutes && formData.endTimeHours && formData.endTimeMinutes)\n ) {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description:\n \"Du har tilføjet et tillæg og kun udfyldt start- eller sluttidspunkt delvist. Du kan enten udfylde både start- og sluttidspunkt, slette værdierne fra start- og sluttidspunkt eller fjerne dit tillæg.\",\n });\n return false;\n }\n\n if (formData.courses === true && formData.activities.length === 0) {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"Lønnskode 301, 315 eller 320 er nødvendig for kurs\",\n });\n return false;\n }\n\n return true;\n };\n\n getStartAndEndTimeAndDate() {\n let { formData } = this.state;\n\n let date = format(parse(formData.date, \"yyyy-MM-dd\", 0), \"yyyyMMdd\");\n\n let startTime = `${zeroPad(formData.startTimeHours)}${zeroPad(formData.startTimeMinutes)}`;\n let endTime = `${zeroPad(formData.endTimeHours)}${zeroPad(formData.endTimeMinutes)}`;\n\n // If registration stretch across midnight offset date for endTime by one\n if (startTime > endTime) {\n startTime = `${date}${zeroPad(formData.startTimeHours)}${zeroPad(formData.startTimeMinutes)}00`;\n endTime = `${format(addDays(parse(formData.date, \"yyyy-MM-dd\", 0), 1), \"yyyyMMdd\")}${zeroPad(\n formData.endTimeHours\n )}${zeroPad(formData.endTimeMinutes)}00`;\n } else {\n startTime = `${date}${zeroPad(formData.startTimeHours)}${zeroPad(formData.startTimeMinutes)}00`;\n endTime = `${date}${zeroPad(formData.endTimeHours)}${zeroPad(formData.endTimeMinutes)}00`;\n }\n\n // Handle when user hasn't entered start or end time (which is actually ok?)\n if (!formData.startTimeHours || !formData.startTimeMinutes) startTime = \"\";\n if (!formData.endTimeHours || !formData.endTimeMinutes) endTime = \"\";\n\n return { startTime, endTime, date };\n }\n\n handleSave = () => {\n let { addRegistration, hideModalPage, lang } = this.props;\n let { formData } = this.state;\n\n // eslint-disable-next-line\n if (this.isFormValid()) {\n this.setState({ submittingForm: true });\n let { startTime, endTime, date } = this.getStartAndEndTimeAndDate();\n addRegistration({\n date,\n startTime,\n endTime,\n project: formData.project,\n subProject: formData.subProject,\n description: formData.description,\n activitySequence: formData.projectActivity,\n extras: formData.activities.map(({ id, hours }) => ({ wageCode: id, hours })),\n preRotation: formData.rotationStatus === rotationStatuses.beforePlan,\n firstDay: formData.rotationStatus === rotationStatuses.startPlanned,\n firstDayNightShift: formData.rotationStatus === rotationStatuses.startPlannedNightShift,\n endOfRotation: formData.rotationStatus === rotationStatuses.endOfRotation,\n changeShift: formData.rotationStatus === rotationStatuses.changeShift,\n preRotationDayShift: formData.rotationStatus === rotationStatuses.preRotationDayShift,\n preRotationNightShift: formData.rotationStatus === rotationStatuses.preRotationNightShift,\n absenceNightTime: formData.absenceNightTime,\n midRotation: formData.midRotation,\n courses: formData.courses,\n oneDayCourse: formData.rotationStatus === rotationStatuses.oneDayCourse,\n startMultiDayCourse: formData.rotationStatus === rotationStatuses.startMultiDayCourse,\n course: formData.rotationStatus === rotationStatuses.course,\n endOfMultiDayCourse: formData.rotationStatus === rotationStatuses.endOfMultiDayCourse,\n })\n .then(() => {\n notification.success({\n duration: 7,\n message: \"SUCCESS\",\n description: lang.savedRegistrationToastContent,\n });\n hideModalPage();\n\n // Saves last used item in local storage\n localStorage.setItem(\n \"semcotime-last-time-input-norway\",\n JSON.stringify({\n startTimeHours: formData.startTimeHours,\n startTimeMinutes: formData.startTimeMinutes,\n endTimeHours: formData.endTimeHours,\n endTimeMinutes: formData.endTimeMinutes,\n })\n );\n })\n .catch((err) => {\n let errorMessage = \"Unspecified error\";\n if (err && err.response && err.response.data) errorMessage = err.response.data.message;\n\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `${lang.errorSavingRegistrationToastContent}. Fejlkode: ${errorMessage}`,\n });\n\n this.setState({ submittingForm: false });\n });\n }\n };\n\n handleUpdate = () => {\n let { updateRegistration, hideModalPage, lang } = this.props;\n let { formData } = this.state;\n\n // eslint-disable-next-line\n if (this.isFormValid()) {\n this.setState({ submittingForm: true });\n let { startTime, endTime, date } = this.getStartAndEndTimeAndDate();\n\n let registration = {\n date,\n startTime,\n endTime,\n project: formData.project,\n subProject: formData.subProject,\n description: formData.description,\n activitySequence: formData.projectActivity,\n transactionId: formData.transactionId,\n extras: formData.activities.map(({ id, hours, transactionId = -1 }) => ({\n wageCode: id,\n hours,\n transactionId,\n })),\n absenceNightTime: formData.absenceNightTime,\n midRotation: formData.midRotation,\n courses: formData.courses,\n };\n\n // If user hos chosen nothing, not update these values\n if (formData.rotationStatus !== rotationStatuses.noChange) {\n registration = {\n ...registration,\n preRotation: formData.rotationStatus === rotationStatuses.beforePlan,\n firstDay: formData.rotationStatus === rotationStatuses.startPlanned,\n firstDayNightShift: formData.rotationStatus === rotationStatuses.startPlannedNightShift,\n endOfRotation: formData.rotationStatus === rotationStatuses.endOfRotation,\n changeShift: formData.rotationStatus === rotationStatuses.changeShift,\n preRotationDayShift: formData.rotationStatus === rotationStatuses.preRotationDayShift,\n preRotationNightShift: formData.rotationStatus === rotationStatuses.preRotationNightShift,\n oneDayCourse: formData.rotationStatus === rotationStatuses.oneDayCourse,\n startMultiDayCourse: formData.rotationStatus === rotationStatuses.startMultiDayCourse,\n course: formData.rotationStatus === rotationStatuses.course,\n endOfMultiDayCourse: formData.rotationStatus === rotationStatuses.endOfMultiDayCourse,\n };\n }\n\n updateRegistration(registration)\n .then(() => {\n notification.success({\n duration: 7,\n message: \"SUCCESS\",\n description: lang.savedRegistrationToastContent,\n });\n hideModalPage();\n })\n .catch((err) => {\n let errorMessage = \"Unspecified error\";\n if (err && err.response && err.response.data) errorMessage = err.response.data.message;\n\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `${lang.errorSavingRegistrationToastContent}. Fejlkode: ${errorMessage}`,\n });\n\n this.setState({ submittingForm: false });\n });\n } else {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"Du skal udfylde projekt, underprojekt, aktivitet, dato, og start- og sluttid\",\n });\n }\n };\n\n getProjectActivityPlaceholder() {\n let { lang } = this.props;\n let { isProjectActivitiesEmpty, projectActivities } = this.state;\n\n if (isProjectActivitiesEmpty === true) {\n return lang.noActivities;\n } else if (projectActivities.length === 0 && isProjectActivitiesEmpty === false) {\n return lang.loading;\n } else {\n return lang.chooseActivity;\n }\n }\n\n render() {\n const { lang, selectedUserName } = this.props;\n const {\n formData,\n projects,\n subProjects,\n projectActivities,\n wageCodes,\n isFormReady,\n loadingWageCodes,\n errorLoadingFormData,\n editMode,\n submittingForm,\n // wageCodesCourses,\n wageCodesNightTime,\n courseRotations,\n midRotationStatuses,\n } = this.state;\n\n if (!isFormReady && !errorLoadingFormData) {\n return (\n \n \n \n );\n }\n\n if (errorLoadingFormData) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n
\n {selectedUserName ? (\n
\n

{lang.general}

\n {selectedUserName}\n
\n ) : (\n

{lang.general}

\n )}\n\n {/* Project */}\n

{lang.project}

\n ({ label: `${d.id} - ${d.name}`, value: d.id }))}\n placeholder={lang.chooseProject}\n value={formData.project}\n />\n\n {/* Sub project (depends on project) */}\n {formData.project && (\n <>\n

{lang.subproject}

\n ({\n label: `${d.id} - ${d.description}`,\n value: d.id,\n }))}\n placeholder={lang.chooseSubproject}\n value={formData.subProject}\n />\n \n )}\n\n {/* Activity (depends on project and subProject) */}\n {formData.project && formData.subProject && (\n <>\n

{lang.activity}

\n ({\n label: `${d.id} - ${d.description}`,\n value: d.id,\n }))}\n placeholder={this.getProjectActivityPlaceholder()}\n value={formData.projectActivity}\n />\n \n )}\n\n {/* Description */}\n

{lang.description}

\n \n\n
\n {/* Mid Rotation */}\n {!formData.courses && (\n
\n this.handleFormChange({ midRotation: e })}\n options={[{ id: \"midRotation\", title: lang.midRotation }]}\n selected={formData.midRotation ? [\"midRotation\"] : []}\n />\n
\n )}\n\n
\n\n {/* Courses */}\n {!formData.midRotation && (\n
\n this.handleFormChange({ courses: e })}\n options={[{ id: \"courses\", title: lang.courses }]}\n selected={formData.courses ? [\"courses\"] : []}\n />\n
\n )}\n
\n\n {/* Rotation status */}\n

{lang.rotationStatus}

\n {\n let rotationStatusList = [\n {\n value: rotationStatuses.noChange,\n label: `${formData.midRotation ? lang.midRotationNoChangeStatus : lang.noChangeInRotationStatus}`,\n },\n\n { value: rotationStatuses.preRotationDayShift, label: lang.preRotationDay },\n { value: rotationStatuses.preRotationNightShift, label: lang.preRotationNight },\n\n {\n value: rotationStatuses.startPlanned,\n label: `${formData.midRotation ? lang.midRotationFirstDayDay : lang.firstDayPlanRotation}`,\n },\n {\n value: rotationStatuses.startPlannedNightShift,\n label: `${formData.midRotation ? lang.midRotationFirstDayNight : lang.firstDayPlanRotationNightShift}`,\n },\n {\n value: rotationStatuses.endOfRotation,\n label: `${formData.midRotation ? lang.midRotationLastDay : lang.endOfRotation}`,\n },\n\n { value: rotationStatuses.oneDayCourse, label: lang.oneDayCourse },\n { value: rotationStatuses.startMultiDayCourse, label: lang.startMultiDayCourse },\n { value: rotationStatuses.course, label: lang.courseStatus },\n { value: rotationStatuses.endOfMultiDayCourse, label: lang.endOfMultiDayCourse },\n { value: rotationStatuses.changeShift, label: lang.changeShift },\n ];\n\n if (formData.midRotation)\n rotationStatusList = rotationStatusList.filter((d) => midRotationStatuses.includes(d.value));\n\n rotationStatusList = rotationStatusList.filter((d) =>\n formData.courses ? courseRotations.includes(d.value) : !courseRotations.includes(d.value)\n );\n\n return rotationStatusList;\n })()}\n placeholder={this.getProjectActivityPlaceholder()}\n value={formData.rotationStatus}\n />\n\n {/* Date */}\n

{lang.dateAndTime}

\n\n {this.state.editMode ? (\n

\n Date: {formData.date}\n

\n ) : (\n <>\n

{lang.date}

\n {\n this.handleFormChange({ date });\n this.getProjectActivities();\n }}\n />\n \n )}\n\n {!formData.courses && (\n <>\n {/* Start time hours */}\n

{lang.startTime}

\n
\n this.handleTimeInput(e, \"hours\")}\n />\n\n {/* Start time minutes */}\n

{` : `}

\n this.handleTimeInput(e, \"minutes\")}\n />\n
\n {/* End time hours */}\n

{lang.endTime}

\n
\n this.handleTimeInput(e, \"hours\")}\n />\n\n {/* End time minutes */}\n

{` : `}

\n this.handleTimeInput(e, \"minutes\")}\n />\n
\n \n )}\n\n {/* Activities (Wage codes) */}\n

{lang.sc_extra}

\n {loadingWageCodes === false && wageCodes.length === 0 && (\n

\n {\" \"}\n Der er ingen tilgængelige tillæg\n

\n )}\n {loadingWageCodes === false && wageCodes.length === 0 ? null : (\n <>\n

{lang.addActivities}

\n \n this.setState({ selectedActivity: e.target.value })}\n options={(() => {\n let wageCodeList = [];\n wageCodeList = wageCodes\n .filter((d) => formData.activities.findIndex((el) => el.id === d.id) === -1)\n .map((d) => ({ label: `${d.name} - ${d.id}`, value: d.id, showInCourses: d.showInCourses }));\n\n if (formData.courses) wageCodeList = wageCodeList.filter((d) => d.showInCourses === \"Yes\");\n\n return wageCodeList;\n })()}\n placeholder={lang.chooseExtras}\n style={{ width: \"65%\" }}\n value={this.state.selectedActivity}\n />\n\n {\n if (this.state.selectedActivity) {\n let activity = wageCodes.filter((x) => x.id === this.state.selectedActivity)[0];\n activity.hours = \"\";\n this.setState({\n formData: {\n ...formData,\n activities: [activity, ...formData.activities],\n },\n selectedActivity: null,\n });\n }\n }}\n >\n {lang.add}\n \n \n \n )}\n\n {formData.activities.map((activity, index) => (\n
\n
\n

\n {activity.name} - {activity.id}\n

\n {\n activity.hours = e.target.value; // Temporay mutation of map-element (is canceled on next render where change is committed)\n this.setState({\n formData: {\n ...formData,\n activities: [\n ...formData.activities.slice(0, index),\n activity,\n ...formData.activities.slice(index + 1),\n ],\n },\n });\n }}\n />\n {\n this.setState({\n formData: {\n ...formData,\n activities: formData.activities.filter((x) => activity.id !== x.id),\n },\n });\n }}\n >\n \n
\n
\n {wageCodesNightTime.includes(activity.id) && (\n
\n this.handleFormChange({ absenceNightTime: e })}\n options={[{ id: \"absenceNightTime\", title: \"Night\" }]}\n selected={formData.absenceNightTime ? [\"absenceNightTime\"] : []}\n />\n
\n )}\n
\n ))}\n\n
\n\n \n {lang.save}\n \n
\n \n
\n );\n }\n\n componentStyles = () => css`\n background-color: white;\n padding-top: ${common.topBarHeight}px;\n\n .content-wrapper {\n max-width: 800px;\n margin: 0 auto;\n\n .title-container {\n align-items: center;\n display: flex;\n justify-content: space-between;\n }\n }\n\n .time-input {\n display: flex;\n align-items: center;\n }\n\n .scroll-view {\n padding: 0.75rem 0.75rem 5rem 0.75rem;\n }\n\n p {\n padding: 0.75rem 0 0.5rem 0;\n }\n\n h2:not(:first-child) {\n border-top: 1px solid ${colors.lightGrey};\n margin: 0.75rem -0.75rem 0 -0.75rem;\n padding: 0.75rem 0.75rem 0 0.75rem;\n }\n\n .extrasContainer {\n border-top: 1px solid ${colors.lightGrey};\n display: flex;\n }\n\n .activity {\n flex-grow: 1;\n display: flex;\n align-items: center;\n padding: 0.75rem 0.75rem 0.75rem 0;\n margin: 0 0 0 0rem;\n\n &:last-of-type {\n border-bottom: 1px solid ${colors.lightGrey};\n }\n\n .name {\n flex: 1 1 70%;\n padding: 0;\n }\n\n svg {\n height: 40px; /* WARNING: Magic number */\n }\n\n input {\n flex: 1 1 2rem;\n margin: 0 0.5rem 0 0.5rem;\n }\n }\n\n .absenceNightTimeContainer {\n margin-top: 7px;\n\n .checkbox {\n padding: 5px 7px 5px 5px;\n }\n }\n\n .flex {\n display: flex;\n justify-content: space-between;\n }\n\n @media (max-width: 480px) {\n .extrasContainer {\n flex-direction: column;\n }\n\n .absenceNightTimeContainer {\n padding-bottom: 7px;\n display: flex;\n justify-content: flex-end;\n padding-right: 3%;\n }\n }\n `;\n}\n\nconst mapStateToProps = (state) => ({\n lang: state.language.language,\n selectedUser: state.users.selectedUser,\n selectedUserName:\n state.users.lists.length !== 0 ? state.users.lists.find((d) => d.externalId === state.users.selectedUser).name : null,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n hideModalPage: bindActionCreators(hideModalPage, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(WorkTimeRegistration);\n","import React, { useEffect, useState } from \"react\";\nimport { connect, useSelector } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { css } from \"emotion\";\nimport { parse, format } from \"date-fns\";\nimport params from \"jquery-param\";\n\nimport colors from \"../../style/colors\";\n\n// actions\nimport { updateModalPage } from \"../../actions/uiActions\";\n\n// ui-components\nimport ScrollView from \"../ui/ScrollView\";\nimport Page from \"../ui/Page\";\nimport InlineSpinner from \"../ui/InlineSpinner\";\nimport StatusBox from \"../ui/StatusBox\";\nimport common from \"../../style/common\";\nimport req from \"../../utilities/request-utility\";\n\nfunction WorkTimeDetails(props) {\n const { registration, fetchDate } = props;\n\n const lang = useSelector((s) => s.language.language);\n const selectedUser = useSelector((s) => s.users.selectedUser);\n const selectedUserName = useSelector((s) =>\n s.users.lists.length !== 0 ? s.users.lists.find((d) => d.externalId === s.users.selectedUser).name : null\n );\n\n // The first element in a the list of registrations for this day (i know.. It makes little sense)\n const registrationExtract = registration.registrations[0];\n const [detailsData, setDetailsData] = useState(null);\n const [wageCodes, setWageCodes] = useState(null);\n\n useEffect(() => {\n getDetailsData();\n // eslint-disable-next-line\n }, []);\n\n /** As some data isn't available in the overview, this function gets what is missing from the api */\n async function getDetailsData() {\n try {\n let { data } = await req()(\n `semcotime/work-hours/v3/${registrationExtract.transactionId}?${params({\n date: fetchDate,\n externalId: selectedUser,\n })}`\n );\n setDetailsData(data);\n getWageCodes(data);\n } catch (err) {\n setDetailsData(\"error\");\n }\n }\n\n /** As the names of the wage codes isn't returned by the api, this function fetches the relevant wageCodes */\n async function getWageCodes(data) {\n let { data: wageCodes } = await req()(\n `semcotime/wage-codes?${params({\n externalId: selectedUser,\n wageType: \"increment\",\n ids: data.extras.map((el) => el.wageCode).join(\"+\"),\n })}`\n ).catch((err) => setDetailsData(\"error\"));\n setWageCodes(wageCodes);\n }\n\n function getRotationStatusText(detailsData) {\n if (detailsData.changeShift === true) return lang.changeShift;\n if (detailsData.endOfRotation === true) return `${detailsData.midRotation ? \"Last Day\" : lang.endOfRotation}`;\n if (detailsData.firstDay === true) return `${detailsData.midRotation ? \"First Day (Day)\" : lang.firstDayPlanRotation}`;\n if (detailsData.firstDayNightShift === true)\n return `${detailsData.midRotation ? \"First Day (Night)\" : lang.firstDayPlanRotationNightShift}`;\n if (detailsData.preRotation === true) return lang.beforePlannedRotation;\n if (detailsData.preRotationDayShift === true) return lang.preRotationDay;\n if (detailsData.preRotationNightShift === true) return lang.preRotationNight;\n if (detailsData.oneDayCourse === true) return lang.oneDayCourse;\n if (detailsData.startMultiDayCourse === true) return lang.startMultiDayCourse;\n if (detailsData.course === true) return lang.course;\n if (detailsData.endOfMultiDayCourse === true) return lang.endOfMultiDayCourse;\n\n // No changes\n return detailsData.midRotation ? \"Last Day \" : \"No rotation status\";\n }\n\n function getParsedDateTime(dateString) {\n try {\n return format(parse(dateString, \"yyyyMMddHHmmss\", 0), \"yyyy-MM-dd HH:mm:ss\");\n } catch {\n return lang.noDate;\n }\n }\n\n /*\n [√] Project, -> Overview\n [ ] Underprojekt -> Details\n [√] Aktivitet -> Details + overview...\n [√] Description -> Details\n [√] Dato: -> Details\n [√] startTid -> Details\n [√] sluttid -> Details\n [√] Extras/Tillæg \n [√] Navn -> Overview\n [√] Hours -> Overview\n */\n\n return (\n \n \n {detailsData === null && }\n {detailsData !== null && detailsData === \"error\" && }\n\n {detailsData !== null && detailsData !== \"error\" && (\n <>\n {/* general */}\n {selectedUserName ? (\n
\n

{lang.general}

\n {selectedUserName}\n
\n ) : (\n

{lang.general}

\n )}\n
\n

{lang.project}:

\n

{registrationExtract.project}

\n
\n
\n

{lang.activity}:

\n

\n {detailsData.activitySequence} - {registrationExtract.activity}\n

\n
\n
\n

{lang.description}:

\n

{detailsData.description}

\n
\n
\n

{lang.rotationStatus}:

\n

{getRotationStatusText(detailsData, registrationExtract)}

\n
\n
\n

{lang.midRotation}:

\n

{detailsData.midRotation ? \"Yes\" : \"No\"}

\n
\n
\n

{lang.absenceNightTime}:

\n

{detailsData.absenceNightTime ? \"Yes\" : \"No\"}

\n
\n\n
\n

{lang.courses}:

\n

{detailsData.courses ? \"Yes\" : \"No\"}

\n
\n\n
\n\n {/* Date and time */}\n

{lang.dateAndTime}

\n
\n

{lang.date}:

\n

{registrationExtract.date}

\n
\n
\n

{lang.startTime}:

\n

{getParsedDateTime(detailsData.startTime)}

\n
\n
\n

{lang.endTime}:

\n

{getParsedDateTime(detailsData.endTime)}

\n
\n\n {/* Extras */}\n {wageCodes && detailsData.extras.length > 0 && (\n <>\n
\n

{lang.sc_extra}

\n {detailsData.extras.map((extra) => (\n
\n {wageCodes.filter((w) => w.id === extra.wageCode).length > 0 ? (\n

{wageCodes.filter((w) => w.id === extra.wageCode)[0].name}:

\n ) : (\n

Unknown wage code

\n )}\n

{extra.hours}

\n
\n ))}\n \n )}\n \n )}\n
\n
\n );\n}\n\nconst componentStyles = () => css`\n background-color: white;\n padding-top: ${common.topBarHeight}px;\n\n p {\n padding: 0.5rem 0 0 0;\n }\n\n p.description {\n padding: 0.25rem 0 0 0;\n color: ${colors.darkGrey};\n }\n\n div.seperator {\n background-color: ${colors.lightGrey};\n height: 1px;\n margin: 1.5rem -0.75rem 1rem -0.75rem;\n }\n\n div.text-wrapper {\n display: flex;\n\n p:first-child {\n padding-right: 0.5rem;\n }\n\n p:not(:first-child) {\n color: ${colors.darkGrey};\n overflow: hidden;\n }\n }\n\n .title-container {\n align-items: center;\n display: flex;\n justify-content: space-between;\n }\n`;\n\nconst mapDispatchToProps = (dispatch) => ({\n updateModalPage: bindActionCreators(updateModalPage, dispatch),\n});\n\nexport default connect(null, mapDispatchToProps)(WorkTimeDetails);\n","import React, { useState } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport {\n DotsVerticalIcon,\n PlusIcon,\n CheckboxMarkedIcon,\n TimerSandEmptyIcon,\n InformationOutlineIcon,\n PencilIcon,\n TrashOutlineIcon,\n} from \"mdi-react\";\n\n// actions\nimport { showContextMenu, showModalPage, showDialog, hideDialog } from \"../../actions/uiActions\";\n// components\nimport WorkTimeDetails from \"./WorkTimeDetails\";\nimport WorkTimeRegistration from \"./WorkTimeRegistration\";\n\nfunction getTitle(titleString) {\n let [date, startTime, endTime] = titleString.split(\"__\");\n let returnString = date;\n if (startTime && endTime) returnString += ` ${startTime} - ${endTime}`;\n return returnString;\n}\n\nfunction WorkTimeListItem(props) {\n const { registration, showContextMenu, lang, title, showModalPage, updateRegistration } = props;\n const [expanded, setExpanded] = useState(false);\n\n const allowEdit = registration.registrations.filter((r) => r.editable).length > 0;\n\n return (\n
\n {/* Header */}\n
setExpanded(!expanded)}>\n
{getTitle(title)}
\n\n
\n
\n {registration.totalHours}\n
\n\n {allowEdit && (\n {\n e.stopPropagation();\n showContextMenu([\n {\n icon: ,\n title: lang.details,\n callback: () =>\n showModalPage({\n content: (\n \n ),\n }),\n },\n {\n icon: ,\n title: lang.edit,\n callback: () =>\n showModalPage({\n content: (\n \n ),\n }),\n },\n {\n icon: ,\n title: lang.delete,\n callback: () =>\n props.showDialog({\n styleType: \"warning\",\n title: \"Delete record\",\n content: \"You're about to delete this registration. Are you sure you want to delete it?\",\n primaryActionTitle: \"Yes - Delete\",\n primaryAction: () => props.deleteRegistration(registration),\n }),\n },\n ]);\n }}\n />\n )}\n \n
\n
\n\n {/* Details */}\n
\n
\n {registration.registrations\n .sort((a, b) => (a.reportCode > b.reportCode ? 1 : -1))\n .map((registration, index) => (\n
\n
\n
\n {registration.confirmed === \"Yes\" && }\n {registration.confirmed === \"No\" && }\n

{registration.reportCodeDescription}

\n
\n
\n

{registration.hours}

\n
\n
\n\n
\n

\n {lang.activity}: {registration.activity}\n

\n

\n {lang.reportCode}: {registration.reportCode}\n

\n
\n
\n ))}\n
\n
\n
\n );\n}\n\nconst componentStyles = (props) => css`\n background-color: ${colors.white};\n border-top: 1px ${colors.midGrey} solid;\n border-bottom: 1px ${colors.midGrey} solid;\n margin-bottom: -1px;\n\n &.collapsed {\n margin: 0;\n border-left: 3px solid transparent;\n transition: margin 240ms ease;\n margin-bottom: -1px;\n\n .hide {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n transition: max-height 240ms ease, opacity 240ms ease, overflow 240ms ease;\n }\n\n .rotate-neutral {\n transform: rotate(0deg);\n transition: transform 240ms ease;\n }\n }\n\n &.expanded {\n margin: 0.65rem 0;\n border-left: 3px solid ${props.primaryColor};\n transition: margin 240ms ease, border-left 240ms ease;\n\n &:first-of-type {\n margin-top: 0px;\n }\n\n .item-header {\n color: ${props.primaryColor};\n\n .rotate {\n transform: rotate(-45deg);\n transition: transform 240ms ease;\n }\n }\n\n .item-details {\n .show {\n max-height: 1500px;\n overflow: auto;\n opacity: 1;\n transition: max-height 240ms ease, opacity 240ms ease;\n }\n }\n }\n\n .item-header {\n display: flex;\n padding: 0.75rem;\n margin-bottom: -1px;\n color: ${colors.darkGrey};\n font-weight: bold;\n\n &:active {\n background-color: ${colors.ultraLightGrey};\n transition: background-color 80ms ease;\n }\n\n .right {\n display: flex;\n margin-left: auto;\n font-weight: bold;\n }\n\n .left {\n display: flex;\n }\n }\n\n .item-details {\n .details-header {\n display: flex;\n padding: 0.75rem 0.75rem 0 0.75rem;\n\n .left {\n display: flex;\n\n svg {\n width: 1.25rem;\n height: 1.25rem;\n margin-right: 0.5rem;\n flex-shrink: 0;\n }\n }\n\n .right {\n display: flex;\n margin-left: auto;\n font-weight: bold;\n\n p.hours {\n color: ${colors.darkGrey};\n margin-right: 0.35rem;\n }\n }\n }\n\n .details {\n padding: 0.5rem 0.75rem 1rem 0.75rem;\n color: ${colors.darkGrey};\n\n span {\n font-weight: bold;\n }\n\n p {\n padding-right: 1rem;\n display: inline-block;\n }\n }\n }\n`;\n\nconst mapStateToProps = (state) => ({\n lang: state.language.language,\n primaryColor: state.appConfig.primaryColor,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n showContextMenu: bindActionCreators(showContextMenu, dispatch),\n showModalPage: bindActionCreators(showModalPage, dispatch),\n showDialog: bindActionCreators(showDialog, dispatch),\n hideDialog: bindActionCreators(hideDialog, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(WorkTimeListItem);\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { format, parse, subDays, addDays } from \"date-fns\";\nimport { notification } from \"antd\";\nimport params from \"jquery-param\";\n\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport common from \"../../style/common\";\nimport { ArrowBackIcon, AlertDecagramIcon, CloudDownloadIcon, ThumbDownOutlineIcon } from \"mdi-react\";\n\n// utilities\nimport pageNavigator from \"../../utilities/page-navigator\";\nimport getPageFromId from \"../../utilities/get-page-from-id\";\nimport getBackButtonUrl from \"../../utilities/get-back-button-url\";\nimport req from \"../../utilities/request-utility\";\n\n// actions\nimport { showModalPage } from \"../../actions/uiActions\";\n\n// ui-components\nimport Page from \"../ui/Page\";\nimport TopBar from \"../ui/TopBar\";\nimport ScrollView from \"../ui/ScrollView\";\nimport StatusBox from \"../ui/StatusBox\";\nimport Button from \"../ui/Button\";\nimport ActionWrapper from \"../ui/ActionWrapper\";\n\n// components\nimport WorkTimeRegistration from \"./WorkTimeRegistration\";\nimport WorkTimeListItem from \"./WorkTimeListItem\";\n\nclass WorkTimeOverview extends Component {\n constructor(props) {\n super(props);\n this.state = {\n page: {},\n // forms\n formData: [],\n validRegistrationForm: false,\n fetchToDate: format(new Date(), \"yyyyMMdd\"),\n // registrations\n loading: false,\n error: false,\n registrations: {},\n loadingDateKeys: [],\n };\n }\n\n componentDidMount() {\n this._isMounted = true;\n let { pages, match } = this.props;\n\n this.setState({\n page: getPageFromId(pages, match.params.pageId),\n backButtonUrl: getBackButtonUrl(getPageFromId(pages, match.params.pageId), pages),\n });\n\n this.getRegistrations();\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n }\n\n getRegistrations = async () => {\n try {\n const { selectedUser } = this.props;\n\n this.setState({ loading: true });\n\n let toDate = this.state.fetchToDate;\n let fromDate = format(subDays(parse(toDate, \"yyyyMMdd\", 0), 7), \"yyyyMMdd\");\n\n if (Object.keys(this.state.registrations).length === 0) {\n toDate = format(addDays(parse(toDate, \"yyyyMMdd\", 0), 365), \"yyyyMMdd\");\n }\n let { data } = await req()(`semcotime/work-hours/v3/?${params({ externalId: selectedUser, fromDate, toDate })}`);\n\n // Add registrations to current ones:\n let mutRegistrations = Object.assign(this.state.registrations, {});\n Object.keys(data).forEach((key) => {\n mutRegistrations[key] = data[key];\n });\n\n this._isMounted === true && this.setState({ registrations: mutRegistrations });\n this.setState({ loading: false });\n\n // Update fromDate\n this.setState({ fetchToDate: format(subDays(parse(fromDate, \"yyyyMMdd\", 0), 0), \"yyyyMMdd\") });\n } catch (err) {\n this.setState({ loading: false });\n this.setState({ error: true });\n }\n };\n\n refreshRegistrations = async () => {\n try {\n this.setState({ loading: true });\n\n const { selectedUser } = this.props;\n\n const toDate = format(addDays(new Date(), 365), \"yyyyMMdd\");\n const fromDate = this.state.fetchToDate;\n const { data } = await req()(`semcotime/work-hours/v3/?${params({ externalId: selectedUser, fromDate, toDate })}`);\n\n this.setState({ loading: false, registrations: data });\n } catch {\n this.setState({ error: true, loading: false });\n }\n };\n\n addRegistration = async (registration) => {\n const { selectedUser } = this.props;\n\n return new Promise((resolve, reject) => {\n req()\n .post(`semcotime/work-hours/v3?${params({ externalId: selectedUser })}`, registration)\n .then(() => {\n setTimeout(() => {\n this.refreshRegistrations();\n }, 1000);\n resolve();\n console.log(\"then\");\n })\n .catch(reject);\n });\n };\n\n updateRegistration = async (registration) => {\n const { selectedUser } = this.props;\n\n return new Promise((resolve, reject) => {\n req()\n .put(`semcotime/work-hours/v3?${params({ externalId: selectedUser })}`, registration)\n .then((res) => {\n resolve();\n setTimeout(() => {\n this.refreshRegistrations();\n }, 1000);\n })\n .catch(reject);\n });\n };\n\n deleteRegistration = async (registration) => {\n this.setState({ loading: true });\n\n const { selectedUser } = this.props;\n\n return new Promise((resolve, reject) => {\n const date = registration.registrations[0].date;\n\n req()\n .delete(\n `semcotime/work-hours/v3/${date}?${params({\n externalId: selectedUser,\n timeCardTransactionId: registration.timeCardTransactionId,\n incrementTransactionId: registration.incrementTransactionId,\n })}`\n )\n .then((res) => {\n resolve();\n setTimeout(() => {\n this.refreshRegistrations();\n }, 1000);\n })\n .catch((err) => {\n let errorMessage = \"Unspecified error\";\n if (err && err.response && err.response.data) errorMessage = err.response.data.message;\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `Could not delete registration. Error: ${errorMessage}`,\n });\n });\n });\n };\n\n getShowingDisplay = () => {\n const { fetchToDate } = this.state;\n const { lang, selectedUserName } = this.props;\n\n if (selectedUserName)\n return `${lang.displayingRegistrationsFor} ${selectedUserName} ${lang.from} ${format(\n parse(fetchToDate, \"yyyyMMdd\", 0),\n \"yyyy-MM-dd\"\n )} ${lang.untilToday}`;\n\n return `${lang.diplayingRegistrationsFrom} ${format(parse(fetchToDate, \"yyyyMMdd\", 0), \"yyyy-MM-dd\")} ${\n lang.untilToday\n }`;\n };\n\n render() {\n const { page, backButtonUrl, registrations, loading, error } = this.state;\n const { showModalPage, lang } = this.props;\n\n return (\n \n pageNavigator(backButtonUrl, \"backward\")}>\n \n \n }\n actionRight={\n {\n showModalPage({\n content: () => (\n \n ),\n });\n }}\n >\n {lang.register}\n \n }\n />\n \n {/* Loading */}\n {/* {loading && !error && } */}\n\n {/* Error */}\n {error && !loading && (\n }\n title={lang.errorLoadingRegistrationToastTitle}\n content={lang.errorLoadingRegistrationToastContent}\n />\n )}\n\n {/* Load registrations */}\n {!error &&\n Object.keys(registrations).map((key) => (\n \n ))}\n\n <>\n \n {\" \"}\n {lang.loadAnotherWeek}\n \n

{this.getShowingDisplay()}

\n \n
\n
\n );\n }\n}\n\nconst componentStyles = () => css`\n .filter {\n padding: 0.75rem;\n }\n\n .apply-filters-modal {\n padding: 0, 75rem;\n background-color: ${colors.white};\n }\n\n .filters-button {\n background-color: ${colors.midGrey};\n color: ${colors.black};\n display: block;\n width: calc(100% - 1.5rem);\n border: 0px transparent none;\n border-radius: 3px;\n font-size: 0.95rem;\n padding: 0.75rem 1.25rem;\n margin: 0.75rem;\n text-align: left;\n position: relative;\n\n .icon-right {\n position: absolute;\n right: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n }\n }\n`;\n\nconst mapStateToProps = (state) => ({\n pages: state.pages.pages,\n lang: state.language.language,\n selectedUser: state.users.selectedUser,\n selectedUserName:\n state.users.lists.length !== 0 ? state.users.lists.find((d) => d.externalId === state.users.selectedUser).name : null,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n showModalPage: bindActionCreators(showModalPage, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(WorkTimeOverview);\n","import React, { useState, useEffect } from \"react\";\nimport { format, parse } from \"date-fns\";\nimport { connect, useSelector } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { notification } from \"antd\";\nimport params from \"jquery-param\";\n\nimport req from \"../../utilities/request-utility\";\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport common from \"../../style/common\";\n\n// actions\nimport { hideModalPage } from \"../../actions/uiActions\";\n// ui-components\nimport ScrollView from \"../ui/ScrollView\";\nimport Page from \"../ui/Page\";\nimport TextInput from \"../ui/TextInput\";\nimport TextareaInput from \"../ui/TextareaInput\";\nimport DropDown from \"../ui/DropDown\";\nimport DatePicker from \"../ui/DatePicker\";\nimport Button from \"../ui/Button\";\n\nfunction AbsenceRegistration(props) {\n const { addRegistration, hideModalPage, registration = {} } = props;\n\n const lang = useSelector((s) => s.language.language);\n const selectedUser = useSelector((s) => s.users.selectedUser);\n const selectedUserName = useSelector((s) =>\n s.users.lists.length !== 0 ? s.users.lists.find((d) => d.externalId === s.users.selectedUser).name : null\n );\n\n const [formData, setFormData] = useState({\n absenceCode: registration.absenceCode ? registration.absenceCode.id : undefined,\n startDate: registration.startDate || format(new Date(), \"yyyy-MM-dd\"),\n endDate: registration.endDate || format(new Date(), \"yyyy-MM-dd\"),\n note: registration.note || \"\",\n hoursPerDay: registration.hoursPerDay || \"\",\n });\n const [absenceCodes, setAbsenceCodes] = useState([]);\n const [submittingForm, setSubmittingForm] = useState(false);\n const [isAbsenceCodeLoading, setIsAbsenceCodeLoading] = useState(false);\n\n useEffect(() => {\n getAbsenceCodes();\n // eslint-disable-next-line\n }, []);\n\n async function getAbsenceCodes() {\n setIsAbsenceCodeLoading(true);\n await req()(`semcotime/absence/absence-codes?${params({ externalId: selectedUser })}`) // dummy url\n .then(({ data }) => setAbsenceCodes(data))\n .catch((err) => {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `${lang.errorGeneral} ${lang.tryAgainOrContactSupport}`,\n });\n });\n setIsAbsenceCodeLoading(false);\n }\n\n function handleFormChange(e, name = null) {\n if (!name) {\n setFormData({ ...formData, [e.target.name]: e.target.value });\n } else {\n setFormData({ ...formData, [name]: e.target.value });\n }\n }\n\n function getStartAndEndTimeAndDate() {\n const startDate = format(parse(formData.startDate, \"yyyy-MM-dd\", 0), \"yyyyMMdd\");\n const endDate = format(parse(formData.endDate, \"yyyy-MM-dd\", 0), \"yyyyMMdd\");\n\n return { startDate, endDate };\n }\n\n function isFormValid() {\n if (formData.startDate && formData.endDate && formData.absenceCode && formData.hoursPerDay) {\n return true;\n } else {\n return false;\n }\n }\n\n function handleSave() {\n const { startDate, endDate } = getStartAndEndTimeAndDate();\n\n const registration = {\n startDate,\n endDate,\n hoursPerDay: formData.hoursPerDay,\n note: formData.note,\n absenceCode: formData.absenceCode,\n };\n\n if (!isFormValid())\n return notification.error({ duration: 7, message: \"FAILED\", description: lang.errorAbsencesRequiredFieldsContent });\n\n setSubmittingForm(true);\n\n addRegistration(registration)\n .then(() => {\n notification.success({ duration: 7, message: \"SUCCESS\", description: lang.savedRegistrationToastContent });\n hideModalPage();\n })\n .catch((err) => {\n let errorMessage = \"Unspecified error\";\n if (err && err.response && err.response.data) errorMessage = err.response.data.message;\n\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `${lang.errorSavingRegistrationToastContent}. Fejlkode: ${errorMessage}`,\n });\n\n setSubmittingForm(false);\n });\n }\n\n return (\n \n \n
\n {selectedUserName ? (\n
\n

{lang.general}

\n {selectedUserName}\n
\n ) : (\n

{lang.general}

\n )}\n\n

{lang.absenceType}

\n ({ label: `${d.id} - ${d.name}`, value: d.id }))}\n placeholder={lang.chooseAbsenceType}\n loading={isAbsenceCodeLoading}\n value={formData.absenceCode}\n />\n\n
\n\n

{lang.startDate}

\n handleFormChange({ target: { value: date } }, \"startDate\")}\n />\n\n

{lang.endDate}

\n handleFormChange({ target: { value: date } }, \"endDate\")}\n />\n\n

{lang.hoursPerDay}

\n \n\n
\n\n

{lang.note}

\n \n\n \n
\n
\n
\n );\n}\n\nconst boxPadding = 0.75;\n\nconst componentStyles = () => css`\n background-color: white;\n padding-top: ${common.topBarHeight};\n\n .content-wrapper {\n max-width: 800px;\n margin: 0 auto;\n\n .title-container {\n align-items: center;\n display: flex;\n justify-content: space-between;\n }\n }\n\n .scroll-view {\n padding: ${boxPadding}rem;\n }\n\n .time-input {\n display: flex;\n align-items: center;\n }\n\n p {\n padding: ${boxPadding}rem 0 0.5rem 0;\n }\n\n h2 {\n padding: ${boxPadding}rem 0 0.5rem 0;\n }\n\n .seperator {\n width: calc(100% + ${boxPadding * 2}rem);\n margin: 1rem -${boxPadding}rem 0 -${boxPadding}rem;\n height: 1px;\n background-color: ${colors.lightGrey};\n }\n`;\n\nconst mapDispatchToProps = (dispatch) => ({\n hideModalPage: bindActionCreators(hideModalPage, dispatch),\n});\n\nexport default connect(null, mapDispatchToProps)(AbsenceRegistration);\n","import React, { useState } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport { PlusIcon, DotsVerticalIcon, PencilIcon, TrashCanOutlineIcon } from \"mdi-react\";\n\n// ui\nimport InlineSpinner from \"../ui/InlineSpinner\";\n\n// actions\nimport { showContextMenu, showModalPage, showDialog, hideDialog } from \"../../actions/uiActions\";\nimport AbsenceRegistration from \"./AbsenceRegistration\";\n\nfunction ListItem(props) {\n const { lang, registration, showModalPage, showContextMenu } = props;\n const [expanded, setExpanded] = useState(false);\n const [deleting, setDeleting] = useState(false);\n\n const onDelete = async () => {\n setDeleting(true);\n\n await props.deleteRegistration(registration);\n\n setDeleting(false);\n };\n\n return (\n
\n
setExpanded(!expanded)}>\n
\n

\n {registration.startDate} - {registration.endDate} - {registration.type}\n

\n
\n
\n
{registration.totalHours}
\n {deleting && }\n {!deleting && (\n <>\n {\n e.stopPropagation();\n showContextMenu([\n {\n icon: ,\n title: lang.edit,\n callback: () =>\n showModalPage({\n content: (\n \n ),\n }),\n },\n {\n icon: ,\n title: lang.delete,\n callback: () =>\n props.showDialog({\n styleType: \"warning\",\n title: \"Delete record\",\n content: \"You're about to delete this registration. Are you sure you want to delete it?\",\n primaryActionTitle: \"Yes - Delete\",\n primaryAction: onDelete,\n }),\n },\n ]);\n }}\n />\n \n \n )}\n
\n
\n
\n
\n
\n
\n

\n {lang.startDate}: \n {registration.startDate}\n

\n

\n {lang.endDate}: \n {registration.endDate}\n

\n

\n {lang.hoursPerDay}: \n {registration.hoursPerDay}\n

\n

\n {lang.type}: \n {registration.type}\n

\n

\n {lang.note}: \n {registration.note}\n

\n
\n
\n
\n
\n
\n );\n}\n\nconst componentStyles = (props) => css`\n background-color: ${colors.white};\n border-top: 1px ${colors.midGrey} solid;\n border-bottom: 1px ${colors.midGrey} solid;\n margin-bottom: -1px;\n\n &.collapsed {\n margin: 0;\n border-left: 3px solid transparent;\n transition: margin 240ms ease;\n margin-bottom: -1px;\n\n .hide {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n transition: max-height 240ms ease, opacity 240ms ease, overflow 240ms ease;\n }\n\n .rotate-neutral {\n transform: rotate(0deg);\n transition: transform 240ms ease;\n }\n }\n\n &.expanded {\n margin: 0.65rem 0;\n border-left: 3px solid ${props.primaryColor};\n transition: margin 240ms ease, border-left 240ms ease;\n\n &:first-of-type {\n margin-top: 0px;\n }\n\n .item-header {\n color: ${props.primaryColor};\n\n .rotate {\n transform: rotate(-45deg);\n transition: transform 240ms ease;\n }\n }\n\n .item-details {\n .show {\n max-height: 1000px;\n opacity: 1;\n transition: max-height 240ms ease, opacity 240ms ease;\n }\n }\n }\n\n .item-header {\n display: flex;\n padding: 0.75rem;\n margin-bottom: -1px;\n color: ${colors.darkGrey};\n font-weight: bold;\n\n &:active {\n background-color: ${colors.ultraLightGrey};\n transition: background-color 80ms ease;\n }\n\n .right {\n display: flex;\n margin-left: auto;\n font-weight: bold;\n }\n\n .left {\n display: flex;\n overflow: hidden;\n\n p {\n padding-right: 0.5rem;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n }\n\n .item-details {\n .details {\n padding: 0.5rem 0.75rem 0.25rem 0.75rem;\n color: ${colors.darkGrey};\n\n span {\n font-weight: bold;\n }\n\n p {\n display: block;\n margin-bottom: 0.5rem;\n }\n }\n }\n`;\n\nconst mapStateToProps = (state) => ({\n lang: state.language.language,\n primaryColor: state.appConfig.primaryColor,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n showContextMenu: bindActionCreators(showContextMenu, dispatch),\n showModalPage: bindActionCreators(showModalPage, dispatch),\n showDialog: bindActionCreators(showDialog, dispatch),\n hideDialog: bindActionCreators(hideDialog, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ListItem);\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { format, parse, subDays } from \"date-fns\";\nimport { notification } from \"antd\";\nimport params from \"jquery-param\";\n\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport { ArrowBackIcon, AlertDecagramIcon, CloudDownloadIcon, ThumbDownOutlineIcon } from \"mdi-react\";\n\n// utilities\nimport pageNavigator from \"../../utilities/page-navigator\";\nimport getPageFromId from \"../../utilities/get-page-from-id\";\nimport getBackButtonUrl from \"../../utilities/get-back-button-url\";\n\n// actions\nimport { showModalPage, hideModalPage } from \"../../actions/uiActions\";\n\n// ui-components\nimport Page from \"../ui/Page\";\nimport TopBar from \"../ui/TopBar\";\nimport ScrollView from \"../ui/ScrollView\";\nimport StatusBox from \"../ui/StatusBox\";\n\n// components\nimport AbsenceRegistration from \"./AbsenceRegistration\";\nimport AbsenceListItem from \"./AbsenceListItem\";\n\n// dummy-data\nimport ActionWrapper from \"../ui/ActionWrapper\";\nimport common from \"../../style/common\";\nimport req from \"../../utilities/request-utility\";\nimport Button from \"../ui/Button\";\nimport { addDays } from \"date-fns/esm\";\n\nclass AbsenceOverview extends Component {\n constructor(props) {\n super(props);\n this.state = {\n page: {},\n // forms\n formData: [],\n validRegistrationForm: false,\n filterData: [],\n dropDownLists: {},\n fetchToDate: format(new Date(), \"yyyyMMdd\"),\n // registrations\n loading: false,\n error: false,\n isFirstFetch: true,\n absenceData: [],\n filteredRegistrations: [],\n };\n }\n\n componentDidMount() {\n this._isMounted = true;\n let { pages, match } = this.props;\n\n this.setState({\n page: getPageFromId(pages, match.params.pageId),\n backButtonUrl: getBackButtonUrl(getPageFromId(pages, match.params.pageId), pages),\n });\n\n this.getRegistrations();\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n }\n\n getRegistrations = async () => {\n try {\n this.setState({ loading: true, isFirstFetch: false });\n\n const { selectedUser } = this.props;\n\n let toDate = this.state.fetchToDate;\n const fromDate = format(subDays(parse(toDate, \"yyyyMMdd\", 0), 7), \"yyyyMMdd\");\n\n // If it is first fetch, fetch a year into the future as well as a week into the past\n // This is done to get future registrations as well\n if (this.state.absenceData.length === 0) toDate = format(addDays(parse(toDate, \"yyyyMMdd\", 0), 365), \"yyyyMMdd\");\n\n const { data } = await req()(`semcotime/absence/v3/?${params({ externalId: selectedUser, fromDate, toDate })}`);\n\n this._isMounted === true && this.setState({ absenceData: [...this.state.absenceData, ...data] });\n this.setState({ loading: false });\n\n // Update fromDate\n this.setState({ fetchToDate: format(subDays(parse(fromDate, \"yyyyMMdd\", 0), 0), \"yyyyMMdd\") });\n } catch (err) {\n this.setState({ error: true, loading: false });\n }\n };\n\n addRegistration = async (registration) => {\n const { selectedUser } = this.props;\n\n return new Promise((resolve, reject) => {\n req()\n .post(`semcotime/absence/v3/?${params({ externalId: selectedUser })}`, registration)\n .then(() => {\n resolve();\n setTimeout(() => {\n this.setState({ absenceData: [] });\n this.getRegistrations();\n }, 4000);\n })\n .catch(reject);\n });\n };\n\n updateRegistration = async (registration) => {\n const { selectedUser } = this.props;\n\n return new Promise((resolve, reject) => {\n req()\n .put(`semcotime/absence/v3/?${params({ externalId: selectedUser })}`, registration)\n .then(() => {\n resolve();\n setTimeout(() => {\n this.setState({ absenceData: [] });\n this.getRegistrations();\n }, 4000);\n })\n .catch(reject);\n });\n };\n\n deleteRegistration = async (registration) => {\n try {\n const { selectedUser } = this.props;\n\n await req().delete(\n `semcotime/absence/v3/${registration.transactionId}?${params({\n date: registration.accountDate,\n externalId: selectedUser,\n })}`\n );\n\n const updatedAbsenceData = this.state.absenceData.filter(\n (absence) => absence.transactionId !== registration.transactionId\n );\n\n this.setState({ absenceData: updatedAbsenceData });\n } catch (err) {\n let errorMessage = \"Unspecified error\";\n if (err && err.response && err.response.data) errorMessage = err.response.data.error;\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `Could not delete absence. Error: ${errorMessage}`,\n });\n }\n };\n\n getShowingDisplay = () => {\n const { fetchToDate } = this.state;\n const { lang, selectedUserName } = this.props;\n\n if (selectedUserName)\n return `${lang.displayingRegistrationsFor} ${selectedUserName} ${lang.from} ${format(\n parse(fetchToDate, \"yyyyMMdd\", 0),\n \"yyyy-MM-dd\"\n )} ${lang.untilToday}`;\n\n return `${lang.diplayingRegistrationsFrom} ${format(parse(fetchToDate, \"yyyyMMdd\", 0), \"yyyy-MM-dd\")} ${\n lang.untilToday\n }`;\n };\n\n render() {\n const { page, backButtonUrl, absenceData, loading, error } = this.state;\n const { showModalPage, lang } = this.props;\n\n return (\n \n pageNavigator(backButtonUrl, \"backward\")} />}\n actionRight={\n {\n showModalPage({\n content: () => ,\n });\n }}\n >\n {lang.register}\n \n }\n />\n \n {/* Error */}\n {error && !loading && (\n }\n title={lang.errorLoadingRegistrationToastTitle}\n content={lang.errorLoadingRegistrationToastContent}\n />\n )}\n\n {/* Load absence registrations */}\n {!error &&\n absenceData.map((absence) => (\n \n ))}\n\n <>\n \n {\" \"}\n {lang.loadAnotherWeek}\n \n

{this.getShowingDisplay()}

\n \n
\n
\n );\n }\n}\n\nconst componentStyles = () => css`\n .filter {\n padding: 0.75rem;\n }\n\n .apply-filters-modal {\n padding: 0, 75rem;\n background-color: ${colors.white};\n }\n\n .filters-button {\n background-color: ${colors.midGrey};\n color: ${colors.black};\n display: block;\n width: calc(100% - 1.5rem);\n border: 0px transparent none;\n border-radius: 3px;\n font-size: 0.95rem;\n padding: 0.75rem 1.25rem;\n margin: 0.75rem;\n text-align: left;\n position: relative;\n\n .icon-right {\n position: absolute;\n right: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n }\n }\n`;\n\nconst mapStateToProps = (state) => ({\n pages: state.pages.pages,\n lang: state.language.language,\n selectedUser: state.users.selectedUser,\n selectedUserName:\n state.users.lists.length !== 0 ? state.users.lists.find((d) => d.externalId === state.users.selectedUser).name : null,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n showModalPage: bindActionCreators(showModalPage, dispatch),\n hideModalPage: bindActionCreators(hideModalPage, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AbsenceOverview);\n","import React, { useState, useEffect } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { format, parse } from \"date-fns\";\nimport params from \"jquery-param\";\n\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport req from \"../../utilities/request-utility\";\n\nimport { PlusIcon, CheckboxMarkedIcon, TimerSandEmptyIcon } from \"mdi-react\";\n\n// actions\nimport { showContextMenu, showModalPage, showDialog, hideDialog } from \"../../actions/uiActions\";\n\n// components\nimport Notification from \"../ui/Notification\";\n\nfunction WorkTimeListItem(props) {\n const { registration, lang, title, selectedUser } = props;\n const [expanded, setExpanded] = useState(false);\n const [isDismissed, setIsDismissed] = useState(false);\n\n // If user interacts with registration set is as dismissed\n useEffect(() => {\n if (expanded === true) {\n setTimeout(() => setIsDismissed(true), 400);\n const date = format(parse(registration.registrations[0].date, \"yyyy-MM-dd\", 0), \"yyyyMMdd\");\n req().put(`semcotime/corrections/v3/dismiss/${date}?${params({ externalId: selectedUser })}`);\n }\n // eslint-disable-next-line\n }, [expanded]);\n\n return (\n
\n {/* Header */}\n
setExpanded(!expanded)}>\n
{title}
\n\n
\n
\n {}\n
\n
\n {registration.totalHours}\n
\n\n \n
\n
\n\n {/* Details */}\n
\n
\n {registration.registrations\n .sort((a, b) => (a.reportCode > b.reportCode ? 1 : -1))\n .map((registration, index) => (\n
\n
\n
\n {registration.confirmed === \"Yes\" && }\n {registration.confirmed === \"No\" && }\n

{registration.reportCodeDescription}

\n
\n
\n\n
\n

\n {lang.activity}: {registration.activity}\n

\n

\n {lang.reportCode}: {registration.reportCode}\n

\n
\n\n
\n

\n {lang.note}: {registration.note}\n

\n
\n
\n ))}\n
\n
\n
\n );\n}\n\nconst componentStyles = (props) => css`\n background-color: ${colors.white};\n border-top: 1px ${colors.midGrey} solid;\n border-bottom: 1px ${colors.midGrey} solid;\n margin-bottom: -1px;\n\n &.collapsed {\n margin: 0;\n border-left: 3px solid transparent;\n transition: margin 240ms ease;\n margin-bottom: -1px;\n\n .hide {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n transition: max-height 240ms ease, opacity 240ms ease, overflow 240ms ease;\n }\n\n .rotate-neutral {\n transform: rotate(0deg);\n transition: transform 240ms ease;\n }\n }\n\n &.expanded {\n margin: 0.65rem 0;\n border-left: 3px solid ${props.primaryColor};\n transition: margin 240ms ease, border-left 240ms ease;\n\n &:first-of-type {\n margin-top: 0px;\n }\n\n .item-header {\n color: ${props.primaryColor};\n\n .rotate {\n transform: rotate(-45deg);\n transition: transform 240ms ease;\n }\n }\n\n .item-details {\n .show {\n max-height: 1500px;\n overflow: auto;\n opacity: 1;\n transition: max-height 240ms ease, opacity 240ms ease;\n }\n }\n }\n\n .item-header {\n display: flex;\n padding: 0.75rem;\n margin-bottom: -1px;\n color: ${colors.darkGrey};\n font-weight: bold;\n\n &:active {\n background-color: ${colors.ultraLightGrey};\n transition: background-color 80ms ease;\n }\n\n .right {\n display: flex;\n margin-left: auto;\n font-weight: bold;\n }\n\n .left {\n display: flex;\n }\n }\n\n .item-details {\n .details-header {\n display: flex;\n padding: 0.75rem 0.75rem 0 0.75rem;\n\n .left {\n display: flex;\n\n svg {\n width: 1.25rem;\n height: 1.25rem;\n margin-right: 0.5rem;\n flex-shrink: 0;\n }\n }\n\n .right {\n display: flex;\n margin-left: auto;\n font-weight: bold;\n\n p.hours {\n color: ${colors.darkGrey};\n margin-right: 0.35rem;\n }\n }\n }\n\n .details {\n padding: 0.5rem 0.75rem 0rem 0.75rem;\n color: ${colors.darkGrey};\n\n span {\n font-weight: bold;\n }\n\n p {\n padding-right: 1rem;\n display: inline-block;\n }\n }\n }\n`;\n\nconst mapStateToProps = (state) => ({\n lang: state.language.language,\n primaryColor: state.appConfig.primaryColor,\n selectedUser: state.users.selectedUser,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n showContextMenu: bindActionCreators(showContextMenu, dispatch),\n showModalPage: bindActionCreators(showModalPage, dispatch),\n showDialog: bindActionCreators(showDialog, dispatch),\n hideDialog: bindActionCreators(hideDialog, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(WorkTimeListItem);\n","import React, { useState, useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { format, subDays } from \"date-fns\";\nimport params from \"jquery-param\";\n\n// css\nimport { ArrowBackIcon, AlertDecagramIcon, ThumbsUpOutlineIcon } from \"mdi-react\";\n\n// utilities\nimport pageNavigator from \"../../utilities/page-navigator\";\nimport req from \"../../utilities/request-utility\";\nimport usePageAndBackButtonURL from \"../../hooks/usePageAndBackButtonURL\";\n\n// ui-components\nimport Page from \"../ui/Page\";\nimport TopBar from \"../ui/TopBar\";\nimport ScrollView from \"../ui/ScrollView\";\nimport InlineSpinner from \"../ui/InlineSpinner\";\nimport StatusBox from \"../ui/StatusBox\";\nimport CorrectionListItem from \"./CorrectionListItem\";\n\nfunction CorrectionsOverview(props) {\n const lang = useSelector((s) => s.language.language);\n const selectedUser = useSelector((s) => s.users.selectedUser);\n\n const { page, backButtonURL } = usePageAndBackButtonURL(props);\n const [state, setState] = useState({\n loading: true,\n error: false,\n registrations: {},\n });\n\n useEffect(() => {\n const toDate = format(new Date(), \"yyyyMMdd\");\n const fromDate = format(subDays(new Date(), 90), \"yyyyMMdd\");\n\n req()(`semcotime/corrections/v3?${params({ externalId: selectedUser, fromDate, toDate })}`)\n .then(({ data }) => setState({ ...state, registrations: data, loading: false, error: false }))\n .catch((err) => {\n setState({ ...state, loading: false, error: true });\n });\n // eslint-disable-next-line\n }, []);\n\n return (\n \n pageNavigator(backButtonURL, \"backward\")} />} />\n \n {/* Loading */}\n {state.loading && !state.error && }\n\n {/* Error */}\n {state.error && !state.loading && (\n }\n title={lang.errorLoadingRegistrationToastTitle}\n content={lang.errorLoadingRegistrationToastContent}\n />\n )}\n\n {/* No data */}\n {!state.error && !state.loading && Object.keys(state.registrations).length === 0 && (\n }\n // title={\"Du må være god til at registrere dine timer!\"}\n title={lang.noCorrectionsTitle}\n content={lang.noCorrectionsContent}\n // content={\"Du har ingen ulæste corrections for de seneste 90 dage\"}\n />\n )}\n\n {/* Load registrations */}\n {!state.error &&\n !state.loading &&\n Object.keys(state.registrations).map((key) => (\n \n ))}\n \n \n );\n}\n\nexport default CorrectionsOverview;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { RadioboxBlankIcon, RadioboxMarkedIcon, ApproveIcon } from 'mdi-react';\nimport moment from 'moment';\nimport 'moment/locale/da'; // Import the Danish locale\n// css\nimport { css } from 'emotion';\nimport colors from '../../style/colors';\n\nimport ActionWrapper from '../ui/ActionWrapper';\n\nfunction ForemanListItem(props) {\n\tconst { data: registration, onClick, selected, selectAllApproved } = props;\n\tconst { data, type, isNewType, lockedByForeman } = registration;\n\tconst { timeRegistrations = [] } = data;\n\n\tconst primaryColor = useSelector(s => s.appConfig.primaryColor);\n\tconst selectedLanguage = useSelector(s => s.auth.user.language);\n\n\tconst isRecordApproved =\n\t\tlockedByForeman && timeRegistrations.filter(d => d.approvedByForeman).length === timeRegistrations.length;\n\n\tconst {\n\t\tdate,\n\t\tendTimeHours,\n\t\tendTimeMinutes,\n\t\tstartTimeHours,\n\t\tstartTimeMinutes,\n\t\tstartDate,\n\t\tstartTime,\n\t\tendDate,\n\t\tendTime\n\t} = data;\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{type === 'time' ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{selected || (isRecordApproved && selectAllApproved) ? (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{date}\n\t\t\t\t\t\t\t\t{moment(date).locale(selectedLanguage).format('dddd')}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{!isNewType && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{`${startTimeHours}:${startTimeMinutes}:00`}-{`${endTimeHours}:${endTimeMinutes}:00`}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{selected || (type === 'absence' && selectAllApproved) ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{moment(startDate).format('YYYY-MM-DD')}\n\t\t\t\t\t\t - \n\t\t\t\t\t\t{moment(endDate).format('YYYY-MM-DD')}\n\t\t\t\t\t\t{`${startTime}:00`}\n\t\t\t\t\t\t - \n\t\t\t\t\t\t{`${endTime}:00`}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t\t

\n\t\t\t\t<>\n\t\t\t\t\t{type}\n\t\t\t\t\t{isRecordApproved ? (\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t

\n\t\t
\n\t);\n}\n\nconst componentStyles = primaryColor => css`\n\tdisplay: flex;\n\tborder: 1px ${colors.lightGrey} solid;\n\tpadding: 0.75rem;\n\tborder-radius: 0;\n\twidth: 100%;\n\tmargin-bottom: -1px;\n\talign-items: center;\n\tjustify-content: space-between;\n\n\t&.selected {\n\t\toutline: 3px ${primaryColor} solid;\n\t\toutline-offset: 0px;\n\t\toutline-style: auto;\n\n\t\tsvg {\n\t\t\tcolor: ${primaryColor};\n\t\t}\n\t}\n\n\t.date {\n\t\tfont-weight: 700;\n\t\tmargin: 0 0.85rem;\n\t}\n\n\t.to {\n\t\tfont-weight: 700;\n\t\tposition: relative;\n\t\ttop: -1px;\n\t}\n\n\t.type {\n\t\tfont-weight: 700;\n\t\tcolor: #6e6e6e;\n\t}\n\n\t.type:first-letter {\n\t\ttext-transform: capitalize;\n\t}\n\n\t.info {\n\t\tdisplay: inline;\n\n\t\tspan {\n\t\t\tposition: relative;\n\t\t\ttop: -6px;\n\t\t}\n\t}\n\n\tsvg {\n\t\tcolor: ${colors.darkGrey};\n\t}\n\n\t@media (max-width: 414px) {\n\t\tflex-direction: column;\n\n\t\t.info {\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: center;\n\t\t\talign-items: baseline;\n\t\t}\n\t}\n`;\n\nexport default ForemanListItem;\n","import { useQuery } from \"react-query\";\nimport { v1 } from \"uuid\";\nimport moment from \"moment\";\nimport params from \"jquery-param\";\n\nimport req from \"../../utilities/request-utility\";\n\nexport const useDropdownData = (formData = null) => {\n const {\n data: { data: defaultEmployeeValues = {} } = {},\n isFetching: defaultEmployeeValuesIsFetching,\n status: defaultEmployeeValuesStatus,\n refetch: defaultEmployeeValuesRefetch,\n } = useQuery(\"defaultEmployeeValues\", () => req()(`semcotime/projects/default-employee-values/${formData.externalId}`), {\n // keepPreviousData: true,\n refetchOnWindowFocus: false,\n retry: false,\n // staleTime: 24 * 60 * 60 * 1000,\n });\n\n const {\n data: { data: defaultProjectSubProjectAndActivity = {} } = {},\n status: defaultProjectSubProjectAndActivityStatus,\n } = useQuery(\n \"defaultProjectSubProjectAndActivity\",\n () => req()(`semcotime/projects/default-project-sub-project-and-activity`),\n { keepPreviousData: true, refetchOnWindowFocus: false, retry: false, staleTime: 24 * 60 * 60 * 1000 }\n );\n\n const { data: { data: project = [] } = {}, status: projectStatus } = useQuery(\n \"project\",\n () => req()(`semcotime/projects`),\n {\n keepPreviousData: true,\n refetchOnWindowFocus: false,\n staleTime: 60 * 60 * 1000,\n }\n );\n\n const {\n data: { data: subProject = [] } = {},\n status: subProjectStatus,\n isFetching: subProjectIsFetching,\n } = useQuery(\n [\"subProjects\", { projectId: formData.project }],\n ({ queryKey }) => {\n const [key, { projectId }] = queryKey;\n\n const project = typeof projectId !== \"undefined\" ? projectId : defaultProjectSubProjectAndActivity.projectId;\n if (!project) return;\n\n return req()(`semcotime/projects/${project}/sub-projects`);\n },\n {\n enabled: !!defaultProjectSubProjectAndActivity.projectId || typeof formData.project !== \"undefined\",\n keepPreviousData: true,\n retry: false,\n refetchOnWindowFocus: false,\n staleTime: 60 * 60 * 1000,\n }\n );\n\n const { data: { data: projectActivity = [] } = {}, status: projectActivityStatus } = useQuery(\n [\"projectActivity\", { date: formData.date, projectId: formData.project, subProjectId: formData.subProject }],\n ({ queryKey }) => {\n const [key, { date, projectId, subProjectId }] = queryKey;\n\n const project = typeof projectId !== \"undefined\" ? projectId : defaultProjectSubProjectAndActivity.projectId;\n const subProject =\n typeof subProjectId !== \"undefined\" ? subProjectId : defaultProjectSubProjectAndActivity.subProjectId;\n if (!project || !subProject) return;\n\n return req()(\n `semcotime/projects/${project}/sub-projects/${subProject}/activities?${params({\n date: date ? date : moment().format(\"yyyy-MM-DD\"),\n })}`\n );\n },\n {\n enabled:\n !!defaultProjectSubProjectAndActivity.projectId ||\n !!defaultProjectSubProjectAndActivity.subProjectId ||\n (typeof formData.project !== \"undefined\" &&\n typeof formData.subProject !== \"undefined\" &&\n formData.subProject !== \"\"),\n keepPreviousData: true,\n retry: false,\n refetchOnWindowFocus: false,\n staleTime: 60 * 60 * 1000,\n }\n );\n\n const { data: { data: dabTradeCodes = [] } = {}, isFetching: dabTradeIsFetching } = useQuery(\n \"dabTrades\",\n () => req()(`semcotime/dab-trade-codes`),\n {\n keepPreviousData: true,\n refetchOnWindowFocus: false,\n staleTime: 60 * 60 * 1000,\n }\n );\n\n const { data: { data: dabLocations = [] } = {}, isFetching: dabLocationsIsFetching } = useQuery(\n \"dabLocations\",\n () => req()(`semcotime/dab-locations`),\n {\n keepPreviousData: true,\n refetchOnWindowFocus: false,\n staleTime: 60 * 60 * 1000,\n }\n );\n\n const {\n data: { data: nptHottLabels = [] } = {},\n isFetching: nptHottLabelsIsFetching,\n status: nptHottLabelsStatus,\n refetch: nptHottLabelsRefetch,\n } = useQuery(\"nptHottLabels\", () => req()(`semcotime/npt-hott-labels`), {\n // keepPreviousData: true,\n refetchOnWindowFocus: false,\n staleTime: 60 * 60 * 1000,\n });\n\n return {\n dabLocations,\n dabLocationsIsFetching,\n dabTradeCodes,\n dabTradeIsFetching,\n defaultEmployeeValues:\n defaultEmployeeValuesStatus === \"loading\" || defaultEmployeeValuesStatus === \"error\" ? {} : defaultEmployeeValues,\n defaultEmployeeValuesIsFetching,\n defaultEmployeeValuesStatus,\n defaultEmployeeValuesRefetch,\n defaultProjectSubProjectAndActivityData:\n defaultProjectSubProjectAndActivityStatus === \"loading\" || defaultProjectSubProjectAndActivityStatus === \"error\"\n ? {}\n : defaultProjectSubProjectAndActivity,\n defaultProjectSubProjectAndActivityStatus,\n nptHottLabels:\n nptHottLabelsStatus === \"loading\" || nptHottLabelsStatus === \"error\"\n ? []\n : nptHottLabelsStatus === \"success\"\n ? nptHottLabels.length !== 0\n ? nptHottLabels.map((d) => ({\n ...d,\n id: v1(),\n WorkOrderNo: \"\",\n OperationNo: \"\",\n Comment: \"\",\n Hours: 0,\n }))\n : []\n : [],\n nptHottLabelsIsFetching,\n nptHottLabelsRefetch,\n nptHottLabelsStatus,\n projectData:\n projectStatus === \"loading\"\n ? []\n : project.map((d) => ({\n ...d,\n detailedReportingEnabled: d.detailedReportingEnabled\n ? d.detailedReportingEnabled.toLowerCase() === \"yes\"\n ? true\n : false\n : false,\n })),\n projectActivityData:\n projectActivityStatus === \"loading\" || projectActivityStatus === \"idle\" || projectActivityStatus === \"error\"\n ? []\n : projectActivity,\n projectStatus,\n projectActivityStatus,\n subProjectData:\n subProjectStatus === \"loading\" || subProjectStatus === \"idle\" || subProjectStatus === \"error\" ? [] : subProject,\n subProjectStatus,\n subProjectIsFetching,\n };\n};\n","export default {\n open: \"OPEN\",\n lockedByForeman: \"LOCKED_BY_FOREMAN\",\n locked: \"LOCKED\",\n approved: \"APPROVED\",\n deleted: \"DELETED\",\n};\n","import React, { memo, useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Checkbox, Col, notification, Row, List, DatePicker, Button, Input, Popconfirm, Tooltip } from 'antd';\nimport Moment from 'moment';\nimport { extendMoment } from 'moment-range';\nimport 'rc-time-picker/assets/index.css';\nimport { useMediaQuery } from 'react-responsive';\nimport TextField from '@mui/material/TextField';\n\nimport { v1 } from 'uuid';\n\n// csszz\nimport { css } from 'emotion';\nimport colors from '../../style/colors';\nimport {\n\tCheckCircleOutlined,\n\tCloseCircleOutlined,\n\tDeleteOutlined,\n\tSaveOutlined,\n\tExclamationCircleOutlined\n} from '@ant-design/icons';\n\n// ui-components\nimport DropDown from '../ui/DropDown';\n\nconst TimeRegistrationList = ({\n\tdate = '',\n\tdisabled = false,\n\tonChange = () => {},\n\tlocation = '',\n\tlocationIFSRules = [],\n\tlocationIsLoading = true,\n\tvalue = [],\n\tisForeman = false,\n\tisView = false\n}) => {\n\tconst moment = extendMoment(Moment);\n\n\tconst [dataList, setDataList] = useState([]);\n\tconst lang = useSelector(({ language }) => language.language);\n\tconst isMobile = useMediaQuery({ query: '(max-width: 900px)' });\n\tconst [showMobileHelpText, setshowMobileHelpText] = useState(false);\n\n\t// TO MIGRATE TO CORRECT VALUE, I DID NOT EXPECT THAT THIS WILL BE THE FINAL 'RULES' FOR THE TIME REGISTRATION TYPES\n\tconst timeRegistrationsTypes = [\n\t\t{ label: 'Work Time', value: 1, IfsValue: 'WorkTime' },\n\t\t{ label: 'Standby', value: 2, IfsValue: 'Standby' },\n\t\t{ label: 'Paid Rest', value: 3, IfsValue: 'PaidRest' },\n\t\t{ label: 'Driving Hours', value: 4, IfsValue: 'DrivingHours' },\n\t\t{ label: 'Heli Time Out', value: 5, IfsValue: 'HeliTimeOut' },\n\t\t{ label: 'Heli Time Home', value: 6, IfsValue: 'HeliTimeHome' },\n\t\t{ label: 'Waiting Hours', value: 7, IfsValue: 'WaitingHours' }\n\t];\n\n\tconst handleAddRegistration = val => {\n\t\t// SOON, ADD LOGIC TO REMOVE UNRELATED TIME REGISTRATIONS WHEN THE LOCATION HAS CHANGED\n\t\tconst toReturn = {\n\t\t\tid: v1(),\n\t\t\ttype: val,\n\t\t\tstartTime: '',\n\t\t\tendTime: '',\n\t\t\tcustomerDetail: '',\n\t\t\tcustomerNote: '',\n\t\t\tchangeShift: false,\n\t\t\tshift: 'day',\n\t\t\tapprovedByForeman: false,\n\t\t\tsavedByBlueCollar: false,\n\t\t\tforemanChanges: {}\n\t\t};\n\n\t\tsetDataList([...dataList, toReturn]);\n\t\tonChange([...dataList, toReturn]); // sort then parent form onChange\n\t};\n\n\tconst locationRegistrationRules = location => {\n\t\t// filter time registration types based on location\n\t\tconst locationRules = locationIFSRules.filter(d => d.DabLocationValue == location)[0];\n\t\tif (locationRules) return timeRegistrationsTypes.filter(d => JSON.parse(locationRules[d.IfsValue]));\n\n\t\treturn [];\n\t};\n\n\tconst sortTimeRegistrations = () => {\n\t\tconst unsavedRegistrations = dataList.filter(d => !d.savedByBlueCollar);\n\n\t\tconst sortedRegistrations = dataList //sort by milliseconds\n\t\t\t.filter(d => d.savedByBlueCollar)\n\t\t\t.sort((a, b) => {\n\t\t\t\tconst diff =\n\t\t\t\t\tmoment.range(moment(a.startTime, 'HH:mm:ss'), moment(a.endTime, 'HH:mm:ss')).start.valueOf() -\n\t\t\t\t\tmoment.range(moment(b.startTime, 'HH:mm:ss'), moment(b.endTime, 'HH:mm:ss')).start.valueOf();\n\t\t\t\treturn diff === 0\n\t\t\t\t\t? moment.range(moment(a.startTime, 'HH:mm:ss'), moment(a.endTime, 'HH:mm:ss')).end.valueOf() -\n\t\t\t\t\t\t\tmoment.range(moment(b.startTime, 'HH:mm:ss'), moment(b.endTime, 'HH:mm:ss')).end.valueOf()\n\t\t\t\t\t: diff;\n\t\t\t});\n\n\t\tsetDataList([...[...sortedRegistrations, ...unsavedRegistrations]]); // placed sorted saved time regs on the top then append unsaved regs\n\t\treturn [...[...sortedRegistrations, ...unsavedRegistrations]]; // placed sorted saved time regs on the top then append unsaved regs\n\t};\n\n\tconst handleDeleteRegistration = val => {\n\t\tconst newDataList = dataList.filter(d => d.id !== val);\n\n\t\t// add logic if user deleted all regs , add registration dropdown should be empty\n\n\t\tsetDataList(newDataList);\n\t\tonChange(newDataList);\n\t};\n\n\tconst handleRegistrationSave = registration => {\n\t\tlet { changeShift, startTime, endTime, shift, type } = registration;\n\t\tstartTime = moment(startTime, 'HH:mm:ss');\n\t\tendTime = moment(endTime, 'HH:mm:ss');\n\n\t\t// DAY AND NIGHT LOGIC SOON\n\n\t\tif (!startTime.isValid() || !endTime.isValid()) {\n\t\t\treturn notification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: 'Invalid time range'\n\t\t\t});\n\t\t}\n\n\t\t// STANDBY TYPE VALIDATIONS\n\t\tif (type === 2 && location !== 'OffShore') {\n\t\t\tconst allSavedStandby = dataList.filter(d => d.savedByBlueCollar && d.type === 2);\n\t\t\tlet totalHoursStandby = 0;\n\n\t\t\t//if standby is more than 12 hours\n\t\t\tif (allSavedStandby.length) {\n\t\t\t\tallSavedStandby.forEach(d => {\n\t\t\t\t\t// 1. add hours\n\t\t\t\t\ttotalHoursStandby += moment(d.endTime, 'HH:mm').diff(moment(d.startTime, 'HH:mm'), 'hours');\n\t\t\t\t\t//2. add minute differencials per registration\n\t\t\t\t\ttotalHoursStandby +=\n\t\t\t\t\t\t(parseInt(\n\t\t\t\t\t\t\tmoment.utc(moment(d.endTime, 'HH:mm').diff(moment(d.startTime, 'HH:mm'))).format('mm')\n\t\t\t\t\t\t) /\n\t\t\t\t\t\t\t60) *\n\t\t\t\t\t\t1;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//3. finally add the incoming registration's hours and minutes\n\t\t\ttotalHoursStandby += endTime.diff(startTime, 'hours');\n\t\t\ttotalHoursStandby += (parseInt(moment.utc(endTime.diff(startTime)).format('mm')) / 60) * 1;\n\n\t\t\tif (totalHoursStandby > 12) {\n\t\t\t\treturn notification.error({\n\t\t\t\t\tduration: 7,\n\t\t\t\t\tmessage: 'FAILED',\n\t\t\t\t\tdescription: 'It is not possible to register more than 12 hours of standby for one day'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// if standby is 7PM onwards\n\t\t\tif (\n\t\t\t\ttype === 2 &&\n\t\t\t\t(endTime.isSameOrBefore(startTime) ||\n\t\t\t\t\t!startTime.isBefore(moment('19:15', 'HH:mmm')) ||\n\t\t\t\t\t!endTime.isBefore(moment('19:15', 'HH:mmm')))\n\t\t\t) {\n\t\t\t\treturn notification.error({\n\t\t\t\t\tduration: 7,\n\t\t\t\t\tmessage: 'FAILED',\n\t\t\t\t\tdescription: 'It is not possible to register standby past 7PM'\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//get all saved registrations\n\t\tconst savedTimeRegistrations = dataList.filter(d => d.savedByBlueCollar); // filter out saved\n\t\tif (savedTimeRegistrations.length === 0) return true; //no saved time reg\n\n\t\tlet isTimeValid = true;\n\n\t\tsavedTimeRegistrations.every(d => {\n\t\t\t//loop the saved time regs then check if the saving time range overlaps\n\n\t\t\t// const toSaveDate = moment.range(moment(startTime, \"HH:mm:ss\"), moment(endTime, \"HH:mm:ss\"));\n\t\t\t// const savedDate = moment.range(moment(d.startTime, \"HH:mm:ss\"), moment(d.endTime, \"HH:mm:ss\"));\n\n\t\t\tconst currentSavedStartDate = moment(d.startTime, 'HH:mm:ss');\n\t\t\tconst incomingStartDate = moment(startTime);\n\n\t\t\t// if end time is before start time (overnight) , add 1 day\n\t\t\tconst currentSavedEndDate = moment(d.endTime, 'HH:mm:ss').isSameOrBefore(currentSavedStartDate)\n\t\t\t\t? moment(d.endTime, 'HH:mm:ss').add(1, 'day')\n\t\t\t\t: moment(d.endTime, 'HH:mm:ss');\n\t\t\tconst incomingEndDate = moment(endTime).isSameOrBefore(incomingStartDate)\n\t\t\t\t? moment(endTime).add(1, 'day')\n\t\t\t\t: moment(endTime);\n\n\t\t\tconst toSaveDateRange = moment.range(incomingStartDate.format(), incomingEndDate.format());\n\t\t\tconst savedDateRange = moment.range(\n\t\t\t\tcurrentSavedStartDate.format('YYYY-MM-DDTHH:mm:ssZ'),\n\t\t\t\tcurrentSavedEndDate.format('YYYY-MM-DDTHH:mm:ssZ')\n\t\t\t);\n\n\t\t\t//check if time overlaps\n\t\t\tif (toSaveDateRange.overlaps(savedDateRange)) {\n\t\t\t\tisTimeValid = false;\n\t\t\t\treturn notification.error({\n\t\t\t\t\tduration: 7,\n\t\t\t\t\tmessage: 'FAILED',\n\t\t\t\t\tdescription: 'This time range is overlapping with other registrations.'\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\treturn isTimeValid;\n\t};\n\n\tconst handleRegistrationChanges = (field, registration, val) => {\n\t\tconst { id } = registration;\n\n\t\t// dynamically changes object values by key\n\n\t\tlet newDataList = dataList;\n\t\tnewDataList.map((d, i) => {\n\t\t\tif (d.id === id) {\n\t\t\t\tnewDataList[i] = { ...newDataList[i], [field]: val };\n\t\t\t}\n\t\t\treturn newDataList;\n\t\t});\n\n\t\tsetDataList([...newDataList]); // workaround to re-render\n\t\tonChange(sortTimeRegistrations()); // sort then parent form onChange\n\t};\n\n\t//load registrations from saved form\n\tuseEffect(() => {\n\t\tsetDataList(value);\n\t}, [value]);\n\n\t// remove irrelevant time regs when changing Location\n\tuseEffect(() => {\n\t\tif (dataList.length !== 0 && isForeman === false) {\n\t\t\t// const newDataList = dataList.filter((d) => locationRegistrationRules(location).includes(d.type));\n\t\t\tconst newDataList = dataList\n\t\t\t\t.filter(d =>\n\t\t\t\t\tlocationRegistrationRules(location)\n\t\t\t\t\t\t.map(d => d.value)\n\t\t\t\t\t\t.includes(d.type)\n\t\t\t\t)\n\t\t\t\t.map(d => ({ ...d, ...(d.type === 2 && { savedByBlueCollar: false }) }));\n\n\t\t\tsetDataList(newDataList);\n\t\t\tonChange(newDataList);\n\t\t\tnotification.warning({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'INFO',\n\t\t\t\tdescription: lang.timeRegistrationListLocationChange\n\t\t\t});\n\t\t}\n\n\t\t// primitive workaround , in foreman forms, the location is always changing so the date should be conditioned if the change of location is triggered by the form action or by change of record\n\t\tif (isForeman) {\n\t\t\tconst prevDate = localStorage.getItem('semcotime-foreman-last-form-date')\n\t\t\t\t? JSON.parse(localStorage.getItem('semcotime-foreman-last-form-date'))\n\t\t\t\t: date;\n\n\t\t\tif (prevDate === date) {\n\t\t\t\tconst newDataList = dataList\n\t\t\t\t\t.filter(d =>\n\t\t\t\t\t\tlocationRegistrationRules(location)\n\t\t\t\t\t\t\t.map(d => d.value)\n\t\t\t\t\t\t\t.includes(d.type)\n\t\t\t\t\t)\n\t\t\t\t\t.map(d => ({ ...d, ...(d.type === 2 && { savedByBlueCollar: false, approvedByForeman: false }) }));\n\n\t\t\t\tonChange(newDataList);\n\t\t\t\tnotification.warning({\n\t\t\t\t\tduration: 1,\n\t\t\t\t\tmessage: 'INFO',\n\t\t\t\t\tdescription: 'Due to Location change, irrelevant time registration(s) has been removed.'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlocalStorage.setItem('semcotime-foreman-last-form-date', JSON.stringify(date));\n\t\t}\n\t}, [location]);\n\n\tuseEffect(() => {\n\t\tif (showMobileHelpText) {\n\t\t\tnotification.info({\n\t\t\t\tduration: 0,\n\t\t\t\tdescription: 'Please round up to the nearest half hour'\n\t\t\t});\n\t\t} else {\n\t\t\tnotification.destroy();\n\t\t}\n\t}, [showMobileHelpText]);\n\n\tconst checkShift = (startTime, endTime) => {\n\t\tconst momentStartTime = moment(startTime, 'HH:mm:00');\n\t\tconst momentEndtime = moment(endTime, 'HH:mm:00');\n\n\t\tif (momentEndtime.isSameOrBefore(momentStartTime)) return 'night';\n\n\t\treturn 'day';\n\t};\n\n\treturn (\n\t\t
\n\t\t\t{!isView && (\n\t\t\t\t<>\n\t\t\t\t\t

{lang.timeRegistrationListLabel}

\n\t\t\t\t\t handleAddRegistration(e.target.value)}\n\t\t\t\t\t\toptions={locationRegistrationRules(location)}\n\t\t\t\t\t\tplaceholder={lang.timeRegistrationListPlaceholder}\n\t\t\t\t\t\tvalue={null}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t)}\n\n\t\t\t{dataList.length !== 0 && (\n\t\t\t\t<>\n\t\t\t\t\t
\n\t\t\t\t\t (\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'approvedByForeman',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!item.approvedByForeman\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!item.approvedByForeman ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.approvedByForeman\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? lang.timeRegistrationListUnapprove\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: lang.timeRegistrationListApprove}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (item.savedByBlueCollar) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//if user want to edit a saved time registration\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'savedByBlueCollar',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!item.savedByBlueCollar\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (handleRegistrationSave(item)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'savedByBlueCollar',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!item.savedByBlueCollar\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{item.savedByBlueCollar\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? lang.timeRegistrationListEdit\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: lang.timeRegistrationListSave}\n\t\t\t\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t\t\t\t handleDeleteRegistration(item.id)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t ]\n\t\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.changeShift && item.type === 1 && isForeman && (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t Manual Change Shift\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t{item.type === 'workTime'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'Work Time'\n\t\t\t\t\t\t\t\t\t\t\t\t: timeRegistrationsTypes.filter(d => d.value === item.type)[0].label}\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t setshowMobileHelpText(isMobile && [4, 5, 6].includes(item.type))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonBlur={() => setshowMobileHelpText(false)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tformat={'HH:mm'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminuteStep={[4, 5, 6].includes(item.type) ? 30 : 15}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={item.savedByBlueCollar}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgetPopupContainer={trigger => trigger.parentElement}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpicker={'time'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={date => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'startTime',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdate.format('HH:mm')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (item.type === 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// check shift only if worktime type\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'shift',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcheckShift(date.format('HH:mm:00'), item.endTime)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(obj, date) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges('startTime', item, date);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (item.type === 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// check shift only if worktime type\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'shift',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcheckShift(date, item.endTime)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={lang.timeRegistrationListFrom}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={item.startTime ? moment(item.startTime, 'HH:mm') : ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t setshowMobileHelpText(isMobile && [4, 5, 6].includes(item.type))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonBlur={() => setshowMobileHelpText(false)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tformat={'HH:mm'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminuteStep={[4, 5, 6].includes(item.type) ? 30 : 15}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={item.savedByBlueCollar}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgetPopupContainer={trigger => trigger.parentElement}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpicker={'time'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={date => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'endTime',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdate.format('HH:mm')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (item.type === 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// check shift only if worktime type\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'shift',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcheckShift(item.startTime, date.format('HH:mm:00'))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(obj, date) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges('endTime', item, date);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (item.type === 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// check shift only if worktime type\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'shift',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcheckShift(item.startTime, date)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={lang.timeRegistrationListTo}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={item.endTime ? moment(item.endTime, 'HH:mm') : ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{item.type === 1 && (\n\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'shift',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={item.shift}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toptions={[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: lang.timeRegistrationListDay,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: 'day'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: lang.timeRegistrationListNight,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: 'night'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Shift\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...(isMobile ? { style: { width: '100%' } } : {})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'changeShift',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!item.changeShift\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'shift',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcheckShift(item.startTime)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname=\"changeShift\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lang.timeRegistrationListChangeShift}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{item.type === 1 && (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'customerDetail',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{[1, 2, 3, 7].includes(item.type) && (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleRegistrationChanges(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'customerNote',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t);\n};\n\nconst componentStyles = isForeman => css`\n\t// .listButtons {\n\t// font-weight: 700;\n\t// background-color: #103447;\n\t// color: #ffffff;\n\t// text-shadow: 0 1px 1px rgb(0 0 0 / 20%);\n\t// border-bottom: 3px solid #020609;\n\t// }\n\t@media screen and (max-width: 576px) {\n\t\t.ant-list-item-action {\n\t\t\tpadding-top: 15px;\n\t\t\tmargin-left: ${isForeman ? '16vw' : '50vw'} !important;\n\t\t}\n\t}\n\t.seperator {\n\t\tbackground-color: ${colors.lightGrey};\n\t\theight: 1px;\n\t\tmargin: 1.5rem -0.75rem 1rem -0.75rem;\n\t}\n\n\t.registrationSeparator {\n\t\tpadding: 10px;\n\t}\n\n\t.ant-picker-panel-container {\n\t\t.ant-picker-time-panel-column {\n\t\t\toverflow-y: auto !important;\n\t\t}\n\t\t.ant-picker-time-panel-column::-webkit-scrollbar {\n\t\t\t-webkit-appearance: none;\n\t\t}\n\n\t\t.ant-picker-time-panel-column::-webkit-scrollbar:vertical {\n\t\t\twidth: 11px;\n\t\t}\n\n\t\t.ant-picker-time-panel-column::-webkit-scrollbar:horizontal {\n\t\t\theight: 11px;\n\t\t}\n\n\t\t.ant-picker-time-panel-column::-webkit-scrollbar-thumb {\n\t\t\tborder-radius: 8px;\n\t\t\tborder: 2px solid white; /* should match background, can't be transparent */\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\n\t\t}\n\t}\n`;\n\nexport default memo(TimeRegistrationList);\n","import Moment from \"moment\";\nimport { extendMoment } from \"moment-range\";\n\nconst moment = extendMoment(Moment);\n\nconst computeTotalHours = (timeRegistrations) => {\n if (timeRegistrations.length === 0) return 0;\n\n let totalHours = 0;\n\n timeRegistrations.forEach((d) => {\n // 1. add hours\n if (moment(d.endTime, \"HH:mm\").isBefore(moment(d.startTime, \"HH:mm\"))) {\n //if overnight\n const now = moment(d.startTime, \"HH:mm\");\n const then = moment(d.endTime, \"HH:mm\").add(\"days\", 1);\n\n const ms = then.diff(now);\n const duration = moment.duration(ms);\n\n totalHours += Math.floor(duration.asHours()) + (parseInt(moment.utc(ms).format(\"mm\")) / 60) * 1;\n } else {\n totalHours += moment(d.endTime, \"HH:mm\").diff(moment(d.startTime, \"HH:mm\"), \"hours\");\n\n //2. add minute differencials per registration\n totalHours +=\n (parseInt(moment.utc(moment(d.endTime, \"HH:mm\").diff(moment(d.startTime, \"HH:mm\"))).format(\"mm\")) / 60) * 1;\n }\n });\n\n return totalHours;\n};\n\nexport default computeTotalHours;\n","import React, { memo, useEffect, useState } from \"react\";\nimport { Card, Col, notification, Row, Button, InputNumber, Collapse, Result } from \"antd\";\n\nimport { useMediaQuery } from \"react-responsive\";\nimport \"rc-time-picker/assets/index.css\";\nimport TextField from \"@mui/material/TextField\";\n\nimport { groupBy } from \"lodash\";\n\n// css\nimport { css } from \"emotion\";\nimport { PlusCircleFilled, MinusCircleFilled } from \"@ant-design/icons\";\n\n//utitlities\nimport computeTotalHours from \"../../utilities/compute-total-time-registartion-hours\";\n\nconst TimeRegistrationList = ({\n disabled = false,\n error,\n isForeman = false,\n nptHottLabels = [],\n onChange = () => {},\n timeRegistrations = [],\n}) => {\n const isMobile = useMediaQuery({ maxWidth: \"800px\" });\n const labelings = groupBy(nptHottLabels, \"Category\");\n\n const [showLabelings, setShowLabelings] = useState(false);\n const [hoursToLabel, setHoursToLabel] = useState(0);\n const [totalHoursLabel, setTotalHoursLabel] = useState(0);\n\n const handleLabelInputChanges = (field, label, val) => {\n const { id } = label;\n // dynamically changes object values by key\n let newLabel = nptHottLabels;\n newLabel.map((d, i) => {\n if (d.id === id) {\n newLabel[i] = { ...newLabel[i], [field]: val };\n }\n return newLabel;\n });\n onChange(newLabel);\n };\n\n useEffect(() => {\n let labelHours = 0;\n nptHottLabels.forEach((d) => {\n labelHours += d.Hours;\n });\n\n setTotalHoursLabel(labelHours);\n labelHours = computeTotalHours(timeRegistrations.filter((d) => d.type === 1 && d.savedByBlueCollar)) - labelHours;\n setHoursToLabel(labelHours < 0 ? 0 : labelHours);\n }, [JSON.stringify(timeRegistrations), JSON.stringify(nptHottLabels)]);\n\n if (nptHottLabels.length === 0)\n return (\n \n );\n\n const fields = (item) => ({\n workOrder: (\n 0 && item.WorkOrderNo === \"\"}\n size=\"small\"\n label=\"Work Order No.\"\n variant=\"outlined\"\n value={item.WorkOrderNo}\n onChange={(e) => handleLabelInputChanges(\"WorkOrderNo\", item, e.target.value)}\n />\n ),\n operationNumber: (\n 0 && item.OperationNo === \"\"}\n size=\"small\"\n label={\"Operation No.\"}\n variant=\"outlined\"\n value={item.OperationNo}\n onChange={(e) => handleLabelInputChanges(\"OperationNo\", item, e.target.value)}\n />\n ),\n comments: (\n 0 && item.Description.replace(/[^a-zA-Z ]/g, \"\") === \"Custom\" && item.Comment === \"\"\n }\n size=\"small\"\n label={\"Description\"}\n variant=\"outlined\"\n value={item.Comment}\n onChange={(e) => handleLabelInputChanges(\"Comment\", item, e.target.value)}\n />\n ),\n hours: (\n {\n if (info.type === \"up\") {\n if (!Math.fround(hoursToLabel) >= Math.fround(info.offset)) {\n return notification.error({\n duration: 1,\n message: \"FAILED\",\n description: \"Insufficient hours to label\",\n });\n }\n }\n handleLabelInputChanges(\"Hours\", item, value);\n }}\n onBlur={(e) => {\n // Workaround, onChange will also trigger onBlur so it will trigger the validation twice\n\n // if the incoming value is below current value, just add (automatically deducted)\n if (item.Hours > parseFloat(e.currentTarget.value))\n return handleLabelInputChanges(\"Hours\", item, parseFloat(e.currentTarget.value));\n\n //if the incoming value is greater than the current value\n if (item.Hours !== 0 && hoursToLabel !== 0 && item.Hours < parseFloat(e.currentTarget.value)) {\n //which means the computation should be (original worktime hours - total hours without the current value)\n if (\n Math.fround(\n computeTotalHours(timeRegistrations.filter((d) => d.type === 1 && d.savedByBlueCollar)) -\n (totalHoursLabel - item.Hours)\n ) >= Math.fround(parseFloat(e.currentTarget.value))\n ) {\n //if the incoming (greater) value is less than or equal total without the current value\n return handleLabelInputChanges(\"Hours\", item, parseFloat(e.currentTarget.value));\n }\n }\n\n //if the incoming value is within the remaining work time hours\n if (Math.fround(hoursToLabel) >= Math.fround(parseFloat(e.currentTarget.value)))\n return handleLabelInputChanges(\"Hours\", item, parseFloat(e.currentTarget.value));\n\n //conditioned just in case the input got focused but user did not changed the value\n if (item.Hours !== parseFloat(e.currentTarget.value))\n notification.error({\n duration: 1,\n message: \"FAILED\",\n description: \"Insufficient hours to label\",\n });\n }}\n placeholder={\"Hours\"}\n value={item.Hours}\n min={0}\n defaultValue={0}\n precision={2}\n step={0.25}\n />\n ),\n });\n\n const renderListItems = (type) => {\n return labelings[type].map((item) => (\n \n {fields(item).workOrder}\n {item.Category === \"HOTT\" ? fields(item).operationNumber :
}\n {item.Description}\n {fields(item).comments}\n {fields(item).hours}\n
\n ));\n };\n\n const renderCardItems = (type) => {\n return (\n
\n {labelings[type].map((item) => (\n {item.Description}}>\n \n {fields(item).workOrder}\n {item.Category === \"HOTT\" ? fields(item).operationNumber :
}\n {fields(item).comments}\n {fields(item).hours}\n
\n
\n ))}\n
\n );\n };\n\n return (\n
\n
\n
\n \n Labelling of NPT and HOTT: \n setShowLabelings(!showLabelings)}\n style={{ marginLeft: \"5px\" }}\n type=\"primary\"\n icon={showLabelings ? : }\n />\n \n
\n {showLabelings && (\n
\n \n Hours to Label: \n \n \n
\n )}\n {error &&
{error.message}
}\n
\n {showLabelings && (\n
\n \n \n {isMobile ? renderCardItems(\"HOTT\") : renderListItems(\"HOTT\")}\n \n \n {isMobile ? renderCardItems(\"NPT\") : renderListItems(\"NPT\")}\n \n \n
\n )}\n
\n );\n};\n\nconst componentStyles = (isForeman) => css`\n margin-top: 10px;\n\n .top {\n .title {\n font-size: 17px;\n }\n .ant-input-number {\n width: 65px;\n }\n }\n\n .label-container {\n padding: 10px;\n // display: flex;\n // justify-content: space-between;\n }\n\n .labelsDropDown {\n margin-top: 15px;\n\n .ant-collapse-content-box {\n padding: 0px;\n }\n }\n\n .mobile-label-cards {\n .ant-card-bordered {\n border: 1px solid #0f3447;\n }\n }\n`;\n\nexport default memo(TimeRegistrationList);\n","import React, { forwardRef, useEffect, useMemo, useState } from \"react\";\nimport { isEmpty, isEqual, sortBy } from \"lodash\";\nimport param from \"jquery-param\";\nimport { useMediaQuery } from \"react-responsive\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { DeleteIcon, FloppyIcon } from \"mdi-react\";\nimport moment from \"moment\";\n\n// NEW\nimport { Form, Modal, Checkbox, Radio, Divider, Popover, Popconfirm, notification } from \"antd\";\nimport * as yup from \"yup\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport { useDropdownData } from \"../../WorkTimeDK/hooks\";\nimport workHourState from \"../../../config/semcotimedk-workhour-states\";\n\n// css\nimport { css } from \"emotion\";\nimport common from \"../../../style/common\";\nimport colors from \"../../../style/colors\";\nimport DatePicker from \"../../ui/DatePicker\";\nimport InlineSpinner from \"../../ui/InlineSpinner\";\nimport ScrollView from \"../../ui/ScrollView\";\nimport req from \"../../../utilities/request-utility\";\n\n//ui\nimport Button from \"../../ui/Button\";\nimport DropDown from \"../../ui/DropDown\";\nimport { toggleWorkHourModal } from \"../../../actions/uiActions\";\nimport TimeRegistrationList from \"../../semco-time/TimeRegistrationList\";\nimport NPTAndHOTTLabeling from \"../../semco-time/nptAndHott\";\n\nconst ForemanWorkHourForm = (props, ref) => {\n const dispatch = useDispatch();\n const {\n data: registration = {},\n externalId = null,\n onDelete: onDeleteParent,\n onSubmit: onSubmitParent,\n sentToIFSAt,\n lang,\n page = \"foreman\",\n userId = null,\n } = props;\n const { data = {}, ifsData = null } = registration;\n\n const primaryColor = useSelector((s) => s.appConfig.primaryColor);\n const modal = useSelector(({ ui }) => ui.workHourModal);\n const loggedUserAuthorizedForeman = useSelector(({ auth }) => auth.user.loggedUserAuthorizedForeman, isEqual);\n console.log(\"loggedUserAuthorizedForeman: \", loggedUserAuthorizedForeman);\n\n const archived = useMemo(() => (registration.lockedByIFS ? true : false), [registration.lockedByIFS]);\n const needsProcessing = useMemo(() => (registration.sentToIFSAt ? true : false), [registration.sentToIFSAt]);\n const lockedByForeman = useMemo(() => (registration.lockedByForeman ? true : false), [registration.lockedByForeman]);\n // STATES\n const [foremen, setForemen] = useState([]);\n const [isFormReady, setIsFormReady] = useState(true);\n const [submittingForm, setSubmittingForm] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [errorLoadingFormData, setErrorLoadingFormData] = useState(false); //error page\n const [tradeCodesList, setTradeCodesList] = useState([]);\n const [showMobileFormAction, setShowMobileFormAction] = useState(false);\n\n const getForemen = () => {\n try {\n setIsFormReady(false);\n\n req()(`semcotime/foremen?${param({ foremanGroupIdentifier: page === \"admin\" ? \"ADMIN\" : \"FOREMEN\" })}`).then(\n ({ data }) => {\n const assignedIds = data.assigned.map((d) => d.id);\n\n setForemen([\n ...data.assigned,\n { disabled: true, id: \"\", name: \"------------------\" },\n ...data.all.filter((d) => !assignedIds.includes(d.id)),\n ]);\n }\n );\n\n setIsFormReady(true);\n } catch (err) {\n setErrorLoadingFormData(true);\n }\n };\n\n const schema = yup.object().shape({\n //validations\n date: yup.string().required(\"Date is required\"),\n detailedReportingEnabled: yup.boolean(),\n // foreman: page === \"admin\" ? yup.string().required(\"Foreman is required\") : yup.string(),\n foreman: yup.string().required(\"Foreman is required\"),\n location: yup.string().required(\"Location is required\"),\n project: yup.string().required(\"Project is required\"),\n subProject: yup.string().required(\"Sub Project is required\"),\n activity: yup.string().required(\"Project Activity is required\"),\n trade: yup.string().required(\"Trade is required\"),\n timeRegistrations: yup\n .array()\n .min(1, \"Times Registrations must have at least 1 record\")\n .of(\n yup.object().shape({\n approvedByForeman: yup.boolean(),\n })\n )\n // .compact((v) => !v.approvedByForeman) //check if there is time registration that is not SAVED\n .test({\n name: \"allIsApproved\",\n message: \"All time registrations must be approved\",\n test: (val) => val.filter((d) => !d.approvedByForeman).length === 0, //check if all saved time registrations are approved\n }),\n nptHott: yup\n .array()\n .of(\n yup.object().shape({\n Category: yup.string(),\n Hours: yup.number(),\n WorkOrderNo: yup.string(),\n OperationNo: yup.string(),\n Description: yup.string(),\n })\n )\n .test({\n name: \"allLabelHours\",\n message: \"Please complete the required fields\",\n test: (val) =>\n val.filter(\n (d) =>\n d.Hours > 0 &&\n (d.WorkOrderNo === \"\" ||\n (d.Category === \"NPT\" ? false : d.OperationNo === \"\") ||\n (d.Description.replace(/[^a-zA-Z ]/g, \"\") === \"Custom\" && d.Comment === \"\"))\n ).length === 0, //check if there is a label with hours that missing required fields\n }),\n });\n\n const defaultValues = {\n date: \"\",\n detailedReportingEnabled: false,\n foreman: \"\",\n location: \"\",\n project: \"\",\n subProject: \"\",\n activity: \"\",\n trade: \"\",\n endOfRotation: false,\n type: \"time\",\n timeRegistrations: [],\n break: \"\",\n nptHott: [],\n };\n\n const {\n control,\n formState: { errors },\n getValues,\n reset,\n setValue,\n handleSubmit,\n watch,\n } = useForm({\n defaultValues,\n resolver: yupResolver(schema),\n });\n\n const {\n dabLocations,\n dabLocationsIsFetching,\n dabTradeCodes,\n dabTradeIsFetching,\n defaultEmployeeValues,\n defaultEmployeeValuesIsFetching,\n defaultEmployeeValuesStatus,\n defaultEmployeeValuesRefetch,\n defaultProjectSubProjectAndActivityData,\n defaultProjectSubProjectAndActivityStatus,\n nptHottLabels,\n nptHottLabelsIsFetching,\n nptHottLabelsRefetch,\n nptHottLabelsStatus,\n projectData,\n projectActivityData,\n projectStatus,\n projectActivityStatus,\n subProjectData,\n subProjectStatus,\n subProjectIsFetching,\n } = useDropdownData({ ...watch(), externalId });\n\n const getProjectActivityPlaceholder = () => {\n if (projectActivityStatus === \"loading\" || projectActivityStatus === \"idle\") {\n return lang.loading;\n } else if (projectActivityData.length === 0) {\n return lang.noActivities;\n } else {\n return lang.chooseActivity;\n }\n };\n\n const getSubProjectPlaceholder = () => {\n if (subProjectStatus === \"loading\" || subProjectStatus === \"idle\") {\n return lang.loading;\n } else if (subProjectData.length === 0) {\n return \"No subprojects found\";\n } else {\n return lang.chooseASubproject;\n }\n };\n\n useEffect(() => {\n setTradeCodesList(dabTradeCodes);\n }, [dabTradeCodes.length]);\n\n useEffect(() => {\n if (!nptHottLabelsIsFetching && nptHottLabelsStatus === \"success\") {\n if (\n (!isEmpty(registration) && data.nptHott && data.nptHott.length === 0) ||\n (isEmpty(registration) && getValues(\"date\") === \"\")\n ) {\n // if viewed record is draft/ not approved OR new form, load default label values\n setValue(\"nptHott\", nptHottLabels);\n }\n }\n }, [nptHottLabelsIsFetching, watch(\"project\")]);\n\n useEffect(() => {\n // form onload edit or from local storage\n if (isEmpty(registration) && !defaultEmployeeValuesIsFetching) {\n const { employeeTrade = \"\" } = defaultEmployeeValues;\n\n // to condition when editing\n setValue(\"trade\", employeeTrade);\n }\n }, [defaultEmployeeValuesIsFetching]);\n\n useEffect(() => {\n if (\n !defaultEmployeeValuesIsFetching &&\n defaultEmployeeValues.employeeTrade &&\n getValues(\"trade\") !== defaultEmployeeValues.employeeTrade\n ) {\n const defaultEmployeeTrade = dabTradeCodes.filter((d) => d.DabTradeId === defaultEmployeeValues.employeeTrade)[0];\n notification.warning({\n description: `${lang.tradeNotDefault} (${defaultEmployeeTrade.DabTradeId} - ${defaultEmployeeTrade.DabTradeDesc}).`,\n });\n }\n }, [getValues(\"trade\")]);\n\n useEffect(() => {\n getForemen();\n\n // deletes old form layout in local storage\n let localStorageForm = localStorage.getItem(`semcotime-last-time-input-${userId}`);\n if (localStorageForm) {\n if (\n !JSON.parse(localStorageForm).hasOwnProperty(\"detailedReportingEnabled\") &&\n !JSON.parse(localStorageForm).hasOwnProperty(\"nptHott\")\n ) {\n console.log(\"-- OLD FORM DETECTED AND DELETED --\");\n localStorage.removeItem(`semcotime-last-time-input-${userId}`);\n }\n }\n }, []);\n\n useEffect(() => {\n nptHottLabelsRefetch();\n defaultEmployeeValuesRefetch();\n if (!isEmpty(registration)) {\n //if edit\n reset(registration.data);\n } else {\n // if add with last form used\n const lastForm = localStorage.getItem(`semcotime-last-time-input-${userId}`);\n if (lastForm) {\n return reset(JSON.parse(lastForm));\n } else {\n reset(defaultValues);\n }\n }\n }, [JSON.stringify(registration)]);\n\n const onSubmit = async (formData, toLocalStorage = false, action = \"draft\") => {\n setSubmittingForm(true);\n if (!formData.detailedReportingEnabled) {\n //remove label data if the selected project is detailedReportingEnabled\n await onSubmitParent({ ...{ ...formData, nptHott: [] }, action, type: \"time\" });\n } else {\n await onSubmitParent({ ...formData, action, type: \"time\" });\n }\n if (action === \"draftAndNextDay\") {\n setValue(\"date\", moment(formData.date).add(1, \"days\").format(\"YYYY-MM-DD\"));\n }\n\n setShowMobileFormAction(false);\n setSubmittingForm(false);\n };\n\n const onDelete = async () => {\n setIsDeleting(true);\n await onDeleteParent();\n setIsDeleting(false);\n };\n\n // console.log(\"FORM VAL: \", watch(\"nptHott\")[0]);\n const disabled = archived || needsProcessing;\n const renderForm = () => {\n return (\n <>\n
\n \n {/*
\n \n
*/}\n\n {registration.state === workHourState.deleted ? (\n
DELETED IN IFS
\n ) : (\n registration.state === workHourState.lockedByForeman &&\n needsProcessing === true &&
PROCESSING IN IFS
\n )}\n\n {/* DATE */}\n

{lang.date} *

\n {\n return (\n <>\n {\n onChange(date);\n }}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* LOCATION */}\n

{lang.location}

\n {\n return (\n <>\n ({ label: d.DabLocationValue, value: d.DabLocationValue })),\n \"DabLocationId\"\n )\n : []\n }\n placeholder={lang.chooseADabLocation}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* PROJECT */}\n

{lang.project}

\n {\n return (\n <>\n {\n setValue(\"subProject\", \"\");\n setValue(\"activity\", \"\");\n setValue(\n \"detailedReportingEnabled\",\n projectData.filter((d) => d.id === e.target.value)[0].detailedReportingEnabled\n ); //NPT AND HOTT ENABLED\n\n onChange(e);\n }}\n options={projectData.map((d) => ({ label: `${d.id} - ${d.name}`, value: d.id }))}\n placeholder={lang.timeRegistrationFormProjectPlaceholder}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* SUB-PROJECT */}\n {getValues(\"project\") && (\n <>\n

{lang.subproject}

\n {\n return (\n <>\n ({ label: `${d.id} - ${d.description}`, value: d.id }))}\n placeholder={getSubProjectPlaceholder()}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n \n )}\n\n {/* ACTIVITY */}\n {getValues(\"project\") && getValues(\"subProject\") && (\n <>\n

{lang.activity}

\n {\n return (\n <>\n ({ label: `${d.no} - ${d.description}`, value: d.id }))}\n placeholder={getProjectActivityPlaceholder()}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n \n )}\n\n {/* TRADE */}\n

{lang.dabTrade}

\n {\n return (\n <>\n ({\n label: `${d.DabTradeId} - ${d.DabTradeDesc}`,\n value: d.DabTradeId,\n }))\n : []\n }\n placeholder={lang.chooseADabTrade}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* {page === \"admin\" && ( */}\n <>\n {/* FOREMAN */}\n

{lang.timeRegistrationFormForeman}

\n {\n return (\n <>\n ({ disabled: d.disabled, label: d.name, value: d.id }))}\n placeholder={lang.timeRegistrationFormForemanPlaceholder}\n value={parseInt(value)}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n \n {/* )} */}\n\n \n {/* TIME REGISTRATION */}\n {\n return (\n <>\n {\n // set End Of Rotation to TRUE when selecting Heli Time Home\n // if true , no localstorage\n setValue(\n \"endOfRotation\",\n e.some((d) => d.savedByBlueCollar && d.type === 6)\n );\n\n onChange(e);\n }}\n date={watch(\"date\")}\n location={watch(\"location\")}\n locationIFSRules={dabLocations}\n locationIsLoading={dabLocationsIsFetching}\n isForeman={true}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* END OF ROTATION */}\n {\n return (\n <>\n \n {console.log(\"lang: \", lang)}\n {lang.foremanLastDayInRotation}\n \n \n );\n }}\n />\n {/* BREAK */}\n {watch(\"location\") === \"OnShore\" && (\n {\n return (\n <>\n \n Paid Break\n Unpaid Break\n \n \n );\n }}\n />\n )}\n {/* NPT and HOTT Labeling */}\n {getValues(\"detailedReportingEnabled\") && (\n <>\n {nptHottLabelsIsFetching && }\n {!nptHottLabelsIsFetching && (\n {\n return (\n \n );\n }}\n />\n )}\n \n )}\n \n {!isMobile && isFormReady && !archived && !needsProcessing && (\n
\n {/*
*/}\n onSubmit(e, false, !isEmpty(registration) ? \"update\" : \"draft\"))}\n >\n {submittingForm && (\n \n )}\n {lang.foremanRegistrationWorkTimeSave}\n \n {isEmpty(registration) && (\n \n )}\n {loggedUserAuthorizedForeman ? (\n <>\n {/* show submit buttons for authorized foremen */}\n \n {!isEmpty(registration) && (\n \n )}\n \n ) : (\n <>\n {!isEmpty(registration) && (\n <>\n onSubmit(e, false, \"updateAndMoveToNextDay\"))}\n >\n {submittingForm && (\n \n )}\n {lang.foremanRegistrationWorkTimeSaveAndGoToNextDay}\n \n \n )}\n \n )}\n\n {!isEmpty(registration) && (\n \n \n \n )}\n
\n )}\n \n \n );\n };\n\n const isMobile = useMediaQuery({ maxWidth: \"800px\" });\n\n const close = () => {\n dispatch(toggleWorkHourModal(false));\n };\n\n const mobileFormActions = () => {\n return (\n
\n
\n onSubmit(e, false, !isEmpty(registration) ? \"update\" : \"draft\"))}\n >\n {lang.foremanRegistrationWorkTimeSave}\n \n
\n {loggedUserAuthorizedForeman ? (\n <>\n
\n \n
\n {!isEmpty(registration) && (\n \n )}\n \n ) : (\n <>\n {!isEmpty(registration) && (\n
\n \n
\n )}\n \n )}\n
\n );\n };\n\n return (\n <>\n {!isMobile && renderForm()}\n\n {isMobile && (\n \n Pick an action:}\n onVisibleChange={() => setShowMobileFormAction(!showMobileFormAction)}\n trigger=\"click\"\n >\n setShowMobileFormAction(!showMobileFormAction)}\n >\n \n \n \n {!isEmpty(registration) && (\n \n \n \n )}\n \n )\n }\n onCancel={close}\n visible={modal}\n >\n {renderForm()}\n \n )}\n \n );\n};\n\nconst scrollViewStyles = ({ bottomPanelHeight, topBarHeight }) => css`\n height: calc(96vh - ${topBarHeight}px - ${bottomPanelHeight}px);\n padding: 1rem;\n\n @media (max-width: 414px) {\n padding: unset;\n }\n`;\n\nconst componentStyles = (primaryColor) => css`\n background-color: ${colors.white};\n border-radius: 3px;\n border: 1px ${colors.midGrey} solid;\n border-left: 3px ${primaryColor} solid;\n padding: 0.65rem;\n margin-bottom: 10px;\n\n p {\n margin-bottom: 0px;\n }\n\n .fieldError {\n color: red;\n }\n\n .deleted {\n width: 100%;\n text-align: center;\n background-color: red;\n color: #fff;\n padding: 10px;\n margin-bottom: 15px;\n }\n\n .processing {\n width: 100%;\n text-align: center;\n background-color: blue;\n color: #fff;\n padding: 10px;\n margin-bottom: 15px;\n }\n\n .input-wrapper {\n display: flex;\n align-items: center;\n margin-bottom: 0.5rem;\n\n &:last-of-type  {\n margin-bottom: 0;\n }\n\n & > label {\n width: 30%;\n text-align: right;\n padding-right: 0.65rem;\n font-size: 0.9rem;\n color: ${colors.darkGrey};\n }\n\n .input {\n width: 100%;\n }\n\n .time-input {\n display: flex;\n align-items: center;\n width: 100%;\n }\n\n .flex {\n width: 100%;\n display: flex;\n justify-content: space-between;\n }\n\n .extras {\n width: 100%;\n display: flex;\n align-items: center;\n border-top: 1px solid ${colors.lightGrey};\n padding: 0.75rem 0.75rem 0.75rem 0;\n margin: 0 -0.75rem 0 0rem;\n\n &:last-of-type {\n border-bottom: 1px solid ${colors.lightGrey};\n }\n\n .name {\n flex: 1 1 70%;\n padding: 0;\n }\n\n svg {\n height: 40px; /* WARNING: Magic number */\n }\n\n input {\n flex: 1 1 2rem;\n margin: 0 0.5rem 0 0.5rem;\n }\n }\n }\n\n @media (max-width: 768px) {\n border-left: 1px ${colors.midGrey} solid;\n }\n\n @media (max-width: 414px) {\n border: none;\n padding: unset;\n margin-bottom: unset;\n\n .input-wrapper {\n align-items: flex-start;\n flex-direction: column;\n\n & > label {\n display: block;\n width: unset;\n }\n }\n }\n`;\n\nconst footerButtonStyles = () => css`\n position: absolute;\n left: 0px;\n bottom: 0px;\n width: calc(100%);\n background-color: #f8f8f8;\n padding: 10px 10px 10px 0px;\n display: flex;\n justify-content: flex-end;\n max-width: 1200px;\n display: flex;\n border-top: 1px #103447 solid;\n\n button {\n margin-left: 5px;\n font-size: 12px;\n width: 10vw;\n height: 8vh;\n }\n\n .error {\n width: 5vw;\n height: 8vh;\n }\n\n .checkboxContainer {\n div {\n border: none;\n\n .checkbox {\n white-space: nowrap;\n }\n }\n }\n\n @media screen and (max-width: 650px) {\n flex-wrap: wrap;\n\n .col-25,\n .col-75 {\n flex-basis: 100%;\n\n &:nth-child(odd) {\n margin-bottom: 1.25rem;\n }\n }\n }\n\n @media (max-width: 768px) {\n position: unset;\n }\n @media (max-width: 414px) {\n position: unset;\n padding: unset;\n background-color: unset;\n border: unset;\n }\n`;\n\nconst footerButtonStylesMobile = () => css`\n display: flex;\n flex-direction: column;\n\n .mobile-buttons {\n padding: 3px;\n }\n`;\n\nexport default forwardRef(ForemanWorkHourForm);\n","import { addDays, format, parse } from \"date-fns\";\nimport { intervalToDuration } from \"date-fns/esm\";\n\nimport zeroPad from \"./zero-pad\";\n\nexport default ({ date, startTimeHours, startTimeMinutes, endTimeHours, endTimeMinutes }) => {\n if (date && startTimeHours && startTimeMinutes && endTimeHours && endTimeMinutes) {\n const endDate =\n Number(`${startTimeHours}${startTimeMinutes}`) > Number(`${endTimeHours}${endTimeMinutes}`)\n ? format(addDays(parse(date, \"yyyy-MM-dd\", 0), 1), \"yyyy-MM-dd\")\n : date;\n\n const z = zeroPad;\n\n const parsedStartDate = parse(`${date}${z(startTimeHours)}${z(startTimeMinutes)}`, \"yyyy-MM-ddHHmm\", 0);\n const parsedEndDate = parse(`${endDate}${z(endTimeHours)}${z(endTimeMinutes)}`, \"yyyy-MM-ddHHmm\", 0);\n\n const interval = intervalToDuration({ start: parsedStartDate, end: parsedEndDate });\n\n return interval.hours + interval.minutes / 60;\n }\n\n return null;\n};\n","/* Ok i couldn't figure out a super smart way to do this \nand since it will never be relevant for more than 24 hours \ni settled for this rather stupid solution */\n\n/**\n * @param {Number} hourValue - A number representing an amount of hours. 0.5 would equal 0:30 or 2 would equal 2:00. 0.25 wo\n * @returns {String} a title describing the hour value\n *\n *\n * @example\n *\n * ```js\n * getQuarterTitleFromHourValue(0.25) -> \"0:15\"\n * getQuarterTitleFromHourValue(0.50) -> \"0:30\"\n * getQuarterTitleFromHourValue(0.75) -> \"0:45\"\n * getQuarterTitleFromHourValue(1.00) -> \"1:00\"\n * ```\n *\n *\n */\nexport default function (hourValue) {\n let hour = String(hourValue).split(\".\")[0];\n\n let minutes = String(hourValue).split(\".\")[1];\n\n if (!minutes) {\n minutes = \"00\";\n return `${hour}:${minutes}`;\n } else {\n minutes = Math.round(minutes * 0.6);\n minutes = String(minutes).length === 1 ? `${minutes}0` : minutes;\n return `${hour}:${minutes}`;\n }\n}\n","import { addDays, format, parse } from \"date-fns\";\nimport { intervalToDuration } from \"date-fns/esm\";\n\nimport zeroPad from \"./zero-pad\";\nimport getQuarterTitleFromHourValue from \"./get-quarter-title-from-hour-value\";\n\nexport default ({ startTimeHours, startTimeMinutes, endTimeHours, endTimeMinutes, date }) => {\n const z = zeroPad;\n let endDate;\n\n // Adds a day to endDate if registration spans midnight\n if (parseFloat(`${startTimeHours}${startTimeMinutes}`) > parseFloat(`${endTimeHours}${endTimeMinutes}`)) {\n endDate = format(addDays(parse(date, \"yyyy-MM-dd\", 0), 1), \"yyyy-MM-dd\");\n } else {\n endDate = date;\n }\n\n // Get starttime\n const parsedStartDate = parse(`${date}${z(startTimeHours)}${z(startTimeMinutes)}`, \"yyyy-MM-ddHHmm\", 0);\n const parsedEndDate = parse(`${endDate}${z(endTimeHours)}${z(endTimeMinutes)}`, \"yyyy-MM-ddHHmm\", 0);\n\n // Get interval\n const interval = intervalToDuration({ start: parsedStartDate, end: parsedEndDate });\n const dropDownOptions = [];\n\n let totalValue;\n\n totalValue = interval.hours * 60 + interval.minutes;\n\n for (let i = 1; i <= totalValue / 15; i++) {\n let value = i * 0.25;\n dropDownOptions.push({\n value,\n name: getQuarterTitleFromHourValue(value),\n });\n }\n\n return dropDownOptions;\n};\n","import React, { memo, useCallback } from \"react\";\nimport { css } from \"emotion\";\nimport { ContentCopyIcon, DeleteIcon } from \"mdi-react\";\n\nimport colors from \"../../../style/colors\";\nimport getTimerOptions from \"../../../utilities/get-timer-options\";\n\nimport DropDown from \"../../ui/DropDown\";\nimport TextInput from \"../../ui/TextInput\";\n\nconst ForemanSubRecordForm = ({ deleteSubRecord, duplicateRecord, enabled, form, handleChange, subRecords, lang }) => {\n const renderSubRecords = useCallback(() => {\n if (subRecords.length === 0) return null;\n\n const { date, endTimeHours, endTimeMinutes, hours, startTimeHours, startTimeMinutes } = form;\n\n let totalRemainingHours = parseFloat(hours);\n\n const timerOptions = getTimerOptions({\n startTimeHours,\n startTimeMinutes,\n endTimeHours,\n endTimeMinutes,\n date,\n });\n\n return subRecords.map((d) => {\n const options = timerOptions.filter((d) => d.value <= totalRemainingHours);\n\n totalRemainingHours -= parseFloat(d.hours);\n\n return (\n
\n
\n {/* Customer details */}\n
\n \n handleChange(e, d.id)}\n className=\"input\"\n value={d[`customerDetail`]}\n name={`subRecords.customerDetail`}\n />\n
\n {/* Customer note */}\n
\n \n handleChange(e, d.id)}\n className=\"input\"\n value={d[`customerNote`]}\n name={`subRecords.customerNote`}\n />\n
\n {/* Note */}\n
\n \n handleChange(e, d.id)}\n className=\"input\"\n value={d[`note`]}\n name={`subRecords.note`}\n />\n
\n {/* Hours */}\n
\n \n handleChange(e, d.id)}\n options={options.map((d) => ({\n label: d.name,\n value: d.value,\n }))}\n value={d[`hours`]}\n />\n
\n
\n {enabled && (\n
\n {d.hours !== \"\" && (\n \n )}\n \n
\n )}\n
\n );\n });\n\n // eslint-disable-next-line\n }, [subRecords]);\n\n return renderSubRecords();\n};\n\nconst componentStyles = () => css`\n background-color: ${colors.white};\n border-radius: 3px;\n border: 1px ${colors.midGrey} solid;\n margin-top: 0.65rem;\n\n .wrapper {\n padding: 0.65rem;\n }\n\n .input-wrapper {\n display: flex;\n align-items: center;\n margin-bottom: 0.5rem;\n\n &:last-of-type  {\n margin-bottom: 0;\n }\n\n & > label {\n width: 30%;\n text-align: right;\n padding-right: 0.65rem;\n font-size: 0.9rem;\n color: ${colors.darkGrey};\n }\n\n .input {\n width: 100%;\n }\n\n .time-input {\n display: flex;\n align-items: center;\n width: 100%;\n }\n }\n\n .duplicate {\n align-items: center;\n background-color: transparent;\n border: none;\n color: #103447;\n display: flex;\n font-size: 1rem;\n justify-content: space-between;\n padding: 0.3rem;\n width: 5.5rem;\n }\n\n .delete {\n align-items: center;\n background-color: transparent;\n border: none;\n color: ${colors.red};\n display: flex;\n font-size: 1rem;\n justify-content: space-between;\n padding: 0.3rem;\n width: 4.2rem;\n }\n\n .footer {\n background-color: colors.ultraLightGrey;\n border-top: 1px ${colors.midGrey} solid;\n display: flex;\n justify-content: flex-end;\n padding: 0.5rem;\n }\n`;\n\nexport default memo(ForemanSubRecordForm);\n","import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useState } from \"react\";\nimport { CloseIcon, DeleteIcon, PlusIcon } from \"mdi-react\";\nimport { isEqual, keyBy, omit, values, isEmpty } from \"lodash\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { Checkbox, Modal, notification, Popconfirm, Radio } from \"antd\";\nimport param from \"jquery-param\";\nimport { useMediaQuery } from \"react-responsive\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport moment from \"moment\";\n\nimport workHourState from \"../../../config/semcotimedk-workhour-states\";\n\n// css\nimport { css } from \"emotion\";\nimport common from \"../../../style/common\";\nimport colors from \"../../../style/colors\";\nimport TextInput from \"../../ui/TextInput\";\nimport DatePicker from \"../../ui/DatePicker\";\nimport InlineSpinner from \"../../ui/InlineSpinner\";\nimport ScrollView from \"../../ui/ScrollView\";\nimport getTotalHours from \"../../../utilities/get-total-hours\";\nimport req from \"../../../utilities/request-utility\";\nimport getTimerOptions from \"../../../utilities/get-timer-options\";\n\n//ui\nimport Button from \"../../ui/Button\";\nimport CheckboxGroup from \"../../ui/CheckboxGroup\";\nimport DropDown from \"../../ui/DropDown\";\nimport ForemanSubRecordForm from \"./ForemanSubRecordForm\";\nimport { toggleWorkHourModal } from \"../../../actions/uiActions\";\n\nfunction ForemanWorkHourForm(props, ref) {\n const dispatch = useDispatch();\n const {\n data: registration = {},\n externalId = null,\n onDelete: onDeleteParent,\n onSubmit: onSubmitParent,\n sentToIFSAt,\n lang,\n page = \"foreman\",\n userId = null,\n } = props;\n const { data = {}, ifsData = null } = registration;\n\n const primaryColor = useSelector((s) => s.appConfig.primaryColor);\n const modal = useSelector(({ ui }) => ui.workHourModal);\n\n const getLastUsedFormValues = () => {\n let lastUsedTime = localStorage.getItem(`semcotime-last-time-input-${userId}`);\n lastUsedTime = lastUsedTime ? JSON.parse(lastUsedTime) : null;\n let formDataInitialNewValues = { ...formDataInitialValues };\n if (lastUsedTime) {\n formDataInitialNewValues = {\n ...formDataInitialNewValues,\n project: lastUsedTime.project,\n subProject: lastUsedTime.subProject,\n projectActivity: lastUsedTime.activity,\n startTimeHours: lastUsedTime.startTimeHours,\n startTimeMinutes: lastUsedTime.startTimeMinutes,\n endTimeHours: lastUsedTime.endTimeHours,\n endTimeMinutes: lastUsedTime.endTimeMinutes,\n dabLocation: lastUsedTime.dabLocation,\n // dabTrade: lastUsedTime.dabTrade,\n };\n }\n\n return formDataInitialNewValues;\n };\n\n const formDataInitialValues = {\n project: undefined,\n subProject: undefined,\n projectActivity: undefined,\n subRecords: {},\n activities: [],\n customerDetail: \"\",\n customerNote: \"\",\n foreman: undefined,\n date: undefined,\n startTimeHours: \"00\",\n startTimeMinutes: \"00\",\n endTimeHours: \"00\",\n endTimeMinutes: \"00\",\n note: \"\",\n hours: \"\",\n shift: \"Day\",\n type: \"time\",\n totalHours: 0,\n unpaidBreak: false,\n paidBreak: false,\n transport: false,\n endOfRotation: false,\n changeShift: false,\n heliTime: false,\n standby: false,\n dabLocation: \"\",\n dabTrade: \"\",\n\n ...(!isEmpty(data) ? data : getLastUsedFormValues()),\n };\n\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [formData, setFormData] = useState(formDataInitialValues);\n const [formDataOrig, setFormDataOrig] = useState(formDataInitialValues);\n const [selectedActivity, setSelectedActivity] = useState(null);\n\n const [additionalData, setAdditionalData] = useState({\n projects: [],\n subProjects: [],\n projectActivities: [],\n wageCodes: [],\n foremen: [],\n dabTradeCodes: [],\n dabLocations: [],\n });\n\n const [isFormReady, setIsFormReady] = useState(false);\n const [hoursOptions, setHoursOptions] = useState([]);\n const [foremen, setForemen] = useState([]);\n\n const [fetchingProjects, setFetchingProjects] = useState(false);\n const [fetchingSubprojects, setFetchingSubprojects] = useState(false);\n const [fetchingActivities, setFetchingActivities] = useState(false);\n const [fetchingWageCodes, setFetchingWageCodes] = useState(false);\n const [fetchingDabTrade, setFetchingDabTrade] = useState(false);\n const [fetchingDabLocations, setFetchingDabLocations] = useState(false);\n const [tradeCodesList, setTradeCodesList] = useState([]);\n\n const archived = useMemo(() => (registration.lockedByIFS ? true : false), [registration.lockedByIFS]);\n const needsProcessing = useMemo(() => (registration.sentToIFSAt ? true : false), [registration.sentToIFSAt]);\n\n const { date, startTimeHours, startTimeMinutes, endTimeHours, endTimeMinutes } = formData;\n useEffect(() => {\n // If data isn't complete\n if (!date || !startTimeHours || !startTimeMinutes || !endTimeHours || !endTimeMinutes) {\n setHoursOptions([]);\n return;\n }\n\n setHoursOptions(getTimerOptions({ startTimeHours, startTimeMinutes, endTimeHours, endTimeMinutes, date }));\n\n // Break it up into array of 15-minuts\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [date, startTimeHours, startTimeMinutes, endTimeHours, endTimeMinutes]);\n\n const onSubmit = async (form) => {\n setIsSubmitting(true);\n await onSubmitParent(form);\n setIsSubmitting(false);\n };\n\n const onDelete = async () => {\n setIsDeleting(true);\n await onDeleteParent();\n setIsDeleting(false);\n };\n\n // Fetches all the addtional data needed (projects, subprojects etc.)\n const getProjects = async () => {\n setFetchingProjects(true);\n const { data: projects } = await req()(`semcotime/projects`);\n setFetchingProjects(false);\n return setAdditionalData((additionalData) => ({ ...additionalData, projects }));\n };\n\n const getSubProjects = async (project) => {\n setFetchingSubprojects(true);\n const { data: subProjects } = await req()(`semcotime/projects/${project}/sub-projects`);\n setFetchingSubprojects(false);\n return setAdditionalData((additionalData) => ({ ...additionalData, subProjects }));\n };\n\n const getProjectActivities = async ({ project, subProject }) => {\n setFetchingActivities(true);\n const { data: projectActivities } = await req()(`semcotime/projects/${project}/sub-projects/${subProject}/activities`);\n setFetchingActivities(false);\n return setAdditionalData((additionalData) => ({ ...additionalData, projectActivities }));\n };\n\n const getWageCodes = async () => {\n setFetchingWageCodes(true);\n const { data: wageCodes } = await req()(`semcotime/wage-codes?wageType=increment`);\n setFetchingWageCodes(false);\n return setAdditionalData((additionalData) => ({ ...additionalData, wageCodes }));\n };\n\n const getDABTradeCodes = async () => {\n setFetchingDabTrade(true);\n const { data: dabTradeCodes } = await req()(`semcotime/dab-trade-codes`);\n setFetchingDabTrade(false);\n return setAdditionalData((additionalData) => ({ ...additionalData, dabTradeCodes }));\n };\n\n const getDABLocations = async () => {\n setFetchingDabLocations(true);\n const { data: dabLocations } = await req()(`semcotime/dab-locations`);\n setFetchingDabLocations(false);\n return setAdditionalData((additionalData) => ({ ...additionalData, dabLocations }));\n };\n\n const getDefaultEmployeeTradeRequest = async () => {\n const { data: defaultEmployeeValues } = await req()(`semcotime/projects/default-employee-values/${externalId}`);\n return setAdditionalData((additionalData) => ({ ...additionalData, defaultEmployeeValues }));\n };\n const getAdditionalData = async (formData = {}) => {\n const { project = null, subProject = null } = formData;\n\n try {\n const requests = [\n getProjects(),\n getWageCodes(),\n getDABTradeCodes(),\n getDABLocations(),\n getDefaultEmployeeTradeRequest(),\n ];\n if (project) requests.push(getSubProjects(project));\n if (project && subProject) requests.push(getProjectActivities({ project, subProject }));\n await Promise.all(requests);\n setIsFormReady(true);\n } catch (err) {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `${lang.dkDropdownsFail}`,\n });\n }\n };\n\n const setDefaultEmployeeTrade = async () => {\n const { data: defaultEmployeeValues } = await req()(`semcotime/projects/default-employee-values/${externalId}`);\n setFormData((formData) => ({ ...formData, dabTrade: defaultEmployeeValues.employeeTrade }));\n };\n\n const getForemen = () => {\n try {\n setIsFormReady(false);\n\n req()(`semcotime/foremen?${param({ foremanGroupIdentifier: page === \"admin\" ? \"ADMIN\" : \"FOREMEN\" })}`).then(\n ({ data }) => {\n const assignedIds = data.assigned.map((d) => d.id);\n\n setForemen([\n ...data.assigned,\n { disabled: true, id: \"\", name: \"------------------\" },\n ...data.all.filter((d) => !assignedIds.includes(d.id)),\n ]);\n }\n );\n\n setIsFormReady(true);\n } catch (err) {\n // setErrorLoadingFormData(true);\n }\n };\n\n // as the second argument\n useImperativeHandle(ref, () => ({\n isFormDataChanged: () => (!isEqual(formDataOrig, formData) ? true : false),\n }));\n\n // Sets the formData\n useEffect(() => {\n getForemen();\n\n if (Object.keys(registration).length !== 0) {\n const totalHours = getTotalHours(data);\n let otherValuesChange = {};\n if (totalHours) {\n otherValuesChange = { ...otherValuesChange, totalHours };\n if (totalHours < 5) otherValuesChange = { ...otherValuesChange, paidBreak: false, unpaidBreak: false };\n if (totalHours >= 5 && totalHours <= 12) otherValuesChange = { ...otherValuesChange, paidBreak: false };\n if (totalHours > 12) otherValuesChange = { ...otherValuesChange, paidBreak: true, unpaidBreak: false };\n }\n\n setFormData({ subRecords: [], hours: \"\", ...data, ...otherValuesChange });\n setFormDataOrig({ subRecords: [], hours: \"\", ...data, ...otherValuesChange });\n getAdditionalData(data);\n } else {\n // Gets last used time-item in local storage (uses whatever the user entered last)\n let lastUsedTime = localStorage.getItem(`semcotime-last-time-input-${userId}`);\n lastUsedTime = lastUsedTime ? JSON.parse(lastUsedTime) : null;\n if (lastUsedTime) {\n setFormData(getLastUsedFormValues());\n setFormDataOrig(getLastUsedFormValues());\n getAdditionalData(lastUsedTime);\n } else {\n getAdditionalData();\n setDefaultEmployeeTrade();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(registration)]);\n\n useEffect(() => {\n if (totalHours !== formData.hours && formData.hours === \"\") {\n setFormData((formData) => ({ ...formData, hours: totalHours }));\n } // eslint-disable-next-line\n }, [formData.hours, totalHours]);\n\n useEffect(() => {\n setTradeCodesList(additionalData.dabTradeCodes);\n }, [additionalData.dabTradeCodes.length]);\n\n useEffect(() => {\n if (formData.dabLocation === \"Abroad - Onshore\" || formData.dabLocation === \"Abroad - Offshore\") {\n setTradeCodesList(additionalData.dabTradeCodes.filter((d) => [\"022\", \"070\", \"120\", \"125\"].includes(d.DabTradeId)));\n return setFormData((formData) => ({ ...formData }));\n } else {\n setTradeCodesList(additionalData.dabTradeCodes);\n setFormData((formData) => ({\n ...formData,\n ...(isEmpty(registration) && {\n dabTrade: additionalData.defaultEmployeeValues\n ? additionalData.defaultEmployeeValues.employeeTrade\n : formData.dabTrade,\n }),\n transport: formData.dabLocation === \"OffShore\" ? false : formData.transport,\n heliTime: formData.dabLocation === \"OnShore\" ? false : formData.heliTime,\n }));\n }\n }, [formData.dabLocation, additionalData.dabTradeCodes.length]);\n\n useEffect(() => {\n const { startTimeHours = \"\", endTimeHours = \"\", startTimeMinutes = \"\", endTimeMinutes = \"\" } = formData;\n\n setFormData({\n ...formData,\n shift: moment(`${endTimeHours}:${endTimeMinutes}`, \"hh:mm\").isBefore(\n moment(`${startTimeHours}:${startTimeMinutes}`, \"hh:mm\")\n )\n ? \"Night\"\n : \"Day\",\n });\n }, [formData.startTimeHours, formData.endTimeHours, formData.startTimeMinutes, formData.endTimeMinutes]);\n\n const onChange = (e, subRecordId = null) => {\n if (e.persist) e.persist();\n\n // Handling of rest\n if (e.target) {\n if (subRecordId) {\n const field = e.target.name.split(\".\")[1];\n const subRecordData = formData.subRecords[subRecordId];\n\n setFormData({\n ...formData,\n subRecords: {\n ...formData.subRecords,\n [subRecordId]: {\n ...subRecordData,\n [field]: e.target.value,\n },\n },\n });\n } else {\n let { checked, name, value } = e.target;\n\n let otherValuesChange = {};\n if (name === \"project\") {\n getSubProjects(value);\n otherValuesChange = { ...otherValuesChange, subProject: \"\", projectActivity: \"\" };\n }\n if (name === \"subProject\") {\n getProjectActivities({ project: formData.project, subProject: value });\n otherValuesChange = { ...otherValuesChange, projectActivity: \"\" };\n }\n if (name === \"break\") {\n if (value === \"paid\") otherValuesChange = { ...otherValuesChange, paidBreak: true, unpaidBreak: false };\n else otherValuesChange = { ...otherValuesChange, paidBreak: false, unpaidBreak: true };\n }\n if (name === \"manualApproval\") {\n value = value.includes(\"manualApproval\") ? true : false;\n }\n\n setFormData((formData) => {\n if (name === \"date\") {\n const totalHours = getTotalHours({ ...formData, [name]: value });\n if (totalHours) {\n otherValuesChange = { ...otherValuesChange, totalHours };\n if (totalHours < 5) otherValuesChange = { ...otherValuesChange, paidBreak: false, unpaidBreak: false };\n if (totalHours >= 5 && totalHours <= 12) otherValuesChange = { ...otherValuesChange, paidBreak: false };\n if (totalHours > 12) otherValuesChange = { ...otherValuesChange, paidBreak: true, unpaidBreak: false };\n }\n }\n if (name === \"transport\" || name === \"heliTime\") {\n return {\n ...formData,\n ...otherValuesChange,\n [name]: checked,\n [name === \"transport\" ? \"heliTime\" : \"transport\"]: false,\n standby: false,\n };\n } else if (name === \"endOfRotation\" || name === \"changeShift\" || name === \"standby\") {\n return { ...formData, ...otherValuesChange, [name]: checked };\n } else {\n return { ...formData, ...otherValuesChange, [name]: value };\n }\n });\n }\n }\n };\n\n const addSubRecord = useCallback(() => {\n const id = uuidv4();\n\n setFormData({\n ...formData,\n subRecords: {\n ...formData.subRecords,\n [id]: {\n id,\n customerDetail: \"\",\n customerNote: \"\",\n note: \"\",\n hours: \"\",\n },\n },\n });\n }, [formData]);\n\n const duplicateRecord = useCallback(\n (duplicateData) => {\n const id = uuidv4();\n\n let subRecords = values(formData.subRecords);\n const prevRecordIndex = subRecords.indexOf(duplicateData);\n\n const totalHours = parseFloat(formData.hours),\n newHour = parseFloat(duplicateData.hours);\n let totalSubRecordsHours = 0;\n subRecords.map((d) => (totalSubRecordsHours += parseFloat(d.hours)));\n\n subRecords.splice(prevRecordIndex + 1, 0, {\n ...duplicateData,\n hours: totalSubRecordsHours + newHour <= totalHours ? newHour : totalHours - totalSubRecordsHours,\n id,\n });\n\n setFormData({\n ...formData,\n subRecords: keyBy(subRecords, \"id\"),\n });\n },\n [formData]\n );\n\n const deleteSubRecord = useCallback(\n (id) => {\n setFormData({ ...formData, subRecords: { ...omit(formData.subRecords, id) } });\n },\n [formData]\n );\n\n const onChangeTimeInputs = (e, type, formData) => {\n e.persist();\n\n // Exception for deleing\n if (e.target.value === \"\") {\n setFormData({ ...formData, [e.target.name]: e.target.value });\n }\n\n let num = parseInt(e.target.value);\n\n if (\n // If not a number\n isNaN(num) ||\n // If length is more than two digits\n e.target.value.length > 2 ||\n // type is hours and value is not between 0-23\n (type === \"hours\" && (num < 0 || num > 23)) ||\n // type is minutes and value is not between 0-59\n (type === \"minutes\" && (num < 0 || num > 59))\n ) {\n return;\n }\n\n let otherValuesChange = {};\n const { name, value } = e.target;\n setFormData((formData) => {\n const totalHours = getTotalHours({ ...formData, [name]: value });\n if (totalHours) {\n otherValuesChange = { ...otherValuesChange, hours: totalHours, totalHours };\n if (totalHours < 5) otherValuesChange = { ...otherValuesChange, paidBreak: false, unpaidBreak: false };\n if (totalHours >= 5 && totalHours <= 12) otherValuesChange = { ...otherValuesChange, paidBreak: false };\n if (totalHours > 12) otherValuesChange = { ...otherValuesChange, paidBreak: true, unpaidBreak: false };\n }\n return { ...formData, ...otherValuesChange, [name]: value };\n });\n };\n\n const { changeShift = false, paidBreak = false, shift = \"Day\", totalHours = 0, unpaidBreak = false } = formData;\n\n const disabled = archived || needsProcessing === true;\n\n const renderForm = () => {\n return (\n <>\n \n
\n {!isFormReady && (\n
\n \n
\n )}\n\n {isFormReady && registration.state === workHourState.deleted &&
DELETED IN IFS
}\n\n {isFormReady && registration.state === workHourState.lockedByForeman && needsProcessing === true && (\n
PROCESSING IN IFS
\n )}\n\n {isFormReady && (\n <>\n {/* Projects */}\n
\n \n ({ label: `${d.id} - ${d.name}`, value: d.id }))}\n placeholder={lang.chooseAProject}\n value={formData.project}\n />\n
\n\n {/* Sub projects */}\n
\n \n ({ label: `${d.id} - ${d.description}`, value: d.id }))}\n placeholder={lang.chooseASubProject}\n value={formData.subProject}\n />\n
\n\n {/* Activites */}\n
\n \n ({\n label: `${d.no} - ${d.description}`,\n value: d.id,\n }))}\n placeholder={lang.chooseActivity}\n value={formData.projectActivity}\n />\n
\n\n {/* Locations */}\n
\n \n ({\n label: d.DabLocationValue,\n value: d.DabLocationValue,\n }))}\n placeholder={lang.chooseADabLocations}\n value={formData.dabLocation}\n />\n
\n\n {/* Trade */}\n
\n \n ({\n label: `${d.DabTradeId} - ${d.DabTradeDesc}`,\n value: d.DabTradeId,\n }))}\n placeholder={lang.chooseADabTrade}\n value={formData.dabTrade}\n />\n
\n {/* Customer details */}\n
\n \n \n
\n\n {/* Customer note */}\n
\n \n \n
\n\n {/* Note */}\n
\n \n \n
\n\n
\n \n
\n \n
\n
\n\n
\n \n
\n \n
\n
\n\n
\n \n
\n \n
\n
\n\n
\n {\" \"}\n
\n \n
\n
\n\n {/* Date */}\n
\n \n \n
\n\n {/* Foreman */}\n {page === \"admin\" && (\n
\n \n ({ disabled: d.disabled, label: d.name, value: d.id }))}\n placeholder=\"Choose a foreman\"\n value={formData.foreman}\n />\n
\n )}\n\n {/* Start time, */}\n
\n \n
\n onChangeTimeInputs(e, \"hours\", formData)}\n name=\"startTimeHours\"\n type=\"number\"\n value={formData.startTimeHours ? formData.startTimeHours : \"\"}\n />\n

{` : `}

\n onChangeTimeInputs(e, \"minutes\", formData)}\n name=\"startTimeMinutes\"\n type=\"number\"\n value={formData.startTimeMinutes ? formData.startTimeMinutes : \"\"}\n />\n
\n
\n\n {/* End time */}\n
\n \n
\n onChangeTimeInputs(e, \"hours\", formData)}\n name=\"endTimeHours\"\n type=\"number\"\n value={formData.endTimeHours ? formData.endTimeHours : \"\"}\n />\n

{` : `}

\n onChangeTimeInputs(e, \"minutes\", formData)}\n name=\"endTimeMinutes\"\n type=\"number\"\n value={formData.endTimeMinutes ? formData.endTimeMinutes : \"\"}\n />\n
\n
\n\n {/* Hours */}\n\n
\n \n ({\n label: d.name,\n value: d.value,\n }))}\n value={formData.hours}\n />\n
\n\n
\n \n \n Paid Break\n Un Paid Break\n \n
\n
\n \n \n Day\n Night\n \n
\n
\n {\" \"}\n
\n \n
\n
\n
\n \n
\n setSelectedActivity(e.target.value)}\n options={additionalData.wageCodes\n .filter((code) => formData.activities.findIndex((el) => el.id === code.id) === -1)\n .map((d) => ({ label: `${d.name} - ${d.id}`, value: d.id }))}\n placeholder={lang.chooseExtras}\n value={selectedActivity}\n />\n\n {\n if (selectedActivity) {\n let activity = additionalData.wageCodes.filter((x) => x.id === selectedActivity)[0];\n activity.hours = \"\";\n setFormData({ ...formData, activities: [activity, ...formData.activities] });\n }\n }}\n >\n {lang.add}\n \n
\n
\n \n )}\n
\n\n {isFormReady && formData.activities && formData.activities.length !== 0 && (\n
\n {formData.activities.map((d, i) => (\n
\n \n
\n

\n {d.id} - {d.name}\n

\n {\n d.hours = e.target.value; // Temporay mutation of map-element (is canceled on next render where change is committed)\n setFormData({\n ...formData,\n activities: [...formData.activities.slice(0, i), d, ...formData.activities.slice(i + 1)],\n });\n }}\n />\n {\n setFormData({ ...formData, activities: formData.activities.filter((x) => d.id !== x.id) });\n }}\n >\n \n
\n
\n
\n ))}\n
\n )}\n\n {isFormReady && ifsData && (\n
\n {ifsData.map((d, i) => (\n
\n \n
\n

\n {d.WageCode} - {d.WageCodeDesc}\n

\n

{` - `}

\n {`${d.WageHours} ${parseFloat(d.WageHours) === 1 ? \"hour\" : \"hours\"}`}\n
\n
\n ))}\n
\n )}\n\n {isFormReady && !!formData.hours && (\n \n )}\n\n {isFormReady && !archived && !!formData.hours && !needsProcessing && (\n \n )}\n \n {!isMobile && isFormReady && !archived && !needsProcessing && (\n
\n
\n {!!data.id && (\n onChange({ target: { name: \"manualApproval\", value: e } })}\n />\n )}\n
\n
\n \n {!needsProcessing && (\n \n \n \n )}\n
\n
\n )}\n \n );\n };\n\n const isMobile = useMediaQuery({ maxWidth: \"414px\" });\n\n const close = () => {\n dispatch(toggleWorkHourModal(false));\n };\n\n return (\n <>\n {!isMobile && renderForm()}\n\n {isMobile && (\n \n
\n {!!data.id && (\n onChange({ target: { name: \"manualApproval\", value: e } })}\n />\n )}\n
\n
\n \n {!needsProcessing && (\n \n \n \n )}\n
\n
\n }\n onCancel={close}\n visible={modal}\n >\n {renderForm()}\n \n )}\n \n );\n}\n\nconst scrollViewStyles = ({ bottomPanelHeight, topBarHeight }) => css`\n height: calc(100vh - ${topBarHeight}px - ${bottomPanelHeight}px);\n padding: 1rem;\n\n @media (max-width: 414px) {\n padding: unset;\n }\n`;\n\nconst subRecordBtnStyles = () => css`\n align-items: center;\n background-color: transparent;\n border: none;\n color: #103447;\n cursor: pointer;\n display: flex;\n font-size: 1rem;\n justify-content: center;\n margin-top: 1rem;\n margin-botom: 1rem;\n padding: 0.3rem;\n width: 100%;\n`;\n\nconst componentStyles = (primaryColor) => css`\n background-color: ${colors.white};\n border-radius: 3px;\n border: 1px ${colors.midGrey} solid;\n border-left: 3px ${primaryColor} solid;\n padding: 0.65rem;\n margin-bottom: 10px;\n\n p {\n margin-bottom: 0px;\n }\n\n .deleted {\n width: 100%;\n text-align: center;\n background-color: red;\n color: #fff;\n padding: 10px;\n margin-bottom: 15px;\n }\n\n .processing {\n width: 100%;\n text-align: center;\n background-color: blue;\n color: #fff;\n padding: 10px;\n margin-bottom: 15px;\n }\n\n .input-wrapper {\n display: flex;\n align-items: center;\n margin-bottom: 0.5rem;\n\n &:last-of-type  {\n margin-bottom: 0;\n }\n\n & > label {\n width: 30%;\n text-align: right;\n padding-right: 0.65rem;\n font-size: 0.9rem;\n color: ${colors.darkGrey};\n }\n\n .input {\n width: 100%;\n }\n\n .time-input {\n display: flex;\n align-items: center;\n width: 100%;\n }\n\n .flex {\n width: 100%;\n display: flex;\n justify-content: space-between;\n }\n\n .extras {\n width: 100%;\n display: flex;\n align-items: center;\n border-top: 1px solid ${colors.lightGrey};\n padding: 0.75rem 0.75rem 0.75rem 0;\n margin: 0 -0.75rem 0 0rem;\n\n &:last-of-type {\n border-bottom: 1px solid ${colors.lightGrey};\n }\n\n .name {\n flex: 1 1 70%;\n padding: 0;\n }\n\n svg {\n height: 40px; /* WARNING: Magic number */\n }\n\n input {\n flex: 1 1 2rem;\n margin: 0 0.5rem 0 0.5rem;\n }\n }\n }\n\n @media (max-width: 768px) {\n border-left: 1px ${colors.midGrey} solid;\n }\n\n @media (max-width: 414px) {\n border: none;\n padding: unset;\n margin-bottom: unset;\n\n .input-wrapper {\n align-items: flex-start;\n flex-direction: column;\n\n & > label {\n display: block;\n width: unset;\n }\n }\n }\n`;\n\nconst footerButtonStyles = () => css`\n position: absolute;\n left: 0px;\n bottom: 0px;\n width: calc(100%);\n background-color: #f8f8f8;\n padding: 10px 10px 10px 0px;\n display: flex;\n justify-content: space-between;\n max-width: 1200px;\n display: flex;\n border-top: 1px #103447 solid;\n\n .checkboxContainer {\n div {\n border: none;\n\n .checkbox {\n white-space: nowrap;\n }\n }\n }\n\n .col-25 {\n flex-basis: 25%;\n display: flex;\n\n button {\n margin-left: 5px;\n }\n }\n .col-75 {\n flex-basis: 75%;\n }\n\n @media screen and (max-width: 650px) {\n flex-wrap: wrap;\n\n .col-25,\n .col-75 {\n flex-basis: 100%;\n\n &:nth-child(odd) {\n margin-bottom: 1.25rem;\n }\n }\n }\n\n @media (max-width: 768px) {\n position: unset;\n }\n @media (max-width: 414px) {\n position: unset;\n padding: unset;\n background-color: unset;\n border: unset;\n }\n`;\n\nexport default forwardRef(ForemanWorkHourForm);\n","import React, { forwardRef, memo, useEffect, useImperativeHandle, useMemo, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { DeleteIcon } from \"mdi-react\";\nimport { css } from \"emotion\";\nimport { isEmpty, isEqual } from \"lodash\";\nimport { format, isAfter, parse } from \"date-fns\";\nimport param from \"jquery-param\";\nimport { Modal, Popconfirm } from \"antd\";\nimport { useMediaQuery } from \"react-responsive\";\n\nimport workHourState from \"../../../config/semcotimedk-workhour-states\";\n\nimport ScrollView from \"../../ui/ScrollView\";\nimport InlineSpinner from \"../../ui/InlineSpinner\";\nimport DropDown from \"../../ui/DropDown\";\nimport DatePicker from \"../../ui/DatePicker\";\nimport TextInput from \"../../ui/TextInput\";\nimport CheckboxGroup from \"../../ui/CheckboxGroup\";\nimport TextareaInput from \"../../ui/TextareaInput\";\nimport Button from \"../../ui/Button\";\n\nimport req from \"../../../utilities/request-utility\";\n\nimport common from \"../../../style/common\";\nimport colors from \"../../../style/colors\";\n\nimport { toggleWorkHourModal } from \"../../../actions/uiActions\";\n\nconst ForemanAbsenceForm = (props, ref) => {\n const {\n blueCollarExternalId = \"\",\n data: registration = {},\n onDelete: onDeleteParent,\n onSubmit: onSubmitParent,\n lang,\n page = \"foreman\",\n } = props;\n const { data = {}, ifsData = null } = registration;\n const dispatch = useDispatch();\n\n const formDataInitialValues = {\n absenceCode: registration.data ? registration.data.absenceCode : undefined,\n startDate: registration.data\n ? format(parse(registration.data.startDate, \"yyyyMMdd\", 0), \"yyyy-MM-dd\")\n : format(new Date(), \"yyyy-MM-dd\"),\n startTimeMinutes: registration.data ? registration.data.startTime.split(\":\")[1] : \"\",\n startTimeHours: registration.data ? registration.data.startTime.split(\":\")[0] : \"\",\n endDate: registration.data\n ? format(parse(registration.data.endDate, \"yyyyMMdd\", 0), \"yyyy-MM-dd\")\n : format(new Date(), \"yyyy-MM-dd\"),\n endTimeMinutes: registration.data ? registration.data.endTime.split(\":\")[1] : \"\",\n endTimeHours: registration.data ? registration.data.endTime.split(\":\")[0] : \"\",\n note: registration.data ? registration.data.note : \"\",\n fullDay: registration.data ? registration.data.fullDay : false,\n foreman: registration.data ? registration.data.foreman : \"\",\n };\n\n const [isFormReady, setIsFormReady] = useState(false);\n const [absenceCodes, setAbsenceCodes] = useState([]);\n const [formData, setFormData] = useState(formDataInitialValues);\n const [formDataOrig, setFormDataOrig] = useState(formDataInitialValues);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [foremen, setForemen] = useState([]);\n\n const { primaryColor } = useSelector((s) => s.appConfig.primaryColor, isEqual);\n const modal = useSelector(({ ui }) => ui.workHourModal);\n\n const fetchAbsenceCodes = async () => {\n try {\n const { data } = await req()(`semcotime/absence-dk/absence-codes-dk/${blueCollarExternalId}`);\n setAbsenceCodes(data);\n setIsFormReady(true);\n } catch (error) {\n console.log(\"error: \", error);\n setIsFormReady(true);\n }\n };\n\n const getForemen = () => {\n try {\n setIsFormReady(false);\n\n req()(`semcotime/foremen?${param({ foremanGroupIdentifier: page === \"admin\" ? \"ADMIN\" : \"FOREMEN\" })}`).then(\n ({ data }) => {\n const assignedIds = data.assigned.map((d) => d.id);\n\n setForemen([\n ...data.assigned,\n { disabled: true, id: \"\", name: \"------------------\" },\n ...data.all.filter((d) => !assignedIds.includes(d.id)),\n ]);\n }\n );\n\n setIsFormReady(true);\n } catch (err) {\n // setErrorLoadingFormData(true);\n }\n };\n\n const handleFormChange = (e, name = null) => {\n if (!name) {\n setFormData({ ...formData, [e.target.name]: e.target.value });\n } else {\n setFormData({ ...formData, [name]: e.target.value });\n }\n };\n\n const getStartAndEndTimeAndDate = () => {\n const startDate = format(parse(formData.startDate, \"yyyy-MM-dd\", 0), \"yyyyMMdd\");\n const endDate = format(parse(formData.endDate, \"yyyy-MM-dd\", 0), \"yyyyMMdd\");\n return { startDate, endDate };\n };\n\n const getTime = (date, hours, minutes) =>\n !formData.fullDay && hours !== \"\" && minutes !== \"\"\n ? format(parse(`${date} ${hours}:${minutes}`, \"yyyyMMdd HH:mm\", 0), \"yyyyMMdd HH:mm\").split(\" \")[1]\n : \"\";\n\n const handleSubmit = async (form) => {\n setIsSubmitting(true);\n\n const { startDate, endDate } = getStartAndEndTimeAndDate();\n\n let registrationForm = {\n startDate,\n startTime: getTime(startDate, form.startTimeHours, form.startTimeMinutes),\n endDate,\n endTime: getTime(endDate, form.endTimeHours, form.endTimeMinutes),\n note: form.note,\n absenceCode: form.absenceCode,\n fullDay: form.fullDay,\n type: \"absence\",\n FullTimeAppUser: data.FullTimeAppUser,\n };\n\n if (registration.id) registrationForm.id = registration.id;\n\n await onSubmitParent(registrationForm);\n setIsSubmitting(false);\n };\n\n const onDelete = async () => {\n setIsDeleting(true);\n await onDeleteParent();\n setIsDeleting(false);\n };\n\n const archived = useMemo(() => (registration.lockedByIFS ? true : false), [registration.lockedByIFS]);\n const lockedByForeman = useMemo(() => (registration.lockedByForeman ? true : false), [registration.lockedByForeman]);\n\n useImperativeHandle(ref, () => ({\n isFormDataChanged: () => (!isEqual(formDataOrig, formData) ? true : false),\n }));\n\n useEffect(() => {\n getForemen();\n fetchAbsenceCodes(); // eslint-disable-next-line\n }, [blueCollarExternalId]);\n\n useEffect(() => {\n setFormData(formDataInitialValues);\n setFormDataOrig(formDataInitialValues);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(registration)]);\n\n useEffect(() => {\n if (formData.startDate !== \"\" && formData.endDate !== \"\") {\n if (isAfter(new Date(formData.startDate), new Date(formData.endDate)))\n setFormData({ ...formData, endDate: formData.startDate });\n } // eslint-disable-next-line\n }, [formData.startDate, formData.endDate]);\n\n const renderForm = () => {\n return (\n <>\n \n
\n {!isFormReady && (\n
\n \n
\n )}\n\n {isFormReady && registration.state === workHourState.deleted &&
DELETED IN IFS
}\n\n {isFormReady && (\n <>\n
\n \n ({ label: `${d.id} - ${d.name}`, value: d.id }))}\n placeholder={lang.absenceRegistrationFormAbsenceCodePlaceholder}\n value={formData.absenceCode}\n />\n
\n
\n \n handleFormChange({ target: { value: date } }, \"startDate\")}\n />\n
\n {!formData.fullDay && (\n
\n \n
\n \n

{` : `}

\n \n
\n
\n )}\n
\n \n handleFormChange({ target: { value: date } }, \"endDate\")}\n />\n
\n {!formData.fullDay && (\n
\n \n
\n {\" \"}\n

{` : `}

\n \n
{\" \"}\n
\n )}\n
\n \n handleFormChange({ target: { value: e.length !== 0 ? true : false } }, \"fullDay\")}\n options={[{ id: \"fullDay\", title: \"\" }]}\n selected={formData.fullDay ? [\"fullDay\"] : []}\n style={{ border: \"none\", width: \"100%\" }}\n />\n
\n
\n \n \n
\n
\n \n ({\n disabled: d.disabled,\n label: d.name,\n value: d.id,\n }))}\n placeholder={lang.absenceRegistrationFormForemanPlaceholder}\n value={formData.foreman}\n />\n
\n \n )}\n
\n {isFormReady && ifsData && (\n
\n {ifsData.map((d, i) => (\n
\n \n
\n

\n {d.WageCode} - {d.WageCodeDesc}\n

\n

{` - `}

\n {d.WageHours} hours\n
\n
\n ))}\n
\n )}\n \n {!isMobile && isFormReady && !archived && (\n
\n
\n {!!data.id && (\n handleFormChange({ target: { name: \"manualApproval\", value: e } })}\n />\n )}\n
\n
\n \n {!isEmpty(registration) &&\n !archived && ( //dont show if create or approved in IFS\n \n \n \n )}\n
\n
\n )}\n \n );\n };\n const isMobile = useMediaQuery({ maxWidth: \"800px\" });\n const close = () => {\n dispatch(toggleWorkHourModal(false));\n };\n return (\n <>\n {!isMobile && renderForm()}\n\n {isMobile && (\n \n
\n {!!data.id && (\n handleFormChange({ target: { name: \"manualApproval\", value: e } })}\n />\n )}\n
\n
\n \n {!isEmpty(registration) && (\n \n \n \n )}\n
\n \n }\n onCancel={close}\n visible={modal}\n >\n {renderForm()}\n \n )}\n \n );\n};\n\nconst scrollViewStyles = ({ bottomPanelHeight, topBarHeight }) => css`\n height: calc(100vh - ${topBarHeight}px - ${bottomPanelHeight}px);\n padding: 1rem;\n\n @media (max-width: 414px) {\n max-height: min-content;\n padding: unset;\n }\n`;\n\nconst componentStyles = (primaryColor) => css`\n background-color: ${colors.white};\n border-radius: 3px;\n border: 1px ${colors.midGrey} solid;\n border-left: 3px ${primaryColor} solid;\n padding: 0.65rem;\n margin-bottom: 10px;\n\n .deleted {\n width: 100%;\n text-align: center;\n background-color: red;\n color: #fff;\n padding: 10px;\n margin-bottom: 15px;\n }\n\n .input-wrapper {\n display: flex;\n align-items: center;\n margin-bottom: 0.5rem;\n\n &:last-of-type  {\n margin-bottom: 0;\n }\n\n & > label {\n width: 30%;\n text-align: right;\n padding-right: 0.65rem;\n font-size: 0.9rem;\n color: ${colors.darkGrey};\n }\n\n .input {\n width: 100%;\n }\n\n .time-input {\n display: flex;\n align-items: center;\n width: 100%;\n }\n\n .time-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .time-input-wrapper {\n width: 49%;\n }\n }\n @media (max-width: 768px) {\n border-left: 1px ${colors.midGrey} solid;\n }\n\n @media (max-width: 414px) {\n border: none;\n padding: unset;\n margin-bottom: unset;\n\n .input-wrapper {\n align-items: flex-start;\n flex-direction: column;\n\n & > label {\n display: block;\n width: unset;\n }\n }\n }\n`;\n\nconst footerButtonStyles = () => css`\n position: absolute;\n left: 0px;\n bottom: 0px;\n width: calc(100%);\n background-color: #f8f8f8;\n padding: 10px 10px 10px 0px;\n display: flex;\n justify-content: space-between;\n max-width: 1200px;\n display: flex;\n border-top: 1px #103447 solid;\n\n .checkboxContainer {\n div {\n border: none;\n\n .checkbox {\n white-space: nowrap;\n }\n }\n }\n\n .buttonContainer {\n display: flex;\n .css-1imkzsr.neutral {\n margin-right: 7px;\n }\n }\n\n .col-25 {\n flex-basis: 25%;\n }\n .col-75 {\n flex-basis: 75%;\n }\n\n @media screen and (max-width: 650px) {\n flex-wrap: wrap;\n\n .col-25,\n .col-75 {\n flex-basis: 100%;\n\n &:nth-child(odd) {\n margin-bottom: 1.25rem;\n }\n }\n }\n\n @media (max-width: 768px) {\n position: unset;\n }\n\n @media (max-width: 414px) {\n position: unset;\n padding: unset;\n background-color: unset;\n border: unset;\n }\n`;\n\nexport default memo(forwardRef(ForemanAbsenceForm));\n","import React, { forwardRef, useEffect, useState } from 'react';\nimport { capitalize } from 'lodash';\nimport { useMediaQuery } from 'react-responsive';\nimport { useDispatch, useSelector } from 'react-redux';\nimport moment from 'moment';\n\n// NEW\nimport { Button, Divider, List, Modal, Progress, Result } from 'antd';\n\n// css\nimport { css } from 'emotion';\nimport common from '../../style/common';\nimport colors from '../../style/colors';\nimport ScrollView from '../ui/ScrollView';\nimport InlineSpinner from '../ui/InlineSpinner';\nimport { toggleWorkHourModal } from '../../actions/uiActions';\n\nimport req from '../../utilities/request-utility';\n\nconst SubmitAllComponent = (props, ref) => {\n\tconst {\n\t\tsetIsSubmittingAll = () => {},\n\t\tselectedUser = '',\n\t\tsetShowSubmitAllComponent = () => {},\n\t\tneedsProcessingData = [],\n\t\tneedsProcessingIsFetching = false,\n\t\tneedsProcessingRefetch = () => {}\n\t} = props;\n\tconst dispatch = useDispatch();\n\tconst isMobile = useMediaQuery({ maxWidth: '800px' });\n\tconst modal = useSelector(({ ui }) => ui.workHourModal);\n\n\tconst [approvedRecords, setApprovedRecords] = useState([]);\n\tconst [successfullySubmittedData, setSuccessfullySubmittedData] = useState([]);\n\tconst [submissionStatusData, setSubmissionStatusData] = useState({\n\t\tstatus: 'waiting',\n\t\tmessage: '',\n\t\tpercentage: 0\n\t});\n\n\tconst getApprovedRecords = () => {\n\t\tlet approvedRecordsPlaceHolder = [];\n\t\tneedsProcessingData.forEach(record => {\n\t\t\tif (record.type === 'absence')\n\t\t\t\treturn approvedRecords.push({ recordID: record.id, type: record.type, data: record.data });\n\n\t\t\tconst {\n\t\t\t\tdata: { timeRegistrations = [] }\n\t\t\t} = record;\n\t\t\tconst isRecordApproved =\n\t\t\t\ttimeRegistrations.filter(d => d.approvedByForeman).length === timeRegistrations.length;\n\n\t\t\tif (isRecordApproved)\n\t\t\t\tapprovedRecordsPlaceHolder.push({ recordID: record.id, type: record.type, data: record.data });\n\t\t});\n\n\t\tsetApprovedRecords(approvedRecordsPlaceHolder);\n\t};\n\n\tconst handleSubmit = async () => {\n\t\ttry {\n\t\t\tlet submittedRecords = 0;\n\t\t\tfor (const record of approvedRecords) {\n\t\t\t\tconst { data, type, recordID } = record;\n\n\t\t\t\tconst currentDate =\n\t\t\t\t\ttype === 'time'\n\t\t\t\t\t\t? data.date\n\t\t\t\t\t\t: `${moment(data.startDate).format('YYYY-MM-DD')} - ${moment(data.endDate).format(\n\t\t\t\t\t\t\t\t'YYYY-MM-DD'\n\t\t\t\t\t\t )} `;\n\n\t\t\t\tsetSubmissionStatusData({\n\t\t\t\t\tstatus: 'submitting',\n\t\t\t\t\tmessage: `Submitting ${currentDate} (ID:${record.recordID})`,\n\t\t\t\t\tpercentage: Math.round((submittedRecords / approvedRecords.length) * 100)\n\t\t\t\t});\n\n\t\t\t\tawait req().put(`semcotime/foremen-teams/users/${selectedUser}/work-hours/${recordID}`, {\n\t\t\t\t\t...data,\n\t\t\t\t\taction: 'submit'\n\t\t\t\t});\n\n\t\t\t\tsubmittedRecords++;\n\t\t\t\tsetSuccessfullySubmittedData(successfullySubmittedData => [\n\t\t\t\t\t...successfullySubmittedData,\n\t\t\t\t\t{\n\t\t\t\t\t\tdate: currentDate,\n\t\t\t\t\t\tid: recordID,\n\t\t\t\t\t\ttype\n\t\t\t\t\t}\n\t\t\t\t]);\n\n\t\t\t\tif (submittedRecords === approvedRecords.length) {\n\t\t\t\t\tsetSubmissionStatusData({\n\t\t\t\t\t\tstatus: 'success',\n\t\t\t\t\t\tmessage: `Successfully submitted all Approved Records`,\n\t\t\t\t\t\tpercentage: 100\n\t\t\t\t\t});\n\t\t\t\t\tsetIsSubmittingAll(false);\n\t\t\t\t\tneedsProcessingRefetch();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.log('error: ', error);\n\t\t\tlet errorMessage = 'Unspecified error';\n\t\t\tif (error && error.response && error.response.data) {\n\t\t\t\tif (error.response.data.message) errorMessage = error.response.data.message;\n\t\t\t\telse errorMessage = error.response.statusText;\n\t\t\t}\n\n\t\t\tsetSubmissionStatusData(submissionStatusData => ({\n\t\t\t\t...submissionStatusData,\n\t\t\t\tmessage: `${submissionStatusData.message.split(' ')[1]} ${\n\t\t\t\t\tsubmissionStatusData.message.split(' ')[2]\n\t\t\t\t} | Error: ${errorMessage}`,\n\t\t\t\tstatus: 'error'\n\t\t\t}));\n\t\t\tsetIsSubmittingAll(false);\n\t\t}\n\t};\n\n\tconst hanldeRetry = async () => {\n\t\tawait needsProcessingRefetch();\n\t\tsetSubmissionStatusData({\n\t\t\tstatus: 'waiting',\n\t\t\tmessage: '',\n\t\t\tpercentage: 0\n\t\t});\n\t\tsetSuccessfullySubmittedData([]);\n\t\tgetApprovedRecords();\n\t};\n\n\tuseEffect(() => {\n\t\tgetApprovedRecords();\n\t}, []);\n\n\tconst { message = '', status = 'waiting', percentage = 0 } = submissionStatusData;\n\n\tconst progressBarStatus = { success: 'success', error: 'exception', submitting: 'active' }[status] || '';\n\n\tconst resultIconStatus = { success: 'success', error: 'error' }[status] || '';\n\n\tconst renderSubmitAllComponent = () => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{approvedRecords.length == 0 && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\n\t\t\t\t\t{status === 'waiting' && !approvedRecords.length == 0 && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\tsetIsSubmittingAll(true);\n\t\t\t\t\t\t\t\t\t\thandleSubmit();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t\t\t\tkey=\"console\">\n\t\t\t\t\t\t\t\t\tSubmit All\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{status !== 'waiting' && !approvedRecords.length == 0 && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t : ''}\n\t\t\t\t\t\t\t\tstatus={resultIconStatus}\n\t\t\t\t\t\t\t\tsubTitle={message}\n\t\t\t\t\t\t\t\textra={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{status === 'success' && (\n\t\t\t\t\t\t\t\t\t\t\t setShowSubmitAllComponent(false)}\n\t\t\t\t\t\t\t\t\t\t\t\tkey=\"console\">\n\t\t\t\t\t\t\t\t\t\t\t\tOK\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{status === 'error' && (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tRetry\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\tSuccessfully Submitted\n\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t\t{`${capitalize(item.type)}`}}>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{!isMobile && renderSubmitAllComponent()}\n\n\t\t\t{isMobile && (\n\t\t\t\t dispatch(toggleWorkHourModal(false))}>\n\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\n\t\t\t\t\t]}\n\t\t\t\t\tvisible={modal}>\n\t\t\t\t\t{renderSubmitAllComponent()}\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n\nconst scrollViewStyles = ({ bottomPanelHeight, topBarHeight }) => css`\n\theight: calc(96vh - ${topBarHeight}px - ${bottomPanelHeight}px);\n\tpadding: 1rem;\n\n\t@media (max-width: 414px) {\n\t\tpadding: unset;\n\t}\n`;\n\nconst componentStyles = (primaryColor, isMobile) => css`\n\tbackground-color: ${colors.white};\n\tborder-radius: 3px;\n\tborder: ${isMobile ? 'none' : `1px ${colors.midGrey} solid`};\n\tborder-left: ${isMobile ? 'none' : `3px ${primaryColor} solid`};\n\tpadding: 0.65rem;\n\tmargin-bottom: 10px;\n`;\n\nexport default forwardRef(SubmitAllComponent);\n","import React, { useEffect, useState } from \"react\";\nimport { Alert, Button, Col, Modal, Row, Statistic } from \"antd\";\nimport { useSelector } from \"react-redux\";\n\nconst WorkTimeAlertDk = ({ schedInfo = [], time = [], absences = [], name = \"You\", foreman = false, loading = true }) => {\n const [showModal, setShowModal] = useState(false);\n const close = () => {\n setShowModal(false);\n };\n\n const lang = useSelector((s) => s.language.language);\n\n const days = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n\n function getCurrentDaysAndPrev(current) {\n var week = new Array();\n current.setDate(current.getDate() - current.getDay() + 1);\n for (var i = 0; i < new Date().getDay(); i++) {\n week.push(days[new Date(current).getDay()]);\n current.setDate(current.getDate() + 1);\n }\n return week;\n }\n\n const checkIfDone = () => {\n const regHours = time\n .filter((tm) => {\n return tm.state === \"OPEN\" || tm.state === \"LOCKED_BY_FOREMAN\";\n })\n .map((reg) => {\n return { [days[new Date(reg.data.date).getDay()]]: reg.totalHours };\n });\n\n const absencesHours = absences\n .filter((absence) => {\n return absence.state === \"OPEN\" || absence.state === \"LOCKED_BY_FOREMAN\";\n })\n .map((abs) => {\n if (abs.ifsData !== null) {\n return { [days[new Date(abs.timeKey.split(\" \")[0]).getDay()]]: abs.ifsData[0].WageHours };\n } else {\n return { [days[new Date(abs.timeKey.split(\" \")[0]).getDay()]]: 8 };\n }\n });\n\n const mergeHours = (data) => {\n const result = {};\n data.forEach((item) => {\n for (let [key, value] of Object.entries(item)) {\n if (result[key]) {\n result[key] += value;\n } else {\n result[key] = value;\n }\n }\n });\n\n return result;\n };\n\n const totalHours = mergeHours(regHours.concat(absencesHours));\n const notReported = getCurrentDaysAndPrev(new Date()).filter((day) => !Object.keys(totalHours).includes(day));\n const needToReport = getCurrentDaysAndPrev(new Date()).filter((day) => Object.keys(totalHours).includes(day));\n\n const daysNeedToComplete = schedInfo\n .filter((sched) => {\n return needToReport.includes(sched.Day);\n })\n .map((sched) => {\n if (totalHours[sched.Day] < sched.WorkHoursSum) {\n return {\n Day: sched.Day,\n RemainingTime: sched.WorkHoursSum - totalHours[sched.Day],\n SheduleHours: sched.WorkHoursSum,\n ScheduleId: sched.ScheduleId,\n };\n } else {\n return false;\n }\n })\n .filter((item) => typeof item === \"object\");\n\n const daysNotReported = schedInfo.filter((sched) => {\n return notReported.includes(sched.Day);\n });\n\n return {\n DaysNotReported: daysNotReported,\n DaysNotComplete: daysNeedToComplete,\n };\n };\n\n const notReportedLength = checkIfDone().DaysNotReported.length;\n const notCompleteLength = checkIfDone().DaysNotComplete.length;\n\n return (\n <>\n {!loading ? (\n \n \n {notCompleteLength + notReportedLength !== 0 ? (\n setShowModal(true)} size=\"small\" type=\"text\">\n Show all\n \n }\n description={\n

\n {notReportedLength !== 0 &&\n `${name} have missing ${notReportedLength > 1 ? \"records\" : \"record\"} for ${notReportedLength} ${\n notReportedLength > 1 ? \"days\" : \"day\"\n }`}\n {notReportedLength !== 0 && notCompleteLength !== 0 ? `, and ` : \"\"}\n {notCompleteLength !== 0\n ? `${foreman === true ? \"\" : \"You\"} need to complete ${notCompleteLength} ${\n notCompleteLength > 1 ? \"days\" : \"day\"\n } of ${notCompleteLength > 1 ? \"records. \" : \"record. \"}`\n : \". \"}\n {foreman === true ? \"\" : \"Please make sure to submit on time.\"}\n

\n }\n message=\"Need to report schedule hours this week.\"\n type=\"warning\"\n showIcon\n />\n ) : (\n \n )}\n \n
\n ) : (\n \n \n

{lang.workTimeAlertLoadingLabel}

\n \n
\n )}\n\n \n \n {notCompleteLength !== 0 && (\n <>\n \n

{`${name} need to complete ${\n foreman === true ? \"the\" : \"your\"\n } schedule for the following days below:`}

\n \n {checkIfDone().DaysNotComplete.map((info) => {\n return (\n <>\n \n {\n return (\n <>\n

\n Schedule hours: {value.SheduleHours}\n

\n

\n Remaining Time: {value.RemainingTime}\n

\n \n );\n }}\n title={info.Day}\n value={info}\n />\n \n \n );\n })}\n \n )}\n\n {notReportedLength !== 0 && (\n <>\n \n

{`${name} need to complete ${\n foreman === true ? \"the\" : \"your\"\n } schedule for the following days below:`}

\n \n\n {checkIfDone().DaysNotReported.map((info) => {\n return (\n <>\n \n {\n return (\n <>\n

\n Schedule hours: {value.WorkHoursSum}\n

\n \n );\n }}\n title={info.Day}\n value={info}\n />\n \n \n );\n })}\n \n )}\n
\n
\n \n );\n};\n\nexport default WorkTimeAlertDk;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport param from 'jquery-param';\nimport { useQuery } from 'react-query';\nimport { notification } from 'antd';\nimport { format } from 'date-fns';\nimport moment from 'moment';\nimport { useMediaQuery } from 'react-responsive';\n\n// css\nimport { css } from 'emotion';\nimport { AlertDecagramIcon, ArrowBackIcon, PlusIcon, SelectAllIcon } from 'mdi-react';\nimport colors from '../../style/colors';\nimport common from '../../style/common';\n\nimport TopBar from '../ui/TopBar';\nimport Page from '../ui/Page';\nimport getBackButtonUrl from '../../utilities/get-back-button-url';\nimport getPageFromId from '../../utilities/get-page-from-id';\nimport ActionWrapper from '../ui/ActionWrapper';\nimport pageNavigator from '../../utilities/page-navigator';\nimport DropDown from '../ui/DropDown';\nimport ForemanListItem from './ForemanListItem';\nimport InlineSpinner from '../ui/InlineSpinner';\nimport TabView from '../ui/TabView';\nimport TabBar from '../ui/TabBar';\nimport ForemanWorkHourForm2 from './ForemanTeam/ForemanWorkHourForm2';\nimport ForemanWorkHourForm from './ForemanTeam/ForemanWorkHourForm';\nimport ForemanAbsenceForm from './ForemanTeam/ForemanAbsenceForm';\nimport SubmitAllComponent from './SubmitAllComponent';\n\n// actions\nimport { showDialog, toggleWorkHourModal } from '../../actions/uiActions';\n\n// utilities\nimport req from '../../utilities/request-utility';\n\n//components\nimport WorkTimeAlertDK from '../WorkTimeDK/WorkTimeAlertDK';\n\nfunction ForemanRegistration(props) {\n\tconst pages = useSelector(s => s.pages.pages);\n\tconst loggedInUser = useSelector(s => s.auth.user);\n\n\tconst isLoggedUserAuthorizedForeman = loggedInUser.loggedUserAuthorizedForeman;\n\n\tconst page = getPageFromId(pages, props.match.params.pageId);\n\tconst backButtonURL = getBackButtonUrl(page);\n\n\tconst [activeTabIndex, setActiveTabIndex] = useState(0);\n\n\tconst dispatch = useDispatch();\n\tconst foremanWorkHourFormRef = useRef();\n\tconst foremanAbsenceFormRef = useRef();\n\n\t// State\n\tconst [myTeam, setMyteam] = useState({\n\t\tdata: [],\n\t\tloading: true,\n\t\terror: false,\n\t\tselectedUser: undefined,\n\t\texternalId: undefined\n\t});\n\n\tconst [selectedRegistration, setSelectedRegistration] = useState('');\n\tconst [selectedAbsence, setSelectedAbsence] = useState('');\n\tconst [timeSchedInfo, setTimeSchedInfo] = useState({ data: [], loading: true });\n\tconst [afterOnSubmit, setAfterOnSubmit] = useState(false);\n\tconst [isSelectedUserTemporary, setIsSelectedUserTemporary] = useState(loggedInUser.isTemporaryUser); //defaults from the current logged in user ie: foreman\n\n\tconst [showSubmitAllComponent, setShowSubmitAllComponent] = useState(false);\n\tconst [isSubmittingAll, setIsSubmittingAll] = useState(false);\n\n\tconst lang = useSelector(({ language }) => language.language);\n\n\tconst {\n\t\tdata: { data: needsProcessing = [] } = {},\n\t\tisFetching: needsProcessingIsFetching,\n\t\tisLoading: needsProcessingIsLoading,\n\t\trefetch: needsProcessingRefetch\n\t} = useQuery(\n\t\t['WorkHoursNeedsProcessing', myTeam.selectedUser],\n\t\t({ queryKey: [key, userId] = [] }) => {\n\t\t\tif (!userId) return;\n\t\t\treturn req()(`semcotime/foremen-teams/users/${userId}/work-hours?${param({ type: 'needsProcessing' })}`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconst {\n\t\tdata: { data: beingProcessed = [] } = {},\n\t\tisFetching: beingProcessedIsFetching,\n\t\tisLoading: beingProcessedIsLoading,\n\t\trefetch: beingProcessedRefetch\n\t} = useQuery(\n\t\t['WorkHoursBeingProcessed', myTeam.selectedUser],\n\t\t({ queryKey: [key, userId] = [] }) => {\n\t\t\tif (!userId) return;\n\t\t\treturn req()(`semcotime/foremen-teams/users/${userId}/work-hours?${param({ type: 'beingProcessed' })}`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconst {\n\t\tdata: { data: archived = [] } = {},\n\t\tisFetching: archivedIsFetching,\n\t\tisLoading: archivedIsLoading,\n\t\trefetch: archivedRefetch\n\t} = useQuery(\n\t\t['WorkHoursArchived', myTeam.selectedUser],\n\t\t({ queryKey: [key, userId] = [] }) => {\n\t\t\tif (!userId) return;\n\t\t\treturn req()(`semcotime/foremen-teams/users/${userId}/work-hours?${param({ type: 'archived' })}`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tuseEffect(() => {\n\t\tgetSchedInfo();\n\t}, [myTeam.externalId]);\n\n\tfunction dates(current, formatted = false) {\n\t\tvar week = new Array();\n\t\tvar normalDate = new Array();\n\t\tcurrent.setDate(current.getDate() - current.getDay() + 1);\n\t\tfor (var i = 0; i < 7; i++) {\n\t\t\tif (formatted === true) {\n\t\t\t\tweek.push(format(new Date(current), 'yyyyMMdd'));\n\t\t\t} else {\n\t\t\t\tnormalDate.push(moment(new Date(current)).format('YYYY-MM-DD'));\n\t\t\t}\n\n\t\t\tcurrent.setDate(current.getDate() + 1);\n\t\t}\n\t\treturn {\n\t\t\tweek: week,\n\t\t\tnormalDate: normalDate,\n\t\t\tfromDate: week[0],\n\t\t\ttoDate: week[6]\n\t\t};\n\t}\n\n\tasync function getSchedInfo() {\n\t\ttry {\n\t\t\tconst { data } = await req()(\n\t\t\t\t`semcotime/work-hours-dk/EmpSchedInfo?CompanyIDs=DK10&EmpNos=${myTeam.externalId}`\n\t\t\t);\n\t\t\tsetTimeSchedInfo({ data: data, loading: false });\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t}\n\t}\n\n\tconst getTeamMembers = async () => {\n\t\ttry {\n\t\t\tconst { data } = await req()(`semcotime/foremen-teams/my-team`);\n\t\t\tsetMyteam({ ...myTeam, data, error: false, loading: false });\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\tsetMyteam({ ...myTeam, error: true, loading: false });\n\t\t}\n\t};\n\n\tconst setRegistration = (registration, withCheck = true) => {\n\t\tif (foremanWorkHourFormRef.current) {\n\t\t\tconst isFormDataChanged = foremanWorkHourFormRef.current.isFormDataChanged();\n\n\t\t\tif (withCheck && isFormDataChanged) {\n\t\t\t\treturn dispatch(\n\t\t\t\t\tshowDialog({\n\t\t\t\t\t\ticon: ,\n\t\t\t\t\t\ttitle: lang.unsavedChanges,\n\t\t\t\t\t\tcontent: lang.closeRegistrationFormWarningContent,\n\t\t\t\t\t\tprimaryActionTitle: lang.discardChanges,\n\t\t\t\t\t\tprimaryAction: () => {\n\t\t\t\t\t\t\tsetSelectedAbsence('');\n\t\t\t\t\t\t\tsetSelectedRegistration(registration);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsecondaryActionTitle: lang.keepChanges\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tsetSelectedAbsence('');\n\t\tsetSelectedRegistration(registration);\n\t};\n\n\tconst setAbsence = (absence, withCheck = true) => {\n\t\tif (foremanAbsenceFormRef.current) {\n\t\t\tconst isFormDataChanged = foremanAbsenceFormRef.current.isFormDataChanged();\n\n\t\t\tif (withCheck && isFormDataChanged) {\n\t\t\t\treturn dispatch(\n\t\t\t\t\tshowDialog({\n\t\t\t\t\t\ticon: ,\n\t\t\t\t\t\ttitle: lang.unsavedChanges,\n\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\t'You have made changes to the current registration. Do you want to discard your changes',\n\t\t\t\t\t\tprimaryActionTitle: lang.discardChanges,\n\t\t\t\t\t\tprimaryAction: () => {\n\t\t\t\t\t\t\tsetSelectedRegistration('');\n\t\t\t\t\t\t\tsetSelectedAbsence(absence);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsecondaryActionTitle: lang.keepChanges\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tsetSelectedRegistration('');\n\t\tsetSelectedAbsence(absence);\n\t};\n\n\tconst changeTab = index => {\n\t\tsetSelectedRegistration('');\n\t\tsetActiveTabIndex(index);\n\t};\n\n\tconst isFormValid = form => {\n\t\t// IF PROJECT IS PROVIDED, THEN SUB PROJECT AND ACTIVITY ARE REQUIRED\n\t\tif (form.type === 'time' && form.project) {\n\t\t\tif (!form.subProject || !form.projectActivity) {\n\t\t\t\tnotification.error({\n\t\t\t\t\tduration: 7,\n\t\t\t\t\tmessage: 'FAILED',\n\t\t\t\t\tdescription: lang.projectSubProjectActivityAreRequired\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// DAB Trade IS REQUIRE\n\t\tif (form.type === 'time' && !form.dabTrade) {\n\t\t\tnotification.error({ duration: 7, message: 'FAILED', description: lang.dabTradeIsRequired });\n\t\t\treturn false;\n\t\t}\n\n\t\t// DAB Location IS REQUIRE\n\t\tif (form.type === 'time' && !form.dabLocation) {\n\t\t\tnotification.error({ duration: 7, message: 'FAILED', description: lang.dabLocationIsRequired });\n\t\t\treturn false;\n\t\t}\n\n\t\t// DATE IS REQUIRED\n\t\tif (form.type === 'time' && !form.date) {\n\t\t\tnotification.error({ duration: 7, message: 'FAILED', description: lang.dateIsRequired });\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\n\t\t\tform.type === 'time' &&\n\t\t\t(!form.startTimeHours || !form.startTimeMinutes || !form.endTimeHours || !form.endTimeMinutes)\n\t\t) {\n\t\t\tnotification.error({ duration: 7, message: 'FAILED', description: lang.missingStartOrEndTime });\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\t// DEPRECATED AFTER UI REVAMP\n\tconst onSubmit = async form => {\n\t\tconst { selectedUser } = myTeam;\n\n\t\ttry {\n\t\t\tif (isFormValid(form)) {\n\t\t\t\tif (form.id) {\n\t\t\t\t\tawait req().put(`semcotime/foremen-teams/users/${selectedUser}/work-hours/${form.id}`, form);\n\t\t\t\t} else {\n\t\t\t\t\t//add property to for new record , for temporary users\n\t\t\t\t\tconst newForm = {\n\t\t\t\t\t\t...form,\n\t\t\t\t\t\tFullTimeAppUser: isSelectedUserTemporary ? false : true\n\t\t\t\t\t};\n\n\t\t\t\t\tawait req().post(`semcotime/foremen-teams/users/${selectedUser}/work-hours`, newForm);\n\t\t\t\t}\n\n\t\t\t\t// Saves last used item in local storage\n\t\t\t\tlocalStorage.setItem(\n\t\t\t\t\t`semcotime-last-time-input-${selectedUser}`,\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\tstartTimeHours: form.startTimeHours,\n\t\t\t\t\t\tstartTimeMinutes: form.startTimeMinutes,\n\t\t\t\t\t\tendTimeHours: form.endTimeHours,\n\t\t\t\t\t\tendTimeMinutes: form.endTimeMinutes,\n\t\t\t\t\t\tproject: form.project,\n\t\t\t\t\t\tsubProject: form.subProject,\n\t\t\t\t\t\tactivity: form.projectActivity,\n\t\t\t\t\t\tdabLocation: form.dabLocation,\n\t\t\t\t\t\tdabTrade: form.dabTrade\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tneedsProcessingRefetch();\n\t\t\t\tbeingProcessedRefetch();\n\t\t\t\tarchivedRefetch();\n\n\t\t\t\tnotification.success({\n\t\t\t\t\tduration: 7,\n\t\t\t\t\tmessage: 'SUCCESS',\n\t\t\t\t\tdescription: lang.savedRegistrationToastContent\n\t\t\t\t});\n\n\t\t\t\tsetRegistration('', false);\n\t\t\t\tsetAbsence('', false);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlet errorMessage = 'Unspecified error';\n\t\t\tif (error && error.response && error.response.data) {\n\t\t\t\tif (error.response.data.message) errorMessage = error.response.data.message;\n\t\t\t\telse errorMessage = error.response.statusText;\n\t\t\t}\n\n\t\t\tnotification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: `${lang.errorSavingRegistrationToastContent}. Fejlkode: ${errorMessage}`\n\t\t\t});\n\t\t}\n\t};\n\n\tconst onSubmit2 = async form => {\n\t\tconst { action = '' } = form;\n\t\tconst { selectedUser } = myTeam;\n\n\t\ttry {\n\t\t\tif (form.id) {\n\t\t\t\tawait req().put(`semcotime/foremen-teams/users/${selectedUser}/work-hours/${form.id}`, form);\n\t\t\t} else {\n\t\t\t\t//add property to for new record , for temporary users\n\t\t\t\tconst newForm = { ...form, FullTimeAppUser: isSelectedUserTemporary ? false : true };\n\n\t\t\t\tawait req().post(`semcotime/foremen-teams/users/${selectedUser}/work-hours`, newForm);\n\t\t\t}\n\n\t\t\tneedsProcessingRefetch();\n\t\t\tbeingProcessedRefetch();\n\t\t\tarchivedRefetch();\n\t\t\tconst nextRecordIndex = needsProcessing.findIndex(d => d.id === selectedRegistration);\n\n\t\t\tif (nextRecordIndex !== 0 && (action === 'updateAndMoveToNextDay' || action === 'submitAndNext')) {\n\t\t\t\tif (needsProcessing[nextRecordIndex - 1].data.type === 'time') {\n\t\t\t\t\tsetRegistration(needsProcessing[nextRecordIndex - 1].id, false);\n\t\t\t\t} else {\n\t\t\t\t\tsetAbsence(needsProcessing[nextRecordIndex - 1].id, false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (action !== 'draftAndNextDay') {\n\t\t\t\t\tsetRegistration('', false);\n\t\t\t\t\tsetAbsence('', false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet nextRecordMessage = '';\n\n\t\t\tif (action === 'updateAndMoveToNextDay' || action === 'submitAndNext')\n\t\t\t\tnextRecordMessage =\n\t\t\t\t\tnextRecordIndex !== 0 && needsProcessing[nextRecordIndex - 1].data.type === 'time'\n\t\t\t\t\t\t? `. The record date is now : ${needsProcessing[nextRecordIndex - 1].data.date}`\n\t\t\t\t\t\t: '';\n\n\t\t\tnotification.success({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'SUCCESS',\n\t\t\t\tdescription:\n\t\t\t\t\t'Sucessfuly Saved' +\n\t\t\t\t\t((action === 'updateAndMoveToNextDay' || action === 'submitAndNext') && nextRecordIndex\n\t\t\t\t\t\t? nextRecordMessage\n\t\t\t\t\t\t: '')\n\t\t\t});\n\n\t\t\tif (action === 'submit' || action === 'submitAndNext') setAfterOnSubmit(true);\n\t\t\t// setAbsence(\"\", false);\n\t\t} catch (error) {\n\t\t\tconsole.log('error: ', error);\n\t\t\tlet errorMessage = 'Unspecified error';\n\t\t\tif (error && error.response && error.response.data) {\n\t\t\t\tif (error.response.data.message) errorMessage = error.response.data.message;\n\t\t\t\telse errorMessage = error.response.statusText;\n\t\t\t}\n\n\t\t\tnotification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: `${lang.errorSavingRegistrationToastContent}. Fejlkode: ${errorMessage}`\n\t\t\t});\n\t\t}\n\t};\n\n\tconst onDelete = async () => {\n\t\tconst { selectedUser } = myTeam;\n\n\t\ttry {\n\t\t\tconst { id } = selected;\n\n\t\t\tawait req().delete(`semcotime/foremen-teams/users/${selectedUser}/work-hours/${id}`);\n\t\t\tneedsProcessingRefetch();\n\n\t\t\tnotification.success({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'SUCCESS',\n\t\t\t\tdescription: lang.deletedRegistrationToastContent\n\t\t\t});\n\n\t\t\tsetRegistration('', false);\n\t\t\tsetAbsence('', false);\n\t\t} catch (error) {\n\t\t\tlet errorMessage = 'Unspecified error';\n\t\t\tif (error && error.response && error.response.data) {\n\t\t\t\tif (error.response.data.message) errorMessage = error.response.data.message;\n\t\t\t\telse errorMessage = error.response.statusText;\n\t\t\t}\n\n\t\t\tnotification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: `${lang.errorDeletingRegistrationToastContent}. Fejlkode: ${errorMessage}`\n\t\t\t});\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\tconst users = await getTeamMembers();\n\t\t\tconst id = users && users.length !== 0 ? users[0].id : null;\n\t\t\tconst externalId = users && users.length !== 0 ? users[0].externalId : null;\n\t\t\tif (id) setMyteam(myTeam => ({ ...myTeam, selectedUser: id, externalId: externalId }));\n\t\t})();\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (needsProcessing.length === 0 && needsProcessingIsFetching === false && afterOnSubmit) {\n\t\t\tsetRegistration('', false);\n\t\t\tsetAbsence('', false);\n\t\t\tsetMyteam(myTeam => ({\n\t\t\t\t...myTeam,\n\t\t\t\tselectedUser: ''\n\t\t\t}));\n\t\t\t//crude workaround to avoid skipping users that have empty needprocessing\n\t\t\tsetAfterOnSubmit(false);\n\t\t}\n\t}, [needsProcessingIsFetching]);\n\n\tconst archivedCount = archived.length,\n\t\tneedsProcessingCount = needsProcessing.length,\n\t\tbeingProcessedCount = beingProcessed.length;\n\tlet selected = null;\n\n\tif (selectedRegistration) {\n\t\tif (activeTabIndex === 0)\n\t\t\tselected = selectedRegistration === 'new' ? {} : needsProcessing.find(d => d.id === selectedRegistration);\n\t\tif (activeTabIndex === 1)\n\t\t\tselected = selectedRegistration === 'new' ? {} : beingProcessed.find(d => d.id === selectedRegistration);\n\t\tif (activeTabIndex === 2)\n\t\t\tselected = selectedRegistration === 'new' ? {} : archived.find(d => d.id === selectedRegistration);\n\t}\n\tif (selectedAbsence) {\n\t\tif (activeTabIndex === 0)\n\t\t\tselected = selectedAbsence === 'new' ? {} : needsProcessing.find(d => d.id === selectedAbsence);\n\t\tif (activeTabIndex === 1)\n\t\t\tselected = selectedAbsence === 'new' ? {} : beingProcessed.find(d => d.id === selectedAbsence);\n\t\tif (activeTabIndex === 2)\n\t\t\tselected = selectedAbsence === 'new' ? {} : archived.find(d => d.id === selectedAbsence);\n\t}\n\n\tconst isMobile = useMediaQuery({ maxWidth: '414px' });\n\tconst username = myTeam.data.find(team => team.id === myTeam.selectedUser);\n\n\tconst registeredTimeForWholeWeek = needsProcessing\n\t\t.concat(beingProcessed)\n\t\t.concat(archived)\n\t\t.filter(reg => {\n\t\t\tlet date = reg.timeKey.split('__')[0];\n\t\t\tif (date.length !== 10) {\n\t\t\t\tdate = date.substr(0, 11);\n\t\t\t}\n\n\t\t\treturn dates(new Date(), false).normalDate.includes(date.trim());\n\t\t});\n\n\tconst registeredTime = registeredTimeForWholeWeek.filter(regTime => regTime.type === 'time');\n\tconst registeredAbsence = registeredTimeForWholeWeek.filter(regTime => regTime.type === 'absence');\n\n\treturn (\n\t\t\n\t\t\t pageNavigator(backButtonURL, 'backward')}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttitle={page.title}\n\t\t\t/>\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{/* Show alert when time is not submitted */}\n\t\t\t\t\t{myTeam.selectedUser && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\n\t\t\t\t\t
\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tgetSchedInfo();\n\t\t\t\t\t\t\t\tsetMyteam({\n\t\t\t\t\t\t\t\t\t...myTeam,\n\t\t\t\t\t\t\t\t\tselectedUser: e.target.value,\n\t\t\t\t\t\t\t\t\texternalId: myTeam.data.find(d => d.id === e.target.value).externalId\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tsetIsSelectedUserTemporary(\n\t\t\t\t\t\t\t\t\tmyTeam.data.find(d => d.id === e.target.value).isTemporaryUser\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tsetSelectedRegistration('');\n\t\t\t\t\t\t\t\tsetSelectedAbsence('');\n\t\t\t\t\t\t\t\tsetShowSubmitAllComponent(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\toptions={myTeam.data.map(d => ({\n\t\t\t\t\t\t\t\tlabel: `${d.name} | Ticket No. ${d.ticketNumber}`,\n\t\t\t\t\t\t\t\tvalue: d.id\n\t\t\t\t\t\t\t}))}\n\t\t\t\t\t\t\tvalue={myTeam.selectedUser}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{lang.needsProcessing}{' '}\n\t\t\t\t\t\t\t\t\t\t{needsProcessingCount > 0 ? <>{needsProcessingCount} : ''}\n\t\t\t\t\t\t\t\t\t\t{!needsProcessingIsLoading && needsProcessingIsFetching && (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tonClick: () => changeTab(0)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t!isSelectedUserTemporary && {\n\t\t\t\t\t\t\t\ttitle: (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{lang.beingProcessed}{' '}\n\t\t\t\t\t\t\t\t\t\t{beingProcessedCount > 0 ? <>{beingProcessedCount} : ''}{' '}\n\t\t\t\t\t\t\t\t\t\t{!beingProcessedIsLoading && beingProcessedIsFetching && (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tonClick: () => changeTab(1)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{lang.archive} {archivedCount > 0 ? <>{archivedCount} : ''}{' '}\n\t\t\t\t\t\t\t\t\t\t{!archivedIsLoading && archivedIsFetching && (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tonClick: () => changeTab(2)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]}\n\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t{(myTeam.loading || needsProcessingIsLoading) && }\n\t\t\t\t\t\t\t\t{!myTeam.loading && !needsProcessingIsLoading && needsProcessingCount === 0 && (\n\t\t\t\t\t\t\t\t\t

{lang.noRecordsFound}

\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!myTeam.loading &&\n\t\t\t\t\t\t\t\t\t!needsProcessingIsLoading &&\n\t\t\t\t\t\t\t\t\tneedsProcessing.map(registration => (\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\tregistration.type === 'time'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? setRegistration(registration.id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: setAbsence(registration.id);\n\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t\t\t{!myTeam.loading && !needsProcessingIsLoading && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetRegistration('new');\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetShowSubmitAllComponent(false);\n\t\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: `${common.topBarHeight}px`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: '0 0.75rem'\n\t\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t\t {lang.addRegistration}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetAbsence('new');\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetShowSubmitAllComponent(false);\n\t\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: `${common.topBarHeight}px`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: '0 0.75rem'\n\t\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t\t{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t{lang.foremanRegistrationAbsenceAdd}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{isLoggedUserAuthorizedForeman && (\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetSelectedRegistration('');\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetSelectedAbsence('');\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetShowSubmitAllComponent(!showSubmitAllComponent);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: `${common.topBarHeight}px`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: '0 0.75rem'\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t Select All\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{(myTeam.loading || beingProcessedIsLoading) && }\n\t\t\t\t\t\t\t\t{!myTeam.loading && !beingProcessedIsLoading && beingProcessedCount === 0 && (\n\t\t\t\t\t\t\t\t\t

{lang.noRecordsFound}

\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!myTeam.loading &&\n\t\t\t\t\t\t\t\t\t!needsProcessingIsLoading &&\n\t\t\t\t\t\t\t\t\tbeingProcessed.map(registration => (\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\tregistration.type === 'time'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? setRegistration(registration.id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: setAbsence(registration.id);\n\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{(myTeam.loading || archivedIsLoading) && }\n\t\t\t\t\t\t\t\t{!myTeam.loading && !archivedIsLoading && archivedCount === 0 && (\n\t\t\t\t\t\t\t\t\t

{lang.noRecordsFound}

\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!myTeam.loading &&\n\t\t\t\t\t\t\t\t\t!archivedIsLoading &&\n\t\t\t\t\t\t\t\t\tarchived.map(registration => (\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\tregistration.type === 'time'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? setRegistration(registration.id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: setAbsence(registration.id);\n\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t]}\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{!selectedRegistration && !selectedAbsence && showSubmitAllComponent == false && (\n\t\t\t\t\t\t

{lang.selectDateToStart}

\n\t\t\t\t\t)}\n\t\t\t\t\t{selectedRegistration && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{selected.isNewType || selectedRegistration === 'new' ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\t{selectedAbsence && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\t{showSubmitAllComponent && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n}\n\nconst componentStyles = (props, isSubmittingAll) => css`\n\t.main-content {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\theight: 100%;\n\t\toverflow: hidden;\n\n\t\t.col {\n\t\t\tflex: 50% 0 1;\n\t\t\tbackground-color: ${colors.white};\n\t\t}\n\n\t\t.col-left {\n\t\t\tbackground-color: ${isSubmittingAll ? '#f2f2f2' : colors.white};\n\t\t\tcursor: ${isSubmittingAll ? 'not-allowed' : 'auto'};\n\t\t\tpointer-events: ${isSubmittingAll ? 'none' : 'auto'};\n\t\t\tborder-right: 1px ${colors.midGrey} solid;\n\t\t\tbox-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.1);\n\t\t\tposition: relative;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t}\n\n\t\t.col-right {\n\t\t\tposition: relative;\n\t\t}\n\t}\n\n\t.meta {\n\t\tcolor: ${colors.darkGrey};\n\t\ttext-align: center;\n\t}\n\n\t// @media (max-width: 800px) {\n\t// .main-content {\n\t// flex-direction: column;\n\n\t// .col-left {\n\t// height: 50vh;\n\t// }\n\n\t// .col-right {\n\t// display: flex;\n\t// flex-direction: column;\n\t// height: 50vh;\n\t// }\n\t// }\n\t// }\n\n\t@media (max-width: 800px) {\n\t\t.main-content {\n\t\t\tflex-direction: unset;\n\n\t\t\t.scroll-hider {\n\t\t\t\tfont-size: 10px !important;\n\t\t\t}\n\n\t\t\t.col {\n\t\t\t\tflex: unset;\n\t\t\t}\n\n\t\t\t.col-left {\n\t\t\t\talign-items: flex-start;\n\t\t\t\twidth: 100% !important;\n\t\t\t\theight: 100% !important;\n\t\t\t}\n\n\t\t\t.col-right {\n\t\t\t\tdisplay: none;\n\t\t\t\tflex-direction: unset;\n\t\t\t\theight: unset;\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport default ForemanRegistration;\n","import React from \"react\";\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../../style/colors\";\nimport getProfilePictureFromUserObject from \"../../../utilities/get-profile-picture-from-user-object\";\nimport { CheckCircleIcon, CloseCircleIcon } from \"mdi-react\";\nimport ActionWrapper from \"../../ui/ActionWrapper\";\n\nfunction ForemanTeamUser(props) {\n return (\n \n {getProfilePictureFromUserObject(props.user)}\n
\n

{props.user.name}

\n

{`${props.user.userGroup.title} | Ticket No: ${props.user.ticketNumber} `}

\n
\n\n {props.isSelected && }\n {props.isDeletable && }\n
\n );\n}\n\nconst componentStyles = (props) => css`\n border: 1px ${colors.lightGrey} solid;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: -1px;\n width: 100%;\n border-radius: 0;\n\n &.selected {\n border-right: 2px ${colors.green} solid;\n background-color: ;\n }\n\n .content {\n margin-left: 0.45rem;\n flex-grow: 1;\n text-align: left;\n }\n\n .usergroup {\n color: ${colors.darkGrey};\n font-size: 0.9rem;\n }\n\n .check-icon {\n color: ${colors.green};\n }\n\n .close-icon {\n color: ${colors.red};\n }\n`;\n\nexport default ForemanTeamUser;\n","import React, { useEffect, useState } from \"react\";\nimport { useQuery } from \"react-query\";\n\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../../style/colors\";\n\n// actions\n\nimport TopBar from \"../../ui/TopBar\";\nimport Page from \"../../ui/Page\";\nimport { useSelector } from \"react-redux\";\nimport getBackButtonUrl from \"../../../utilities/get-back-button-url\";\nimport getPageFromId from \"../../../utilities/get-page-from-id\";\nimport ActionWrapper from \"../../ui/ActionWrapper\";\nimport pageNavigator from \"../../../utilities/page-navigator\";\nimport { ArrowBackIcon } from \"mdi-react\";\nimport ScrollView from \"../../ui/ScrollView\";\nimport TextInput from \"../../ui/TextInput\";\nimport InlineSpinner from \"../../ui/InlineSpinner\";\nimport ForemanTeamUser from \"./ForemanTeamUser\";\nimport req from \"../../../utilities/request-utility\";\n\nfunction ForemanRegistration(props) {\n const pages = useSelector((s) => s.pages.pages);\n const lang = useSelector((s) => s.language.language);\n\n const page = getPageFromId(pages, props.match.params.pageId);\n const backButtonURL = getBackButtonUrl(page);\n\n const [interfaceIsBusy, setInterfaceIsBusy] = useState(false);\n const [filterTerm, setFilterTerm] = useState(\"\");\n\n const { user } = useSelector(({ auth }) => ({ user: auth.user }));\n\n const {\n data: { data: dataUsers = [] } = {},\n isError: isErrorUsers,\n isLoading: isLoadingUsers,\n } = useQuery(\"users\", () => req()(`semcotime/foremen-teams/users`));\n\n const {\n data: { data: dataTeamUsers = [] } = {},\n isError: isErrorTeamUsers,\n isLoading: isLoadingTeamUsers,\n refetch: refetchTeamUsers,\n } = useQuery(\"teamUsers\", () => req()(`semcotime/foremen-teams/my-team`));\n\n const users = {\n data: dataUsers.filter((d) => d.id !== user.id),\n tempData: dataUsers,\n isError: isErrorUsers,\n isLoading: isLoadingUsers,\n };\n\n const teamUsers = {\n data: dataTeamUsers.filter((d) => d.id !== user.id),\n isError: isErrorTeamUsers,\n isLoading: isLoadingTeamUsers,\n };\n\n const teamUserIds = dataTeamUsers.map((d) => d.id);\n\n const addToTeam = async (id) => {\n setInterfaceIsBusy(true);\n\n try {\n await req().put(`semcotime/foremen-teams/my-team/${id}`);\n await refetchTeamUsers();\n setInterfaceIsBusy(false);\n } catch (error) {\n setInterfaceIsBusy(false);\n }\n };\n\n const removeFromTeam = async (id) => {\n setInterfaceIsBusy(true);\n\n try {\n await req().delete(`semcotime/foremen-teams/my-team/${id}`);\n await refetchTeamUsers();\n setInterfaceIsBusy(false);\n } catch (error) {\n setInterfaceIsBusy(false);\n }\n };\n\n useEffect(() => {\n const loggedInUser = users.tempData.filter((d) => d.id === user.id);\n if (loggedInUser.length !== 0) addToTeam(loggedInUser[0].id);\n }, [users.data.length]);\n\n return (\n \n pageNavigator(backButtonURL, \"backward\")}>\n \n \n }\n title={page.title}\n />\n
\n
\n setFilterTerm(e.target.value)}\n placeholder={lang.filterList}\n style={{ margin: \"1rem 1rem 0 1rem\", width: \"calc(100% - 2rem)\" }}\n />\n\n \n {users.isLoading && !users.isError && }\n\n {!users.isLoading &&\n users.data.map((user) => {\n if (filterTerm) {\n const regex = new RegExp(`(${filterTerm})|(${filterTerm.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, \"\\\\$&\")})`, \"gi\");\n if (!regex.test(user.name) && !regex.test(user.ticketNumber)) return null;\n }\n\n const isSelected = teamUserIds.includes(user.id);\n return (\n (isSelected ? null : addToTeam(user.id))}\n isSelected={isSelected}\n />\n );\n })}\n \n
\n\n
\n \n
\n {teamUsers.data.length} / {users.data.length}\n {(users.isLoading || teamUsers.isLoading || interfaceIsBusy) && (\n \n )}\n
\n\n {teamUsers.isLoading && !teamUsers.isError && }\n\n {!teamUsers.isLoading &&\n teamUsers.data.map((user) => (\n removeFromTeam(user.id)} user={user} isDeletable={true} />\n ))}\n
\n
\n
\n
\n );\n}\n\nconst componentStyles = () => css`\n .main-content {\n display: flex;\n justify-content: space-between;\n height: 100%;\n overflow: hidden;\n\n .col {\n flex: 50% 0 1;\n background-color: ${colors.white};\n }\n\n .col-left {\n border-right: 1px ${colors.midGrey} solid;\n box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.1);\n position: relative;\n display: flex;\n flex-direction: column;\n }\n\n .col-right {\n display: flex;\n flex-direction: column;\n }\n }\n\n .meta {\n color: ${colors.darkGrey};\n text-align: center;\n }\n`;\n\nexport default ForemanRegistration;\n","import React, { forwardRef, useEffect, useMemo, useState } from \"react\";\nimport { isEmpty, sortBy } from \"lodash\";\nimport param from \"jquery-param\";\nimport { useMediaQuery } from \"react-responsive\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { DeleteIcon, FloppyIcon } from \"mdi-react\";\nimport moment from \"moment\";\n\n// NEW\nimport { Form, Modal, Checkbox, Radio, Divider, Popover, Popconfirm, notification } from \"antd\";\nimport * as yup from \"yup\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport { useDropdownData } from \"../../WorkTimeDK/hooks\";\nimport workHourState from \"../../../config/semcotimedk-workhour-states\";\n\n// css\nimport { css } from \"emotion\";\nimport common from \"../../../style/common\";\nimport colors from \"../../../style/colors\";\nimport DatePicker from \"../../ui/DatePicker\";\nimport InlineSpinner from \"../../ui/InlineSpinner\";\nimport ScrollView from \"../../ui/ScrollView\";\nimport req from \"../../../utilities/request-utility\";\n\n//ui\nimport Button from \"../../ui/Button\";\nimport DropDown from \"../../ui/DropDown\";\nimport { toggleWorkHourModal } from \"../../../actions/uiActions\";\nimport TimeRegistrationList from \"../TimeRegistrationList\";\nimport NPTAndHOTTLabeling from \"../nptAndHott\";\n\nconst AdminWorkHourForm = (props, ref) => {\n const dispatch = useDispatch();\n const {\n data: registration = {},\n externalId = null,\n onDelete: onDeleteParent,\n onSubmit: onSubmitParent,\n sentToIFSAt,\n lang,\n page = \"foreman\",\n userId = null,\n } = props;\n const { data = {}, ifsData = null } = registration;\n console.log(\"data: \", data);\n\n const primaryColor = useSelector((s) => s.appConfig.primaryColor);\n const modal = useSelector(({ ui }) => ui.workHourModal);\n const archived = useMemo(() => (registration.lockedByIFS ? true : false), [registration.lockedByIFS]);\n const needsProcessing = useMemo(() => (registration.sentToIFSAt ? true : false), [registration.sentToIFSAt]);\n const lockedByForeman = useMemo(() => (registration.lockedByForeman ? true : false), [registration.lockedByForeman]);\n // STATES\n const [foremen, setForemen] = useState([]);\n const [isFormReady, setIsFormReady] = useState(true);\n const [submittingForm, setSubmittingForm] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [errorLoadingFormData, setErrorLoadingFormData] = useState(false); //error page\n const [tradeCodesList, setTradeCodesList] = useState([]);\n const [showMobileFormAction, setShowMobileFormAction] = useState(false);\n\n const getForemen = () => {\n try {\n setIsFormReady(false);\n\n req()(`semcotime/foremen?${param({ foremanGroupIdentifier: page === \"admin\" ? \"ADMIN\" : \"FOREMEN\" })}`).then(\n ({ data }) => {\n const assignedIds = data.assigned.map((d) => d.id);\n\n setForemen([\n ...data.assigned,\n { disabled: true, id: \"\", name: \"------------------\" },\n ...data.all.filter((d) => !assignedIds.includes(d.id)),\n ]);\n }\n );\n\n setIsFormReady(true);\n } catch (err) {\n setErrorLoadingFormData(true);\n }\n };\n\n const schema = yup.object().shape({\n //validations\n date: yup.string().required(\"Date is required\"),\n detailedReportingEnabled: yup.boolean(),\n // foreman: page === \"admin\" ? yup.string().required(\"Foreman is required\") : yup.string(),\n foreman: yup.string().required(\"Foreman is required\"),\n location: yup.string().required(\"Location is required\"),\n project: yup.string().required(\"Project is required\"),\n subProject: yup.string().required(\"Sub Project is required\"),\n activity: yup.string().required(\"Project Activity is required\"),\n trade: yup.string().required(\"Trade is required\"),\n timeRegistrations: yup\n .array()\n .min(1, \"Times Registrations must have at least 1 record\")\n .of(\n yup.object().shape({\n approvedByForeman: yup.boolean(),\n })\n )\n // .compact((v) => !v.approvedByForeman) //check if there is time registration that is not SAVED\n .test({\n name: \"allIsApproved\",\n message: \"All time registrations must be approved\",\n test: (val) => val.filter((d) => !d.approvedByForeman).length === 0, //check if all saved time registrations are approved\n }),\n nptHott: yup\n .array()\n .of(\n yup.object().shape({\n Category: yup.string(),\n Hours: yup.number(),\n WorkOrderNo: yup.string(),\n OperationNo: yup.string(),\n Description: yup.string(),\n })\n )\n .test({\n name: \"allLabelHours\",\n message: \"Please complete the required fields\",\n test: (val) =>\n val.filter(\n (d) =>\n d.Hours > 0 &&\n (d.WorkOrderNo === \"\" ||\n (d.Category === \"NPT\" ? false : d.OperationNo === \"\") ||\n (d.Description.replace(/[^a-zA-Z ]/g, \"\") === \"Custom\" && d.Comment === \"\"))\n ).length === 0, //check if there is a label with hours that missing required fields\n }),\n });\n\n const defaultValues = {\n date: \"\",\n detailedReportingEnabled: false,\n foreman: \"\",\n location: \"\",\n project: \"\",\n subProject: \"\",\n activity: \"\",\n trade: \"\",\n endOfRotation: false,\n type: \"time\",\n timeRegistrations: [],\n break: \"\",\n nptHott: [],\n };\n\n const {\n control,\n formState: { errors },\n getValues,\n reset,\n setValue,\n handleSubmit,\n watch,\n } = useForm({\n defaultValues,\n resolver: yupResolver(schema),\n });\n\n const {\n dabLocations,\n dabLocationsIsFetching,\n dabTradeCodes,\n dabTradeIsFetching,\n defaultEmployeeValues,\n defaultEmployeeValuesIsFetching,\n defaultEmployeeValuesStatus,\n defaultEmployeeValuesRefetch,\n defaultProjectSubProjectAndActivityData,\n defaultProjectSubProjectAndActivityStatus,\n nptHottLabels,\n nptHottLabelsIsFetching,\n nptHottLabelsRefetch,\n nptHottLabelsStatus,\n projectData,\n projectActivityData,\n projectStatus,\n projectActivityStatus,\n subProjectData,\n subProjectStatus,\n subProjectIsFetching,\n } = useDropdownData({ ...watch(), externalId });\n\n const getProjectActivityPlaceholder = () => {\n if (projectActivityStatus === \"loading\" || projectActivityStatus === \"idle\") {\n return lang.loading;\n } else if (projectActivityData.length === 0) {\n return lang.noActivities;\n } else {\n return lang.chooseActivity;\n }\n };\n\n const getSubProjectPlaceholder = () => {\n if (subProjectStatus === \"loading\" || subProjectStatus === \"idle\") {\n return lang.loading;\n } else if (subProjectData.length === 0) {\n return \"No subprojects found\";\n } else {\n return lang.chooseASubproject;\n }\n };\n\n useEffect(() => {\n setTradeCodesList(dabTradeCodes);\n }, [dabTradeCodes.length]);\n\n useEffect(() => {\n if (!nptHottLabelsIsFetching && nptHottLabelsStatus === \"success\") {\n if (\n (!isEmpty(registration) && data.nptHott && data.nptHott.length === 0) ||\n (isEmpty(registration) && getValues(\"date\") === \"\")\n ) {\n // if viewed record is draft/ not approved OR new form, load default label values\n setValue(\"nptHott\", nptHottLabels);\n }\n }\n }, [nptHottLabelsIsFetching, watch(\"project\")]);\n\n useEffect(() => {\n // form onload edit or from local storage\n if (isEmpty(registration) && !defaultEmployeeValuesIsFetching) {\n const { employeeTrade = \"\" } = defaultEmployeeValues;\n\n // to condition when editing\n setValue(\"trade\", employeeTrade);\n }\n }, [defaultEmployeeValuesIsFetching]);\n\n useEffect(() => {\n if (\n !defaultEmployeeValuesIsFetching &&\n defaultEmployeeValues.employeeTrade &&\n getValues(\"trade\") !== defaultEmployeeValues.employeeTrade\n ) {\n const defaultEmployeeTrade = dabTradeCodes.filter((d) => d.DabTradeId === defaultEmployeeValues.employeeTrade)[0];\n notification.warning({\n description: `${lang.tradeNotDefault} (${defaultEmployeeTrade.DabTradeId} - ${defaultEmployeeTrade.DabTradeDesc}).`,\n });\n }\n }, [getValues(\"trade\")]);\n\n useEffect(() => {\n getForemen();\n\n // deletes old form layout in local storage\n let localStorageForm = localStorage.getItem(`semcotime-last-time-input-${userId}`);\n if (localStorageForm) {\n if (\n !JSON.parse(localStorageForm).hasOwnProperty(\"detailedReportingEnabled\") &&\n !JSON.parse(localStorageForm).hasOwnProperty(\"nptHott\")\n ) {\n console.log(\"-- OLD FORM DETECTED AND DELETED --\");\n localStorage.removeItem(`semcotime-last-time-input-${userId}`);\n }\n }\n }, []);\n\n useEffect(() => {\n nptHottLabelsRefetch();\n defaultEmployeeValuesRefetch();\n if (!isEmpty(registration)) {\n //if edit\n reset(registration.data);\n } else {\n // if add with last form used\n const lastForm = localStorage.getItem(`semcotime-last-time-input-${userId}`);\n if (lastForm) {\n return reset(JSON.parse(lastForm));\n } else {\n reset(defaultValues);\n }\n }\n }, [JSON.stringify(registration)]);\n\n const onSubmit = async (formData, toLocalStorage = false, action = \"draft\") => {\n setSubmittingForm(true);\n if (!formData.detailedReportingEnabled) {\n //remove label data if the selected project is detailedReportingEnabled\n await onSubmitParent({ ...{ ...formData, nptHott: [] }, action, type: \"time\" });\n } else {\n await onSubmitParent({ ...formData, action, type: \"time\" });\n }\n if (action === \"draftAndNextDay\") {\n setValue(\"date\", moment(formData.date).add(1, \"days\").format(\"YYYY-MM-DD\"));\n }\n\n setShowMobileFormAction(false);\n setSubmittingForm(false);\n };\n\n const onDelete = async () => {\n setIsDeleting(true);\n await onDeleteParent();\n setIsDeleting(false);\n };\n\n // console.log(\"FORM VAL: \", watch(\"nptHott\")[0]);\n const disabled = archived || needsProcessing;\n const renderForm = () => {\n return (\n <>\n
\n \n {/*
\n \n
*/}\n\n {registration.state === workHourState.deleted ? (\n
DELETED IN IFS
\n ) : (\n registration.state === workHourState.lockedByForeman &&\n needsProcessing === true &&
PROCESSING IN IFS
\n )}\n\n {/* DATE */}\n

{lang.date} *

\n {\n return (\n <>\n {\n onChange(date);\n }}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* LOCATION */}\n

{lang.location}

\n {\n return (\n <>\n ({ label: d.DabLocationValue, value: d.DabLocationValue })),\n \"DabLocationId\"\n )\n : []\n }\n placeholder={lang.chooseADabLocation}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* PROJECT */}\n

{lang.project}

\n {\n return (\n <>\n {\n setValue(\"subProject\", \"\");\n setValue(\"activity\", \"\");\n setValue(\n \"detailedReportingEnabled\",\n projectData.filter((d) => d.id === e.target.value)[0].detailedReportingEnabled\n ); //NPT AND HOTT ENABLED\n\n onChange(e);\n }}\n options={projectData.map((d) => ({ label: `${d.id} - ${d.name}`, value: d.id }))}\n placeholder={lang.timeRegistrationFormProjectPlaceholder}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* SUB-PROJECT */}\n {getValues(\"project\") && (\n <>\n

{lang.subproject}

\n {\n return (\n <>\n ({ label: `${d.id} - ${d.description}`, value: d.id }))}\n placeholder={getSubProjectPlaceholder()}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n \n )}\n\n {/* ACTIVITY */}\n {getValues(\"project\") && getValues(\"subProject\") && (\n <>\n

{lang.activity}

\n {\n return (\n <>\n ({ label: `${d.no} - ${d.description}`, value: d.id }))}\n placeholder={getProjectActivityPlaceholder()}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n \n )}\n\n {/* TRADE */}\n

{lang.dabTrade}

\n {\n return (\n <>\n ({\n label: `${d.DabTradeId} - ${d.DabTradeDesc}`,\n value: d.DabTradeId,\n }))\n : []\n }\n placeholder={lang.chooseADabTrade}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* {page === \"admin\" && ( */}\n <>\n {/* FOREMAN */}\n

{lang.timeRegistrationFormForeman}

\n {\n return (\n <>\n ({ disabled: d.disabled, label: d.name, value: d.id }))}\n placeholder={lang.timeRegistrationFormForemanPlaceholder}\n value={parseInt(value)}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n \n {/* )} */}\n\n \n {/* TIME REGISTRATION */}\n {\n return (\n <>\n {\n // set End Of Rotation to TRUE when selecting Heli Time Home\n // if true , no localstorage\n setValue(\n \"endOfRotation\",\n e.some((d) => d.savedByBlueCollar && d.type === 6)\n );\n\n onChange(e);\n }}\n date={watch(\"date\")}\n location={watch(\"location\")}\n locationIFSRules={dabLocations}\n locationIsLoading={dabLocationsIsFetching}\n isForeman={true}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* END OF ROTATION */}\n {\n return (\n <>\n \n {lang.foremanLastDayInRotation}\n \n \n );\n }}\n />\n {/* BREAK */}\n {watch(\"location\") === \"OnShore\" && (\n {\n return (\n <>\n \n Paid Break\n Unpaid Break\n \n \n );\n }}\n />\n )}\n {/* NPT and HOTT Labeling */}\n {getValues(\"detailedReportingEnabled\") && (\n <>\n {nptHottLabelsIsFetching && }\n {!nptHottLabelsIsFetching && (\n {\n return (\n \n );\n }}\n />\n )}\n \n )}\n \n {!isMobile && isFormReady && !archived && !needsProcessing && (\n
\n {/*
*/}\n onSubmit(e, false, !isEmpty(registration) ? \"update\" : \"draft\"))}\n >\n {submittingForm && (\n \n )}\n {lang.foremanRegistrationWorkTimeSave}\n \n {isEmpty(registration) && (\n \n )}\n\n \n {!isEmpty(registration) && (\n <>\n \n\n \n \n \n \n )}\n
\n )}\n \n \n );\n };\n\n const isMobile = useMediaQuery({ maxWidth: \"800px\" });\n\n const close = () => {\n dispatch(toggleWorkHourModal(false));\n };\n\n const mobileFormActions = () => {\n return (\n
\n
\n onSubmit(e, false, !isEmpty(registration) ? \"update\" : \"draft\"))}\n >\n {lang.foremanRegistrationWorkTimeSave}\n \n
\n
\n \n
\n {!isEmpty(registration) && (\n
\n \n
\n )}\n
\n );\n };\n\n return (\n <>\n {!isMobile && renderForm()}\n\n {isMobile && (\n \n Pick an action:}\n onVisibleChange={() => setShowMobileFormAction(!showMobileFormAction)}\n trigger=\"click\"\n >\n setShowMobileFormAction(!showMobileFormAction)}\n >\n \n \n \n {!isEmpty(registration) && (\n \n \n \n )}\n \n )\n }\n onCancel={close}\n visible={modal}\n >\n {renderForm()}\n \n )}\n \n );\n};\n\nconst scrollViewStyles = ({ bottomPanelHeight, topBarHeight }) => css`\n height: calc(96vh - ${topBarHeight}px - ${bottomPanelHeight}px);\n padding: 1rem;\n\n @media (max-width: 414px) {\n padding: unset;\n }\n`;\n\nconst componentStyles = (primaryColor) => css`\n background-color: ${colors.white};\n border-radius: 3px;\n border: 1px ${colors.midGrey} solid;\n border-left: 3px ${primaryColor} solid;\n padding: 0.65rem;\n margin-bottom: 10px;\n\n p {\n margin-bottom: 0px;\n }\n\n .fieldError {\n color: red;\n }\n\n .deleted {\n width: 100%;\n text-align: center;\n background-color: red;\n color: #fff;\n padding: 10px;\n margin-bottom: 15px;\n }\n\n .processing {\n width: 100%;\n text-align: center;\n background-color: blue;\n color: #fff;\n padding: 10px;\n margin-bottom: 15px;\n }\n\n .input-wrapper {\n display: flex;\n align-items: center;\n margin-bottom: 0.5rem;\n\n &:last-of-type  {\n margin-bottom: 0;\n }\n\n & > label {\n width: 30%;\n text-align: right;\n padding-right: 0.65rem;\n font-size: 0.9rem;\n color: ${colors.darkGrey};\n }\n\n .input {\n width: 100%;\n }\n\n .time-input {\n display: flex;\n align-items: center;\n width: 100%;\n }\n\n .flex {\n width: 100%;\n display: flex;\n justify-content: space-between;\n }\n\n .extras {\n width: 100%;\n display: flex;\n align-items: center;\n border-top: 1px solid ${colors.lightGrey};\n padding: 0.75rem 0.75rem 0.75rem 0;\n margin: 0 -0.75rem 0 0rem;\n\n &:last-of-type {\n border-bottom: 1px solid ${colors.lightGrey};\n }\n\n .name {\n flex: 1 1 70%;\n padding: 0;\n }\n\n svg {\n height: 40px; /* WARNING: Magic number */\n }\n\n input {\n flex: 1 1 2rem;\n margin: 0 0.5rem 0 0.5rem;\n }\n }\n }\n\n @media (max-width: 768px) {\n border-left: 1px ${colors.midGrey} solid;\n }\n\n @media (max-width: 414px) {\n border: none;\n padding: unset;\n margin-bottom: unset;\n\n .input-wrapper {\n align-items: flex-start;\n flex-direction: column;\n\n & > label {\n display: block;\n width: unset;\n }\n }\n }\n`;\n\nconst footerButtonStyles = () => css`\n position: absolute;\n left: 0px;\n bottom: 0px;\n width: calc(100%);\n background-color: #f8f8f8;\n padding: 10px 10px 10px 0px;\n display: flex;\n justify-content: flex-end;\n max-width: 1200px;\n display: flex;\n border-top: 1px #103447 solid;\n\n button {\n margin-left: 5px;\n font-size: 12px;\n width: 10vw;\n height: 8vh;\n }\n\n .error {\n width: 5vw;\n height: 8vh;\n }\n\n .checkboxContainer {\n div {\n border: none;\n\n .checkbox {\n white-space: nowrap;\n }\n }\n }\n\n @media screen and (max-width: 650px) {\n flex-wrap: wrap;\n\n .col-25,\n .col-75 {\n flex-basis: 100%;\n\n &:nth-child(odd) {\n margin-bottom: 1.25rem;\n }\n }\n }\n\n @media (max-width: 768px) {\n position: unset;\n }\n @media (max-width: 414px) {\n position: unset;\n padding: unset;\n background-color: unset;\n border: unset;\n }\n`;\n\nconst footerButtonStylesMobile = () => css`\n display: flex;\n flex-direction: column;\n\n .mobile-buttons {\n padding: 3px;\n }\n`;\n\nexport default forwardRef(AdminWorkHourForm);\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport param from 'jquery-param';\nimport { useQuery } from 'react-query';\nimport { uniqBy } from 'lodash';\nimport { notification } from 'antd';\nimport { useMediaQuery } from 'react-responsive';\n\n// css\nimport { css } from 'emotion';\nimport { AlertDecagramIcon, ArrowBackIcon, PlusIcon, SelectAllIcon, selectA } from 'mdi-react';\nimport colors from '../../style/colors';\nimport common from '../../style/common';\n\nimport TopBar from '../ui/TopBar';\nimport Page from '../ui/Page';\nimport getBackButtonUrl from '../../utilities/get-back-button-url';\nimport getPageFromId from '../../utilities/get-page-from-id';\nimport ActionWrapper from '../ui/ActionWrapper';\nimport pageNavigator from '../../utilities/page-navigator';\nimport DropDown from '../ui/DropDown';\nimport ForemanListItem from './ForemanListItem';\nimport InlineSpinner from '../ui/InlineSpinner';\nimport TabView from '../ui/TabView';\nimport TabBar from '../ui/TabBar';\nimport AdminWorkHourForm from './ForemanTeam/AdminWorkHourForm';\nimport ForemanWorkHourForm from './ForemanTeam/ForemanWorkHourForm';\nimport ForemanAbsenceForm from './ForemanTeam/ForemanAbsenceForm';\nimport SubmitAllComponent from './SubmitAllComponent';\n\n// actions\nimport { showDialog, toggleWorkHourModal } from '../../actions/uiActions';\n\n// utilities\nimport req from '../../utilities/request-utility';\n\nfunction AdminView(props) {\n\tconst pages = useSelector(s => s.pages.pages);\n\tconst loggedInUser = useSelector(s => s.auth.user);\n\n\tconst page = getPageFromId(pages, props.match.params.pageId);\n\tconst backButtonURL = getBackButtonUrl(page);\n\n\tconst [activeTabIndex, setActiveTabIndex] = useState(0);\n\n\tconst dispatch = useDispatch();\n\tconst foremanWorkHourFormRef = useRef();\n\tconst foremanAbsenceFormRef = useRef();\n\n\t// State\n\tconst [myTeam, setMyteam] = useState({\n\t\tdata: [],\n\t\tloading: true,\n\t\terror: false,\n\t\tselectedUser: undefined,\n\t\texternalId: undefined\n\t});\n\n\tconst [selectedRegistration, setSelectedRegistration] = useState('');\n\tconst [selectedAbsence, setSelectedAbsence] = useState('');\n\tconst [afterOnSubmit, setAfterOnSubmit] = useState(false);\n\tconst [isSelectedUserTemporary, setIsSelectedUserTemporary] = useState(loggedInUser.isTemporaryUser); //defaults from the current logged in user ie: foreman\n\n\tconst [showSubmitAllComponent, setShowSubmitAllComponent] = useState(false);\n\tconst [isSubmittingAll, setIsSubmittingAll] = useState(false);\n\n\tconst lang = useSelector(({ language }) => language.language);\n\n\tconst {\n\t\tdata: { data: needsProcessing = [] } = {},\n\t\tisFetching: needsProcessingIsFetching,\n\t\tisLoading: needsProcessingIsLoading,\n\t\trefetch: needsProcessingRefetch\n\t} = useQuery(\n\t\t['WorkHoursNeedsProcessing', myTeam.selectedUser],\n\t\t({ queryKey: [key, userId] = [] }) => {\n\t\t\tif (!userId) return;\n\t\t\treturn req()(`semcotime/foremen-teams/users/${userId}/work-hours?${param({ type: 'needsProcessing' })}`);\n\t\t},\n\t\t{\n\t\t\t// staleTime: 30 * 1000,\n\t\t}\n\t);\n\n\tconst {\n\t\tdata: { data: beingProcessed = [] } = {},\n\t\tisFetching: beingProcessedIsFetching,\n\t\tisLoading: beingProcessedIsLoading,\n\t\trefetch: beingProcessedRefetch\n\t} = useQuery(\n\t\t['WorkHoursBeingProcessed', myTeam.selectedUser],\n\t\t({ queryKey: [key, userId] = [] }) => {\n\t\t\tif (!userId) return;\n\t\t\treturn req()(`semcotime/foremen-teams/users/${userId}/work-hours?${param({ type: 'beingProcessed' })}`);\n\t\t},\n\t\t{\n\t\t\t// staleTime: 30 * 1000,\n\t\t}\n\t);\n\n\tconst {\n\t\tdata: { data: archived = [] } = {},\n\t\tisFetching: archivedIsFetching,\n\t\tisLoading: archivedIsLoading,\n\t\trefetch: archivedRefetch\n\t} = useQuery(\n\t\t['WorkHoursArchived', myTeam.selectedUser],\n\t\t({ queryKey: [key, userId] = [] }) => {\n\t\t\tif (!userId) return;\n\t\t\treturn req()(`semcotime/foremen-teams/users/${userId}/work-hours?${param({ type: 'archived' })}`);\n\t\t},\n\t\t{\n\t\t\t// staleTime: 30 * 1000,\n\t\t}\n\t);\n\n\tconst getTeamMembers = async () => {\n\t\ttry {\n\t\t\tconst { data } = await req()(`semcotime/foremen-teams/my-team/all`);\n\t\t\tsetMyteam({ ...myTeam, data: uniqBy(data, 'id'), error: false, loading: false });\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\tsetMyteam({ ...myTeam, error: true, loading: false });\n\t\t}\n\t};\n\n\tconst setRegistration = (registration, withCheck = true) => {\n\t\tif (foremanWorkHourFormRef.current) {\n\t\t\tconst isFormDataChanged = foremanWorkHourFormRef.current.isFormDataChanged();\n\n\t\t\tif (withCheck && isFormDataChanged) {\n\t\t\t\treturn dispatch(\n\t\t\t\t\tshowDialog({\n\t\t\t\t\t\ticon: ,\n\t\t\t\t\t\ttitle: lang.unsavedChanges,\n\t\t\t\t\t\tcontent: lang.closeRegistrationFormWarningContent,\n\t\t\t\t\t\tprimaryActionTitle: lang.discardChanges,\n\t\t\t\t\t\tprimaryAction: () => {\n\t\t\t\t\t\t\tsetSelectedAbsence('');\n\t\t\t\t\t\t\tsetSelectedRegistration(registration);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsecondaryActionTitle: lang.keepChanges\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tsetSelectedAbsence('');\n\t\tsetSelectedRegistration(registration);\n\t};\n\n\tconst setAbsence = (absence, withCheck = true) => {\n\t\tif (foremanAbsenceFormRef.current) {\n\t\t\tconst isFormDataChanged = foremanAbsenceFormRef.current.isFormDataChanged();\n\n\t\t\tif (withCheck && isFormDataChanged) {\n\t\t\t\treturn dispatch(\n\t\t\t\t\tshowDialog({\n\t\t\t\t\t\ticon: ,\n\t\t\t\t\t\ttitle: lang.unsavedChanges,\n\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\t'You have made changes to the current registration. Do you want to discard your changes',\n\t\t\t\t\t\tprimaryActionTitle: lang.discardChanges,\n\t\t\t\t\t\tprimaryAction: () => {\n\t\t\t\t\t\t\tsetSelectedRegistration('');\n\t\t\t\t\t\t\tsetSelectedAbsence(absence);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsecondaryActionTitle: lang.keepChanges\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tsetSelectedRegistration('');\n\t\tsetSelectedAbsence(absence);\n\t};\n\n\tconst changeTab = index => {\n\t\tsetSelectedRegistration('');\n\t\tsetActiveTabIndex(index);\n\t};\n\n\tconst isFormValid = form => {\n\t\t// IF PROJECT IS PROVIDED, THEN SUB PROJECT AND ACTIVITY ARE REQUIRED\n\t\tif (form.type === 'time' && form.project) {\n\t\t\tif (!form.subProject || !form.projectActivity) {\n\t\t\t\tnotification.error({\n\t\t\t\t\tduration: 7,\n\t\t\t\t\tmessage: 'FAILED',\n\t\t\t\t\tdescription: lang.projectSubProjectActivityAreRequired\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// DAB Trade IS REQUIRE\n\t\tif (form.type === 'time' && !form.dabTrade) {\n\t\t\tnotification.error({ duration: 7, message: 'FAILED', description: lang.dabTradeIsRequired });\n\t\t\treturn false;\n\t\t}\n\n\t\t// DAB Location IS REQUIRE\n\t\tif (form.type === 'time' && !form.dabLocation) {\n\t\t\tnotification.error({ duration: 7, message: 'FAILED', description: lang.dabLocationIsRequired });\n\t\t\treturn false;\n\t\t}\n\n\t\t// DATE IS REQUIRED\n\t\tif (form.type === 'time' && !form.date) {\n\t\t\tnotification.error({ duration: 7, message: 'FAILED', description: lang.dateIsRequired });\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\n\t\t\tform.type === 'time' &&\n\t\t\t(!form.startTimeHours || !form.startTimeMinutes || !form.endTimeHours || !form.endTimeMinutes)\n\t\t) {\n\t\t\tnotification.error({ duration: 7, message: 'FAILED', description: lang.missingStartOrEndTime });\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\tconst onSubmit = async form => {\n\t\tconst { selectedUser } = myTeam;\n\n\t\ttry {\n\t\t\tif (isFormValid(form)) {\n\t\t\t\tif (form.id) {\n\t\t\t\t\tawait req().put(`semcotime/foremen-teams/users/${selectedUser}/work-hours/${form.id}`, form);\n\t\t\t\t} else {\n\t\t\t\t\t//add property to for new record , for temporary users\n\t\t\t\t\tconst newForm = { ...form, FullTimeAppUser: isSelectedUserTemporary ? false : true };\n\n\t\t\t\t\tawait req().post(`semcotime/foremen-teams/users/${selectedUser}/work-hours`, newForm);\n\t\t\t\t}\n\n\t\t\t\t// Saves last used item in local storage\n\t\t\t\tlocalStorage.setItem(\n\t\t\t\t\t`semcotime-last-time-input-${selectedUser}`,\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\tstartTimeHours: form.startTimeHours,\n\t\t\t\t\t\tstartTimeMinutes: form.startTimeMinutes,\n\t\t\t\t\t\tendTimeHours: form.endTimeHours,\n\t\t\t\t\t\tendTimeMinutes: form.endTimeMinutes,\n\t\t\t\t\t\tproject: form.project,\n\t\t\t\t\t\tsubProject: form.subProject,\n\t\t\t\t\t\tactivity: form.projectActivity,\n\t\t\t\t\t\tdabLocation: form.dabLocation,\n\t\t\t\t\t\tdabTrade: form.dabTrade\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tneedsProcessingRefetch();\n\t\t\t\tbeingProcessedRefetch();\n\t\t\t\tarchivedRefetch();\n\n\t\t\t\tnotification.success({\n\t\t\t\t\tduration: 7,\n\t\t\t\t\tmessage: 'SUCCESS',\n\t\t\t\t\tdescription: lang.savedRegistrationToastContent\n\t\t\t\t});\n\n\t\t\t\tsetRegistration('', false);\n\t\t\t\tsetAbsence('', false);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlet errorMessage = 'Unspecified error';\n\t\t\tif (error && error.response && error.response.data) {\n\t\t\t\tif (error.response.data.message) errorMessage = error.response.data.message;\n\t\t\t\telse errorMessage = error.response.statusText;\n\t\t\t}\n\n\t\t\tnotification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: `${lang.errorSavingRegistrationToastContent}. Fejlkode: ${errorMessage}`\n\t\t\t});\n\t\t}\n\t};\n\n\tconst onSubmit2 = async form => {\n\t\tconst { action = '' } = form;\n\t\tconst { selectedUser } = myTeam;\n\n\t\ttry {\n\t\t\tif (form.id) {\n\t\t\t\tawait req().put(`semcotime/foremen-teams/users/${selectedUser}/work-hours/${form.id}`, form);\n\t\t\t} else {\n\t\t\t\t//add property to for new record , for temporary users\n\t\t\t\tconst newForm = { ...form, FullTimeAppUser: isSelectedUserTemporary ? false : true };\n\n\t\t\t\tawait req().post(`semcotime/foremen-teams/users/${selectedUser}/work-hours`, newForm);\n\t\t\t}\n\n\t\t\tneedsProcessingRefetch();\n\t\t\tbeingProcessedRefetch();\n\t\t\tarchivedRefetch();\n\n\t\t\tconst nextRecordIndex = needsProcessing.findIndex(d => d.id === selectedRegistration);\n\n\t\t\tif (nextRecordIndex !== 0 && action === 'submitAndNext') {\n\t\t\t\tif (needsProcessing[nextRecordIndex - 1].data.type === 'time') {\n\t\t\t\t\tsetRegistration(needsProcessing[nextRecordIndex - 1].id, false);\n\t\t\t\t} else {\n\t\t\t\t\tsetAbsence(needsProcessing[nextRecordIndex - 1].id, false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (action !== 'draftAndNextDay') {\n\t\t\t\t\tsetRegistration('', false);\n\t\t\t\t\tsetAbsence('', false);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet nextRecordMessage = '';\n\n\t\t\tif (action === 'submitAndNext')\n\t\t\t\tnextRecordMessage =\n\t\t\t\t\tnextRecordIndex !== 0 && needsProcessing[nextRecordIndex - 1].data.type === 'time'\n\t\t\t\t\t\t? `. The record date is now : ${needsProcessing[nextRecordIndex - 1].data.date}`\n\t\t\t\t\t\t: '';\n\n\t\t\tnotification.success({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'SUCCESS',\n\t\t\t\tdescription:\n\t\t\t\t\taction === 'draft' || action === 'update'\n\t\t\t\t\t\t? 'Sucessfuly Saved'\n\t\t\t\t\t\t: lang.savedRegistrationToastContent +\n\t\t\t\t\t\t (action === 'submitAndNext' && nextRecordIndex ? nextRecordMessage : '')\n\t\t\t});\n\n\t\t\tif (action === 'submit' || action === 'submitAndNext') setAfterOnSubmit(true);\n\n\t\t\t// setAbsence(\"\", false);\n\t\t} catch (error) {\n\t\t\tlet errorMessage = 'Unspecified error';\n\t\t\tif (error && error.response && error.response.data) {\n\t\t\t\tif (error.response.data.message) errorMessage = error.response.data.message;\n\t\t\t\telse errorMessage = error.response.statusText;\n\t\t\t}\n\n\t\t\tnotification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: `${lang.errorSavingRegistrationToastContent}. Fejlkode: ${errorMessage}`\n\t\t\t});\n\t\t}\n\t};\n\n\tconst onDelete = async () => {\n\t\ttry {\n\t\t\tconst { selectedUser } = myTeam;\n\t\t\tconst { blueCollarId, id, type } = selected;\n\n\t\t\tif (type === 'time') {\n\t\t\t\tawait req().delete(`semcotime/foremen-teams/users/${selectedUser}/work-hours/${id}`);\n\t\t\t} else {\n\t\t\t\tawait req().delete(`semcotime/absence-dk/${id}?adminBlueCollarId=${blueCollarId}`);\n\t\t\t}\n\n\t\t\tneedsProcessingRefetch();\n\t\t\tbeingProcessedRefetch();\n\t\t\tarchivedRefetch();\n\n\t\t\tnotification.success({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'SUCCESS',\n\t\t\t\tdescription: lang.deletedRegistrationToastContent\n\t\t\t});\n\n\t\t\tsetRegistration('', false);\n\t\t\tsetAbsence('', false);\n\t\t} catch (err) {\n\t\t\tlet errorMessage = 'Unspecified error';\n\t\t\tif (err && err.response && err.response.data) errorMessage = err.response.data.error;\n\t\t\tnotification.error({\n\t\t\t\tduration: 7,\n\t\t\t\tmessage: 'FAILED',\n\t\t\t\tdescription: `${lang.errorDeletingRegistrationToastContent}. Fejlkode: ${errorMessage}`\n\t\t\t});\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\tconst users = await getTeamMembers();\n\t\t\tconst id = users && users.length !== 0 ? users[0].id : null;\n\t\t\tconst externalId = users && users.length !== 0 ? users[0].externalId : null;\n\t\t\tif (id) setMyteam(myTeam => ({ ...myTeam, selectedUser: id, externalId: externalId }));\n\t\t})();\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (needsProcessing.length === 0 && needsProcessingIsFetching === false && afterOnSubmit) {\n\t\t\tsetRegistration('', false);\n\t\t\tsetAbsence('', false);\n\t\t\tsetMyteam(myTeam => ({\n\t\t\t\t...myTeam,\n\t\t\t\tselectedUser: ''\n\t\t\t}));\n\t\t\t//crude workaround to avoid skipping users that have empty needprocessing\n\t\t\tsetAfterOnSubmit(false);\n\t\t}\n\t}, [needsProcessingIsFetching]);\n\n\tconst archivedCount = archived.length,\n\t\tneedsProcessingCount = needsProcessing.length,\n\t\tbeingProcessedCount = beingProcessed.length;\n\tlet selected = null;\n\n\tif (selectedRegistration) {\n\t\tif (activeTabIndex === 0)\n\t\t\tselected = selectedRegistration === 'new' ? {} : needsProcessing.find(d => d.id === selectedRegistration);\n\t\tif (activeTabIndex === 1)\n\t\t\tselected = selectedRegistration === 'new' ? {} : beingProcessed.find(d => d.id === selectedRegistration);\n\t\tif (activeTabIndex === 2)\n\t\t\tselected = selectedRegistration === 'new' ? {} : archived.find(d => d.id === selectedRegistration);\n\t}\n\tif (selectedAbsence) {\n\t\tif (activeTabIndex === 0)\n\t\t\tselected = selectedAbsence === 'new' ? {} : needsProcessing.find(d => d.id === selectedAbsence);\n\t\tif (activeTabIndex === 1)\n\t\t\tselected = selectedAbsence === 'new' ? {} : beingProcessed.find(d => d.id === selectedAbsence);\n\t\tif (activeTabIndex === 2)\n\t\t\tselected = selectedAbsence === 'new' ? {} : archived.find(d => d.id === selectedAbsence);\n\t}\n\n\tconst isMobile = useMediaQuery({ maxWidth: '414px' });\n\n\treturn (\n\t\t\n\t\t\t pageNavigator(backButtonURL, 'backward')}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttitle={page.title}\n\t\t\t/>\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tsetMyteam({\n\t\t\t\t\t\t\t\t\t...myTeam,\n\t\t\t\t\t\t\t\t\tselectedUser: e.target.value,\n\t\t\t\t\t\t\t\t\texternalId: myTeam.data.find(d => d.id === e.target.value).externalId\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tsetIsSelectedUserTemporary(\n\t\t\t\t\t\t\t\t\tmyTeam.data.find(d => d.id === e.target.value).isTemporaryUser\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tsetSelectedRegistration('');\n\t\t\t\t\t\t\t\tsetSelectedAbsence('');\n\t\t\t\t\t\t\t\tsetShowSubmitAllComponent(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\toptions={myTeam.data.map(d => ({ label: d.name, value: d.id }))}\n\t\t\t\t\t\t\tvalue={myTeam.selectedUser}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{lang.needsProcessing}{' '}\n\t\t\t\t\t\t\t\t\t\t{needsProcessingCount > 0 ? <>{needsProcessingCount} : ''}\n\t\t\t\t\t\t\t\t\t\t{!needsProcessingIsLoading && needsProcessingIsFetching && (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tonClick: () => changeTab(0)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t!isSelectedUserTemporary && {\n\t\t\t\t\t\t\t\ttitle: (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{lang.beingProcessed}{' '}\n\t\t\t\t\t\t\t\t\t\t{beingProcessedCount > 0 ? <>{beingProcessedCount} : ''}{' '}\n\t\t\t\t\t\t\t\t\t\t{!beingProcessedIsLoading && beingProcessedIsFetching && (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tonClick: () => changeTab(1)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{lang.archive} {archivedCount > 0 ? <>{archivedCount} : ''}{' '}\n\t\t\t\t\t\t\t\t\t\t{!archivedIsLoading && archivedIsFetching && (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tonClick: () => changeTab(2)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]}\n\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t{(myTeam.loading || needsProcessingIsLoading) && }\n\t\t\t\t\t\t\t\t{!myTeam.loading && !needsProcessingIsLoading && needsProcessingCount === 0 && (\n\t\t\t\t\t\t\t\t\t

{lang.noRecordsFound}

\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!myTeam.loading &&\n\t\t\t\t\t\t\t\t\t!needsProcessingIsLoading &&\n\t\t\t\t\t\t\t\t\tneedsProcessing.map(registration => (\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\tregistration.type === 'time'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? setRegistration(registration.id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: setAbsence(registration.id);\n\t\t\t\t\t\t\t\t\t\t\t\tsetShowSubmitAllComponent(false);\n\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t\t\t{!myTeam.loading && !needsProcessingIsLoading && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetRegistration('new');\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetShowSubmitAllComponent(false);\n\t\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: `${common.topBarHeight}px`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: '0 0.75rem'\n\t\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t\t {lang.addRegistration}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetAbsence('new');\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetShowSubmitAllComponent(false);\n\t\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: `${common.topBarHeight}px`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: '0 0.75rem'\n\t\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t\t{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t{lang.foremanregistrationAbsenceAdd}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetSelectedRegistration('');\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetSelectedAbsence('');\n\t\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetShowSubmitAllComponent(!showSubmitAllComponent);\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: `${common.topBarHeight}px`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: '0 0.75rem'\n\t\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t\t Select All\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{(myTeam.loading || beingProcessedIsLoading) && }\n\t\t\t\t\t\t\t\t{!myTeam.loading && !beingProcessedIsLoading && beingProcessedCount === 0 && (\n\t\t\t\t\t\t\t\t\t

{lang.noRecordsFound}

\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!myTeam.loading &&\n\t\t\t\t\t\t\t\t\t!needsProcessingIsLoading &&\n\t\t\t\t\t\t\t\t\tbeingProcessed.map(registration => (\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\tregistration.type === 'time'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? setRegistration(registration.id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: setAbsence(registration.id);\n\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{(myTeam.loading || archivedIsLoading) && }\n\t\t\t\t\t\t\t\t{!myTeam.loading && !archivedIsLoading && archivedCount === 0 && (\n\t\t\t\t\t\t\t\t\t

{lang.noRecordsFound}

\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!myTeam.loading &&\n\t\t\t\t\t\t\t\t\t!archivedIsLoading &&\n\t\t\t\t\t\t\t\t\tarchived.map(registration => (\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\tregistration.type === 'time'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? setRegistration(registration.id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: setAbsence(registration.id);\n\t\t\t\t\t\t\t\t\t\t\t\tdispatch(toggleWorkHourModal(true));\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t]}\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{!selectedRegistration && !selectedAbsence && showSubmitAllComponent == false && (\n\t\t\t\t\t\t

{lang.selectDateToStart}

\n\t\t\t\t\t)}\n\t\t\t\t\t{selectedRegistration && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{selected.isNewType || selectedRegistration === 'new' ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\t{selectedAbsence && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\t{showSubmitAllComponent && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n}\n\nconst componentStyles = (props, isSubmittingAll) => css`\n\t.main-content {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\theight: 100%;\n\t\toverflow: hidden;\n\n\t\t.col {\n\t\t\tflex: 50% 0 1;\n\t\t\tbackground-color: ${colors.white};\n\t\t}\n\n\t\t.col-left {\n\t\t\tbackground-color: ${isSubmittingAll ? '#f2f2f2' : colors.white};\n\t\t\tcursor: ${isSubmittingAll ? 'not-allowed' : 'auto'};\n\t\t\tpointer-events: ${isSubmittingAll ? 'none' : 'auto'};\n\t\t\tborder-right: 1px ${colors.midGrey} solid;\n\t\t\tbox-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.1);\n\t\t\tposition: relative;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t}\n\n\t\t.col-right {\n\t\t\tposition: relative;\n\t\t}\n\t}\n\n\t.meta {\n\t\tcolor: ${colors.darkGrey};\n\t\ttext-align: center;\n\t}\n\n\t// @media (max-width: 768px) {\n\t// .main-content {\n\t// flex-direction: column;\n\n\t// .col-left {\n\t// height: 50vh;\n\t// }\n\n\t// .col-right {\n\t// display: flex;\n\t// flex-direction: column;\n\t// height: 50vh;\n\t// }\n\t// }\n\t// }\n\n\t@media (max-width: 768px) {\n\t\t.main-content {\n\t\t\tflex-direction: unset;\n\n\t\t\t.scroll-hider {\n\t\t\t\tfont-size: 10px !important;\n\t\t\t}\n\n\t\t\t.col {\n\t\t\t\tflex: unset;\n\t\t\t}\n\n\t\t\t.col-left {\n\t\t\t\talign-items: flex-start;\n\t\t\t\twidth: 100% !important;\n\t\t\t\theight: 100% !important;\n\t\t\t}\n\n\t\t\t.col-right {\n\t\t\t\tdisplay: none;\n\t\t\t\tflex-direction: unset;\n\t\t\t\theight: unset;\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport default AdminView;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { connect } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { CSSTransition } from \"react-transition-group\";\nimport Hammer from \"react-hammerjs\";\nimport TinyAnimate from \"TinyAnimate\";\nimport Impetus from \"impetus\";\n\n// Actions\nimport { hideLightBox } from \"../../actions/uiActions\";\n\n//Style\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\n\n// components\nimport { CloseIcon } from \"mdi-react\";\nimport Page from \"./Page\";\n\nfunction Lightbox(props) {\n const { active, closeCallback, images } = props.Lightbox;\n const { hideLightBox } = props;\n\n // State\n const [zoom, setZoom] = useState(1);\n const [translateX, setTranslateX] = useState(0);\n const [translateY, setTranslateY] = useState(0);\n const [dataOnPinchStart, setDataOnPinchStart] = useState();\n\n const [impetusEl] = useState(() => {\n let impetus = new Impetus({\n update: (x, y) => {\n setTranslateX(x);\n setTranslateY(y);\n }\n });\n impetus.pause();\n return impetus;\n });\n const [fittedImageSize, setFittedImageSize] = useState({ width: \"auto\", height: \"auto\", ready: false });\n\n const imageRef = useRef();\n\n // Config\n const MIN_SCALE = 1;\n let MAX_SCALE = 3;\n const ANIMATION_DURATION = 280;\n\n useEffect(() => {\n if (active) {\n window.addEventListener(\"resize\", updateBounds);\n window.addEventListener(\"resize\", onImageLoad);\n setZoom(1);\n setTranslateX(0);\n setTranslateY(0);\n updateBounds();\n impetusEl.setValues(0, 0);\n } else {\n impetusEl.pause();\n }\n return () => {\n window.removeEventListener(\"resize\", updateBounds);\n window.removeEventListener(\"resize\", onImageLoad);\n };\n // eslint-disable-next-line\n }, [active]);\n\n /********************** Functionality ***********************/\n function zoomInWithTap(e) {\n // Get center of doubletaps\n let touchPos = e.center;\n\n // Get position of image\n let imageData = imageRef.current.getBoundingClientRect();\n\n // Calculate relatve offsets\n let offsetLeft = touchPos.x - imageData.left;\n let offsetTop = touchPos.y - imageData.top;\n\n // Convert them to percentage\n let relativeLeft = offsetLeft / imageData.width; // 0-1\n let relativeTop = offsetTop / imageData.height; // 0-1\n\n // Get new size for image\n let naturalWidth = imageRef.current.naturalWidth;\n let naturalHeight = imageRef.current.naturalHeight;\n\n // Checks if image can be scaled by MAX_SCALE factor without pixelating. If it cant it will use\n // the image's original size (NATURAL_WIDTH and NATURAL_HEIGHT)\n let newWidth, newHeight, newScale;\n if (imageData.width * MAX_SCALE < naturalWidth && imageData.height * MAX_SCALE < naturalHeight) {\n newWidth = imageData.width * MAX_SCALE;\n newHeight = imageData.height * MAX_SCALE;\n newScale = MAX_SCALE;\n } else {\n newWidth = naturalWidth;\n newHeight = naturalHeight;\n newScale = naturalWidth / imageData.width;\n }\n\n // Calculate new translate values\n let newTranslateX = restrictTranslateX(newWidth * (0.5 - relativeLeft), newWidth);\n let newTranslateY = restrictTranslateY(newHeight * (0.5 - relativeTop), newHeight);\n\n // Amimate to new zoom position\n TinyAnimate.animate(MIN_SCALE, newScale, ANIMATION_DURATION, s => setZoom(s), \"easeInOutQuad\");\n TinyAnimate.animate(translateX, newTranslateX, ANIMATION_DURATION, x => setTranslateX(x), \"easeInOutQuad\");\n TinyAnimate.animate(translateY, newTranslateY, ANIMATION_DURATION, y => setTranslateY(y), \"easeInOutQuad\");\n\n // Wait for zoom animation\n setTimeout(() => {\n updateBounds();\n impetusEl.setValues(newTranslateX, newTranslateY);\n impetusEl.resume();\n }, ANIMATION_DURATION);\n }\n function zoomOutWithTap() {\n // Pause impetus so it doesn't move the image while zooming out and calculating new styles\n impetusEl.pause();\n\n TinyAnimate.animate(zoom, MIN_SCALE, ANIMATION_DURATION, s => setZoom(s), \"easeInOutQuad\");\n TinyAnimate.animate(translateX, 0, ANIMATION_DURATION, x => setTranslateX(x), \"easeInOutQuad\");\n TinyAnimate.animate(translateY, 0, ANIMATION_DURATION, y => setTranslateY(y), \"easeInOutQuad\");\n }\n\n /********************** Events ***********************/\n function onDoubleTap(e) {\n if (zoom === MIN_SCALE) {\n zoomInWithTap(e);\n } else {\n zoomOutWithTap();\n }\n }\n function onPinchStart(e) {\n impetusEl.pause();\n\n // Get center of doubletaps\n let touchPos = e.center;\n\n // Calculate relatve offsets\n let offsetLeft = touchPos.x;\n let offsetTop = touchPos.y; // - imageData.top;\n\n // Values used throughout the pinch lifetime\n setDataOnPinchStart({\n initialZoom: zoom,\n initialTranslateX: translateX,\n initialTranslateY: translateY,\n offsetLeft,\n offsetTop\n });\n }\n function onPinch(e) {\n let { initialZoom, initialTranslateX, initialTranslateY, offsetLeft, offsetTop } = dataOnPinchStart;\n let scale = initialZoom * e.scale;\n\n /** Limit scale\n * while allowing temporary overscaling to give a more natural limit than a hard stop\n */\n let extraScale = 0;\n if (scale > MAX_SCALE) {\n extraScale = Math.pow(scale - MAX_SCALE, 0.35);\n scale = MAX_SCALE;\n }\n\n // Get translate offsets\n let translateXOffset = initialZoom === MIN_SCALE ? (window.innerWidth / 2 - offsetLeft) * (scale + extraScale - 1) : 0;\n let translateYOffset = initialZoom === MIN_SCALE ? (window.innerHeight / 2 - offsetTop) * (scale + extraScale - 1) : 0;\n\n // Calculate new translate values\n let newTranslateX = e.deltaX + initialTranslateX * e.scale + translateXOffset;\n let newTranslateY = e.deltaY + initialTranslateY * e.scale + translateYOffset;\n\n // Original solution\n setZoom(scale + extraScale);\n setTranslateX(newTranslateX);\n setTranslateY(newTranslateY);\n\n // Old solution\n // setTranslateX(e.deltaX + initialTranslateX * e.scale);\n // setTranslateY(e.deltaY + initialTranslateY * e.scale);\n }\n function onPinchEnd(e) {\n /*\n Cases:\n ---\n 1) Image is fine\n Conditions\n -> zoom is between min and max\n -> image is within bounds\n\n Action\n -> Reenable impetus and update bounds\n \n 2) Image is overscaled but within bound\n Conditions:\n -> zoom is more than max\n -> image is within bounds\n \n Action\n -> scale zoom down to maximum\n -> down-scale transforms by the factor of which the scale is reduced\n \n 3) Image is overscaled but outside of bounds\n -> zoom is more than max\n -> image is not within bounds\n\n Action\n -> animate zoom down to maximum\n -> find transforms that matches the out of bounds one bests\n \n 4) Image is within scale but is without bounds\n -> zoom is within min and max\n -> image is not within bounds\n\n 5) Image is underscaled\n -> zoom is less than min (and image will always be out of bounds in this case)\n \n Action\n -> scale image to minimum zoom and reset transforms\n \n 6) No idea how to end up here!\n Action\n -> Reset view? \n\n ---\n Utilities to make this more readable \n - isOutOfBounds()\n - isOverScaled()\n - isUnderScaled()\n \n */\n\n // 1) image is fine\n if (!isOverScaled() && !isUnderScaled() && isWithinBounds()) {\n reenableImpetus();\n\n // 2) Image is overscaled but within bound\n } else if (isOverScaled() && isWithinBounds()) {\n let newTranslateX = translateX * (MAX_SCALE / zoom);\n let newTranslateY = translateY * (MAX_SCALE / zoom);\n TinyAnimate.animate(zoom, MAX_SCALE, ANIMATION_DURATION, s => setZoom(s), \"easeInOutQuad\");\n TinyAnimate.animate(translateX, newTranslateX, ANIMATION_DURATION, x => setTranslateX(x), \"easeInOutQuad\");\n TinyAnimate.animate(translateY, newTranslateY, ANIMATION_DURATION, y => setTranslateY(y), \"easeInOutQuad\");\n reenableImpetus(ANIMATION_DURATION, { x: newTranslateX, y: newTranslateY });\n\n // 3) Image is overscaled but outside of bounds\n } else if (isOverScaled() && !isWithinBounds()) {\n let downScaleFactor = MAX_SCALE / zoom;\n let imageData = imageRef.current.getBoundingClientRect();\n\n // Calculate new translates\n let newTranslateX = restrictTranslateX(translateX, imageData.width * downScaleFactor);\n let newTranslateY = restrictTranslateY(translateY, imageData.height * downScaleFactor);\n\n TinyAnimate.animate(zoom, MAX_SCALE, ANIMATION_DURATION, s => setZoom(s), \"easeInOutQuad\");\n TinyAnimate.animate(translateX, newTranslateX, ANIMATION_DURATION, x => setTranslateX(x), \"easeInOutQuad\");\n TinyAnimate.animate(translateY, newTranslateY, ANIMATION_DURATION, y => setTranslateY(y), \"easeInOutQuad\");\n\n reenableImpetus(ANIMATION_DURATION, { x: newTranslateX, y: newTranslateY });\n\n // 4) Image is underscaled\n } else if (!isOverScaled() && !isUnderScaled() && !isWithinBounds()) {\n let imageData = imageRef.current.getBoundingClientRect();\n\n let newTranslateX = restrictTranslateX(translateX, imageData.width);\n let newTranslateY = restrictTranslateY(translateY, imageData.height);\n\n TinyAnimate.animate(translateX, newTranslateX, ANIMATION_DURATION, x => setTranslateX(x), \"easeInOutQuad\");\n TinyAnimate.animate(translateY, newTranslateY, ANIMATION_DURATION, y => setTranslateY(y), \"easeInOutQuad\");\n reenableImpetus(ANIMATION_DURATION, { x: newTranslateX, y: newTranslateY });\n\n // 5) Image is underscaled\n } else if (isUnderScaled()) {\n TinyAnimate.animate(zoom, MIN_SCALE, ANIMATION_DURATION, s => setZoom(s), \"easeInOutQuad\");\n TinyAnimate.animate(translateX, 0, ANIMATION_DURATION, x => setTranslateX(x), \"easeInOutQuad\");\n TinyAnimate.animate(translateY, 0, ANIMATION_DURATION, y => setTranslateY(y), \"easeInOutQuad\");\n reenableImpetus(ANIMATION_DURATION, { x: 0, y: 0 }, MIN_SCALE);\n }\n function reenableImpetus(delay = 0, translates, newZoom) {\n setTimeout(() => {\n if (translates) {\n impetusEl.setValues(translates.x, translates.y);\n }\n\n // if newZoom is specified AND new zoom is the same as minimum zoom, don't resume impetus as\n // this means that the image should not be draggable since it isn't zoomed\n if (newZoom && newZoom === MIN_SCALE) {\n return;\n } else {\n updateBounds();\n impetusEl.resume();\n }\n }, delay);\n }\n }\n function onImageLoad() {\n let fittedImageSize = getFittedImageSize();\n setFittedImageSize({\n width: fittedImageSize.width,\n height: fittedImageSize.height,\n ready: true\n });\n }\n\n /********************** Utilities ***********************/\n function getBounds(imageData) {\n let bounds = {};\n\n // Get horizontal bounds\n if (imageData.left > 0) {\n bounds.left = 0;\n bounds.right = 1;\n } else {\n bounds.left = ((imageData.width - window.innerWidth) / 2) * -1;\n bounds.right = (imageData.width - window.innerWidth) / 2;\n }\n\n // // Get vertical bounds\n if (imageData.top > 0) {\n bounds.top = 0;\n bounds.bottom = 1;\n } else {\n bounds.top = ((imageData.height - window.innerHeight) / 2) * -1;\n bounds.bottom = (imageData.height - window.innerHeight) / 2;\n }\n\n return bounds;\n }\n function updateBounds() {\n if (!imageRef.current) return;\n\n let bounds = getBounds(imageRef.current.getBoundingClientRect());\n impetusEl.setBoundX([bounds.left, bounds.right]);\n impetusEl.setBoundY([bounds.top, bounds.bottom]);\n\n if (bounds.bottom === 1) {\n // There is some obscure edge-case where if the image is overscaled\n // at pinchEnd AND not within bounds in the top, the bottom will be\n // set to 1 instead of whatever the actual value should be. This is\n // some kind of weird bug with getBoundingClientRect()\n setTimeout(updateBounds, 500);\n }\n }\n function getFittedImageSize() {\n /**\n * DOCS: Is a substitute background-position: contain\n * Returns an anonymous object with either a width or height key. Will only\n * scale images to their max-size or the specified max-scale from settings\n *\n * Reimplemtation note: Maybe object-fit could substitute this function?\n */\n\n // get imageData\n let imageData = imageRef.current.getBoundingClientRect();\n\n // Get sizes of viewport\n let viewport = {\n width: window.innerWidth,\n height: window.innerHeight\n };\n\n // Get sizes of image (natural size)\n let naturalWidth = imageRef.current.naturalWidth;\n let naturalHeight = imageRef.current.naturalHeight;\n\n // Calculate image ratio to determine which way to scale\n let imageRatio = imageData.width / imageData.height;\n let viewportRatio = viewport.width / viewport.height;\n\n if (imageRatio > viewportRatio) {\n // Scale by width and leave height as auto\n if (naturalWidth > viewport.width) {\n return { width: viewport.width + \"px\", height: \"initial\" };\n } else {\n return { width: naturalWidth + \"px\", height: \"initial\" };\n }\n } else {\n // Scale by height and leave width as auto\n if (naturalHeight > viewport.height) {\n return { height: viewport.height + \"px\", width: \"initial\" };\n } else {\n return { height: naturalHeight + \"px\", width: \"initial\" };\n }\n }\n }\n function restrictTranslateX(translateX, imageWidth) {\n let MAX_newTranslateX = (imageWidth - window.innerWidth) / 2;\n let MIN_newTranslateX = MAX_newTranslateX * -1;\n\n // No translate is needed\n if (imageWidth <= window.innerWidth) {\n return 0;\n }\n\n // newTranslateX is too big\n if (translateX >= MAX_newTranslateX) {\n return MAX_newTranslateX;\n }\n\n // newTranslateX is too small\n if (translateX <= MIN_newTranslateX) {\n return MIN_newTranslateX;\n }\n\n // Return what was passed to the function\n return translateX;\n }\n function restrictTranslateY(translateY, imageHeight) {\n let MAX_newTranslateY = (imageHeight - window.innerHeight) / 2;\n let MIN_newTranslateY = MAX_newTranslateY * -1;\n\n // No translate is needed\n if (imageHeight <= window.innerHeight) {\n return 0;\n }\n\n // newTranslateY is too big\n if (translateY >= MAX_newTranslateY) {\n return MAX_newTranslateY;\n }\n\n // newTranslateY is too small\n if (translateY <= MIN_newTranslateY) {\n return MIN_newTranslateY;\n }\n\n // Return what was passed to the function\n return translateY;\n }\n function isOverScaled() {\n if (zoom > MAX_SCALE) {\n return true;\n } else {\n return false;\n }\n }\n function isUnderScaled() {\n if (zoom < MIN_SCALE) {\n return true;\n } else {\n return false;\n }\n }\n function isWithinBounds() {\n let imageData = imageRef.current.getBoundingClientRect();\n\n // Get calculated max offsets.\n let restrictedTranslates = {\n x: restrictTranslateX(translateX, imageData.width),\n y: restrictTranslateY(translateY, imageData.height)\n };\n\n // Check translateX\n if (\n // Check X\n // Image is too small to have an offset\n (restrictedTranslates.x === 0 && translateX !== 0) ||\n // Images's offset is too big (to far right)\n (restrictedTranslates.x > 0 && translateX > restrictedTranslates.x) ||\n // Images's offset is too small (to far left)\n (restrictedTranslates.x < 0 && translateX < restrictedTranslates.x) ||\n // Check Y\n // Image is too small to have an offset but has one\n (restrictedTranslates.y === 0 && translateY !== 0) ||\n // Images's offset is too big (to far up)\n (restrictedTranslates.y > 0 && translateY > restrictedTranslates.y) ||\n // Images's offset is too small (to far down)\n (restrictedTranslates.y < 0 && translateY < restrictedTranslates.y)\n ) {\n return false;\n } else {\n return true;\n }\n }\n\n return (\n \n \n {images.length !== 0 && (\n \n {/* Extra div to enable ref's (https://github.com/JedWatson/react-hammerjs/issues/83) */}\n
\n \n
\n \n )}\n
\n closeCallback(hideLightBox) : hideLightBox} />\n
\n
\n
\n );\n}\n\nconst container = () => css`\n position: absolute;\n top: 0;\n left: 0;\n\n &.lightbox-enter {\n opacity: 0;\n }\n &.lightbox-enter-active {\n opacity: 1;\n transition: opacity 300ms;\n }\n &.lightbox-exit {\n opacity: 1;\n transform: scale(1);\n }\n &.lightbox-exit-active {\n opacity: 0;\n transition: opacity 300ms;\n }\n\n .actions {\n position: absolute;\n width: 100%;\n left: 0;\n top: 0;\n padding: 0.5rem;\n color: ${colors.white};\n\n svg {\n background-color: rgba(0, 0, 0, 0.4);\n border-radius: 50%;\n padding: 0.5rem;\n width: 2.5rem;\n height: 2.5rem;\n }\n }\n\n .image-container {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n\n img {\n opacity: 0;\n transition: opacity 300ms;\n\n &.show {\n opacity: 1;\n transition: opacity 300ms;\n }\n }\n }\n`;\n\nconst mapStateToProps = state => ({\n Lightbox: state.ui.Lightbox\n});\n\nconst mapDispatchToProps = dispatch => ({\n hideLightBox: bindActionCreators(hideLightBox, dispatch)\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Lightbox);\n","import React from \"react\";\nimport { css } from \"emotion\";\nimport Page from \"./Page\";\nimport TopBar from \"./TopBar\";\nimport ActionWrapper from \"./ActionWrapper\";\nimport { ArrowLeftIcon } from \"mdi-react\";\nimport pageNavigator from \"../../utilities/page-navigator\";\n\nconst SkeletonPage = (props) => (\n \n pageNavigator(\"FRONTPAGE\", \"backward\")}>\n \n \n }\n title={}\n />\n \n);\n\nconst componentStyle = (props) => css`\n .fake-title {\n width: 140px;\n height: 9px;\n background-color: #fff;\n border-radius: 2px;\n opacity: 0.2;\n animation: blink 1.5s infinite;\n margin: 17px auto 0 auto;\n }\n\n @keyframes blink {\n 0%,\n 60% {\n opacity: 0.2;\n }\n\n 70% {\n opacity: 0.4;\n }\n\n 100% {\n opacity: 0.2;\n }\n }\n`;\n\nexport default SkeletonPage;\n","import React, { useState, useEffect } from \"react\";\nimport { format, isAfter, parse } from \"date-fns\";\nimport { connect, useSelector } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { notification } from \"antd\";\n\nimport req from \"../../utilities/request-utility\";\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport common from \"../../style/common\";\n\nimport { ThumbDownOutlineIcon, InfoOutlineIcon, CheckCircleOutlineIcon } from \"mdi-react\";\n// actions\nimport { hideModalPage } from \"../../actions/uiActions\";\n// ui-components\nimport ScrollView from \"../ui/ScrollView\";\nimport Page from \"../ui/Page\";\nimport TextInput from \"../ui/TextInput\";\nimport TextareaInput from \"../ui/TextareaInput\";\nimport DropDown from \"../ui/DropDown\";\nimport DatePicker from \"../ui/DatePicker\";\nimport Button from \"../ui/Button\";\nimport CheckboxGroup from \"../ui/CheckboxGroup\";\n\nfunction AbsenceRegistrationDK(props) {\n const { addRegistration, hideModalPage, registration = {} } = props;\n const lang = useSelector((s) => s.language.language);\n const [formData, setFormData] = useState({\n absenceCode: registration.data ? registration.data.absenceCode : undefined,\n startDate: registration.data\n ? format(parse(registration.data.startDate, \"yyyyMMdd\", 0), \"yyyy-MM-dd\")\n : format(new Date(), \"yyyy-MM-dd\"),\n startTimeMinutes: registration.data ? registration.data.startTime.split(\":\")[1] : \"\",\n startTimeHours: registration.data ? registration.data.startTime.split(\":\")[0] : \"\",\n endDate: registration.data\n ? format(parse(registration.data.endDate, \"yyyyMMdd\", 0), \"yyyy-MM-dd\")\n : format(new Date(), \"yyyy-MM-dd\"),\n endTimeMinutes: registration.data ? registration.data.endTime.split(\":\")[1] : \"\",\n endTimeHours: registration.data ? registration.data.endTime.split(\":\")[0] : \"\",\n note: registration.data ? registration.data.note : \"\",\n fullDay: registration.data ? registration.data.fullDay : false,\n foreman: registration.data ? registration.data.foreman : \"\",\n });\n const [absenceCodes, setAbsenceCodes] = useState([]);\n const [submittingForm, setSubmittingForm] = useState(false);\n const [foremen, setForemen] = useState([]);\n\n useEffect(() => {\n getAbsenceCodes();\n getForemen();\n // eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n if (formData.startDate !== \"\" && formData.endDate !== \"\") {\n if (isAfter(new Date(formData.startDate), new Date(formData.endDate)))\n setFormData({ ...formData, endDate: formData.startDate });\n }\n\n //TODO: Add validation for end time if it's less than the start time\n // if (\n // formData.startDate !== \"\" &&\n // formData.endDate !== \"\" &&\n // formData.endTimeHours !== \"\" &&\n // formData.endTimeMinutes !== \"\" &&\n // formData.startTimeHours !== \"\" &&\n // formData.startTimeMinutes !== \"\"\n // ) {\n // if (\n // isAfter(\n // new Date(`${formData.startDate} ${formData.startTimeHours}:${formData.startTimeMinutes}`),\n // new Date(`${formData.endDate} ${formData.endTimeHours}:${formData.endTimeMinutes}`)\n // )\n // )\n // setFormData({ ...formData, endTimeHours: formData.startTimeHours, endTimeMinutes: formData.startTimeMinutes });\n // }\n // eslint-disable-next-line\n }, [\n formData.startDate,\n formData.endDate,\n formData.endTimeHours,\n formData.endTimeMinutes,\n formData.startTimeHours,\n formData.startTimeMinutes,\n ]);\n\n function getAbsenceCodes() {\n req()(`semcotime/absence-dk/absence-codes-dk`)\n .then(({ data }) => setAbsenceCodes(data))\n .catch((err) => {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `${lang.errorGeneral} ${lang.tryAgainOrContactSupport}`,\n });\n });\n }\n\n const getForemen = () => {\n try {\n req()(`semcotime/foremen/`).then(({ data }) => {\n const assignedIds = data.assigned.map((d) => d.id);\n\n setForemen([\n ...data.assigned,\n { disabled: true, id: \"\", name: \"------------------\" },\n ...data.all.filter((d) => !assignedIds.includes(d.id)),\n ]);\n });\n } catch (err) {\n console.log(\"err: \", err);\n }\n };\n\n function handleFormChange(e, name = null) {\n if (!name) {\n setFormData({ ...formData, [e.target.name]: e.target.value });\n } else {\n setFormData({ ...formData, [name]: e.target.value });\n }\n }\n\n function getStartAndEndTimeAndDate() {\n let startDate = format(parse(formData.startDate, \"yyyy-MM-dd\", 0), \"yyyyMMdd\");\n let endDate = format(parse(formData.endDate, \"yyyy-MM-dd\", 0), \"yyyyMMdd\");\n\n return { startDate, endDate };\n }\n\n function isFormValid() {\n if (formData.startDate && formData.endDate && formData.absenceCode && formData.foreman) {\n if (formData.fullDay) return true;\n else if (formData.endTimeHours && formData.endTimeMinutes && formData.startTimeHours && formData.startTimeMinutes)\n return true;\n } else {\n return false;\n }\n }\n\n const getTime = (date, hours, minutes) => {\n return !formData.fullDay && hours !== \"\" && minutes !== \"\"\n ? format(parse(`${date} ${hours}:${minutes}`, \"yyyyMMdd HH:mm\", 0), \"yyyyMMdd HH:mm\").split(\" \")[1]\n : \"\";\n };\n\n function handleSave() {\n let { startDate, endDate } = getStartAndEndTimeAndDate();\n\n let registrationForm = {\n startDate,\n startTime: getTime(startDate, formData.startTimeHours, formData.startTimeMinutes),\n endDate,\n endTime: getTime(endDate, formData.endTimeHours, formData.endTimeMinutes),\n note: formData.note,\n absenceCode: formData.absenceCode,\n fullDay: formData.fullDay,\n foreman: formData.foreman,\n type: \"absence\",\n };\n\n if (registration.id) registrationForm.id = registration.id;\n\n if (!isFormValid())\n return notification.error({ duration: 7, message: \"FAILED\", description: lang.errorAbsencesRequiredFieldsContent });\n\n setSubmittingForm(true);\n\n addRegistration(registrationForm)\n .then(() => {\n notification.success({ duration: 7, message: \"SUCCESS\", description: lang.savedRegistrationToastContent });\n hideModalPage();\n })\n .catch((err) => {\n let errorMessage = \"Unspecified error\";\n if (err && err.response && err.response.data) errorMessage = err.response.data.message;\n\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `${lang.errorSavingRegistrationToastContent}. Fejlkode: ${errorMessage}`,\n });\n\n setSubmittingForm(false);\n });\n }\n\n return (\n \n \n
\n

Absence Code

\n ({ label: `${d.id} - ${d.name}`, value: d.id }))}\n placeholder=\"Choose absence code\"\n value={formData.absenceCode}\n />\n\n
\n\n

{lang.startDate}

\n handleFormChange({ target: { value: date } }, \"startDate\")}\n />\n\n {!formData.fullDay && (\n
\n
\n

Start Time Hours

\n \n
\n
\n

Start Time Minutes

\n \n
\n
\n )}\n\n

{lang.endDate}

\n handleFormChange({ target: { value: date } }, \"endDate\")}\n />\n\n {!formData.fullDay && (\n
\n
\n

End Time Hours

\n \n
\n
\n

End Time Minutes

\n \n
\n
\n )}\n\n

Foreman

\n ({ disabled: d.disabled, label: d.name, value: d.id }))}\n placeholder=\"Choose a foreman\"\n value={formData.foreman}\n />\n\n
\n
\n handleFormChange({ target: { value: e.length !== 0 ? true : false } }, \"fullDay\")}\n options={[{ id: \"fullDay\", title: \"Full Day\" }]}\n selected={formData.fullDay ? [\"fullDay\"] : []}\n />\n
\n\n
\n\n

{lang.note}

\n \n\n \n
\n
\n
\n );\n}\n\nconst boxPadding = 0.75;\n\nconst componentStyles = () => css`\n background-color: white;\n padding-top: ${common.topBarHeight};\n\n .content-wrapper {\n max-width: 800px;\n margin: 0 auto;\n }\n\n .scroll-view {\n padding: ${boxPadding}rem;\n }\n\n .time-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .time-input-wrapper {\n width: 49%;\n }\n\n p {\n padding: ${boxPadding}rem 0 0 0;\n }\n\n h2 {\n padding: ${boxPadding}rem 0 0.5rem 0;\n }\n\n .fullDayContainer {\n margin-top: 20px;\n }\n\n .seperator {\n display: block;\n width: calc(100% + ${boxPadding * 2}rem);\n margin: 1rem -${boxPadding}rem 0 -${boxPadding}rem;\n height: 1px;\n background-color: ${colors.lightGrey};\n }\n`;\n\nconst mapDispatchToProps = (dispatch) => ({\n hideModalPage: bindActionCreators(hideModalPage, dispatch),\n});\n\nexport default connect(null, mapDispatchToProps)(AbsenceRegistrationDK);\n","import React, { useState } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\n\nimport workHourState from \"../../config/semcotimedk-workhour-states\";\n\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport {\n CheckIcon,\n DeleteEmptyIcon,\n DotsVerticalIcon,\n PlusIcon,\n PencilIcon,\n LockOpenOutlineIcon,\n LockIcon,\n TrashCanOutlineIcon,\n} from \"mdi-react\";\n\n// ui\nimport InlineSpinner from \"../ui/InlineSpinner\";\n\n// actions\nimport { showContextMenu, showModalPage, showDialog, hideDialog } from \"../../actions/uiActions\";\nimport AbsenceRegistrationDK from \"./AbsenceRegistrationDK\";\n\nconst getTitle = (titleString) => {\n let [date, startTime, endTime, fullDay] = titleString.split(\"__\");\n fullDay = JSON.parse(fullDay);\n let returnString = date;\n if (startTime && endTime && !fullDay) returnString += ` ${startTime} - ${endTime}`;\n return returnString;\n};\n\nfunction ListItemDK(props) {\n const { lang, registration, showModalPage, showContextMenu } = props;\n const { ifsData = null } = registration;\n\n const [expanded, setExpanded] = useState(false);\n const [deleting, setDeleting] = useState(false);\n\n const onDelete = async () => {\n setDeleting(true);\n\n await props.deleteRegistration(registration);\n\n setDeleting(false);\n };\n\n return (\n
\n
setExpanded(!expanded)}>\n
\n {registration.state === workHourState.open && }\n {registration.state === workHourState.lockedByForeman && }\n {registration.state === workHourState.locked && }\n {registration.state === workHourState.approved && }\n {registration.state === workHourState.deleted && }\n

{getTitle(registration.timeKey)}

\n
\n
\n
{registration.totalHours}
\n {deleting && }\n {!deleting && (\n <>\n {\n e.stopPropagation();\n showContextMenu([\n {\n icon: ,\n title: lang.edit,\n callback: () =>\n showModalPage({\n content: (\n \n ),\n }),\n },\n {\n icon: ,\n title: lang.delete,\n callback: () =>\n props.showDialog({\n styleType: \"warning\",\n title: \"Delete record\",\n content: \"You're about to delete this registration. Are you sure you want to delete it?\",\n primaryActionTitle: \"YES - Delete\",\n primaryAction: onDelete,\n }),\n },\n ]);\n }}\n />\n \n \n )}\n
\n
\n
\n
\n
\n {registration.state === workHourState.deleted &&
DELETED IN IFS
}\n\n
\n

\n {lang.startDate}: \n {registration.data.startDate}\n

\n

\n {lang.endDate}: \n {registration.data.endDate}\n

\n {registration.data.fullDay ? (\n

\n All Day: \n Yes\n

\n ) : (\n <>\n

\n {lang.startTime}: \n {registration.data.startTime}\n

\n

\n {lang.endTime}: \n {registration.data.endTime}\n

\n \n )}\n

\n {lang.note}: \n {registration.data.note}\n

\n {ifsData && (\n \n \n \n \n \n \n \n \n {ifsData.map((d) => (\n \n \n \n \n ))}\n \n
{lang.wageCode}{lang.hours}
\n {d.WageCode} - {d.WageCodeDesc}\n {d.WageHours} hours
\n )}\n
\n
\n
\n
\n
\n );\n}\n\nconst componentStyles = (props) => css`\n background-color: ${colors.white};\n border-top: 1px ${colors.midGrey} solid;\n border-bottom: 1px ${colors.midGrey} solid;\n margin-bottom: -1px;\n\n svg {\n color: ${props.primaryColor};\n width: 1rem;\n height: 1rem;\n margin-right: 0.5rem;\n margin-top: 2px;\n display: block;\n }\n\n &.collapsed {\n margin: 0;\n border-left: 3px solid transparent;\n transition: margin 240ms ease;\n margin-bottom: -1px;\n\n .hide {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n transition: max-height 240ms ease, opacity 240ms ease, overflow 240ms ease;\n }\n\n .rotate-neutral {\n transform: rotate(0deg);\n transition: transform 240ms ease;\n }\n }\n\n &.expanded {\n margin: 0.65rem 0;\n border-left: 3px solid ${props.primaryColor};\n transition: margin 240ms ease, border-left 240ms ease;\n\n &:first-of-type {\n margin-top: 0px;\n }\n\n .item-header {\n color: ${props.primaryColor};\n\n .rotate {\n transform: rotate(-45deg);\n transition: transform 240ms ease;\n }\n }\n\n .item-details {\n .deleted {\n width: 100%;\n text-align: center;\n background-color: red;\n color: #fff;\n padding: 10px;\n margin-bottom: 15px;\n }\n\n .show {\n max-height: 1000px;\n opacity: 1;\n transition: max-height 240ms ease, opacity 240ms ease;\n }\n }\n }\n\n .item-header {\n display: flex;\n padding: 0.75rem;\n margin-bottom: -1px;\n color: ${colors.darkGrey};\n font-weight: bold;\n\n &:active {\n background-color: ${colors.ultraLightGrey};\n transition: background-color 80ms ease;\n }\n\n .right {\n display: flex;\n margin-left: auto;\n font-weight: bold;\n }\n\n .left {\n display: flex;\n overflow: hidden;\n\n p {\n padding-right: 0.5rem;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n }\n\n .item-details {\n .details {\n padding: 0.5rem 0.75rem 0.25rem 0.75rem;\n color: ${colors.darkGrey};\n\n span {\n font-weight: bold;\n }\n\n p {\n display: block;\n margin-bottom: 0.5rem;\n }\n }\n }\n`;\n\nconst mapStateToProps = (state) => ({\n lang: state.language.language,\n primaryColor: state.appConfig.primaryColor,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n showContextMenu: bindActionCreators(showContextMenu, dispatch),\n showModalPage: bindActionCreators(showModalPage, dispatch),\n showDialog: bindActionCreators(showDialog, dispatch),\n hideDialog: bindActionCreators(hideDialog, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ListItemDK);\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { format, parse, subDays } from \"date-fns\";\nimport { notification } from \"antd\";\n\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport { ArrowBackIcon, AlertDecagramIcon, CloudDownloadIcon } from \"mdi-react\";\n\n// utilities\nimport pageNavigator from \"../../utilities/page-navigator\";\nimport getPageFromId from \"../../utilities/get-page-from-id\";\nimport getBackButtonUrl from \"../../utilities/get-back-button-url\";\n\n// actions\nimport { showModalPage, hideModalPage } from \"../../actions/uiActions\";\n\n// ui-components\nimport Page from \"../ui/Page\";\nimport TopBar from \"../ui/TopBar\";\nimport ScrollView from \"../ui/ScrollView\";\nimport StatusBox from \"../ui/StatusBox\";\n\n// components\nimport AbsenceRegistrationDK from \"./AbsenceRegistrationDK\";\nimport AbsenceListItemDK from \"./AbsenceListItemDK\";\n\n// dummy-data\nimport ActionWrapper from \"../ui/ActionWrapper\";\nimport common from \"../../style/common\";\nimport req from \"../../utilities/request-utility\";\nimport Button from \"../ui/Button\";\nimport { addDays } from \"date-fns/esm\";\n\nclass AbsenceOverviewDK extends Component {\n constructor(props) {\n super(props);\n this.state = {\n page: {},\n // forms\n formData: [],\n validRegistrationForm: false,\n filterData: [],\n dropDownLists: {},\n fetchToDate: format(new Date(), \"yyyyMMdd\"),\n // registrations\n loading: false,\n error: false,\n isFirstFetch: true,\n absenceData: [],\n filteredRegistrations: [],\n };\n }\n\n componentDidMount() {\n this._isMounted = true;\n let { pages, match } = this.props;\n\n this.setState({\n page: getPageFromId(pages, match.params.pageId),\n backButtonUrl: getBackButtonUrl(getPageFromId(pages, match.params.pageId), pages),\n });\n\n this.getRegistrations();\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n }\n\n getRegistrations = async (filterData) => {\n try {\n this.setState({ loading: true, isFirstFetch: false });\n\n let toDate = this.state.fetchToDate;\n let fromDate = format(subDays(parse(toDate, \"yyyyMMdd\", 0), 7), \"yyyyMMdd\");\n\n // If it is first fetch, fetch a year into the future as well as a week into the past\n // This is done to get future registrations as well\n if (this.state.absenceData.length === 0) {\n toDate = format(addDays(parse(toDate, \"yyyyMMdd\", 0), 365), \"yyyyMMdd\");\n }\n\n let { data } = await req()(`semcotime/absence-dk/?fromDate=${fromDate}&toDate=${toDate}`);\n\n this._isMounted === true && this.setState({ absenceData: [...this.state.absenceData, ...data] });\n this.setState({ loading: false });\n\n // Update fromDate\n this.setState({ fetchToDate: format(subDays(parse(fromDate, \"yyyyMMdd\", 0), 0), \"yyyyMMdd\") });\n } catch (err) {\n this.setState({ loading: false });\n this.setState({ error: true });\n }\n };\n\n addRegistration = async (registration) => {\n const { absenceData } = this.state;\n\n return new Promise((resolve, reject) => {\n req()\n .post(`semcotime/absence-dk/`, registration)\n .then(({ data }) => {\n resolve(data);\n const sortedAbsenceData = [...absenceData, data].sort((a, b) => (a.timeKey > b.timeKey ? -1 : 1));\n this.setState({ absenceData: sortedAbsenceData });\n })\n .catch(reject);\n });\n };\n\n updateRegistration = async (registration) => {\n const { absenceData } = this.state;\n\n return new Promise((resolve, reject) => {\n req()\n .put(`semcotime/absence-dk/${registration.id}`, registration)\n .then(({ data }) => {\n resolve(data);\n const sortedAbsenceData = absenceData\n .map((d) => (d.id === data.id ? data : d))\n .sort((a, b) => (a.timeKey > b.timeKey ? -1 : 1));\n this.setState({ absenceData: sortedAbsenceData });\n })\n .catch(reject);\n });\n };\n\n deleteRegistration = async (registration) => {\n try {\n await req().delete(`semcotime/absence-dk/${registration.id}`);\n\n const updatedAbsenceData = this.state.absenceData.filter((absence) => absence.id !== registration.id);\n\n this.setState({ absenceData: updatedAbsenceData });\n } catch (err) {\n let errorMessage = \"Unspecified error\";\n if (err && err.response && err.response.data) errorMessage = err.response.data.error;\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `Could not delete absence. Error: ${errorMessage}`,\n });\n }\n };\n\n render() {\n let { page, backButtonUrl, absenceData, loading, error } = this.state;\n let { showModalPage, lang } = this.props;\n\n return (\n \n pageNavigator(backButtonUrl, \"backward\")} />}\n actionRight={\n {\n showModalPage({\n content: () => (\n \n ),\n });\n }}\n >\n {lang.register}\n \n }\n />\n \n {/* Error */}\n {error && !loading && (\n }\n title={lang.errorLoadingRegistrationToastTitle}\n content={lang.errorLoadingRegistrationToastContent}\n />\n )}\n\n {/* Load absence registrations */}\n {!error &&\n absenceData.map((d) => (\n \n ))}\n\n <>\n \n {\" \"}\n {lang.loadAnotherWeek}\n \n

\n {lang.diplayingRegistrationsFrom} {format(parse(this.state.fetchToDate, \"yyyyMMdd\", 0), \"yyyy-MM-dd\")}{\" \"}\n {lang.untilToday}\n

\n \n
\n
\n );\n }\n}\n\nconst componentStyles = () => css`\n .filter {\n padding: 0.75rem;\n }\n\n .apply-filters-modal {\n padding: 0, 75rem;\n background-color: ${colors.white};\n }\n\n .filters-button {\n background-color: ${colors.midGrey};\n color: ${colors.black};\n display: block;\n width: calc(100% - 1.5rem);\n border: 0px transparent none;\n border-radius: 3px;\n font-size: 0.95rem;\n padding: 0.75rem 1.25rem;\n margin: 0.75rem;\n text-align: left;\n position: relative;\n\n .icon-right {\n position: absolute;\n right: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n }\n }\n`;\n\nconst mapStateToProps = (state) => ({\n pages: state.pages.pages,\n lang: state.language.language,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n showModalPage: bindActionCreators(showModalPage, dispatch),\n hideModalPage: bindActionCreators(hideModalPage, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AbsenceOverviewDK);\n","import React, { useEffect, useLayoutEffect, useState } from \"react\";\nimport Page from \"../ui/Page\";\nimport TopBar from \"../ui/TopBar\";\nimport usePageAndBackButtonURL from \"../../hooks/usePageAndBackButtonURL\";\nimport ActionWrapper from \"../ui/ActionWrapper\";\nimport pageNavigator from \"../../utilities/page-navigator\";\nimport { ArrowBackIcon, InfoOutlineIcon, PlusIcon } from \"mdi-react\";\nimport { css } from \"emotion\";\nimport InlineSpinner from \"../ui/InlineSpinner\";\nimport StatusBox from \"../ui/StatusBox\";\nimport colors from \"../../style/colors\";\nimport { parse, format, startOfMonth, endOfMonth } from \"date-fns\";\nimport req from \"../../utilities/request-utility\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\n\nfunction WorkTimeTable(props) {\n const { page, backButtonURL } = usePageAndBackButtonURL(props);\n const [showDetails, setShowDetails] = useState(false);\n const [filterDates, setFilterDates] = useState({\n fromDate: format(startOfMonth(new Date()), \"yyyy-MM-dd\"),\n toDate: format(endOfMonth(new Date()), \"yyyy-MM-dd\"),\n });\n\n const [tableData, setTableData] = useState({\n data: {},\n error: false,\n loading: false,\n });\n\n function getTableData() {\n if (!filterDates.fromDate || !filterDates.toDate) return;\n\n setTableData({\n ...tableData,\n loading: true,\n error: false,\n });\n\n req()(\n `semcotime/work-hours/v3/table-data?fromDate=${filterDates.fromDate.replace(\n /-/g,\n \"\"\n )}&toDate=${filterDates.toDate.replace(/-/g, \"\")}`\n )\n .then(({ data }) => {\n setTableData({\n loading: false,\n error: false,\n data,\n });\n })\n .catch((err) => {\n setTableData({\n loading: false,\n error: true,\n });\n });\n }\n\n function handleDateChange(e) {\n setFilterDates({\n ...filterDates,\n [e.target.name]: e.target.value,\n });\n }\n\n useEffect(() => {\n getTableData();\n // eslint-disable-next-line\n }, [filterDates]);\n\n useLayoutEffect(() => {\n let el = document.getElementById(\"custom-scroll-wrapper-kasd872jhKsd72\");\n disableBodyScroll(el);\n return () => {\n enableBodyScroll(el);\n };\n }, []);\n\n return (\n \n pageNavigator(backButtonURL, \"backward\")}>\n \n \n }\n />\n
\n

Showing from

\n \n

to

\n \n
\n {tableData.loading && !tableData.error && }\n\n {!tableData.loading && !tableData.error && tableData.data.data && tableData.data.data.length === 0 && (\n }\n >\n )}\n\n
\n {!tableData.loading && !tableData.error && tableData.data.data && tableData.data.data.length > 0 && (\n \n \n \n \n\n {/* Headers or date */}\n {tableData.data.dates.map((date) => (\n \n ))}\n \n \n\n \n {tableData.data.data.map((row) => (\n \n \n\n {row.data.map((dataPoint) => (\n \n ))}\n \n ))}\n \n
\n
\n
\n {/* Show details */}\n setShowDetails(!showDetails)}>\n \n {showDetails && \"Hide\"}\n {!showDetails && \"Show\"} details\n \n
\n\n

Total

\n
\n
{format(parse(date, \"yyyy-MM-dd\", 0), \"eee d/M\")}
\n
\n
\n {showDetails && (\n <>\n
\n Project: {row.project}\n
\n
\n Sub Project: {row.subProject}\n
\n \n )}\n\n
{row.reportCode}
\n
{row.reportCodeDescription}
\n
\n

\n {row.data.reduce((el, acc) => Number(el) + Number(acc), 0)}\n

\n
\n
{dataPoint}
\n )}\n
\n
\n );\n}\n\nconst componentStyles = () => css`\n .inline-scroll-wrapper {\n overflow-x: auto;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n }\n\n .date-selector-bar {\n height: 55px;\n border-bottom: 1px ${colors.midGrey} solid;\n background-color: ${colors.white};\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1rem;\n\n & > div {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n input {\n margin: 0 0.5rem;\n color: ${colors.darkGrey};\n border: 1px ${colors.darkGrey} dashed;\n border-width: 0 0 1px 0;\n font-size: 1rem;\n }\n\n @media screen and (max-width: 500px) {\n flex-wrap: wrap;\n font-size: 0.9rem;\n padding: 0.5rem 0;\n height: initial;\n\n input {\n font-size: 0.9rem;\n flex-basis: 50%;\n }\n p {\n text-align: right;\n flex-basis: 30%;\n }\n\n p,\n input {\n margin-bottom: 0.25rem;\n flex-shrink: 0;\n }\n }\n }\n\n table {\n position: relative;\n border-collapse: collapse;\n min-width: 100%;\n min-width: calc(100% + 1px);\n min-height: calc(100% + 1px);\n\n .fake-total-column {\n width: 40px;\n text-align: center;\n margin-left: 1rem;\n padding-left: 0.3rem;\n height: 100%;\n flex-shrink: 0;\n }\n\n th.no-data {\n color: ${colors.midGrey};\n }\n\n .body-label {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .show-more-button {\n display: flex;\n justify-content: space-between;\n white-space: nowrap;\n\n svg {\n margin-right: 0.15rem;\n }\n\n button {\n display: flex;\n align-items: center;\n }\n }\n\n &.show-details {\n .meta-info-wrapper {\n margin-bottom: 0.3rem;\n }\n }\n\n &.hide-details {\n .meta-info-wrapper {\n margin-bottom: 0.15rem;\n /* white-space: nowrap; */\n }\n }\n\n /* All cells */\n td,\n th {\n padding: 0.5em;\n font-size: 0.85rem;\n font-weight: 400;\n color: ${colors.black};\n min-width: 50px;\n }\n\n /* Cells in header */\n thead th {\n position: -webkit-sticky; /* for Safari */\n position: sticky;\n top: 0;\n z-index: 1;\n background-color: ${colors.ultraLightGrey};\n color: ${colors.darkGrey};\n border-bottom: 1px ${colors.midGrey} solid;\n border-right: 1px ${colors.midGrey} solid;\n box-shadow: 1px 1px 0 0 ${colors.midGrey};\n\n &:first-child {\n left: 0;\n z-index: 2;\n }\n }\n\n /* Cells in header */\n\n tbody th {\n position: -webkit-sticky; /* for Safari */\n position: sticky;\n left: 0;\n background: #fff;\n border-bottom: 1px ${colors.midGrey} solid;\n border-right: 1px ${colors.midGrey} solid;\n\n &:first-of-type {\n z-index: 1;\n text-align: left;\n background-color: ${colors.white};\n box-shadow: 1px 0 0 0 ${colors.midGrey};\n\n span.meta {\n color: ${colors.darkGrey};\n }\n }\n }\n }\n`;\n\nexport default WorkTimeTable;\n","import React, { memo, useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Form, Modal, notification } from \"antd\";\nimport moment from \"moment\";\nimport * as yup from \"yup\";\nimport { isEmpty, sortBy } from \"lodash\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport req from \"../../utilities/request-utility\";\n\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\n\n// actions\nimport { hideModalPage } from \"../../actions/uiActions\";\n\n// ui-components\nimport ScrollView from \"../ui/ScrollView\";\nimport Page from \"../ui/Page\";\nimport DropDown from \"../ui/DropDown\";\nimport DatePicker from \"../ui/DatePicker\";\nimport Button from \"../ui/Button\";\nimport common from \"../../style/common\";\nimport InlineSpinner from \"../ui/InlineSpinner\";\nimport StatusBox from \"../ui/StatusBox\";\nimport TimeRegistrationList from \"../semco-time/TimeRegistrationList\";\n\nimport { useDropdownData } from \"./hooks\";\n\nconst WorkTimeRegistration = ({ addRegistration, registration, updateRegistration }) => {\n const dispatch = useDispatch();\n const lang = useSelector(({ language }) => language.language);\n\n // Api data\n const [foremen, setForemen] = useState([]);\n\n // Local data\n const [isFormReady, setIsFormReady] = useState(true);\n const [submittingForm, setSubmittingForm] = useState(false);\n const [errorLoadingFormData, setErrorLoadingFormData] = useState(false); //error page\n const [tradeCodesList, setTradeCodesList] = useState([]);\n\n const getForemen = () => {\n try {\n setIsFormReady(false);\n\n req()(`semcotime/foremen/`).then(({ data }) => {\n const assignedIds = data.assigned.map((d) => d.id);\n\n setForemen([\n ...data.assigned,\n { disabled: true, id: \"\", name: \"------------------\" },\n ...data.all.filter((d) => !assignedIds.includes(d.id)),\n ]);\n });\n\n setIsFormReady(true);\n } catch (err) {\n setErrorLoadingFormData(true);\n }\n };\n\n const schema = yup.object().shape({\n //validations\n date: yup.string().required(\"Date is required\"),\n detailedReportingEnabled: yup.boolean(),\n location: yup.string().required(\"Location is required\"),\n project: yup.string().required(\"Project is required\"),\n subProject: yup.string().required(\"Sub Project is required\"),\n activity: yup.string().required(\"Project Activity is required\"),\n trade: yup.string().required(\"Trade is required\"),\n foreman: yup.string().required(\"Foreman is required\"),\n timeRegistrations: yup\n .array()\n .of(\n yup.object().shape({\n savedByBlueCollar: yup.boolean(),\n })\n )\n .compact((v) => !v.savedByBlueCollar) //check if there is time registration that is not SAVED\n .min(1, \"Time registration must have at least 1 saved registation\"),\n });\n\n const defaultValues = {\n date: \"\",\n detailedReportingEnabled: false,\n location: \"\",\n project: \"\",\n subProject: \"\",\n activity: \"\",\n trade: \"\",\n foreman: \"\",\n endOfRotation: false,\n timeRegistrations: [],\n nptHott: [],\n type: \"time\",\n };\n\n const {\n control,\n formState: { errors },\n getValues,\n reset,\n setValue,\n handleSubmit,\n watch,\n } = useForm({\n defaultValues,\n resolver: yupResolver(schema),\n });\n // console.log(\"errors: \", errors);\n // console.log(\"watch: \", watch());\n\n const {\n dabLocations,\n dabLocationsIsFetching,\n dabTradeCodes,\n dabTradeIsFetching,\n defaultEmployeeValues,\n defaultEmployeeValuesStatus,\n defaultEmployeeValuesIsFetching,\n defaultProjectSubProjectAndActivityData,\n defaultProjectSubProjectAndActivityStatus,\n projectData,\n projectActivityData,\n projectStatus,\n projectActivityStatus,\n subProjectData,\n subProjectStatus,\n } = useDropdownData(watch());\n\n const getProjectActivityPlaceholder = () => {\n if (projectActivityStatus === \"loading\" || projectActivityStatus === \"idle\") {\n return lang.loading;\n } else if (projectActivityData.length === 0) {\n return lang.noActivities;\n } else {\n return lang.chooseActivity;\n }\n };\n\n const getSubProjectPlaceholder = () => {\n if (subProjectStatus === \"loading\" || subProjectStatus === \"idle\") {\n return lang.loading;\n } else if (subProjectData.length === 0) {\n return \"No subprojects found\";\n } else {\n return lang.chooseASubproject;\n }\n };\n\n useEffect(() => {\n setTradeCodesList(dabTradeCodes);\n }, [dabTradeCodes.length]);\n\n useEffect(() => {\n getForemen();\n\n // deletes old form layout in local storage\n let localStorageForm = localStorage.getItem(\"semcotime-last-time-input\");\n if (localStorageForm) {\n if (\n !JSON.parse(localStorageForm).hasOwnProperty(\"detailedReportingEnabled\") &&\n !JSON.parse(localStorageForm).hasOwnProperty(\"nptHott\")\n ) {\n console.log(\"-- OLD FORM DETECTED IS DELETED --\");\n localStorage.removeItem(\"semcotime-last-time-input\");\n }\n }\n }, []);\n\n useEffect(() => {\n // form onload edit or from local storage\n if (defaultEmployeeValuesStatus === \"success\" && isEmpty(registration)) {\n const { employeeTrade = \"\" } = defaultEmployeeValues;\n\n // to condition when editing\n setValue(\"trade\", employeeTrade);\n }\n }, [defaultEmployeeValuesIsFetching]);\n\n useEffect(() => {\n if (\n !defaultEmployeeValuesIsFetching &&\n defaultEmployeeValues.employeeTrade &&\n getValues(\"trade\") !== defaultEmployeeValues.employeeTrade\n ) {\n const defaultEmployeeTrade = dabTradeCodes.filter((d) => d.DabTradeId === defaultEmployeeValues.employeeTrade)[0];\n notification.warning({\n description: `${lang.tradeNotDefault} (${defaultEmployeeTrade.DabTradeId} - ${defaultEmployeeTrade.DabTradeDesc}).`,\n });\n }\n }, [getValues(\"trade\")]);\n\n useEffect(() => {\n if (registration) {\n console.log(\"--LOAD REG FORM--\");\n //if edit\n reset(registration.data);\n } else {\n // if add with last form used\n const lastForm = localStorage.getItem(\"semcotime-last-time-input\");\n if (lastForm) {\n console.log(\"--LOAD LOCAL FORM--\");\n reset(JSON.parse(lastForm));\n }\n }\n }, [registration]);\n\n if (!isFormReady && !errorLoadingFormData) {\n return (\n \n \n \n );\n }\n\n if (errorLoadingFormData) {\n return (\n \n \n \n );\n }\n\n const onSubmit = (formData, toOtherDay = false) => {\n const proceedToSubmit = () => {\n setSubmittingForm(true);\n const request = registration ? updateRegistration : addRegistration;\n\n Promise.all([request({ ...formData, type: \"time\" })]) // to fix, not setting type as default\n .then(() => {\n let nextDay = \"\";\n if (toOtherDay) {\n localStorage.setItem(\n \"semcotime-last-time-input\",\n JSON.stringify({ ...formData, date: moment(formData.date).add(1, \"days\").format(\"YYYY-MM-DD\") })\n );\n nextDay = moment(formData.date).add(1, \"days\").format(\"YYYY-MM-DD\");\n setValue(\"date\", nextDay);\n setSubmittingForm(false);\n } else {\n dispatch(hideModalPage());\n }\n\n notification.success({\n duration: 7,\n message: \"SUCCESS\",\n description: `${lang.savedRegistrationToastContent}. ${\n toOtherDay ? lang.timeRegistrationFormDateNowIs.replace(\"{{placeholder}}\", nextDay) : \"\"\n }`,\n });\n })\n .catch((err) => {\n const { response = {} } = err;\n\n // lang.errorSavingRegistrationToastContent\n notification.error({ duration: 7, message: \"FAILED\", description: response.data });\n setSubmittingForm(false);\n });\n };\n\n // check if there is unsaved time regs\n if (watch(\"timeRegistrations\").length !== formData.timeRegistrations.length) {\n Modal.confirm({\n title: \"Unsaved Time Registration Detected\",\n content: \"Unsaved time registrations will be discarded. Proceed? \",\n onOk: () => {\n proceedToSubmit();\n },\n });\n } else {\n proceedToSubmit();\n }\n };\n\n return (\n \n {console.log(\"--RENDER--\")}\n \n
\n
\n {/* DATE */}\n

{lang.timeRegistrationFormDate}

\n {\n return (\n <>\n {\n onChange(date);\n }}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* LOCATION */}\n

{lang.location}

\n {\n return (\n <>\n ({ label: d.DabLocationValue, value: d.DabLocationValue })),\n \"DabLocationId\"\n )\n : []\n }\n placeholder={lang.chooseADabLocation}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* PROJECT */}\n

{lang.project}

\n {\n return (\n <>\n {\n setValue(\"subProject\", \"\");\n setValue(\"activity\", \"\");\n\n //NPT AND HOTT ENABLED\n const isDetailedReportingEnabled = projectData.filter((d) => d.id === e.target.value)[0]\n .detailedReportingEnabled;\n setValue(\"detailedReportingEnabled\", isDetailedReportingEnabled);\n\n if (isDetailedReportingEnabled) {\n notification.info({\n duration: 3,\n message: \"Detailed Reporting\",\n description: \"The selected project has detailed reporting enabled\",\n });\n }\n\n onChange(e);\n }}\n options={projectData.map((d) => ({\n label: `${d.id} - ${d.name}`,\n value: d.id,\n }))}\n placeholder={lang.timeRegistrationFormProjectPlaceholder}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* SUB-PROJECT */}\n {getValues(\"project\") && (\n <>\n

{lang.subproject}

\n {\n return (\n <>\n ({ label: `${d.id} - ${d.description}`, value: d.id }))}\n placeholder={getSubProjectPlaceholder()}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n \n )}\n\n {/* ACTIVITY */}\n {getValues(\"project\") && getValues(\"subProject\") && (\n <>\n

{lang.activity}

\n {\n return (\n <>\n ({ label: `${d.no} - ${d.description}`, value: d.id }))}\n placeholder={getProjectActivityPlaceholder()}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n \n )}\n\n {/* TRADE */}\n

{lang.dabTrade}

\n {\n return (\n <>\n ({\n label: `${d.DabTradeId} - ${d.DabTradeDesc}`,\n value: d.DabTradeId,\n }))\n : []\n }\n placeholder={lang.chooseADabTrade}\n value={value}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n {/* FOREMAN */}\n

{lang.timeRegistrationFormForeman}

\n {\n return (\n <>\n ({ disabled: d.disabled, label: d.name, value: d.id }))}\n placeholder={lang.timeRegistrationFormForemanPlaceholder}\n value={parseInt(value)}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n
\n {/* TIME REGISTRATION */}\n {\n return (\n <>\n {\n // set End Of Rotation to TRUE when selecting Heli Time Home\n // if true , no localstorage\n\n setValue(\n \"endOfRotation\",\n e.some((d) => d.savedByBlueCollar && d.type === 6)\n );\n\n onChange(e);\n }}\n location={watch(\"location\")}\n locationIFSRules={dabLocations}\n locationIsLoading={dabLocationsIsFetching}\n />\n {error &&
{error.message}
}\n \n );\n }}\n />\n\n
\n {!registration && (\n onSubmit(e, true))}\n >\n {lang.timeRegistrationFormSaveAndCopyToNewDay}\n \n )}\n\n onSubmit(e, false))}\n >\n {!registration ? lang.save : \"Update\"}\n \n
\n \n
\n
\n
\n );\n};\n\nconst componentStyles = () => css`\n background-color: white;\n padding-top: ${common.topBarHeight}px;\n\n .content-wrapper {\n max-width: 800px;\n margin: 0 auto;\n }\n\n .time-input {\n display: flex;\n align-items: center;\n }\n\n .scroll-view {\n padding: 0.75rem 0.75rem 5rem 0.75rem;\n }\n\n p {\n padding: 0.75rem 0 0 0;\n }\n\n h2:not(:first-child) {\n border-top: 1px solid ${colors.lightGrey};\n margin: 0.75rem -0.75rem 0 -0.75rem;\n padding: 0.75rem 0.75rem 0 0.75rem;\n }\n\n .activity {\n display: flex;\n align-items: center;\n border-top: 1px solid ${colors.lightGrey};\n padding: 0.75rem 0.75rem 0.75rem 0;\n margin: 0 -0.75rem 0 0rem;\n\n &:last-of-type {\n border-bottom: 1px solid ${colors.lightGrey};\n }\n\n .name {\n flex: 1 1 70%;\n padding: 0;\n }\n\n svg {\n height: 40px; /* WARNING: Magic number */\n }\n\n input {\n flex: 1 1 2rem;\n margin: 0 0.5rem 0 0.5rem;\n }\n }\n\n .flex {\n display: flex;\n justify-content: space-between;\n }\n\n .note {\n color: rgb(110, 110, 110);\n }\n\n .fieldError {\n color: red;\n }\n\n .actionButtons {\n display: flex;\n justify-content: flex-end;\n gap: 15px;\n margin-top: 40px;\n\n button {\n width: auto !important;\n }\n }\n .seperator {\n background-color: ${colors.lightGrey};\n height: 1px;\n margin: 1.5rem -0.75rem 1rem -0.75rem;\n }\n`;\n\nexport default memo(WorkTimeRegistration);\n","import React, { useEffect, useState } from \"react\";\nimport { connect, useSelector } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { css } from \"emotion\";\nimport { keyBy } from \"lodash\";\nimport moment from \"moment\";\n\nimport colors from \"../../style/colors\";\n\nimport workHourState from \"../../config/semcotimedk-workhour-states\";\n\n// actions\nimport { updateModalPage } from \"../../actions/uiActions\";\n\n// ui-components\nimport ScrollView from \"../ui/ScrollView\";\nimport Page from \"../ui/Page\";\nimport InlineSpinner from \"../ui/InlineSpinner\";\nimport StatusBox from \"../ui/StatusBox\";\nimport common from \"../../style/common\";\nimport req from \"../../utilities/request-utility\";\n\n// utilities\nimport getTotalHours from \"../../utilities/get-total-hours\";\n\n//components\nimport TimeRegistrationList from \"../semco-time/TimeRegistrationList\";\n\nfunction WorkTimeDetails(props) {\n const lang = useSelector((s) => s.language.language);\n const { registration } = props;\n\n // The first element in a the list of registrations for this day (i know.. It makes little sense)\n const registrationExtract = registration;\n const [detailsData, setDetailsData] = useState(null);\n\n const [metaData, setMetaData] = useState({ activity: null, project: null, subProject: null });\n const getAdditionalData = async (data) => {\n try {\n const [{ data: project }, { data: subProject }, { data: activity }, { data: dabTrade }] = await Promise.all([\n req()(`semcotime/projects/${data.project}`),\n req()(`semcotime/projects/${data.project}/sub-projects/${data.subProject}`),\n req()(\n `semcotime/projects/${data.project}/sub-projects/${data.subProject}/activities/${\n data.hasOwnProperty(\"timeRegistrations\") ? data.activity : data.projectActivity\n }`\n ),\n req()(`semcotime/dab-trade-codes`),\n ]);\n const dabTradeObj = keyBy(dabTrade, \"DabTradeId\");\n\n const dataTrade = data.hasOwnProperty(\"timeRegistrations\") ? data.trade : data.dabTrade;\n setMetaData({\n activity,\n project,\n subProject,\n dabTrade: dataTrade ? (dabTradeObj[dataTrade] ? dabTradeObj[dataTrade] : null) : null,\n });\n } catch (error) {\n console.log(error);\n }\n };\n\n /** As some data isn't available in the overview, this function gets what is missing from the api */\n const getDetailsData = async () => {\n try {\n const {\n data: { data },\n } = await req()(`semcotime/work-hours-dk/${registrationExtract.id}`);\n\n setDetailsData(data);\n getAdditionalData(data);\n } catch (err) {\n setDetailsData(\"error\");\n }\n };\n\n function getParsedDateTime(dateString) {\n try {\n return new Date(dateString).toDateString().split(\" \").slice(1).join(\" \");\n } catch {\n return lang.noDate;\n }\n }\n\n function getTime(hours, minutes) {\n if (hours < 10) {\n return `0${hours}:${minutes}`;\n } else {\n return `${hours}:${minutes}`;\n }\n }\n\n useEffect(() => {\n getDetailsData();\n // eslint-disable-next-line\n }, []);\n\n console.log(\"registrationExtract: \", registrationExtract);\n console.log(\"metaData: \", metaData);\n console.log(\"detailsData: \", detailsData);\n return (\n \n \n {detailsData === null && }\n {detailsData !== null && detailsData === \"error\" && }\n\n {detailsData !== null && detailsData !== \"error\" && registration.state === workHourState.deleted && (\n
DELETED IN IFS
\n )}\n\n {detailsData !== null && detailsData !== \"error\" && (\n <>\n {/* general */}\n

{lang.general}

\n {registrationExtract.data.hasOwnProperty(\"timeRegistrations\") ? (\n <>\n
\n

{lang.date}

\n

{moment(detailsData.date).format(\"DD/MM/YY dddd\")}

\n
\n
\n

{lang.location}

\n

{detailsData.location}

\n
\n
\n

{lang.project}

\n

{metaData.project ? metaData.project.name : detailsData.project}

\n
\n
\n

{lang.subproject}

\n

{metaData.subProject ? metaData.subProject.description : detailsData.subproject}

\n
\n
\n

{lang.activity}

\n

\n {metaData.activity\n ? `${metaData.activity.id} - ${metaData.activity.description}`\n : detailsData.projectActivity}\n

\n
\n
\n

{lang.dabTrade}

\n

{metaData.dabTrade ? `${metaData.dabTrade.DabTradeId} - ${metaData.dabTrade.DabTradeDesc}` : \"N/A\"}

\n
\n
\n

Time Registrations:

\n \n
\n \n ) : (\n <>\n
\n

{lang.project}

\n

{metaData.project ? metaData.project.name : detailsData.project}

\n
\n
\n

{lang.subproject}

\n

{metaData.subProject ? metaData.subProject.description : detailsData.subproject}

\n
\n
\n

{lang.activity}

\n

\n {metaData.activity\n ? `${metaData.activity.id} - ${metaData.activity.description}`\n : detailsData.projectActivity}\n

\n
\n
\n

{lang.dabTrade}

\n

{metaData.dabTrade ? `${metaData.dabTrade.DabTradeId} - ${metaData.dabTrade.DabTradeDesc}` : \"N/A\"}

\n
\n
\n

{lang.location}

\n

{detailsData.dabLocation}

\n
\n\n
\n

{lang.customerDetail}

\n

{detailsData.customerDetail}

\n
\n
\n

{lang.customerNote}

\n

{detailsData.customerNote}

\n
\n
\n

{lang.transport}

\n

{detailsData.transport ? \"Yes\" : \"No\"}

\n
\n
\n

{lang.heliTime}

\n

{detailsData.heliTime ? \"Yes\" : \"No\"}

\n
\n
\n

{lang.standby}

\n

{detailsData.standby ? \"Yes\" : \"No\"}

\n
\n {/* Date and time */}\n
\n

{lang.shift}

\n

{detailsData.shift}

\n
\n
\n

{lang.changeShift}

\n

{detailsData.changeShift ? \"Yes\" : \"No\"}

\n
\n
\n

{lang.date}

\n

{getParsedDateTime(detailsData.date)}

\n
\n\n
\n

{lang.startTime}

\n

{getTime(detailsData.startTimeHours, detailsData.startTimeMinutes)}

\n
\n
\n

{lang.endTime}

\n

{getTime(detailsData.endTimeHours, detailsData.endTimeMinutes)}

\n
\n
\n

{lang.hours}

\n

{getTotalHours(detailsData)}

\n
\n\n
\n {detailsData.activities.length !== 0 && (\n
\n

{lang.sc_extra}

\n \n \n \n \n \n \n \n \n {detailsData.activities.map((d) => (\n \n \n \n \n ))}\n \n
NameHours
\n {d.id} - {d.name}\n {d.hours} hours
\n
\n )}\n \n )}\n \n )}\n
\n
\n );\n}\n\nconst componentStyles = () => css`\n background-color: white;\n padding-top: ${common.topBarHeight}px;\n\n .deleted {\n width: 100%;\n text-align: center;\n background-color: red;\n color: #fff;\n padding: 10px;\n margin-bottom: 15px;\n }\n\n .details {\n table {\n tr {\n th {\n text-align: left;\n }\n td {\n text-align: left;\n padding: 5px 20px 5px 0px;\n }\n }\n }\n }\n\n p {\n padding: 0.5rem 0 0 0;\n }\n\n p.description {\n padding: 0.25rem 0 0 0;\n color: ${colors.darkGrey};\n }\n\n div.seperator {\n background-color: ${colors.lightGrey};\n height: 1px;\n margin: 1.5rem -0.75rem 1rem -0.75rem;\n }\n\n div.text-wrapper {\n display: flex;\n\n p:first-child {\n padding-right: 0.5rem;\n }\n\n p:not(:first-child) {\n color: ${colors.darkGrey};\n overflow: hidden;\n }\n }\n div.time-wrapper {\n display: flex;\n flex-direction: column;\n width: 50%;\n }\n`;\n\nconst mapDispatchToProps = (dispatch) => ({\n updateModalPage: bindActionCreators(updateModalPage, dispatch),\n});\n\nexport default connect(null, mapDispatchToProps)(WorkTimeDetails);\n","import React, { memo, useEffect, useState } from \"react\";\nimport { format } from \"date-fns\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Checkbox, Col, notification, Radio, Row } from \"antd\";\nimport moment from \"moment\";\nimport { isEmpty } from \"lodash\";\n\nimport req from \"../../utilities/request-utility\";\n\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport { CloseIcon, InformationOutlineIcon } from \"mdi-react\";\n\n// actions\nimport { hideModalPage } from \"../../actions/uiActions\";\n\n// ui-components\nimport ScrollView from \"../ui/ScrollView\";\nimport Page from \"../ui/Page\";\nimport TextInput from \"../ui/TextInput\";\nimport DropDown from \"../ui/DropDown\";\nimport DatePicker from \"../ui/DatePicker\";\nimport Button from \"../ui/Button\";\nimport common from \"../../style/common\";\nimport getTotalHours from \"../../utilities/get-total-hours\";\nimport InlineSpinner from \"../ui/InlineSpinner\";\nimport StatusBox from \"../ui/StatusBox\";\n\nimport { useDropdownData } from \"./hooks\";\n\nconst WorkTimeRegistration = ({ addRegistration, registration, updateRegistration }) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(({ language }) => language.language);\n\n const getLastUsedFormValues = () => {\n const date = format(new Date(), \"yyyy-MM-dd\");\n let lastUsedTime = localStorage.getItem(\"semcotime-last-time-input\");\n\n lastUsedTime = lastUsedTime ? JSON.parse(lastUsedTime) : null;\n let formDataInitialNewValues = {};\n\n if (lastUsedTime) {\n formDataInitialNewValues = {\n date,\n project: lastUsedTime ? lastUsedTime.project : formData.project,\n subProject: lastUsedTime ? lastUsedTime.subProject : formData.subProject,\n projectActivity: lastUsedTime ? lastUsedTime.activity : formData.projectActivity,\n startTimeHours: lastUsedTime ? lastUsedTime.startTimeHours : formData.startTimeHours,\n startTimeMinutes: lastUsedTime ? lastUsedTime.startTimeMinutes : formData.startTimeMinutes,\n endTimeHours: lastUsedTime ? lastUsedTime.endTimeHours : formData.endTimeHours,\n endTimeMinutes: lastUsedTime ? lastUsedTime.startTimeMinutes : formData.startTimeMinutes,\n dabLocation: lastUsedTime ? lastUsedTime.dabLocation : formData.dabLocation,\n // dabTrade: lastUsedTime ? lastUsedTime.dabTrade : formData.dabTrade,\n };\n }\n\n console.log(\"formDataInitialNewValues: \", formDataInitialNewValues);\n return formDataInitialNewValues;\n };\n\n // Formdata\n const [formData, setFormData] = useState({\n id: undefined,\n project: undefined,\n subProject: undefined,\n projectActivity: undefined,\n activities: [],\n customerDetail: \"\",\n customerNote: \"\",\n foreman: undefined,\n date: undefined,\n startTimeHours: \"00\",\n startTimeMinutes: \"00\",\n endTimeHours: \"00\",\n endTimeMinutes: \"00\",\n hours: \"\",\n shift: \"Day\",\n type: \"time\",\n paidBreak: false,\n unpaidBreak: false,\n transport: false,\n endOfRotation: false,\n changeShift: false,\n heliTime: false,\n standby: false,\n\n ...(!isEmpty(registration) ? registration.data : getLastUsedFormValues()),\n });\n\n // Api data\n const [wageCodes, setWageCodes] = useState([]);\n const [foremen, setForemen] = useState([]);\n const [loadingWageCodes, setLoadingWageCodes] = useState(false);\n\n // Local data\n const [selectedActivity, setSelectedActivity] = useState(null);\n const [isFormReady, setIsFormReady] = useState(true);\n const [submittingForm, setSubmittingForm] = useState(false);\n const [editMode, setEditMode] = useState(false);\n const [errorLoadingFormData, setErrorLoadingFormData] = useState(false);\n const [totalHours, setTotalHours] = useState(0);\n const [tradeCodesList, setTradeCodesList] = useState([]);\n\n const {\n dabLocations,\n dabLocationsIsFetching,\n dabTradeCodes,\n dabTradeIsFetching,\n defaultEmployeeValues,\n defaultEmployeeValuesStatus,\n defaultProjectSubProjectAndActivityData,\n defaultProjectSubProjectAndActivityStatus,\n projectData,\n projectActivityData,\n projectStatus,\n projectActivityStatus,\n subProjectData,\n subProjectStatus,\n } = useDropdownData(formData);\n\n const getDefaultEmployeeTrade = async () => {\n const { data: defaultEmployeeValues } = await req()(`semcotime/projects/default-employee-values/`);\n setFormData({ ...formData, dabTrade: defaultEmployeeValues.employeeTrade });\n };\n\n const getForemen = () => {\n try {\n setIsFormReady(false);\n\n req()(`semcotime/foremen/`).then(({ data }) => {\n const assignedIds = data.assigned.map((d) => d.id);\n\n setForemen([\n ...data.assigned,\n { disabled: true, id: \"\", name: \"------------------\" },\n ...data.all.filter((d) => !assignedIds.includes(d.id)),\n ]);\n });\n\n setIsFormReady(true);\n } catch (err) {\n setErrorLoadingFormData(true);\n }\n };\n\n const getWageCodes = () => {\n return new Promise((resolve, reject) => {\n req()(`semcotime/wage-codes?wageType=increment`)\n .then((res) => res.data)\n .then((wageCodes) => {\n setWageCodes(wageCodes);\n setLoadingWageCodes(false);\n resolve();\n })\n .catch((err) => {\n reject(err);\n });\n });\n };\n\n const initializeFormForEdit = async () => {\n try {\n const {\n activities,\n customerDetail,\n customerNote,\n dabLocation,\n date,\n endTimeHours,\n endTimeMinutes,\n foreman,\n heliTime,\n id,\n project,\n projectActivity,\n startTimeHours,\n startTimeMinutes,\n transport,\n subProject,\n unpaidBreak,\n standby,\n } = registration.data;\n\n getForemen();\n getWageCodes();\n\n setFormData((formData) => ({\n ...formData,\n activities,\n customerDetail,\n customerNote,\n dabLocation,\n date,\n endTimeHours,\n endTimeMinutes,\n foreman,\n heliTime,\n id,\n project,\n projectActivity,\n startTimeHours,\n startTimeMinutes,\n transport,\n subProject,\n unpaidBreak,\n heliTime,\n standby,\n }));\n } catch (error) {\n setErrorLoadingFormData(true);\n }\n };\n\n const handleFormChange = (e) => {\n // Handling of date\n if (typeof e.date !== \"undefined\") return setFormData({ ...formData, date: e.date });\n\n if (e.persist) e.persist();\n\n // Handling of rest\n if (e.target) {\n const { checked, name, value } = e.target;\n\n // If a project is chosen, remove potentially chosen subProjects and projectActivites.\n // Both in the formData object, but also in the api-responses\n if (name === \"project\") {\n setFormData({ ...formData, project: value, subProject: \"\", projectActivity: \"\" });\n } else if (name === \"subProject\") {\n // The same as above, but only with subProject\n setFormData({ ...formData, subProject: value, projectActivity: \"\" });\n } else if (name === \"break\") {\n if (value === \"paid\") setFormData({ ...formData, [name]: value, paidBreak: true, unpaidBreak: false });\n else setFormData({ ...formData, [name]: value, paidBreak: false, unpaidBreak: true });\n } else if (name === \"transport\" || name === \"heliTime\") {\n setFormData({\n ...formData,\n [name]: checked,\n [name === \"transport\" ? \"heliTime\" : \"transport\"]: false,\n standby: false,\n });\n } else if (name === \"endOfRotation\" || name === \"changeShift\" || name === \"standby\") {\n setFormData({ ...formData, [name]: checked });\n } else {\n setFormData({ ...formData, [name]: value });\n }\n }\n };\n\n const isFormValid = () => {\n // IF PROJECT IS PROVIDED, THEN SUB PROJECT AND ACTIVITY ARE REQUIRED\n if (formData.project) {\n if (!formData.subProject || !formData.projectActivity) {\n notification.error({ duration: 7, message: \"FAILED\", description: lang.projectSubProjectActivityAreRequired });\n return false;\n }\n }\n\n //For all cases, the foreman, date, startTimeHours, startTimeMinutes, endTimeHours and endTimeMinutes must be completed.\n if (\n !formData.dabTrade ||\n !formData.foreman ||\n !formData.date ||\n !formData.startTimeHours ||\n !formData.startTimeMinutes ||\n !formData.endTimeHours ||\n !formData.endTimeMinutes ||\n !formData.dabLocation\n ) {\n notification.error({ duration: 7, message: \"FAILED\", description: lang.errorRegistrationRequiredFields });\n return false;\n }\n\n return true;\n };\n\n const handleUpdate = () => {\n // eslint-disable-next-line\n if (isFormValid()) {\n setSubmittingForm(true);\n\n updateRegistration(formData)\n .then(() => {\n notification.success({ duration: 7, message: \"SUCCESS\", description: lang.savedRegistrationToastContent });\n dispatch(hideModalPage());\n })\n .catch((err) => {\n let errorMessage = \"Unspecified error\";\n if (err && err.response && err.response.data) errorMessage = err.response.data.message;\n\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `${lang.errorSavingRegistrationToastContent}. Fejlkode: ${errorMessage}`,\n });\n\n setSubmittingForm(false);\n });\n } else {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: \"Du skal udfylde projekt, underprojekt, aktivitet, dato, og start- og sluttid\",\n });\n }\n };\n\n const handleSave = () => {\n // eslint-disable-next-line\n if (isFormValid()) {\n setSubmittingForm(true);\n\n addRegistration({ ...formData, hours: totalHours })\n .then(() => {\n notification.success({ duration: 7, message: \"SUCCESS\", description: lang.savedRegistrationToastContent });\n\n dispatch(hideModalPage());\n\n // Saves last used item in local storage\n localStorage.setItem(\n \"semcotime-last-time-input\",\n JSON.stringify({\n startTimeHours: formData.startTimeHours,\n startTimeMinutes: formData.startTimeMinutes,\n endTimeHours: formData.endTimeHours,\n endTimeMinutes: formData.endTimeMinutes,\n project: formData.project,\n subProject: formData.subProject,\n activity: formData.projectActivity,\n dabLocation: formData.dabLocation,\n dabTrade: formData.dabTrade,\n })\n );\n })\n .catch((err) => {\n const errorMessage =\n err.response.hasOwnProperty(\"data\") && err.response.data.message ? err.response.data.message : null;\n\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: errorMessage ? errorMessage : lang.errorSavingRegistrationToastContent,\n });\n setSubmittingForm(false);\n });\n }\n };\n\n const handleTimeInput = (e, type) => {\n // Exception for deleing\n if (e.target.value === \"\") {\n setFormData({ ...formData, [e.target.name]: e.target.value });\n }\n\n const num = parseInt(e.target.value);\n\n if (\n // If not a number\n isNaN(num) ||\n // If length is more than two digits\n e.target.value.length > 2 ||\n // type is hours and value is not between 0-23\n (type === \"hours\" && (num < 0 || num > 23)) ||\n // type is minutes and value is not between 0-59\n (type === \"minutes\" && (num < 0 || num > 59))\n ) {\n return;\n }\n\n setFormData({ ...formData, [e.target.name]: e.target.value });\n };\n\n const getProjectActivityPlaceholder = () => {\n if (projectActivityStatus === \"loading\" || projectActivityStatus === \"idle\") {\n return lang.loading;\n } else if (projectActivityData.length === 0) {\n return lang.noActivities;\n } else {\n return lang.chooseActivity;\n }\n };\n\n const getSubProjectPlaceholder = () => {\n if (subProjectStatus === \"loading\" || subProjectStatus === \"idle\") {\n return lang.loading;\n } else if (subProjectData.length === 0) {\n return \"No subprojects found\";\n } else {\n return lang.chooseASubproject;\n }\n };\n\n useEffect(() => {\n // EDIT MODE\n if (updateRegistration) {\n initializeFormForEdit();\n setEditMode(true);\n } else {\n // ADD MODE\n const date = format(new Date(), \"yyyy-MM-dd\");\n\n getWageCodes();\n getForemen();\n\n // Gets last used time-item in local storage (uses whatever the user entered last)\n let lastUsedTime = localStorage.getItem(\"semcotime-last-time-input\");\n lastUsedTime = lastUsedTime ? JSON.parse(lastUsedTime) : null;\n getDefaultEmployeeTrade();\n\n if (\n typeof defaultProjectSubProjectAndActivityData.projectId !== \"undefined\" &&\n typeof defaultProjectSubProjectAndActivityData.subProjectId !== \"undefined\" &&\n typeof defaultProjectSubProjectAndActivityData.activitySequence !== \"undefined\"\n ) {\n setFormData((formData) => ({\n ...formData,\n date,\n project: lastUsedTime\n ? lastUsedTime.project\n ? lastUsedTime.project\n : defaultProjectSubProjectAndActivityData.projectId\n : formData.project,\n subProject: lastUsedTime\n ? lastUsedTime.subProject\n ? lastUsedTime.subProject\n : defaultProjectSubProjectAndActivityData.subProjectId\n : formData.subProject,\n projectActivity: lastUsedTime\n ? lastUsedTime.activity\n ? lastUsedTime.activity\n : defaultProjectSubProjectAndActivityData.activitySequence\n : formData.projectActivity,\n startTimeHours: lastUsedTime ? lastUsedTime.startTimeHours : formData.startTimeHours,\n startTimeMinutes: lastUsedTime ? lastUsedTime.startTimeMinutes : formData.startTimeMinutes,\n endTimeHours: lastUsedTime ? lastUsedTime.endTimeHours : formData.endTimeHours,\n endTimeMinutes: lastUsedTime ? lastUsedTime.startTimeMinutes : formData.startTimeMinutes,\n dabLocation: lastUsedTime ? lastUsedTime.dabLocation : formData.dabLocation,\n // dabTrade: lastUsedTime ? lastUsedTime.dabTrade : formData.dabTrade,\n }));\n } else {\n setFormData({\n ...formData,\n date,\n project: lastUsedTime ? lastUsedTime.project : formData.project,\n subProject: lastUsedTime ? lastUsedTime.subProject : formData.subProject,\n projectActivity: lastUsedTime ? lastUsedTime.activity : formData.projectActivity,\n startTimeHours: lastUsedTime ? lastUsedTime.startTimeHours : formData.startTimeHours,\n startTimeMinutes: lastUsedTime ? lastUsedTime.startTimeMinutes : formData.startTimeMinutes,\n endTimeHours: lastUsedTime ? lastUsedTime.endTimeHours : formData.endTimeHours,\n endTimeMinutes: lastUsedTime ? lastUsedTime.startTimeMinutes : formData.startTimeMinutes,\n });\n }\n } // eslint-disable-next-line\n }, [defaultProjectSubProjectAndActivityStatus]);\n\n useEffect(() => {\n const hourTotal = getTotalHours({\n date: formData.date,\n startTimeHours: formData.startTimeHours,\n startTimeMinutes: formData.startTimeMinutes,\n endTimeHours: formData.endTimeHours,\n endTimeMinutes: formData.endTimeMinutes,\n });\n\n if (hourTotal && hourTotal !== totalHours) {\n if (hourTotal < 5) {\n setFormData({ ...formData, hours: hourTotal, paidBreak: false, unpaidBreak: false });\n } else if (hourTotal >= 5 && hourTotal <= 12) {\n setFormData({ ...formData, hours: hourTotal, paidBreak: false, unpaidBreak: true });\n } else if (hourTotal > 12) {\n setFormData({ ...formData, hours: hourTotal, paidBreak: true, unpaidBreak: false });\n }\n\n setTotalHours(hourTotal);\n } // eslint-disable-next-line\n }, [\n formData.date,\n formData.startTimeHours,\n formData.startTimeMinutes,\n formData.endTimeHours,\n formData.endTimeMinutes,\n totalHours,\n ]);\n\n useEffect(() => {\n setTradeCodesList(dabTradeCodes);\n }, [dabTradeCodes.length]);\n\n useEffect(() => {\n if (formData.dabLocation === \"Abroad - Onshore\" || formData.dabLocation === \"Abroad - Offshore\") {\n setTradeCodesList(dabTradeCodes.filter((d) => [\"022\", \"070\", \"120\", \"125\"].includes(d.DabTradeId)));\n return setFormData((formData) => ({ ...formData }));\n } else {\n setTradeCodesList(dabTradeCodes);\n setFormData((formData) => ({\n ...formData,\n dabTrade: formData.dabTrade,\n transport: formData.dabLocation === \"OffShore\" ? false : formData.transport,\n heliTime: formData.dabLocation === \"OnShore\" ? false : formData.heliTime,\n }));\n }\n }, [formData.dabLocation, dabTradeCodes.length]);\n\n useEffect(() => {\n const { startTimeHours = \"\", endTimeHours = \"\", startTimeMinutes = \"\", endTimeMinutes = \"\" } = formData;\n\n setFormData({\n ...formData,\n shift: moment(`${endTimeHours}:${endTimeMinutes}`, \"hh:mm\").isBefore(\n moment(`${startTimeHours}:${startTimeMinutes}`, \"hh:mm\")\n )\n ? \"Night\"\n : \"Day\",\n });\n }, [formData.startTimeHours, formData.endTimeHours, formData.startTimeMinutes, formData.endTimeMinutes]);\n\n if (!isFormReady && !errorLoadingFormData) {\n return (\n \n \n \n );\n }\n\n if (errorLoadingFormData) {\n return (\n \n \n \n );\n }\n\n const { changeShift = false, shift = \"Day\", paidBreak = false, unpaidBreak = false } = formData;\n\n return (\n \n \n
\n

{lang.general}

\n\n {/* Project */}\n

{lang.project}

\n ({ label: `${d.id} - ${d.name}`, value: d.id }))}\n placeholder={lang.chooseProject}\n value={formData.project}\n />\n\n {/* Sub project (depends on project) */}\n {formData.project && (\n <>\n

{lang.subproject}

\n ({ label: `${d.id} - ${d.description}`, value: d.id }))}\n placeholder={getSubProjectPlaceholder()}\n value={formData.subProject}\n />\n \n )}\n\n {/* Activity (depends on project and subProject) */}\n {formData.project && formData.subProject && (\n <>\n

{lang.activity}

\n ({ label: `${d.no} - ${d.description}`, value: d.id }))}\n placeholder={getProjectActivityPlaceholder()}\n value={formData.projectActivity}\n />\n \n )}\n {/* location */}\n

{lang.location}

\n ({ label: d.DabLocationValue, value: d.DabLocationValue })) : []}\n placeholder={lang.chooseADabLocation}\n value={formData.dabLocation}\n />\n

{lang.dabTrade}

\n ({ label: `${d.DabTradeId} - ${d.DabTradeDesc}`, value: d.DabTradeId }))\n : []\n }\n placeholder={lang.chooseADabTrade}\n value={formData.dabTrade}\n />\n {/* Customer detail */}\n

{lang.customerDetail}

\n \n\n {/* Customer note */}\n

{lang.customerNote}

\n \n\n {/* Foreman */}\n <>\n

Foreman *

\n ({ disabled: d.disabled, label: d.name, value: d.id }))}\n placeholder=\"Choose a foreman\"\n value={formData.foreman}\n />\n \n\n \n \n \n Transport\n \n \n \n \n Heli Time\n \n \n \n \n {lang.standby}\n \n \n \n \n End of Rotation\n \n \n \n\n {/* Date */}\n

{lang.dateAndTime}

\n\n {editMode ? (\n

\n Date: {formData.date}\n

\n ) : (\n <>\n

{lang.date} *

\n {\n handleFormChange({ date });\n }}\n />\n \n )}\n\n {/* Start time hours */}\n

{lang.startTime} *

\n
\n handleTimeInput(e, \"hours\")}\n />\n\n {/* Start time minutes */}\n

{` : `}

\n handleTimeInput(e, \"minutes\")}\n />\n
\n\n {/* End time hours */}\n

{lang.endTime} *

\n
\n handleTimeInput(e, \"hours\")}\n />\n\n {/* End time minutes */}\n

{` : `}

\n handleTimeInput(e, \"minutes\")}\n />\n
\n\n
\n

Break

\n \n Paid Break\n Un Paid Break\n \n
\n\n
\n

Shift

\n \n Day\n Night\n \n
\n
\n \n Change Shift\n \n
\n {/* Activities (Wage codes) */}\n

{lang.sc_extra}

\n\n {loadingWageCodes === false && wageCodes.length === 0 && (\n

\n \n {lang.noAvailableSupplements}\n

\n )}\n\n {loadingWageCodes === false && wageCodes.length === 0 ? null : (\n <>\n

{lang.addActivities}

\n
\n setSelectedActivity(e.target.value)}\n options={wageCodes\n .filter((d) => formData.activities.findIndex((el) => el.id === d.id) === -1)\n .map((d) => ({ label: `${d.name} - ${d.id}`, value: d.id }))}\n value={selectedActivity}\n />\n\n {\n if (selectedActivity) {\n let activity = wageCodes.filter((x) => x.id === selectedActivity)[0];\n activity.hours = \"\";\n setFormData({ ...formData, activities: [activity, ...formData.activities] });\n }\n }}\n >\n {lang.add}\n \n
\n \n )}\n\n {formData.activities.map((activity, index) => (\n
\n

\n {activity.name} - {activity.id}\n

\n {\n activity.hours = e.target.value; // Temporay mutation of map-element (is canceled on next render where change is committed)\n setFormData({\n ...formData,\n activities: [...formData.activities.slice(0, index), activity, ...formData.activities.slice(index + 1)],\n });\n }}\n />\n {\n setFormData({ ...formData, activities: formData.activities.filter((x) => activity.id !== x.id) });\n }}\n >\n \n
\n
\n ))}\n\n
\n\n \n\n

* {lang.mandatoryField}

\n
\n \n \n );\n};\n\nconst componentStyles = () => css`\n background-color: white;\n padding-top: ${common.topBarHeight}px;\n\n .content-wrapper {\n max-width: 800px;\n margin: 0 auto;\n }\n\n .time-input {\n display: flex;\n align-items: center;\n }\n\n .scroll-view {\n padding: 0.75rem 0.75rem 5rem 0.75rem;\n }\n\n p {\n padding: 0.75rem 0 0 0;\n }\n\n h2:not(:first-child) {\n border-top: 1px solid ${colors.lightGrey};\n margin: 0.75rem -0.75rem 0 -0.75rem;\n padding: 0.75rem 0.75rem 0 0.75rem;\n }\n\n .activity {\n display: flex;\n align-items: center;\n border-top: 1px solid ${colors.lightGrey};\n padding: 0.75rem 0.75rem 0.75rem 0;\n margin: 0 -0.75rem 0 0rem;\n\n &:last-of-type {\n border-bottom: 1px solid ${colors.lightGrey};\n }\n\n .name {\n flex: 1 1 70%;\n padding: 0;\n }\n\n svg {\n height: 40px; /* WARNING: Magic number */\n }\n\n input {\n flex: 1 1 2rem;\n margin: 0 0.5rem 0 0.5rem;\n }\n }\n\n .flex {\n display: flex;\n justify-content: space-between;\n }\n\n .note {\n color: rgb(110, 110, 110);\n }\n`;\n\nexport default memo(WorkTimeRegistration);\n","import React, { useState } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { notification } from \"antd\";\nimport { useSelector } from \"react-redux\";\nimport moment from \"moment\";\nimport \"moment/locale/da\"; // Import the Danish locale\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport workHourState from \"../../config/semcotimedk-workhour-states\";\nimport {\n CheckIcon,\n DotsVerticalIcon,\n PlusIcon,\n CheckboxMarkedIcon,\n CheckCircleOutlineIcon,\n DeleteEmptyIcon,\n TimerSandEmptyIcon,\n ThumbDownOutlineIcon,\n InformationOutlineIcon,\n PencilIcon,\n TrashOutlineIcon,\n LockOpenOutlineIcon,\n LockIcon,\n} from \"mdi-react\";\n\nimport InlineSpinner from \"../ui/InlineSpinner\";\n\n// actions\nimport { showContextMenu, showModalPage, showDialog, hideDialog } from \"../../actions/uiActions\";\n// components\nimport WorkTimeDetailsDK from \"./WorkTimeDetailsDK\";\nimport WorkTimeRegistrationDK from \"../WorkTimeDK/WorkTimeRegistrationDK\";\nimport WorkTimeRegistrationDK2 from \"../WorkTimeDK/WorkTimeRegistrationDK2\";\n\nfunction getTitle(titleString) {\n let [date, startTime, endTime] = titleString.split(\"__\");\n let returnString = date;\n if (startTime && endTime) returnString += ` ${startTime} - ${endTime}`;\n return returnString;\n}\n\nfunction WorkTimeListItemDK(props) {\n const { registration, showContextMenu, lang, loading, title, showModalPage, updateRegistration, updateRegistrationNew } =\n props;\n const selectedLanguage = useSelector((s) => s.auth.user.language);\n\n const [expanded, setExpanded] = useState(false);\n const [deleting, setDeleting] = useState(false);\n\n const { ifsData = null } = registration;\n\n function ContextMenu() {\n let options = [\n {\n icon: ,\n title: lang.details,\n callback: () =>\n showModalPage({\n content: ,\n }),\n },\n ];\n\n if (registration.state === workHourState.open) {\n options = [\n ...options,\n {\n icon: ,\n title: lang.edit,\n callback: () =>\n showModalPage({\n content: registration.isNewType ? (\n \n ) : (\n \n ),\n }),\n },\n {\n icon: ,\n title: lang.delete,\n callback: () =>\n props.showDialog({\n styleType: \"warning\",\n title: \"Delete record\",\n content: \"You're about to delete this registration. Are you sure you want to delete it?\",\n primaryActionTitle: \"YES - Delete\",\n primaryAction: () => {\n setDeleting(\"true\");\n\n const request = props.deleteRegistration(registration);\n\n request\n .then(() => {\n notification.success({\n duration: 7,\n message: \"SUCCESS\",\n description: lang.deletedRegistrationToastContent,\n });\n })\n .catch((err) => {\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: lang.errorDeletingRegistrationToastContent,\n });\n });\n\n setDeleting(\"false\");\n },\n }),\n },\n ];\n }\n\n return (\n {\n e.stopPropagation();\n showContextMenu(options);\n }}\n />\n );\n }\n\n return (\n
\n {/* Header */}\n \n registration.state === workHourState.lockedByForeman ||\n registration.state === workHourState.locked ||\n registration.state === workHourState.approved\n ? setExpanded(!expanded)\n : null\n }\n >\n
\n
\n {registration.state === workHourState.open && }\n {registration.state === workHourState.lockedByForeman && }\n {registration.state === workHourState.locked && }\n {registration.state === workHourState.approved && }\n {registration.state === workHourState.deleted && }\n {getTitle(title)}\n
\n
{moment(title).locale(selectedLanguage).format(\"dddd\")}
\n
\n\n
\n {/*
\n {registration.totalHours}\n
*/}\n\n {(deleting || loading) && (\n \n )}\n {!deleting && !loading && }\n\n {registration.state === \"APPROVED\" && (\n \n )}\n
\n
\n\n {/* Details */}\n
\n
\n
\n
\n
\n {registration.confirmed === \"Yes\" && }\n {registration.confirmed === \"No\" && }\n

{registration.reportCodeDescription}

\n
\n
\n

{registration.hours}

\n
\n
\n\n
\n {ifsData && (\n \n \n \n \n \n \n \n \n {ifsData.map((d) => (\n \n \n \n \n ))}\n \n
{lang.wageCode}{lang.hours}
\n {d.WageCode} - {d.WageCodeDesc}\n {d.WageHours} hours
\n )}\n
\n
\n
\n
\n \n );\n}\n\nconst componentStyles = (props) => css`\n background-color: ${colors.white};\n border-top: 1px ${colors.midGrey} solid;\n border-bottom: 1px ${colors.midGrey} solid;\n margin-bottom: -1px;\n\n svg {\n color: ${props.primaryColor};\n width: 1rem;\n height: 1rem;\n margin-right: 0.5rem;\n margin-top: 2px;\n display: block;\n }\n\n &.collapsed {\n margin: 0;\n border-left: 3px solid transparent;\n transition: margin 240ms ease;\n margin-bottom: -1px;\n\n .hide {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n transition: max-height 240ms ease, opacity 240ms ease, overflow 240ms ease;\n }\n\n .rotate-neutral {\n transform: rotate(0deg);\n transition: transform 240ms ease;\n }\n }\n\n &.expanded {\n margin: 0.65rem 0;\n border-left: 3px solid ${props.primaryColor};\n transition: margin 240ms ease, border-left 240ms ease;\n\n &:first-of-type {\n margin-top: 0px;\n }\n\n .item-header {\n color: ${props.primaryColor};\n\n .rotate {\n transform: rotate(-45deg);\n transition: transform 240ms ease;\n }\n }\n\n .item-details {\n .show {\n max-height: 1500px;\n overflow: auto;\n opacity: 1;\n transition: max-height 240ms ease, opacity 240ms ease;\n }\n }\n }\n\n .item-header {\n display: flex;\n padding: 0.75rem;\n margin-bottom: -1px;\n color: ${colors.darkGrey};\n font-weight: bold;\n\n &:active {\n background-color: ${colors.ultraLightGrey};\n transition: background-color 80ms ease;\n }\n\n .right {\n display: flex;\n margin-left: auto;\n font-weight: bold;\n }\n\n .left {\n display: block;\n }\n }\n\n .item-details {\n .details-header {\n display: flex;\n padding: 0.75rem 0.75rem 0 0.75rem;\n\n .left {\n display: block;\n\n svg {\n width: 1.25rem;\n height: 1.25rem;\n margin-right: 0.5rem;\n flex-shrink: 0;\n }\n }\n\n .right {\n display: flex;\n margin-left: auto;\n font-weight: bold;\n\n p.hours {\n color: ${colors.darkGrey};\n margin-right: 0.35rem;\n }\n }\n }\n\n .details {\n padding: 0.5rem 0.75rem 1rem 0.75rem;\n color: ${colors.darkGrey};\n\n span {\n font-weight: bold;\n }\n\n p {\n padding-right: 1rem;\n display: inline-block;\n }\n\n table {\n tr {\n th {\n text-align: left;\n }\n td {\n text-align: left;\n padding: 5px 20px 5px 0px;\n }\n }\n }\n }\n }\n\n @media screen and (max-width: 944px) {\n .item-header {\n .left {\n display: inline-flex;\n }\n\n .left div:last-child {\n margin-left : 0.8rem !important\n } \n }\n`;\n\nconst mapStateToProps = (state) => ({\n lang: state.language.language,\n primaryColor: state.appConfig.primaryColor,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n showContextMenu: bindActionCreators(showContextMenu, dispatch),\n showModalPage: bindActionCreators(showModalPage, dispatch),\n showDialog: bindActionCreators(showDialog, dispatch),\n hideDialog: bindActionCreators(hideDialog, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(WorkTimeListItemDK);\n","import React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { format, parse, subDays, addDays } from \"date-fns\";\nimport moment from \"moment\";\n\n// css\nimport { css } from \"emotion\";\nimport colors from \"../../style/colors\";\nimport common from \"../../style/common\";\nimport { ArrowBackIcon, AlertDecagramIcon, CloudDownloadIcon } from \"mdi-react\";\n\n// utilities\nimport pageNavigator from \"../../utilities/page-navigator\";\nimport getPageFromId from \"../../utilities/get-page-from-id\";\nimport getBackButtonUrl from \"../../utilities/get-back-button-url\";\nimport req from \"../../utilities/request-utility\";\n\n// actions\nimport { showModalPage } from \"../../actions/uiActions\";\n\n// ui-components\nimport Page from \"../ui/Page\";\nimport TopBar from \"../ui/TopBar\";\nimport ScrollView from \"../ui/ScrollView\";\nimport StatusBox from \"../ui/StatusBox\";\nimport Button from \"../ui/Button\";\nimport ActionWrapper from \"../ui/ActionWrapper\";\nimport WorkTimeRegistrationDK from \"./WorkTimeRegistrationDK2\";\n\n// components\n// import WorkTimeRegistration from \"./WorkTimeRegistration\";\nimport WorkTimeListItemDK from \"./WorkTimeListItemDK\";\nimport WorkTimeAlertDK from \"./WorkTimeAlertDK\";\n\nfunction WorkTimeOverviewDK(props) {\n const dispatch = useDispatch();\n const pages = useSelector((s) => s.pages.pages);\n const lang = useSelector((s) => s.language.language);\n const [page] = useState(getPageFromId(pages, props.match.params.pageId));\n const [backButtonURL] = useState(getBackButtonUrl(page));\n const [updatingUI, setUpdatingUI] = useState(false);\n const [registrations, setRegistrations] = useState({\n data: [],\n error: false,\n errMsg: false,\n loading: false,\n fetchToDate: format(new Date(), \"yyyyMMdd\"),\n });\n const [timeSchedInfo, setTimeSchedInfo] = useState({ data: [], loading: true });\n const [absencesThisWeek, setAbsencesThisWeek] = useState({ data: [], loading: true });\n\n // redux data\n const { user } = useSelector(({ auth }) => ({ user: auth.user }));\n\n useEffect(() => {\n getSchedInfo();\n getRegistrations();\n getAbsencesThisWeek();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n function dates(current, formatted = false) {\n var week = new Array();\n var normalDate = new Array();\n current.setDate(current.getDate() - current.getDay() + 1);\n for (var i = 0; i < 7; i++) {\n if (formatted === true) {\n week.push(format(new Date(current), \"yyyyMMdd\"));\n } else {\n normalDate.push(moment(new Date(current)).format(\"YYYY-MM-DD\"));\n }\n\n current.setDate(current.getDate() + 1);\n }\n return {\n week: week,\n normalDate: normalDate,\n fromDate: week[0],\n toDate: week[6],\n };\n }\n\n async function getSchedInfo() {\n try {\n const { data } = await req()(`semcotime/work-hours-dk/EmpSchedInfo?CompanyIDs=DK10&EmpNos=${user.externalId}`);\n setTimeSchedInfo({ data: data, loading: false });\n } catch (error) {\n console.log(error);\n }\n }\n\n function addRegistration(registration) {\n return new Promise(\n (resolve, reject) =>\n void req()\n .post(`semcotime/work-hours-dk/d`, registration)\n .then(() => {\n resolve();\n setUpdatingUI(true);\n refreshRegistrations();\n })\n .catch(reject)\n );\n }\n\n function updateRegistrationNew(registration) {\n return new Promise(\n (resolve, reject) =>\n void req()\n .put(`semcotime/work-hours-dk/d/${registration.id}`, registration)\n .then(() => {\n resolve();\n setUpdatingUI(true);\n refreshRegistrations();\n })\n .catch(reject)\n );\n }\n\n function updateRegistration(registration) {\n return new Promise(\n (resolve, reject) =>\n void req()\n .put(`semcotime/work-hours-dk/${registration.id}`, registration)\n .then(() => {\n resolve();\n setUpdatingUI(true);\n refreshRegistrations();\n })\n .catch(reject)\n );\n }\n\n function deleteRegistration(registration) {\n return new Promise(\n (resolve, reject) =>\n void req()\n .delete(`semcotime/work-hours-dk/${registration.id}`)\n .then(() => {\n resolve();\n setUpdatingUI(true);\n refreshRegistrations();\n })\n .catch(reject)\n );\n }\n\n async function refreshRegistrations() {\n try {\n const toDate = format(addDays(new Date(), 365), \"yyyyMMdd\");\n const fromDate = registrations.fetchToDate;\n const { data } = await req()(`semcotime/work-hours-dk/?fromDate=${fromDate}&toDate=${toDate}`);\n\n setRegistrations({\n ...registrations,\n data: data,\n fetchToDate: format(subDays(parse(fromDate, \"yyyyMMdd\", 0), 0), \"yyyyMMdd\"),\n loading: false,\n });\n setUpdatingUI(false);\n } catch (err) {\n setRegistrations({\n ...registrations,\n loading: false,\n });\n }\n }\n\n async function getAbsencesThisWeek() {\n try {\n const fromDate = dates(new Date(), true).fromDate;\n const toDate = dates(new Date(), true).toDate;\n\n const { data } = await req()(`semcotime/absence-dk/?fromDate=${fromDate}&toDate=${toDate}`);\n setAbsencesThisWeek({ data: data, loading: false });\n } catch (error) {\n console.log(error);\n }\n }\n\n async function getRegistrations() {\n try {\n setRegistrations({ ...registrations, loading: true });\n\n let toDate = registrations.fetchToDate;\n const fromDate = format(subDays(parse(toDate, \"yyyyMMdd\", 0), 7), \"yyyyMMdd\");\n\n if (Object.keys(registrations.data).length === 0) {\n toDate = format(addDays(parse(toDate, \"yyyyMMdd\", 0), 365), \"yyyyMMdd\");\n }\n\n const { data } = await req()(`semcotime/work-hours-dk/?fromDate=${fromDate}&toDate=${toDate}`);\n\n setRegistrations({\n ...registrations,\n data: [...registrations.data, ...data],\n errMsg: false,\n loading: false,\n fetchToDate: format(subDays(parse(fromDate, \"yyyyMMdd\", 0), 0), \"yyyyMMdd\"),\n });\n } catch (err) {\n setRegistrations({\n ...registrations,\n loading: false,\n errMsg: true,\n });\n }\n }\n\n const registeredTimeForWholeWeek = registrations.data.filter((reg) => {\n let date = reg.timeKey.split(\"__\")[0];\n if (date.length !== 10) {\n date = date.substr(0, 11);\n }\n\n return dates(new Date(), false).normalDate.includes(date.trim());\n });\n\n return (\n \n pageNavigator(backButtonURL, \"backward\")}>\n \n \n }\n actionRight={\n {\n dispatch(\n showModalPage({\n content: () => ,\n })\n );\n }}\n >\n {lang.register}\n \n }\n />\n \n {/* Error */}\n {registrations.error && !registrations.loading && (\n }\n title={lang.errorLoadingRegistrationToastTitle}\n content={lang.errorLoadingRegistrationToastContent}\n />\n )}\n\n {/* Show alert when time is not submitted */}\n {!registrations.loading && !registrations.errMsg && (\n \n )}\n\n {/* Load registrations */}\n {!registrations.error &&\n registrations.data.map((d) => (\n \n ))}\n\n <>\n {\n getRegistrations();\n }}\n buttonType=\"secondary\"\n fullWidth={false}\n style={{ margin: \"2rem auto 1rem auto\" }}\n >\n {\" \"}\n {lang.loadAnotherWeek}\n \n

\n {lang.diplayingRegistrationsFrom} {format(parse(registrations.fetchToDate, \"yyyyMMdd\", 0), \"yyyy-MM-dd\")}{\" \"}\n {lang.untilToday}\n

\n \n
\n
\n );\n}\n\nconst componentStyles = () => css`\n .filter {\n padding: 0.75rem;\n }\n\n .apply-filters-modal {\n padding: 0, 75rem;\n background-color: ${colors.white};\n }\n\n .filters-button {\n background-color: ${colors.midGrey};\n color: ${colors.black};\n display: block;\n width: calc(100% - 1.5rem);\n border: 0px transparent none;\n border-radius: 3px;\n font-size: 0.95rem;\n padding: 0.75rem 1.25rem;\n margin: 0.75rem;\n text-align: left;\n position: relative;\n\n .icon-right {\n position: absolute;\n right: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n }\n }\n`;\n\nexport default WorkTimeOverviewDK;\n","import React, { memo, useState } from \"react\";\nimport { Button, Col, Divider, Form, Modal, Row, notification } from \"antd\";\nimport { Fab, TextField } from \"@mui/material\";\nimport InputFile from \"@volenday/input-file\";\nimport SupportAgentIcon from \"@mui/icons-material/SupportAgent\";\nimport { useMediaQuery } from \"react-responsive\";\nimport { MailOutlined, PhoneOutlined } from \"@ant-design/icons\";\nimport * as yup from \"yup\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport req from \"../../utilities/request-utility\";\n\nconst ContactItSupport = ({ user = {} }) => {\n const { name: userName = \"\" } = user;\n\n const isMobile = useMediaQuery({ maxWidth: \"800px\" });\n const [showModal, setShowModal] = useState(false);\n const [showWriteToUs, setShowWriteToUs] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const schema = yup.object().shape({\n Issue: yup.string().required(\"This field is required\"),\n Description: yup.string().required(\"Please describe the issue\"),\n });\n\n const defaultValues = {\n Attachments: [],\n Description: \"\",\n Issue: \"\",\n };\n\n const { control, handleSubmit, reset } = useForm({\n defaultValues,\n resolver: yupResolver(schema),\n });\n\n const onSubmit = async (form) => {\n setIsSubmitting(true);\n try {\n const { Attachments = [], Description, Issue } = form;\n const body = new FormData();\n Attachments && Attachments.length !== 0 && Attachments.forEach((img) => body.append(\"attachments\", img));\n const data = {\n AttachmentRecordEntity: \"SemcoTimeDkEmailAttachments\",\n AttachmentRecordField: \"Attachments\",\n saveRecord: true,\n slug: \"contact-it-support\",\n Subject: `Semcotime App Support - ${userName} - ${Issue}`,\n recipients: [\"itservice@semcomaritime.com\"],\n values: { Description, Issue, Employee: userName },\n };\n const parsedData = JSON.stringify(data);\n body.append(\"form\", parsedData);\n\n await req().post(`AHAMAtic/sendEmail`, body, {\n headers: {\n \"content-type\": \"multipart/form-data\",\n },\n });\n notification.success({\n duration: 7,\n message: \"Success\",\n description: `Successfully sent message`,\n });\n setIsSubmitting(false);\n reset(defaultValues);\n setShowWriteToUs(false);\n } catch (error) {\n console.log(\"error: \", error);\n setIsSubmitting(false);\n notification.error({\n duration: 7,\n message: \"FAILED\",\n description: `Failed to send message: ${error}`,\n });\n }\n };\n\n const contactInfoComponent = () => (\n <>\n \n \n \n \n \n \n \n \n \n Email\n

\n
\n \n \n \n ITService@semcomaritime.com\n \n \n
\n\n \n\n \n \n \n \n \n \n \n \n \n Phone Number\n

\n
\n \n \n \n +45 7916 6515\n \n \n
\n\n \n \n {\n setShowWriteToUs(true);\n }}\n >\n Write to us\n \n \n \n \n );\n\n const composeEmailComponent = () => (\n
\n {\n return (\n <>\n \n {error &&
{error.message}
}\n \n );\n }}\n />\n
\n
\n {\n return (\n <>\n \n {error &&
{error.message}
}\n \n );\n }}\n />\n
\n
\n {\n return (\n {\n onChange(d.target.value);\n }}\n />\n );\n }}\n />\n \n\n \n \n {\n reset(defaultValues);\n setShowWriteToUs(false);\n }}\n >\n Cancel\n \n \n \n \n \n );\n\n return (\n
\n setShowModal(!showModal)}\n sx={{\n position: \"absolute\",\n ...(isMobile ? { top: 60 } : { bottom: 60 }),\n right: isMobile ? 10 : 60,\n color: \"common.white\",\n bgcolor: \"#103447\",\n opacity: isMobile ? 0.5 : 1,\n }}\n size={isMobile ? \"small\" : \"default\"}\n aria-label={\"Add\"}\n color={\"primary\"}\n >\n {}\n \n\n \n \n \n \n \n \n\n \n \n \n Contact IT Support\n

\n
\n \n \n }\n closable={false}\n closeIcon={null}\n visible={showModal}\n footer={\n \n }\n >\n {!showWriteToUs && contactInfoComponent()}\n {showWriteToUs && composeEmailComponent()}\n \n
\n );\n};\n\nexport default memo(ContactItSupport);\n","import React, { memo, useState } from \"react\";\nimport { Button, Col, Modal, Row, Radio, Space, Typography, Divider } from \"antd\";\nimport NotificationImportant from \"@mui/icons-material/NotificationImportant\";\n\nconst CustomMessageModal = () => {\n const [hideMessage, setHideMessage] = useState(false);\n const [showModal, setShowModal] = useState(true);\n\n return (\n \n \n \n \n \n \n\n \n \n \n NOTICE\n

\n
\n \n \n }\n closable={false}\n closeIcon={null}\n visible={showModal}\n footer={\n {\n if (hideMessage) localStorage.setItem(`hideCustomMessageModal2`, \"true\");\n\n setShowModal(!showModal);\n }}\n >\n OK\n \n }\n >\n \n \n Please note - there have been made a change in the app, so that everybody that approves hours in the app, will now\n be able to unlock and correct hours themselves.\n \n\n \n IMPORTANT : To get access remember to update your app to the latest version 6.3.1\n \n \n There is a one-pager on the Semco Maritime App under FAQ & Guides\n \n\n \n \n Bemærk - der er blevet lavet en ændring i app’en, således at alle der godkender timer i app’en, kan nu selv låse\n timer op og lave rettelser.\n \n\n \n VIGTIGT : For at få adgang,husk at opdatere din app til seneste version 6.3.1\n \n Der ligger en onepager på Semco Maritime App under FAQ & Guides\n
\n\n {\n setHideMessage(!hideMessage);\n }}\n >\n Don't show this message again\n \n
\n \n );\n};\n\nexport default memo(CustomMessageModal);\n","import React, { useEffect, useLayoutEffect, useState } from 'react';\nimport { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\nimport { ArrowBackIcon, InfoOutlineIcon, PlusIcon, DownloadIcon, MagnifyIcon } from 'mdi-react';\nimport { Button, notification } from 'antd';\nimport { parse, format, startOfMonth, endOfMonth } from 'date-fns';\nimport { css } from 'emotion';\nimport { useQuery } from 'react-query';\nimport param from 'jquery-param';\nimport { Controller, useForm } from 'react-hook-form';\nimport * as yup from 'yup';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport FileSaver from 'file-saver';\nimport { useSelector } from 'react-redux';\n\nimport usePageAndBackButtonURL from '../../../hooks/usePageAndBackButtonURL';\nimport pageNavigator from '../../../utilities/page-navigator';\nimport req from '../../../utilities/request-utility';\n\nimport colors from '../../../style/colors';\nimport InlineSpinner from '../../ui/InlineSpinner';\nimport StatusBox from '../../ui/StatusBox';\nimport DropDown from '../../ui/DropDown';\nimport ActionWrapper from '../../ui/ActionWrapper';\nimport ComponentPage from '../../ui/Page';\nimport TopBar from '../../ui/TopBar';\nimport PDFRenderComponent from '../../ui/PDFRenderComponent';\n\nfunction TimeSheetCommissioning(props) {\n\tconst { user = {} } = props;\n\tconst lang = useSelector(s => s.language.language);\n\n\tconst { externalId = '', loggedUserTypeDK = 'user' } = user;\n\tconst { page, backButtonURL } = usePageAndBackButtonURL(props);\n\tconst [tableData, setTableData] = useState({\n\t\tpdfFile: '',\n\t\terror: false,\n\t\tloading: false,\n\t\tempty: false\n\t});\n\n\tconst {\n\t\tdata: { data: foremen = {} } = {},\n\t\tisFetching: foremenIsFetching,\n\t\tisLoading: foremenIsLoading,\n\t\trefetch: foremenRefetch\n\t} = useQuery(\n\t\t['GetForemen'],\n\t\t() => {\n\t\t\treturn req()(`semcotime/foremen/`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconst {\n\t\tdata: { data: foremanTeamMembers = {} } = {},\n\t\tisFetching: foremanTeamMembersIsFetching,\n\t\tisLoading: foremanTeamMembersIsLoading,\n\t\trefetch: foremanTeamMembersRefetch\n\t} = useQuery(\n\t\t['GetForemanTeamMembers'],\n\t\t() => {\n\t\t\tif (loggedUserTypeDK === 'admin') return req()(`semcotime/foremen-teams/my-team/all`);\n\n\t\t\treturn req()(`semcotime/foremen-teams/my-team`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconst schema = yup.object().shape({\n\t\tblueCollarId: yup.string().required(lang.timeSheetNoUserError),\n\t\tforemanId: yup.string(),\n\t\tfromDate: yup.string().required('From date is required'),\n\t\ttoDate: yup.string().required('To date is required')\n\t});\n\n\tconst defaultValues = {\n\t\tblueCollarId: loggedUserTypeDK === 'user' ? externalId : '',\n\t\tforemanId: '',\n\t\tfromDate: format(startOfMonth(new Date()), 'yyyy-MM-dd'),\n\t\ttoDate: format(endOfMonth(new Date()), 'yyyy-MM-dd')\n\t};\n\n\tconst {\n\t\tcontrol,\n\t\tformState: { errors },\n\t\tgetValues,\n\t\treset,\n\t\tsetValue,\n\t\thandleSubmit,\n\t\twatch\n\t} = useForm({\n\t\tdefaultValues,\n\t\tresolver: yupResolver(schema)\n\t});\n\n\tconst onSubmit = async formData => {\n\t\ttry {\n\t\t\tconst { blueCollarId = '', foremanId = '', fromDate = '', toDate = '' } = formData;\n\n\t\t\tsetTableData({ pdfFile: '', loading: true, error: false, empty: false });\n\n\t\t\tconst { data } = await req()(\n\t\t\t\t`semcotime/customer-approval/commissioning?${param({ blueCollarId, foremanId, fromDate, toDate })}`,\n\t\t\t\t{\n\t\t\t\t\tresponseType: 'blob'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tsetTableData({ loading: false, pdfFile: window.URL.createObjectURL(data), error: false, empty: false });\n\t\t} catch (err) {\n\t\t\tconst { status } = err.response;\n\t\t\tif (status === 404) return setTableData({ loading: false, pdfFile: '', error: false, empty: true });\n\n\t\t\tsetTableData({ loading: false, pdfFile: '', error: true, empty: false });\n\t\t}\n\t};\n\n\tconst onDownload = () => {\n\t\tconst { blueCollarId = '', foremanId = '', fromDate = '', toDate = '' } = watch();\n\t\tconst { name } = foremanTeamMembers.filter(d => d.externalId === blueCollarId)[0];\n\n\t\tFileSaver.saveAs(tableData.pdfFile, `${name}-${fromDate}-${toDate}`);\n\t};\n\n\treturn (\n\t\t\n\t\t\t pageNavigator(backButtonURL, 'backward')}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t/>\n\t\t\t
\n\t\t\t\t{loggedUserTypeDK != 'user' && (\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t onChange(e)}\n\t\t\t\t\t\t\t\t\t\t\tloading={foremanTeamMembersIsLoading}\n\t\t\t\t\t\t\t\t\t\t\toptions={\n\t\t\t\t\t\t\t\t\t\t\t\t!foremanTeamMembersIsLoading\n\t\t\t\t\t\t\t\t\t\t\t\t\t? foremanTeamMembers\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(d => d.externalId && !d.isTemporaryUser)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(d => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: `${d.name} | Ticket No. ${\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td.ticketNumber ? d.ticketNumber : 'N/A'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: d.externalId\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

{lang.timeSheetFromDate}:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t

{lang.timeSheetToDate}:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t onSubmit(e),\n\t\t\t\t\t\t\t\te => {\n\t\t\t\t\t\t\t\t\tnotification.error({\n\t\t\t\t\t\t\t\t\t\tduration: 1,\n\t\t\t\t\t\t\t\t\t\tmessage: lang.notificationFailed,\n\t\t\t\t\t\t\t\t\t\tdescription: Object.keys(e).map(d => e[d].message)[0]\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t{tableData.loading && }\n\n\t\t\t{!tableData.loading && tableData.empty && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t{!tableData.loading && tableData.error && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t{!tableData.loading && !tableData.error && tableData.pdfFile && (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)}\n\t\t
\n\t);\n}\n\nconst componentStyles = isUser => css`\n\t.inline-scroll-wrapper {\n\t\toverflow-x: auto;\n\t\toverflow-y: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\n\t\t.react-pdf__Page__canvas {\n\t\t\tmargin: 0 auto !important;\n\t\t}\n\t}\n\n\t.date-selector-bar {\n\t\theight: 55px;\n\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\tbackground-color: ${colors.white};\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: ${isUser ? 'end' : 'space-between'};\n\t\tfont-size: 1rem;\n\t\tpadding-right: 15px;\n\t\tpadding-left: 15px;\n\n\t\t.dropdown-fields {\n\t\t\twidth: 35%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-evenly;\n\n\t\t\t& > div {\n\t\t\t\tflex-grow: 1;\n\t\t\t}\n\t\t}\n\n\t\t.right {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t.date-inputs {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\tinput {\n\t\t\tmargin: 0 0.5rem;\n\t\t\tcolor: ${colors.darkGrey};\n\t\t\tborder: 1px ${colors.darkGrey} dashed;\n\t\t\tborder-width: 0 0 1px 0;\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 769px) {\n\t\t.date-selector-bar {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\theight: initial;\n\t\t\tgap: 15px;\n\t\t\t// justify-content: ${isUser ? 'start' : 'space-between'};\n\n\t\t\t.dropdown-fields {\n\t\t\t\tmargin-top: 10px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.right {\n\t\t\t\tdisplay: block;\n\n\t\t\t\t.date-inputs {\n\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t}\n\n\t\t\t\t.buttons {\n\t\t\t\t\tmargin-top: 10px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tmargin-bottom: 10px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttable {\n\t\tposition: relative;\n\t\tborder-collapse: collapse;\n\t\tmin-width: 100%;\n\t\tmin-width: calc(100% + 1px);\n\t\tmin-height: calc(100% + 1px);\n\n\t\t.fake-total-column {\n\t\t\twidth: 40px;\n\t\t\ttext-align: center;\n\t\t\tmargin-left: 1rem;\n\t\t\tpadding-left: 0.3rem;\n\t\t\theight: 100%;\n\t\t\tflex-shrink: 0;\n\t\t}\n\n\t\tth.no-data {\n\t\t\tcolor: ${colors.midGrey};\n\t\t}\n\n\t\t.body-label {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t.show-more-button {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\twhite-space: nowrap;\n\n\t\t\tsvg {\n\t\t\t\tmargin-right: 0.15rem;\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\t\t}\n\n\t\t&.show-details {\n\t\t\t.meta-info-wrapper {\n\t\t\t\tmargin-bottom: 0.3rem;\n\t\t\t}\n\t\t}\n\n\t\t&.hide-details {\n\t\t\t.meta-info-wrapper {\n\t\t\t\tmargin-bottom: 0.15rem;\n\t\t\t\t/* white-space: nowrap; */\n\t\t\t}\n\t\t}\n\n\t\t/* All cells */\n\t\ttd,\n\t\tth {\n\t\t\tpadding: 0.5em;\n\t\t\tfont-size: 0.85rem;\n\t\t\tfont-weight: 400;\n\t\t\tcolor: ${colors.black};\n\t\t\tmin-width: 50px;\n\t\t}\n\n\t\t/* Cells in header */\n\t\tthead th {\n\t\t\tposition: -webkit-sticky; /* for Safari */\n\t\t\tposition: sticky;\n\t\t\ttop: 0;\n\t\t\tz-index: 1;\n\t\t\tbackground-color: ${colors.ultraLightGrey};\n\t\t\tcolor: ${colors.darkGrey};\n\t\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\t\tborder-right: 1px ${colors.midGrey} solid;\n\t\t\tbox-shadow: 1px 1px 0 0 ${colors.midGrey};\n\n\t\t\t&:first-child {\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 2;\n\t\t\t}\n\t\t}\n\n\t\t/* Cells in header */\n\n\t\ttbody th {\n\t\t\tposition: -webkit-sticky; /* for Safari */\n\t\t\tposition: sticky;\n\t\t\tleft: 0;\n\t\t\tbackground: #fff;\n\t\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\t\tborder-right: 1px ${colors.midGrey} solid;\n\n\t\t\t&:first-of-type {\n\t\t\t\tz-index: 1;\n\t\t\t\ttext-align: left;\n\t\t\t\tbackground-color: ${colors.white};\n\t\t\t\tbox-shadow: 1px 0 0 0 ${colors.midGrey};\n\n\t\t\t\tspan.meta {\n\t\t\t\t\tcolor: ${colors.darkGrey};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport default TimeSheetCommissioning;\n","import React, { useEffect, useLayoutEffect, useState } from 'react';\nimport { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\nimport { ArrowBackIcon, InfoOutlineIcon, PlusIcon, DownloadIcon, MagnifyIcon } from 'mdi-react';\nimport { Button, notification } from 'antd';\nimport { parse, format, startOfMonth, endOfMonth } from 'date-fns';\nimport { css } from 'emotion';\nimport { useQuery } from 'react-query';\nimport param from 'jquery-param';\nimport { Controller, useForm } from 'react-hook-form';\nimport * as yup from 'yup';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport FileSaver from 'file-saver';\nimport { useSelector } from 'react-redux';\n\nimport usePageAndBackButtonURL from '../../../hooks/usePageAndBackButtonURL';\nimport pageNavigator from '../../../utilities/page-navigator';\nimport req from '../../../utilities/request-utility';\n\nimport colors from '../../../style/colors';\nimport InlineSpinner from '../../ui/InlineSpinner';\nimport StatusBox from '../../ui/StatusBox';\nimport DropDown from '../../ui/DropDown';\nimport ActionWrapper from '../../ui/ActionWrapper';\nimport ComponentPage from '../../ui/Page';\nimport TopBar from '../../ui/TopBar';\nimport PDFRenderComponent from '../../ui/PDFRenderComponent';\n\nfunction TimeSheetSemsupport(props) {\n\tconst { user = {} } = props;\n\tconst lang = useSelector(s => s.language.language);\n\n\tconst { externalId = '', loggedUserTypeDK = 'user' } = user;\n\tconst { page, backButtonURL } = usePageAndBackButtonURL(props);\n\tconst [tableData, setTableData] = useState({\n\t\tpdfFile: '',\n\t\terror: false,\n\t\tloading: false,\n\t\tempty: false\n\t});\n\n\tconst {\n\t\tdata: { data: foremen = {} } = {},\n\t\tisFetching: foremenIsFetching,\n\t\tisLoading: foremenIsLoading,\n\t\trefetch: foremenRefetch\n\t} = useQuery(\n\t\t['GetForemen'],\n\t\t() => {\n\t\t\treturn req()(`semcotime/foremen/`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconst {\n\t\tdata: { data: foremanTeamMembers = {} } = {},\n\t\tisFetching: foremanTeamMembersIsFetching,\n\t\tisLoading: foremanTeamMembersIsLoading,\n\t\trefetch: foremanTeamMembersRefetch\n\t} = useQuery(\n\t\t['GetForemanTeamMembers'],\n\t\t() => {\n\t\t\tif (loggedUserTypeDK === 'admin') return req()(`semcotime/foremen-teams/my-team/all`);\n\n\t\t\treturn req()(`semcotime/foremen-teams/my-team`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconst schema = yup.object().shape({\n\t\tblueCollarId: yup.string().required(lang.timeSheetNoUserError),\n\t\tforemanId: yup.string(),\n\t\tfromDate: yup.string().required('From date is required'),\n\t\ttoDate: yup.string().required('To date is required')\n\t});\n\n\tconst defaultValues = {\n\t\tblueCollarId: loggedUserTypeDK === 'user' ? externalId : '',\n\t\tforemanId: '',\n\t\tfromDate: format(startOfMonth(new Date()), 'yyyy-MM-dd'),\n\t\ttoDate: format(endOfMonth(new Date()), 'yyyy-MM-dd')\n\t};\n\n\tconst {\n\t\tcontrol,\n\t\tformState: { errors },\n\t\tgetValues,\n\t\treset,\n\t\tsetValue,\n\t\thandleSubmit,\n\t\twatch\n\t} = useForm({\n\t\tdefaultValues,\n\t\tresolver: yupResolver(schema)\n\t});\n\n\tconst onSubmit = async formData => {\n\t\ttry {\n\t\t\tconst { blueCollarId = '', foremanId = '', fromDate = '', toDate = '' } = formData;\n\n\t\t\tsetTableData({ pdfFile: '', loading: true, error: false, empty: false });\n\n\t\t\tconst { data } = await req()(\n\t\t\t\t`semcotime/customer-approval/semsupport?${param({ blueCollarId, foremanId, fromDate, toDate })}`,\n\t\t\t\t{\n\t\t\t\t\tresponseType: 'blob'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tsetTableData({ loading: false, pdfFile: window.URL.createObjectURL(data), error: false, empty: false });\n\t\t} catch (err) {\n\t\t\tconst { status } = err.response;\n\t\t\tif (status === 404) return setTableData({ loading: false, pdfFile: '', error: false, empty: true });\n\n\t\t\tsetTableData({ loading: false, pdfFile: '', error: true, empty: false });\n\t\t}\n\t};\n\n\tconst onDownload = () => {\n\t\tconst { blueCollarId = '', foremanId = '', fromDate = '', toDate = '' } = watch();\n\t\tconst { name } = foremanTeamMembers.filter(d => d.externalId === blueCollarId)[0];\n\n\t\tFileSaver.saveAs(tableData.pdfFile, `${name}-${fromDate}-${toDate}`);\n\t};\n\n\treturn (\n\t\t\n\t\t\t pageNavigator(backButtonURL, 'backward')}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t/>\n\t\t\t
\n\t\t\t\t{loggedUserTypeDK != 'user' && (\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t onChange(e)}\n\t\t\t\t\t\t\t\t\t\t\tloading={foremanTeamMembersIsLoading}\n\t\t\t\t\t\t\t\t\t\t\toptions={\n\t\t\t\t\t\t\t\t\t\t\t\t!foremanTeamMembersIsLoading\n\t\t\t\t\t\t\t\t\t\t\t\t\t? foremanTeamMembers\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(d => d.externalId && d.isTemporaryUser)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(d => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: `${d.name} | Ticket No. ${\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td.ticketNumber ? d.ticketNumber : 'N/A'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: d.externalId\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{/*
\n {\n return (\n onChange(e)}\n options={!foremenIsLoading ? foremen.all.map((d) => ({ label: d.name, value: d.id })) : []}\n value={value}\n />\n );\n }}\n />\n
*/}\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

{lang.timeSheetFromDate}:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t

{lang.timeSheetToDate}:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t onSubmit(e),\n\t\t\t\t\t\t\t\te => {\n\t\t\t\t\t\t\t\t\tnotification.error({\n\t\t\t\t\t\t\t\t\t\tduration: 1,\n\t\t\t\t\t\t\t\t\t\tmessage: lang.notificationFailed,\n\t\t\t\t\t\t\t\t\t\tdescription: Object.keys(e).map(d => e[d].message)[0]\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t{tableData.loading && }\n\n\t\t\t{!tableData.loading && tableData.empty && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t{!tableData.loading && tableData.error && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t{!tableData.loading && !tableData.error && tableData.pdfFile && (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)}\n\t\t
\n\t);\n}\n\nconst componentStyles = isUser => css`\n\t.inline-scroll-wrapper {\n\t\toverflow-x: auto;\n\t\toverflow-y: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\n\t\t.react-pdf__Page__canvas {\n\t\t\tmargin: 0 auto !important;\n\t\t}\n\t}\n\n\t.date-selector-bar {\n\t\theight: 55px;\n\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\tbackground-color: ${colors.white};\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: ${isUser ? 'end' : 'space-between'};\n\t\tfont-size: 1rem;\n\t\tpadding-right: 15px;\n\t\tpadding-left: 15px;\n\n\t\t.dropdown-fields {\n\t\t\twidth: 35%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-evenly;\n\n\t\t\t& > div {\n\t\t\t\tflex-grow: 1;\n\t\t\t}\n\t\t}\n\n\t\t.right {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t.date-inputs {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\tinput {\n\t\t\tmargin: 0 0.5rem;\n\t\t\tcolor: ${colors.darkGrey};\n\t\t\tborder: 1px ${colors.darkGrey} dashed;\n\t\t\tborder-width: 0 0 1px 0;\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 769px) {\n\t\t.date-selector-bar {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\theight: initial;\n\t\t\tgap: 15px;\n\t\t\t// justify-content: ${isUser ? 'start' : 'space-between'};\n\n\t\t\t.dropdown-fields {\n\t\t\t\tmargin-top: 10px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.right {\n\t\t\t\tdisplay: block;\n\n\t\t\t\t.date-inputs {\n\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t}\n\n\t\t\t\t.buttons {\n\t\t\t\t\tmargin-top: 10px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tmargin-bottom: 10px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttable {\n\t\tposition: relative;\n\t\tborder-collapse: collapse;\n\t\tmin-width: 100%;\n\t\tmin-width: calc(100% + 1px);\n\t\tmin-height: calc(100% + 1px);\n\n\t\t.fake-total-column {\n\t\t\twidth: 40px;\n\t\t\ttext-align: center;\n\t\t\tmargin-left: 1rem;\n\t\t\tpadding-left: 0.3rem;\n\t\t\theight: 100%;\n\t\t\tflex-shrink: 0;\n\t\t}\n\n\t\tth.no-data {\n\t\t\tcolor: ${colors.midGrey};\n\t\t}\n\n\t\t.body-label {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t.show-more-button {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\twhite-space: nowrap;\n\n\t\t\tsvg {\n\t\t\t\tmargin-right: 0.15rem;\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\t\t}\n\n\t\t&.show-details {\n\t\t\t.meta-info-wrapper {\n\t\t\t\tmargin-bottom: 0.3rem;\n\t\t\t}\n\t\t}\n\n\t\t&.hide-details {\n\t\t\t.meta-info-wrapper {\n\t\t\t\tmargin-bottom: 0.15rem;\n\t\t\t\t/* white-space: nowrap; */\n\t\t\t}\n\t\t}\n\n\t\t/* All cells */\n\t\ttd,\n\t\tth {\n\t\t\tpadding: 0.5em;\n\t\t\tfont-size: 0.85rem;\n\t\t\tfont-weight: 400;\n\t\t\tcolor: ${colors.black};\n\t\t\tmin-width: 50px;\n\t\t}\n\n\t\t/* Cells in header */\n\t\tthead th {\n\t\t\tposition: -webkit-sticky; /* for Safari */\n\t\t\tposition: sticky;\n\t\t\ttop: 0;\n\t\t\tz-index: 1;\n\t\t\tbackground-color: ${colors.ultraLightGrey};\n\t\t\tcolor: ${colors.darkGrey};\n\t\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\t\tborder-right: 1px ${colors.midGrey} solid;\n\t\t\tbox-shadow: 1px 1px 0 0 ${colors.midGrey};\n\n\t\t\t&:first-child {\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 2;\n\t\t\t}\n\t\t}\n\n\t\t/* Cells in header */\n\n\t\ttbody th {\n\t\t\tposition: -webkit-sticky; /* for Safari */\n\t\t\tposition: sticky;\n\t\t\tleft: 0;\n\t\t\tbackground: #fff;\n\t\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\t\tborder-right: 1px ${colors.midGrey} solid;\n\n\t\t\t&:first-of-type {\n\t\t\t\tz-index: 1;\n\t\t\t\ttext-align: left;\n\t\t\t\tbackground-color: ${colors.white};\n\t\t\t\tbox-shadow: 1px 0 0 0 ${colors.midGrey};\n\n\t\t\t\tspan.meta {\n\t\t\t\t\tcolor: ${colors.darkGrey};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport default TimeSheetSemsupport;\n","import React, { useEffect, useLayoutEffect, useState } from 'react';\nimport { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\nimport { ArrowBackIcon, InfoOutlineIcon, PlusIcon, DownloadIcon, MagnifyIcon } from 'mdi-react';\nimport { Button, notification } from 'antd';\nimport { parse, format, startOfMonth, endOfMonth } from 'date-fns';\nimport { css } from 'emotion';\nimport { useQuery } from 'react-query';\nimport param from 'jquery-param';\nimport { Controller, useForm } from 'react-hook-form';\nimport * as yup from 'yup';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport FileSaver from 'file-saver';\n\nimport usePageAndBackButtonURL from '../../../hooks/usePageAndBackButtonURL';\nimport pageNavigator from '../../../utilities/page-navigator';\nimport req from '../../../utilities/request-utility';\n\nimport colors from '../../../style/colors';\nimport InlineSpinner from '../../ui/InlineSpinner';\nimport StatusBox from '../../ui/StatusBox';\nimport DropDown from '../../ui/DropDown';\nimport ActionWrapper from '../../ui/ActionWrapper';\nimport ComponentPage from '../../ui/Page';\nimport TopBar from '../../ui/TopBar';\nimport PDFRenderComponent from '../../ui/PDFRenderComponent';\n\nfunction TimeSheetUnapprovedHours(props) {\n\tconst { user = {} } = props;\n\tconst { id: userAppId = '', loggedUserTypeDK = 'user' } = user;\n\tconst { page, backButtonURL } = usePageAndBackButtonURL(props);\n\tconst [tableData, setTableData] = useState({\n\t\tpdfFile: '',\n\t\terror: false,\n\t\tloading: false,\n\t\tempty: false\n\t});\n\n\tconst {\n\t\tdata: { data: foremanTeamMembers = {} } = {},\n\t\tisFetching: foremanTeamMembersIsFetching,\n\t\tisLoading: foremanTeamMembersIsLoading,\n\t\trefetch: foremanTeamMembersRefetch\n\t} = useQuery(\n\t\t['GetForemanTeamMembers'],\n\t\t() => {\n\t\t\tif (loggedUserTypeDK === 'admin') return req()(`semcotime/foremen-teams/my-team/all`);\n\n\t\t\treturn req()(`semcotime/foremen-teams/my-team`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconst schema = yup.object().shape({\n\t\tblueCollarId: yup.string().required('User is required'),\n\t\tforemanId: yup.string(),\n\t\tfromDate: yup.string().required('From date is required'),\n\t\ttoDate: yup.string().required('To date is required')\n\t});\n\n\tconst defaultValues = {\n\t\tblueCollarId: loggedUserTypeDK === 'user' ? userAppId : '',\n\t\tforemanId: '',\n\t\tfromDate: format(startOfMonth(new Date()), 'yyyy-MM-dd'),\n\t\ttoDate: format(endOfMonth(new Date()), 'yyyy-MM-dd')\n\t};\n\n\tconst {\n\t\tcontrol,\n\t\tformState: { errors },\n\t\tgetValues,\n\t\treset,\n\t\tsetValue,\n\t\thandleSubmit,\n\t\twatch\n\t} = useForm({\n\t\tdefaultValues,\n\t\tresolver: yupResolver(schema)\n\t});\n\n\tconst onSubmit = async formData => {\n\t\ttry {\n\t\t\tconst { blueCollarId = '', foremanId = '', fromDate = '', toDate = '' } = formData;\n\n\t\t\tsetTableData({ pdfFile: '', loading: true, error: false, empty: false });\n\n\t\t\tconst { data } = await req()(\n\t\t\t\t`semcotime/customer-approval/unapproved?${param({ blueCollarId, foremanId, fromDate, toDate })}`,\n\t\t\t\t{\n\t\t\t\t\tresponseType: 'blob'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tsetTableData({ loading: false, pdfFile: window.URL.createObjectURL(data), error: false, empty: false });\n\t\t} catch (err) {\n\t\t\tconst { status } = err.response;\n\t\t\tif (status === 404) return setTableData({ loading: false, pdfFile: '', error: false, empty: true });\n\n\t\t\tsetTableData({ loading: false, pdfFile: '', error: true, empty: false });\n\t\t}\n\t};\n\n\tconst onDownload = () => {\n\t\tconst { blueCollarId = '', foremanId = '', fromDate = '', toDate = '' } = watch();\n\t\tconst { name } = foremanTeamMembers.filter(d => d.id === blueCollarId)[0];\n\n\t\tFileSaver.saveAs(tableData.pdfFile, `${name}-${fromDate}-${toDate}`);\n\t};\n\n\treturn (\n\t\t\n\t\t\t pageNavigator(backButtonURL, 'backward')}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t/>\n\t\t\t
\n\t\t\t\t{loggedUserTypeDK != 'user' && (\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t onChange(e)}\n\t\t\t\t\t\t\t\t\t\t\tloading={foremanTeamMembersIsLoading}\n\t\t\t\t\t\t\t\t\t\t\toptions={\n\t\t\t\t\t\t\t\t\t\t\t\t!foremanTeamMembersIsLoading\n\t\t\t\t\t\t\t\t\t\t\t\t\t? foremanTeamMembers\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(d => d.externalId)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(d => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: `${d.name} | Ticket No. ${\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td.ticketNumber ? d.ticketNumber : 'N/A'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: d.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

From:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t

To:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t onSubmit(e),\n\t\t\t\t\t\t\t\te => {\n\t\t\t\t\t\t\t\t\tnotification.error({\n\t\t\t\t\t\t\t\t\t\tduration: 1,\n\t\t\t\t\t\t\t\t\t\tmessage: 'FAILED',\n\t\t\t\t\t\t\t\t\t\tdescription: Object.keys(e).map(d => e[d].message)[0]\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t{tableData.loading && }\n\n\t\t\t{!tableData.loading && tableData.empty && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t{!tableData.loading && tableData.error && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t{!tableData.loading && !tableData.error && tableData.pdfFile && (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)}\n\t\t
\n\t);\n}\n\nconst componentStyles = isUser => css`\n\t.inline-scroll-wrapper {\n\t\toverflow-x: auto;\n\t\toverflow-y: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\n\t\t.react-pdf__Page__canvas {\n\t\t\tmargin: 0 auto !important;\n\t\t}\n\t}\n\n\t.date-selector-bar {\n\t\theight: 55px;\n\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\tbackground-color: ${colors.white};\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: ${isUser ? 'end' : 'space-between'};\n\t\tfont-size: 1rem;\n\t\tpadding-right: 15px;\n\t\tpadding-left: 15px;\n\n\t\t.dropdown-fields {\n\t\t\twidth: 35%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-evenly;\n\n\t\t\t& > div {\n\t\t\t\tflex-grow: 1;\n\t\t\t}\n\t\t}\n\n\t\t.right {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t.date-inputs {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\tinput {\n\t\t\tmargin: 0 0.5rem;\n\t\t\tcolor: ${colors.darkGrey};\n\t\t\tborder: 1px ${colors.darkGrey} dashed;\n\t\t\tborder-width: 0 0 1px 0;\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 769px) {\n\t\t.date-selector-bar {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\theight: initial;\n\t\t\tgap: 15px;\n\t\t\t// justify-content: ${isUser ? 'start' : 'space-between'};\n\n\t\t\t.dropdown-fields {\n\t\t\t\tmargin-top: 10px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.right {\n\t\t\t\tdisplay: block;\n\n\t\t\t\t.date-inputs {\n\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t}\n\n\t\t\t\t.buttons {\n\t\t\t\t\tmargin-top: 10px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tmargin-bottom: 10px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttable {\n\t\tposition: relative;\n\t\tborder-collapse: collapse;\n\t\tmin-width: 100%;\n\t\tmin-width: calc(100% + 1px);\n\t\tmin-height: calc(100% + 1px);\n\n\t\t.fake-total-column {\n\t\t\twidth: 40px;\n\t\t\ttext-align: center;\n\t\t\tmargin-left: 1rem;\n\t\t\tpadding-left: 0.3rem;\n\t\t\theight: 100%;\n\t\t\tflex-shrink: 0;\n\t\t}\n\n\t\tth.no-data {\n\t\t\tcolor: ${colors.midGrey};\n\t\t}\n\n\t\t.body-label {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t.show-more-button {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\twhite-space: nowrap;\n\n\t\t\tsvg {\n\t\t\t\tmargin-right: 0.15rem;\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\t\t}\n\n\t\t&.show-details {\n\t\t\t.meta-info-wrapper {\n\t\t\t\tmargin-bottom: 0.3rem;\n\t\t\t}\n\t\t}\n\n\t\t&.hide-details {\n\t\t\t.meta-info-wrapper {\n\t\t\t\tmargin-bottom: 0.15rem;\n\t\t\t\t/* white-space: nowrap; */\n\t\t\t}\n\t\t}\n\n\t\t/* All cells */\n\t\ttd,\n\t\tth {\n\t\t\tpadding: 0.5em;\n\t\t\tfont-size: 0.85rem;\n\t\t\tfont-weight: 400;\n\t\t\tcolor: ${colors.black};\n\t\t\tmin-width: 50px;\n\t\t}\n\n\t\t/* Cells in header */\n\t\tthead th {\n\t\t\tposition: -webkit-sticky; /* for Safari */\n\t\t\tposition: sticky;\n\t\t\ttop: 0;\n\t\t\tz-index: 1;\n\t\t\tbackground-color: ${colors.ultraLightGrey};\n\t\t\tcolor: ${colors.darkGrey};\n\t\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\t\tborder-right: 1px ${colors.midGrey} solid;\n\t\t\tbox-shadow: 1px 1px 0 0 ${colors.midGrey};\n\n\t\t\t&:first-child {\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 2;\n\t\t\t}\n\t\t}\n\n\t\t/* Cells in header */\n\n\t\ttbody th {\n\t\t\tposition: -webkit-sticky; /* for Safari */\n\t\t\tposition: sticky;\n\t\t\tleft: 0;\n\t\t\tbackground: #fff;\n\t\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\t\tborder-right: 1px ${colors.midGrey} solid;\n\n\t\t\t&:first-of-type {\n\t\t\t\tz-index: 1;\n\t\t\t\ttext-align: left;\n\t\t\t\tbackground-color: ${colors.white};\n\t\t\t\tbox-shadow: 1px 0 0 0 ${colors.midGrey};\n\n\t\t\t\tspan.meta {\n\t\t\t\t\tcolor: ${colors.darkGrey};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport default TimeSheetUnapprovedHours;\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useQuery } from 'react-query';\nimport { notification, Tabs } from 'antd';\nimport { useMediaQuery } from 'react-responsive';\n// css\nimport { css } from 'emotion';\nimport { ArrowBackIcon } from 'mdi-react';\nimport colors from '../../../style/colors';\n\nimport TopBar from '../../ui/TopBar';\nimport Page from '../../ui/Page';\nimport getBackButtonUrl from '../../../utilities/get-back-button-url';\nimport getPageFromId from '../../../utilities/get-page-from-id';\nimport ActionWrapper from '../../ui/ActionWrapper';\nimport pageNavigator from '../../../utilities/page-navigator';\nimport DropDown from '../../ui/DropDown';\nimport InlineSpinner from '../../ui/InlineSpinner';\n\nimport TimesheetRenderModal from './TimesheetSignatureComponents/TimesheetRenderModal';\nimport TimesheetListItem from './TimesheetSignatureComponents/TimesheetListItem';\n\n// utilities\nimport req from '../../../utilities/request-utility';\n\nconst TimesheetsSigned = props => {\n\tconst pages = useSelector(s => s.pages.pages);\n\tconst loggedInUser = props.user;\n\tconst { id: loggedInUserID, loggedUserTypeDK } = loggedInUser;\n\tconst page = getPageFromId(pages, props.match.params.pageId);\n\tconst backButtonURL = getBackButtonUrl(page);\n\n\tconst [selectedEmployee, setSelectedEmployee] = useState(loggedUserTypeDK === 'foreman' ? loggedInUserID : null);\n\tconst [selectedTimesheet, setSelectedTimesheet] = useState({});\n\tconst [toggleModal, setToggleModal] = useState(false);\n\n\tconst lang = useSelector(({ language }) => language.language);\n\n\tconst isMobile = useMediaQuery({ maxWidth: '414px' });\n\n\tconst {\n\t\tdata: { data: foremanTeamMembers = [] } = {},\n\t\tisFetching: foremanTeamMembersIsFetching,\n\t\tisLoading: foremanTeamMembersIsLoading,\n\t\trefetch: foremanTeamMembersRefetch\n\t} = useQuery(\n\t\t['GetForemanTeamMembers'],\n\t\t() => {\n\t\t\tif (loggedUserTypeDK === 'admin') return req()(`semcotime/foremen-teams/my-team/all`);\n\n\t\t\treturn req()(`semcotime/foremen-teams/my-team`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000,\n\t\t\trefetchOnWindowFocus: false,\n\t\t\tdisabled: loggedUserTypeDK === 'user'\n\t\t}\n\t);\n\n\tconst {\n\t\tdata: { data: allSubmittedData = [] } = {},\n\t\tisFetching: allSubmittedIsFetching,\n\t\tisLoading: allSubmittedIsLoading,\n\t\trefetch: allSubmittedRefetch\n\t} = useQuery(\n\t\t['AllSubmitted', selectedEmployee],\n\t\t({ queryKey: [key, selectedEmployee] = [] }) => {\n\t\t\tconst blueCollarId = selectedEmployee ? selectedEmployee : loggedInUserID;\n\t\t\treturn req()(`semcotime/timesheet/getAllSubmitted/${blueCollarId}`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconsole.log('allSubmittedData: ', allSubmittedData);\n\n\treturn (\n\t\t\n\t\t\t pageNavigator(backButtonURL, 'backward')}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttitle={page.title}\n\t\t\t/>\n\t\t\t{(loggedUserTypeDK === 'admin' || loggedUserTypeDK === 'foreman') && (\n\t\t\t\t
\n\t\t\t\t\t setSelectedEmployee(e.target.value)}\n\t\t\t\t\t\tloading={foremanTeamMembersIsLoading}\n\t\t\t\t\t\toptions={\n\t\t\t\t\t\t\t!foremanTeamMembersIsLoading\n\t\t\t\t\t\t\t\t? foremanTeamMembers\n\t\t\t\t\t\t\t\t\t\t.filter(d => d.externalId)\n\t\t\t\t\t\t\t\t\t\t.map(d => ({\n\t\t\t\t\t\t\t\t\t\t\tlabel: `${d.name} | Ticket No. ${d.ticketNumber ? d.ticketNumber : 'N/A'}`,\n\t\t\t\t\t\t\t\t\t\t\tvalue: d.id\n\t\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={selectedEmployee}\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t)}\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t{'Submitted Timesheets'}{' '}\n\t\t\t\t\t\t\t\t{allSubmittedData.length > 0 ? <>{allSubmittedData.length} : ''}\n\t\t\t\t\t\t\t\t{(allSubmittedIsLoading || allSubmittedIsFetching) && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkey=\"1\">\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{allSubmittedIsLoading && }\n\n\t\t\t\t\t\t\t{!allSubmittedIsLoading && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t\n\t\t
\n\t);\n};\n\nconst componentStyles = isUser => css`\n\tbackground-color: ${colors.white} !important;\n\n\t.inline-scroll-wrapper {\n\t\toverflow-x: auto;\n\t\toverflow-y: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\n\t\tpadding: 1rem;\n\n\t\t.react-pdf__Page__canvas {\n\t\t\tmargin: 0 auto !important;\n\t\t}\n\t}\n`;\n\nexport default TimesheetsSigned;\n","import React, { useEffect, useState } from \"react\";\nimport { ArrowBackIcon, InfoOutlineIcon, MagnifyIcon, CircleMediumIcon } from \"mdi-react\";\nimport { Button, Col, Collapse, Descriptions, notification, Row, Table } from \"antd\";\nimport { format, startOfMonth, endOfMonth } from \"date-fns\";\nimport { css } from \"emotion\";\nimport { useQuery, useMutation, useQueryClient } from \"react-query\";\nimport param from \"jquery-param\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { isEmpty } from \"lodash\";\n\nimport { useMediaQuery } from \"react-responsive\";\n\nimport usePageAndBackButtonURL from \"../../../hooks/usePageAndBackButtonURL\";\nimport pageNavigator from \"../../../utilities/page-navigator\";\nimport req from \"../../../utilities/request-utility\";\n\nimport colors from \"../../../style/colors\";\nimport InlineSpinner from \"../../ui/InlineSpinner\";\nimport StatusBox from \"../../ui/StatusBox\";\nimport DropDown from \"../../ui/DropDown\";\nimport ActionWrapper from \"../../ui/ActionWrapper\";\nimport ComponentPage from \"../../ui/Page\";\nimport TopBar from \"../../ui/TopBar\";\n\nfunction WorkTimeCorrectionsTimeAppSide(props) {\n const { user = {} } = props;\n const { id: userAppId = \"\", loggedUserTypeDK = \"user\" } = user;\n const { page, backButtonURL } = usePageAndBackButtonURL(props);\n const [getAllUnreadCorrections, setGetAllUnreadCorrections] = useState(true);\n\n const { Panel } = Collapse;\n const isMobile = useMediaQuery({ maxWidth: \"414px\" });\n const queryClient = useQueryClient();\n\n const defaultValues = {\n blueCollarId: userAppId,\n fromDate: format(startOfMonth(new Date()), \"yyyy-MM-dd\"),\n toDate: format(endOfMonth(new Date()), \"yyyy-MM-dd\"),\n };\n\n const {\n control,\n formState: { errors },\n getValues,\n reset,\n setValue,\n handleSubmit,\n watch,\n } = useForm({\n defaultValues,\n resolver: yupResolver(schema),\n });\n\n const {\n data: { data: foremanTeamMembers = {} } = {},\n isFetching: foremanTeamMembersIsFetching,\n isLoading: foremanTeamMembersIsLoading,\n refetch: foremanTeamMembersRefetch,\n } = useQuery(\n [\"GetForemanTeamMembers\"],\n () => {\n if (loggedUserTypeDK === \"admin\") return req()(`semcotime/foremen-teams/my-team/all`);\n\n return req()(`semcotime/foremen-teams/my-team`);\n },\n {\n staleTime: 30 * 1000,\n }\n );\n\n const onSubmit = async () => {\n try {\n const { blueCollarId = \"\", fromDate = \"\", toDate = \"\" } = watch();\n\n const { data } = await req()(\n `semcotime/corrections/time-app?${param({\n blueCollarId,\n fromDate,\n toDate,\n getAllUnreadCorrections,\n })}`,\n {\n responseType: \"application/json\",\n }\n );\n\n return data;\n } catch (err) {\n const { status } = err.response;\n console.log(\"status: \", status);\n }\n };\n\n const {\n data: correctionsData = [],\n isFetching: correctionsDataIsFetching,\n isLoading: correctionsDataIsLoading,\n refetch: correctionsDataRefetch,\n error: correctionsDataError,\n } = useQuery([\"getCorrectionsTimeApp\"], onSubmit, {\n // enabled: false,\n retry: false,\n refetchOnWindowFocus: false,\n });\n\n const markCorrectionRead = async (id) => await req().put(`semcotime/corrections/time-app/markAsRead/${id}`);\n\n const { mutateAsync: markCorrectionAsRead } = useMutation(markCorrectionRead, {\n onSuccess: (data) => {\n queryClient.setQueryData(\"getCorrectionsTimeApp\", (old) =>\n old.map((d) =>\n d.originalData.id == data.data.recordId\n ? {\n ...d,\n isCorrectionRead: true,\n }\n : d\n )\n );\n },\n });\n\n const schema = yup.object().shape({\n blueCollarId: yup.string().required(\"User is required\"),\n foremanId: yup.string(),\n fromDate: yup.string().required(\"From date is required\"),\n toDate: yup.string().required(\"To date is required\"),\n });\n // crude work around\n const timeRegistrationsTypes = {\n 1: \"Work Hours\",\n 2: \"Standby\",\n 3: \"Paid Rest\",\n 4: \"Driving Hours\",\n 5: \"Heli Time Out\",\n 6: \"Heli Time Home\",\n 7: \"Waiting Hours\",\n };\n\n const renderCorrectedRegistrations = (key, value, record) => {\n const { data, status } = record;\n\n return (\n \n {key == \"type\" ? timeRegistrationsTypes[value] : value}\n \n );\n };\n\n const renderCorrectedFormFields = (key, formChanges, originalData) => {\n const isUpdated = formChanges[key];\n const fieldValue = isUpdated ? formChanges[key] : originalData[key];\n\n return (\n \n {fieldValue}\n

\n );\n };\n\n useEffect(() => {\n (async () => {\n await correctionsDataRefetch();\n setGetAllUnreadCorrections(false);\n })();\n }, []);\n\n return (\n \n pageNavigator(backButtonURL, \"backward\")}>\n \n \n }\n />\n
\n {loggedUserTypeDK != \"user\" && (\n
\n
\n {\n return (\n onChange(e)}\n loading={foremanTeamMembersIsLoading}\n options={\n !foremanTeamMembersIsLoading\n ? foremanTeamMembers\n .filter((d) => d.externalId)\n .map((d) => ({\n label: `${d.name} | Ticket No. ${d.ticketNumber ? d.ticketNumber : \"N/A\"}`,\n value: d.id,\n }))\n : []\n }\n value={value}\n />\n );\n }}\n />\n
\n
\n )}\n
\n
\n

From:

\n {\n return onChange(e)} />;\n }}\n />\n

To:

\n {\n return onChange(e)} />;\n }}\n />\n
\n
\n \n
\n
\n
\n {correctionsDataIsFetching && }\n {!correctionsDataIsFetching && correctionsData.length === 0 && (\n }\n >\n )}\n {!correctionsDataIsFetching && correctionsDataError && (\n }>\n )}\n\n
\n {!correctionsDataIsFetching && !isEmpty(correctionsData) && (\n
\n {\n if (e) markCorrectionAsRead(e);\n }}\n >\n {correctionsData.map((d, i) => {\n const {\n date,\n isCorrectionRead = false,\n originalData,\n formChanges,\n foremanLastEditedBy,\n formattedRegistrations,\n } = d;\n\n return (\n : null}\n >\n \n \n \n {originalData.project}\n {originalData.subProject}\n {originalData.activity}\n {originalData.location}\n {originalData.trade}\n {originalData.foreman}\n \n {timeRegistrationsTypes[type]},\n },\n {\n title: \"From\",\n dataIndex: \"startTime\",\n key: \"startTime\",\n },\n {\n title: \"To\",\n dataIndex: \"endTime\",\n key: \"endTime\",\n },\n ]}\n dataSource={originalData.timeRegistrations}\n size=\"small\"\n pagination={false}\n />\n \n \n \n\n \n \n \n {renderCorrectedFormFields(\"project\", formChanges, originalData)}\n \n \n {renderCorrectedFormFields(\"subProject\", formChanges, originalData)}\n \n \n {renderCorrectedFormFields(\"activity\", formChanges, originalData)}\n \n \n {renderCorrectedFormFields(\"location\", formChanges, originalData)}\n \n \n {renderCorrectedFormFields(\"trade\", formChanges, originalData)}\n \n \n {renderCorrectedFormFields(\"foreman\", formChanges, originalData)}\n \n \n renderCorrectedRegistrations(\"type\", value, record),\n },\n {\n title: \"From\",\n dataIndex: \"startTime\",\n key: \"startTime\",\n render: (value, record) => renderCorrectedRegistrations(\"startTime\", value, record),\n },\n {\n title: \"To\",\n dataIndex: \"endTime\",\n key: \"endTime\",\n render: (value, record) => renderCorrectedRegistrations(\"endTime\", value, record),\n },\n ]}\n dataSource={formattedRegistrations}\n rowClassName={(row) => {\n if (row.status === \"added\") return \"added-row\";\n if (row.status === \"updated\") return \"updated-row\";\n }}\n size=\"small\"\n pagination={false}\n />\n \n \n \n \n \n );\n })}\n \n
\n )}\n\n
\n
\n );\n}\n\nconst componentStyles = (isUser) => css`\n .inline-scroll-wrapper {\n overflow-x: auto;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n\n .react-pdf__Page__canvas {\n margin: 0 auto !important;\n }\n\n .ant-descriptions-item-label {\n background: #103447;\n color: white;\n font-weight: 600;\n }\n\n .added-row {\n background-color: #32cd32;\n font-weight: bold;\n }\n\n .updated-row {\n background-color: #ffa500;\n }\n }\n\n .date-selector-bar {\n height: 55px;\n border-bottom: 1px ${colors.midGrey} solid;\n background-color: ${colors.white};\n display: flex;\n align-items: center;\n justify-content: ${isUser ? \"end\" : \"space-between\"};\n font-size: 1rem;\n padding-right: 15px;\n padding-left: 15px;\n\n .dropdown-fields {\n width: 35%;\n display: flex;\n justify-content: space-evenly;\n\n & > div {\n flex-grow: 1;\n }\n }\n\n .right {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .date-inputs {\n display: contents;\n }\n\n input {\n margin: 0 0.5rem;\n color: ${colors.darkGrey};\n border: 1px ${colors.darkGrey} dashed;\n border-width: 0 0 1px 0;\n font-size: 1rem;\n }\n }\n\n @media screen and (max-width: 769px) {\n .date-selector-bar {\n display: flex;\n flex-direction: column;\n height: initial;\n gap: 15px;\n // justify-content: ${isUser ? \"start\" : \"space-between\"};\n\n .dropdown-fields {\n margin-top: 10px;\n width: 100%;\n }\n\n .right {\n display: block;\n\n .date-inputs {\n display: inline-flex;\n }\n\n .buttons {\n margin-top: 10px;\n display: flex;\n justify-content: center;\n margin-bottom: 10px;\n }\n }\n }\n }\n`;\n\nexport default WorkTimeCorrectionsTimeAppSide;\n","import React, { useState } from 'react';\nimport { ArrowBackIcon, InfoOutlineIcon, MagnifyIcon } from 'mdi-react';\nimport { Button, Col, Collapse, Descriptions, notification, Row, Table } from 'antd';\nimport { format, startOfMonth, endOfMonth } from 'date-fns';\nimport { css } from 'emotion';\nimport { useQuery } from 'react-query';\nimport param from 'jquery-param';\nimport { Controller, useForm } from 'react-hook-form';\nimport * as yup from 'yup';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport { isEmpty, startCase } from 'lodash';\n\nimport { useMediaQuery } from 'react-responsive';\n\nimport usePageAndBackButtonURL from '../../../hooks/usePageAndBackButtonURL';\nimport pageNavigator from '../../../utilities/page-navigator';\nimport req from '../../../utilities/request-utility';\n\nimport colors from '../../../style/colors';\nimport InlineSpinner from '../../ui/InlineSpinner';\nimport StatusBox from '../../ui/StatusBox';\nimport DropDown from '../../ui/DropDown';\nimport ActionWrapper from '../../ui/ActionWrapper';\nimport ComponentPage from '../../ui/Page';\nimport TopBar from '../../ui/TopBar';\n\nfunction WorkTimeCorrectionsIFSSide(props) {\n\tconst { user = {} } = props;\n\tconst { externalId: userEmployeeId = '', loggedUserTypeDK = 'user' } = user;\n\tconst { page, backButtonURL } = usePageAndBackButtonURL(props);\n\tconst [correctionsData, setCorrectionsData] = useState({\n\t\tdata: [],\n\t\terror: false,\n\t\tloading: false,\n\t\tempty: false\n\t});\n\n\tconst { Panel } = Collapse;\n\tconst isMobile = useMediaQuery({ maxWidth: '414px' });\n\n\tconst {\n\t\tdata: { data: foremanTeamMembers = {} } = {},\n\t\tisFetching: foremanTeamMembersIsFetching,\n\t\tisLoading: foremanTeamMembersIsLoading,\n\t\trefetch: foremanTeamMembersRefetch\n\t} = useQuery(\n\t\t['GetForemanTeamMembers'],\n\t\t() => {\n\t\t\tif (loggedUserTypeDK === 'admin') return req()(`semcotime/foremen-teams/my-team/all`);\n\n\t\t\treturn req()(`semcotime/foremen-teams/my-team`);\n\t\t},\n\t\t{\n\t\t\tstaleTime: 30 * 1000\n\t\t}\n\t);\n\n\tconst schema = yup.object().shape({\n\t\temployeeId: yup.string().required('User is required'),\n\t\tforemanId: yup.string(),\n\t\tfromDate: yup.string().required('From date is required'),\n\t\ttoDate: yup.string().required('To date is required')\n\t});\n\n\tconst defaultValues = {\n\t\temployeeId: loggedUserTypeDK === 'user' ? userEmployeeId : '',\n\t\tfromDate: format(startOfMonth(new Date()), 'yyyy-MM-dd'),\n\t\ttoDate: format(endOfMonth(new Date()), 'yyyy-MM-dd')\n\t};\n\n\tconst {\n\t\tcontrol,\n\t\tformState: { errors },\n\t\tgetValues,\n\t\treset,\n\t\tsetValue,\n\t\thandleSubmit,\n\t\twatch\n\t} = useForm({\n\t\tdefaultValues,\n\t\tresolver: yupResolver(schema)\n\t});\n\n\tconst onSubmit = async formData => {\n\t\ttry {\n\t\t\tconst { employeeId = '', fromDate = '', toDate = '' } = formData;\n\n\t\t\tsetCorrectionsData({ loading: true, error: false, empty: false });\n\n\t\t\tconst { data } = await req()(`semcotime/corrections/ifs?${param({ employeeId, fromDate, toDate })}`, {\n\t\t\t\tresponseType: 'application/json'\n\t\t\t});\n\n\t\t\tsetCorrectionsData({ data, loading: false, error: false, empty: false });\n\t\t} catch (err) {\n\t\t\tconst { status } = err.response;\n\t\t\tif (status === 404) return setCorrectionsData({ loading: false, error: false, empty: true });\n\n\t\t\tsetCorrectionsData({ loading: false, error: true, empty: false });\n\t\t}\n\t};\n\n\tconst renderCorrectedRegistrations = (key, value, record) => {\n\t\tconst { data, status } = record;\n\t\treturn (\n\t\t\t\n\t\t\t\t{key == 'type' ? startCase(value) : value}\n\t\t\t\n\t\t);\n\t};\n\n\tconst renderCorrectedFormFields = (key, formChanges, originalData) => {\n\t\tconst isUpdated = formChanges[key];\n\t\tconst fieldValue = isUpdated ? formChanges[key] : originalData[key];\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{fieldValue}\n\t\t\t

\n\t\t);\n\t};\n\n\treturn (\n\t\t\n\t\t\t pageNavigator(backButtonURL, 'backward')}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t/>\n\t\t\t
\n\t\t\t\t{loggedUserTypeDK != 'user' && (\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t onChange(e)}\n\t\t\t\t\t\t\t\t\t\t\tloading={foremanTeamMembersIsLoading}\n\t\t\t\t\t\t\t\t\t\t\toptions={\n\t\t\t\t\t\t\t\t\t\t\t\t!foremanTeamMembersIsLoading\n\t\t\t\t\t\t\t\t\t\t\t\t\t? foremanTeamMembers\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(d => d.externalId)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(d => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: `${d.name} | Ticket No. ${\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td.ticketNumber ? d.ticketNumber : 'N/A'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: d.externalId\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

From:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t

To:

\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\treturn onChange(e)} />;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t onSubmit(e),\n\t\t\t\t\t\t\t\te => {\n\t\t\t\t\t\t\t\t\tnotification.error({\n\t\t\t\t\t\t\t\t\t\tduration: 1,\n\t\t\t\t\t\t\t\t\t\tmessage: 'FAILED',\n\t\t\t\t\t\t\t\t\t\tdescription: Object.keys(e).map(d => e[d].message)[0]\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t{correctionsData.loading && }\n\t\t\t{!correctionsData.loading && correctionsData.empty && (\n\t\t\t\t}>\n\t\t\t)}\n\t\t\t{!correctionsData.loading && correctionsData.error && (\n\t\t\t\t}>\n\t\t\t)}\n\n\t\t\t
\n\t\t\t{!correctionsData.loading && !isEmpty(correctionsData.data) && (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{correctionsData.data.map((d, i) => {\n\t\t\t\t\t\t\tconst { date, originalFormData, correctedFormData, correctedBy, timeRegistrationChanges } =\n\t\t\t\t\t\t\t\td;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{originalFormData.project}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{originalFormData.subProject}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{originalFormData.activity}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{originalFormData.location}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{originalFormData.trade}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{originalFormData.foreman}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t {startCase(type)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: 'From',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdataIndex: 'InTime',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey: 'InTime'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: 'To',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdataIndex: 'OutTime',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey: 'OutTime'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdataSource={originalFormData.timeRegistrations}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpagination={false}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{renderCorrectedFormFields(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'project',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcorrectedFormData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toriginalFormData\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{renderCorrectedFormFields(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'subProject',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcorrectedFormData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toriginalFormData\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{renderCorrectedFormFields(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'activity',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcorrectedFormData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toriginalFormData\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{renderCorrectedFormFields(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'location',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcorrectedFormData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toriginalFormData\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{renderCorrectedFormFields(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'trade',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcorrectedFormData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toriginalFormData\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{renderCorrectedFormFields(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'foreman',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcorrectedFormData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toriginalFormData\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trenderCorrectedRegistrations('type', value, record)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: 'From',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdataIndex: 'InTime',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey: 'InTime',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trender: (value, record) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trenderCorrectedRegistrations(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'InTime',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trecord\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: 'To',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdataIndex: 'OutTime',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey: 'OutTime',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trender: (value, record) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trenderCorrectedRegistrations(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'OutTime',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trecord\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdataSource={timeRegistrationChanges}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trowClassName={row => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (row.status === 'added') return 'added-row';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (row.status === 'updated') return 'updated-row';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpagination={false}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)}\n\n\t\t\t
\n\t\t
\n\t);\n}\n\nconst componentStyles = isUser => css`\n\t.inline-scroll-wrapper {\n\t\toverflow-x: auto;\n\t\toverflow-y: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\n\t\t.react-pdf__Page__canvas {\n\t\t\tmargin: 0 auto !important;\n\t\t}\n\n\t\t.ant-descriptions-item-label {\n\t\t\tbackground: #103447;\n\t\t\tcolor: white;\n\t\t\tfont-weight: 600;\n\t\t}\n\n\t\t.added-row {\n\t\t\tbackground-color: #32cd32;\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t.updated-row {\n\t\t\tbackground-color: #ffa500;\n\t\t}\n\t}\n\n\t.date-selector-bar {\n\t\theight: 55px;\n\t\tborder-bottom: 1px ${colors.midGrey} solid;\n\t\tbackground-color: ${colors.white};\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: ${isUser ? 'end' : 'space-between'};\n\t\tfont-size: 1rem;\n\t\tpadding-right: 15px;\n\t\tpadding-left: 15px;\n\n\t\t.dropdown-fields {\n\t\t\twidth: 35%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-evenly;\n\n\t\t\t& > div {\n\t\t\t\tflex-grow: 1;\n\t\t\t}\n\t\t}\n\n\t\t.right {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t.date-inputs {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\tinput {\n\t\t\tmargin: 0 0.5rem;\n\t\t\tcolor: ${colors.darkGrey};\n\t\t\tborder: 1px ${colors.darkGrey} dashed;\n\t\t\tborder-width: 0 0 1px 0;\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 769px) {\n\t\t.date-selector-bar {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\theight: initial;\n\t\t\tgap: 15px;\n\t\t\t// justify-content: ${isUser ? 'start' : 'space-between'};\n\n\t\t\t.dropdown-fields {\n\t\t\t\tmargin-top: 10px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.right {\n\t\t\t\tdisplay: block;\n\n\t\t\t\t.date-inputs {\n\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t}\n\n\t\t\t\t.buttons {\n\t\t\t\t\tmargin-top: 10px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tmargin-bottom: 10px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport default WorkTimeCorrectionsIFSSide;\n","// Libs\nimport React, { Component, Suspense } from 'react';\nimport { Route, Switch } from 'react-router';\nimport queryString from 'query-string';\nimport { Router } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { TransitionGroup, CSSTransition } from 'react-transition-group';\nimport { bindActionCreators } from 'redux';\nimport { css } from 'emotion';\nimport { pdfjs } from 'react-pdf';\n\n// Redux actions\nimport { checkToken } from './actions/authActions';\nimport { getPages } from './actions/pagesActions';\nimport { getAppConfig } from './actions/appConfigActions';\nimport { getLanguage } from './actions/languageActions';\n\n// Components\nimport FrontPage from './components/FrontPage';\nimport InstallationFlow from './components/installationFlow/InstallationFlow';\nimport LoginPage from './components/login/LoginPage';\nimport NavigationList from './components/NavigationList';\nimport Profile from './components/profile/Profile';\nimport SideMenu from './components/SideMenu';\n\n// Semcompletion\nimport SemcompletionOverview from './components/semcompletion/SemcompletionOverviewLazy';\nimport PunchOverview from './components/semcompletion/punch/PunchOverview';\nimport PunchSingle from './components/semcompletion/punch/PunchSingle';\nimport JobPackage from './components/semcompletion/JobPackageLazy';\nimport TestSheet from './components/semcompletion/TestSheetLazy';\nimport Search from './components/semcompletion/SearchLazy';\nimport SemcompltionProjectChooser from './components/semcompletion/SemcompletionProjectChooser';\nimport SemcompletionInitializer from './components/semcompletion/SemcompletionInitializer';\nimport MasterGroupProjects from './components/semcompletion/admin/masterGroupProjects/Overview';\n\n// semco-time\nimport WorkTimeOverview from './components/semco-time/WorkTimeOverview';\nimport AbsenceOverview from './components/semco-time/AbsenceOverview';\nimport CorrectionOverview from './components/semco-time/CorrectionOverview';\nimport ForemanRegistration from './components/semco-time/ForemanRegistration';\nimport ForemanTeamPage from './components/semco-time/ForemanTeam/ForemanTeamPage';\nimport AdminView from './components/semco-time/AdminView';\n\n// UI Components\nimport ContextMenu from './components/ui/ContextMenu';\nimport Dialog from './components/ui/Dialog';\nimport LoadingPage from './components/ui/LoadingPage';\nimport ModalPage from './components/ui/ModalPage';\nimport Lightbox from './components/ui/Lightbox';\nimport SkeletonPage from './components/ui/SkeletonPage';\nimport AbsenceOverviewDK from './components/AbsenceDK/AbsenceOverviewDK';\nimport WorkTimeTable from './components/semco-time/WorkTimeTable';\nimport WorkTimeOverviewDK from './components/WorkTimeDK/WorkTimeOverviewDK';\nimport ContactItSupport from './components/ui/ContactItSupport';\nimport CustomMessageModal from './components/ui/CustomMessageModal';\n\n// Approvals\nimport TimeSheetCommissioning from './components/WorkTimeDK/customerApproval/TimeSheetCommissioning';\nimport TimeSheetForeman from './components/WorkTimeDK/customerApproval/TimeSheetForeman';\nimport TimeSheetSemsupport from './components/WorkTimeDK/customerApproval/TimeSheetSemsupport';\nimport TimeSheetUnapprovedHours from './components/WorkTimeDK/customerApproval/TimeSheetUnapprovedHours';\nimport TimesheetsPendingSignature from './components/WorkTimeDK/customerApproval/TimesheetsPendingSignature';\nimport TimesheetsSigned from './components/WorkTimeDK/customerApproval/TimesheetsSigned';\n\n// Reports\nimport WorkTimeNptHottReportDK from './components/WorkTimeDK/reports/WorkTimeNptHottReportDK';\nimport WorkTimePendingApprovalHoursTimesheetDK from './components/WorkTimeDK/reports/WorkTimePendingApprovalHoursTimesheetDK';\nimport WorkTimePendingApprovalHoursTimesheetTeamSelectedDK from './components/WorkTimeDK/reports/WorkTimePendingApprovalHoursTimesheetTeamSelectedDK';\n\n// Corrections\nimport WorktimeCorrectionsTimeAppSide from './components/WorkTimeDK/corrections/WorktimeCorrectionsTimeAppSide';\nimport WorkTimeCorrectionsIFSSide from './components/WorkTimeDK/corrections/WorkTimeCorrectionsIFSSide ';\n\n// Utilities\nimport history from './utilities/navigation-history';\n\n// actions\nimport { showDialog } from './actions/uiActions';\n\n// icons\nimport { AlertDecagramIcon } from 'mdi-react';\n\nimport 'antd/dist/antd.css';\nimport './global.css';\n\npdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;\n\nclass App extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tisStandalone: false,\n\t\t\tisAndroid: false,\n\t\t\tisIOS: false,\n\t\t\tshowInstallationGuide: false\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.checkPotentialRedirect();\n\t\tthis.props.getAppConfig();\n\t\tthis.props.checkToken();\n\t\tthis.findUserAgent();\n\t\tthis.detectStandalone();\n\t\tdocument.querySelector('.hardcoded-spinner').remove();\n\n\t\t// Check if app i installed to home screen. Otherwise show dialog to prompt user to install it\n\t\t// setTimeout(() => {\n\t\t// if (process.env.NODE_ENV === \"development\") return;\n\n\t\t// // Get potential user from query-string\n\t\t// let queryStrings = queryString.parse(window.location.search);\n\n\t\t// // Cancels installation guide\n\t\t// if (Number(queryStrings.ignoreInstallationGuide) === 1 || String(queryStrings.ignoreInstallationGuide) === \"true\")\n\t\t// return;\n\n\t\t// if (!this.state.isStandalone && (this.state.isIOS || this.state.isAndroid) && this.props.auth.isAuthenticated) {\n\t\t// // If app is not installed and the device is either ios or android but the user is logged in, show installation help prompt\n\t\t// this.displayAddToHomeScreenDialog();\n\t\t// } else if (\n\t\t// (!this.state.isStandalone && (this.state.isIOS || this.state.isAndroid) && !this.props.auth.isAuthenticated) ||\n\t\t// queryStrings.showInstallationScreen\n\t\t// ) {\n\t\t// // If app is not installed and the device is either ios or android or a querystring is present in url and the\n\t\t// // user is not logged in, show installation guide\n\t\t// this.setState({ showInstallationGuide: true });\n\t\t// }\n\t\t// }, 0);\n\t}\n\n\tcheckPotentialRedirect() {\n\t\tlet { hostname, pathname } = window.location;\n\t\t// Redirects from root to semcoTIme\n\t\t// if (\n\t\t// \t(hostname === 'semcotime.com' || hostname === 'test-semcotime.com') &&\n\t\t// \t(pathname === '' || pathname === '/')\n\t\t// ) {\n\t\t// \twindow.location.replace(`https://${window.location.host}/semcotime`);\n\t\t// }\n\n\t\tif (\n\t\t\thostname === 'semcotime.com' &&\n\t\t\t(pathname === '' || pathname === '/' || pathname === '/semcotime' || pathname === '/semcotime-dk')\n\t\t) {\n\t\t\twindow.location.replace(`https://semcotimedknoapp.semcomaritime.com/${pathname}`);\n\t\t}\n\n\t\tif (\n\t\t\thostname === 'test-semcotime.com' &&\n\t\t\t(pathname === '' || pathname === '/' || pathname === '/semcotime' || pathname === '/semcotime-dk')\n\t\t) {\n\t\t\twindow.location.replace(`https://semcotimedknoapp-test.semcomaritime.com/${pathname}`);\n\t\t}\n\n\t\t// Redirects from root to semcompletion\n\t\tif (\n\t\t\t(hostname === 'semcompletion.com' || hostname === 'test-semcompletion.com') &&\n\t\t\t(pathname === '' || pathname === '/')\n\t\t) {\n\t\t\twindow.location.replace(`https://${window.location.host}/semcompletion`);\n\t\t}\n\t}\n\n\t// Denne function er oplagt til at lave som custom hook med state variablerne isIOS og isAndroud. Det kræver bare at App classen skrives om til et Function component\n\tfindUserAgent() {\n\t\tlet userAgent = navigator.userAgent || navigator.vendor || window.opera;\n\t\tthis.setState({ isIOS: userAgent.match(/iPad|iPhone|iPod/) !== null ? true : false });\n\t\tthis.setState({ isAndroid: userAgent.match(/Android/) !== null ? true : false });\n\t}\n\n\tdetectStandalone() {\n\t\tthis.setState({ isStandalone: window.matchMedia('(display-mode: standalone)').matches });\n\t}\n\n\tdisplayAddToHomeScreenDialog() {\n\t\tlet { lang, showDialog } = this.props;\n\n\t\tshowDialog({\n\t\t\ticon: ,\n\t\t\ttitle: lang.installationHeyThere,\n\t\t\tcontent: lang.dialogNotAddedToHomescreenContent,\n\t\t\tprimaryActionTitle: lang.dialogNotAddedToHomescreenPrimaryAction,\n\t\t\tprimaryAction: () => this.setState({ showInstallationGuide: true }),\n\t\t\tsecondaryActionTitle: lang.dialogNotAddedToHomescreenSecondaryAction\n\t\t});\n\t}\n\n\tcloseInstallationGuide = () => {\n\t\tthis.setState({ showInstallationGuide: false });\n\t};\n\n\trender() {\n\t\t/**\n\t\t * States:\n\t\t * ---\n\t\t * 1) User is not logged in, app is not running standalone and device is iOS or Android\n\t\t * -> Show installation flow\n\t\t *\n\t\t * 2) User is not logged in, device is not iOS or android\n\t\t * -> Show login screen\n\t\t *\n\t\t * 3) User is logged in (if not standalong AND ios or android also show installation-flow dialog)\n\t\t * -> Show frontpage\n\t\t */\n\n\t\tlet { transitionDirection, auth, lang, pages, appConfig, frontPageImage, isAuthenticated, checkingToken } =\n\t\t\tthis.props;\n\n\t\t// If some of the following content isn't available wait for it before showing the app\n\t\t// pages\n\t\t// appConfig\n\t\t// language\n\n\t\t// 0\n\t\tif (\n\t\t\tappConfig.apiUrl === '' ||\n\t\t\tappConfig.loading === true ||\n\t\t\tfrontPageImage.baseURL === '' ||\n\t\t\t(!lang && !pages.length && !appConfig)\n\t\t) {\n\t\t\treturn ;\n\t\t}\n\n\t\t// 1\n\t\tif (lang && this.state.showInstallationGuide) {\n\t\t\treturn ;\n\t\t}\n\n\t\tif (checkingToken === false && isAuthenticated === false && !this.state.showInstallationGuide) {\n\t\t\treturn ;\n\t\t}\n\n\t\twindow.Rollbar.configure({\n\t\t\tenabled: process.env.NODE_ENV === 'production' ? true : false,\n\t\t\tcaptureIp: 'anonymize',\n\t\t\tpayload: {\n\t\t\t\tperson: {\n\t\t\t\t\tid: auth.user.id,\n\t\t\t\t\tusername: auth.user.name\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t [\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/* general */}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/* Semco-time DK */}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/* Semco-time */}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t{/* Timesheet Hours approved by Foreman */}\n\t\t\t\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t{/* Timesheet Approved Hours - Commisioning */}\n\t\t\t\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t{/* Timesheet Hours approved by Semsupport */}\n\t\t\t\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t\t\t{/* Default and frontpage */}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/************************ START OF SEMCOMPLETION ROUTES ************************/}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/* Test sheet for MC cables */}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/* Project search */}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/* Punch */}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/* Punch RIG */}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/* Admin */}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/************************ END OF SEMCOMPLETION ROUTES ************************/}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t]}\n\t\t\t\t\t/>\n\t\t\t\t\n\n\t\t\t\t{/* General UI components */}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{localStorage.getItem('hideCustomMessageModal2') !== 'true' && appConfig.title === 'SemcoTime DK' && (\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t{pages.pages.length > 0 && !pages.loading && }\n\t\t\t
\n\t\t);\n\t}\n}\n\nconst componentStyle = () => css`\n\twidth: 100%;\n\theight: 100vh;\n\toverflow: hidden;\n\tposition: relative;\n\n\tp {\n\t\tmargin-bottom: 0px;\n\t}\n\n\t.ant-radio-group {\n\t\tpadding: 9px 0px;\n\t\twidth: 100%;\n\t}\n\n\t.ant-checkbox-wrapper {\n\t\tpadding: 15px 0px;\n\t}\n`;\n\nconst mapStateToProps = state => ({\n\ttransitionDirection: state.pages.transitionDirection,\n\tpages: state.pages,\n\tappConfig: state.appConfig,\n\tfrontPageImage: state.appConfig.frontPageImage,\n\tauth: state.auth,\n\tcheckingToken: state.auth.checkingToken,\n\tisAuthenticated: state.auth.isAuthenticated,\n\tlang: state.language.language\n});\n\nconst mapDispatchToProps = dispatch => ({\n\tgetPages: bindActionCreators(getPages, dispatch),\n\tgetAppConfig: bindActionCreators(getAppConfig, dispatch),\n\tgetLanguage: bindActionCreators(getLanguage, dispatch),\n\tcheckToken: bindActionCreators(checkToken, dispatch),\n\tshowDialog: bindActionCreators(showDialog, dispatch)\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(App);\n","// Libraries\nimport React, { Component } from \"react\";\nimport rollbar from \"rollbar\";\nimport { version } from \"../../../package.json\";\nimport getAppName from \"../../utilities/get-app-name\";\n\nvar rollbarConfig = {\n accessToken: \"68c2f57aa740403580aac83affcabc49\",\n captureUncaught: true,\n enabled: process.env.NODE_ENV === \"production\" ? true : false,\n autoInstrument: {\n network: true,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n },\n payload: {\n environment: process.env.NODE_ENV,\n appVersion: version\n }\n};\n\nconst Rollbar = new rollbar(rollbarConfig);\n\nclass ErrorCatcher extends Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n\n componentDidCatch(error, info) {\n this.setState({ hasError: true });\n Rollbar.critical(error, info);\n }\n\n render() {\n if (this.state.hasError) {\n // You can render any custom fallback UI\n return (\n \n

Oh no! Something went wrong with the app

\n

\n The error has been logged and we will do our best to fix it\n

\n \n Restart app\n \n \n );\n }\n return this.props.children;\n }\n}\nexport default ErrorCatcher;\n","// In production, we register a service worker to serve assets from local cache.\n\nimport getAppName from \"./utilities/get-app-name\";\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\nexport default function register() {\n if (!getAppName()) return console.log(\"[INFO] Service worker install prevented. appName not found\");\n\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service worker. To learn more, visit https://goo.gl/SC7cgQ\"\n );\n });\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log(\"New content is available; please refresh.\");\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (response.status === 404 || response.headers.get(\"content-type\").indexOf(\"javascript\") === -1) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log(\"No internet connection found. App is running in offline mode.\");\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import getAppName from \"./get-app-name\";\n\nexport default function (apiConfig) {\n let manifestEl = document.getElementById(\"elManifest\");\n let baseURL = manifestEl.getAttribute(\"data-base-url\");\n\n // Special value. You can set base-url to CURRENT_DOMAIN to use the current domain instead of a external domain\n if (baseURL === \"CURRENT_DOMAIN\") baseURL = `${window.location.origin}/api/`;\n\n manifestEl.setAttribute(\"href\", `${baseURL}apps/manifest/${getAppName()}`);\n\n if (process.env.NODE_ENV === \"development\") {\n manifestEl.setAttribute(\"href\", `http://192.168.1.16:3030/api/apps/manifest/${getAppName()}`);\n }\n}\n","import rollbar from \"rollbar\";\n// Libraries\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\nimport { QueryClient, QueryClientProvider } from \"react-query\";\nimport { ReactQueryDevtools } from \"react-query/devtools\";\n\n// Other\nimport store from \"./store\";\nimport \"./style/base-styles.css\";\nimport \"./style/route-animations.css\";\nimport App from \"./App\";\nimport ErrorCatcher from \"./components/ui/ErrorCatcher\";\nimport registerServiceWorker from \"./registerServiceWorker\";\nimport setManifest from \"./utilities/set-manifest\";\n\nimport { version } from \"../package.json\";\n\n// First thing to do so it wont fail\nsetManifest();\n\nvar rollbarConfig = {\n accessToken: \"68c2f57aa740403580aac83affcabc49\",\n captureUncaught: true,\n autoInstrument: {\n network: true,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true,\n },\n payload: {\n environment: process.env.NODE_ENV,\n code_version: version,\n },\n};\nconst Rollbar = new rollbar(rollbarConfig);\nwindow.Rollbar = Rollbar;\n\nconst queryClient = new QueryClient();\n\nReactDOM.render(\n \n \n \n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\nregisterServiceWorker();\n","import { useSelector } from \"react-redux\";\nimport getPageFromId from \"../utilities/get-page-from-id\";\nimport getBackButtonUrl from \"../utilities/get-back-button-url\";\n\nfunction usePageAndBackButtonURL(props) {\n const pages = useSelector((s) => s.pages.pages);\n const page = getPageFromId(pages, props.match.params.pageId);\n const backButtonURL = getBackButtonUrl(page, pages);\n\n return { page, backButtonURL };\n}\n\nexport default usePageAndBackButtonURL;\n"],"sourceRoot":""}