{"version":3,"sources":["routes/definition.ts","pages/claims/fml-claim.module.scss","api/api-translation.ts","features/translations/translation-source.ts","context/user-language-context.tsx","components/loading-spinner/index.tsx","features/claims/claims-model.ts","features/claims/claims-service-api.ts","features/claims/claims-service.ts","shared-types/key-events.ts","pages/dashboard/dashboard.module.scss","components/api-error/api-error-view.tsx","components/tag/tag.tsx","components/summary-label/summary-label.tsx","components/documents/styles.module.scss","components/translation/index.tsx","components/table/table.module.scss","components/claim-card/claim-card.module.scss","components/dropdown-select/styles.module.scss","shared-types/api.ts","api/fragments.ts","api/api-absence-reporting.ts","features/report-absence/absence-reporting-service-mock.ts","features/report-absence/absence-reporting-service.ts","auth/auth-config.tsx","components/user-widget/user-widget.module.scss","utils/util.ts","pages/claims/absence/absence-claim.module.scss","features/report-absence/sections/section-helpers.ts","components/base-modal/base-modal.tsx","components/summary-label/styles.module.scss","components/dashboard/recent-activity/recent-activity.module.scss","components/claim-card/claim-card-helper.ts","components/claim-card/claim-card.tsx","components/tag/tag-for-claim-status.tsx","components/text-field/styles.module.scss","components/dashboard/policy-summary/policy-summary.module.scss","components/claimChildDetailsTable/claim-child-details-table.module.scss","i18n/core.ts","auth/auth-provider.tsx","auth/logout.tsx","auth/logoutCallback.tsx","auth/silentRenew.tsx","pages/not-found/index.tsx","pages/application-access/application-restriction.tsx","auth/authenticated-route.tsx","components/clientLogo/index.tsx","auth/callback.tsx","components/dashboard/to-do-activities/to-do-activities.tsx","components/dashboard/recent-activity/recent-activity.tsx","components/user-widget/user-widget.tsx","components/freshdesk/index.tsx","components/navigation-wrapper/index.tsx","page-templates/standard.tsx","components/policy-remaining-period/policy-remaining-period.tsx","components/dashboard/policy/policy.tsx","components/dashboard/policy-summary/policy-summary.tsx","components/dashboard/policy-summary-mobile/policy-summary-mobile.tsx","pages/dashboard/dashboard.tsx","components/tabs/tabs.tsx","pages/claims/claim-tabs.tsx","pages/claims/fml-claim.tsx","components/icons/framed-icon/framed-icon.tsx","pages/claims/std-claim.tsx","pages/claims/claims-list.tsx","pages/claims/claims-history.tsx","pages/claims/absence/absence-claim.tsx","api.ts","components/table/table.tsx","components/pagination/pagination.tsx","components/claimChildDetailsTable/claim-child-details-table.tsx","pages/claims/absence/absence-claim-all-dates.tsx","pages/leave-policy/leave-policy.tsx","pages/health.tsx","app.routes.tsx","context/session-context.tsx","components/idle-container/idle-modal.tsx","components/idle-container/idle-container.tsx","components/logout-modal/logout-modal.tsx","components/logout-modal/logout-container.tsx","app.tsx","components/scroll-to-top/scroll-to-top.tsx","index.tsx","components/pagination/pagination.module.scss","features/translations/locales.ts","context/web-configuration-context.tsx","context/logout-modal-context.tsx","utils/shift-utils.ts","app-insights/appInsights.ts","features/report-absence/incident.ts","components/buttons/styles.module.scss","components/tag/tag.module.scss","components/api-error/api-error-view.module.scss","components/dashboard/policy/policy.module.scss","hooks/translation.ts","api/api-manage.ts","features/employee/employee-mock.ts","features/employee/employee-service.ts","shared-types/time.ts","i18n/dates.ts","hooks/index.ts","components/buttons/close-button/close-button.tsx","features/config/web-configuration-service-mock.ts","api/api-config.ts","features/config/web-configuration-service.ts","i18n/index.ts","api/api-rest.ts","shared-types/date.ts","pages/application-access/application-access.module.scss","components/decision-block/decision-block.module.scss","components/dashboard/to-do-activities/to-do-activities.module.scss","page-templates/standard.module.scss","components/tabs/tabs.module.scss","components/logout-modal/logout-modal.module.scss","components/card/card.tsx","permissions/index.ts","components/tool-tip/index.tsx","routes/index.ts","components/documents/documents.ts","components/documents/upload-modal.tsx","components/documents/document-upload.tsx","components/icons/index.tsx","features/translations/translation-model.ts","auth/auth-service.tsx","context/translation-context.tsx","components/decision-block/decision-block.tsx","pages/claims/helpers.tsx","components/buttons/close-button/close-button.module.scss","components/leave-proceed-modal/leave-proceed-modal.module.scss","components/dashboard/policy-summary-mobile/policy-summary-mobile.module.scss","pages/claims/absence/absence-claim-all-dates.module.scss","features/report-absence/absence-reporting-types.ts","features/report-absence/sections/reasons.ts","features/report-absence/absence-reporting-utils.ts","features/report-absence/sections/rtw.ts","features/report-absence/sections/config-questions.ts","features/report-absence/sections/continuation.ts","features/report-absence/sections/call-center.ts","features/report-absence/sections/confirmation.ts","features/report-absence/workflow-builder.ts","features/report-absence/absence-reporting-state.ts","features/report-absence/absence-reporting-workflow.ts","features/employee/employee-model.ts","components/base-modal/base-modal.module.scss","components/error-message/styles.module.scss","components/icons/framed-icon/framed-icon.module.scss","pages/claims/std-claim.module.scss","components/idle-container/styles.module.scss","components/buttons/index.tsx","components/error-message/index.tsx","components/dropdown-select/index.tsx","components/leave-proceed-modal/leave-proceed-modal.tsx","features/session/session-service-mock.ts","features/session/token-session-service.ts","features/session/session-service.ts","graphql-fragment-types.gen.ts","api/api-graphql-mock.ts","api/api-graphql.ts","features/report-absence/sections/dates-times.ts","components/buttons/languageSelector/language-button.tsx","hooks/features.ts","components/text-field/text-area.tsx","hooks/format.ts","components/card/card.module.scss","components/tool-tip/styles.module.scss","components/buttons/inline-button/styles.module.scss","pages/claims/styles.module.scss","pages/leave-policy/leave-policy.module.scss","features/report-absence/api-parse-helpers.ts","components/navigation-wrapper/styles.module.scss","pages/claims/claims-list.module.scss","context/app-context.ts"],"names":["defineRoute","path","normalizePath","generate","params","generatePath","useRouteParams","route","useParams","trim","replace","module","exports","loadTranslations","lang","a","url","getRestApiUrl","getAxios","get","response","Map","Object","entries","data","console","error","initTranslations","code","getParentLocaleCode","getTranslationSource","load","table","t","TranslationSet","AppContext","setTranslations","isSandbox","MockTranslationSource","ApiTranslationSource","dictionary","text","Promise","resolve","USER_LANGUAGE_COOKIE_NAME","UserLanguageContext","React","createContext","undefined","UserLanguageProvider","props","currentLang","useCookies","cookies","setCookie","userLangCookie","languageIsSupported","navigator","language","SupportedLanguage","EnglishUS","useEffect","Provider","value","setLanguage","children","useLanguageContext","context","useContext","Error","LARGE_SIZE","SMALL_SIZE","LoadingSpinner","memo","isDesktop","useDesktopBreakpoint","size","sizePx","data-testid","className","style","textAlign","isIE","alt","aria-hidden","src","process","margin","display","shapeRendering","width","height","viewBox","preserveAspectRatio","transform","x","y","rx","ry","fill","attributeName","values","keyTimes","dur","begin","repeatCount","ClaimTypes","fragments","searchClaimsResults","gql","ApiClaimsService","employeeNumber","policyCodes","clientCode","claimNumbers","request","pageNumber","pageSize","parameters","andFields","fieldName","fieldValue","operator","includeNullValues","getApiGraphQL","query","variables","errors","claims","results","items","filter","hasValue","map","parseClaim","total","totalRecords","length","this","listActiveClaims","claimStatus","sortingFields","fieldType","order","c","parseSearchClaims","options","page","incidentTypes","claimType","toIncidentTypeCode","caseId","reject","caseDetails","leaveCaseDetails","fmlClaimData","parseLeaveCaseDetail","sTDCaseDetails","stdClaimData","details","title","caseTypeLocale","startDate","parseOptionalDate","sTDStartDate","firstDateOfAbsence","firstDate","status","parseStdClaimStatus","statusLocale","parseLocaleModel","claimStatusLocale","decisions","decision","decisionType","endDate","parseDecisionStatus","start","parseISO","end","id","absenceClaimData","parseAbsenceDetails","absenceIncidentSnapShot","loadCompanyClaimListIncidentTypes","then","result","incidentTypeCodes","incidentType","incidentTypeCode","toLocaleUpperCase","filters","filterToIncidentTypeCode","includes","catch","claimTypesFilters","companyClaimListIncidentTypes","headerText","headerTextProp","description","locale","sort","policySummary","leavePolicySummary","policies","policy","policyCode","unit","remaining","remainingHours","used","usedHours","eligibility","totalHours","policyCodeLocale","item","__typename","isLeavesReferral","parseFmlClaimSummary","leaveStartDate","isWCBReferral","parseStdClaimSummary","dateOfIncident","parseReferral","absenceType","parseAbsenceType","absenceDates","parseAbsenceDates","claimDates","incidentId","parseAbsenceTitle","deriveAbsenceClaimStatus","relationship","mapMaybe","parseRelationship","relationShip","isReferral","parseAbsenceReport","claim","createdBy","primaryReasonLocale","translations","Array","forEach","primary","secondary","secondaryReasonLocale","find","push","fmlTitle","conditionCategoryLocale","leaveTypeCode","primaryReasonOfAbsenceLocale","secondaryReasonOfAbsenceLocale","leaveTypeLocale","toLocaleText","parseFmlTitle","parseLeaveClaimStatus","leaveStatus","leaveStatusLocale","parseLeaveTypeCode","isoDate","logDescription","date","isValidDate","str","parseISOWithoutTimezone","dateString","withoutTimezone","Date","d","toTimeInterval","now","_","every","ad","toDateInterval","toUpperCase","parseAbsenceClaimStatus","aRClaim","caseType","associatedLeaveCaseId","associatedSTDCaseId","childIncidents","claimNumber","expectedRTWDate","lastDateOfAbsence","leaveIncidentId","caseState","returnToWorkDate","determinations","leaveTypeCodeLocale","condition","leaveAbsenceType","resolution","policyCodeText","planned","parsePolicyUnit","plannedHours","pertainsTo","claimTypeLocale","mapFn","maybeValue","getClaimsService","KeyCode","KeyName","detectKey","keyCode","key","ARROW_UP","ARROW_DOWN","ARROW_LEFT","ARROW_RIGHT","PAGE_UP","PAGE_DOWN","HOME","END","ENTER","TAB","SPACE","ESCAPE","ApiErrorView","clsx","styles","tag","Tag","tagStyle","TagButton","sendClick","onClick","selected","usePreventOutlineOnClick","onMouseDown","onMouseUp","onFocus","role","aria-pressed","selectedStyle","tabIndex","onKeyDown","event","preventDefault","SummaryLabel","label","labelTestId","valueTestId","shiftLabel","isOvernight","subValue","absenceTime","unpaidAbsenceTime","useTranslation","Translation","strong","maybeEscapeHtml","html","escapeHtml","htmlTemplate","vars","mapValues","v","k","htmlVars","textForLang","substitute","strongText","dangerouslySetInnerHTML","__html","plaintext","LocaleText","en","englishText","en_fr","localeModel","englishFallback","strings","filteredList","EnglishCA","FrenchCA","Spanish","matchLocale","sectionQuery","absenceIncidentFields","saveAbsenceIncidentModel","submitAbsenceIncidentModel","incidentQuestionFields","incidentSubmitReturn","ApiAbsenceReportingService","loadIncident","absenceIncident","parseLoadedAbsenceIncident","saveIncident","incident","askIfCanBeLinked","absenceIncidentId","input","mutate","mutation","toAbsenceIncidentInputModelInput","saveAbsenceIncident","success","returnValue","absenceIncidentModel","absenceQuestionReturnModel","saveResult","parseAbsenceIncident","parseQuestionReturnModel","validationErrors","parseValidationErrors","submitIncident","submitAbsenceIncident","submitResult","closingScripts","loadClosingScript","loadConfig","state","absenceReportingConfig","config","absenceDurationMinutes","isPartialAbsences","reasonOfAbsence","parseReasonOfAbsence","displayRTWDateContinuous","displayRTWDate_Continous","displayRTWDateIntermittent","displayRTWDate_Intermittent","isRTWDateMandatoryContinuous","isRTWDateMandatory_Continous","isRTWDateMandatoryIntermittent","isRTWDateMandatory_Intermittent","minimumThresholdForContinousAbsence","aR3ReportAbsenceButtonTextConfiguration","workScheduleInfo","parseWorkScheduleInfo","workShifts","ws","startTime","parseTime","startTimeHours","startTimeMinutes","makeTime","endTime","endTimeHours","endTimeMinutes","cs","aR3IvrConfiguration","parseAR3IVRConfiguration","absenceIncidentClosingScripts","closingScript","parseClosingScripts","loadAddingNewEmployeePermission","permission","showAddNewEmployeeLink","err","loadEmployeeVerificationFields","connect_employeeVerificationFields","parseEmployeeVerificationFields","loadOrganizationHierarchy","organizationHierarchy","parseOrganizationHierarchy","addNewEmployee","addEmployee","cancelResults","loadConfigQuestions","absenceQuestions","parsedModel","cancelIncidents","cancelRequest","incidentIds","cancelAbsenceIncidents","cancelResult","getLatestInProgressAbsence","inProgressAbsences","nodes","MockAbsenceReportingService","incidentCanBeLinked","countSaveIncident","countAskIfCanBeLinked","getIncidentFromStore","i","localStorage","getItem","JSON","parse","delay","absenceConfig","mapIncidentTypes","savedIncident","setItem","stringify","linkability","primaryReason","canBeLinked","latestDate","subBusinessDays","configQuestions","emptyIncident","closingScriptId","cancelReason","sessionStorage","reset","_instance","defaultValue","hasDefaultValue","defaults","hour","minute","period","answers","answerId","maxDaysAllowed","reportableDaysInFuture","reportableDaysInPast","locales","subAnswers","linkedIncidentsLookbackThresholdDays","scheduleOverrideWarning","warningMessages","isDefault","questions","pageHeading","pageHeadingDescription","pageId","sections","sectionHeading","sectionHeadingDescription","sectionId","getMockSingleLineQuestion","name","questionType","longDescription","placeholder","source","isVisible","isReadOnly","validationConstraint","required","max","alerts","alertId","alertText","getMockSelectQuestionConfig","formatISO","getMockDateQuestionConfig","toString","min","getMockNumericQuestionConfig","preQualifyingQuestions","reasonOfAbsenceAlerts","getAbsenceReportingService","singletonInstance","URL_CONFIG","authServerURL","react_app_redirect_url","window","location","origin","client_id","IDENTITY_CONFIG","authority","redirect_uri","silentRequestTimeout","automaticSilentRenew","loadUserInfo","silent_redirect_uri","post_logout_redirect_uri","response_type","scope","webAuthResponseType","revokeAccessTokenOnSignout","METADATA_OIDC","issuer","jwks_uri","authorization_endpoint","token_endpoint","userinfo_endpoint","end_session_endpoint","check_session_iframe","SIGNIN_PARAMS","document","documentMode","ms","setTimeout","createShortcut","toLowerCase","validateName","test","validateRTWAnswer","answer","isMandatory","type","lastAbsenceDate","first","orderBy","determineDateValidity","rtwDate","isPartialAbsence","isSameDay","shiftStartTime","isBefore","isValid","validatePhoneNumber","phoneNumber","formatPhoneNumber","completeTenDigits","substr","validateEmail","email","RegExp","continuationQuestionDescription","absenceReasons","primaryReasonData","primaryReasonText","secondaryReasonText","secondaryReason","dateText","formatWithLocale","formatDateTimeAnswer","parsedISO","parsedDate","modalStyle","overlay","zIndex","backgroundColor","justifyContent","alignItems","placeContent","content","position","border","borderRadius","boxShadow","padding","maxWidth","inset","BaseModal","useState","overflowValue","setOverflowValue","aria","labelledby","isOpen","customStyles","testId","onRequestClose","closeModal","onAfterOpen","body","overflow","onAfterClose","titleRowClass","titleClass","buttonClass","formatStartingOnDate","localOffset","getTimezoneOffset","adjustedDate","getTime","formatAbsenceDates","dates","sortedDates","formattedStartDate","formattedEndDate","numDays","Set","secondDate","containsOvernightShift","some","isTimeAfter","ClaimCard","s","notLinked","currentLocale","useFormat","formattedDates","formatClaimDates","lastClaim","card","data-card","tagTextForClaimType","translateAbbreviatedRelationship","checkEqualTimes","formatTimeInterval","data-tip","translationProps","addDays","getOvernightShiftMessage","overnightMessage","data-for","place","offset","left","top","formatTime","linkTo","Routes","claimId","linkForClaim","to","timeIntervals","ti","areTimesEqual","TagForClaimStatus","getTagStyle","shortTagText","getTagText","translatedTagText","TagForDecisionStatus","tryGetTranslation","match","head","rest","template","message","getTranslation","I18nProfile","profileEntries","_props","args","checkI18nMap","join","profileEntry","dummy","reduce","obj","varName","e","with","AuthContext","authContext","AuthProvider","AuthService","AuthConsumer","Consumer","Logout","logout","LogoutCallback","signoutRedirectCallback","SilentRenew","NotFoundPage","ApplicationRestrictionView","setIsOpen","useLogoutModalContext","contactUs","AuthenticatedRoute","Component","component","checkAccess","sessionService","getSessionService","render","isAuthenticated","hasAccess","signinRedirect","ClientLogo","webConfigurationContext","useWebConfigurationContext","logoFile","logoPath","defaultLogo","logoStyle","LogoImage","clickable","Callback","errorMessage","setErrorMessage","retryAttempts","Number","signinRedirectCallback","user","removeItem","JwtDecode","access_token","ToDoActivities","isExpanded","setIsExpanded","cardHeigth","setCardHeight","isModalOpen","setIsModalOpen","setIncidentId","itemsNotShown","setItemsNotShown","useWindowSize","windowWidth","history","useHistory","cardListClass","cardClass","cardList","querySelector","listWidth","clientWidth","numberOfColumns","Math","floor","CARD_WIDTH","setCardLayout","mobileBreakPoint","clientHeight","cancelAbsence","handleCancelClaim","reload","onRequestLeave","onRequestProceed","ReportAbsencePrimaryReason","contentText","leaveButtonText","proceedButtonText","things_to_do","maxHeigt","overflowY","maxHeight","handleInProgressClaim","RecentActivity","carouselRef","useRef","horseRefs","currentHorseIndex","setHorseIndex","carouselWidth","setCarouselWidth","cardsPerChunk","claimChunks","chunk","updateCarouselWidth","current","offsetWidth","onResize","debounce","addEventListener","removeEventListener","observer","IntersectionObserver","entry","isIntersecting","index","indexOf","target","root","threshold","horse","observe","disconnect","gotoHorse","useCallback","scrollIntoView","behavior","showIndicator","ref","chunkIndex","li","times","dotCount","activeDot","CarouselIndicator","range","isClickable","dotIndex","abs","isDotClickable","isHidden","startMargin","endMargin","isDotHidden","hidden","UserWidget","theme","getUser","titleCaseName","g0","g1","g2","openFreshdesk","NavigationWrapper","getHeaderFlexItems","mobileHeaderWithBorder","isMenuOpen","setMenuOpen","toggleMenu","menuAction","wasOpen","header","useMemo","desktopHeaderFlexItems","mobileHeaderFlexItems","menuOpen","withBorder","MobileWrapper","closeMenu","MobileMenu","menuStyles","coverStyles","menuRef","useOnClickOutside","DesktopWrapper","DesktopMenu","useReportAbsenceLink","canReportAbsence","goToReportAbsence","absenceConfiguration","setAbsenceConfiguration","reportAbsenceText","setReportAbsenceText","placeHolder","ar","flattenedConfiguration","acc","val","concat","reportAbsenceDescription","buttonText","LogoutButton","NeedHelpButton","NavigationWidget","connectLink","useFeatures","activeClassName","href","StandardPage","fixedPaneContents","bottomNavbarContents","fixedPaneClassName","scrollablePaneClassName","scrollTop","useWindowScrollTop","PolicyRemainingPeriod","singular","translatedUnit","Policy","displayHours","setDisplayHours","PolicySummary","leavePolicies","chunkRef","setChunkIndex","policiesChunks","block","goToChunk","increment","policiesChunk","div","PolicySummaryMobile","DashboardPage","isDesktopView","firstPolicyToShowCode","ee_no","appInsightSetUserId","useApiRequest","getIncompleteClaims","client_code","inProgressClaims","searchClaimsError","getLeavePolicySummary","b","localeCompare","ctx","given_name","navSection","DashboardMobileHeaderFragment","Tabs","tabs","tabId","onChange","ClaimsTabs","canUploadDocumentsLeaves","canUploadingDocumentsDM","FmlClaimContent","formatLocal","showAllDecisions","setShowAllDecisions","sortedDecisions","showAll","translateRelationship","fmlStyles","p","number","round","getDurationPlannedText","getDurationUsedText","requestDate","entityId","entityType","DocumentEntityType","Case","leaveTypeText","FmlClaimPage","ViewFmlClaim","activeTab","setActiveTab","parseInt","loadFmlClaim","fmlClaim","isLoading","FramedIcon","icon","Icon","StdClaimContent","stdStyles","CalendarIcon","StdClaimPage","ViewStdClaim","loadStdClaim","stdCase","ClaimsListPage","queryClaimType","URLSearchParams","useLocation","search","ClaimFilterUrlParamName","ClaimType","activeFilter","setActiveFilter","filterType","getFilterTypeFromString","loadClaimTypeFilters","filteredClaims","cardWidth","gridGap","f","getFilterLabel","ClaimsHistoryPage","setClaims","nextPage","setNextPage","totalClaims","hasMore","op","listHistoricalClaims","cancelled","leading","trailing","innerHeight","documentElement","offsetHeight","newNextPage","AbsenceClaimContent","childIncidentsRTWDates","rtwDt","isNaN","parseDateWithoutTimezone","substring","absenceStartDatesInMsSinceEpoch","absenceDate","msDate","absenceEndDatesInMsSinceEpoch","isSingleDayAbsence","compareAsc","setHours","isContinuous","absenceStyles","absence_duration","TimeIcon","absence_time_from","absence_time_to","getSingelDayAbsenceDuration","unpaidTimeInMinutes","minutesCount","dayOfWeek","daysCount","differencInMinutes","differenceInMinutes","differencInHours","differenceInHours","hoursCount","AbsenceClaimPage","ApiResponse","ViewAbsenceClaim","loadAbsenceDetails","absenceClaim","DesktopTable","headers","footer","prepareCellClass","align","row","idx","MobileTable","cell","upperHeader","lowerHeader","Pagination","allItemsNumber","pagesNumber","currentPage","numberOfRows","rowsPerPage","onChangePage","pages","all","disabled","ClaimChildDetailsTable","setPage","itemsNumber","setItemsNumber","desktopTableData","setDesktopTableData","mobileTableData","setMobileTableData","setHeaders","aDate","bDate","timeIcon","renderToString","moonIcon","tableData","o","split","startHours","startMinutes","startPeriod","formattedStartHours","formattedStartTime","endHours","endMinutes","endPeriod","formattedEndHours","formattedEndTime","duration","isNightShift","desktop","incidentNumber","mobile","el","headerTranslation","keys","sum","flatten","AbsenceClaimAllDatesPage","ViewAbsenceClaimAllDates","setAbsenceDates","mappedAbsenceClaim","child","isEqual","LeavePolicyPage","LeavePolicyRoute","isLoadingPolicy","leavePolicy","policyError","listClaims","isLoadingClaims","claimsError","policyName","apiURL","desc","AppHealth","hasError","fetch","res","ok","setState","info","statusText","ReportAbsencePage","lazy","AppRoutes","isCICUser","exact","TOP_LEVEL_LOGIN_ENDPOINT","submitLogout","Axios","delete","SUCCESS","UNEXPECTED_ERROR","DEFAULT_SESSION","isLoggedIn","SessionContext","BrowserSessionProvider","useSessionStorage","storedSession","setStoredSession","sessionState","setSessionState","setSession","newSession","session","clearSession","useSessionContext","IdleModal","timeLeft","idlePopupStyles","cloneDeep","countdownTimerFromSeconds","IDLE_TIMEOUT","REACT_APP_IDLE_TIMEOUT_MINUTES","IdleContainer","apolloClient","useApolloClient","setTimeoutRef","modalIsOpen","setModalIsOpen","setTimeLeft","stop","resetStore","idleTimeoutMs","onIdle","timeout","LogoutModal","logoutPopupStyles","LogoutContainer","require","Modal","setAppElement","App","fallback","AppInsightsContext","reactPlugin","ScrollToTop","listen","scrollTo","enableES5","client","resetSessionToken","ReactDOM","CookiesProvider","getElementById","langCode","getLanguageFromCode","getParentLanguageCode","getLocale","enUS","frCA","es","enCA","matchLocales","code1","code2","webConfigurationInitialState","WebConfigurationContext","WebConfigurationContextProvider","setStoredContext","fetchConfigdata","getWebConfigurationService","getWebConfigurationByUrl","instanceId","canUploadingDocumentsWCB","LogoutModalContext","LogoutModalProvider","getDefaultShift","shiftOptions","so","FALLBACK_SHIFT","getWorkShiftOptions","browserHistory","createBrowserHistory","basename","ReactPlugin","clickPluginInstance","ClickAnalyticsPlugin","logMsg","clickPluginConfig","autoCapture","dataTags","customDataPrefix","useDefaultContentNameOrId","behaviorValidator","BehaviorMapValidator","CLICK","dropInvalidEvents","instrumentationKey","extensions","extensionConfig","identifier","appInsights","ApplicationInsights","loadAppInsights","appInsightLog","msg","trackEvent","appInsightLogQuestion","shiftEndTime","scheduledShiftStartTime","scheduledShiftEndTime","localizeError","errorDescriptionLocales","l","errorDescription","getLocalizedString","useTranslationContext","isArray","serverTranslation","getTranslations","translate","ApiEmployeeService","getSchedule","from","toISOString","schedule","parseDates","checkEmployeeByNumber","getEmployeeData","eSEmployeeByEENumber","altPhoneNumber","workPhoneNumber","workAltPhoneNumber","businessEmail","homeEmail","employeeAddress","employeeAddresses","firstName","lastName","employeeState","provinceStateCode","employeeCountry","countryCode","searchEmployees","searchTerm","quickSearchEmployees","highlightData","searchCompany","absenceReportingVersion","searchCompanies","companyId","getCompaniesCount","companiesCount","getAbsences","absences","previousAbsences","searchClaims","flatMap","absence","claimDate","hoursWorked","MockEmployeeService","eachDayOfInterval","isWeekend","employeeId","eeNumber","birthDate","employeeData","employeeDropDownLabelDetails","jobTitle","organizationId","organizationName","field","today","startOfToday","randomDay","subDays","random","add","hours","recentAbsence","getEmployeeService","timeStr","periodMatchAM","periodMatchPM","hourMatch","minuteMatch","padEnd","parseTime12","parseTime24","makeDate","time","getFullYear","getMonth","getDate","interval","to24HourTime","isNextDay","extractTime","getHours","getMinutes","format","createTimeInterval","timeInterval","monthAndDay","padStart","clampTime","minuteInterval","roundedMinute","minutes","seconds","formattedMinutes","formattedSeconds","minutesSinceMidnight","totalMinutes","minutesToHours","isTimeBefore","timeToCompare","time1","time2","valid24Hours","maxShiftLengthThresholdInMinutes","ValidMaxShiftTime","absenceMinutes","referenceDate","addYears","datePlaceholder","useUniqueId","prefix","uniqueId","mouseDown","blur","popoverRef","handler","anchorRef","listener","contains","setSize","useLayoutEffect","updateSize","innerWidth","valueSerialized","newValue","useLocalizedDateParsing","parseDate","formatDate","formatDateLong","mql","matchMedia","getValue","matches","setIsDesktopView","addListener","removeListener","hasPrivileges","ReportAnAbsencePermission","ARWorkflow","getReportAbsenceLink","goToReportAbsencePrimaryReason","useDebounce","debouncedValue","setDebouncedValue","clearTimeout","useForceRender","_setForceRender","debounceInterval","debounceOptions","scrollY","pageYOffset","setScrollTop","setScrollTopThrottled","onScroll","cancel","doRequest","deps","setLoading","setData","setError","sendRequestAsync","CloseButton","iconClassname","ariaLabel","MockWebConfigurationService","canAccessApplication","getClientFeatureUrl","featureName","ApiWebConfigurationService","webConfigByUrl","feature","clientFeatureUrl","ClientI18nProfile","AbsenceI18n","verifyI18nMap","EN_CA","EN_US","FR_CA","ES","getDefaultLocalizedString","SUPPORTED_LANGUAGES","token","getAccessToken","axios","common","Authorization","Card","CancelAbsencePermission","ModifySubmittedAbsencePermission","Tooltip","arrowColor","effect","Root","Dashboard","ReportAbsence","ClaimsList","ClaimsHistory","AccessDenied","LeavePolicy","registerPlugin","FilePondPluginImagePreview","FilePondPluginFileValidateType","FilePondPluginFileValidateSize","MaxNoteLength","UploadDocumentModal","onClose","files","setFiles","notes","setNotes","fileState","setFileState","pond","setPond","uploadErrors","setUploadErrors","hasErrors","uploading","setUploading","removeFiles","processHandler","file","metadata","progress","abort","formData","FormData","append","CancelToken","post","cancelToken","onUploadProgress","lengthComputable","loaded","isCancel","log","errorObj","pe","errorCode","errorFields","allowMultiple","acceptedFileTypes","instantUpload","allowFileSizeValidation","maxFileSize","labelMaxFileSize","labelMaxFileSizeExceeded","onupdatefiles","fileItems","server","onprocessfileprogress","pr","ff","onprocessfile","onerror","main","errorText","tryTranslate","labelIdle","filename","n","removeFile","labelText","helperText","limit","maxLength","isInvalid","autoResize","setMetadata","fi","processFiles","DocumentUpload","isUploadOpen","setUploadOpen","PlusIcon","fillRule","QueryOutlineIcon","ExclamationInCircleIcon","DocumentIcon","clipRule","HomeIcon","ChevronDownIcon","ChevronUpIcon","ChevronBackIcon","ChevronNextIcon","UpArrowIcon","DownArrowIcon","LeftArrowIcon","RightArrowIcon","SmallRightArrowIcon","CloseIcon","RefreshIcon","LogoutIcon","MenuIcon","CopyIcon","MoonIcon","ProfileIcon","SearchIcon","CheckedIcon","ExternalLinkIcon","UploadIcon","parentLangCode","has","handle","signinCallbackPath","UserManager","pathname","navigateToScreen","redirectUri","createSigninRequest","idToken","post_logout_uri","encodeURI","culture","logoutUrl","clear","clearStaleState","userStore","WebStorageStateStore","store","monitorSession","Log","logger","level","DEBUG","events","addUserLoaded","setSessionInfo","accessToken","id_token","hasEmployees","profile","can_manage_employees","privileges","pv","accessibleClientCount","accessible_client_count","addUserSignedOut","addSilentRenewError","authResult","signinSilentCallback","TranslationContext","currentTranslations","TranslationProvider","thisLangMap","customTranslation","DecisionBlock","getEndLabel","DecisionsSection","DesktopClaimIdLabel","DesktopConfirmationNumberLabel","ClaimDesktopHeaderFragment","goBack","calculateCardElementsHeight","elements","elementsInIRow","slice","elementsHeights","maxElementHeight","elementHeight","parentElement","setAutoHeightOfCardElements","titles","querySelectorAll","tags","numberOfCards","totalCardWidth","ceil","MobileHeaderFragment","ClaimMobileHeaderFragment","OnBehalfOf","getSecondaryReasons","shouldAskIfCanBeLinked","isLinkabilityKnown","hasSufficientDataToAsk","cache","linkabilityCache","representation","maybeUpdateLinkability","askedIfCanBeLinked","apiIncident","previousIncident","_isContinuous","_rtwDateMandatoryForAbsenceType","buildRtwSections","_rtwDateQuestionShown","promptTag","last","isAfter","nextBusinessDay","addBusinessDays","startOfDay","suggestNextShiftDate","summary","validateAnswer","setAnswer","requiresAnswer","isSubmissionMode","normalizeValue","cq","buildContinuationSection","showContinuationQuestion","answerValue","isLinked","descriptionTag","maxReportableDays","totalNoOfDaysReportedExcludingCurrent","days","buildCallCenterSection","labelLocalizedString","employee_full_name","employeeFirstName","employeeLastName","set","answered","callCenterEmployeePhoneNumber","hideInSummary","buildConfirmationSection","postSubmit","WorkflowBuilder","buildQuestions","canModifySubmittedIncident","shifts","shift","getCICSectionTemplates","renderQuestionTemplate","getSectionTemplates","q","submitted","findIndex","commonSectionTemplates","checkReasonOfAbsence","newReason","secondaryReasons","choices","r","imageUrl","buildReasonSections","buildDateTimesSections","resolvedValue","absenceReasonInfo","getReasonOfAbsenceInfo","question","summaryObject","asNum","getSubmitErrorMsg","getSubmitErrorMsgForQuestion","buildConfigSections","qt","base","workShiftOptions","addTempShift","initialSameShiftToggle","sameShiftToggleHandler","scheduleOverrideMessage","selectedWorkShifts","ARWorkflowState","bestPhoneNumber","questionResponses","needsSave","isSavingSynchronously","showSameShiftForDates","allAlerts","questionAlerts","apiErrors","restoredTimeIntervals","tempShiftOptions","absenceOnBehalf","employeeSearch","employeeEmail","companyName","errorMsg","restoredIncidentId","viewedAlertsIds","addNewEmployeeErrors","addNewEmployeeState","provinceCode","restoreQuestions","restoreTimes","restoreShifts","toLocaleTimeString","determineHoursFromTime","defaultWorkShifts","shiftOption","restoreClosingScripts","restoreEmployee","setShowSameShiftForDates","setShifts","overwriteTimeIntervals","applyShifts","setTimes","setDates","mapDates","workShift","restoredInterval","intervals","applyTimes","getTimes","getShifts","setSubmitError","questionId","clearSubmitError","insertViewedAlertId","resetViewedAlerts","buildQuestionAlerts","currentQuestionId","alert","qi","currentUserEmployeeId","OtherEmployee","Myself","d1","d2","defaultShift","tempShifts","setMinutes","isSameHour","ts","isReadyForSave","prepareConfigQuestions","model","alertLevel","setQuestionResponses","save","synchronous","isEmpty","noop","isReadyForSubmit","submit","getNextUnansweredQuestion","currentSection","waitForSave","sectionIndex","section","reloadIncidentData","saveAndCheckForErrorsOrAlerts","hasNewAlerts","checkForAlerts","saveInBackground","getPreviousAbsences","getAbsenceType","cancelIncident","setEmployeeData","rej","allowBackground","isNewEmployee","workState","configPromise","schedulePromise","historyPromise","h","eeDataPromise","waitFor","selectedClient","companyNamePromise","clientData","setDefaultQuestionAnswers","defaultClientCode","restore","restoredClientCode","restoredEmployeeId","subAnswer","sq","isAnswerDifferent","latestInProgressIncident","finalQuestionIds","ContainedButton","BaseButton","OutlinedButton","IconButton","TextButton","onKeyPress","readonly","aria-label","data-text","dataText","ErrorMessage","DropdownSelect","useReducer","selectReducer","initializeState","dispatch","validSelection","shouldShowListElements","aria-labelledby","ariaLabelledBy","aria-haspopup","aria-readonly","anchorTestId","OptionList","handleListClose","focus","action","focusedIdx","selectedIdx","count","initialIdx","anchorRect","getBoundingClientRect","listStyle","right","selectorLabelText","popoverTestId","OptionItem","option","isFocused","isSelected","handleSelectOption","handleArrowUp","handleArrowDown","handleHome","handleEnd","aria-selected","stopPropagation","data-value","LeaveProceedModal","modalStyles","MockSessionService","getClientCode","_testUser","setClientCode","checkAll","_firstName","faker","_lastName","family_name","internet","datatype","TokenSessionService","isValidToken","jwtDecode","session_code","getUserPrivileges","decoded","currentTime","exp","userPrivileges","mockApiSchema","schema","makeExecutableSchema","typeDefs","scenario","activeClaims","makeMyAbilitiARClaim","makeSTDClaim","makeLeaveClaim","makeAbilitiReferral","historicalClaims","mocks","Int","Decimal","Long","Uuid","uuid","DateTime","future","TimeSpan","String","words","DecisionViewModel","sample","allDecisionStatusTypes","LeaveDeterminationViewModel","ValidationErrorGraphQLOfSaveAbsenceIncidentReturnModel","ValidationErrorGraphQLOfSubmitAbsenceIncidentReturnModel","AbsenceQuestionReturnModel","MockList","connect_QuestionModel","WorkShiftModel","STDCaseViewModel","StdClaimStatusOptions","LeaveCaseViewModel","LeaveClaimStatusOptions","LeavePolicyViewModel","Query","searchActiveClaims","searchClaimsWithQuickSearchType","quickSearchType","pageIndex","Mutation","inputs","addMocksToSchema","allRelationships","makeRelationshipOrNull","chanceOfNull","makeValue","arrayElement","float","subtype","caseCancelled","std","leave","makeLocaleText","active","soon","recent","addHours","company","catchPhrase","_apolloClient","getApiUrl","serverLink","SchemaLink","createHttpLink","uri","authLink","setContext","requestHeaders","decodedToken","errorLink","onError","graphQLErrors","networkError","cleanTypeName","ApolloLink","operation","forward","omitTypename","InMemoryCache","addTypename","possibleTypes","fragmentTypes","ApolloClient","link","version","queryDeduplication","defaultOptions","watchQuery","fetchPolicy","errorPolicy","createApolloClient","validateTimeIntervals","validateInterval","validateTime","getOverlappingAbsenceTime","abs1StartDate","abs1EndDate","abs2StartDate","abs2EndDate","getOverlappingAbsenceTimes","dateInterval","timeOverlapsValidation","overlappingAbsence","from1","to1","from2","to2","validateTimeOverlaps","LanguageSelectorButton","currentLanguage","setCurrentLanguage","getLanguages","languageSelected","setConnectLink","canAccessConnect","getHeight","rows","getComputedStyle","borderBottomWidth","borderTopWidth","fontSize","lineHeight","paddingBottom","paddingTop","lh","parseFloat","rowHeight","scrollHeight","resize","TextArea","forwardRef","currentValue","setCurrentValue","helperTextId","inputRef","createRef","setCustomValidity","useImperativeHandle","labelClasses","containerClasses","handleInput","onBlur","currentTarget","readOnly","aria-describedby","aria-invalid","autoComplete","onInput","maxTextLength","htmlFor","formatStr","invalidLabel","getDaysOfWeek","localize","weekdays","day","ef","employeeVerificationFields","ph","phd","parseNewEmployeeSections","sh","shd","parseQuestion","compare","ld","parseOptions","fieldToCompare","valueToCompare","digits","visibilityConditions","parseVisibilityConditions","parseQuestionAlerts","at","parseMetaData","m","organizationLevel","childOrganizations","parseSectionQueryFragment","parseAlerts","parseSections","parseQuestionModel","parsedConfigQuestionType","parseConfigQuestionType","parsedAnswerChoices","parseDefaultValue","conditions","cond","lm","parseAbsenceIncidentLinkability","CanBeALinkedIncident","linkedIncident","getQuestionResponses","warnWhenOverridingSchedule","canBeALinkedIncident","responses","parseSubAnswers","iconResource","sourceUrl","scripts","reportingLocale","appEnv","setSandbox","setEnvironment","env"],"mappings":"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","file":"static/js/main.70ee7441.chunk.js","sourcesContent":["import { generatePath, useParams } from \"react-router\";\n\nexport type Route = {\n readonly path: string;\n generate: (params: Record) => string;\n};\n\nexport function defineRoute(path: string): Route;\n\nexport function defineRoute(\n path: string,\n params: Params[]\n): Route;\n\nexport function defineRoute(\n path: string,\n params: Params[] = []\n): Route {\n return {\n path: normalizePath(path),\n generate: (params: Record) => generatePath(path, params)\n };\n}\n\nexport function defineSubRoute(\n parent: Route,\n subPath: string\n): Route;\n\nexport function defineSubRoute<\n ParentParams extends string,\n OwnParams extends string\n>(\n parent: Route,\n subPath: string,\n params: OwnParams[]\n): Route;\n\nexport function defineSubRoute<\n ParentParams extends string,\n OwnParams extends string\n>(\n parent: Route,\n subPath: string,\n params: OwnParams[] = []\n): Route {\n const path = `${parent.path}${normalizePath(subPath)}`;\n return {\n path,\n generate: (params: Record) =>\n generatePath(path, params)\n };\n}\n\nexport function useRouteParams(route: Route) {\n return useParams>();\n}\n\nfunction normalizePath(path: string) {\n return (\n \"/\" +\n path\n .trim()\n .replace(/^(\\/+)/, \"\")\n .replace(/(\\/+)$/, \"\")\n );\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"claim-hours-row\":\"fml-claim_claim-hours-row__B8DwF\",\"claim-hours-description\":\"fml-claim_claim-hours-description__1wMSm\",\"claim-hours-label\":\"fml-claim_claim-hours-label__1dbxB\",\"hours-block\":\"fml-claim_hours-block__1LWmw\",\"hours-used\":\"fml-claim_hours-used__2_ARx\",\"hours-planned\":\"fml-claim_hours-planned__3Epea\",\"hours-planned-wrapper\":\"fml-claim_hours-planned-wrapper__PyI_f\",\"hours-used-wrapper\":\"fml-claim_hours-used-wrapper__3Bo6c\",\"hours-info\":\"fml-claim_hours-info__1RxZ7\",\"hours-extra\":\"fml-claim_hours-extra__1tvmQ\",\"separator\":\"fml-claim_separator__3xHHG\",\"hour-value\":\"fml-claim_hour-value__Vmul_\",\"week-value\":\"fml-claim_week-value__dgH43\",\"hour-label\":\"fml-claim_hour-label__2xXXg\"};","import { TranslationTable } from \"features/translations/translation-model\";\nimport { getRestApiUrl, getAxios } from \"./api-rest\";\n\nexport const loadTranslations = async (\n lang: string\n): Promise => {\n try {\n const url =\n getRestApiUrl() +\n \"/translation/v1/Translations?application=AbilitiAbsence&locale=\" +\n lang;\n const response = await getAxios().get(url);\n return new Map(Object.entries(response.data));\n } catch (e) {\n console.error(e);\n return new Map();\n }\n};\n","import { loadTranslations } from \"api/api-translation\";\nimport { AppContext } from \"context/app-context\";\nimport { getParentLocaleCode, SupportedLanguage } from \"./locales\";\nimport { TranslationSet, TranslationTable } from \"./translation-model\";\n\nexport const initTranslations = async (lang: SupportedLanguage) => {\n const code = getParentLocaleCode(lang as string);\n const table = await getTranslationSource().load(code);\n const t = new TranslationSet(lang, table);\n AppContext.setTranslations(t);\n};\n\nexport interface ITranslationSource {\n load: (lang: string) => Promise>;\n}\n\nexport const getTranslationSource = (): ITranslationSource => {\n if (AppContext.isSandbox()) {\n return new MockTranslationSource();\n }\n return new ApiTranslationSource();\n};\n\nexport class MockTranslationSource implements ITranslationSource {\n dictionary = { text: \"text-FR\" };\n\n load = async (lang: string) => {\n return Promise.resolve(\n new Map(Object.entries(this.dictionary)) as TranslationTable\n );\n };\n}\n\nexport class ApiTranslationSource implements ITranslationSource {\n load = async (lang: string) => {\n return loadTranslations(lang);\n };\n}\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { languageIsSupported } from \"i18n\";\nimport { useCookies } from \"react-cookie\";\nimport { initTranslations } from \"features/translations/translation-source\";\nimport { SupportedLanguage } from \"features/translations/locales\";\n\ntype SetLanguageFunction = (lang: SupportedLanguage) => void;\nconst USER_LANGUAGE_COOKIE_NAME = \"user-lang\";\n\ntype UserLanguageContextType = {\n currentLang: SupportedLanguage;\n setLanguage: SetLanguageFunction;\n};\nconst UserLanguageContext = React.createContext<\n UserLanguageContextType | undefined\n>(undefined);\n\nexport const UserLanguageProvider: React.FunctionComponent = props => {\n const [cookies, setCookie] = useCookies([USER_LANGUAGE_COOKIE_NAME]);\n const userLangCookie = cookies[USER_LANGUAGE_COOKIE_NAME];\n\n let currentLang: SupportedLanguage;\n if (languageIsSupported(userLangCookie)) {\n // Language stored in cookie is highest priority\n currentLang = userLangCookie;\n } else if (languageIsSupported(navigator.language)) {\n // If there's no valid cookie, try and get a language from the browser\n currentLang = navigator.language;\n } else {\n // Default to US English\n currentLang = SupportedLanguage.EnglishUS;\n }\n\n //currentLang = SupportedLanguage.FrenchCA;\n\n useEffect(() => {\n void initTranslations(currentLang);\n }, [currentLang]);\n\n const setLanguage: SetLanguageFunction = (lang: SupportedLanguage) => {\n setCookie(USER_LANGUAGE_COOKIE_NAME, lang);\n };\n\n return (\n \n {props.children}\n \n );\n};\n\nexport const TestingLanguageProvider: React.FunctionComponent<{\n initialLang: SupportedLanguage;\n}> = ({ initialLang, children }) => {\n const [currentLang, setLanguage] = useState(initialLang);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useLanguageContext = () => {\n const context = useContext(UserLanguageContext);\n if (context === undefined) {\n throw new Error(\"UserLanguageContext requires a provider\");\n }\n return context;\n};\n","import * as React from \"react\";\nimport { useDesktopBreakpoint } from \"hooks\";\nimport { memo } from \"react\";\nimport { isIE } from \"utils/util\";\n\ntype Props = {\n size?: \"large\" | \"small\" | \"auto\";\n className?: string;\n};\n\nconst LARGE_SIZE = \"100px\";\nconst SMALL_SIZE = \"50px\";\n\nexport const LoadingSpinner: React.FunctionComponent = memo(props => {\n const isDesktop = useDesktopBreakpoint();\n\n const size = props.size ?? \"auto\";\n\n const sizePx = (() => {\n switch (size) {\n case \"large\":\n return LARGE_SIZE;\n case \"small\":\n return SMALL_SIZE;\n case \"auto\":\n return isDesktop ? LARGE_SIZE : SMALL_SIZE;\n }\n })();\n\n // Loading spinner generated by https://loading.io\n return (\n \n {isIE && (\n \n )}\n {!isIE && (\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 \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","import { AbsenceType } from \"features/report-absence/incident\";\nimport { TimeInterval } from \"shared-types/time\";\nimport { LocaleTexts } from \"shared-types/api\";\nimport { min, parseISO } from \"date-fns\";\nimport { ClaimDate, MyAbilitiArClaim } from \"graphql-types.gen\";\n\nexport type FmlClaimData = {\n caseId: number;\n caseType: string;\n status?: LeaveClaimStatus;\n statusLocale?: LocaleTexts;\n condition: LocaleTexts;\n absenceType?: \"continuous\" | \"intermittent\" | \"reduced-hours\";\n decisions: ClaimDecision[];\n policies: ClaimPolicy[];\n leaveStatusLocale?: LocaleTexts;\n claimTypeLocale?: LocaleTexts;\n title?: LocaleTexts;\n\n // Presagia questions\n pertainsTo?: ClaimRelationship;\n requestDate?: Date;\n};\n\nexport type AbsenceClaimData = {\n associatedLeaveCaseId: number;\n associatedSTDCaseId: number;\n claimNumber: string;\n claimStatus: AbsenceClaimStatus;\n claimStatusLocale: LocaleTexts;\n caseType: string;\n status: string;\n expectedRTWDate: Date;\n firstDateOfAbsence: Date;\n lastDateOfAbsence: Date;\n leaveIncidentId: number;\n caseState: string;\n primaryReasonLocale: LocaleTexts;\n secondaryReasonLocale: LocaleTexts;\n incidentId: number;\n absenceDates: ClaimDate[];\n absenceType: string;\n returnToWorkDate: Date;\n};\n\nexport const AbsenceClaimStatuses = [\n \"in-progress\",\n \"submitted\",\n \"completed\",\n \"incomplete\"\n] as const;\nexport const StdClaimStatuses = [\"open\", \"closed\"] as const;\nexport const LeaveClaimStatuses = [\n \"approved\",\n \"pending\",\n \"pending-review\",\n \"pending-paperwork\",\n \"cancelled\",\n \"denied\",\n \"missing-paperwork\",\n \"closed\",\n \"outcomed\"\n] as const;\n\nexport type AbsenceClaimStatus = typeof AbsenceClaimStatuses[number];\nexport type StdClaimStatus = typeof StdClaimStatuses[number];\nexport type LeaveClaimStatus = typeof LeaveClaimStatuses[number];\n\nexport type DecisionStatus = \"APPROVED\" | \"DENIED\" | \"PENDING\";\n\nexport type ClaimDecision = {\n start: Date;\n end: Date;\n status: DecisionStatus;\n policyCode?: string;\n policyCodeText?: LocaleTexts;\n};\n\nexport type ClaimPolicy = {\n used: number;\n unit?: \"hours\" | \"days\" | \"weeks\" | \"months\";\n planned: number;\n policyCode: string;\n policyCodeText: LocaleTexts;\n usedHours?: number;\n plannedHours? : number;\n\n};\n\nexport type StdCaseData = {\n caseId: number;\n title: LocaleTexts;\n startDate?: Date;\n firstDateOfAbsence?: Date;\n status?: StdClaimStatus;\n statusLocale?: LocaleTexts;\n decisions: ClaimDecision[];\n};\n\nexport const ClaimRelationships = [\n \"child-adopted\",\n \"child-biological\",\n \"child-adult\",\n \"child-partner\",\n \"child-foster\",\n \"child-step\",\n \"in-loco-parentis\",\n \"legal-ward\",\n \"next-of-kin\",\n \"parent\",\n \"parent-step\",\n \"self\",\n \"spouse\"\n] as const;\nexport type ClaimRelationship = typeof ClaimRelationships[number];\n\nexport const ClaimTypes = [\"fml\", \"std\", \"absence\", \"wcb\"] as const;\nexport type ClaimType = typeof ClaimTypes[number];\nexport const LeaveTypeCodes = [\n \"medicalOccupational\",\n \"medicalNonOccupational\"\n] as const;\nexport type LeaveTypeCode = typeof LeaveTypeCodes[number];\n\nexport type SearchClaims = {\n incidentId: number;\n createdBy: MyAbilitiArClaim[\"createdBy\"];\n title: LocaleTexts;\n absenceDates: TimeInterval[];\n};\n\ntype ClaimSummaryBase = Readonly<{\n incidentId: number;\n title: LocaleTexts;\n relationship?: ClaimRelationship;\n isReferral: boolean;\n}>;\n\nexport type ClaimSummary = Readonly<\n ClaimSummaryBase &\n (\n | {\n claimType: \"fml\";\n status: LeaveClaimStatus;\n statusLocale?: LocaleTexts;\n startDate?: Date;\n conditionCategoryLocale?: LocaleTexts;\n leaveTypeCode?: LeaveTypeCode;\n primaryReasonOfAbsenceLocale?: LocaleTexts;\n secondaryReasonOfAbsenceLocale?: LocaleTexts;\n }\n | {\n claimType: \"std\";\n status: StdClaimStatus;\n startDate?: Date;\n firstDateOfAbsence?: Date;\n }\n | {\n claimType: \"absence\";\n absenceType: AbsenceType;\n absenceDates: TimeInterval[];\n status: AbsenceClaimStatus;\n }\n | {\n claimType: \"incomplete\";\n absenceType: AbsenceType | undefined;\n absenceDates: TimeInterval[];\n status: AbsenceClaimStatus;\n createdBy: string | undefined | null;\n }\n )\n>;\n\nexport type ClaimSummaryWithTranslatedRelationship = Readonly<\n ClaimSummary & {\n translatedRelationship: string;\n }\n>;\n\nexport type ClaimListIncidentType = {\n incidentTypeCode: string;\n headerText: LocaleTexts;\n order: number;\n};\n\nexport function firstDateOfAbsence(claim: ClaimSummary): Date | undefined {\n switch (claim.claimType) {\n case \"fml\":\n case \"std\":\n return claim.startDate;\n\n case \"absence\":\n return min(claim.absenceDates.map(d => parseISO(d.date)));\n }\n}\n\nexport type LeavePolicy = {\n policyCode?: string;\n unit?: string;\n remaining?: number;\n remainingHours?: number;\n planned?: number;\n plannedHours?: number;\n used?: number;\n usedHours?: number;\n policyCodeLocale: LocaleTexts;\n total?: number;\n totalHours?: number;\n eligibility?: boolean;\n};\n","import {\n ClaimsListResult,\n IClaimsService,\n ListClaimsOptions\n} from \"features/claims/claims-service\";\nimport {\n AbsenceClaimStatus,\n ClaimDecision,\n ClaimPolicy,\n ClaimRelationship,\n LeaveClaimStatus,\n StdClaimStatus,\n ClaimSummary,\n ClaimType,\n ClaimTypes,\n DecisionStatus,\n FmlClaimData,\n StdCaseData,\n ClaimListIncidentType,\n LeaveTypeCode,\n AbsenceClaimData,\n LeavePolicy\n} from \"features/claims/claims-model\";\nimport { gql } from \"@apollo/client\";\nimport {\n AbilitiReferral,\n ClaimDate,\n DecisionViewModel,\n LeaveClaim,\n LeaveDeterminationViewModel,\n LeavePolicyViewModel,\n ListActiveClaimsQuery,\n SearchClaimsQuery,\n ListHistoricalClaimsQuery,\n LoadCompanyListIncidentTypesQuery,\n LoadFmlClaimQuery,\n LoadStdClaimQuery,\n LocaleModel,\n Maybe,\n MyAbilitiArClaim,\n RefIncidentTypes,\n SearchRequestOfClaimSearchRequestInput,\n StdClaim,\n Connect_LocaleModel,\n GetLeavePolicySummaryQuery,\n ListClaimsQuery\n} from \"graphql-types.gen\";\nimport { parseISO } from \"date-fns\";\nimport { getApiGraphQL } from \"api/api-graphql\";\nimport {\n TimeInterval,\n toDateInterval,\n toTimeInterval\n} from \"shared-types/time\";\nimport { LocaleTextEntry, LocaleTexts, toLocaleText } from \"shared-types/api\";\nimport { AbsenceType } from \"features/report-absence/incident\";\nimport _ from \"lodash-es\";\nimport { hasValue } from \"utils/util\";\nimport { isValidDate } from \"shared-types/date\";\nimport { parseLocaleModel } from \"features/report-absence/api-parse-helpers\";\nimport { ClaimTypeFilter, filters } from \"pages/claims/helpers\";\n\nconst fragments = {\n searchClaimsResults: gql`\n fragment SearchClaimsResults on IClaim {\n __typename\n incidentId\n incidentTypeCode\n status\n caseCancelled\n claimStatus\n ... on STDClaim {\n caseTypeLocale {\n description\n locale\n }\n dateOfIncident\n firstDateOfAbsence\n relationShip\n }\n ... on LeaveClaim {\n leaveTypeCode\n leaveTypeLocale {\n description\n locale\n }\n leaveStartDate\n relationShip\n conditionCategory\n conditionCategoryLocale {\n description\n locale\n }\n primaryReasonOfAbsenceLocale {\n description\n locale\n }\n secondaryReasonOfAbsenceLocale {\n description\n locale\n }\n leaveStatus\n leaveStatusLocale {\n description\n locale\n }\n }\n ... on MyAbilitiARClaim {\n absenceType\n relationShip\n primaryReasonLocale {\n description\n locale\n }\n secondaryReasonLocale {\n description\n locale\n }\n claimDates {\n startDate\n endDate\n }\n claimStatus\n }\n ... on AbilitiReferral {\n caseType\n leaveTypeLocale {\n description\n locale\n }\n caseTypeLocale {\n description\n locale\n }\n firstDateOfAbsence\n relationShip\n isWCBReferral\n isLeavesReferral\n primaryReasonOfAbsenceLocale {\n description\n locale\n }\n secondaryReasonOfAbsenceLocale {\n description\n locale\n }\n leaveTypeCode\n }\n }\n `\n};\n\nexport class ApiClaimsService implements IClaimsService {\n async listActiveClaims(\n employeeNumber = \"\",\n policyCodes: string[] = [],\n clientCode = \"\",\n claimNumbers: string[] = []\n ): Promise {\n const request: SearchRequestOfClaimSearchRequestInput = {\n pageNumber: 1,\n pageSize: 100,\n clientCode,\n parameters: {\n employeeNumber,\n andFields: [\n {\n fieldName: \"claimStatus\",\n fieldValue: \"I,C\",\n operator: \"NOT_IN\",\n includeNullValues: false\n },\n {\n fieldName: \"leaveStatus\",\n fieldValue: \"CANCELLED\",\n operator: \"NOT_IN\",\n includeNullValues: false\n }\n ],\n claimNumbers,\n policyCodes\n }\n };\n\n const query = await getApiGraphQL().query({\n query: gql`\n query ListActiveClaims(\n $request: SearchRequestOfClaimSearchRequestInput\n ) {\n results: searchActiveClaims(\n request: $request\n incidentTypes: [\n ABILITI_REFERRAL\n INCIDENT_AR\n INCIDENT_GENERIC_LEAVE\n INCIDENT_STD\n INCIDENT_MYABILITI_AR\n ]\n ) {\n items {\n ...SearchClaimsResults\n }\n totalRecords\n }\n }\n ${fragments.searchClaimsResults}\n `,\n variables: {\n request\n }\n });\n\n if (query.errors) {\n throw query.errors;\n }\n\n const claims = (query.data.results?.items ?? [])\n .filter(hasValue)\n .map(parseClaim)\n .filter(hasValue);\n return {\n claims: claims,\n total: query.data.results?.totalRecords\n };\n }\n\n async getClaimsByIds(\n employeeNumber = \"\",\n clientCode = \"\",\n claimNumbers: string[] = []\n ): Promise {\n if (claimNumbers.length === 0) {\n return Promise.resolve({\n total: 0,\n claims: []\n });\n }\n return this.listActiveClaims(employeeNumber, [], clientCode, claimNumbers);\n }\n\n async getIncompleteClaims(\n employeeNumber: string,\n clientCode: string\n ): Promise {\n const request: SearchRequestOfClaimSearchRequestInput = {\n pageNumber: 1,\n pageSize: 100,\n clientCode,\n parameters: {\n employeeNumber,\n claimStatus: \"I\"\n },\n sortingFields: [\n {\n fieldName: \"createdDate\",\n fieldType: \"Date\",\n order: \"DESC\"\n }\n ]\n };\n\n const query = await getApiGraphQL().query({\n query: gql`\n query SearchClaims($request: SearchRequestOfClaimSearchRequestInput) {\n results: searchClaims(\n request: $request\n incidentTypes: [INCIDENT_MYABILITI_AR]\n ) {\n items {\n ... on MyAbilitiARClaim {\n incidentId\n createdBy\n createdDate\n relationShip\n absenceType\n primaryReasonLocale {\n description\n locale\n }\n claimDates {\n startDate\n endDate\n }\n }\n }\n }\n }\n `,\n variables: {\n request\n }\n });\n const claims = (query.data.results?.items || []).map(c =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n parseSearchClaims(c!)\n );\n\n if (query.errors) {\n throw query.errors;\n }\n\n return claims;\n }\n\n async listHistoricalClaims(\n options: ListClaimsOptions,\n employeeNumber: string\n ): Promise {\n const request: SearchRequestOfClaimSearchRequestInput = {\n pageNumber: options.page,\n pageSize: options.pageSize,\n parameters: {\n employeeNumber\n },\n sortingFields: [\n {\n fieldName: \"firstDateOfAbsence\",\n fieldType: \"Date\",\n order: \"DESC\"\n }\n ]\n };\n\n const query = await getApiGraphQL().query({\n query: gql`\n query ListHistoricalClaims(\n $incidentTypes: [RefIncidentTypes!]!\n $request: SearchRequestOfClaimSearchRequestInput\n ) {\n results: searchClaimsWithQuickSearchType(\n quickSearchType: HISTORICALCLAIMS\n incidentTypes: $incidentTypes\n request: $request\n ) {\n items {\n ...SearchClaimsResults\n }\n totalRecords\n }\n }\n ${fragments.searchClaimsResults}\n `,\n variables: {\n incidentTypes: options.claimType\n ? [toIncidentTypeCode(options.claimType)]\n : ClaimTypes.map(toIncidentTypeCode),\n request\n }\n });\n\n return {\n claims: (query.data.results?.items ?? [])\n .filter(hasValue)\n .map(parseClaim)\n .filter(hasValue),\n total: query.data.results?.totalRecords\n };\n }\n\n async loadFmlClaim(caseId: number): Promise {\n const query = await getApiGraphQL().query({\n query: gql`\n query LoadFmlClaim($caseId: Int!) {\n leaveCaseDetails(caseId: $caseId) {\n caseId\n claimStatus\n claimStatusLocale {\n locale\n description\n }\n caseType\n conditionCategoryLocale {\n description\n locale\n }\n primaryReasonLocale {\n description\n locale\n }\n secondaryReasonLocale {\n description\n locale\n }\n caseTypeGroupType\n determinations {\n resolution\n startDate\n endDate\n policyCode\n policyCodeLocale {\n description\n locale\n }\n }\n dischargeDate\n firstDate\n lastDate\n leaveTypeCode\n leaveTypeCodeLocale {\n description\n locale\n }\n leaveStatus\n leaveStatusLocale {\n description\n locale\n }\n leaveAbsenceType\n outcomeDate\n outcomeType\n phaseType\n policies {\n planned\n policyCode\n policyCodeLocale {\n description\n locale\n }\n plannedHours\n usedHours\n remaining\n remainingHours\n displayHours\n total\n unit\n used\n eligibility\n }\n relationShip\n returnToWorkDate\n claimTypeLocale {\n description\n locale\n }\n }\n }\n `,\n variables: {\n caseId\n }\n });\n\n if (query.errors) {\n return Promise.reject(query.errors);\n }\n\n const caseDetails = query.data?.leaveCaseDetails;\n if (caseDetails) {\n const fmlClaimData = parseLeaveCaseDetail(caseDetails);\n if (fmlClaimData) {\n return fmlClaimData;\n }\n }\n\n return Promise.reject();\n }\n\n async loadStdClaim(caseId: number): Promise {\n const query = await getApiGraphQL().query({\n query: gql`\n query LoadStdClaim($caseId: Int!) {\n sTDCaseDetails(caseId: $caseId) {\n caseId\n sTDStartDate\n firstDate\n claimStatus\n claimStatusLocale {\n locale\n description\n }\n caseTypeLocale {\n locale\n description\n }\n decisions {\n decisionType\n startDate\n endDate\n }\n }\n }\n `,\n variables: {\n caseId\n }\n });\n\n if (query.errors) {\n return Promise.reject(query.errors);\n }\n\n const caseDetails = query.data?.sTDCaseDetails;\n if (caseDetails) {\n const stdClaimData = parseStdCaseDetails(caseDetails);\n if (stdClaimData) {\n return stdClaimData;\n }\n }\n\n return Promise.reject();\n }\n\n async loadAbsenceDetails(\n id: number\n ): Promise<\n AbsenceClaimData & { childIncidents: MyAbilitiArClaim[\"childIncidents\"] }\n > {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const query = await getApiGraphQL().query({\n query: gql`\n query LoadAbsenceClaim($id: Long!) {\n absenceIncidentSnapShot(id: $id) {\n associatedLeaveCaseId\n associatedSTDCaseId\n aRClaim {\n childIncidents {\n incidentId\n claimDates {\n startDate\n endDate\n isPartialAbsence\n scheduledShiftEndTime\n scheduledShiftStartTime\n unpaidTimeInMinutes\n }\n returnToWorkDate\n }\n claimNumber\n claimStatus\n claimStatusLocale {\n description\n locale\n }\n caseType\n status\n expectedRTWDate\n returnToWorkDate\n firstDateOfAbsence\n lastDateOfAbsence\n leaveIncidentId\n caseState\n primaryReasonLocale {\n description\n locale\n }\n secondaryReasonLocale {\n description\n locale\n }\n incidentId\n claimDates {\n startDate\n endDate\n isPartialAbsence\n scheduledShiftEndTime\n scheduledShiftStartTime\n unpaidTimeInMinutes\n }\n absenceType\n }\n }\n }\n `,\n variables: {\n id\n }\n });\n\n if (query.errors) {\n return Promise.reject(query.errors);\n }\n\n const caseDetails = query.data;\n if (caseDetails) {\n const absenceClaimData = parseAbsenceDetails(\n caseDetails.absenceIncidentSnapShot\n );\n if (absenceClaimData) {\n return absenceClaimData;\n }\n }\n\n return Promise.reject();\n }\n\n async loadClaimTypeFilters(clientCode: string): Promise {\n const claimTypesFilters = await this.loadCompanyClaimListIncidentTypes(\n clientCode\n )\n .then(result => {\n const incidentTypeCodes = result.map(incidentType =>\n incidentType.incidentTypeCode.toLocaleUpperCase()\n );\n return (\n filters.filter(filter => {\n if (filter.filter === \"all\") return true;\n const incidentType = filterToIncidentTypeCode(filter.filter);\n if (!incidentType) return false;\n return incidentTypeCodes.includes(incidentType);\n }) || []\n );\n })\n .catch(() => {\n return filters;\n });\n\n return claimTypesFilters;\n }\n\n async loadCompanyClaimListIncidentTypes(\n clientCode: string\n ): Promise {\n const query = await getApiGraphQL().query(\n {\n query: gql`\n query LoadCompanyListIncidentTypes($clientCode: String!) {\n companyClaimListIncidentTypes(clientCode: $clientCode) {\n incidentTypeCode\n headerText {\n description\n locale\n }\n order\n }\n }\n `,\n variables: {\n clientCode\n }\n }\n );\n\n if (query.errors) {\n return Promise.reject(query.errors);\n }\n\n return (\n query.data.companyClaimListIncidentTypes?.map(\n incidentType => ({\n incidentTypeCode: incidentType?.incidentTypeCode || \"\",\n headerText:\n incidentType?.headerText?.map(headerTextProp => ({\n description: headerTextProp?.description || \"\",\n locale: headerTextProp?.locale || \"\"\n })) || [],\n order: incidentType?.order || 0\n })\n ) || []\n ).sort((x, y) => x.order - y.order);\n }\n\n async getLeavePolicySummary(): Promise {\n const query = await getApiGraphQL().query({\n query: gql`\n query GetLeavePolicySummary {\n leavePolicySummary {\n policies {\n policyCode\n unit\n remaining\n remainingHours\n displayHours\n totalHours\n usedHours\n used\n plannedHours\n planned\n policyCodeLocale {\n description\n locale\n }\n eligibility\n total\n }\n }\n }\n `\n });\n\n if (query.errors) {\n return Promise.reject(query.errors);\n }\n\n const policySummary = query.data?.leavePolicySummary;\n if (policySummary) {\n return (\n policySummary.policies?.map(policy => ({\n policyCode: policy?.policyCode ?? undefined,\n unit: policy?.unit ?? undefined,\n remaining: policy?.remaining ?? undefined,\n remainingHours: policy?.remainingHours ?? undefined,\n used: policy?.used ?? undefined,\n usedHours: policy?.usedHours ?? undefined,\n eligibility: policy?.eligibility ?? undefined,\n total: policy?.total ?? undefined,\n totalHours: policy?.totalHours ?? undefined,\n policyCodeLocale: policy?.policyCodeLocale || []\n })) ?? []\n );\n }\n\n return Promise.reject();\n }\n\n async listClaims(\n employeeNumber = \"\",\n policyCodes: string[] = [],\n claimNumbers: string[] = []\n ): Promise {\n const request: SearchRequestOfClaimSearchRequestInput = {\n pageNumber: 1,\n pageSize: 100,\n parameters: {\n employeeNumber,\n claimNumbers,\n policyCodes\n }\n };\n\n const query = await getApiGraphQL().query({\n query: gql`\n query ListClaims($request: SearchRequestOfClaimSearchRequestInput) {\n results: searchClaims(\n request: $request\n incidentTypes: [\n ABILITI_REFERRAL\n INCIDENT_AR\n INCIDENT_GENERIC_LEAVE\n INCIDENT_STD\n INCIDENT_MYABILITI_AR\n INCIDENT_WC\n ]\n ) {\n items {\n ...SearchClaimsResults\n }\n totalRecords\n }\n }\n ${fragments.searchClaimsResults}\n `,\n variables: {\n request\n }\n });\n\n if (query.errors) {\n throw query.errors;\n }\n\n const claims = (query.data.results?.items ?? [])\n .filter(hasValue)\n .map(parseClaim)\n .filter(hasValue);\n return {\n claims: claims,\n total: query.data.results?.totalRecords\n };\n }\n}\n\nexport type StdCaseDetails = NonNullable;\nexport type LeaveCaseDetails = NonNullable<\n LoadFmlClaimQuery[\"leaveCaseDetails\"]\n>;\n\nexport type ClaimsQueryItem = NonNullable<\n NonNullable[\"items\"]>[number]\n>;\n\nexport function parseClaim(item: ClaimsQueryItem): ClaimSummary | undefined {\n switch (item.__typename) {\n case \"AbilitiReferral\":\n return parseReferral(item);\n\n case \"LeaveClaim\":\n return parseFmlClaimSummary(item, false);\n\n case \"STDClaim\":\n return parseStdClaimSummary(item, false);\n\n case \"MyAbilitiARClaim\":\n return parseAbsenceReport(item);\n }\n}\n\nconst parseSearchClaims = (\n claim: Pick<\n MyAbilitiArClaim,\n | \"incidentId\"\n | \"createdBy\"\n | \"claimDates\"\n | \"primaryReasonLocale\"\n | \"relationShip\"\n | \"absenceType\"\n >\n): ClaimSummary => {\n const absenceDates = parseAbsenceDates(claim?.claimDates ?? []);\n const absenceType = parseAbsenceType(claim?.absenceType ?? \"\") ?? undefined;\n\n return {\n absenceDates,\n absenceType,\n claimType: \"incomplete\",\n incidentId: claim.incidentId,\n relationship: mapMaybe(parseRelationship, claim.relationShip),\n createdBy: claim.createdBy,\n title: claim.primaryReasonLocale,\n isReferral: false,\n status: \"incomplete\"\n };\n};\n\nfunction parseAbsenceTitle(\n item: Pick\n) {\n const translations = Array();\n item.primaryReasonLocale?.forEach(primary => {\n const secondary = item.secondaryReasonLocale?.find(locale => locale?.locale === primary?.locale);\n \n if (primary !== undefined) {\n if (secondary !== undefined) {\n translations.push({\n ...(primary as LocaleModel),\n description: `${primary?.description} - ${secondary?.description ?? ''}`\n });\n } else {\n translations.push(primary as LocaleModel);\n }\n }\n });\n return translations;\n}\n\nfunction parseAbsenceReport(\n item: Pick<\n MyAbilitiArClaim,\n | \"absenceType\"\n | \"incidentId\"\n | \"primaryReasonLocale\"\n | \"secondaryReasonLocale\"\n | \"relationShip\"\n | \"claimDates\"\n | \"claimStatus\"\n >\n): ClaimSummary | undefined {\n if (item.claimStatus !== \"S\") {\n // Status \"S\" is for \"submitted\". We are only interested in Absence Reports that have been\n // submitted, not ones in draft state, etc.\n return undefined;\n }\n\n const absenceType = parseAbsenceType(item.absenceType ?? \"\") ?? undefined;\n if (absenceType === undefined) {\n console.error(\"Rejecting absence report with invalid absenceType\", item);\n return undefined;\n }\n\n const absenceDates = parseAbsenceDates(item.claimDates ?? []);\n if (absenceDates.length === 0) {\n console.error(\"Rejecting absence report with zero absence dates\", item);\n return undefined;\n }\n\n return {\n claimType: \"absence\",\n incidentId: item.incidentId,\n title: parseAbsenceTitle(item) as LocaleTexts,\n status: deriveAbsenceClaimStatus(absenceDates),\n relationship: mapMaybe(parseRelationship, item.relationShip),\n absenceType,\n absenceDates,\n isReferral: false\n };\n}\n\nfunction parseReferral(\n item: Pick<\n AbilitiReferral,\n | \"caseType\"\n | \"incidentId\"\n | \"firstDateOfAbsence\"\n | \"relationShip\"\n | \"leaveTypeLocale\"\n | \"caseTypeLocale\"\n | \"caseCancelled\"\n | \"isWCBReferral\"\n | \"isLeavesReferral\"\n >\n): ClaimSummary | undefined {\n if (item.isLeavesReferral) {\n return parseFmlClaimSummary(\n {\n ...item,\n leaveStartDate: item.firstDateOfAbsence\n },\n true\n );\n } else if (item.isWCBReferral) {\n console.error(\"Unknown referral case type\", item);\n return undefined;\n } else {\n return parseStdClaimSummary(\n {\n ...item,\n dateOfIncident: item.firstDateOfAbsence\n },\n true\n );\n }\n}\n\nconst fmlTitle = (\n conditionCategoryLocale:\n | Maybe[]>\n | undefined,\n leaveTypeCode: Maybe | undefined,\n primaryReasonOfAbsenceLocale:\n | Maybe[]>\n | undefined,\n secondaryReasonOfAbsenceLocale:\n | Maybe[]>\n | undefined,\n leaveTypeLocale: readonly Connect_LocaleModel[],\n incidentId: number\n) => {\n let title;\n if (\n conditionCategoryLocale !== null &&\n conditionCategoryLocale !== undefined &&\n conditionCategoryLocale.length > 0\n ) {\n title = conditionCategoryLocale;\n } else if (\n (leaveTypeCode === \"medicalNonOccupational\" ||\n leaveTypeCode === \"medicalOccupational\") &&\n primaryReasonOfAbsenceLocale !== null &&\n primaryReasonOfAbsenceLocale !== undefined &&\n primaryReasonOfAbsenceLocale.length > 0 &&\n secondaryReasonOfAbsenceLocale !== null &&\n secondaryReasonOfAbsenceLocale !== undefined &&\n secondaryReasonOfAbsenceLocale.length > 0\n ) {\n const translations = Array();\n primaryReasonOfAbsenceLocale?.forEach(primary => {\n const secondary = secondaryReasonOfAbsenceLocale?.find(locale => {\n locale?.locale === primary?.locale;\n return locale as LocaleModel;\n });\n\n if (primary !== undefined) {\n if (secondary !== undefined) {\n translations.push({\n ...(primary as LocaleModel),\n description: `${primary?.description} - ${secondary?.description}`\n });\n } else {\n translations.push(primary as LocaleModel);\n }\n }\n });\n title = translations;\n } else {\n title = toLocaleText(leaveTypeLocale, `Case #${incidentId}`);\n }\n return title as LocaleModel[];\n};\n\nconst parseFmlTitle = (\n item: Pick<\n LeaveClaim,\n | \"incidentId\"\n | \"claimStatus\"\n | \"leaveStartDate\"\n | \"relationShip\"\n | \"leaveTypeLocale\"\n | \"leaveTypeCode\"\n | \"caseCancelled\"\n | \"conditionCategoryLocale\"\n | \"primaryReasonOfAbsenceLocale\"\n | \"secondaryReasonOfAbsenceLocale\"\n | \"leaveStatus\"\n | \"leaveStatusLocale\"\n >\n): LocaleModel[] => {\n return fmlTitle(\n item.conditionCategoryLocale,\n item.leaveTypeCode,\n item.primaryReasonOfAbsenceLocale,\n item.secondaryReasonOfAbsenceLocale,\n item.leaveTypeLocale,\n item.incidentId\n );\n};\n\nfunction parseFmlClaimSummary(\n item: Pick<\n LeaveClaim,\n | \"incidentId\"\n | \"claimStatus\"\n | \"leaveStartDate\"\n | \"relationShip\"\n | \"leaveTypeLocale\"\n | \"leaveTypeCode\"\n | \"caseCancelled\"\n | \"conditionCategoryLocale\"\n | \"primaryReasonOfAbsenceLocale\"\n | \"secondaryReasonOfAbsenceLocale\"\n | \"leaveStatus\"\n | \"leaveStatusLocale\"\n >,\n isReferral: boolean\n): ClaimSummary | undefined {\n const status = parseLeaveClaimStatus(item.leaveStatus ?? item.claimStatus);\n\n if (status === undefined) {\n console.error(\"Rejecting referral with indeterminate status\", item);\n return undefined;\n }\n\n return {\n claimType: \"fml\",\n incidentId: item.incidentId,\n title: parseFmlTitle(item) as LocaleTexts,\n status,\n statusLocale:\n item.leaveStatusLocale !== null && item.leaveStatusLocale !== undefined\n ? parseLocaleModel(item.leaveStatusLocale)\n : undefined,\n startDate: parseOptionalDate(\n item.leaveStartDate,\n \"FML claim leaveStartDate\"\n ),\n relationship: mapMaybe(parseRelationship, item.relationShip),\n isReferral,\n conditionCategoryLocale: item.conditionCategoryLocale\n ? toLocaleText(item.conditionCategoryLocale as LocaleModel[])\n : undefined,\n primaryReasonOfAbsenceLocale:\n item.primaryReasonOfAbsenceLocale !== undefined\n ? toLocaleText(item.primaryReasonOfAbsenceLocale as LocaleModel[])\n : undefined,\n secondaryReasonOfAbsenceLocale:\n item.secondaryReasonOfAbsenceLocale !== undefined\n ? toLocaleText(item.secondaryReasonOfAbsenceLocale as LocaleModel[])\n : undefined,\n leaveTypeCode: parseLeaveTypeCode(item.leaveTypeCode)\n };\n}\n\nfunction parseLeaveTypeCode(\n leaveTypeCode?: Maybe\n): LeaveTypeCode | undefined {\n if (leaveTypeCode !== undefined) {\n switch (leaveTypeCode) {\n case \"medicalOccupational\":\n return \"medicalOccupational\";\n case \"medicalNonOccupational\":\n return \"medicalNonOccupational\";\n }\n }\n\n return undefined;\n}\n\n/**\n * Allow a date to be absent; but if it is present, make sure it is valid.\n */\nfunction parseOptionalDate(\n isoDate: string | null | undefined,\n logDescription: string\n): Date | undefined {\n if (typeof isoDate === \"string\") {\n const date = parseISO(isoDate);\n if (isValidDate(date)) {\n return date;\n } else {\n console.error(`Date is invalid for ${logDescription}`, isoDate);\n return undefined;\n }\n } else {\n return undefined;\n }\n}\n\nfunction parseStdClaimSummary(\n item: Pick<\n StdClaim,\n | \"claimStatus\"\n | \"incidentId\"\n | \"dateOfIncident\"\n | \"firstDateOfAbsence\"\n | \"relationShip\"\n | \"caseTypeLocale\"\n | \"caseCancelled\"\n >,\n isReferral: boolean\n): ClaimSummary | undefined {\n const status = parseStdClaimStatus(item.claimStatus);\n\n if (status === undefined) {\n console.error(\"Rejecting referral with indeterminate status\", item);\n return undefined;\n }\n\n return {\n claimType: \"std\",\n incidentId: item.incidentId,\n title: toLocaleText(item.caseTypeLocale, `Case #${item.incidentId}`),\n status,\n startDate: parseOptionalDate(\n item.dateOfIncident,\n \"STD claim dateOfIncident\"\n ),\n firstDateOfAbsence: parseOptionalDate(\n item.firstDateOfAbsence,\n \"STD claim firstDateOfAbsence\"\n ),\n relationship: mapMaybe(parseRelationship, item.relationShip),\n isReferral\n };\n}\n\nfunction parseRelationship(\n relationShip: string\n): ClaimRelationship | undefined {\n switch (relationShip) {\n case \"adoptedChild\":\n return \"child-adopted\";\n case \"biologicalChild\":\n return \"child-biological\";\n case \"AdultChild\":\n return \"child-adult\";\n case \"childOfDomestic\":\n return \"child-partner\";\n case \"fosterChild\":\n return \"child-foster\";\n case \"in_loco_parentis\":\n return \"in-loco-parentis\";\n case \"legal_ward\":\n return \"legal-ward\";\n case \"next_of_kin\":\n return \"next-of-kin\";\n case \"parent\":\n return \"parent\";\n case \"self\":\n return \"self\";\n case \"spouse\":\n return \"spouse\";\n case \"stepChild\":\n return \"child-step\";\n case \"step_parent\":\n return \"parent-step\";\n default:\n return undefined;\n }\n}\n\nfunction parseAbsenceType(str?: string): AbsenceType | undefined {\n switch (str) {\n case \"continuous\":\n return \"continuous\";\n case \"intermittent\":\n return \"intermittent\";\n default:\n return undefined;\n }\n}\n\nfunction parseISOWithoutTimezone(dateString?: string | null): Date | undefined{\n // Remove the timezone offset from the string\n if (dateString != null){\n const withoutTimezone = dateString.replace(/[+-]\\d{2}:\\d{2}$/, '');\n\n // Parse the modified string into a Date object\n return new Date(withoutTimezone);\n}\n return undefined;\n}\n\nfunction parseAbsenceDates(\n claimDates: readonly Pick[]\n) {\n return claimDates\n .map(d => {\n const startDate = parseISOWithoutTimezone(d.startDate);\n const endDate = parseISOWithoutTimezone(d.endDate);\n if (isValidDate(startDate) && isValidDate(endDate)) {\n return toTimeInterval(startDate, endDate);\n } else {\n console.error(\"Invalid/missing startDate and/or endDate\", d);\n return undefined;\n }\n })\n .filter(hasValue);\n}\n\nfunction toIncidentTypeCode(claimType: ClaimType): RefIncidentTypes {\n switch (claimType) {\n case \"fml\":\n return \"INCIDENT_GENERIC_LEAVE\";\n case \"std\":\n return \"INCIDENT_STD\";\n case \"absence\":\n return \"INCIDENT_MYABILITI_AR\";\n case \"wcb\":\n return \"INCIDENT_WC\";\n }\n}\n\nfunction filterToIncidentTypeCode(\n claimType: ClaimType | \"all\"\n): RefIncidentTypes | undefined {\n switch (claimType) {\n case \"fml\":\n return \"INCIDENT_GENERIC_LEAVE\";\n case \"std\":\n return \"INCIDENT_STD\";\n case \"absence\":\n return \"INCIDENT_MYABILITI_AR\";\n case \"wcb\":\n return \"INCIDENT_WC\";\n case \"all\":\n return undefined;\n }\n}\n\nfunction deriveAbsenceClaimStatus(\n absenceDates: TimeInterval[]\n): AbsenceClaimStatus {\n const now = new Date(Date.now());\n\n const areAllDatesPast = _.every(\n absenceDates,\n ad => toDateInterval(ad).endDate < now\n );\n return areAllDatesPast ? \"completed\" : \"submitted\";\n}\n\nfunction parseStdClaimStatus(\n status?: string | null\n): StdClaimStatus | undefined {\n switch (status?.toUpperCase()) {\n case \"OPEN\":\n return \"open\";\n case \"CLOSED\":\n return \"closed\";\n }\n\n return undefined;\n}\n\nfunction parseLeaveClaimStatus(\n claimStatus?: string | null\n): LeaveClaimStatus | undefined {\n switch (claimStatus?.toUpperCase()) {\n case \"APPROVED\":\n return \"approved\";\n case \"PENDING\":\n case \"OPEN\":\n return \"pending\";\n case \"PENDING_PAPERWORK\":\n return \"pending-paperwork\";\n case \"PENDING_REVIEW\":\n return \"pending-review\";\n case \"MISSING_PAPERWORK\":\n return \"missing-paperwork\";\n case \"CANCELLED\":\n return \"cancelled\";\n case \"DENIED\":\n return \"denied\";\n case \"CLOSED\":\n return \"closed\";\n case \"OUTCOMED\":\n return \"outcomed\";\n }\n\n return undefined;\n}\n\nfunction parseAbsenceClaimStatus(\n absenceDates: TimeInterval[]\n ): AbsenceClaimStatus {\n const now = new Date(Date.now());\n \n const areAllDatesPast = absenceDates.every(ad => toDateInterval(ad).endDate < now);\n return areAllDatesPast ? \"completed\" : \"submitted\";\n }\n\nfunction parseDecisionStatus(decisionType: string): DecisionStatus | undefined {\n switch (decisionType.toUpperCase()) {\n case \"APPROVED\":\n case \"SUPPORT\":\n case \"PREAPROV\":\n case \"SUP.TRTW\":\n return \"APPROVED\";\n\n case \"PENDING\":\n return \"PENDING\";\n\n case \"DENIED\":\n case \"NON.PARTIC\":\n case \"NONSUPPORT\":\n return \"DENIED\";\n\n default:\n console.error(\"Unknown decisionType\", decisionType);\n return undefined;\n }\n}\n\nfunction parseStdCaseDetails(details: StdCaseDetails): StdCaseData | undefined {\n return {\n caseId: details.caseId,\n title: details.caseTypeLocale,\n startDate: parseOptionalDate(\n details.sTDStartDate,\n \"STD detail stdStartDate\"\n ),\n firstDateOfAbsence: parseOptionalDate(\n details.firstDate,\n \"STD detail firstDate\"\n ),\n status: parseStdClaimStatus(details.claimStatus),\n statusLocale: parseLocaleModel(details.claimStatusLocale),\n decisions: parseStdDecisions(details.decisions)\n };\n}\n\nfunction parseAbsenceDetails(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n details: any\n): AbsenceClaimData & { childIncidents: MyAbilitiArClaim[\"childIncidents\"] } {\n const absenceDates= parseAbsenceDates(details.aRClaim.claimDates ?? []); \n return {\n caseType: details.aRClaim.caseType,\n associatedLeaveCaseId: details.associatedLeaveCaseId,\n associatedSTDCaseId: details.associatedSTDCaseId,\n childIncidents: details.aRClaim.childIncidents,\n claimNumber: details.aRClaim.claimNumber,\n claimStatus: parseAbsenceClaimStatus(absenceDates),\n claimStatusLocale: parseLocaleModel(details.aRClaim.claimStatusLocale),\n status: details.aRClaim.status,\n expectedRTWDate: details.aRClaim.expectedRTWDate,\n firstDateOfAbsence: details.aRClaim.firstDateOfAbsence,\n lastDateOfAbsence: details.aRClaim.lastDateOfAbsence,\n leaveIncidentId: details.aRClaim.leaveIncidentId,\n caseState: details.aRClaim.caseState,\n primaryReasonLocale: parseLocaleModel(details.aRClaim.primaryReasonLocale),\n secondaryReasonLocale: parseLocaleModel(\n details.aRClaim.secondaryReasonLocale\n ),\n incidentId: details.aRClaim.incidentId,\n absenceDates: details.aRClaim.claimDates ?? [],\n absenceType: details.aRClaim.absenceType,\n returnToWorkDate: details.aRClaim.returnToWorkDate\n };\n}\n\nfunction parseStdDecisions(\n decisions: readonly Pick<\n DecisionViewModel,\n \"decisionType\" | \"startDate\" | \"endDate\"\n >[]\n): ClaimDecision[] {\n // TODO All of the DecisionViewModel fields are optional; all of the ClaimDecision fields are required\n // It seems like the end date might actually be nullable depending on the decisionType but who knows\n return decisions\n .map(decision => {\n if (\n typeof decision.decisionType === \"string\" &&\n typeof decision.startDate === \"string\" &&\n typeof decision.endDate === \"string\"\n ) {\n const status = parseDecisionStatus(decision.decisionType);\n if (status !== undefined) {\n return {\n status,\n start: parseISO(decision.startDate),\n end: parseISO(decision.endDate)\n };\n }\n }\n\n console.error(\"Rejecting incomplete STD decision\", decision);\n return undefined;\n })\n .filter(hasValue);\n}\n\nfunction parseLeaveCaseDetail(\n details: LeaveCaseDetails\n): FmlClaimData | undefined {\n return {\n title: fmlTitle(\n details.conditionCategoryLocale,\n details.leaveTypeCode,\n details.primaryReasonLocale,\n details.secondaryReasonLocale,\n details.leaveTypeCodeLocale,\n details.caseId\n ) as LocaleTexts,\n caseId: details.caseId,\n caseType: details.caseType,\n status: parseLeaveClaimStatus(details.leaveStatus ?? details.claimStatus),\n statusLocale: parseLocaleModel(details.claimStatusLocale),\n condition: details.leaveTypeCodeLocale,\n absenceType: parseAbsenceType(details.leaveAbsenceType ?? \"\"),\n decisions: parseLeaveDeterminations(details.determinations),\n policies: parseLeavePolicies(details.policies),\n pertainsTo: mapMaybe(parseRelationship, details.relationShip),\n leaveStatusLocale:\n details.leaveStatusLocale !== null &&\n details.leaveStatusLocale !== undefined\n ? parseLocaleModel(details.leaveStatusLocale)\n : undefined,\n claimTypeLocale:\n details.claimTypeLocale !== null && details.claimTypeLocale !== undefined\n ? parseLocaleModel(details.claimTypeLocale)\n : undefined\n };\n}\n\nfunction parseLeaveDeterminations(\n determinations: readonly Pick<\n LeaveDeterminationViewModel,\n \"resolution\" | \"startDate\" | \"endDate\" | \"policyCode\" | \"policyCodeLocale\"\n >[]\n): ClaimDecision[] {\n return determinations\n .map(decision => {\n if (\n typeof decision.resolution === \"string\" &&\n typeof decision.startDate === \"string\" &&\n typeof decision.endDate === \"string\" &&\n typeof decision.policyCode === \"string\"\n ) {\n const policyCodeText = decision.policyCodeLocale as LocaleTexts;\n const status = parseDecisionStatus(decision.resolution);\n if (status !== undefined) {\n return {\n status,\n start: parseISO(decision.startDate),\n end: parseISO(decision.endDate),\n policyCode: decision.policyCode,\n policyCodeText\n };\n }\n }\n\n console.error(\"Rejecting incomplete Leave Determination\", decision);\n return undefined;\n })\n .filter(hasValue);\n}\n\nfunction parseLeavePolicies(\n policies: readonly LeavePolicyViewModel[]\n): ClaimPolicy[] {\n return policies\n .map(policy => {\n if (\n typeof policy.used === \"number\" &&\n typeof policy.planned === \"number\" &&\n typeof policy.policyCode === \"string\"\n ) {\n return {\n used: policy.used,\n unit: parsePolicyUnit(policy.unit),\n planned: policy.planned,\n policyCode: policy.policyCode,\n policyCodeText: policy.policyCodeLocale,\n plannedHours: policy.plannedHours ?? undefined,\n usedHours: policy.usedHours ?? undefined\n };\n }\n\n console.error(\"Rejecting incomplete Leave Policy\", policy);\n return undefined;\n })\n .filter(hasValue);\n}\n\nfunction parsePolicyUnit(\n unit?: string | null\n): \"hours\" | \"days\" | \"weeks\" | \"months\" | undefined {\n switch (unit) {\n case \"hours\":\n return \"hours\";\n case \"days\":\n return \"days\";\n case \"weeks\":\n return \"weeks\";\n case \"months\":\n return \"months\";\n default:\n break;\n }\n}\n\n/**\n * Map a value using mapFn(), if the value is not nullish; otherwise return undefined\n */\nfunction mapMaybe(\n mapFn: (value: T) => R,\n maybeValue: T | null | undefined\n) {\n if (hasValue(maybeValue)) {\n return mapFn(maybeValue);\n } else {\n return undefined;\n }\n}\n","import {\n AbsenceClaimData,\n ClaimSummary,\n ClaimType,\n FmlClaimData,\n LeavePolicy,\n StdCaseData\n} from \"features/claims/claims-model\";\nimport { MyAbilitiArClaim } from \"graphql-types.gen\";\nimport { ApiClaimsService } from \"features/claims/claims-service-api\";\nimport { ClaimTypeFilter } from \"pages/claims/helpers\";\n\nexport const getClaimsService = (): IClaimsService => {\n // ClaimsService is mocked using an Apollo client link\n return new ApiClaimsService();\n};\n\nexport interface ListClaimsOptions {\n claimType?: ClaimType;\n page: number;\n pageSize: number;\n}\n\nexport interface ClaimsListResult {\n claims: ClaimSummary[];\n total: number;\n}\n\nexport interface IClaimsService {\n listActiveClaims(\n employeeNumber: string,\n policyCodes?: string[]\n ): Promise;\n getIncompleteClaims(\n employeeNumber: string,\n clientCode: string\n ): Promise;\n listHistoricalClaims(\n options: ListClaimsOptions,\n employeeNumber: string\n ): Promise;\n loadFmlClaim(caseId: number): Promise;\n loadStdClaim(caseId: number): Promise;\n loadClaimTypeFilters(clientCode: string): Promise;\n getClaimsByIds(\n employeeNumber: string,\n clientCode: string,\n claimNumbers: string[]\n ): Promise;\n loadAbsenceDetails(\n id: number\n ): Promise<\n AbsenceClaimData & { childIncidents: MyAbilitiArClaim[\"childIncidents\"] }\n >;\n getLeavePolicySummary(): Promise;\n listClaims(\n employeeNumber: string,\n policyCodes?: string[],\n claimNumbers?: string[]\n ): Promise;\n}\n","export enum KeyCode {\n BACKSPACE = 8,\n TAB = 9,\n ENTER = 13,\n SHIFT = 16,\n CTRL = 17,\n ALT = 18,\n PAUSE = 19,\n CAPS_LOCK = 20,\n ESCAPE = 27,\n SPACE = 32,\n PAGE_UP = 33,\n PAGE_DOWN = 34,\n END = 35,\n HOME = 36,\n ARROW_LEFT = 37,\n ARROW_UP = 38,\n ARROW_RIGHT = 39,\n ARROW_DOWN = 40,\n INSERT = 45,\n DELETE = 46,\n KEY_0 = 48,\n KEY_1 = 49,\n KEY_2 = 50,\n KEY_3 = 51,\n KEY_4 = 52,\n KEY_5 = 53,\n KEY_6 = 54,\n KEY_7 = 55,\n KEY_8 = 56,\n KEY_9 = 57,\n KEY_A = 65,\n KEY_B = 66,\n KEY_C = 67,\n KEY_D = 68,\n KEY_E = 69,\n KEY_F = 70,\n KEY_G = 71,\n KEY_H = 72,\n KEY_I = 73,\n KEY_J = 74,\n KEY_K = 75,\n KEY_L = 76,\n KEY_M = 77,\n KEY_N = 78,\n KEY_O = 79,\n KEY_P = 80,\n KEY_Q = 81,\n KEY_R = 82,\n KEY_S = 83,\n KEY_T = 84,\n KEY_U = 85,\n KEY_V = 86,\n KEY_W = 87,\n KEY_X = 88,\n KEY_Y = 89,\n KEY_Z = 90,\n LEFT_META = 91,\n RIGHT_META = 92,\n SELECT = 93,\n NUMPAD_0 = 96,\n NUMPAD_1 = 97,\n NUMPAD_2 = 98,\n NUMPAD_3 = 99,\n NUMPAD_4 = 100,\n NUMPAD_5 = 101,\n NUMPAD_6 = 102,\n NUMPAD_7 = 103,\n NUMPAD_8 = 104,\n NUMPAD_9 = 105,\n MULTIPLY = 106,\n ADD = 107,\n SUBTRACT = 109,\n DECIMAL = 110,\n DIVIDE = 111,\n F1 = 112,\n F2 = 113,\n F3 = 114,\n F4 = 115,\n F5 = 116,\n F6 = 117,\n F7 = 118,\n F8 = 119,\n F9 = 120,\n F10 = 121,\n F11 = 122,\n F12 = 123,\n NUM_LOCK = 144,\n SCROLL_LOCK = 145,\n SEMICOLON = 186,\n EQUALS = 187,\n COMMA = 188,\n DASH = 189,\n PERIOD = 190,\n FORWARD_SLASH = 191,\n GRAVE_ACCENT = 192,\n OPEN_BRACKET = 219,\n BACK_SLASH = 220,\n CLOSE_BRACKET = 221,\n SINGLE_QUOTE = 222\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\nexport enum KeyName {\n ALT = \"Alt\",\n ARROW_DOWN = \"ArrowDown\",\n ARROW_LEFT = \"ArrowLeft\",\n ARROW_RIGHT = \"ArrowRight\",\n ARROW_UP = \"ArrowUp\",\n BACKSPACE = \"Backspace\",\n CTRL = \"Control\",\n END = \"End\",\n ENTER = \"Enter\",\n ESCAPE = \"Escape\",\n HOME = \"Home\",\n PAGE_DOWN = \"PageDown\",\n PAGE_UP = \"PageUp\",\n SHIFT = \"Shift\",\n TAB = \"Tab\",\n SPACE = \" \"\n}\n\nexport type KeyboardKey =\n | \"ARROW_UP\"\n | \"ARROW_DOWN\"\n | \"ARROW_LEFT\"\n | \"ARROW_RIGHT\"\n | \"PAGE_UP\"\n | \"PAGE_DOWN\"\n | \"HOME\"\n | \"END\"\n | \"ENTER\"\n | \"TAB\"\n | \"ESCAPE\"\n | \"SPACE\";\n\ntype KeyboardEventProps = { keyCode: number; key: string };\n\n/**\n * Detect which key was pressed in a React.KeyboardEvent.\n * Checks both the deprecated keyCode property and the key property for maximum browser support.\n */\nexport function detectKey({\n keyCode,\n key\n}: KeyboardEventProps): KeyboardKey | undefined {\n if (keyCode === KeyCode.ARROW_UP || key === KeyName.ARROW_UP) {\n return \"ARROW_UP\";\n } else if (keyCode === KeyCode.ARROW_DOWN || key === KeyName.ARROW_DOWN) {\n return \"ARROW_DOWN\";\n } else if (keyCode === KeyCode.ARROW_LEFT || key === KeyName.ARROW_LEFT) {\n return \"ARROW_LEFT\";\n } else if (keyCode === KeyCode.ARROW_RIGHT || key === KeyName.ARROW_RIGHT) {\n return \"ARROW_RIGHT\";\n } else if (keyCode === KeyCode.PAGE_UP || key === KeyName.PAGE_UP) {\n return \"PAGE_UP\";\n } else if (keyCode === KeyCode.PAGE_DOWN || key === KeyName.PAGE_DOWN) {\n return \"PAGE_DOWN\";\n } else if (keyCode === KeyCode.HOME || key === KeyName.HOME) {\n return \"HOME\";\n } else if (keyCode === KeyCode.END || key === KeyName.END) {\n return \"END\";\n } else if (keyCode === KeyCode.ENTER || key === KeyName.ENTER) {\n return \"ENTER\";\n } else if (keyCode === KeyCode.TAB || key === KeyName.TAB) {\n return \"TAB\";\n } else if (keyCode === KeyCode.SPACE || key === KeyName.SPACE) {\n return \"SPACE\";\n } else if (keyCode === KeyCode.ESCAPE || key === KeyName.ESCAPE) {\n return \"ESCAPE\";\n } else {\n return undefined;\n }\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dashboard-page\":\"dashboard_dashboard-page__xl_iU\",\"blank-space\":\"dashboard_blank-space__nK_0B\",\"welcome-container\":\"dashboard_welcome-container__Obz3_\",\"welcome-box\":\"dashboard_welcome-box__3LvOd\",\"welcome-name\":\"dashboard_welcome-name__1A9l9\",\"welcome-image\":\"dashboard_welcome-image__2u-Ss\",\"policy-summary-box\":\"dashboard_policy-summary-box__297-0\",\"policy-summary-box-mobile\":\"dashboard_policy-summary-box-mobile__3lcHD\",\"report-absence\":\"dashboard_report-absence__33d4j\",\"card\":\"dashboard_card__3CyG1\",\"logo\":\"dashboard_logo__377GV\",\"menu-button\":\"dashboard_menu-button__1Xm1O\",\"empty-cases\":\"dashboard_empty-cases__27DGu\",\"icon\":\"dashboard_icon__-Xlv6\",\"head\":\"dashboard_head__27qFO\",\"context\":\"dashboard_context__2Iq64\"};","import React from \"react\";\nimport styles from \"./api-error-view.module.scss\";\nimport { Translation } from \"components/translation\";\nimport clsx from \"clsx\";\n\ntype Props = {\n className?: string;\n};\n\nexport const ApiErrorView: React.FC = props => {\n const computedClass = () =>\n props.className\n ? clsx(styles[\"api-error-cases\"], styles[props.className])\n : clsx(styles[\"api-error-cases\"]);\n\n return (\n
\n \n

\n \n

\n

\n \n

\n
\n );\n};\n","import React from \"react\";\nimport styles from \"./tag.module.scss\";\nimport clsx from \"clsx\";\nimport { KeyCode, KeyName } from \"shared-types/key-events\";\nimport { usePreventOutlineOnClick } from \"hooks\";\n\nexport type TagStyle = \"green\" | \"blue\" | \"gray\" | \"red\" | \"orange\" | \"purple\";\n\ntype TagProps = {\n tagStyle: TagStyle;\n};\n\nexport const Tag: React.FC = props => {\n return (\n \n {props.children}\n \n );\n};\n\ntype TagButtonProps = {\n selectedStyle: TagStyle;\n onClick: (selected: boolean) => void;\n selected: boolean;\n};\n\nexport const TagButton: React.FC = props => {\n const sendClick = () => props.onClick(!props.selected);\n const { onMouseDown, onMouseUp, onFocus } = usePreventOutlineOnClick();\n\n return (\n {\n if (\n event.keyCode === KeyCode.ENTER ||\n event.key === KeyName.ENTER ||\n event.keyCode === KeyCode.SPACE ||\n event.key === KeyName.SPACE\n ) {\n sendClick();\n event.preventDefault();\n }\n }}\n >\n {props.children}\n \n );\n};\n","import React from \"react\";\nimport clsx from \"clsx\";\nimport styles from \"./styles.module.scss\";\nimport { useTranslation } from \"hooks/translation\";\nimport { TimeIcon } from \"components/icons\";\n\nexport type SummaryLabelProps = {\n label: string;\n value: string;\n labelTestId?: string;\n valueTestId?: string;\n shiftLabel?: string;\n isOvernight?: boolean;\n subValue?: string;\n absenceTime?: string;\n unpaidAbsenceTime?: string;\n};\n\nconst SummaryLabel: React.FC = ({\n label,\n value,\n labelTestId,\n valueTestId,\n shiftLabel,\n isOvernight,\n subValue,\n absenceTime,\n unpaidAbsenceTime\n}) => {\n const t = useTranslation();\n\n return (\n
\n
\n {label}\n
\n

\n {value}\n

\n

\n {subValue}\n

\n {shiftLabel && (\n \n {shiftLabel}\n {isOvernight && (\n \n {\" \" +\n t({\n tag: \"reportAbsence.absence_shift.next_day\"\n })}\n \n )}\n
\n )}\n {absenceTime && (\n
\n \n

{absenceTime}

\n {unpaidAbsenceTime && (\n

{unpaidAbsenceTime}

\n )}\n
\n )}\n \n );\n};\n\nexport default SummaryLabel;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"doc-upload\":\"styles_doc-upload__2Sz9n\",\"doc-upload-button\":\"styles_doc-upload-button__W7N2P\",\"doc-upload-button--icon\":\"styles_doc-upload-button--icon__28ocT\",\"doc-upload-modal\":\"styles_doc-upload-modal__322eS\",\"doc-upload-filepond-uploading\":\"styles_doc-upload-filepond-uploading__uJyJl\",\"doc-upload-filepond-files\":\"styles_doc-upload-filepond-files__327oj\",\"doc-upload-files-desc\":\"styles_doc-upload-files-desc__3j4wo\",\"doc-upload-content\":\"styles_doc-upload-content__a3VXu\",\"doc-upload-desc\":\"styles_doc-upload-desc__1mtmV\",\"doc-upload-file\":\"styles_doc-upload-file__eT61_\",\"doc-upload-file-state\":\"styles_doc-upload-file-state__i4xuZ\",\"doc-upload-file-error\":\"styles_doc-upload-file-error__3zj6D\",\"doc-upload-actions\":\"styles_doc-upload-actions__2CQSE\",\"doc-upload-error\":\"styles_doc-upload-error__30XtS\"};","import * as React from \"react\";\nimport { ClientTranslationProps } from \"i18n\";\nimport { useTranslation } from \"hooks/translation\";\nimport _ from \"lodash-es\";\nimport { textForLang } from \"shared-types/api\";\nimport { substitute } from \"i18n/core\";\nimport { useLanguageContext } from \"context/user-language-context\";\n\ntype TranslationProps = ClientTranslationProps & {\n /** Render text as full HTML */\n html?: boolean;\n /** Surround variables with when interpolating (input text is considered plain unless html prop is also set) */\n strong?: boolean;\n};\n\nexport const Translation: React.FunctionComponent = props => {\n const t = useTranslation();\n const { currentLang } = useLanguageContext();\n\n const strongText = (text: ClientTranslationProps) => {\n const maybeEscapeHtml = props.html ? (html: string) => html : escapeHtml;\n const htmlTemplate = maybeEscapeHtml(\n t({\n tag: text.tag,\n vars: _.mapValues(text.vars, (v, k) => `{${k}}`)\n } as ClientTranslationProps)\n );\n const htmlVars = _.mapValues(\n text.vars,\n v =>\n `${maybeEscapeHtml(\n typeof v === \"string\" ? v : textForLang(v, currentLang)\n )}`\n );\n return substitute(htmlTemplate, htmlVars);\n };\n\n const text = props.strong ? strongText(props) : t(props);\n return props.html || props.strong ? (\n \n ) : (\n <>{text}\n );\n};\n\n/**\n * Escape HTML markup in a plaintext string.\n */\nfunction escapeHtml(plaintext: string) {\n return plaintext\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/'/g, \"'\")\n .replace(/\"/g, \""\");\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"table\":\"table_table__22P7A\",\"table-header\":\"table_table-header__2gPN_\",\"table-body__row\":\"table_table-body__row__3qE9f\",\"table-cell\":\"table_table-cell__1cmKC\",\"table-cell--left\":\"table_table-cell--left__tvfr3\",\"table-cell--right\":\"table_table-cell--right__3FPAt\",\"table-cell--center\":\"table_table-cell--center__1LP0I\",\"table-footer\":\"table_table-footer__27AxU\",\"table-mobile\":\"table_table-mobile__jeQ2H\",\"table-mobile__cell\":\"table_table-mobile__cell__2GahX\",\"table-mobile__header\":\"table_table-mobile__header__2Q6Nl\",\"table-mobile__lower-header\":\"table_table-mobile__lower-header__1KZ6v\",\"table-mobile__footer\":\"table_table-mobile__footer__eeExB\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"card\":\"claim-card_card__23nWE\",\"card-link\":\"claim-card_card-link__1_Hsv\",\"title-wrapper\":\"claim-card_title-wrapper__cCZxs\",\"title\":\"claim-card_title__3ZC4l\",\"tag-row\":\"claim-card_tag-row__LrwlK\",\"dates-container-wrapper\":\"claim-card_dates-container-wrapper__W1HsM\",\"dates-container\":\"claim-card_dates-container__1-6Wt\",\"dates-container__content\":\"claim-card_dates-container__content__1v3Zg\",\"date-label\":\"claim-card_date-label__3X4C1\",\"time-label\":\"claim-card_time-label__1LPBY\",\"tooltip\":\"claim-card_tooltip__YJOS1\",\"moon\":\"claim-card_moon__187Zn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"select-container\":\"styles_select-container__3s70w\",\"select\":\"styles_select__21M2S\",\"select--no-label\":\"styles_select--no-label__1Z7gm\",\"select-label\":\"styles_select-label__QM881\",\"select-value\":\"styles_select-value__1F4JR\",\"select-icon\":\"styles_select-icon__3_hS6\",\"select-helper-text\":\"styles_select-helper-text__2ZOVJ\",\"readonly\":\"styles_readonly__3gdnM\",\"options-shadow\":\"styles_options-shadow__8I7fs\",\"options-container\":\"styles_options-container__3TgLm\",\"options-header\":\"styles_options-header__1b9NM\",\"options-header-text\":\"styles_options-header-text__2MtVL\",\"close-button\":\"styles_close-button__3dXo2\",\"options-list\":\"styles_options-list__3jbp-\",\"option\":\"styles_option__242YI\"};","import { LocaleModel } from \"graphql-types.gen\";\nimport { SupportedLanguage } from \"features/translations/locales\";\nimport { hasValue } from \"utils/util\";\n\nexport type LocaleTextEntry = {\n readonly description: string;\n readonly locale: string;\n};\n\nexport type LocaleTexts = ReadonlyArray;\n\n// This should only be used for development/testing\nexport const LocaleText = {\n en: (englishText: string): LocaleTextEntry[] => [\n { description: englishText, locale: \"EN\" }\n ],\n en_fr: (englishText: string): LocaleTextEntry[] => [\n { description: englishText, locale: \"EN\" },\n { description: `FRENCH: ${englishText}`, locale: \"FR\" }\n ]\n};\n\nexport function toLocaleText(\n localeModel: readonly LocaleModel[],\n englishFallback: string | undefined = undefined\n): LocaleTexts {\n if (localeModel.length > 0) {\n return localeModel as LocaleTexts;\n } else if (englishFallback !== undefined) {\n return LocaleText.en(englishFallback);\n } else {\n return [];\n }\n}\n\nexport function textForLang(strings: LocaleTexts, lang: SupportedLanguage) {\n const filteredList = strings.filter(hasValue);\n if (filteredList.length === 0) return \"\";\n\n const text = filteredList.find(t => matchLocale(t.locale, lang));\n return (\n (text?.description ||\n filteredList.find(t => !!t.description)?.description) ??\n \"\"\n );\n}\n\nfunction matchLocale(locale: string, lang: SupportedLanguage) {\n switch (lang) {\n case SupportedLanguage.EnglishCA:\n return [\"EN\", \"en\", \"en-CA\"].includes(locale);\n case SupportedLanguage.EnglishUS:\n return [\"EN\", \"en\", \"en-US\"].includes(locale);\n case SupportedLanguage.FrenchCA:\n return [\"FR\", \"fr\", \"fr-CA\"].includes(locale);\n case SupportedLanguage.Spanish:\n return [\"ES\", \"es\"].includes(locale);\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const sectionQuery = gql`\n fragment sectionQuery on PageModel {\n __typename\n pageHeading {\n description\n locale\n }\n pageHeadingDescription {\n description\n locale\n }\n pageId\n sections {\n questions {\n config {\n changeMonth\n changeYear\n linkedField\n maxDate\n maxLength\n uRL\n }\n defaultValue\n isReadOnly\n isVisible\n label {\n description\n locale\n }\n longDescription {\n description\n locale\n }\n name\n options {\n text {\n description\n locale\n }\n value\n }\n placeholder {\n description\n locale\n }\n questionType\n reloadIncidentData\n resolvedValue\n source\n alerts {\n alertId\n alertText {\n description\n locale\n }\n }\n validationConstraint {\n compare {\n fieldToCompare\n operator\n valueToCompare\n }\n digits\n max\n min\n number\n required\n }\n visibilityConditions {\n id\n operator\n values\n }\n }\n sectionHeading {\n description\n locale\n }\n sectionHeadingDescription {\n description\n locale\n }\n sectionId\n }\n }\n`;\n\nexport const absenceIncidentFields = gql`\n fragment absenceIncidentFields on AbsenceIncidentModel {\n __typename\n absenceDates {\n isPartialAbsence\n scheduledShiftEndTime\n scheduledShiftStartTime\n shiftDuration\n shiftEndTime\n shiftStartTime\n }\n absenceIncidentId\n absenceType\n bestPhoneNumber\n employeeNumber\n clientCode\n firstName\n lastName\n linkedIncident\n primaryReason\n provinceCode\n questionResponses {\n key\n value\n }\n requestDate\n returnToWorkDate\n secondaryReason\n maxDaysAllowed\n maxReportableDays\n }\n`;\n\nexport const saveAbsenceIncidentModel = gql`\n fragment saveAbsenceIncidentModel on SaveAbsenceIncidentReturnModel {\n __typename\n absenceIncidentModel {\n ...absenceIncidentFields\n }\n }\n ${absenceIncidentFields}\n`;\n\nexport const submitAbsenceIncidentModel = gql`\n fragment submitAbsenceIncidentModel on SubmitAbsenceIncidentReturnModel {\n __typename\n absenceIncidentModel {\n ...absenceIncidentFields\n }\n }\n ${absenceIncidentFields}\n`;\n\nexport const incidentQuestionFields = gql`\n fragment incidentQuestionFields on AbsenceQuestionReturnModel {\n __typename\n questions {\n ...sectionQuery\n }\n preQualifyingQuestions {\n ...sectionQuery\n }\n reasonOfAbsenceAlerts {\n alertId\n alertLevel\n alertText {\n description\n locale\n }\n }\n }\n ${sectionQuery}\n`;\n\nexport const incidentSaveReturn = gql`\n fragment incidentSaveReturn on ValidationErrorGraphQLOfSaveAbsenceIncidentReturnModel {\n __typename\n returnValue {\n ...saveAbsenceIncidentModel\n absenceQuestionReturnModel {\n ...incidentQuestionFields\n }\n }\n success\n validationErrors {\n errorCode\n errorDescription\n errorDescriptionLocales {\n description\n locale\n }\n }\n }\n ${saveAbsenceIncidentModel}\n ${incidentQuestionFields}\n`;\n\nexport const incidentSubmitReturn = gql`\n fragment incidentSubmitReturn on ValidationErrorGraphQLOfSubmitAbsenceIncidentReturnModel {\n __typename\n returnValue {\n ...submitAbsenceIncidentModel\n closingScripts {\n closingScriptId\n text {\n description\n locale\n }\n }\n }\n success\n validationErrors {\n errorCode\n errorDescription\n errorFields\n errorDescriptionLocales {\n description\n locale\n }\n }\n }\n ${submitAbsenceIncidentModel}\n`;\n","import { gql } from \"@apollo/client\";\nimport { getApiGraphQL } from \"./api-graphql\";\nimport {\n AbsenceConfig,\n AddNewEmployeePermission,\n EmployeeVerificationFields,\n OrganizationHierarchy,\n AbsenceIncident,\n IncidentQuestionModel,\n IncidentSaveResult,\n IncidentsCancelResult,\n IncidentSubmitResult,\n LatestInProgressAbsenceResult,\n IncidentClosingScript,\n ApiCallResult\n} from \"features/report-absence/incident\";\nimport { IAbsenceReportingService } from \"features/report-absence/absence-reporting-types\";\nimport * as fragments from \"./fragments\";\nimport {\n AbsenceConfigQuery,\n AddNewEmployeePermissionQuery,\n EmployeeVerificationFieldsQuery,\n OrganizationHierarchyQuery,\n SaveEmployeeModelInput,\n CancelAbsenceIncidentsMutation,\n ConfigQuestionsQuery,\n LatestInProgressAbsenceForEmployeeQuery,\n LoadIncidentQuery,\n SaveAbsenceMutation,\n SaveAbsenceMutationVariables,\n SubmitAbsenceMutation,\n AbsenceIncidentClosingScriptsQuery,\n AddNewEmployeeMutation,\n CancelAbsenceRequestModelInput\n} from \"graphql-types.gen\";\nimport {\n parseAbsenceIncident,\n parseClosingScripts,\n parseQuestionReturnModel,\n parseReasonOfAbsence,\n parseEmployeeVerificationFields,\n parseOrganizationHierarchy,\n toAbsenceIncidentInputModelInput,\n parseValidationErrors,\n parseWorkScheduleInfo,\n parseLoadedAbsenceIncident,\n parseLocaleModel,\n parseAR3IVRConfiguration\n} from \"features/report-absence/api-parse-helpers\";\nimport { makeTime, parseTime } from \"shared-types/time\";\nimport { locale } from \"faker/locale/ge\";\n\nexport class ApiAbsenceReportingService implements IAbsenceReportingService {\n loadIncident = async (incidentId: number): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query LoadIncident($incidentId: Long!) {\n absenceIncident(id: $incidentId) {\n ...absenceIncidentFields\n CanBeALinkedIncident {\n canBeLinked\n latestDate\n totalNoOfDaysReportedExcludingCurrent\n }\n claimStatus\n }\n }\n ${fragments.absenceIncidentFields}\n `,\n variables: {\n incidentId: incidentId\n }\n })\n .then(result => {\n if (result.data && result.data.absenceIncident) {\n resolve(parseLoadedAbsenceIncident(result.data.absenceIncident));\n } else reject(result);\n })\n .catch(error => {\n reject(error);\n });\n });\n\n saveIncident = async (\n clientCode: string,\n incident: AbsenceIncident,\n askIfCanBeLinked: boolean,\n locale: string\n ): Promise =>\n new Promise((resolve, reject) => {\n if (!incident.absenceIncidentId) {\n // need to do temporary hack with removing property for new absence\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { absenceIncidentId, ...input } = incident;\n incident = input;\n }\n\n getApiGraphQL()\n .mutate({\n mutation: gql`\n mutation SaveAbsence(\n $clientCode: String!\n $input: AbsenceIncidentInputModelInput\n $askIfCanBeLinked: Boolean!\n ) {\n saveAbsenceIncident(clientCode: $clientCode, input: $input) {\n returnValue {\n absenceIncidentModel {\n ...absenceIncidentFields\n CanBeALinkedIncident @include(if: $askIfCanBeLinked) {\n canBeLinked\n latestDate\n totalNoOfDaysReportedExcludingCurrent\n }\n }\n absenceQuestionReturnModel {\n ...incidentQuestionFields\n }\n }\n success\n validationErrors {\n errorCode\n errorDescription\n errorDescriptionLocales {\n description\n locale\n }\n }\n }\n }\n ${fragments.absenceIncidentFields}\n ${fragments.incidentQuestionFields}\n `,\n variables: {\n clientCode,\n input: toAbsenceIncidentInputModelInput(incident, locale),\n askIfCanBeLinked\n }\n })\n .then(result => {\n if (!result.errors && result.data?.saveAbsenceIncident) {\n const data = result.data.saveAbsenceIncident;\n\n if (data.success) {\n if (!data.returnValue?.absenceIncidentModel) {\n throw new Error(\n \"Failed parsing incident model after incident was saved\"\n );\n }\n\n if (!data.returnValue?.absenceQuestionReturnModel) {\n console.error(\n \"Expected absenceQuestionReturnModel not to be null\"\n );\n }\n\n const saveResult: IncidentSaveResult = {\n returnValue: {\n absenceIncidentModel: parseAbsenceIncident(\n data.returnValue?.absenceIncidentModel\n ),\n absenceQuestionReturnModel: parseQuestionReturnModel(\n data.returnValue?.absenceQuestionReturnModel ?? undefined\n )\n },\n success: true,\n validationErrors: parseValidationErrors(\n locale,\n data.validationErrors\n )\n };\n resolve(saveResult);\n } else {\n resolve({\n success: false,\n validationErrors: parseValidationErrors(\n locale,\n data.validationErrors\n )\n });\n }\n } else {\n console.error(result.errors || \"save absence failure\");\n reject(result);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n\n submitIncident = async (\n incident: AbsenceIncident,\n locale: string\n ): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .mutate({\n mutation: gql`\n mutation SubmitAbsence(\n $incidentId: Long!\n $input: AbsenceIncidentInputModelInput\n ) {\n submitAbsenceIncident(incidentId: $incidentId, input: $input) {\n ...incidentSubmitReturn\n }\n }\n ${fragments.incidentSubmitReturn}\n `,\n variables: {\n incidentId: incident.absenceIncidentId,\n input: toAbsenceIncidentInputModelInput(incident, locale)\n }\n })\n .then(async result => {\n if (result.data && result.data.submitAbsenceIncident) {\n const data = result.data.submitAbsenceIncident;\n\n if (result.data.submitAbsenceIncident?.success) {\n if (!data.returnValue?.absenceIncidentModel) {\n throw new Error(\n \"Failed parsing incident model after incident was saved\"\n );\n }\n\n const submitResult: IncidentSubmitResult = {\n returnValue: {\n absenceIncidentModel: parseAbsenceIncident(\n data.returnValue?.absenceIncidentModel\n ),\n closingScripts: []\n },\n success: data.success,\n validationErrors: parseValidationErrors(\n locale,\n data.validationErrors\n )\n };\n\n if (data.success && submitResult.returnValue) {\n const closingScripts = await this.loadClosingScript(\n incident.absenceIncidentId ?? 0\n );\n submitResult.returnValue.closingScripts = closingScripts;\n }\n\n resolve(submitResult);\n } else {\n const submitResult: IncidentSubmitResult = {\n success: false,\n validationErrors: parseValidationErrors(\n locale,\n data.validationErrors\n )\n };\n\n resolve(submitResult);\n }\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n\n loadConfig = async (clientCode: string, state: string): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query AbsenceConfig($clientCode: String!\n $state: String!\n ) {\n absenceReportingConfig(clientCode: $clientCode\n state: $state\n ) {\n reasonOfAbsence {\n answers {\n answerId\n locales {\n locale\n description\n }\n iconResource {\n sourceUrl\n }\n maxDaysAllowed\n reportableDaysInFuture\n reportableDaysInPast\n subAnswers {\n answerId\n locales {\n locale\n description\n }\n reportableDaysInFuture\n reportableDaysInPast\n }\n }\n }\n displayRTWDate_Continous\n displayRTWDate_Intermittent\n isPartialAbsences\n isRTWDateMandatory_Continous\n isRTWDateMandatory_Intermittent\n aR3ReportAbsenceButtonTextConfiguration\n {\n locale\n description\n }\n absenceDurationMinutes\n minimumThresholdForContinousAbsence\n workScheduleInfo {\n endNoOfDays\n startNoOfDays\n warnWhenOverridingSchedule\n warningMessages {\n locale\n description\n }\n }\n workShifts {\n startTimeHours\n startTimeMinutes\n endTimeHours\n endTimeMinutes\n isDefault\n order\n }\n closingScripts {\n text {\n description\n locale\n }\n }\n aR3IvrConfiguration {\n maxShiftLengthThresholdInMinutes\n }\n }\n }\n `,\n variables: {\n clientCode: clientCode, \n state: state,\n }\n })\n .then(result => {\n if (result.data && result.data.absenceReportingConfig) {\n const config: AbsenceConfig = {\n absenceDurationMinutes:\n result.data.absenceReportingConfig?.absenceDurationMinutes,\n isPartialAbsences:\n result.data.absenceReportingConfig.isPartialAbsences,\n reasonOfAbsence: parseReasonOfAbsence(\n result.data.absenceReportingConfig.reasonOfAbsence\n ),\n displayRTWDateContinuous:\n result.data.absenceReportingConfig.displayRTWDate_Continous,\n displayRTWDateIntermittent:\n result.data.absenceReportingConfig.displayRTWDate_Intermittent,\n isRTWDateMandatoryContinuous:\n result.data.absenceReportingConfig.isRTWDateMandatory_Continous,\n isRTWDateMandatoryIntermittent:\n result.data.absenceReportingConfig\n .isRTWDateMandatory_Intermittent,\n minimumThresholdForContinousAbsence:\n result.data.absenceReportingConfig\n .minimumThresholdForContinousAbsence,\n aR3ReportAbsenceButtonTextConfiguration: result.data.absenceReportingConfig.aR3ReportAbsenceButtonTextConfiguration\n ?.filter((x) => x?.description) // Filter out entries without a description\n .map((x) => \n x?.description \n ? parseLocaleModel([{ description: x.description, locale: x.locale }]) // Wrap description in the expected structure\n : []\n ),\n workScheduleInfo: parseWorkScheduleInfo(\n result.data.absenceReportingConfig.workScheduleInfo\n ),\n workShifts: result.data.absenceReportingConfig.workShifts.map(\n ws => {\n const startTime = parseTime(\n `${ws.startTimeHours}:${ws.startTimeMinutes}`,\n makeTime(9, 0, \"am\")\n );\n const endTime = parseTime(\n `${ws.endTimeHours}:${ws.endTimeMinutes}`,\n makeTime(5, 0, \"pm\")\n );\n return {\n ...ws,\n startTime,\n endTime\n };\n }\n ),\n closingScripts: result.data.absenceReportingConfig.closingScripts\n ? result.data.absenceReportingConfig.closingScripts\n .filter(cs => cs?.text)\n .map(cs => (cs?.text ? parseLocaleModel(cs?.text) : []))\n : undefined, \n aR3IvrConfiguration: parseAR3IVRConfiguration(result.data.absenceReportingConfig.aR3IvrConfiguration)\n };\n \n resolve(config);\n } else reject(result);\n })\n .catch(error => {\n reject(error);\n });\n });\n\n public loadClosingScript = async (\n incidentId: number\n ): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query absenceIncidentClosingScripts($incidentId: Long!) {\n absenceIncidentClosingScripts(incidentId: $incidentId) {\n returnValue {\n closingScriptId\n text {\n description\n locale\n }\n }\n }\n }\n `,\n variables: {\n incidentId\n }\n })\n .then(result => {\n if (\n result.data &&\n result.data.absenceIncidentClosingScripts &&\n result.data.absenceIncidentClosingScripts.returnValue\n ) {\n if (\n result.data.absenceIncidentClosingScripts.returnValue.length === 0\n ) {\n resolve([]);\n } else {\n const closingScript: IncidentClosingScript[] = parseClosingScripts(\n result.data.absenceIncidentClosingScripts.returnValue\n );\n resolve(closingScript);\n }\n } else reject(result);\n })\n .catch(error => {\n reject(error);\n });\n });\n\n loadAddingNewEmployeePermission = async (\n clientCode: string\n ): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query AddNewEmployeePermission($clientCode: String!) {\n absenceReportingConfig(clientCode: $clientCode) {\n showAddNewEmployeeLink\n }\n }\n `,\n variables: {\n clientCode\n }\n })\n .then(result => {\n if (result.data && result.data.absenceReportingConfig) {\n const permission = {\n showAddNewEmployeeLink:\n result.data.absenceReportingConfig.showAddNewEmployeeLink ||\n false\n };\n\n resolve(permission);\n } else {\n reject(result);\n }\n })\n .catch(err => {\n reject(err);\n });\n });\n\n loadEmployeeVerificationFields = async (\n clientCode: string\n ): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query EmployeeVerificationFields($clientCode: String!) {\n connect_employeeVerificationFields(\n clientCode: $clientCode\n forAddEmployee: true\n ) {\n pageId\n pageHeading {\n description\n locale\n }\n pageHeadingDescription {\n description\n locale\n }\n sections {\n sectionId\n sectionHeading {\n description\n locale\n }\n sectionHeadingDescription {\n description\n locale\n }\n questions {\n alerts {\n alertId\n alertText {\n description\n locale\n }\n }\n config {\n allowDecimals\n changeMonth\n changeYear\n linkedField\n maxDate\n maxLength\n uRL\n }\n defaultValue\n isReadOnly\n isVisible\n label {\n description\n locale\n }\n longDescription {\n description\n locale\n }\n name\n options {\n text {\n description\n locale\n }\n value\n metadata {\n key\n value\n }\n }\n order\n placeholder {\n description\n locale\n }\n questionSubType\n questionType\n reloadIncidentData\n resolvedValue\n source\n validationConstraint {\n compare {\n fieldToCompare\n operator\n valueToCompare\n }\n digits\n max\n min\n number\n required\n }\n visibilityConditions {\n id\n operator\n values\n }\n }\n }\n }\n }\n `,\n variables: {\n clientCode\n }\n })\n .then(result => {\n if (result.data && result.data.connect_employeeVerificationFields) {\n resolve(\n parseEmployeeVerificationFields(\n result.data.connect_employeeVerificationFields\n )\n );\n } else {\n resolve([]);\n }\n })\n .catch(error => reject(error));\n });\n\n loadOrganizationHierarchy = async (\n clientCode: string\n ): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query OrganizationHierarchy($clientCode: String!) {\n organizationHierarchy(clientCode: $clientCode) {\n organizationId\n organizationLevel\n organizationName\n childOrganizations {\n organizationId\n organizationLevel\n organizationName\n }\n }\n }\n `,\n variables: {\n clientCode\n }\n })\n .then(result => {\n if (result.data && result.data.organizationHierarchy) {\n resolve(\n parseOrganizationHierarchy(result?.data?.organizationHierarchy)\n );\n } else {\n resolve([]);\n }\n })\n .catch(error => reject(error));\n });\n\n addNewEmployee = async (\n clientCode: string,\n input: SaveEmployeeModelInput\n ): Promise =>\n new Promise< ApiCallResult>((resolve, reject) => {\n getApiGraphQL()\n .mutate({\n mutation: gql`\n mutation AddNewEmployee(\n $clientCode: String\n $input: SaveEmployeeModelInput\n ) {\n addEmployee(clientCode: $clientCode, input: $input) {\n success\n validationErrors {\n errorCode\n errorDescription\n errorFields\n errorDescriptionLocales {\n description\n locale\n }\n }\n }\n }\n `,\n variables: {\n clientCode,\n input\n }\n })\n .then(result => {\n const data = result.data?.addEmployee;\n const cancelResults: ApiCallResult = {\n success: data?.success ?? false,\n validationErrors: parseValidationErrors(\n locale,\n data?.validationErrors\n )\n };\n resolve(cancelResults);\n })\n .catch(error => {\n reject(error);\n });\n });\n\n loadConfigQuestions = async (\n incidentId: number\n ): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query ConfigQuestions($incidentId: Long!) {\n absenceQuestions(incidentId: $incidentId) {\n ...incidentQuestionFields\n }\n }\n ${fragments.incidentQuestionFields}\n `,\n variables: {\n incidentId: incidentId\n }\n })\n .then(result => {\n if (result.data && result.data.absenceQuestions) {\n const parsedModel = parseQuestionReturnModel(\n result.data.absenceQuestions\n );\n\n resolve(parsedModel);\n } else reject(result);\n })\n .catch(error => {\n reject(error);\n });\n });\n\n cancelIncidents = async (\n cancelRequest: CancelAbsenceRequestModelInput,\n incidentIds: number[],\n locale: string\n ): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .mutate({\n mutation: gql`\n mutation CancelAbsenceIncidents(\n $cancelRequest: CancelAbsenceRequestModelInput\n $incidentIds: [Long!]!\n ) {\n cancelAbsenceIncidents(\n cancelRequest: $cancelRequest\n incidentIds: $incidentIds\n ) {\n success\n validationErrors {\n errorCode\n errorDescription\n errorFields\n errorDescriptionLocales {\n description\n locale\n }\n }\n }\n }\n `,\n variables: {\n cancelRequest,\n incidentIds\n }\n })\n .then(result => {\n const data = result.data?.cancelAbsenceIncidents;\n const cancelResult: IncidentsCancelResult = {\n success: data?.success ?? false,\n validationErrors: parseValidationErrors(\n locale,\n data?.validationErrors\n )\n };\n resolve(cancelResult);\n })\n .catch(error => {\n reject(error);\n });\n });\n\n getLatestInProgressAbsence = async (\n employeeNumber?: string,\n clientCode?: string\n ): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query(\n !!employeeNumber\n ? {\n query: gql`\n query LatestInProgressAbsenceForEmployee(\n $employeeNumber: String!\n $clientCode: String!\n ) {\n inProgressAbsences(\n first: 1\n order_by: { requestDate: DESC }\n employeeNumber: $employeeNumber\n clientCode: $clientCode\n ) {\n nodes {\n absenceIncidentId\n }\n }\n }\n `,\n variables: { employeeNumber, clientCode }\n }\n : {\n query: gql`\n query LatestInProgressAbsence {\n inProgressAbsences(\n first: 1\n order_by: { requestDate: DESC }\n ) {\n nodes {\n absenceIncidentId\n }\n }\n }\n `\n }\n )\n .then(result => {\n resolve(\n result.data.inProgressAbsences?.nodes &&\n result.data.inProgressAbsences?.nodes[0]\n ? {\n absenceIncidentId:\n result.data.inProgressAbsences?.nodes[0]?.absenceIncidentId\n }\n : null\n );\n })\n .catch(error => {\n reject(error);\n });\n });\n}\n","import {\n ApiCallResult,\n AbsenceIncident,\n AddNewEmployeePermission,\n EmployeeVerificationFields,\n OrganizationHierarchy,\n IncidentSaveResult,\n IncidentSubmitResult,\n AbsenceConfig,\n IncidentQuestionModel,\n emptyIncident,\n mapIncidentTypes,\n AbsenceIncidentLinkability,\n IncidentsCancelResult,\n LatestInProgressAbsenceResult,\n IncidentClosingScript\n} from \"features/report-absence/incident\";\nimport { parseTime, Time } from \"shared-types/time\";\nimport { IAbsenceReportingService } from \"./absence-reporting-types\";\nimport { delay } from \"utils/util\";\nimport { ConfigAbsenceQuestion } from \"./absence-questions\";\nimport { formatISO, subBusinessDays } from \"date-fns\";\nimport {\n CancelAbsenceRequestModelInput,\n SaveEmployeeModelInput\n} from \"graphql-types.gen\";\n\n// Make sure this is 0 when running tests. Otherwise if the test has frozen the clock,\n// it will need to manually advance time in order for the delay to complete\nconst DELAY_MS = 0;\n\nexport class MockAbsenceReportingService implements IAbsenceReportingService {\n incidentCanBeLinked = true;\n countSaveIncident = 0;\n countAskIfCanBeLinked = 0;\n\n private static _instance: MockAbsenceReportingService;\n static singletonInstance(reset = false) {\n if (!this._instance || reset) {\n this._instance = new MockAbsenceReportingService();\n }\n return this._instance;\n }\n\n async loadConfig(clientCode: string, state: string): Promise {\n await delay(DELAY_MS);\n return absenceConfig;\n }\n\n async loadAddingNewEmployeePermission(\n clientCode: string\n ): Promise {\n await delay(DELAY_MS);\n return { showAddNewEmployeeLink: true };\n }\n\n async loadEmployeeVerificationFields(\n clientCode: string\n ): Promise {\n await delay(DELAY_MS);\n return [];\n }\n\n async loadOrganizationHierarchy(\n clientCode: string\n ): Promise {\n await delay(DELAY_MS);\n return [];\n }\n\n async addNewEmployee(\n clientCode: string,\n input: SaveEmployeeModelInput\n ): Promise {\n await delay(DELAY_MS);\n return { success: true, validationErrors:[]};\n }\n\n async loadIncident(incidentId: number): Promise {\n await delay(DELAY_MS);\n const incident = this.getIncidentFromStore();\n if (incident) {\n incident.absenceIncidentId = incidentId;\n mapIncidentTypes(incident);\n }\n return incident;\n }\n\n async saveIncident(\n clientCode: string,\n incident: AbsenceIncident,\n askIfCanBeLinked: boolean\n ): Promise {\n this.countSaveIncident++;\n\n await delay(DELAY_MS);\n\n if (askIfCanBeLinked) {\n this.countAskIfCanBeLinked++;\n }\n\n const savedIncident = { ...incident };\n if (!savedIncident.absenceIncidentId) {\n const i = this.getIncidentFromStore();\n savedIncident.absenceIncidentId = i?.absenceIncidentId\n ? i.absenceIncidentId + 1\n : 1;\n }\n localStorage.setItem(\"test-incident\", JSON.stringify(savedIncident));\n\n const linkability: AbsenceIncidentLinkability =\n this.incidentCanBeLinked &&\n incident.primaryReason === \"af22da76-a6ae-4357-8e55-1f08de51bd11\" // Personal emergency\n ? {\n canBeLinked: this.incidentCanBeLinked,\n latestDate: subBusinessDays(new Date(Date.now()), 2)\n }\n : { canBeLinked: false };\n\n return {\n returnValue: {\n absenceIncidentModel: {\n ...savedIncident,\n linkability: askIfCanBeLinked\n ? linkability\n : { canBeLinked: undefined }\n },\n absenceQuestionReturnModel: configQuestions\n },\n success: true,\n validationErrors: []\n };\n }\n\n async submitIncident(\n incident: AbsenceIncident\n ): Promise {\n await delay(DELAY_MS);\n return {\n returnValue: {\n absenceIncidentModel: this.getIncidentFromStore() || emptyIncident(),\n closingScripts: [\n {\n closingScriptId: \"Main\",\n text: [\n {\n description:\n \"

Your absence report has been submitted, and a confirmation e-mail has been sent to you at placeholder@google.com.

\",\n locale: \"EN\"\n },\n {\n description:\n \"

FR - Your absence report has been submitted, and a confirmation e-mail has been sent to you at placeholder@google.com.

\",\n locale: \"FR\"\n }\n ]\n }\n ]\n },\n success: true,\n validationErrors: []\n };\n }\n\n async loadConfigQuestions(\n incidentId: number\n ): Promise {\n await delay(DELAY_MS);\n return configQuestions;\n }\n\n async cancelIncidents(\n cancelReason: CancelAbsenceRequestModelInput,\n incidentIds: number[]\n ): Promise {\n await delay(DELAY_MS);\n return { success: true };\n }\n\n async getLatestInProgressAbsence(\n employeeNumber?: string\n ): Promise {\n await delay(DELAY_MS);\n\n const id = sessionStorage.getItem(\"test-incident-in-progress\");\n if (!!id) {\n return { absenceIncidentId: +id };\n }\n\n return null;\n }\n\n async loadClosingScript(\n incidentId: number\n ): Promise {\n await delay(DELAY_MS);\n return [];\n }\n\n private getIncidentFromStore = (): AbsenceIncident | null => {\n const i = localStorage.getItem(\"test-incident\");\n const incident = i ? JSON.parse(i) : null;\n return incident;\n };\n}\n\nconst defaults: Time = { hour: 9, minute: 0, period: \"am\" };\nexport const absenceConfig: AbsenceConfig = {\n reasonOfAbsence: {\n answers: [\n {\n answerId: \"af22da76-a6ae-4357-8e55-1f08de51bd11\",\n maxDaysAllowed: null,\n reportableDaysInFuture: 20,\n reportableDaysInPast: 20,\n locales: [\n {\n description: \"Personal Emergency\",\n locale: \"EN\"\n },\n {\n description: \"Urgence personnelle\",\n locale: \"FR\"\n }\n ],\n subAnswers: []\n },\n {\n answerId: \"67abb32e-8142-48d8-859f-6b7f609e8132\",\n maxDaysAllowed: 5,\n reportableDaysInFuture: null,\n reportableDaysInPast: null,\n locales: [\n {\n description: \"Personal day off\",\n locale: \"EN\"\n },\n {\n description: \"Personal day off (FR)\",\n locale: \"FR\"\n }\n ],\n subAnswers: [\n {\n answerId: \"e85448bd-c953-463d-8ccc-21605b7531fc\",\n reportableDaysInFuture: null,\n reportableDaysInPast: null,\n locales: [\n {\n description: \"Vacation\",\n locale: \"EN\"\n },\n {\n description: \"Vacation (FR)\",\n locale: \"FR\"\n }\n ]\n },\n {\n answerId: \"ab2c675d-96e3-42e6-955b-ec7f3da32425\",\n reportableDaysInFuture: 4,\n reportableDaysInPast: 4,\n locales: [\n {\n description: \"Personal Emergency\",\n locale: \"EN\"\n },\n {\n description: \"Personal Emergency (FR)\",\n locale: \"FR\"\n }\n ]\n }\n ]\n },\n {\n answerId: \"06b1f618-b520-46c7-b3e0-7d2123aa96e7\",\n maxDaysAllowed: 3,\n reportableDaysInFuture: null,\n reportableDaysInPast: null,\n locales: [\n {\n description: \"Bereavement\",\n locale: \"EN\"\n },\n {\n description: \"Deuil\",\n locale: \"FR\"\n }\n ],\n subAnswers: []\n },\n {\n answerId: \"649c3758-1e73-459d-b742-9132e66494e3\",\n maxDaysAllowed: 3,\n reportableDaysInFuture: null,\n reportableDaysInPast: null,\n locales: [\n {\n description: \"Planned Leaves including Vacation\",\n locale: \"EN\"\n },\n {\n description: \"Autres congés\",\n locale: \"FR\"\n }\n ],\n subAnswers: []\n },\n {\n answerId: \"8bf3d326-4d64-4e90-8b5a-b5ecb1b4074a\",\n maxDaysAllowed: 5,\n reportableDaysInFuture: null,\n reportableDaysInPast: null,\n locales: [\n {\n description: \"Work Related Illness or Injury\",\n locale: \"EN\"\n },\n {\n description: \"Blessure ou maladie liée au travail\",\n locale: \"FR\"\n }\n ],\n subAnswers: []\n },\n {\n answerId: \"1f192c55-ed75-47c2-a6a5-e5f83b7c1422\",\n maxDaysAllowed: 5,\n reportableDaysInFuture: null,\n reportableDaysInPast: null,\n locales: [\n {\n description: \"Personal Illness, Injury, or Surgery\",\n locale: \"EN\"\n },\n {\n description: \"Maladie, blessure ou chirurgie personnelle\",\n locale: \"FR\"\n }\n ],\n subAnswers: [\n {\n answerId: \"20bfb435-f06a-434b-b1a5-60a8cd3b441a\",\n reportableDaysInFuture: 1,\n reportableDaysInPast: 1,\n locales: [\n {\n description: \"test2\",\n locale: \"EN\"\n },\n {\n description: \"test2Fr\",\n locale: \"FR\"\n }\n ]\n },\n {\n answerId: \"d154c3c2-883e-44ed-8a93-c7ca1ca49d11\",\n reportableDaysInFuture: 1,\n reportableDaysInPast: 1,\n locales: [\n {\n description: \"test1\",\n locale: \"EN\"\n },\n {\n description: \"test1Fr\",\n locale: \"FR\"\n }\n ]\n }\n ]\n }\n ]\n },\n isPartialAbsences: true,\n displayRTWDateContinuous: true,\n displayRTWDateIntermittent: true,\n isRTWDateMandatoryContinuous: true,\n isRTWDateMandatoryIntermittent: true,\n absenceDurationMinutes: 15,\n linkedIncidentsLookbackThresholdDays: 7,\n workScheduleInfo: {\n scheduleOverrideWarning: true,\n warningMessages: [\n {\n description: \"Selected times are outside of listed work schedules.\",\n locale: \"EN\"\n },\n {\n description:\n \"FRENCH: Selected times are outside of listed work schedules.\",\n locale: \"FR\"\n }\n ]\n },\n workShifts: [\n {\n startTime: parseTime(\"16:00:00\", defaults),\n endTime: parseTime(\"00:00:00\", defaults),\n isDefault: false,\n order: 2\n },\n {\n startTime: parseTime(\"09:00:00\", defaults),\n endTime: parseTime(\"17:00:00\", defaults),\n isDefault: true,\n order: 1\n },\n {\n startTime: parseTime(\"00:00:00\", defaults),\n endTime: parseTime(\"08:00:00\", defaults),\n isDefault: false,\n order: 3\n },\n {\n startTime: parseTime(\"08:00:00\", defaults),\n endTime: parseTime(\"16:00:00\", defaults),\n isDefault: false,\n order: 1\n }\n ]\n};\n\nexport const configQuestions: IncidentQuestionModel = {\n questions: [\n {\n pageHeading: undefined,\n pageHeadingDescription: undefined,\n pageId: \"1\",\n sections: [\n {\n sectionHeading: undefined,\n sectionHeadingDescription: undefined,\n sectionId: \"1\",\n questions: [\n getMockSingleLineQuestion(false),\n getMockSingleLineQuestion(true),\n getMockMultilineQuestionConfig(false),\n getMockSelectQuestionConfig(false),\n getMockDateQuestionConfig(false),\n getMockBooleanQuestionConfig(),\n getMockNumericQuestionConfig(false),\n getMockPhoneNumberQuestionConfig(),\n getMockEmailQuestionConfig()\n ]\n }\n ]\n }\n ],\n preQualifyingQuestions: [],\n reasonOfAbsenceAlerts: [\n {\n alertId: \"alert-reason-1\",\n alertText: [\n {\n description: \"Absence Alert\",\n locale: \"EN\"\n },\n {\n description: \"FR - Absence Alert\",\n locale: \"FR\"\n }\n ]\n }\n ]\n};\n\nexport function getMockMultilineQuestionConfig(\n hasDefaultValue: boolean\n): ConfigAbsenceQuestion {\n return {\n name: \"multi-line-question\",\n questionType: \"textArea\",\n label: [\n {\n description: \"Multi Line Question\",\n locale: \"EN\"\n },\n {\n description: \"FR-Multi Line Question\",\n locale: \"FR\"\n }\n ],\n longDescription: [\n {\n description: \"Multi Line Question Description\",\n locale: \"EN\"\n },\n {\n description: \"FR-Multi Line Question Description\",\n locale: \"FR\"\n }\n ],\n placeholder: [\n {\n description: \"Multi Line Placeholder\",\n locale: \"EN\"\n },\n {\n description: \"FR-Multi Line Placeholder\",\n locale: \"FR\"\n }\n ],\n defaultValue: hasDefaultValue ? \"default value\" : undefined,\n source: \"CompanySpecific\",\n isVisible: true,\n isReadOnly: false,\n validationConstraint: {\n required: true,\n max: 50\n },\n alerts: [\n {\n alertId: \"alert-1\",\n alertText: [\n {\n description: \"Question Alert\",\n locale: \"EN\"\n },\n {\n description: \"FR - Question Alert\",\n locale: \"FR\"\n }\n ]\n }\n ]\n };\n}\n\nexport function getMockSelectQuestionConfig(\n hasDefaultValue: boolean\n): ConfigAbsenceQuestion {\n return {\n name: \"select-question\",\n label: [\n {\n description: \"Select Question\",\n locale: \"EN\"\n },\n {\n description: \"FR-Select Question\",\n locale: \"FR\"\n }\n ],\n questionType: \"dropdown\",\n source: \"CompanySpecific\",\n options: [\n {\n value: \"option1\",\n text: [\n {\n description: \"EN-Option 1\",\n locale: \"EN\"\n },\n {\n description: \"FR-Option 1\",\n locale: \"FR\"\n }\n ]\n },\n {\n value: \"option2\",\n text: [\n {\n description: \"EN-Option 2\",\n locale: \"EN\"\n },\n {\n description: \"FR-Option 2\",\n locale: \"FR\"\n }\n ]\n },\n {\n value: \"option3\",\n text: [\n {\n description: \"EN-Option 3\",\n locale: \"EN\"\n },\n {\n description: \"FR-Option 3\",\n locale: \"FR\"\n }\n ]\n },\n {\n value: \"option4\",\n text: [\n {\n description: \"EN-Option 4\",\n locale: \"EN\"\n },\n {\n description: \"FR-Option 4\",\n locale: \"FR\"\n }\n ]\n },\n {\n value: \"option5\",\n text: [\n {\n description: \"EN-Option 5\",\n locale: \"EN\"\n },\n {\n description: \"FR-Option 5\",\n locale: \"FR\"\n }\n ]\n }\n ],\n defaultValue: hasDefaultValue ? \"option3\" : undefined,\n isVisible: true,\n isReadOnly: false,\n validationConstraint: {\n required: true,\n max: 50\n }\n };\n}\n\nexport function getMockBooleanQuestionConfig(\n defaultValue?: boolean\n): ConfigAbsenceQuestion {\n return {\n name: \"boolean-question\",\n questionType: \"boolean\",\n label: [\n {\n description: \"Do you want to apply for STD Referral?\",\n locale: \"EN\"\n },\n {\n description: \"FR - Do you want to apply for STD Referral?\",\n locale: \"FR\"\n }\n ],\n defaultValue:\n defaultValue !== undefined ? defaultValue.toString() : undefined,\n isReadOnly: false,\n isVisible: true,\n source: \"COMPANY_SPECIFIC\",\n validationConstraint: {\n required: true\n }\n };\n}\n\nexport function getMockPhoneNumberQuestionConfig(): ConfigAbsenceQuestion {\n return {\n name: \"phone-question\",\n questionType: \"phone\",\n label: [\n {\n description: \"Please enter your phone number.\",\n locale: \"EN\"\n },\n {\n description: \"FR - Please enter your phone number.\",\n locale: \"FR\"\n }\n ],\n isReadOnly: false,\n isVisible: true,\n source: \"COMPANY_SPECIFIC\",\n validationConstraint: {\n required: true\n }\n };\n}\n\nexport function getMockEmailQuestionConfig(): ConfigAbsenceQuestion {\n return {\n name: \"email-question\",\n questionType: \"email\",\n label: [\n {\n description: \"Please enter your email.\",\n locale: \"EN\"\n },\n {\n description: \"FR - Please enter your email.\",\n locale: \"FR\"\n }\n ],\n isReadOnly: false,\n isVisible: true,\n source: \"COMPANY_SPECIFIC\",\n validationConstraint: {\n required: true\n }\n };\n}\n\nexport function getMockDateQuestionConfig(\n hasDefaultValue: boolean\n): ConfigAbsenceQuestion {\n return {\n name: \"date-question\",\n questionType: \"date\",\n label: [\n {\n description: \"Date Question\",\n locale: \"EN\"\n },\n {\n description: \"FR-Date Question\",\n locale: \"FR\"\n }\n ],\n longDescription: [\n {\n description: \"Date Question Description\",\n locale: \"EN\"\n },\n {\n description: \"FR-Date Question Description\",\n locale: \"FR\"\n }\n ],\n placeholder: [\n {\n description: \"Date Placeholder\",\n locale: \"EN\"\n },\n {\n description: \"FR-Date Placeholder\",\n locale: \"FR\"\n }\n ],\n defaultValue: hasDefaultValue ? formatISO(new Date()) : undefined,\n source: \"CompanySpecific\",\n isVisible: true,\n isReadOnly: false,\n validationConstraint: {\n required: true\n }\n };\n}\n\nexport function getMockNumericQuestionConfig(\n hasDefaultValue: boolean\n): ConfigAbsenceQuestion {\n return {\n name: \"numeric-question\",\n questionType: \"numeric\",\n label: [\n {\n description: \"Numeric Question (1-500)\",\n locale: \"EN\"\n },\n {\n description: \"FR - Numeric Question\",\n locale: \"FR\"\n }\n ],\n defaultValue: hasDefaultValue ? \"42\" : undefined,\n isReadOnly: false,\n isVisible: true,\n source: \"COMPANY_SPECIFIC\",\n validationConstraint: {\n required: true,\n min: 1,\n max: 500\n }\n };\n}\n\nexport function getMockSingleLineQuestion(\n hasDefaultValue: boolean\n): ConfigAbsenceQuestion {\n return {\n name: hasDefaultValue\n ? \"single-line-default-question\"\n : \"single-line-question\",\n questionType: \"text\",\n label: [\n {\n description: \"Single Line Question 2\",\n locale: \"EN\"\n },\n {\n description: \"FR-Single Line Question 2\",\n locale: \"FR\"\n }\n ],\n longDescription: [\n {\n description: \"Single Line Question Description 2\",\n locale: \"EN\"\n },\n {\n description: \"FR-Single Line Question Description 2 \",\n locale: \"FR\"\n }\n ],\n placeholder: [\n {\n description: \"Placeholder 2\",\n locale: \"EN\"\n },\n {\n description: \"FR-Placeholder 2\",\n locale: \"FR\"\n }\n ],\n defaultValue: hasDefaultValue ? \"default value\" : undefined,\n source: \"CompanySpecific\",\n isVisible: true,\n isReadOnly: false\n };\n}\n","import { AppContext } from \"context/app-context\";\nimport { ApiAbsenceReportingService } from \"../../api/api-absence-reporting\";\nimport { MockAbsenceReportingService } from \"./absence-reporting-service-mock\";\nimport { IAbsenceReportingService } from \"./absence-reporting-types\";\n\nexport const getAbsenceReportingService = (): IAbsenceReportingService => {\n if (AppContext.isSandbox()) {\n return MockAbsenceReportingService.singletonInstance();\n }\n return new ApiAbsenceReportingService();\n};\n","export const URL_CONFIG = {\n authServerURL: process.env.REACT_APP_ABILITI_API_AUTH_URL,\n react_app_redirect_url: window.location.origin,\n client_id: process.env.REACT_APP_ABILITI_API_AUTH_CLIENT_ID\n};\n\nexport const IDENTITY_CONFIG = {\n authority: URL_CONFIG.authServerURL, //(string): The URL of the OIDC provider.\n client_id: URL_CONFIG.client_id, //THIS WILL BE SET IN WEB CONFIRUATION PROVIDER //(string): Your client application's identifier as registered with the OIDC provider.\n redirect_uri: URL_CONFIG.react_app_redirect_url + \"/signin-oidc\", //The URI of your client application to receive a response from the OIDC provider.\n //login: URL_CONFIG.authServerURL + \"/login\",\n silentRequestTimeout: 100000,\n automaticSilentRenew: true, //(boolean, default: false): Flag to indicate if there should be an automatic attempt to renew the access token prior to its expiration.\n loadUserInfo: true, //(boolean, default: true): Flag to control if additional identity data is loaded from the user info endpoint in order to populate the user's profile.\n silent_redirect_uri: URL_CONFIG.react_app_redirect_url + \"/silentrenew\", //(string): The URL for the page containing the code handling the silent renew.\n post_logout_redirect_uri: window.location.origin, // (string): The OIDC post-logout redirect URI.\n //audience: \"https://example.com\", //is there a way to specific the audience when making the jwt\n response_type: \"code\", //(string, default: 'id_token'): The type of response desired from the OIDC provider.\n //grantType: \"password\",\n scope: \"openid profile connect config offline_access\", //(string, default: 'openid'): The scope being requested from the OIDC provider.\n webAuthResponseType: \"id_token access_token\",\n revokeAccessTokenOnSignout: true\n};\n\nexport const METADATA_OIDC = {\n issuer: URL_CONFIG.authServerURL,\n jwks_uri: URL_CONFIG.authServerURL + \"/.well-known/openid-configuration/jwks\",\n authorization_endpoint: URL_CONFIG.authServerURL + \"/connect/authorize\",\n token_endpoint: URL_CONFIG.authServerURL + \"/connect/token\",\n userinfo_endpoint: URL_CONFIG.authServerURL + \"/connect/userinfo\",\n end_session_endpoint: URL_CONFIG.authServerURL + \"/connect/endsession\",\n check_session_iframe: URL_CONFIG.authServerURL + \"/connect/checksession\"\n //revocation_endpoint: URL_CONFIG.authServerURL + \"/connect/revocation\",\n //introspection_endpoint: URL_CONFIG.authServerURL + \"/connect/introspect\",\n};\n\nexport const SIGNIN_PARAMS = {\n language: \"signinLanguage\",\n clientCode: \"signinClientCode\"\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"icon\":\"user-widget_icon__gv-FT\",\"icon-light\":\"user-widget_icon-light__2BrHK\",\"icon-dark\":\"user-widget_icon-dark__3pZFM\",\"user-widget\":\"user-widget_user-widget__3H-hG\",\"user-lang\":\"user-widget_user-lang__gFLyH\",\"user-image\":\"user-widget_user-image__xL72e\",\"user-image-bg-dark\":\"user-widget_user-image-bg-dark__2ozOl\",\"user-image-bg-light\":\"user-widget_user-image-bg-light__2FX1-\",\"user-name\":\"user-widget_user-name__1Ds_K\",\"user-role\":\"user-widget_user-role__18BBX\",\"user-widget--light\":\"user-widget_user-widget--light__1j_kV\",\"user-widget--dark\":\"user-widget_user-widget--dark__3xvhV\"};","// IE11 detection from https://stackoverflow.com/a/49328524\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nexport const isIE = /*@cc_on!@*/ false || !!document.documentMode;\n\nexport function hasValue(value: T): value is NonNullable {\n return value !== undefined && value !== null;\n}\n\nexport async function delay(ms: number) {\n return new Promise(resolve => {\n if (ms === 0) {\n resolve(0);\n } else {\n setTimeout(resolve, ms);\n }\n });\n}\n\nexport const createShortcut = (text: string) => {\n if (!text) return \"\";\n return text\n .replace(/[&]/gi, \"-and-\")\n .replace(/[^a-z0-9]+/gi, \"-\")\n .replace(/^-*|-*$/g, \"\")\n .toLowerCase();\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"date-container\":\"absence-claim_date-container__2-aBA\",\"absence-period\":\"absence-claim_absence-period__1SbJf\",\"rtw-date\":\"absence-claim_rtw-date__2O7Ze\",\"items-not-shown\":\"absence-claim_items-not-shown__uZyKD\",\"fml-associated-case-id\":\"absence-claim_fml-associated-case-id__3mxYq\",\"icon\":\"absence-claim_icon__3jVaP\",\"link-cases\":\"absence-claim_link-cases__3MxKg\",\"arrow\":\"absence-claim_arrow__Jqi6t\",\"all-dates__button\":\"absence-claim_all-dates__button__3Z6YE\",\"footer-wrapper\":\"absence-claim_footer-wrapper__3H4Bd\"};","import { QuestionAnswer, ValidationResult } from \"../absence-reporting-types\";\nimport {\n AbsenceIncident,\n AbsenceReasonAnswerInfo,\n AbsenceShift\n} from \"../incident\";\nimport { isBefore, isSameDay, parseISO, isValid, parse } from \"date-fns\";\nimport { first, orderBy } from \"lodash-es\";\nimport { ClientTranslationProps } from \"i18n\";\nimport { formatWithLocale } from \"hooks/format\";\n\nexport const validateName = (name: string) => {\n const regName = /^[ a-zA-Z\\-']+$/;\n\n return regName.test(name);\n};\n\nexport function validateRTWAnswer(\n answer: QuestionAnswer,\n absenceDates: AbsenceShift[],\n isMandatory: boolean\n): ValidationResult {\n if (answer.type === \"rtw\") {\n const lastAbsenceDate = first(\n orderBy(absenceDates, \"shiftStartTime\", \"desc\")\n );\n\n const determineDateValidity = (rtwDate: Date): boolean => {\n if (lastAbsenceDate) {\n return lastAbsenceDate.isPartialAbsence\n ? isSameDay(lastAbsenceDate.shiftStartTime, rtwDate) ||\n isBefore(lastAbsenceDate.shiftStartTime, rtwDate)\n : isBefore(lastAbsenceDate.shiftStartTime, rtwDate);\n }\n return true;\n };\n\n return isMandatory\n ? {\n isValid:\n !!answer.value &&\n !!answer.value.returnToWorkDate &&\n determineDateValidity(answer.value.returnToWorkDate)\n }\n : {\n isValid:\n answer.value === undefined ||\n answer.value.returnToWorkDate === undefined ||\n determineDateValidity(answer.value.returnToWorkDate)\n };\n }\n return { isValid: true };\n}\n\nexport function validatePhoneNumber(phoneNumber: string): boolean {\n return phoneNumber.replace(/[^0-9]/g, \"\").length === 10;\n}\n\nexport function formatPhoneNumber(completeTenDigits: string): string {\n return (\n \"(\" +\n completeTenDigits.substr(0, 3) +\n \") \" +\n completeTenDigits.substr(3, 3) +\n \"-\" +\n completeTenDigits.substr(6, 4)\n );\n}\n\nexport function validateEmail(email: string): boolean {\n const pattern = new RegExp(\n // eslint-disable-next-line no-useless-escape\n /^([a-zA-Z0-9_\\-\\.\\+]+)@(([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$/\n );\n return pattern.test(email);\n}\n\nexport function continuationQuestionDescription(\n absenceReasons: AbsenceReasonAnswerInfo[],\n incident: Pick<\n AbsenceIncident,\n \"primaryReason\" | \"secondaryReason\" | \"linkability\"\n >,\n locale: Locale\n): ClientTranslationProps | undefined {\n const primaryReasonData = absenceReasons.find(\n a => a.answerId === incident.primaryReason\n );\n const primaryReasonText = primaryReasonData?.locales;\n const secondaryReasonText =\n incident.secondaryReason &&\n primaryReasonData?.subAnswers?.find(\n secondary => secondary.answerId === incident.secondaryReason\n )?.locales;\n\n const date =\n incident.linkability.canBeLinked && incident.linkability.latestDate;\n const dateText = date && formatWithLocale(date, \"MMMM d, yyyy\", locale);\n\n if (primaryReasonText && secondaryReasonText && dateText) {\n return {\n tag: \"reportAbsence.continuation.description2\",\n vars: {\n primaryReason: primaryReasonText,\n secondaryReason: secondaryReasonText,\n date: dateText\n }\n };\n } else if (primaryReasonText && dateText) {\n return {\n tag: \"reportAbsence.continuation.description1\",\n vars: {\n primaryReason: primaryReasonText,\n date: dateText\n }\n };\n } else {\n return undefined;\n }\n}\n\nexport function formatDateTimeAnswer(answer: string, locale: Locale): string {\n const parsedISO = parseISO(answer);\n if (isValid(parsedISO)) {\n return formatWithLocale(parsedISO, \"MMM d, yyyy\", locale);\n }\n const parsedDate = parse(answer, \"M/d/yyyy hh:mm:ssa\", new Date());\n if (isValid(parsedDate)) {\n return formatWithLocale(parsedDate, \"MMM d, yyyy\", locale);\n }\n return \"\";\n}\n","import React, { useState } from \"react\";\nimport ReactModal from \"react-modal\";\nimport CloseButton from \"components/buttons/close-button/close-button\";\nimport styles from \"./base-modal.module.scss\";\nimport clsx from \"clsx\";\n\ntype Props = {\n isOpen: boolean;\n title: string;\n customStyles?: ReactModal.Styles;\n titleRowClass?: string;\n titleClass?: string;\n buttonClass?: string;\n testId?: string;\n className?: string;\n closeModal: () => void;\n onAfterOpen?: () => void;\n onAfterClose?: () => void;\n};\n\nexport const modalStyle: ReactModal.Styles = {\n overlay: {\n zIndex: 20,\n backgroundColor: \"rgba(0, 0, 0, 0.7)\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n placeContent: \"center\"\n },\n content: {\n position: \"static\",\n border: \"none\",\n borderRadius: \"8px\",\n boxShadow: \"0 0 8px rgba(0, 0, 0, 0.24)\",\n margin: \"auto 24px\",\n padding: \"20px 24px 24px 24px\",\n maxWidth: \"632px\",\n inset: \"unset\"\n }\n};\n\nexport const BaseModal: React.FC = props => {\n const [overflowValue, setOverflowValue] = useState(\"\");\n\n const onAfterOpen = () => {\n setOverflowValue(document.body.style.overflow);\n\n // Prevent scrolling on content behind modal\n document.body.style.overflow = \"hidden\";\n props.onAfterOpen && props.onAfterOpen();\n };\n\n const onAfterClose = () => {\n // Remove scrolling restriction\n document.body.style.overflow = overflowValue;\n props.onAfterClose && props.onAfterClose();\n\n setOverflowValue(\"\");\n };\n\n return (\n \n
\n

\n {props.title}\n

\n \n
\n\n {props.children}\n \n );\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"label\":\"styles_label__3xQnT\",\"value\":\"styles_value__3ZJka\",\"separator\":\"styles_separator__2xs1-\",\"summary-label-container\":\"styles_summary-label-container__1j3G9\",\"warning-text-date\":\"styles_warning-text-date__qH6ii\",\"absence-duration\":\"styles_absence-duration__2b8C7\",\"absence-time\":\"styles_absence-time__wG_I4\",\"unpaid-absence-time\":\"styles_unpaid-absence-time__2xz5i\",\"time-icon\":\"styles_time-icon__3NUcJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"heading\":\"recent-activity_heading__9FNKF\",\"carousel\":\"recent-activity_carousel__CGA7D\",\"horse\":\"recent-activity_horse__2jXnm\",\"card\":\"recent-activity_card__3MZvZ\",\"indicator\":\"recent-activity_indicator__3PxJz\",\"dot-wrapper\":\"recent-activity_dot-wrapper__3553M\",\"dot-wrapper--clickable\":\"recent-activity_dot-wrapper--clickable__1OqeM\",\"dot\":\"recent-activity_dot__3Obdi\",\"dot--active\":\"recent-activity_dot--active__2Juix\"};","import { isTimeAfter, TimeInterval } from \"shared-types/time\";\nimport { addDays, Locale, parseISO } from \"date-fns\";\nimport { every, orderBy, some } from \"lodash-es\";\nimport { AbsenceType } from \"features/report-absence/incident\";\nimport { ClientTranslationProps } from \"i18n\";\nimport { ClaimSummary } from \"features/claims/claims-model\";\nimport { formatWithLocale } from \"hooks/format\";\n\nexport function formatStartingOnDate(date: Date, locale: Locale): ClientTranslationProps {\n const localOffset = date.getTimezoneOffset() * 60000; // Get the local time zone offset in milliseconds\n const adjustedDate = new Date(date.getTime() + localOffset); // Adjust the date by adding the offset\n\n return {\n tag: \"timePeriods.starting\",\n vars: {\n date: formatWithLocale(adjustedDate, \"MMM d, yyyy\", locale)\n }\n };\n}\n\nexport function formatAbsenceDates(\n dates: TimeInterval[],\n absenceType: AbsenceType | undefined,\n locale: Locale\n): ClientTranslationProps | string {\n const sortedDates = orderBy(dates, [\"date\"]);\n\n if (absenceType === \"continuous\" && sortedDates?.length > 0) {\n const startDate = formatWithLocale(\n parseISO(sortedDates[0].date),\n \"MMM d, yyyy\",\n locale\n );\n const endDate = formatWithLocale(\n parseISO(sortedDates[sortedDates.length - 1].date),\n \"MMM d, yyyy\",\n locale\n );\n if (startDate === endDate) {\n return startDate;\n }\n return { tag: \"timePeriods.startToEnd\", vars: { startDate, endDate } };\n }\n\n if (sortedDates.length > 2) {\n const startDate = parseISO(sortedDates[0].date);\n const endDate = parseISO(sortedDates[sortedDates.length - 1].date);\n\n const formattedStartDate = formatWithLocale(\n startDate,\n \"MMM d, yyyy\",\n locale\n );\n const formattedEndDate = formatWithLocale(endDate, \"MMM d, yyyy\", locale);\n\n const uniqueDates = new Set(sortedDates.map(date => date.date));\n\n return {\n tag: \"timePeriods.daysBetween\",\n vars: {\n numDays: uniqueDates.size.toString(),\n startDate: formattedStartDate,\n endDate: formattedEndDate\n }\n };\n } else if (sortedDates.length === 2) {\n const firstDate = formatWithLocale(\n parseISO(sortedDates[0].date),\n \"MMM d, yyyy\",\n locale\n );\n const secondDate = formatWithLocale(\n parseISO(sortedDates[1].date),\n \"MMM d, yyyy\",\n locale\n );\n\n if (firstDate === secondDate) {\n return formatWithLocale(\n parseISO(sortedDates[0].date),\n \"MMM d, yyyy\",\n locale\n );\n }\n\n return {\n tag: \"timePeriods.startAndEnd\",\n vars: { startDate: firstDate, endDate: secondDate }\n };\n } else if (sortedDates.length === 1) {\n return formatWithLocale(\n parseISO(sortedDates[0].date),\n \"MMM d, yyyy\",\n locale\n );\n }\n\n return \"\";\n}\n\nexport function formatClaimDates(claim: ClaimSummary, locale: Locale) {\n switch (claim.claimType) {\n case \"fml\": {\n return claim.startDate !== undefined\n ? formatStartingOnDate(claim.startDate, locale)\n : \"\";\n }\n case \"std\": {\n const date = claim.startDate ?? claim.firstDateOfAbsence;\n return date !== undefined ? formatStartingOnDate(date, locale) : \"\";\n }\n case \"absence\": {\n return formatAbsenceDates(claim.absenceDates, claim.absenceType, locale);\n }\n default: {\n return formatAbsenceDates(claim.absenceDates, claim.absenceType, locale);\n }\n }\n}\n\nexport function containsOvernightShift(dates: TimeInterval[]): boolean {\n return some(dates, date => isTimeAfter(date.startTime, date.endTime));\n}\n\nexport function getOvernightShiftMessage(\n dates: TimeInterval[],\n absenceType: AbsenceType,\n locale: Locale\n): ClientTranslationProps | undefined {\n if (dates.length === 1) {\n return {\n tag: \"warnings.overnight_shift\",\n vars: {\n date: formatWithLocale(\n addDays(parseISO(dates[0].date), 1),\n \"iiii, MMMM d, yyyy\",\n locale\n )\n }\n };\n } else if (absenceType === \"continuous\") {\n const sortedDates = orderBy(dates, [\"date\"]);\n\n return {\n tag: \"warnings.overnight_shift\",\n vars: {\n date: formatWithLocale(\n addDays(parseISO(sortedDates[sortedDates.length - 1].date), 1),\n \"iiii, MMMM d, yyyy\",\n locale\n )\n }\n };\n } else if (absenceType === \"intermittent\") {\n if (every(dates, date => isTimeAfter(date.startTime, date.endTime))) {\n return {\n tag: \"warnings.intermittent_all_overnight_shift\"\n };\n } else if (containsOvernightShift(dates)) {\n return {\n tag: \"warnings.intermittent_some_overnight_shift\"\n };\n }\n }\n}\n","import React, { memo } from \"react\";\nimport Card from \"components/card/card\";\nimport styles from \"./claim-card.module.scss\";\nimport {\n ClaimRelationship,\n ClaimSummary,\n ClaimSummaryWithTranslatedRelationship\n} from \"features/claims/claims-model\";\nimport { Tag } from \"components/tag/tag\";\nimport { TagForClaimStatus } from \"components/tag/tag-for-claim-status\";\nimport {\n areTimesEqual,\n formatTimeInterval,\n formatTime,\n TimeInterval\n} from \"shared-types/time\";\nimport { every, orderBy } from \"lodash-es\";\nimport {\n containsOvernightShift,\n formatClaimDates,\n getOvernightShiftMessage\n} from \"./claim-card-helper\";\nimport { MoonIcon } from \"components/icons\";\nimport { Tooltip } from \"components/tool-tip\";\nimport clsx from \"clsx\";\nimport { ClientTranslationProps } from \"i18n\";\nimport { Translation } from \"components/translation\";\nimport { Link } from \"react-router-dom\";\nimport * as Routes from \"routes\";\nimport { useTranslation } from \"hooks/translation\";\nimport { useFormat } from \"hooks/format\";\n\ntype Props = {\n className?: string;\n claim: ClaimSummary | ClaimSummaryWithTranslatedRelationship;\n notLinked?: boolean;\n tabIndex?: boolean;\n};\n\nexport const ClaimCard: React.FC = memo(\n ({ className, claim, notLinked, tabIndex = true }) => {\n const t = useTranslation();\n const { currentLocale } = useFormat();\n const ts = (s: string | ClientTranslationProps) =>\n typeof s === \"string\" ? s : t(s);\n\n const sortedDates =\n claim.claimType === \"absence\"\n ? orderBy(claim.absenceDates, [\"date\"])\n : [];\n\n const overnightMessage = () => {\n if (claim.claimType === \"absence\") {\n const translationProps = getOvernightShiftMessage(\n claim.absenceDates,\n claim.absenceType,\n currentLocale\n );\n if (translationProps) {\n return t(translationProps);\n }\n } else {\n return undefined;\n }\n };\n\n const formattedDates = formatClaimDates(claim, currentLocale);\n\n const tagTextForClaimType = () => {\n switch (claim.claimType) {\n case \"absence\":\n return t({ tag: \"claims.tag.absence\" });\n case \"fml\":\n return t({ tag: \"claims.tag.fml\" });\n case \"std\":\n return t({ tag: \"claims.tag.std\" });\n }\n };\n\n const firstClaim = 0;\n const lastClaim =\n claim.claimType === \"incomplete\" ? claim.absenceDates.length - 1 : 0;\n\n const card = (\n \n
\n

\n {t(claim.title)}, {t({text: \"case.number\"})} {(claim.incidentId)}\n

\n
\n
\n
\n {claim.claimType !== \"incomplete\" && (\n {tagTextForClaimType()}\n )}\n {claim.relationship && (\n \n \n \n )}\n \n
\n
\n\n
\n
\n
\n
\n

{ts(formattedDates)}

\n {claim.claimType === \"absence\" &&\n checkEqualTimes(claim.absenceDates) && (\n

\n {formatTimeInterval(sortedDates[0])}\n

\n )}\n
\n\n {claim.claimType === \"absence\" &&\n containsOvernightShift(claim.absenceDates) && (\n <>\n \n \n
\n \n \n )}\n
\n\n {claim.claimType === \"incomplete\" &&\n claim.absenceDates.length !== 0 &&\n (claim.absenceType === \"continuous\" ||\n claim.absenceDates.length === 1) && (\n
\n

\n {t({\n tag: \"claims.time\",\n vars: {\n startTime: formatTime({\n hour: claim.absenceDates[firstClaim].startTime.hour,\n minute:\n claim.absenceDates[firstClaim].startTime.minute,\n period:\n claim.absenceDates[firstClaim].startTime.period\n }),\n endTime: formatTime({\n hour: claim.absenceDates[lastClaim].endTime.hour,\n minute: claim.absenceDates[lastClaim].endTime.minute,\n period: claim.absenceDates[lastClaim].endTime.period\n })\n }\n })}\n

\n
\n )}\n\n {claim.claimType === \"incomplete\" && claim.createdBy && (\n
\n

\n {t({\n tag: \"claims.created_by\",\n vars: { createdBy: claim.createdBy }\n })}\n

\n
\n )}\n
\n \n
\n );\n\n const linkTo = linkForClaim(claim);\n return linkTo && !notLinked ? (\n \n {card}\n \n ) : (\n
\n {card}\n
\n );\n }\n);\n\nfunction checkEqualTimes(timeIntervals: TimeInterval[]) {\n const first = timeIntervals[0];\n return every(\n timeIntervals,\n ti =>\n areTimesEqual(first.startTime, ti.startTime) &&\n areTimesEqual(first.endTime, ti.endTime)\n );\n}\n\nfunction translateAbbreviatedRelationship(\n relationship: ClaimRelationship\n): ClientTranslationProps {\n // Using the abbreviated form for some relationships, to keep tags short\n switch (relationship) {\n case \"child-adopted\":\n case \"child-biological\":\n case \"child-adult\":\n case \"child-partner\":\n case \"child-foster\":\n case \"child-step\":\n case \"in-loco-parentis\":\n return { tag: \"claims.relationship.child\" };\n case \"legal-ward\":\n return { tag: \"claims.relationship.legal_ward\" };\n case \"next-of-kin\":\n return { tag: \"claims.relationship.next_of_kin\" };\n case \"parent\":\n return { tag: \"claims.relationship.parent\" };\n case \"parent-step\":\n return { tag: \"claims.relationship.parent_step\" };\n case \"spouse\":\n return { tag: \"claims.relationship.spouse\" };\n case \"self\":\n return { tag: \"claims.relationship.self\" };\n }\n}\n\nfunction linkForClaim(claim: ClaimSummary) {\n if (claim.isReferral) {\n return \"\";\n }\n\n switch (claim.claimType) {\n case \"fml\":\n return Routes.ViewFmlClaim.generate({\n claimId: claim.incidentId.toString()\n });\n case \"std\":\n return Routes.ViewStdClaim.generate({\n claimId: claim.incidentId.toString()\n });\n case \"absence\":\n return Routes.ViewAbsenceClaim.generate({\n claimId: claim.incidentId.toString()\n });\n }\n}\n","import React, { ReactElement } from \"react\";\nimport { Translation } from \"components/translation\";\nimport { Tag, TagStyle } from \"components/tag/tag\";\nimport {\n AbsenceClaimStatus,\n DecisionStatus,\n LeaveClaimStatus,\n StdClaimStatus\n} from \"features/claims/claims-model\";\nimport { useTranslation } from \"hooks/translation\";\nimport { LocaleTexts } from \"shared-types/api\";\n\ntype ClaimTagProps = {\n status: AbsenceClaimStatus | StdClaimStatus | LeaveClaimStatus;\n locale?: LocaleTexts;\n};\n\ntype DecisionTagProps = {\n status: DecisionStatus;\n};\n\nexport const TagForClaimStatus: React.FC = ({\n status,\n locale\n}) => {\n const t = useTranslation();\n const tagStyle = getTagStyle(status);\n const shortTagText = getTagText(status);\n const translatedTagText = locale ? t(locale) : \"\";\n\n return (\n \n {translatedTagText !== \"\" ? translatedTagText : shortTagText}\n \n );\n};\n\nfunction getTagStyle(\n status: AbsenceClaimStatus | StdClaimStatus | LeaveClaimStatus\n): TagStyle {\n switch (status) {\n case \"open\":\n case \"approved\":\n case \"submitted\":\n return \"green\";\n case \"cancelled\":\n case \"denied\":\n return \"red\";\n case \"pending\":\n case \"pending-review\":\n case \"pending-paperwork\":\n case \"missing-paperwork\":\n case \"in-progress\":\n return \"orange\";\n case \"completed\":\n case \"closed\":\n return \"gray\";\n case \"incomplete\":\n return \"purple\";\n case \"outcomed\":\n return \"orange\";\n }\n}\n\nfunction getTagText(\n status: AbsenceClaimStatus | StdClaimStatus | LeaveClaimStatus\n): ReactElement {\n switch (status) {\n case \"open\":\n return ;\n case \"closed\":\n return ;\n case \"approved\":\n return ;\n case \"pending\":\n return ;\n case \"pending-review\":\n return ;\n case \"pending-paperwork\":\n return ;\n case \"cancelled\":\n return ;\n case \"denied\":\n return ;\n case \"missing-paperwork\":\n return ;\n case \"submitted\":\n return ;\n case \"in-progress\":\n return ;\n case \"completed\":\n return ;\n case \"incomplete\":\n return ;\n case \"outcomed\":\n return ;\n }\n}\n\nexport const TagForDecisionStatus: React.FC = ({\n status\n}) => {\n switch (status) {\n case \"APPROVED\":\n return (\n \n \n \n );\n case \"PENDING\":\n return (\n \n \n \n );\n case \"DENIED\":\n return (\n \n \n \n );\n }\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"text-field-container\":\"styles_text-field-container__NfgKf\",\"text-field-label\":\"styles_text-field-label__1-SBH\",\"text-field-label--shrink\":\"styles_text-field-label--shrink__2zd2z\",\"text-field-input\":\"styles_text-field-input__QsOXy\",\"text-field-input--no-label\":\"styles_text-field-input--no-label__3iLpB\",\"text-field-helper-text\":\"styles_text-field-helper-text__389mf\",\"text-area-count\":\"styles_text-area-count__1Jh2M\",\"text-field-textarea\":\"styles_text-field-textarea__h_O-p\",\"text-area-count-under\":\"styles_text-area-count-under__1Gl_5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"policy-summary\":\"policy-summary_policy-summary__2PER_\",\"title\":\"policy-summary_title__13NgE\",\"content\":\"policy-summary_content__2oTBf\",\"arrow-left\":\"policy-summary_arrow-left__2VzQl\",\"arrow-right\":\"policy-summary_arrow-right__bBgqs\",\"icon\":\"policy-summary_icon__24aHb\",\"policies-carousel\":\"policy-summary_policies-carousel__3eBVu\",\"policies-chunk\":\"policy-summary_policies-chunk__1aJS6\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pagination-wrapper\":\"claim-child-details-table_pagination-wrapper__HqQAH\",\"date-wrapper\":\"claim-child-details-table_date-wrapper__2xmD9\",\"header__wrapper\":\"claim-child-details-table_header__wrapper__3XuHX\",\"header__date-separator\":\"claim-child-details-table_header__date-separator__2yXAy\",\"header__moon-icon\":\"claim-child-details-table_header__moon-icon__wocRQ\",\"header__moon-icon--desktop\":\"claim-child-details-table_header__moon-icon--desktop__7VX-u\",\"header-lower__time-icon\":\"claim-child-details-table_header-lower__time-icon__22FHN\",\"header-lower__date-separator\":\"claim-child-details-table_header-lower__date-separator__2QrSp\"};","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { LocaleTexts } from \"shared-types/api\";\n\ntype GetTranslationResult =\n | { result: \"found\"; value: string }\n | { result: \"not_found\"; message: string };\n\ntype VarValue = string | LocaleTexts;\n\nexport function tryGetTranslation(\n translations: I18nMap,\n tag: string,\n vars: { [p: string]: string } | undefined\n): GetTranslationResult {\n const match = tag.match(/([\\w-]+)(?:\\.(.+))?/);\n if (!match) {\n throw new Error(\"Invalid key. Must be in the format 'foo.bar.baz'\");\n }\n const head = match[1];\n const rest = match[2];\n const template = translations[head];\n if (template === undefined) {\n return {\n result: \"not_found\",\n message: `Tag ${tag} missing from translations file`\n };\n }\n\n if (typeof template === \"string\") {\n const translation = substitute(template, vars ?? {});\n return { result: \"found\", value: translation };\n } else {\n return tryGetTranslation(template, rest, vars);\n }\n}\n\nexport function substitute(template: string, vars: Record) {\n return template.replace(/{(\\w+)}/g, (_: string, name: string) => {\n const value = vars[name];\n if (value === undefined) {\n throw new Error(`Variable ${name} used in translation was not valid`);\n }\n return value;\n });\n}\n\n/** Retrieve the translation for the given tag and vars from this I18nMap. Throw if not found.*/\nexport function getTranslation(\n translations: I18nMap,\n tag: string,\n vars?: { [k: string]: string }\n): string {\n const result = tryGetTranslation(translations, tag, vars);\n switch (result.result) {\n case \"found\":\n return result.value;\n case \"not_found\":\n throw new Error(result.message);\n }\n}\n\n/** Definition of a tag for a translation that has no interpolated variables. */\ninterface I18nPlain {\n tag: Tag;\n vars?: undefined;\n}\n\n/** Definition of a tag for a translation and its interpolated variables. */\ninterface I18nVars {\n tag: Tag;\n vars: Record;\n}\n\n/** A translation tag and variables that an I18nProfile supports. */\ninterface I18nProfileEntry {\n readonly tag: string;\n readonly vars: string[];\n}\n\n/** A map of nested translation tags to their translation strings for a single language. */\nexport interface I18nMap {\n [k: string]: string | I18nMap | undefined;\n}\n\n/** The profile of all translations that an application expects. */\nexport class I18nProfile {\n private readonly profileEntries: I18nProfileEntry[];\n _props: TProps = undefined as any;\n\n constructor() {\n this.profileEntries = [];\n }\n\n with(k: K): I18nProfile>;\n with(\n k: K,\n args: A\n ): I18nProfile>;\n with(\n k: K,\n args: [A, A]\n ): I18nProfile>;\n with(\n k: K,\n args: [A, A, A]\n ): I18nProfile>;\n with(\n k: K,\n args: [A, A, A, A]\n ): I18nProfile>;\n with(\n k: K,\n args: [A, A, A, A, A]\n ): I18nProfile>;\n with(k: string, args?: string | string[]) {\n if (typeof args === \"string\") {\n args = [args];\n }\n this.profileEntries.push({\n tag: k,\n vars: args || []\n });\n return this as any;\n }\n\n /** Verify that the input is a valid I18nMap for this TranslationProfile,\n * and throw an exception if any errors are found. */\n verifyI18nMap(map: any): I18nMap {\n const errors = this.checkI18nMap(map);\n if (errors.length > 0) {\n throw new Error(`Invalid I18nMap. ${errors.join(\", \")}`);\n }\n return map;\n }\n\n /** Verify that the input is a valid I18nMap for this TranslationProfile. */\n\n isValidI18nMap(map: any): map is I18nMap {\n const result = this.checkI18nMap(map);\n return result.length === 0;\n }\n\n /** Check that the input I18nMap has a valid translation for every\n * entry in this TranslationProfile, and return a list of any failures. */\n checkI18nMap(map: I18nMap): string[] {\n const errors: string[] = [];\n\n for (const profileEntry of this.profileEntries) {\n try {\n const dummy = profileEntry.vars.reduce((obj, varName) => {\n obj[varName] = \"dog\";\n return obj;\n }, {} as any);\n getTranslation(map, profileEntry.tag, dummy);\n } catch (e) {\n errors.push(`Problem with ${profileEntry.tag}: ${e.message}`);\n }\n }\n\n return errors;\n }\n\n static with(k: K): I18nProfile>;\n static with(\n k: K,\n args: A\n ): I18nProfile>;\n static with(\n k: K,\n args: [A, A]\n ): I18nProfile>;\n static with(\n k: K,\n args: [A, A, A]\n ): I18nProfile>;\n static with(\n k: K,\n args: [A, A, A, A]\n ): I18nProfile>;\n static with(\n k: K,\n args: [A, A, A, A, A]\n ): I18nProfile>;\n static with(k: string, args?: string | any[]) {\n const self: any = new I18nProfile();\n return self.with(k, args);\n }\n}\n\nexport type PropsOf> = TP[\"_props\"];\n","import React, { useContext } from \"react\";\nimport AuthService, { AuthContextService } from \"./auth-service\";\nimport { AppContext } from \"context/app-context\";\n\ninterface authContextStateType {\n authContext: AuthContextService | null;\n}\n\nexport const AuthContext = React.createContext({\n authContext: {}\n});\n\nexport const AuthProvider: React.FunctionComponent = props => {\n const authContext = AppContext.isSandbox() ? null : new AuthService();\n return (\n \n {props.children}\n \n );\n};\n\nexport const AuthConsumer = AuthContext.Consumer;\n\nexport const useAuthContext: () => authContextStateType = () => {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error(\"AuthContext requires a Provider\");\n }\n return context;\n};\n","import * as React from \"react\";\nimport { AuthConsumer } from \"./auth-provider\";\n\nexport const Logout = () => (\n \n {({ authContext }) => {\n authContext && authContext.logout && authContext.logout();\n return ;\n }}\n \n);\n","import React from \"react\";\nimport { AuthConsumer } from \"./auth-provider\";\n\nexport const LogoutCallback = () => (\n \n {({ authContext }) => {\n authContext &&\n authContext.signoutRedirectCallback &&\n authContext.signoutRedirectCallback();\n return ;\n }}\n \n);\n","import React from \"react\";\n\nexport const SilentRenew: React.FunctionComponent = () => {\n return
;\n};\n","import React from \"react\";\nimport { Translation } from \"components/translation\";\n\nexport const NotFoundPage: React.FunctionComponent = () => {\n return (\n
\n \n
\n );\n};\n","import React from \"react\";\nimport styles from \"./application-access.module.scss\";\nimport { Translation } from \"components/translation\";\nimport { useTranslation } from \"hooks/translation\";\nimport { ContainedButton } from \"components/buttons\";\nimport { useLogoutModalContext } from \"context/logout-modal-context\";\n\nexport const ApplicationRestrictionView: React.FC = () => {\n const { setIsOpen } = useLogoutModalContext();\n\n const t = useTranslation();\n const contactUs = t({ tag: \"global.accessDenied.contactUs\" });\n return (\n
\n \n

\n \n

\n

\n ${contactUs}`\n }}\n html={true}\n />\n

\n setIsOpen(true)}\n >\n {t({ tag: \"buttons.logout\" })}\n \n
\n );\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from \"react\";\nimport { Route } from \"react-router-dom\";\nimport { AuthConsumer } from \"./auth-provider\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { Translation } from \"components/translation\";\nimport { LoadingSpinner } from \"components/loading-spinner\";\nimport { ApplicationRestrictionView } from \"pages/application-access/application-restriction\";\n\ninterface IProps {\n exact?: boolean;\n path: string;\n component: React.ComponentType;\n checkAccess?: boolean;\n}\n\nexport const AuthenticatedRoute = ({\n component,\n checkAccess = true,\n ...rest\n}: IProps) => {\n const sessionService = getSessionService();\n const renderFn = (Component: any) => (props: any) => (\n \n {({ authContext }) => {\n if (!!Component && sessionService.isAuthenticated()) {\n if (checkAccess) {\n return sessionService.hasAccess() ? (\n \n ) : (\n \n );\n } else {\n return ;\n }\n } else {\n authContext &&\n authContext.signinRedirect &&\n authContext.signinRedirect();\n return (\n <>\n
\n
\n
\n

\n \n

\n \n
\n
\n
\n \n );\n }\n }}\n
\n );\n\n return ;\n};\n","import React from \"react\";\nimport { useWebConfigurationContext } from \"context/web-configuration-context\";\nimport { useTranslation } from \"hooks/translation\";\nimport * as Routes from \"routes\";\nimport { Link } from \"react-router-dom\";\nimport { useLanguageContext } from \"context/user-language-context\";\nimport { SupportedLanguage } from \"features/translations/locales\";\n\ntype Props = {\n logoStyle: \"light\" | \"dark\";\n clickable?: boolean;\n className?: string;\n height?: string;\n};\n\nexport const ClientLogo: React.FunctionComponent = props => {\n const webConfigurationContext = useWebConfigurationContext();\n const t = useTranslation();\n const { currentLang } = useLanguageContext();\n\n const logoFile = webConfigurationContext?.webConfigurationContext?.logoFile;\n const logoPath = process.env.REACT_APP_ASSETS_BASE + \"/images/logo/\";\n let defaultLogo =\n props.logoStyle === \"light\"\n ? logoPath + \"telus_health_white.svg\"\n : logoPath + \"telus_health_color.svg\";\n if (currentLang === SupportedLanguage.FrenchCA) {\n defaultLogo =\n props.logoStyle === \"light\"\n ? logoPath + \"telus_health_white_fr.svg\"\n : logoPath + \"telus_health_color_fr.svg\";\n }\n\n const imgSrc = logoFile ? `data:image/jpeg;base64,${logoFile}` : defaultLogo;\n\n const LogoImage = () => (\n \n );\n\n return props.clickable ? (\n \n \n \n ) : (\n \n );\n};\n","import * as React from \"react\";\n\nimport { AuthContext } from \"./auth-provider\";\nimport { ClientLogo } from \"components/clientLogo\";\nimport { Translation } from \"components/translation\";\nimport { LoadingSpinner } from \"components/loading-spinner\";\nimport { useLanguageContext } from \"context/user-language-context\";\nimport JwtDecode from \"jwt-decode\";\nimport { IAbilitiUser } from \"features/session/session-model\";\nimport { getLanguageFromCode } from \"features/translations/locales\";\nimport { SIGNIN_PARAMS } from \"./auth-config\";\n\nexport const Callback: React.FunctionComponent = () => {\n const { authContext } = React.useContext(AuthContext);\n const { setLanguage } = useLanguageContext();\n\n const [errorMessage, setErrorMessage] = React.useState(\"\");\n\nReact.useEffect(() => {\n let retryAttempts = Number(sessionStorage.getItem(\"refetchTokenAttempts\")) || 0;\n authContext &&\n authContext.signinRedirectCallback != null &&\n authContext\n .signinRedirectCallback()\n .then(user => {\n let lang = localStorage.getItem(SIGNIN_PARAMS.language);\n if (lang) {\n localStorage.removeItem(SIGNIN_PARAMS.language);\n } else {\n const token = JwtDecode(user.access_token);\n lang = token.locale ?? \"\";\n }\n })\n .catch(err => {\n if (retryAttempts < 5){\n retryAttempts++;\n sessionStorage.setItem(\"refetchTokenAttempts\", retryAttempts.toString());\n window.location.replace(\"\");\n } else if (retryAttempts >= 5) {\n sessionStorage.setItem(\"refetchTokenAttempts\", \"5\");\n setErrorMessage(err.message);\n }\n });\n });\n return (\n
\n
\n \n
\n

\n {\" \"}\n \n

\n \n
\n {errorMessage &&

{errorMessage}

}\n
\n
\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { ReportAbsencePrimaryReason } from \"routes\";\nimport { ClaimCard } from \"components/claim-card/claim-card\";\nimport { LeaveProceedModal } from \"components/leave-proceed-modal/leave-proceed-modal\";\nimport { TextButton } from \"components/buttons\";\nimport { Translation } from \"components/translation\";\nimport { useWindowSize } from \"hooks\";\nimport { setCardLayout } from \"pages/claims/helpers\";\nimport { getAbsenceReportingService } from \"features/report-absence/absence-reporting-service\";\nimport { ClaimSummary } from \"features/claims/claims-model\";\nimport { useTranslation } from \"hooks/translation\";\nimport styles from \"./to-do-activities.module.scss\";\nimport { useFormat } from \"hooks/format\";\n\ntype Props = {\n claims: ClaimSummary[];\n};\n\nexport const ToDoActivities: React.FC = ({ claims }) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const [cardHeigth, setCardHeight] = useState(0);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [incidentId, setIncidentId] = useState(0);\n const [itemsNotShown, setItemsNotShown] = useState(0);\n const [windowWidth] = useWindowSize();\n const history = useHistory();\n\n const MOBILE_BREAK_POINT = 768;\n const CARD_WIDTH = 352;\n const GRID_GAP = 32;\n const cardListClass = styles[\"to-do-activities__wrapper\"];\n const cardClass = styles[\"to-do-activities__claim-card\"];\n const t = useTranslation();\n const { currentLocale } = useFormat();\n\n useEffect(() => {\n const cardList = document.querySelector(`.${cardListClass}`);\n const card = cardList?.querySelector(`.${cardClass}`);\n\n if (cardList) {\n const totalCardWidth = CARD_WIDTH + GRID_GAP;\n const listWidth = cardList.clientWidth;\n const numberOfColumns =\n 1 + Math.floor((listWidth - CARD_WIDTH) / totalCardWidth);\n const itemsNotShown = claims.length - numberOfColumns;\n\n setCardLayout({\n cardList,\n windowWidth,\n numberOfColumns,\n mobileBreakPoint: MOBILE_BREAK_POINT\n });\n\n setCardHeight(card?.clientHeight ? card?.clientHeight : 0);\n setItemsNotShown(itemsNotShown);\n }\n }, [cardListClass, cardClass, claims.length, windowWidth]);\n\n const prepareCardListStyle = () => {\n const isExpandedStyle = {\n maxHeigt: \"auto\",\n overflowY: \"auto\"\n } as React.CSSProperties;\n\n const isNotExpandedStyle = {\n maxHeight: cardHeigth,\n overflowY: \"hidden\"\n } as React.CSSProperties;\n\n return isExpanded ? isExpandedStyle : isNotExpandedStyle;\n };\n\n const cancelAbsence: () => Promise<{ success: boolean }> = async () => {\n try {\n const result = await getAbsenceReportingService().cancelIncidents(\n {},\n [incidentId],\n currentLocale.code\n );\n return result;\n } catch (error) {\n return { success: false };\n }\n };\n\n const proceed = () =>\n history.push(ReportAbsencePrimaryReason.generate({ incidentId }));\n\n const handleInProgressClaim = (incidentId: number) => {\n setIncidentId(incidentId);\n setIsModalOpen(true);\n };\n\n const handleCancelClaim = async () => {\n const result = await cancelAbsence();\n setIsModalOpen(false);\n\n if (result.success) {\n window.location.reload();\n }\n };\n\n const handleContinueClaim = () => {\n proceed();\n setIsModalOpen(false);\n };\n\n return (\n <>\n setIsModalOpen(false)}\n onRequestLeave={handleCancelClaim}\n onRequestProceed={handleContinueClaim}\n title={t({ tag: \"in_progress_absence_modal.title\" })}\n contentText={t({ tag: \"in_progress_absence_modal.support_text\" })}\n leaveButtonText={t({ tag: \"buttons.cancelAbsence\" })}\n proceedButtonText={t({ tag: \"buttons.continue\" })}\n isOpen={isModalOpen}\n />\n
\n

\n \n

\n
\n
\n {claims.map(claim => (\n handleInProgressClaim(claim.incidentId)}\n className={cardClass}\n >\n \n
\n ))}\n \n {itemsNotShown > 0 && (\n
\n setIsExpanded(!isExpanded)}\n >\n {isExpanded\n ? t({ tag: \"claims.show_less\" })\n : t({ tag: \"claims.show_all\" })}\n \n {!isExpanded && (\n
\n {t({\n tag: \"claims.items_not_shown\",\n vars: { itemsNotShown: itemsNotShown.toString() }\n })}\n
\n )}\n
\n )}\n \n );\n};\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { ClaimSummary } from \"features/claims/claims-model\";\nimport styles from \"./recent-activity.module.scss\";\nimport { Translation } from \"components/translation\";\nimport { Link } from \"react-router-dom\";\nimport * as Routes from \"routes\";\nimport { ClaimCard } from \"components/claim-card/claim-card\";\nimport _ from \"lodash-es\";\nimport { hasValue, isIE } from \"utils/util\";\nimport clsx from \"clsx\";\nimport { useWindowSize } from \"hooks\";\nimport { setCardLayout } from \"pages/claims/helpers\";\n\ntype Props = {\n claims: ClaimSummary[];\n};\n\nexport const RecentActivity: React.FC = ({ claims }) => {\n const carouselRef = useRef(null);\n const horseRefs = useRef<(HTMLLIElement | null)[]>([]);\n const [currentHorseIndex, setHorseIndex] = useState(0);\n const [carouselWidth, setCarouselWidth] = useState(\n undefined\n );\n\n const nominalCardWidth = 360;\n const cardsPerChunk = Math.max(\n 1,\n Math.floor((carouselWidth ?? 0) / nominalCardWidth)\n );\n const claimChunks = _.chunk(claims, cardsPerChunk);\n\n useEffect(() => {\n const updateCarouselWidth = () => {\n setCarouselWidth(carouselRef.current?.offsetWidth ?? 0);\n };\n const onResize = _.debounce(() => {\n updateCarouselWidth();\n }, 300);\n\n window.addEventListener(\"resize\", onResize);\n updateCarouselWidth();\n\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, []);\n\n useEffect(() => {\n if (isIE) {\n // IE11 doesn't support IntersectionObserver\n return;\n }\n\n const callback: IntersectionObserverCallback = entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const index = (horseRefs.current as Element[]).indexOf(entry.target);\n setHorseIndex(index);\n }\n });\n };\n\n const observer = new IntersectionObserver(callback, {\n root: carouselRef.current,\n threshold: 0.6\n });\n horseRefs.current.filter(hasValue).forEach(horse => {\n observer.observe(horse);\n });\n\n return function cleanup() {\n observer.disconnect();\n };\n }, [claims, cardsPerChunk]);\n\n const gotoHorse = useCallback(index => {\n horseRefs.current[index]?.scrollIntoView({ behavior: \"smooth\" });\n }, []);\n\n const showIndicator = claims.length > cardsPerChunk;\n\n const [windowWidth] = useWindowSize();\n const MOBILE_BREAK_POINT = 720;\n const numberOfColumns = claims.length;\n const cardListClass = styles[\"carousel\"];\n\n useEffect(() => {\n const cardList = document.querySelector(`.${cardListClass}`);\n\n if (cardList) {\n setCardLayout({\n cardList,\n windowWidth,\n numberOfColumns,\n mobileBreakPoint: MOBILE_BREAK_POINT\n });\n }\n });\n\n return (\n <>\n
\n

\n \n

\n \n \n \n
\n
    \n {claimChunks.map((chunk, chunkIndex) => (\n c.incidentId).join(\",\")}\n ref={li => (horseRefs.current[chunkIndex] = li)}\n className={styles[\"horse\"]}\n >\n {chunk.map(claim => (\n \n ))}\n {/*Insert blanks to ensure all cards are the same size */}\n {_.times(cardsPerChunk - chunk.length, i => (\n
    \n ))}\n \n ))}\n
\n {!isIE && showIndicator && (\n \n )}\n \n );\n};\n\ntype CarouselIndicatorProps = {\n dotCount: number;\n activeDot: number;\n onClick: (index: number) => void;\n};\nconst CarouselIndicator: React.FC = ({\n dotCount,\n activeDot,\n onClick\n}) => {\n return (\n
\n {_.range(dotCount).map(i => {\n const isClickable = isDotClickable(i, activeDot, dotCount);\n const isHidden = isDotHidden(i, activeDot, dotCount);\n return (\n
\n );\n })}\n \n );\n};\n\n// Rules for dot clickability and appearance:\n// 1-5 dots:\n// * All dots use elongated style\n// * All dots are clickable\n// 5 or more dots:\n// * The active dot, and those flanking it, use elongated style\n// (there are always three long dots, so first and last are special case)\n// * Only elongated dots are clickable\nfunction isDotClickable(dotIndex: number, activeDot: number, dotCount: number) {\n if (dotCount <= 5) {\n return true;\n } else {\n const threshold = 0 < activeDot && activeDot < dotCount - 1 ? 1 : 2;\n return Math.abs(activeDot - dotIndex) <= threshold;\n }\n}\n\nfunction isDotHidden(dotIndex: number, activeDot: number, dotCount: number) {\n if (dotCount <= 5) {\n return false;\n } else {\n let startMargin = 4;\n let endMargin = 3;\n\n if (activeDot === 0) {\n endMargin = 6;\n }\n\n if (activeDot === 1) {\n endMargin = 5;\n }\n\n if (activeDot === 2) {\n endMargin = 4;\n }\n\n if (activeDot === dotCount - 1) {\n startMargin = 6;\n }\n\n if (activeDot === dotCount - 2) {\n startMargin = 5;\n }\n\n return (\n dotIndex <= activeDot - startMargin || dotIndex >= activeDot + endMargin\n );\n }\n}\n","import React from \"react\";\nimport styles from \"./user-widget.module.scss\";\nimport clsx from \"clsx\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { ProfileIcon } from \"components/icons\";\nimport {LanguageSelectorButton} from \"components/buttons/languageSelector/language-button\";\n\n\ntype Props = {\n theme: \"light\" | \"dark\";\n};\n\nconst UserWidget: React.FunctionComponent = ({ theme }) => {\n const sessionService = getSessionService();\n const user = sessionService.getUser();\n\n function titleCaseName(name: string): string {\n return name.replace(/(\\w)(\\w*)/g, function (g0, g1, g2) {\n return g1.toUpperCase() + g2.toLowerCase();\n });\n }\n\n return (\n \n
\n \n
\n \n \n \n
\n {user?.name && (\n
{titleCaseName(user.name)}
\n )}\n {user?.role && (\n
{titleCaseName(user.role)}
\n )}\n
\n \n );\n};\n\nexport default UserWidget;\n","import React, { useEffect } from \"react\";\nimport { InlineButton } from \"components/buttons/inline-button\";\n\n/**\n * The FreshDesk widget shows up on all pages by default, as a button in the lower-right\n * corner (as long as the widget code has been pasted into index.html). If you want to hide\n * that launcher, simply render this component. FreshDesk can still be launched manually,\n * e.g. by using the FreshdeskButton below.\n *\n * Current limitation: this component can only be rendered in one place at a time, or else\n * it will not work as expected (because this component shows the Freshdesk launcher again\n * on teardown).\n */\nexport const SuppressFreshdeskLauncher: React.FC = () => {\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[\"FreshworksWidget\"]?.(\"hide\", \"launcher\");\n\n return () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[\"FreshworksWidget\"]?.(\"show\", \"launcher\");\n };\n }, []);\n\n return null;\n};\n\nexport const FreshdeskButton: React.FC = ({ children }) => {\n return (\n openFreshdesk()}>{children}\n );\n};\n\nexport function openFreshdesk() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[\"FreshworksWidget\"]?.(\"open\");\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport styles from \"./styles.module.scss\";\nimport * as Routes from \"routes\";\nimport {\n useDesktopBreakpoint,\n useOnClickOutside,\n useReportAbsenceLink\n} from \"hooks\";\nimport { ContainedButton } from \"components/buttons\";\nimport {\n DocumentIcon,\n ExternalLinkIcon,\n HomeIcon,\n LogoutIcon,\n QueryOutlineIcon\n} from \"components/icons\";\nimport { NavLink } from \"react-router-dom\";\nimport clsx from \"clsx\";\nimport { Translation } from \"components/translation\";\nimport { useLogoutModalContext } from \"context/logout-modal-context\";\nimport UserWidget from \"components/user-widget/user-widget\";\nimport CloseButton from \"components/buttons/close-button/close-button\";\nimport { openFreshdesk } from \"components/freshdesk\";\nimport { ClientLogo } from \"components/clientLogo\";\nimport { useFeatures } from \"hooks/features\";\nimport { getAbsenceReportingService } from \"features/report-absence/absence-reporting-service\";\nimport { useWebConfigurationContext } from \"context/web-configuration-context\";\nimport { useLanguageContext } from \"context/user-language-context\";\nimport { SupportedLanguage } from \"features/translations/locales\";\n\nexport type HeaderContext = {\n isDesktop: boolean;\n toggleMenu: MenuToggleFunction;\n};\nexport type MenuToggleFunction = (\n menuAction?: \"open\" | \"close\" | \"toggle\"\n) => void;\n\ntype NavigationWrapperProps = {\n getHeaderFlexItems?: (context: HeaderContext) => JSX.Element | undefined;\n mobileHeaderWithBorder?: boolean;\n};\n/**\n * A component that can be used to wrap content with a navigation layout,\n * including a header with user menu and sidebar/hamburger-menu navigation links.\n */\nexport const NavigationWrapper: React.FunctionComponent = ({\n getHeaderFlexItems,\n mobileHeaderWithBorder,\n children\n}) => {\n const isDesktop = useDesktopBreakpoint();\n const [isMenuOpen, setMenuOpen] = useState(false);\n\n const toggleMenu = useCallback(\n (menuAction = \"toggle\") => {\n switch (menuAction) {\n case \"toggle\":\n setMenuOpen(wasOpen => !wasOpen);\n break;\n case \"open\":\n setMenuOpen(true);\n break;\n case \"close\":\n setMenuOpen(false);\n break;\n }\n },\n []\n );\n\n const header = useMemo(() => {\n return getHeaderFlexItems?.({ isDesktop, toggleMenu });\n }, [getHeaderFlexItems, isDesktop, toggleMenu]);\n\n if (isDesktop) {\n return (\n \n {children}\n \n );\n } else {\n return (\n \n {children}\n \n );\n }\n};\n\ntype MobileWrapperProps = {\n mobileHeaderFlexItems?: JSX.Element;\n menuOpen: boolean;\n toggleMenu: MenuToggleFunction;\n withBorder?: boolean;\n};\nconst MobileWrapper: React.FunctionComponent = props => {\n return (\n
\n props.toggleMenu(\"close\")}\n />\n
\n \n {props.mobileHeaderFlexItems}\n \n
{props.children}
\n
\n
\n );\n};\n\nconst MobileMenu: React.FunctionComponent<{\n isOpen: boolean;\n closeMenu: () => void;\n}> = props => {\n const { isOpen, closeMenu } = props;\n const menuStyles = clsx(styles[\"menu\"], isOpen && styles[\"menu-open\"]);\n const coverStyles = clsx(styles[\"cover\"], isOpen && styles[\"cover-visible\"]);\n const menuRef = useRef(null);\n\n useOnClickOutside(menuRef, () => closeMenu());\n\n return (\n <>\n
\n
\n {isOpen && (\n <>\n closeMenu()}\n />\n\n \n\n \n \n )}\n
\n \n );\n};\n\ntype DesktopWrapperProps = {\n desktopHeaderFlexItems?: JSX.Element;\n};\n\nconst DesktopWrapper: React.FunctionComponent = props => {\n // The \"flex-wrapper\" div is a workaround to get IE11 to make the items\n // inside the container with a min-height of 100vh be the proper height\n // see: https://github.com/philipwalton/flexbugs#flexbug-3\n return (\n
\n
\n \n
\n
\n <>\n {props.desktopHeaderFlexItems}\n \n \n
\n
{props.children}
\n
\n
\n
\n );\n};\n\nconst DesktopMenu: React.FunctionComponent = () => {\n const { canReportAbsence, goToReportAbsence } = useReportAbsenceLink();\n const webConfigurationContext = useWebConfigurationContext();\n const clientCode = sessionStorage.getItem(\"client_code\");\n const { currentLang } = useLanguageContext();\n\n const [absenceConfiguration, setAbsenceConfiguration] = useState<\n { locale: string; description: string }[]\n >([]);\n const [reportAbsenceText, setReportAbsenceText] = useState(\"\");\n\n\n let placeHolder = \"\";\n if (currentLang === SupportedLanguage.EnglishCA || currentLang === SupportedLanguage.EnglishUS) {\n placeHolder = \"EN\";\n } else if (currentLang === SupportedLanguage.FrenchCA) {\n placeHolder = \"FR\";\n } else if (currentLang === SupportedLanguage.Spanish) {\n placeHolder = \"ES\";\n }\n\n useEffect(() => {\n if (clientCode != null) {\n getAbsenceReportingService()\n .loadConfig(clientCode, \"\")\n .then((ar) => {\n if (ar.aR3ReportAbsenceButtonTextConfiguration != null) {\n const flattenedConfiguration = ar.aR3ReportAbsenceButtonTextConfiguration.reduce(\n (acc, val) => acc.concat(val),\n [] as { locale: string; description: string }[]\n );\n\n setAbsenceConfiguration([...flattenedConfiguration]);\n }\n })\n .catch((error) => {\n console.error(\"Error:\", error);\n });\n }\n }, [clientCode]);\n\n useEffect(() => {\n const reportAbsenceDescription = absenceConfiguration.find((x) => x.locale === placeHolder)?.description;\n if (reportAbsenceDescription) {\n setReportAbsenceText(reportAbsenceDescription);\n } else {\n setReportAbsenceText(\"\"); // Reset if no match\n }\n }, [placeHolder, absenceConfiguration]);\n\n const buttonText =\n reportAbsenceText !== \"\" ? reportAbsenceText : ;\n\n return (\n <>\n \n \n );\n};\n\nexport const LogoutButton: React.FunctionComponent = () => {\n const { setIsOpen } = useLogoutModalContext();\n\n return (\n setIsOpen(true)}\n data-testid={\"logout\"}\n >\n \n \n \n );\n};\n\nexport const NeedHelpButton: React.FC = () => {\n return (\n \n \n \n \n );\n};\n\nconst NavigationWidget: React.FunctionComponent = () => {\n const { connectLink } = useFeatures();\n\n return (\n \n );\n};\n","import React from \"react\";\nimport {\n HeaderContext,\n NavigationWrapper\n} from \"components/navigation-wrapper\";\nimport clsx from \"clsx\";\nimport { useWindowScrollTop } from \"hooks\";\nimport styles from \"./standard.module.scss\";\n\ntype Props = {\n fixedPaneContents?: JSX.Element;\n bottomNavbarContents?: JSX.Element;\n getHeaderFlexItems?: (context: HeaderContext) => JSX.Element | undefined;\n fixedPaneClassName?: string;\n scrollablePaneClassName?: string;\n mobileHeaderWithBorder?: boolean;\n};\n\nexport const StandardPage: React.FC = ({\n fixedPaneContents,\n bottomNavbarContents,\n getHeaderFlexItems,\n fixedPaneClassName,\n scrollablePaneClassName,\n mobileHeaderWithBorder,\n children\n}) => {\n const scrollTop = useWindowScrollTop(100);\n\n return (\n \n
\n {fixedPaneContents && (\n 0 && styles[\"fixed-pane--shadowed\"],\n fixedPaneClassName\n )}\n >\n {fixedPaneContents}\n \n )}\n \n {children}\n \n {bottomNavbarContents && (\n
\n {bottomNavbarContents}\n
\n )}\n
\n \n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"hooks/translation\";\n\ntype Props = {\n unit: string;\n remaining: number;\n};\n\nexport const PolicyRemainingPeriod: React.FC = ({ unit, remaining }) => {\n const t = useTranslation();\n const singular = remaining === 1;\n\n const translatedUnit = [\"weeks\", \"week\"].includes(unit.toLowerCase())\n ? singular\n ? t({ tag: \"timePeriods.week\" })\n : t({ tag: \"timePeriods.weeks\" })\n : [\"days\", \"day\"].includes(unit.toLowerCase())\n ? singular\n ? t({ tag: \"timePeriods.day\" })\n : t({ tag: \"timePeriods.days\" })\n : [\"hours\", \"hour\"].includes(unit.toLowerCase())\n ? singular\n ? t({ tag: \"timePeriods.hour\" })\n : t({ tag: \"timePeriods.hours\" })\n : [\"months\", \"month\"].includes(unit.toLowerCase())\n ? singular\n ? t({ tag: \"timePeriods.month\" })\n : t({ tag: \"timePeriods.months\" })\n : [\"years\", \"year\"].includes(unit.toLowerCase())\n ? singular\n ? t({ tag: \"timePeriods.year\" })\n : t({ tag: \"timePeriods.years\" })\n : \"\";\n\n return (\n \n {t({\n tag: \"dashboard.period_left\",\n vars: {\n period: translatedUnit\n }\n })}\n \n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { LeavePolicy } from \"features/claims/claims-model\";\nimport { useTranslation } from \"hooks/translation\";\nimport styles from \"./policy.module.scss\";\nimport { PolicyRemainingPeriod } from \"components/policy-remaining-period/policy-remaining-period\";\n\ntype Props = {\n policy: LeavePolicy;\n};\n\nexport const Policy: React.FC = ({ policy }) => {\n const t = useTranslation();\n const [displayHours, setDisplayHours] = useState(false);\n useEffect(() => {\n if (policy?.unit === \"weeks\" || policy?.unit === \"week\") {\n setDisplayHours(true);\n } else {\n setDisplayHours(false);\n }\n }, [policy.unit]);\n\n return (\n
\n
{t(policy.policyCodeLocale)}
\n
\n {policy.remaining}\n \n {displayHours && policy.unit === \"weeks\" && policy.remainingHours!==null && (\n
\n ({policy.remainingHours} {t({ tag: \"timePeriods.hours\" })})\n
\n )}\n
\n \n {t({ tag: \"dashboard.view\" })}\n \n
\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { IconButton } from \"components/buttons\";\nimport { LeftArrowIcon, RightArrowIcon } from \"components/icons\";\nimport { Translation } from \"components/translation\";\nimport { LeavePolicy } from \"features/claims/claims-model\";\nimport { Policy } from \"../policy/policy\";\nimport styles from \"./policy-summary.module.scss\";\nimport _ from \"lodash-es\";\n\ntype Props = {\n leavePolicies: LeavePolicy[];\n};\n\nexport const PolicySummary: React.FC = ({ leavePolicies }) => {\n const chunkRef = useRef<(HTMLDivElement | null)[]>([]);\n const numberOfItems = 3;\n\n const [chunkIndex, setChunkIndex] = useState(0);\n\n const policiesChunks: LeavePolicy[][] = _.chunk(leavePolicies, numberOfItems);\n\n useEffect(() => {\n chunkRef.current[chunkIndex]?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\"\n });\n }, [chunkIndex]);\n\n const goToChunk = (increment: number) => {\n setChunkIndex(chunkIndex + increment);\n };\n\n return (\n
\n
\n \n
\n\n
\n {chunkIndex !== 0 && (\n
\n goToChunk(-1)}>\n \n \n
\n )}\n\n {policiesChunks.length > 0 && (\n
\n {policiesChunks.map((policiesChunk, chunkIndex) => (\n policy.policyCode).join(\",\")}\n ref={div => (chunkRef.current[chunkIndex] = div)}\n className={styles[\"policies-chunk\"]}\n >\n {policiesChunk.map(policy => (\n \n ))}\n
\n ))}\n
\n )}\n\n {(chunkIndex + 1) * numberOfItems < leavePolicies.length && (\n
\n goToChunk(1)}>\n \n \n
\n )}\n
\n
\n );\n};\n","import React from \"react\";\nimport { Translation } from \"components/translation\";\nimport { LeavePolicy } from \"features/claims/claims-model\";\nimport { Policy } from \"../policy/policy\";\nimport styles from \"./policy-summary-mobile.module.scss\";\n\ntype Props = {\n leavePolicies: LeavePolicy[];\n};\n\nexport const PolicySummaryMobile: React.FC = ({ leavePolicies }) => {\n return (\n
\n
\n \n
\n
\n {leavePolicies.map(policy => (\n \n ))}\n
\n
\n );\n};\n","import React from \"react\";\nimport styles from \"./dashboard.module.scss\";\nimport {\n useApiRequest,\n useDesktopBreakpoint,\n useReportAbsenceLink\n} from \"hooks\";\nimport { ContainedButton, IconButton } from \"components/buttons\";\nimport { Translation } from \"components/translation\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { ToDoActivities } from \"components/dashboard/to-do-activities/to-do-activities\";\nimport { RecentActivity } from \"components/dashboard/recent-activity/recent-activity\";\nimport { ClaimSummary, LeavePolicy } from \"features/claims/claims-model\";\nimport { getClaimsService } from \"features/claims/claims-service\";\nimport { StandardPage } from \"page-templates/standard\";\nimport { MenuToggleFunction } from \"components/navigation-wrapper\";\nimport { MenuIcon } from \"components/icons\";\nimport { ClientLogo } from \"components/clientLogo\";\nimport { useTranslation } from \"hooks/translation\";\nimport { ApiErrorView } from \"components/api-error/api-error-view\";\nimport { PolicySummary } from \"components/dashboard/policy-summary/policy-summary\";\nimport { PolicySummaryMobile } from \"components/dashboard/policy-summary-mobile/policy-summary-mobile\";\nimport {\n appInsightLogQuestion,\n appInsightSetUserId\n} from \"app-insights/appInsights\";\n\nexport const DashboardPage: React.FunctionComponent = () => {\n const isDesktopView = useDesktopBreakpoint();\n const { canReportAbsence, goToReportAbsence } = useReportAbsenceLink();\n const sessionService = getSessionService();\n const user = sessionService.getUser();\n const t = useTranslation();\n\n const firstPolicyToShowCode = \"fmla\";\n\n if (user?.ee_no) {\n appInsightSetUserId(user?.ee_no);\n }\n\n //appInsightLogQuestion(`User ${user?.name} landed on dashboard`);\n\n const { data: claims, error } = useApiRequest(\n async () =>\n getClaimsService()\n .listActiveClaims(user?.ee_no || \"\")\n .then(result => result.claims),\n []\n );\n\n const { data: inProgressClaims, error: searchClaimsError } = useApiRequest<\n ClaimSummary[]\n >(\n async () =>\n getClaimsService()\n .getIncompleteClaims(user?.ee_no || \"\", user?.client_code || \"\")\n .then(result => result),\n []\n );\n\n const { data: leavePolicies } = useApiRequest(async () => {\n if (!!claims?.length) {\n return getClaimsService()\n .getLeavePolicySummary()\n .then(policies =>\n policies\n .filter(policy => policy.remaining != null && policy.remaining >= 0 && policy.eligibility)\n .sort((a, b) =>\n a.policyCode === firstPolicyToShowCode\n ? -1\n : b.policyCode === firstPolicyToShowCode\n ? 1\n : t(a.policyCodeLocale).localeCompare(t(b.policyCodeLocale))\n )\n );\n }\n return [];\n }, [claims]);\n\n return (\n \n ctx.isDesktop ? undefined : (\n \n )\n }\n >\n
\n
\n
\n

\n \n

\n
\n {sessionService\n .getUser()\n ?.given_name.replace(/(\\w)(\\w*)/g, function (g0, g1, g2) {\n return g1.toUpperCase() + g2.toLowerCase();\n })}\n
\n \n
\n\n {isDesktopView && !!leavePolicies?.length && (\n
\n \n
\n )}\n
\n\n {!isDesktopView && canReportAbsence && (\n goToReportAbsence()}\n testId={\"report-absence-button\"}\n >\n \n \n )}\n\n {!isDesktopView && !!leavePolicies?.length && (\n
\n \n
\n )}\n
\n \n {inProgressClaims?.length === 0 && !searchClaimsError && (\n
\n \n

\n \n

\n

\n \n

\n
\n )}\n {searchClaimsError && }\n
\n
\n \n {claims?.length === 0 && !error && (\n
\n \n

\n \n

\n

\n \n

\n
\n )}\n {error && }\n
\n
\n \n );\n};\n\nconst DashboardMobileHeaderFragment: React.FC<{\n toggleMenu: MenuToggleFunction;\n}> = ({ toggleMenu }) => {\n return (\n <>\n {\n toggleMenu();\n }}\n testId={\"nav-menu\"}\n >\n \n \n\n
\n \n
\n\n {/* Blank space to ensure logo is centered in nav bar */}\n
\n \n );\n};\n","import clsx from \"clsx\";\nimport React from \"react\";\nimport styles from \"./tabs.module.scss\";\n\nexport type TabEntry = {\n label: string;\n tabId: string;\n};\n\ninterface TabsProps {\n tabId?: string;\n tabs: TabEntry[];\n onChange: (tabId: string) => void;\n}\n\nexport const Tabs: React.FC = ({\n tabs,\n tabId,\n onChange\n}: TabsProps) => {\n return (\n
\n {tabs.map(t => (\n {\n onChange(t.tabId);\n }}\n >\n
{t.label}
\n
\n
\n
\n
\n ))}\n \n );\n};\n","import React, { FC } from \"react\";\nimport { TabEntry, Tabs } from \"components/tabs/tabs\";\nimport { useWebConfigurationContext } from \"context/web-configuration-context\";\nimport { useTranslation } from \"hooks/translation\";\n\ninterface ClaimsTabsProps {\n tabId?: string;\n onChange: (tabId: string) => void;\n caseType?: string;\n}\n\nexport const ClaimsTabs: FC = ({ tabId, onChange, caseType }) => {\n const t = useTranslation();\n const webConfigurationContext = useWebConfigurationContext();\n const tabs: TabEntry[] = [\n { label: t({ tag: \"claims.tab.case_data\" }), tabId: \"case_data\" }\n ];\n\n if (\n webConfigurationContext?.webConfigurationContext.canUploadDocumentsLeaves && caseType===\"LEAVES\"\n ) {\n tabs.push({\n label: t({ tag: \"claims.tab.documents\" }),\n tabId: \"documents\"\n });\n }\n else if(\n webConfigurationContext?.webConfigurationContext.canUploadingDocumentsDM && caseType===\"STD\"\n ) {\n tabs.push({\n label: t({ tag: \"claims.tab.documents\" }),\n tabId: \"documents\"\n });\n }\n\n return (\n {\n onChange(tabId);\n }}\n >\n );\n};\n","import React, { useState } from \"react\";\nimport { useRouteParams } from \"routes/definition\";\nimport { ViewFmlClaim } from \"routes\";\nimport { Tag } from \"components/tag/tag\";\nimport fmlStyles from \"./fml-claim.module.scss\";\nimport styles from \"./styles.module.scss\";\nimport SummaryLabel from \"components/summary-label/summary-label\";\nimport { TagForClaimStatus } from \"components/tag/tag-for-claim-status\";\nimport clsx from \"clsx\";\nimport { LoadingSpinner } from \"components/loading-spinner\";\nimport { orderBy } from \"lodash-es\";\nimport {\n ClaimDesktopHeaderFragment,\n ClaimMobileHeaderFragment,\n DecisionsSection,\n DesktopClaimIdLabel,\n translateRelationship\n} from \"./helpers\";\nimport { ClaimDecision, FmlClaimData } from \"features/claims/claims-model\";\nimport { Translation } from \"components/translation\";\nimport { useApiRequest } from \"hooks\";\nimport { useTranslation } from \"hooks/translation\";\nimport { StandardPage } from \"page-templates/standard\";\nimport { getClaimsService } from \"features/claims/claims-service\";\nimport { ClientTranslationProps } from \"i18n\";\nimport { ApiErrorView } from \"components/api-error/api-error-view\";\nimport { ClaimsTabs } from \"./claim-tabs\";\nimport { DocumentUpload } from \"../../components/documents/document-upload\";\nimport { DocumentEntityType } from \"components/documents/documents\";\nimport { useFormat } from \"hooks/format\";\n\nconst FmlClaimPage: React.FC = () => {\n const params = useRouteParams(ViewFmlClaim);\n const t = useTranslation();\n\n const [activeTab, setActiveTab] = useState(\"case_data\");\n\n const caseId = parseInt(params.claimId, 10);\n\n const { data: fmlClaim, error, isLoading } = useApiRequest(\n async () => getClaimsService().loadFmlClaim(caseId),\n [params.claimId]\n );\n\n return (\n \n isDesktop ? (\n \n ) : (\n \n )\n }\n fixedPaneContents={\n fmlClaim && (\n <>\n
\n
\n {t({ tag: \"claims.tag.fml\" })}\n {fmlClaim.status && (\n \n )}\n
\n

{t(fmlClaim.title)}

\n
\n\n \n\n {fmlClaim.absenceType && (\n \n )}\n\n {\n setActiveTab(tabId);\n }}\n >\n \n )\n }\n >\n {isLoading || error ? (\n <>{isLoading ? : }\n ) : (\n fmlClaim && \n )}\n \n );\n};\n\nfunction formatNumber(number: number): number {\n return Math.round(number * 100) / 100;\n}\nconst FmlClaimContent: React.FC<{ claim: FmlClaimData; tabId: string }> = ({\n claim,\n tabId\n}) => {\n const t = useTranslation();\n const { formatLocal } = useFormat();\n\n const [showAllDecisions, setShowAllDecisions] = useState(false);\n\n const sortedDecisions: ClaimDecision[] = orderBy(\n claim.decisions,\n [\"start\"],\n \"desc\"\n );\n\n return (\n <>\n {tabId === \"case_data\" && (\n
\n
\n {sortedDecisions.length > 0 && (\n <>\n
\n

{t({ text: \"claims.label.leave_dates\" })}

\n
\n\n \n
\n \n )}\n
\n\n {claim.pertainsTo && (\n <>\n \n
\n \n )}\n\n {claim.policies.length > 0 && (\n <>\n
\n \n
\n\n {claim.policies.map(p => (\n
\n
\n {t(p.policyCodeText)}\n
\n
\n
\n
\n
\n

{formatNumber(p.planned)}

\n {p.unit && (\n

\n {t(getDurationPlannedText(p.unit))}\n

\n )}\n
\n {p.unit === \"weeks\" && p.plannedHours!==null && (\n <>\n \n
\n

{p.plannedHours}

\n

{t({ text: \"hours.planned\" })}

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

{p.used}

\n {p.unit && (\n

\n {t(getDurationUsedText(p.unit))}\n

\n )}\n
\n {p.unit === \"weeks\" && p.usedHours!==null && (\n <>\n \n
\n

{p.usedHours}

\n

{t({ text: \"hours.used\" })}

\n
\n \n )}\n
\n
\n
\n
\n ))}\n
\n \n )}\n\n {claim.requestDate && (\n \n )}\n
\n )}\n {tabId === \"documents\" && (\n \n )}\n \n );\n};\n\nfunction getDurationPlannedText(\n unit: \"hours\" | \"days\" | \"weeks\" | \"months\"\n): ClientTranslationProps {\n switch (unit) {\n case \"hours\":\n return { tag: \"fml_detail.hours_planned\" };\n case \"days\":\n return { tag: \"fml_detail.days_planned\" };\n case \"weeks\":\n return { tag: \"fml_detail.weeks_planned\" };\n case \"months\":\n return { tag: \"fml_detail.months_planned\" };\n }\n}\n\nfunction getDurationUsedText(\n unit: \"hours\" | \"days\" | \"weeks\" | \"months\"\n): ClientTranslationProps {\n switch (unit) {\n case \"hours\":\n return { tag: \"fml_detail.hours_used\" };\n case \"days\":\n return { tag: \"fml_detail.days_used\" };\n case \"weeks\":\n return { tag: \"fml_detail.weeks_used\" };\n case \"months\":\n return { tag: \"fml_detail.months_used\" };\n }\n}\n\nfunction leaveTypeText(\n absenceType: \"continuous\" | \"intermittent\" | \"reduced-hours\"\n): ClientTranslationProps {\n switch (absenceType) {\n case \"intermittent\":\n return { tag: \"claims.intermittent_leave\" };\n case \"continuous\":\n return { tag: \"claims.continuous_leave\" };\n case \"reduced-hours\":\n return { tag: \"claims.reduced_hours_leave\" };\n }\n}\n\nexport default FmlClaimPage;\n","import React from \"react\";\nimport { IconComponent } from \"..\";\nimport styles from \"./framed-icon.module.scss\";\nimport clsx from \"clsx\";\n\ntype Props = {\n icon: IconComponent;\n className?: string;\n};\n\nconst FramedIcon: React.FC = ({ icon, className }) => {\n const Icon = icon;\n\n return (\n
\n \n
\n );\n};\n\nexport default FramedIcon;\n","import React, { useState } from \"react\";\nimport { ViewStdClaim } from \"routes\";\nimport { useRouteParams } from \"routes/definition\";\nimport { LoadingSpinner } from \"components/loading-spinner\";\nimport { orderBy } from \"lodash-es\";\nimport { TagForClaimStatus } from \"components/tag/tag-for-claim-status\";\nimport { Tag } from \"components/tag/tag\";\nimport {\n ClaimDesktopHeaderFragment,\n ClaimMobileHeaderFragment,\n DecisionsSection,\n DesktopClaimIdLabel\n} from \"./helpers\";\nimport FramedIcon from \"components/icons/framed-icon/framed-icon\";\nimport { CalendarIcon } from \"components/icons\";\nimport SummaryLabel from \"components/summary-label/summary-label\";\nimport styles from \"./styles.module.scss\";\nimport stdStyles from \"./std-claim.module.scss\";\nimport { ClaimDecision, StdCaseData } from \"features/claims/claims-model\";\nimport { useApiRequest } from \"hooks\";\nimport { StandardPage } from \"page-templates/standard\";\nimport { Translation } from \"components/translation\";\nimport { getClaimsService } from \"features/claims/claims-service\";\nimport { useTranslation } from \"hooks/translation\";\nimport { ApiErrorView } from \"components/api-error/api-error-view\";\nimport { ClaimsTabs } from \"./claim-tabs\";\nimport { DocumentUpload } from \"../../components/documents/document-upload\";\nimport { DocumentEntityType } from \"components/documents/documents\";\nimport { useFormat } from \"hooks/format\";\n\nconst StdClaimPage: React.FC = () => {\n const params = useRouteParams(ViewStdClaim);\n const t = useTranslation();\n\n const caseId = parseInt(params.claimId, 10);\n\n const { data: stdCase, error, isLoading } = useApiRequest(\n async () => getClaimsService().loadStdClaim(caseId),\n [params.claimId]\n );\n\n const [activeTab, setActiveTab] = useState(\"case_data\");\n\n return (\n \n isDesktop ? (\n \n ) : (\n \n )\n }\n fixedPaneContents={\n stdCase && (\n <>\n
\n
\n \n \n \n {stdCase.status && (\n \n )}\n
\n

{t(stdCase.title)}

\n
\n\n \n\n {\n setActiveTab(tabId);\n }}\n >\n \n )\n }\n >\n {isLoading || error ? (\n <>{isLoading ? : }\n ) : (\n stdCase && \n )}\n \n );\n};\n\nconst StdClaimContent: React.FC<{ claim: StdCaseData; tabId: string }> = ({\n claim,\n tabId\n}) => {\n const { formatLocal } = useFormat();\n const [showAllDecisions, setShowAllDecisions] = useState(false);\n\n const sortedDecisions: ClaimDecision[] = orderBy(\n claim.decisions,\n [\"start\"],\n \"desc\"\n );\n\n return (\n <>\n {tabId === \"case_data\" && (\n
\n {claim.startDate && (\n <>\n
\n

\n \n

\n
\n\n
\n \n \n
\n \n )}\n\n \n
\n )}\n {tabId === \"documents\" && (\n \n )}\n \n );\n};\n\nexport default StdClaimPage;\n","import React, { useState, useEffect } from \"react\";\nimport styles from \"./claims-list.module.scss\";\nimport { TagButton } from \"components/tag/tag\";\nimport { Translation } from \"components/translation\";\nimport { useApiRequest, useDesktopBreakpoint, useWindowSize } from \"hooks\";\nimport {\n ClaimFilterUrlParamName,\n ClaimTypeFilter,\n FilterType,\n getFilterLabel,\n getFilterTypeFromString,\n MobileHeaderFragment,\n setCardLayout\n} from \"pages/claims/helpers\";\nimport { ClaimCard } from \"components/claim-card/claim-card\";\nimport { StandardPage } from \"page-templates/standard\";\nimport { Link, useHistory, useLocation } from \"react-router-dom\";\nimport { LoadingSpinner } from \"components/loading-spinner\";\nimport { getClaimsService } from \"features/claims/claims-service\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { ClaimSummary } from \"features/claims/claims-model\";\nimport * as Routes from \"routes\";\nimport { useTranslation } from \"hooks/translation\";\nimport { ApiErrorView } from \"components/api-error/api-error-view\";\n\nexport const ClaimsListPage: React.FC = () => {\n const isDesktop = useDesktopBreakpoint();\n const sessionService = getSessionService();\n const history = useHistory();\n\n const queryClaimType =\n new URLSearchParams(useLocation().search).get(\n ClaimFilterUrlParamName.ClaimType\n ) || \"all\";\n\n const [activeFilter, setActiveFilter] = useState(\"all\");\n\n useEffect(() => {\n const filterType = getFilterTypeFromString(queryClaimType);\n setActiveFilter(filterType || \"all\");\n }, [queryClaimType]);\n\n const { data: filters = [] } = useApiRequest(\n async () =>\n getClaimsService()\n .loadClaimTypeFilters(sessionService.getUser()?.client_code || \"\")\n .then(result => result),\n []\n );\n\n const { isLoading, data, error } = useApiRequest(\n async () =>\n getClaimsService()\n .listActiveClaims(sessionService.getUser()?.ee_no || \"\")\n .then(result => result.claims),\n []\n );\n\n const t = useTranslation();\n\n const claims = data ?? [];\n\n const filteredClaims =\n activeFilter === \"all\"\n ? claims\n : claims.filter(c => c.claimType === activeFilter);\n\n const [windowWidth] = useWindowSize();\n const MOBILE_BREAK_POINT = 1024;\n const CARD_WIDTH = 352;\n const GRID_GAP = 32;\n const cardListClass = styles[\"card-list\"];\n\n useEffect(() => {\n const cardList = document.querySelector(`.${cardListClass}`);\n\n if (cardList) {\n setCardLayout({\n cardList,\n windowWidth,\n mobileBreakPoint: MOBILE_BREAK_POINT,\n cardWidth: CARD_WIDTH,\n gridGap: GRID_GAP\n });\n }\n });\n\n const updateFilter = (filter: FilterType) => {\n history.push({\n search: `?${ClaimFilterUrlParamName.ClaimType}=${filter}`\n });\n };\n\n return (\n \n !isDesktop ? (\n \n \n \n ) : undefined\n }\n fixedPaneContents={\n <>\n {isDesktop && (\n

\n \n

\n )}\n \n \n \n
\n {filters.map(f => (\n updateFilter(f.filter)}\n >\n \n \n ))}\n
\n \n }\n bottomNavbarContents={\n \n \n \n }\n >\n {isLoading || error ? (\n <>{isLoading ? : }\n ) : (\n <>\n {filteredClaims.length > 0 && (\n
\n {filteredClaims.map(claim => (\n \n ))}\n
\n )}\n {filteredClaims.length === 0 && (\n <>\n {activeFilter === \"all\" ? (\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","import {\n useApiRequest,\n useDesktopBreakpoint,\n useWindowScrollTop,\n useWindowSize\n} from \"hooks\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { ClaimSummary } from \"features/claims/claims-model\";\nimport { getClaimsService } from \"features/claims/claims-service\";\nimport { StandardPage } from \"page-templates/standard\";\nimport {\n ClaimDesktopHeaderFragment,\n ClaimFilterUrlParamName,\n ClaimTypeFilter,\n FilterType,\n getFilterLabel,\n getFilterTypeFromString,\n MobileHeaderFragment,\n setCardLayout\n} from \"pages/claims/helpers\";\nimport { Translation } from \"components/translation\";\nimport { getSessionService } from \"features/session/session-service\";\nimport styles from \"pages/claims/claims-list.module.scss\";\nimport { TagButton } from \"components/tag/tag\";\nimport { LoadingSpinner } from \"components/loading-spinner\";\nimport { ClaimCard } from \"components/claim-card/claim-card\";\nimport { useTranslation } from \"hooks/translation\";\nimport { ApiErrorView } from \"components/api-error/api-error-view\";\nimport { useHistory, useLocation } from \"react-router\";\n\nconst PAGE_SIZE = 20;\n\nexport const ClaimsHistoryPage: React.FC = () => {\n const isDesktop = useDesktopBreakpoint();\n\n const [activeFilter, setActiveFilter] = useState(\"all\");\n const [claims, setClaims] = useState([]);\n const [nextPage, setNextPage] = useState(1);\n const totalClaims = useRef();\n const hasMore =\n totalClaims.current === undefined\n ? \"unknown\"\n : totalClaims.current > claims.length;\n\n const t = useTranslation();\n const sessionService = getSessionService();\n\n const history = useHistory();\n\n const queryClaimType =\n new URLSearchParams(useLocation().search).get(\n ClaimFilterUrlParamName.ClaimType\n ) || \"all\";\n\n useEffect(() => {\n const filterType = getFilterTypeFromString(queryClaimType);\n setActiveFilter(filterType || \"all\");\n }, [queryClaimType]);\n\n const { data: filters = [] } = useApiRequest(\n async () =>\n getClaimsService()\n .loadClaimTypeFilters(sessionService.getUser()?.client_code || \"\")\n .then(result => result),\n []\n );\n\n // Load the next page and append it to the list of claims\n const { isLoading, error } = useApiRequest(\n async op => {\n const result = await getClaimsService().listHistoricalClaims(\n {\n claimType: activeFilter === \"all\" ? undefined : activeFilter,\n pageSize: PAGE_SIZE,\n page: nextPage\n },\n sessionService.getUser()?.ee_no || \"\"\n );\n if (!op.cancelled) {\n setClaims(c => c.concat(result.claims));\n totalClaims.current = result.total;\n }\n return result.claims;\n },\n [activeFilter, nextPage]\n );\n\n // Reset everything when the active filter changes\n useEffect(() => {\n totalClaims.current = undefined;\n setClaims([]);\n setNextPage(1);\n }, [activeFilter]);\n\n // Trigger the next page request when scrolled near the bottom of the page\n const scrollTop = useWindowScrollTop(200, { leading: false, trailing: true });\n useEffect(() => {\n if (hasMore === false) {\n return;\n }\n\n const BUFFER = 200;\n const isAtBottom =\n window.innerHeight + document.documentElement.scrollTop >=\n document.documentElement.offsetHeight - BUFFER;\n if (isAtBottom) {\n const newNextPage = Math.floor(claims.length / PAGE_SIZE) + 1;\n setNextPage(newNextPage);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scrollTop]);\n\n const [windowWidth] = useWindowSize();\n const MOBILE_BREAK_POINT = 1024;\n const CARD_WIDTH = 352;\n const GRID_GAP = 32;\n const cardListClass = styles[\"card-list\"];\n\n useEffect(() => {\n const cardList = document.querySelector(`.${cardListClass}`);\n\n if (cardList) {\n setCardLayout({\n cardList,\n windowWidth,\n mobileBreakPoint: MOBILE_BREAK_POINT,\n cardWidth: CARD_WIDTH,\n gridGap: GRID_GAP\n });\n }\n });\n\n const updateFilter = (filter: FilterType) => {\n history.push({\n search: `?${ClaimFilterUrlParamName.ClaimType}=${filter}`\n });\n };\n\n return (\n \n isDesktop ? (\n \n ) : (\n \n \n \n )\n }\n fixedPaneContents={\n <>\n {isDesktop && (\n

\n \n

\n )}\n \n \n \n
\n {filters.map(f => (\n updateFilter(f.filter)}\n >\n \n \n ))}\n
\n \n }\n >\n {error ? (\n \n ) : (\n <>\n {totalClaims.current && totalClaims.current > 0 ? (\n
\n {claims.map(claim => (\n \n ))}\n
\n ) : (\n <>\n {activeFilter === \"all\" && (\n
\n \n

\n \n

\n

\n \n

\n
\n )}\n {activeFilter !== \"all\" && (\n
\n \n

\n \n

\n

\n \n

\n
\n )}\n \n )}\n \n )}\n {/* Allow the spinner to take up space even if it's not visible, so it has a */}\n {/* better chance to be seen if the user scrolls to the bottom quickly */}\n {hasMore !== false && (\n \n )}\n \n );\n};\n","import React from \"react\";\nimport { useRouteParams } from \"routes/definition\";\nimport { ViewAbsenceClaim } from \"routes\";\nimport { Tag } from \"components/tag/tag\";\nimport styles from \"../styles.module.scss\";\nimport absenceStyles from \"./absence-claim.module.scss\";\nimport SummaryLabel from \"components/summary-label/summary-label\";\nimport { compareAsc, differenceInHours, differenceInMinutes } from \"date-fns\";\nimport { TagForClaimStatus } from \"components/tag/tag-for-claim-status\";\nimport { LoadingSpinner } from \"components/loading-spinner\";\nimport {\n ClaimDesktopHeaderFragment,\n ClaimMobileHeaderFragment,\n DesktopConfirmationNumberLabel\n} from \"../helpers\";\nimport { AbsenceClaimData } from \"features/claims/claims-model\";\nimport { Translation } from \"components/translation\";\nimport { useApiRequest } from \"hooks\";\nimport { useTranslation } from \"hooks/translation\";\nimport { StandardPage } from \"page-templates/standard\";\nimport { getClaimsService } from \"features/claims/claims-service\";\nimport { ApiErrorView } from \"components/api-error/api-error-view\";\nimport { CalendarIcon, SmallRightArrowIcon, TimeIcon } from \"components/icons\";\nimport FramedIcon from \"components/icons/framed-icon/framed-icon\";\nimport { Link } from \"react-router-dom\";\nimport { TextButton } from \"components/buttons\";\nimport * as Routes from \"routes\";\nimport { ClientTranslationProps } from \"i18n\";\nimport { Maybe, MyAbilitiArClaim } from \"graphql-types.gen\";\nimport { useFormat } from \"hooks/format\";\n\nconst AbsenceClaimPage: React.FC = () => {\n const params = useRouteParams(ViewAbsenceClaim);\n const t = useTranslation();\n\n const caseId = parseInt(params.claimId, 10);\n\n const { data: absenceClaim, error, isLoading } = useApiRequest(\n async () => getClaimsService().loadAbsenceDetails(caseId),\n [params.claimId]\n );\n\n return (\n \n isDesktop ? (\n \n ) : (\n \n )\n }\n fixedPaneContents={\n absenceClaim && (\n <>\n
\n
\n \n \n \n \n
\n

\n {absenceClaim.secondaryReasonLocale?.length\n ? `${t(absenceClaim.primaryReasonLocale)} (${t(\n absenceClaim.secondaryReasonLocale\n )})`\n : t(absenceClaim.primaryReasonLocale)}\n

\n
\n\n {!absenceClaim.childIncidents?.length && (\n \n )}\n \n )\n }\n >\n {isLoading || error ? (\n <>{isLoading ? : }\n ) : (\n absenceClaim && \n )}\n \n );\n};\n\nconst AbsenceClaimContent: React.FC<{\n claim: AbsenceClaimData & {\n childIncidents: Maybe[]> | undefined;\n };\n}> = ({ claim }) => {\n const t = useTranslation();\n const { formatLocal } = useFormat();\n\n const childIncidentsRTWDates =\n claim.childIncidents\n ?.map(incident => Date.parse(incident?.returnToWorkDate ?? \"\"))\n .filter(rtwDt => !isNaN(rtwDt)) ?? [];\n const returnToWorkDate =\n childIncidentsRTWDates.length > 0\n ? new Date(Math.max(...childIncidentsRTWDates))\n : claim.returnToWorkDate;\n\n const dateTimeStringLength = 23;\n const parseDateWithoutTimezone = (value: string): number =>\n Date.parse(\n value && value.length > dateTimeStringLength\n ? value.substring(0, dateTimeStringLength)\n : value\n );\n\n const absenceStartDatesInMsSinceEpoch = claim.absenceDates\n .map(absenceDate => parseDateWithoutTimezone(absenceDate.startDate ?? \"\"))\n .filter(msDate => !isNaN(msDate));\n const absenceEndDatesInMsSinceEpoch = claim.absenceDates\n .map(absenceDate => parseDateWithoutTimezone(absenceDate.endDate ?? \"\"))\n .filter(msDate => !isNaN(msDate));\n\n const firstDateOfAbsence = new Date(\n absenceStartDatesInMsSinceEpoch.length > 0\n ? Math.min(...absenceStartDatesInMsSinceEpoch)\n : claim.firstDateOfAbsence.toString()\n );\n const lastDateOfAbsence = new Date(\n absenceEndDatesInMsSinceEpoch.length > 0\n ? Math.max(...absenceEndDatesInMsSinceEpoch)\n : claim.lastDateOfAbsence.toString()\n );\n const isSingleDayAbsence =\n compareAsc(\n new Date(firstDateOfAbsence).setHours(0, 0, 0, 0),\n new Date(lastDateOfAbsence).setHours(0, 0, 0, 0)\n ) === 0;\n const isContinuous = claim.absenceType === \"continuous\";\n\n return (\n
\n {claim && (\n <>\n
\n
\n
\n {!isSingleDayAbsence && (\n

\n \n

\n )}\n {isSingleDayAbsence && (\n

\n \n

\n )}\n
\n
\n
\n \n {isSingleDayAbsence && (\n <>\n \n \n )}\n {!isSingleDayAbsence && (\n <>\n
\n \n
\n\n \n\n
\n \n
\n \n )}\n
\n {claim.absenceDates?.length > 1 && (\n
\n
\n \n \n {t({ tag: \"absence_detail.all_dates\" })}\n \n \n
\n {!isContinuous && !isSingleDayAbsence && (\n

\n \n

\n )}\n
\n )}\n
\n
\n {returnToWorkDate && (\n
\n

\n \n

\n
\n \n \n
\n
\n )}\n
\n\n
\n {(claim.associatedLeaveCaseId || claim.associatedSTDCaseId) && (\n

\n \n

\n )}\n {claim.associatedLeaveCaseId && (\n
\n

\n \n

\n \n {claim.associatedLeaveCaseId}\n \n
\n )}\n {claim.associatedSTDCaseId && (\n <>\n

\n \n

\n \n {claim.associatedSTDCaseId}\n \n \n )}\n
\n \n )}\n
\n );\n};\n\nfunction getSingelDayAbsenceDuration(\n firstDateOfAbsence: Date,\n lastDateOfAbsence: Date\n): ClientTranslationProps {\n const differencInMinutes = differenceInMinutes(\n lastDateOfAbsence,\n firstDateOfAbsence\n );\n const differencInHours = differenceInHours(\n lastDateOfAbsence,\n firstDateOfAbsence\n );\n\n if (differencInHours === 0) {\n return {\n tag: \"absence_detail.absence_minutes\",\n vars: {\n minutesCount: differencInMinutes.toString()\n }\n };\n }\n\n return differencInMinutes % 60 === 0\n ? {\n tag: \"absence_detail.absence_hours\",\n vars: {\n hoursCount: differencInHours.toString()\n }\n }\n : {\n tag: \"absence_detail.absence_hours_and_minutes\",\n vars: {\n hoursCount: differencInHours.toString(),\n minutesCount: (differencInMinutes % 60).toString()\n }\n };\n}\n\nexport default AbsenceClaimPage;\n","import Axios, { AxiosError, AxiosResponse } from \"axios\";\n\nconst TOP_LEVEL_LOGIN_ENDPOINT = \"/api/login\";\nconst MORNEAU_LOGIN_ENDPOINT = \"/api/login/morneau\";\nconst MORNINGSTAR_LOGIN_ENDPOINT = \"/api/login/morningstar\";\n\nexport enum ApiResponse {\n SUCCESS,\n NETWORK_ERROR,\n UNEXPECTED_ERROR,\n SERVER_ERROR,\n AUTHENTICATION_ERROR,\n VALIDATION_ERROR\n}\n\nexport type Capability = \"canReportAbsence\"; //| \"canDoOtherStuff\";\nexport type Capabilities = Record;\nexport type UserInfo = {\n capabilities: Capabilities;\n};\n\ntype LoginResponse =\n | {\n type: ApiResponse.NETWORK_ERROR | ApiResponse.UNEXPECTED_ERROR;\n }\n | {\n type: ApiResponse.SUCCESS;\n userInfo: UserInfo;\n }\n | {\n type: ApiResponse.VALIDATION_ERROR;\n errors: Partial;\n }\n | {\n type: ApiResponse.AUTHENTICATION_ERROR;\n message: { lockoutMinutes: number; attemptsRemaining: number };\n }\n | {\n type: ApiResponse.SERVER_ERROR;\n message: string;\n };\n\nexport type MorneauLoginCredentials = {\n lastName: string;\n employeeID: string;\n dateOfBirth: string;\n};\nexport async function submitMorneauLogin(\n companyCode: string,\n data: MorneauLoginCredentials\n): Promise> {\n try {\n const response = await Axios.post<\n MorneauLoginCredentials,\n AxiosResponse\n >(MORNEAU_LOGIN_ENDPOINT, { companyCode, ...data });\n\n return { type: ApiResponse.SUCCESS, userInfo: response.data };\n } catch (error) {\n return handleLoginError(error);\n }\n}\n\nexport type MorningstarLoginCredentials = {\n companyCode: string;\n employeeID: string;\n pin: string;\n};\nexport async function submitMorningstarLogin(\n data: MorningstarLoginCredentials\n): Promise> {\n try {\n const response = await Axios.post<\n MorningstarLoginCredentials,\n AxiosResponse\n >(MORNINGSTAR_LOGIN_ENDPOINT, data);\n\n return { type: ApiResponse.SUCCESS, userInfo: response.data };\n } catch (error) {\n return handleLoginError(error);\n }\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nfunction handleLoginError(error: any): LoginResponse {\n if (isAxiosError(error)) {\n if (error.response) {\n switch (error.response.status) {\n case 400:\n // This is the automatic error returned by the ApiController\n // https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-3.1#automatic-http-400-responses\n return {\n type: ApiResponse.VALIDATION_ERROR,\n errors: error.response.data.errors\n };\n case 401:\n return {\n type: ApiResponse.AUTHENTICATION_ERROR,\n message: {\n attemptsRemaining: error.response.data.attemptsRemaining,\n lockoutMinutes: error.response.data.lockoutMinutes\n }\n };\n default:\n return {\n type: ApiResponse.SERVER_ERROR,\n message: error.response.data.message\n };\n }\n } else if (error.request) {\n return { type: ApiResponse.NETWORK_ERROR };\n }\n }\n\n return { type: ApiResponse.UNEXPECTED_ERROR };\n}\n\nexport async function submitLogout(): Promise {\n try {\n await Axios.delete(TOP_LEVEL_LOGIN_ENDPOINT);\n return ApiResponse.SUCCESS;\n } catch (error) {\n return ApiResponse.UNEXPECTED_ERROR;\n }\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nfunction isAxiosError(obj: any): obj is AxiosError {\n return (obj as AxiosError).isAxiosError;\n}\n","import React from \"react\";\nimport styles from \"./table.module.scss\";\nimport clsx from \"clsx\";\n\ntype Header = {\n header: string;\n key: string;\n align?: string;\n};\n\ntype DesktopProps = {\n headers: Header[];\n data: Record[];\n footer?: Record;\n};\n\nexport const DesktopTable: React.FC = ({\n headers,\n data,\n footer\n}) => {\n const prepareCellClass = (align?: string) =>\n align\n ? clsx(styles[\"table-cell\"], styles[`table-cell--${align}`])\n : clsx(styles[\"table-cell\"], styles[\"table-cell--left\"]);\n\n return (\n <>\n \n \n \n {headers.map(header => (\n \n ))}\n \n \n \n {data.map((row, idx) => (\n \n {headers.map(header => (\n \n ))}\n \n ))}\n \n \n \n {footer &&\n headers.map(header => (\n \n ))}\n \n \n
\n {header.header}\n
\n {row[header.key] !== undefined ? row[header.key] : null}\n
\n {footer[header.key]}\n
\n \n );\n};\n\ntype MobileProps = {\n data: {\n upperHeader?: string;\n header?: string;\n lowerHeader?: string;\n footer?: string;\n }[];\n};\n\nexport const MobileTable: React.FC = ({ data }) => {\n return (\n
\n {data.map((cell, idx) => (\n
\n \n \n \n \n
\n ))}\n
\n );\n};\n","import React from \"react\";\nimport { IconButton } from \"components/buttons\";\nimport { ChevronBackIcon, ChevronNextIcon } from \"components/icons\";\nimport { useTranslation } from \"hooks/translation\";\nimport styles from \"./pagination.module.scss\";\nimport clsx from \"clsx\";\n\ntype Props = {\n allItemsNumber: number | string;\n pagesNumber: number;\n currentPage: number;\n numberOfRows: number;\n rowsPerPage: number;\n onChangePage: (page: number) => void;\n};\n\nconst Pagination: React.FC = ({\n allItemsNumber,\n pagesNumber,\n currentPage,\n numberOfRows,\n rowsPerPage,\n onChangePage\n}) => {\n const pages = [];\n const t = useTranslation();\n\n for (let i = 0; i < pagesNumber; i++) {\n pages.push(i + 1);\n }\n\n return (\n
\n
\n {t({\n tag: \"claims.pagination.pages\",\n vars: {\n start: ((currentPage - 1) * rowsPerPage + 1).toString(),\n end: ((currentPage - 1) * rowsPerPage + numberOfRows).toString(),\n all: allItemsNumber.toString()\n }\n })}\n
\n {pagesNumber > 1 && (\n <>\n onChangePage(currentPage - 1)}\n >\n \n \n {pages.map(page => (\n onChangePage(page)}\n >\n {page}\n
\n ))}\n onChangePage(currentPage + 1)}\n >\n \n \n \n )}\n \n );\n};\n\nexport default Pagination;\n","import React, { useState, useEffect } from \"react\";\nimport { renderToString } from \"react-dom/server\";\nimport { DesktopTable, MobileTable } from \"components/table/table\";\nimport Pagination from \"components/pagination/pagination\";\nimport { TimeIcon, MoonIcon } from \"components/icons\";\nimport { useDesktopBreakpoint } from \"hooks\";\nimport { useTranslation } from \"hooks/translation\";\nimport { formatTime, isTimeAfter } from \"shared-types/time\";\nimport { ClaimDate } from \"graphql-types.gen\";\nimport _ from \"lodash-es\";\nimport styles from \"./claim-child-details-table.module.scss\";\nimport clsx from \"clsx\";\nimport { useFormat } from \"hooks/format\";\n\ntype DesktopTableContent = {\n incidentNumber: number;\n date: string | JSX.Element;\n startTime: string;\n endTime: string;\n duration: number | null;\n unpaidTimeInMinutes?: string | number | null;\n};\n\ntype Header = {\n header: string;\n key: string;\n};\n\ntype MobileTableContent = {\n upperHeader?: string;\n header?: string;\n lowerHeader?: string;\n footer?: string;\n};\n\ntype Props = {\n absenceDates: (ClaimDate & { incidentNumber: number })[];\n};\n\nconst ClaimChildDetailsTable: React.FC = ({ absenceDates }) => {\n const [page, setPage] = useState(0);\n const [itemsNumber, setItemsNumber] = useState(0);\n const [desktopTableData, setDesktopTableData] = useState<\n DesktopTableContent[][]\n >([[]]);\n const [mobileTableData, setMobileTableData] = useState([\n {}\n ]);\n const [headers, setHeaders] = useState([]);\n const t = useTranslation();\n const { formatLocal } = useFormat();\n const isDesktop = useDesktopBreakpoint();\n\n useEffect(() => {\n absenceDates.sort((a, b) => {\n const aDate = a.startDate ? new Date(a.startDate).getTime() : 0;\n const bDate = b.startDate ? new Date(b.startDate).getTime() : 0;\n\n if (aDate > bDate) {\n return -1;\n }\n\n if (bDate > aDate) {\n return 1;\n }\n\n return 0;\n });\n\n const timeIcon = renderToString(\n \n );\n const moonIcon = renderToString(\n \n );\n\n const tableData = absenceDates.map(o => {\n const startTime = o.startDate ? o.startDate.split(\"T\")[1].split(\":\") : \"\";\n const startHours = Number(startTime[0]);\n const startMinutes = Number(startTime[1]);\n const startPeriod = startHours >= 12 ? \"pm\" : \"am\";\n const formattedStartHours = startHours % 12 || 12;\n const formattedStartTime = formatTime({\n hour: formattedStartHours,\n minute: startMinutes,\n period: startPeriod\n });\n\n const endTime = o.endDate ? o.endDate.split(\"T\")[1].split(\":\") : \"\";\n const endHours = Number(endTime[0]);\n const endMinutes = Number(endTime[1]);\n const endPeriod = endHours >= 12 ? \"pm\" : \"am\";\n const formattedEndHours = endHours % 12 || 12;\n const formattedEndTime = formatTime({\n hour: formattedEndHours,\n minute: endMinutes,\n period: endPeriod\n });\n\n let duration = 0;\n if (o.startDate && o.endDate) {\n const s = new Date(o.startDate).getTime();\n const e = new Date(o.endDate).getTime();\n const hourInMiliSec = 60 * 60 * 1000;\n\n duration = (e - s) / hourInMiliSec;\n }\n\n const isNightShift = isTimeAfter(\n {\n hour: formattedStartHours,\n minute: startMinutes,\n period: startPeriod\n },\n {\n hour: formattedEndHours,\n minute: endMinutes,\n period: endPeriod\n }\n );\n\n return {\n desktop: {\n incidentNumber: o.incidentNumber,\n date: o.startDate ? (\n
\n
\n {formatLocal(new Date(o.startDate), \"iiii, MMMM d, yyyy\")}\n
\n {isNightShift && (\n \n )}\n
\n ) : (\n \"\"\n ),\n startTime: formattedStartTime,\n endTime: formattedEndTime,\n duration,\n unpaidTimeInMinutes: o.unpaidTimeInMinutes || 0\n },\n mobile: {\n upperHeader: o.startDate\n ? formatLocal(new Date(o.startDate), \"iiii\")\n : \"\",\n header: `
${\n o.startDate\n ? formatLocal(new Date(o.startDate), \"MMMM d, yyyy\")\n : \"\"\n }${formattedStartTime} to ${formattedEndTime}
${\n isNightShift ? moonIcon : \"\"\n }
`,\n lowerHeader: `${timeIcon}${duration} hours|${o.unpaidTimeInMinutes || 0} minutes unpaid`,\n footer: `${t({ tag: \"claims.table.confirmation_number\" })}: ${\n o.incidentNumber\n }`\n }\n };\n });\n\n const desktopTableData = tableData.map(el => el.desktop);\n const mobileTableData = tableData.map(el => el.mobile);\n\n const headerTranslation: {\n [key: string]: { value: string; align: string };\n } = {\n incidentNumber: {\n value: t({ tag: \"claims.table.confirmation_number\" }),\n align: \"left\"\n },\n date: { value: t({ tag: \"claims.table.date\" }), align: \"left\" },\n startTime: {\n value: t({ tag: \"claims.table.start_time\" }),\n align: \"left\"\n },\n endTime: { value: t({ tag: \"claims.table.end_time\" }), align: \"left\" },\n duration: { value: t({ tag: \"claims.table.duration\" }), align: \"right\" },\n unpaidTimeInMinutes: {\n value: t({ tag: \"claims.table.unpaid_time_in_minutes\" }),\n align: \"right\"\n }\n };\n\n const keys = Object.keys(desktopTableData[0]);\n const headers: { key: string; header: string; align: string }[] = keys.map(\n key => ({\n key,\n header: headerTranslation[key].value,\n align: headerTranslation[key].align\n })\n );\n\n setItemsNumber(desktopTableData.length);\n setHeaders(headers);\n setDesktopTableData(_.chunk(desktopTableData, 10));\n setMobileTableData(mobileTableData);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [absenceDates]);\n\n const changePage = (page: number) => {\n setPage(page - 1);\n };\n\n return (\n <>\n {isDesktop ? (\n <>\n row.duration)\n ),\n unpaidTimeInMinutes: _.sum(\n _.map(\n _.flatten(desktopTableData),\n row => row.unpaidTimeInMinutes\n )\n )\n }}\n />\n
\n \n
\n \n ) : (\n \n )}\n \n );\n};\n\nexport default ClaimChildDetailsTable;\n","import React, { useState, useEffect } from \"react\";\nimport { StandardPage } from \"page-templates/standard\";\nimport ClaimChildDetailsTable from \"components/claimChildDetailsTable/claim-child-details-table\";\nimport { LoadingSpinner } from \"components/loading-spinner\";\nimport { ApiErrorView } from \"components/api-error/api-error-view\";\nimport { useApiRequest, useDesktopBreakpoint } from \"hooks\";\nimport { useTranslation } from \"hooks/translation\";\nimport { getClaimsService } from \"features/claims/claims-service\";\nimport { ViewAbsenceClaimAllDates } from \"routes\";\nimport { useRouteParams } from \"routes/definition\";\nimport { ClaimDesktopHeaderFragment, MobileHeaderFragment } from \"../helpers\";\nimport { ClaimDate } from \"graphql-types.gen\";\nimport _ from \"lodash-es\";\nimport styles from \"./absence-claim-all-dates.module.scss\";\n\ntype TableContent = ClaimDate & { incidentNumber: number };\n\nconst AbsenceClaimAllDatesPage: React.FC = () => {\n const params = useRouteParams(ViewAbsenceClaimAllDates);\n const t = useTranslation();\n const [absenceDates, setAbsenceDates] = useState([]);\n\n const caseId = parseInt(params.claimId, 10);\n\n const { data: absenceClaim, error, isLoading } = useApiRequest(\n async () => getClaimsService().loadAbsenceDetails(caseId),\n [params.claimId]\n );\n\n const isDesktop = useDesktopBreakpoint();\n\n useEffect(() => {\n if (absenceClaim) {\n const mappedAbsenceClaim = absenceClaim.absenceDates.map(claim => {\n let incidentNumber = absenceClaim.incidentId;\n\n if (absenceClaim.childIncidents?.length) {\n absenceClaim.childIncidents.forEach(child => {\n child?.claimDates.forEach(incident => {\n if (_.isEqual(claim, incident) && child?.incidentId) {\n incidentNumber = child.incidentId;\n }\n });\n });\n }\n\n return {\n incidentNumber,\n ...claim\n };\n });\n\n setAbsenceDates(mappedAbsenceClaim);\n }\n }, [absenceClaim]);\n\n return (\n \n isDesktop ? (\n \n ) : (\n \n
\n {t({\n tag: \"claims.table.header\",\n vars: {\n caseId: caseId.toString()\n }\n })}\n
\n
\n )\n }\n fixedPaneContents={\n isDesktop ? (\n
\n {t({\n tag: \"claims.table.header\",\n vars: {\n caseId: caseId.toString()\n }\n })}\n
\n ) : (\n
\n )\n }\n fixedPaneClassName={\n isDesktop ? undefined : styles[\"all-dates__fixed-pane--mobile\"]\n }\n >\n {isLoading || error ? (\n <>{isLoading ? : }\n ) : (\n absenceClaim && \n )}\n \n );\n};\n\nexport default AbsenceClaimAllDatesPage;\n","import React from \"react\";\nimport { ClaimSummary } from \"features/claims/claims-model\";\nimport { getClaimsService } from \"features/claims/claims-service\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { useApiRequest, useDesktopBreakpoint } from \"hooks\";\nimport { useTranslation } from \"hooks/translation\";\nimport { StandardPage } from \"page-templates/standard\";\nimport {\n ClaimDesktopHeaderFragment,\n MobileHeaderFragment\n} from \"pages/claims/helpers\";\nimport { LeavePolicy as LeavePolicyRoute } from \"routes\";\nimport { useRouteParams } from \"routes/definition\";\nimport styles from \"./leave-policy.module.scss\";\nimport { ClaimCard } from \"components/claim-card/claim-card\";\nimport { LoadingSpinner } from \"components/loading-spinner\";\nimport { ApiErrorView } from \"components/api-error/api-error-view\";\nimport { LeavePolicy } from \"features/claims/claims-model\";\nimport { PolicyRemainingPeriod } from \"components/policy-remaining-period/policy-remaining-period\";\nimport { Translation } from \"components/translation\";\n\nexport const LeavePolicyPage: React.FunctionComponent = () => {\n const params = useRouteParams(LeavePolicyRoute);\n const t = useTranslation();\n const isDesktop = useDesktopBreakpoint();\n const sessionService = getSessionService();\n\n const {\n isLoading: isLoadingPolicy,\n data: leavePolicy,\n error: policyError\n } = useApiRequest(async () => {\n return getClaimsService()\n .getLeavePolicySummary()\n .then(policies =>\n policies.find(policy => policy.policyCode === params.policyCode)\n );\n }, []);\n\n const {\n isLoading: isLoadingClaims,\n data: claims,\n error: claimsError\n } = useApiRequest(\n async () =>\n leavePolicy\n ? getClaimsService()\n .listClaims(sessionService.getUser()?.ee_no || \"\", [\n params.policyCode\n ])\n .then(result => result.claims)\n : [],\n [leavePolicy]\n );\n\n return (\n \n ctx.isDesktop ? (\n \n ) : (\n \n
\n {t(leavePolicy?.policyCodeLocale)}\n
\n
\n )\n }\n mobileHeaderWithBorder={true}\n >\n
\n {isLoadingPolicy || policyError ? (\n
\n {isLoadingPolicy ? : }\n
\n ) : (\n <>\n {isDesktop && leavePolicy && (\n
\n {t(leavePolicy?.policyCodeLocale)}\n
\n )}\n {leavePolicy && (\n
\n
\n
\n {t({ text: \"entitlement.maximum\" })}\n
\n \n {leavePolicy.total}\n \n <>{leavePolicy.unit}\n {leavePolicy.unit === \"weeks\" && leavePolicy.totalHours !== null && (\n <>\n {/* Separator */}\n {leavePolicy.totalHours !== null && (\n <>\n \n {leavePolicy.totalHours}\n {\" \"}\n {t({ tag: \"timePeriods.hours\" })}\n \n )}\n \n )}\n
\n
\n )}\n {leavePolicy && (\n
\n
\n
{t({ text: \"entitlement.used\" })}
\n \n {leavePolicy?.used}\n \n <>{leavePolicy.unit}\n {leavePolicy.unit === \"weeks\" && leavePolicy.usedHours !== null && (\n <>\n {/* Separator */}\n {leavePolicy.usedHours !== null && (\n <>\n \n {leavePolicy.usedHours}\n {t({ tag: \"timePeriods.hours\" })}\n \n )}\n \n )}\n
\n
\n )}\n\n {leavePolicy && (\n
\n
\n
{t({ text: \"entitlement.remaining\" })}
\n \n {leavePolicy?.remaining}\n \n <>{leavePolicy.unit}\n {leavePolicy.unit === \"weeks\" && leavePolicy.remainingHours !== null && (\n <>\n {/* Separator */}\n {leavePolicy.remainingHours !== null && (\n <>\n \n {leavePolicy.remainingHours}\n {t({ tag: \"timePeriods.hours\" })}\n \n )}\n \n )}\n
\n
\n )}\n \n )}\n {leavePolicy?.unit === \"weeks\" && (\n
\n {t({ text: \"entitlement.disclaimer\" })}\n
\n )}\n\n {isLoadingClaims || claimsError ? (\n
\n {isLoadingClaims ? : }\n
\n ) : (\n <>\n {leavePolicy && !policyError && !isLoadingPolicy && (\n <>\n
\n {t({\n tag: \"leave-policy.claims_list_header\",\n vars: {\n policyName: t(leavePolicy?.policyCodeLocale)\n }\n })}\n
\n {(claims ?? []).length > 0 && (\n
\n {claims?.map(claim => (\n \n ))}\n
\n )}\n {claims?.length === 0 && (\n
\n \n

\n {t({\n tag: \"leave-policy.no_claims\",\n vars: {\n policyName: t(leavePolicy?.policyCodeLocale)\n }\n })}\n

\n

\n \n

\n
\n )}\n \n )}\n \n )}\n
\n \n );\n};\n","import React from \"react\";\n\ninterface State {\n hasError: boolean;\n error?: Error;\n info?: string;\n}\n\nconst apiURL = process.env.REACT_APP_ABILITI_API_REST_URL;\nconst pingUrl = apiURL + \"/config/v1.0/webconfig/test\";\nconst desc = \" ENV: \" + process.env.NODE_ENV + \" API URL: \" + apiURL;\n\nclass AppHealth extends React.Component {\n constructor(props: unknown) {\n super(props);\n\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error) {\n return { hasError: true, error };\n }\n\n public componentDidMount() {\n fetch(pingUrl)\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n .then(res => {\n if (res.ok) {\n return res.text();\n }\n this.setState({\n hasError: true,\n info: \"API error [\" + res.statusText + \"]\"\n });\n throw new Error(\"Network response was not ok.\");\n })\n .then(text => this.setState({ info: text }))\n .catch(error => {\n console.error(\"error\", error);\n });\n }\n\n render() {\n if (this.state.hasError) {\n return \"Unhealthy - \" + this.state.info + \" \" + desc;\n }\n if (!this.state.info) {\n return \"Unhealthy - api\" + desc;\n }\n\n return \" Healthy \" + desc + \" response: \" + this.state.info;\n }\n}\n\nexport default AppHealth;\n","import React, { lazy } from \"react\";\nimport { Redirect, Route, Switch } from \"react-router\";\nimport * as Routes from \"./routes\";\nimport { Logout } from \"auth/logout\";\nimport { LogoutCallback } from \"auth/logoutCallback\";\nimport { SilentRenew } from \"auth/silentRenew\";\nimport { NotFoundPage } from \"pages/not-found\";\nimport { AuthenticatedRoute } from \"auth/authenticated-route\";\nimport { Callback } from \"auth/callback\";\nimport { DashboardPage } from \"pages/dashboard/dashboard\";\nimport FmlClaimPage from \"pages/claims/fml-claim\";\nimport StdClaimPage from \"pages/claims/std-claim\";\nimport { ClaimsListPage } from \"pages/claims/claims-list\";\nimport { ClaimsHistoryPage } from \"pages/claims/claims-history\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { ApplicationRestrictionView } from \"pages/application-access/application-restriction\";\nimport AbsenceClaimPage from \"pages/claims/absence/absence-claim\";\nimport AbsenceClaimAllDatesPage from \"pages/claims/absence/absence-claim-all-dates\";\nimport { LeavePolicyPage } from \"pages/leave-policy/leave-policy\";\nimport AppHealth from \"./pages/health\";\n\nconst ReportAbsencePage = lazy(async () => import(\"./pages/report-absence\"));\n\nexport const AppRoutes: React.FunctionComponent = () => {\n const sessionService = getSessionService();\n const isCICUser = sessionService.isCICUser();\n\n return (\n \n \n\n \n \n \n\n \n {isCICUser ? (\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};\n\nexport default AppRoutes;\n","import React, { useContext, useState } from \"react\";\nimport { useSessionStorage } from \"hooks\";\nimport { Capabilities } from \"api\";\n\ntype Session =\n | { isLoggedIn: false }\n | {\n isLoggedIn: true;\n capabilities: Capabilities;\n };\n\nconst DEFAULT_SESSION: Session = { isLoggedIn: false };\n\ninterface SessionContextType {\n session: Session;\n setSession: (session: Session) => void;\n clearSession: () => void;\n}\n\nconst SessionContext = React.createContext(\n undefined\n);\n\nexport const BrowserSessionProvider: React.FunctionComponent = props => {\n // Persist to sessionStorage as well so that state is not lost if the user reloads the page\n const [storedSession, setStoredSession] = useSessionStorage(\n \"userSession\",\n DEFAULT_SESSION\n );\n const [sessionState, setSessionState] = useState(storedSession);\n const setSession = (newSession: Session) => {\n setStoredSession(newSession);\n setSessionState(newSession);\n };\n const clearSession = () => setSession(DEFAULT_SESSION);\n\n return (\n \n {props.children}\n \n );\n};\n\n/**\n * This provider should only be used in tests.\n */\ntype TestingProps = { initialSession?: Session };\nexport const MemorySessionProvider: React.FunctionComponent = props => {\n const [session, setSession] = useState(\n props.initialSession || DEFAULT_SESSION\n );\n const clearSession = () => setSession(DEFAULT_SESSION);\n\n return (\n \n {props.children}\n \n );\n};\n\nexport const useSessionContext: () => SessionContextType = () => {\n const context = useContext(SessionContext);\n if (context === undefined) {\n throw new Error(\"useSessionContext requires a SessionProvider\");\n }\n return context;\n};\n","import React from \"react\";\nimport styles from \"./styles.module.scss\";\nimport { ContainedButton, TextButton } from \"components/buttons\";\nimport { Translation } from \"components/translation\";\nimport { countdownTimerFromSeconds } from \"shared-types/time\";\nimport { cloneDeep } from \"lodash-es\";\nimport { BaseModal, modalStyle } from \"components/base-modal/base-modal\";\nimport { useTranslation } from \"hooks/translation\";\n\ntype ModalProps = {\n isOpen: boolean;\n timeLeft: number;\n logout: () => void;\n closeModal: () => void;\n};\n\nconst IdleModal = ({ isOpen, timeLeft, logout, closeModal }: ModalProps) => {\n const t = useTranslation();\n\n const idlePopupStyles = cloneDeep(modalStyle);\n if (idlePopupStyles.content) {\n idlePopupStyles.content.maxWidth = \"500px\";\n }\n\n return (\n \n
\n

\n \n

\n\n

\n {countdownTimerFromSeconds(timeLeft)}\n

\n\n
\n \n \n \n\n \n \n \n
\n
\n \n );\n};\n\nexport default IdleModal;\n","import { useApolloClient } from \"@apollo/client\";\nimport { submitLogout } from \"api\";\nimport { useSessionContext } from \"context/session-context\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport IdleTimer from \"react-idle-timer\";\nimport { useHistory } from \"react-router\";\nimport * as Routes from \"routes\";\nimport IdleModal from \"./idle-modal\";\n\nconst IDLE_TIMEOUT = parseInt(\n process.env.REACT_APP_IDLE_TIMEOUT_MINUTES || \"14\"\n); // minutes\nconst MODAL_DURATION = 60; // seconds\n\nconst IdleContainer = () => {\n const { clearSession } = useSessionContext();\n const history = useHistory();\n const apolloClient = useApolloClient();\n\n const setTimeoutRef = useRef(null);\n const [modalIsOpen, setModalIsOpen] = useState(false);\n const [timeLeft, setTimeLeft] = useState(MODAL_DURATION);\n\n const openModal = () => {\n setModalIsOpen(true);\n };\n\n const closeModal = () => {\n setModalIsOpen(false);\n };\n\n const logout = async () => {\n await submitLogout();\n // TODO Consolidate logout with LogoutButton\n apolloClient.stop();\n await apolloClient.resetStore();\n clearSession();\n\n history.push(Routes.Logout.generate({}));\n closeModal();\n };\n\n useEffect(() => {\n if (!modalIsOpen) {\n setTimeLeft(MODAL_DURATION);\n } else {\n if (timeLeft === 0) {\n void logout();\n }\n\n setTimeout(() => setTimeLeft(timeLeft - 1), 1000);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [timeLeft, modalIsOpen]);\n\n const idleTimeoutMs = IDLE_TIMEOUT * 60 * 1000;\n\n return (\n <>\n \n \n \n );\n};\n\nexport default IdleContainer;\n","import React from \"react\";\nimport styles from \"./logout-modal.module.scss\";\nimport { ContainedButton, TextButton } from \"components/buttons\";\nimport { Translation } from \"components/translation\";\nimport { cloneDeep } from \"lodash-es\";\nimport { BaseModal, modalStyle } from \"components/base-modal/base-modal\";\nimport { useTranslation } from \"hooks/translation\";\n\ntype ModalProps = {\n isOpen: boolean;\n logout: () => void;\n closeModal: () => void;\n};\n\nconst LogoutModal = ({ isOpen, logout, closeModal }: ModalProps) => {\n const t = useTranslation();\n\n const logoutPopupStyles = cloneDeep(modalStyle);\n if (logoutPopupStyles.content) {\n logoutPopupStyles.content.width = \"auto\";\n }\n\n return (\n \n
\n
\n \n \n \n\n \n \n \n
\n
\n \n );\n};\n\nexport default LogoutModal;\n","import { useApolloClient } from \"@apollo/client\";\nimport { submitLogout } from \"api\";\nimport { useSessionContext } from \"context/session-context\";\nimport React from \"react\";\nimport { useHistory } from \"react-router\";\nimport * as Routes from \"routes\";\nimport LogoutModal from \"./logout-modal\";\nimport { useLogoutModalContext } from \"context/logout-modal-context\";\n\nconst LogoutContainer = () => {\n const { clearSession } = useSessionContext();\n const { isOpen, setIsOpen } = useLogoutModalContext();\n const history = useHistory();\n const apolloClient = useApolloClient();\n\n const closeModal = () => {\n setIsOpen(false);\n };\n\n const logout = async () => {\n await submitLogout();\n apolloClient.stop();\n await apolloClient.resetStore();\n clearSession();\n\n history.push(Routes.Logout.generate({}));\n closeModal();\n };\n\n return (\n \n );\n};\n\nexport default LogoutContainer;\n","import React, { Suspense } from \"react\";\nimport { UserLanguageProvider } from \"context/user-language-context\";\nimport { TranslationProvider } from \"context/translation-context\";\nimport { AppRoutes } from \"app.routes\";\nimport Modal from \"react-modal\";\nimport IdleContainer from \"components/idle-container/idle-container\";\nimport { LogoutModalProvider } from \"context/logout-modal-context\";\nimport LogoutContainer from \"components/logout-modal/logout-container\";\nimport { LoadingSpinner } from \"components/loading-spinner\";\nimport { AppInsightsContext } from \"@microsoft/applicationinsights-react-js\";\nimport { reactPlugin } from \"./app-insights/appInsights\";\n\n// Include the standard styles for the app\nrequire(\"styles/main.scss\");\n\nModal.setAppElement(\"#root\");\n\nexport const App: React.FunctionComponent = () => {\n console.info(`version info: ${process.env.REACT_APP_VERSION_INFO}`);\n\n return (\n }>\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import React, { useEffect } from \"react\";\nimport { useHistory } from \"react-router\";\n\n/**\n * Reset the scroll position to the top of the page when the location changes.\n */\nconst ScrollToTop: React.FC = () => {\n const history = useHistory();\n\n useEffect(() => {\n const unlisten = history.listen(() => {\n window.scrollTo(0, 0);\n });\n return unlisten;\n }, [history]);\n\n return null;\n};\n\nexport default ScrollToTop;\n","// IMPORTANT:\n// the following lines are polyfills for IE11 and must be the first lines.\nimport \"react-app-polyfill/ie11\";\nimport \"react-app-polyfill/stable\";\n//\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\nimport { App } from \"app\";\nimport { ApolloProvider } from \"@apollo/client\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport { CookiesProvider } from \"react-cookie\";\n\nimport { enableES5 } from \"immer\";\nimport { AuthProvider } from \"auth/auth-provider\";\nimport { WebConfigurationContextProvider } from \"context/web-configuration-context\";\nimport { BrowserSessionProvider } from \"context/session-context\";\nimport { Tooltip } from \"components/tool-tip\";\nimport { getApiGraphQL } from \"api/api-graphql\";\nimport ScrollToTop from \"components/scroll-to-top/scroll-to-top\";\n\nimport { getSessionService } from \"features/session/session-service\";\n\nenableES5();\n\nconst client = getApiGraphQL();\n\ngetSessionService().resetSessionToken();\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pagination__container\":\"pagination_pagination__container__hR0iG\",\"pagination__items\":\"pagination_pagination__items___96ZQ\",\"pagination__button\":\"pagination_pagination__button__3T5Mw\",\"pagination__button--prev\":\"pagination_pagination__button--prev__2HInC\",\"pagination__page-number\":\"pagination_pagination__page-number__3FApI\",\"pagination__page-number--active\":\"pagination_pagination__page-number--active__11MW6\"};","import { enUS, frCA, es, enCA } from \"date-fns/locale\";\n\n// Correspond to ISO 639-1 language codes + country code\nexport enum SupportedLanguage {\n EnglishCA = \"en-CA\",\n EnglishUS = \"en-US\",\n FrenchCA = \"fr-CA\",\n Spanish = \"es\"\n}\n\nexport const getParentLocaleCode = (langCode: string) => {\n const lang = getLanguageFromCode(langCode);\n return getParentLanguageCode(lang);\n};\n\nexport const getParentLanguageCode = (lang: SupportedLanguage) => {\n switch (lang) {\n case SupportedLanguage.FrenchCA:\n return \"fr\";\n case SupportedLanguage.Spanish:\n return \"es\";\n }\n return \"en\";\n};\n\nexport const getLanguageFromCode = (langCode: string): SupportedLanguage => {\n switch (langCode) {\n case \"en\":\n case \"EN\":\n case SupportedLanguage.EnglishCA:\n return SupportedLanguage.EnglishCA;\n\n case SupportedLanguage.EnglishUS:\n return SupportedLanguage.EnglishUS;\n\n case \"fr\":\n case \"FR\":\n case SupportedLanguage.FrenchCA:\n return SupportedLanguage.FrenchCA;\n\n case SupportedLanguage.Spanish:\n return SupportedLanguage.Spanish;\n\n default:\n return SupportedLanguage.EnglishCA;\n }\n};\n\nexport const getLocale = (langCode: string) => {\n const lang = getLanguageFromCode(langCode);\n switch (lang) {\n case SupportedLanguage.EnglishUS:\n return enUS;\n\n case SupportedLanguage.FrenchCA:\n return frCA;\n case SupportedLanguage.Spanish:\n return es;\n }\n return enCA;\n};\n\nexport const matchLocales = (code1: string, code2?: string) =>\n code2 && getLanguageFromCode(code1) === getLanguageFromCode(code2);\n","import React, { useState, useContext, useEffect } from \"react\";\nimport { useSessionStorage } from \"hooks\";\nimport { getWebConfigurationService } from \"features/config/web-configuration-service\";\n\ntype webConfigurationType = {\n clientCode?: string;\n instanceId?: string;\n logoFile?: string;\n canUploadDocumentsLeaves?: boolean;\n canUploadingDocumentsWCB?: boolean;\n canUploadingDocumentsDM?: boolean;\n \n};\n\ninterface webConfigurationStateType {\n webConfigurationContext: webConfigurationType;\n}\n\nconst webConfigurationInitialState: webConfigurationType = {};\n\nconst WebConfigurationContext = React.createContext<\n webConfigurationStateType | undefined\n>(undefined);\n\nexport const WebConfigurationContextProvider: React.FunctionComponent = props => {\n // Persist to sessionStorage as well so that state is not lost if the user reloads the page\n const [\n storedSession,\n setStoredContext\n ] = useSessionStorage(\n \"webConfigurationContext\",\n webConfigurationInitialState\n );\n const [sessionState] = useState(storedSession);\n\n const fetchConfigdata = async (url: string): Promise => {\n if (storedSession == null || storedSession.clientCode == null) {\n await getWebConfigurationService()\n .getWebConfigurationByUrl(url)\n .then(result => {\n setStoredContext({\n clientCode: result.clientCode,\n instanceId: result.instanceId,\n logoFile: result.logoFile && result.logoFile.content,\n canUploadDocumentsLeaves: result.canUploadDocumentsLeaves,\n canUploadingDocumentsDM: result.canUploadingDocumentsDM,\n canUploadingDocumentsWCB: result.canUploadingDocumentsWCB\n });\n });\n }\n };\n\n useEffect(() => {\n //load the web configuration\n fetchConfigdata(window.location.origin).catch(err => {\n console.error(err);\n });\n });\n\n return (\n \n {props.children}\n \n );\n};\n\nexport const useWebConfigurationContext: () => webConfigurationStateType = () => {\n const context = useContext(WebConfigurationContext);\n if (context === undefined) {\n throw new Error(\"webConfigurationContext requires a Provider\");\n }\n return context;\n};\n","import React, { useState, useContext } from \"react\";\n\ntype LogoutModalContextProps = {\n isOpen: boolean;\n setIsOpen: (isOpen: boolean) => void;\n};\n\nexport const LogoutModalContext = React.createContext({\n isOpen: false,\n setIsOpen: () => {\n // Default function will noop, override using a Provider\n }\n});\n\n// 2020-10-01 (AZ) - This Context represents the open state of the LogoutModal\n// component. Moving the LogoutModal outside of the component that opens it\n// ensures that the modal isn't accidentally removed from the DOM if the parent\n// component is removed. (e.g. trying to click \"logout\" from the mobile menu clicks\n// outside of the menu which closes it, and prevents the logout function from being\n// called)\nexport const LogoutModalProvider: React.FunctionComponent = props => {\n const [isOpen, setIsOpen] = useState(false);\n return (\n \n {props.children}\n \n );\n};\n\nexport const useLogoutModalContext: () => LogoutModalContextProps = () => {\n return useContext(LogoutModalContext);\n};\n","import { AbsenceConfig, WorkShift } from \"features/report-absence/incident\";\nimport { first } from \"lodash-es\";\nimport { makeTime } from \"shared-types/time\";\n\nexport function getDefaultShift(shiftOptions?: WorkShift[]): WorkShift {\n return (\n shiftOptions?.find(so => so.isDefault) ??\n first(shiftOptions) ??\n FALLBACK_SHIFT\n );\n}\n\nexport function getWorkShiftOptions(\n config?: AbsenceConfig | null\n): WorkShift[] {\n return config && config.workShifts.length > 0\n ? config.workShifts\n : [FALLBACK_SHIFT];\n}\n\nconst FALLBACK_SHIFT: WorkShift = {\n startTime: makeTime(9, 0, \"am\"),\n endTime: makeTime(5, 0, \"pm\"),\n order: 0,\n isDefault: true\n};\n","import { ApplicationInsights } from \"@microsoft/applicationinsights-web\";\nimport {\n BehaviorMapValidator,\n ClickAnalyticsPlugin\n} from \"@microsoft/applicationinsights-clickanalytics-js\";\nimport { createBrowserHistory } from \"history\";\nimport { ReactPlugin } from \"@microsoft/applicationinsights-react-js\";\n\nconst browserHistory = createBrowserHistory({ basename: \"\" });\nconst reactPlugin = new ReactPlugin();\nconst clickPluginInstance = new ClickAnalyticsPlugin();\nlet logMsg = \"\";\n\n// Click Analytics configuration\nconst behaviorMap = {\n CLICK: 1\n};\n\nconst clickPluginConfig = {\n autoCapture: true,\n dataTags: {\n customDataPrefix: \"data-custom-\",\n useDefaultContentNameOrId: true\n },\n behaviorValidator: BehaviorMapValidator(behaviorMap),\n dropInvalidEvents: true\n};\n\nconst config = {\n instrumentationKey: process.env.REACT_APP_INSIGHTS_KEY,\n extensions: [clickPluginInstance, reactPlugin],\n extensionConfig: {\n [clickPluginInstance.identifier]: clickPluginConfig,\n [reactPlugin.identifier]: { history: browserHistory }\n }\n};\n\nconst appInsights = new ApplicationInsights({ config });\n\nif (process.env.REACT_APP_INSIGHTS_KEY) {\n appInsights.loadAppInsights();\n}\n\nconst appInsightLog = (msg: string) =>\n process.env.REACT_APP_INSIGHTS_KEY && appInsights.trackEvent({ name: msg });\n\nconst appInsightLogQuestion = (msg: string) => {\n if (logMsg !== msg) {\n process.env.REACT_APP_INSIGHTS_KEY && appInsights.trackEvent({ name: msg });\n logMsg = msg;\n }\n};\n\nconst appInsightSetUserId = (id: string) => {\n if (process.env.REACT_APP_INSIGHTS_KEY) {\n appInsights.context.user.id = id;\n }\n};\n\nexport {\n reactPlugin,\n appInsights,\n appInsightLog,\n appInsightLogQuestion,\n appInsightSetUserId\n};\n","import {\n AbsenceAlert,\n AbsenceQuestionsPage,\n EntityLocale,\n NewEployeeQuestionsSection\n} from \"./absence-questions\";\nimport { LocaleTextEntry, LocaleTexts } from \"shared-types/api\";\nimport { parseISO } from \"date-fns\";\nimport { Time } from \"shared-types/time\";\nimport { AbsenceDateModel } from \"graphql-types.gen\";\nimport { matchLocales } from \"features/translations/locales\";\n\nexport type AbsenceShift = {\n isPartialAbsence: boolean;\n shiftEndTime: Date;\n shiftStartTime: Date;\n scheduledShiftEndTime?: Date;\n scheduledShiftStartTime?: Date;\n};\n\nexport type QuestionResponse = {\n key: string;\n value: string;\n};\n\nexport type AbsenceType = \"continuous\" | \"intermittent\";\n\nexport type AbsenceIncidentLinkability = (\n | {\n canBeLinked?: false;\n }\n | {\n canBeLinked: true;\n latestDate: Date;\n isLinked?: boolean;\n totalNoOfDaysReportedExcludingCurrent?: number;\n }\n) & {\n cache?: unknown;\n};\n\nexport type AbsenceIncident = {\n primaryReason: string;\n secondaryReason?: string;\n absenceDates: AbsenceShift[];\n absenceIncidentId?: number;\n bestPhoneNumber?: string;\n firstName?: string;\n lastName?: string;\n requestDate?: Date;\n returnToWorkDate?: Date;\n questionResponses?: QuestionResponse[];\n absenceType?: AbsenceType;\n linkability: AbsenceIncidentLinkability;\n employeeNumber?: string;\n clientCode?: string;\n claimStatus?: string;\n maxDaysAllowed?: number;\n maxReportableDays?: number;\n};\n\nexport type SubAnswer = {\n answerId: string;\n locales: LocaleTextEntry[];\n reportableDaysInFuture: number | null;\n reportableDaysInPast: number | null;\n};\n\nexport type AbsenceReasonAnswerInfo = {\n answerId: string;\n maxDaysAllowed: number | null;\n reportableDaysInFuture: number | null;\n reportableDaysInPast: number | null;\n locales: LocaleTextEntry[];\n subAnswers: SubAnswer[];\n imageUrl?: string;\n};\n\nexport type AbsenceReason = {\n answers: AbsenceReasonAnswerInfo[];\n};\n\nexport type AbsenceConfig = {\n reasonOfAbsence: AbsenceReason;\n isPartialAbsences: boolean;\n displayRTWDateContinuous: boolean;\n displayRTWDateIntermittent: boolean;\n isRTWDateMandatoryContinuous: boolean;\n isRTWDateMandatoryIntermittent: boolean;\n absenceDurationMinutes: number;\n minimumThresholdForContinousAbsence?: number;\n workScheduleInfo: WorkScheduleInfo;\n linkedIncidentsLookbackThresholdDays?: number;\n workShifts: WorkShift[];\n closingScripts?: LocaleTexts[];\n aR3ReportAbsenceButtonTextConfiguration?: LocaleTexts[] | undefined;\n aR3IvrConfiguration?: AR3IvrConfiguration;\n};\n\nexport type AddNewEmployeePermission = {\n showAddNewEmployeeLink: boolean;\n};\n\nexport type EmployeeVerificationFields = {\n pageId?: string | null;\n pageHeading?: EntityLocale[] | null;\n pageHeadingDescription?: EntityLocale[] | null;\n sections?: NewEployeeQuestionsSection[];\n};\n\nexport type OrganizationModel = {\n organizationId: number;\n organizationLevel?: number | null;\n organizationName?: string | null;\n};\n\nexport type OrganizationHierarchy = OrganizationModel & {\n childOrganizations?: OrganizationModel[] | null;\n};\n\nexport type WorkShiftForDate = {\n date: string;\n shift: WorkShift;\n};\n\nexport type WorkScheduleInfo = {\n scheduleOverrideWarning: boolean;\n warningMessages: LocaleTextEntry[];\n};\n\nexport type WorkShift = {\n startTime: Time;\n endTime: Time;\n isDefault: boolean;\n order: number;\n};\n\nexport type AR3IvrConfiguration = {\n maxShiftLengthThresholdInMinutes: number;\n};\n\nexport type IncidentClosingScript = {\n closingScriptId: string;\n text: {\n locale: string;\n description: string;\n }[];\n};\n\nexport type IncidentQuestionModel = {\n questions: AbsenceQuestionsPage[];\n preQualifyingQuestions: AbsenceQuestionsPage[];\n reasonOfAbsenceAlerts: AbsenceAlert[];\n};\n\nexport type ApiValidationError = {\n errorCode: string;\n errorDescription: string;\n errorFields: string[];\n errorDescriptionLocales?: {\n description: string;\n locale: string;\n }[];\n};\n\nexport type IncidentSaveResult = {\n returnValue?: {\n absenceIncidentModel: AbsenceIncident;\n absenceQuestionReturnModel: IncidentQuestionModel;\n };\n success: boolean;\n validationErrors: ApiValidationError[];\n};\n\nexport type ApiCallResult = {\n success: boolean;\n validationErrors: {\n errorCode: string;\n errorDescription: string;\n errorFields: string[];\n errorDescriptionLocales?: {\n description: string;\n locale: string;\n }[];\n }[];\n};\n\nexport type IncidentSubmitResult = {\n returnValue?: {\n absenceIncidentModel: AbsenceIncident;\n closingScripts: IncidentClosingScript[];\n };\n success: boolean;\n validationErrors: {\n errorCode: string;\n errorDescription: string;\n errorFields: string[];\n errorDescriptionLocales?: {\n description: string;\n locale: string;\n }[];\n }[];\n};\n\nexport type IncidentsCancelResult = {\n success: boolean;\n validationErrors?: {\n errorCode: string;\n errorDescription: string;\n errorFields: string[];\n errorDescriptionLocales?: {\n description: string;\n locale: string;\n }[];\n }[];\n};\n\nexport type InProgressAbsencesResult = {\n primaryReason: string;\n absenceDates: AbsenceDateModel[];\n claimStatus?: string | null;\n reportedBy?: string | null;\n absenceIncidentId: number;\n};\n\nexport type LatestInProgressAbsenceResult = {\n absenceIncidentId: number;\n};\n\nexport const emptyIncident = (): AbsenceIncident => {\n return {\n primaryReason: \"\",\n absenceDates: [],\n linkability: { canBeLinked: undefined }\n };\n};\n\nexport const mapIncidentTypes = (incident: AbsenceIncident) => {\n incident.absenceDates.forEach(d => {\n d.shiftStartTime = parseISO(d.shiftStartTime.toString());\n d.shiftEndTime = parseISO(d.shiftEndTime.toString());\n d.scheduledShiftStartTime = d.scheduledShiftStartTime\n ? parseISO(d.scheduledShiftStartTime.toString())\n : undefined;\n d.scheduledShiftEndTime = d.scheduledShiftEndTime\n ? parseISO(d.scheduledShiftEndTime.toString())\n : undefined;\n });\n\n if (incident.returnToWorkDate) {\n incident.returnToWorkDate = parseISO(incident.returnToWorkDate.toString());\n }\n\n if (incident.linkability && incident.linkability.canBeLinked) {\n incident.linkability = {\n ...incident.linkability,\n latestDate: parseISO(incident.linkability.latestDate.toString())\n };\n }\n};\n\nexport const localizeError = (locale?: string, error?: ApiValidationError) => {\n if (locale && error?.errorDescriptionLocales) {\n const l = error.errorDescriptionLocales.find(l =>\n matchLocales(l.locale, locale)\n );\n if (l?.description) error.errorDescription = l.description;\n }\n return error;\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"btn\":\"styles_btn__3JtbO\",\"btn--contained\":\"styles_btn--contained__1Nzdq\",\"readonly\":\"styles_readonly__1k_6f\",\"btn--outlined\":\"styles_btn--outlined__30WNT\",\"btn--icon\":\"styles_btn--icon__1hOke\",\"btn--text\":\"styles_btn--text__1hpc_\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"tag_container__2AAjL\",\"clickable\":\"tag_clickable__3fI1o\",\"green\":\"tag_green__3nRKK\",\"blue\":\"tag_blue__1cGzq\",\"gray\":\"tag_gray__1oP3Q\",\"red\":\"tag_red__3r_9S\",\"orange\":\"tag_orange__hUvSO\",\"purple\":\"tag_purple__2s_jN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"api-error-cases\":\"api-error-view_api-error-cases__1A1Mk\",\"icon\":\"api-error-view_icon__kvmRD\",\"head\":\"api-error-view_head__1_zH9\",\"context\":\"api-error-view_context__2PliV\",\"report-absence\":\"api-error-view_report-absence__1UjOb\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"policy\":\"policy_policy__1ekLd\",\"name\":\"policy_name__Vp0KP\",\"days-left\":\"policy_days-left__34mST\",\"number\":\"policy_number__1jCs_\",\"hours\":\"policy_hours__1MztO\",\"link\":\"policy_link__9t1m1\"};","import { useLanguageContext } from \"context/user-language-context\";\nimport { useTranslationContext } from \"context/translation-context\";\nimport { ClientTranslationProps } from \"i18n\";\nimport { LocaleTexts, textForLang } from \"shared-types/api\";\nimport { AppContext } from \"context/app-context\";\nimport { TranslationStruct } from \"features/translations/translation-model\";\n\n/**\n * Get a translation function for the user's currently selected language.\n * The source argument may be either a ClientTranslationProps (tag-based client-side strings)\n * or LocaleText[] (for text from the API).\n */\nexport function useTranslation(): TranslationFunction {\n const { currentLang } = useLanguageContext();\n const { getLocalizedString } = useTranslationContext();\n\n return source => {\n if (source === undefined) {\n return \"\";\n } else if (Array.isArray(source)) {\n return textForLang(source as LocaleTexts, currentLang);\n } else {\n const serverTranslation = AppContext.getTranslations().translate(\n //check for Translation API entry\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n source as any\n );\n if (serverTranslation) return serverTranslation;\n return getLocalizedString(source as ClientTranslationProps, currentLang);\n }\n };\n}\n\ntype TranslationFunction = (\n source:\n | TranslationStruct\n | ClientTranslationProps\n | LocaleTexts\n | string\n | undefined\n) => string;\n","import { getApiGraphQL } from \"./api-graphql\";\nimport { gql } from \"@apollo/client\";\nimport { parse, parseISO } from \"date-fns\";\nimport {\n EmployeeHistory,\n EmployeeSchedule,\n CheckEmployeeByNumber,\n EmployeeScheduleDate,\n IEmployeeService,\n PreviousAbsence,\n QuickSearchEmployee,\n SearchCompanies,\n EmployeeData\n} from \"features/employee/employee-model\";\nimport _ from \"lodash-es\";\nimport {\n EmployeeScheduleQuery,\n Maybe,\n MyAbsencesQuery,\n ScheduleDate,\n QuickSearchEmployeeQuery,\n CheckEmployeeByNumberQuery,\n EsEmployeeByEeNumberQuery,\n SearchCompaniesQuery,\n CompaniesCountQuery\n} from \"graphql-types.gen\";\nimport { hasValue } from \"utils/util\";\n\nexport class ApiEmployeeService implements IEmployeeService {\n getSchedule = async (\n clientCode: string,\n employeeNumber: string,\n from?: Date,\n to?: Date\n ) =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query EmployeeSchedule(\n $clientCode: String!\n $employeeNumber: String!\n $from: DateTime\n $to: DateTime\n ) {\n schedule(\n clientCode: $clientCode\n employeeNumber: $employeeNumber\n start: $from\n end: $to\n ) {\n dates {\n date\n hoursWorked\n }\n }\n }\n `,\n variables: {\n clientCode,\n employeeNumber,\n from: from?.toISOString(),\n to: to?.toISOString()\n }\n })\n .then(result => {\n const dates = result.data?.schedule?.dates ?? [];\n resolve({ dates: this.parseDates(dates) });\n })\n .catch(error => {\n reject(error);\n });\n });\n\n checkEmployeeByNumber = async (clientCode: string, employeeNumber: string) =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query CheckEmployeeByNumber(\n $clientCode: String\n $employeeNumber: String\n ) {\n checkEmployeeByNumber(\n clientCode: $clientCode\n employeeNumber: $employeeNumber\n ) {\n employeeNumber\n firstName\n lastName\n hasAccess\n employeeId\n }\n }\n `,\n variables: {\n clientCode,\n employeeNumber\n }\n })\n .then(result => {\n resolve(result?.data?.checkEmployeeByNumber || null);\n })\n .catch(error => {\n reject(error);\n });\n });\n\n getEmployeeData = async (clientCode: string, employeeNumber: string) =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query eSEmployeeByEENumber(\n $clientCode: String!\n $employeeNumber: String\n ) {\n eSEmployeeByEENumber(\n clientCode: $clientCode\n employeeNumber: $employeeNumber\n ) {\n phoneNumber\n altPhoneNumber\n workPhoneNumber\n workAltPhoneNumber\n firstName\n lastName\n homeEmail\n businessEmail\n employeeAddresses {\n countryCode\n provinceStateCode\n }\n }\n }\n `,\n variables: {\n clientCode,\n employeeNumber\n }\n })\n .then(result => {\n let phoneNumber = \"\";\n\n if (!!result.data?.eSEmployeeByEENumber?.phoneNumber) {\n phoneNumber = result.data?.eSEmployeeByEENumber?.phoneNumber;\n } else if (!!result.data?.eSEmployeeByEENumber?.altPhoneNumber) {\n phoneNumber = result.data?.eSEmployeeByEENumber?.altPhoneNumber;\n } else if (!!result.data?.eSEmployeeByEENumber?.workPhoneNumber) {\n phoneNumber = result.data?.eSEmployeeByEENumber?.workPhoneNumber;\n } else if (!!result.data?.eSEmployeeByEENumber?.workAltPhoneNumber) {\n phoneNumber = result.data?.eSEmployeeByEENumber?.workAltPhoneNumber;\n }\n\n let email = \"\";\n if (!!result.data?.eSEmployeeByEENumber?.businessEmail) {\n email = result.data?.eSEmployeeByEENumber?.businessEmail;\n } else if (!!result.data?.eSEmployeeByEENumber?.homeEmail) {\n email = result.data?.eSEmployeeByEENumber?.homeEmail;\n }\n const employeeAddress = result.data?.eSEmployeeByEENumber?.employeeAddresses;\n resolve({\n firstName: result.data?.eSEmployeeByEENumber?.firstName ?? \"\",\n lastName: result.data?.eSEmployeeByEENumber?.lastName ?? \"\",\n phoneNumber,\n email,\n employeeState: employeeAddress?.find(x=> x?.provinceStateCode)?.provinceStateCode ?? \"\",\n employeeCountry: employeeAddress?.find(x=> x?.countryCode)?.countryCode ?? \"\"\n });\n })\n .catch(error => {\n reject(error);\n });\n });\n\n searchEmployees = async (searchTerm: string, clientCode: string) =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query QuickSearchEmployee(\n $searchTerm: String!\n $clientCode: String!\n ) {\n quickSearchEmployees(\n searchTerm: $searchTerm\n clientCode: $clientCode\n ) {\n items {\n document {\n birthDate\n clientCode\n employeeData\n employeeDropDownLabelDetails\n employeeId\n employeeNumber\n firstName\n jobTitle\n lastName\n organizationId\n organizationName\n }\n highlightData {\n field\n highlightData\n }\n }\n }\n }\n `,\n variables: {\n searchTerm,\n clientCode\n }\n })\n .then(result => {\n if (result.errors) {\n console.error(\"Error in searchEmployees\", result.errors);\n }\n\n const items = result.data?.quickSearchEmployees?.items ?? [];\n resolve({\n items: items.map(item => ({\n document: { ...item?.document },\n highlightData:\n item?.highlightData && Array.isArray(item?.highlightData)\n ? [...item.highlightData]\n : []\n }))\n });\n })\n .catch(error => {\n reject(error);\n });\n });\n\n searchCompany = async (absenceReportingVersion: string, searchTerm: string) =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query SearchCompanies(\n $absenceReportingVersion: String!\n $searchTerm: String!\n ) {\n searchCompanies(\n absenceReportingVersion: $absenceReportingVersion\n searchTerm: $searchTerm\n ) {\n items {\n clientCode\n companyId\n name\n }\n }\n }\n `,\n variables: {\n absenceReportingVersion,\n searchTerm\n }\n })\n .then(result => {\n if (result.errors) {\n console.error(\"Error in searchCompanies\", result.errors);\n }\n const items = result.data?.searchCompanies?.items ?? [];\n resolve({\n items: items.map(item => ({\n clientCode: item?.clientCode,\n companyId: item?.companyId,\n name: item?.name\n }))\n });\n })\n .catch(error => {\n reject(error);\n });\n });\n\n getCompaniesCount = async (absenceReportingVersion: string) =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query CompaniesCount($absenceReportingVersion: String!) {\n companiesCount(\n absenceReportingVersion: $absenceReportingVersion\n searchTerm: \"\"\n )\n }\n `,\n variables: {\n absenceReportingVersion\n }\n })\n .then(result => {\n if (result.errors) {\n console.error(\"Error in companiesCount\", result.errors);\n }\n\n resolve(result.data.companiesCount);\n })\n .catch(error => {\n reject(error);\n });\n });\n\n getAbsences = async (clientCode?: string, employeeNumber?: string) =>\n new Promise((resolve, reject) => {\n const parameters = {\n claimStatus: \"S\",\n employeeNumber: employeeNumber\n };\n getApiGraphQL()\n .query({\n query: gql`\n query MyAbsences(\n $clientCode: String\n $parameters: ClaimSearchRequestInput\n ) {\n searchClaims(\n incidentTypes: [INCIDENT_MYABILITI_AR]\n request: {\n pageNumber: 1\n pageSize: 1000\n parameters: $parameters\n clientCode: $clientCode\n }\n ) {\n totalRecords\n items {\n ... on MyAbilitiARClaim {\n incidentId\n claimDates {\n startDate\n endDate\n isPartialAbsence\n scheduledShiftEndTime\n scheduledShiftStartTime\n }\n primaryReason\n secondaryReason\n }\n }\n }\n }\n `,\n variables: {\n clientCode,\n parameters\n }\n })\n .then(result => {\n if (result.errors) {\n console.error(\"Error in getAbsences\", result.errors);\n }\n resolve({\n previousAbsences: parseMyAbsences(\n result.data?.searchClaims?.items ?? []\n )\n });\n })\n .catch(error => {\n reject(error);\n });\n });\n\n private parseDates(\n dates?: readonly Maybe>[] | null\n ): EmployeeScheduleDate[] {\n if (!dates) return [];\n\n //We are receiving UTC time from the API but parseISO() was converting to local time and misadjusting dates. Using parse and stripping the time values retains the correct date value.\n return dates.filter(hasValue).map(d => ({\n date: parse(d.date.substr(0, 10), \"yyyy-MM-dd\", Date.now()),\n hoursWorked: d.hoursWorked\n }));\n }\n}\n\ntype MyAbsencesType = NonNullable<\n NonNullable[\"items\"]\n>[number];\n\nfunction parseMyAbsences(\n absences: ReadonlyArray\n): PreviousAbsence[] {\n return _.flatMap(absences.filter(hasValue), absence => {\n return absence.claimDates.map(claimDate => ({\n absenceIncidentId: absence.incidentId,\n primaryReason: absence.primaryReason,\n secondaryReason: absence.secondaryReason,\n shiftStartTime: claimDate.startDate\n ? parseISO(claimDate.startDate)\n : undefined,\n shiftEndTime: claimDate.endDate ? parseISO(claimDate.endDate) : undefined,\n isPartialAbsence: !!claimDate.isPartialAbsence,\n startDate: claimDate.startDate\n ? parseISO(claimDate.startDate)\n : undefined,\n endDate: claimDate.endDate ? parseISO(claimDate.endDate) : undefined,\n scheduledShiftStartTime: claimDate.scheduledShiftStartTime\n ? parseISO(claimDate.scheduledShiftStartTime)\n : undefined,\n scheduledShiftEndTime: claimDate.scheduledShiftEndTime\n ? parseISO(claimDate.scheduledShiftEndTime)\n : undefined\n }));\n });\n}\n","import {\n add,\n addDays,\n eachDayOfInterval,\n isWeekend,\n startOfToday,\n subDays\n} from \"date-fns\";\nimport {\n IEmployeeService,\n EmployeeSchedule,\n QuickSearchEmployee,\n QuickEmployeeSearchResult,\n SearchCompanies,\n EmployeeData,\n CheckEmployeeByNumber\n} from \"./employee-model\";\nimport { random, range } from \"lodash-es\";\n\nexport class MockEmployeeService implements IEmployeeService {\n getSchedule = async (\n clientCode?: string,\n employeeNumber?: string,\n from?: Date | undefined,\n to?: Date | undefined\n ): Promise =>\n new Promise((resolve, reject) => {\n const dates = eachDayOfInterval({\n start: from || addDays(new Date(), -30),\n end: to || addDays(new Date(), 30)\n });\n const schedule: EmployeeSchedule = {\n dates: dates.map(d => {\n return {\n date: d,\n hoursWorked: isWeekend(d) ? 0 : 8\n };\n })\n };\n resolve(schedule);\n });\n\n checkEmployeeByNumber = async (clientCode: string, employeeNumber: string) =>\n new Promise(resolve => {\n resolve({\n employeeId: 170160,\n firstName: \"Michael\",\n lastName: \"Smith\",\n employeeNumber: \"17016\",\n hasAccess: true\n });\n });\n\n getEmployeeData = async (eeNumber: string) =>\n new Promise((resolve, reject) => {\n resolve({\n firstName: \"John\",\n lastName: \"Washington\",\n phoneNumber: \"1234512345\"\n } as EmployeeData);\n });\n\n searchEmployees = async (searchTerm: string) =>\n new Promise((resolve, reject) => {\n const field: keyof QuickEmployeeSearchResult = \"firstName\";\n const items = [\n {\n document: {\n birthDate: \"9/21/1959 12:00:00 AM\",\n clientCode: \"DISD\",\n employeeData: null,\n employeeDropDownLabelDetails: [\"WASHINGTON\", \"SHAWANA\", \"20482\"],\n employeeId: 1049481,\n employeeNumber: \"20482\",\n firstName: \"SHAWANA\",\n lastName: \"WASHINGTON\",\n jobTitle: \"MAINTENANCE SPECIALIST\",\n organizationId: 130718,\n organizationName: \"Dallas Independent School District\"\n },\n highlightData: [\n {\n field,\n highlightData: [\"SHAWANA\"]\n }\n ]\n }\n ];\n\n resolve({ items });\n });\n\n searchCompany = async (absenceReportingVersion: string, searchTerm: string) =>\n new Promise((resolve, reject) => {\n const items = [\n {\n clientCode: \"DISD\",\n companyId: 1,\n name: \"Dallas Independent School District\"\n }\n ];\n\n resolve({ items });\n });\n\n getCompaniesCount = async (absenceReportingVersion: string) =>\n new Promise((resolve, reject) => {\n resolve(2);\n });\n\n async getAbsences() {\n const today = startOfToday();\n const randomDay = () => subDays(today, random(1, 30));\n const dates = range(5).map(randomDay);\n\n const previousAbsences = dates.map((d, i) => ({\n absenceIncidentId: i,\n isPartialAbsence: random(0, 1) === 0,\n shiftStartTime: add(d, { hours: 9 }),\n shiftEndTime: add(d, { hours: 17 })\n }));\n\n const now = new Date(Date.now());\n const recentAbsence = {\n absenceIncidentId: 99,\n isPartialAbsence: random(0, 1) === 0,\n shiftStartTime: subDays(now, 3),\n shiftEndTime: subDays(now, 2),\n primaryReason: \"67abb32e-8142-48d8-859f-6b7f609e8132\", // Personal day off\n secondaryReason: \"ab2c675d-96e3-42e6-955b-ec7f3da32425\" // Personal emergency\n };\n\n return Promise.resolve({\n previousAbsences: [...previousAbsences, recentAbsence]\n });\n }\n\n async getAbsencesForEmployee(clientCode: string, employeeNumber: string) {\n const today = startOfToday();\n const randomDay = () => subDays(today, random(1, 30));\n const dates = range(5).map(randomDay);\n\n const previousAbsences = dates.map((d, i) => ({\n absenceIncidentId: i,\n isPartialAbsence: random(0, 1) === 0,\n shiftStartTime: add(d, { hours: 9 }),\n shiftEndTime: add(d, { hours: 17 })\n }));\n\n const now = new Date(Date.now());\n const recentAbsence = {\n absenceIncidentId: 99,\n isPartialAbsence: random(0, 1) === 0,\n shiftStartTime: subDays(now, 3),\n shiftEndTime: subDays(now, 2),\n primaryReason: \"67abb32e-8142-48d8-859f-6b7f609e8132\", // Personal day off\n secondaryReason: \"ab2c675d-96e3-42e6-955b-ec7f3da32425\" // Personal emergency\n };\n\n return Promise.resolve({\n previousAbsences: [...previousAbsences, recentAbsence]\n });\n }\n}\n","import { IEmployeeService } from \"./employee-model\";\nimport { AppContext } from \"../../context/app-context\";\nimport { ApiEmployeeService } from \"../../api/api-manage\";\nimport { MockEmployeeService } from \"./employee-mock\";\n\nexport const getEmployeeService = (): IEmployeeService => {\n if (AppContext.isSandbox()) {\n return new MockEmployeeService();\n }\n return new ApiEmployeeService();\n};\n","import {\n //add,\n addDays,\n addMinutes,\n format,\n getHours,\n getMinutes,\n parseISO\n} from \"date-fns\";\n\nexport type TimePeriod = \"am\" | \"pm\";\n// 12-hour time\nexport interface Time {\n hour: number;\n minute: number;\n period: TimePeriod;\n}\n\n// 24-hour time\nexport interface Time24 {\n hour: number;\n minute: number;\n}\n\nexport type TimeInterval = {\n date: string;\n startTime: Time;\n endTime: Time;\n};\n\n/**\n * Parses a string into a Time object, replacing invalid values with defaults.\n * @param timeStr string value representing the time to parse\n * @param defaults default values if the string contains invalid data\n */\nexport function parseTime(timeStr: string, defaults: Time): Time {\n const periodMatchAM = timeStr.match(/(a|am|a.m.)$/i);\n const periodMatchPM = timeStr.match(/(p|pm|p.m.)$/i);\n \n return periodMatchAM || periodMatchPM\n ? parseTime12(timeStr, defaults)\n : parseTime24(timeStr, defaults);\n}\n\nfunction parseTime12(timeStr: string, defaults: Time): Time {\n const hourMatch = timeStr.match(/^[0-9]{1,2}/);\n const minuteMatch = timeStr.match(/:([0-9]{1,2})/);\n const periodMatchAM = timeStr.match(/(a|am|a.m.)$/i);\n const periodMatchPM = timeStr.match(/(p|pm|p.m.)$/i);\n\n const hour = hourMatch ? parseInt(hourMatch[0], 10) : 0;\n const minute = minuteMatch ? parseInt(minuteMatch[1].padEnd(2, \"0\"), 10) : 0;\n const period = periodMatchAM ? \"am\" : periodMatchPM ? \"pm\" : defaults.period;\n\n return {\n hour: 1 <= hour && hour <= 12 ? hour : defaults.hour,\n minute: 0 <= minute && minute <= 59 ? minute : defaults.minute,\n period\n };\n}\n\nfunction parseTime24(timeStr: string, defaults: Time): Time {\n const hourMatch = timeStr.match(/^[0-9]{1,2}/);\n const minuteMatch = timeStr.match(/:([0-9]{1,2})/);\n\n let hour = hourMatch ? parseInt(hourMatch[0], 10) : 0;\n const minute = minuteMatch ? parseInt(minuteMatch[1].padEnd(2, \"0\"), 10) : 0;\n const period = hour >= 12 ? \"pm\" : \"am\";\n\n if (hour === 0) {\n hour = 12;\n } else if (12 < hour && hour < 24) {\n hour = hour - 12;\n } else if (hour >= 24) {\n hour = defaults.hour;\n }\n\n return {\n hour,\n minute: 0 <= minute && minute <= 59 ? minute : defaults.minute,\n period\n };\n}\n\nfunction makeDate(date: Date, time: Time24): Date {\n const d = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n time.hour,\n time.minute\n );\n return d;\n}\n\nexport function toDateInterval(interval: TimeInterval) {\n const date = parseISO(interval.date);\n const startTime = to24HourTime(interval.startTime);\n const endTime = to24HourTime(interval.endTime); \n const isNextDay = isTimeAfter(interval.startTime, interval.endTime) || areTimesEqual(interval.startTime, interval.endTime);\n \n return {\n startDate: makeDate(date, startTime),\n endDate: addDays(makeDate(date, endTime), isNextDay ? 1 : 0)\n // startDate: add(date, {\n // hours: startTime.hour,\n // minutes: startTime.minute\n // }),\n // endDate: addDays(\n // add(date, {\n // hours: endTime.hour,\n // minutes: endTime.minute\n // }),\n // isNextDay ? 1 : 0\n // )\n };\n}\n\nexport const extractTime = (date: Date): Time => {\n const hours = getHours(date);\n return {\n hour: hours % 12 || 12,\n minute: getMinutes(date),\n period: hours < 12 ? \"am\" : \"pm\"\n };\n};\n\nexport const toTimeInterval = (from: Date, to: Date): TimeInterval => {\n return {\n date: format(from, \"yyyy-MM-dd\"),\n startTime: extractTime(from),\n endTime: extractTime(to)\n };\n};\n\nexport const createTimeInterval = (\n date: Date,\n startTime: Time,\n endTime: Time\n): TimeInterval => {\n return {\n date: format(date, \"yyyy-MM-dd\"),\n startTime,\n endTime\n };\n};\n\nexport const formatTimeInterval = (timeInterval: TimeInterval): string => {\n return `${formatTime(timeInterval.startTime)} to ${formatTime(\n timeInterval.endTime\n )}`;\n};\n\nexport const monthAndDay = (date: Date): string =>\n `${date.getMonth() + 1}-${date.getDate()}`;\n\nexport function formatTime(time: Time): string {\n const hour = time.hour.toString();\n const minute = time.minute.toString().padStart(2, \"0\");\n const period = time.period === \"am\" ? \"AM\" : \"PM\";\n\n return `${hour}:${minute} ${period}`;\n}\n\n/**\n * Round a valid time to the nearest minute interval.\n */\nexport function clampTime(time: Time, minuteInterval?: number) {\n if (minuteInterval) {\n const roundedMinute =\n Math.round(time.minute / minuteInterval) * minuteInterval;\n return { ...time, minute: roundedMinute };\n } else {\n return time;\n }\n}\n\nexport function normalizeTime(\n timeStr: string,\n defaults: Time,\n minuteInterval?: number\n): string {\n return formatTime(clampTime(parseTime(timeStr, defaults), minuteInterval));\n}\n\nexport function countdownTimerFromSeconds(timeLeft: number): string {\n if (timeLeft < 0) return \"00:00\";\n\n const minutes = Math.floor(timeLeft / 60);\n const seconds = timeLeft % 60;\n\n const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;\n const formattedSeconds = seconds < 10 ? `0${seconds}` : seconds;\n\n return `${formattedMinutes}:${formattedSeconds}`;\n}\n\nexport function minutesSinceMidnight(time: Time) {\n return (\n (time.hour % 12) * 60 + time.minute + (time.period === \"pm\" ? 12 * 60 : 0)\n );\n}\n\nexport function minutesToMidnight(time: Time) {\n return (\n 1440 - minutesSinceMidnight(time)\n );\n}\n\nexport function to24HourTime(time: Time): Time24 {\n const totalMinutes = minutesSinceMidnight(time);\n return {\n hour: Math.floor(totalMinutes / 60),\n minute: totalMinutes % 60\n };\n}\n\nexport function minutesToHours(totalMinutes: number): string {\n const hour = Math.floor(totalMinutes / 60);\n const min = totalMinutes % 60;\n if (min < 10) {\n return hour.toString() + \":0\" + min.toString(); \n }\n return hour.toString() + \":\" + min.toString(); \n}\n\nexport function isTimeBefore(time: Time, timeToCompare: Time) {\n return minutesSinceMidnight(time) < minutesSinceMidnight(timeToCompare);\n}\n\nexport function isTimeAfter(time: Time, timeToCompare: Time) {\n return isTimeBefore(timeToCompare, time);\n}\n\nexport function areTimesEqual(time1: Time, time2: Time) {\n return (\n time1.period === time2.period &&\n time1.hour === time2.hour &&\n time1.minute === time2.minute\n );\n}\n\n\nexport function valid24Hours(maxShiftLengthThresholdInMinutes: number, time1: Time, time2: Time) { \n if (maxShiftLengthThresholdInMinutes && maxShiftLengthThresholdInMinutes > 0 && areTimesEqual(time1, time2))\n {\n return (true);\n } \n return (false); \n}\n\nexport function ValidMaxShiftTime(maxShiftLengthThresholdInMinutes: number, time1: Time, time2: Time) { \n\n //overnight scenario\n if (isTimeAfter(time1, time2)) { \n const absenceMinutes = minutesToMidnight(time1) + minutesSinceMidnight(time2); \n if (maxShiftLengthThresholdInMinutes && maxShiftLengthThresholdInMinutes > 0 && absenceMinutes > maxShiftLengthThresholdInMinutes) {\n return (false);\n }\n }\n\n //same day\n if (isTimeBefore(time1, time2)) {\n const absenceMinutes = minutesSinceMidnight(time2) - minutesSinceMidnight(time1); \n if (maxShiftLengthThresholdInMinutes && maxShiftLengthThresholdInMinutes > 0 && absenceMinutes > maxShiftLengthThresholdInMinutes) {\n return (false);\n }\n }\n\n //24 hours shift for maxShiftLengthThresholdInMinutes < 24hrs\n if (areTimesEqual(time1, time2)) { \n if (maxShiftLengthThresholdInMinutes && maxShiftLengthThresholdInMinutes > 0 && maxShiftLengthThresholdInMinutes !== 1440 && areTimesEqual(time1, time2)) {\n return (false);\n }\n }\n\n\n return (true);\n}\n\n\n\nexport function makeTime(\n hour: number,\n minute: number,\n period: \"am\" | \"pm\"\n): Time {\n return { hour, minute, period };\n}\n\nexport function toLocalTime(date: Date) {\n return addMinutes(date, date.getTimezoneOffset());\n}\n","import { parse, format, addYears, isValid } from \"date-fns\";\nimport { enCA, enUS, es, frCA } from \"date-fns/locale\";\nimport { SupportedLanguage } from \"features/translations/locales\";\n\nconst referenceDate = addYears(new Date(), -40);\n\nexport const parseDate = (\n language: SupportedLanguage,\n str: string\n): Date | null => {\n switch (language) {\n case SupportedLanguage.EnglishUS:\n return isValid(parse(str, \"yyyy-M-d\", referenceDate))\n ? parse(str, \"yyyy-M-d\", referenceDate)\n : parse(str, \"yyyyMMdd\", referenceDate);\n case SupportedLanguage.EnglishCA:\n case SupportedLanguage.FrenchCA:\n return isValid(parse(str, \"yyyy-M-d\", referenceDate))\n ? parse(str, \"yyyy-M-d\", referenceDate)\n : parse(str, \"yyyyMMdd\", referenceDate);\n case SupportedLanguage.Spanish:\n return isValid(parse(str, \"d-M-yyyy\", referenceDate))\n ? parse(str, \"d-M-yyyy\", referenceDate)\n : parse(str, \"ddMMyyyy\", referenceDate);\n }\n};\n\nexport const formatDate = (language: SupportedLanguage, d: Date): string => {\n if (!isValid(d)) return \"\";\n switch (language) {\n case SupportedLanguage.EnglishUS:\n return format(d, \"yyyy-MM-dd\");\n case SupportedLanguage.FrenchCA:\n case SupportedLanguage.EnglishCA:\n return format(d, \"yyyy-MM-dd\");\n case SupportedLanguage.Spanish:\n return format(d, \"dd-MM-yyyy\");\n }\n};\n\nexport const formatDateLong = (\n language: SupportedLanguage,\n d: Date\n): string => {\n if (!isValid(d)) return \"\";\n switch (language) {\n case SupportedLanguage.EnglishUS:\n return format(d, \"iiii, MMMM d, yyyy\", { locale: enUS });\n case SupportedLanguage.FrenchCA:\n return format(d, \"iiii, MMMM d, yyyy\", { locale: frCA });\n case SupportedLanguage.EnglishCA:\n return format(d, \"iiii, MMMM d, yyyy\", { locale: enCA });\n case SupportedLanguage.Spanish:\n return format(d, \"iiii, MMMM d, yyyy\", { locale: es });\n }\n};\n\n/** get the human-readable placeholder string for a SupportedLanguage */\nexport const datePlaceholder = (language: SupportedLanguage): string => {\n switch (language) {\n case SupportedLanguage.EnglishUS:\n return \"YYYY-MM-DD\";\n case SupportedLanguage.FrenchCA:\n case SupportedLanguage.EnglishCA:\n return \"YYYY-MM-DD\";\n case SupportedLanguage.Spanish:\n return \"DD-MM-YYYY\";\n }\n};\n","import { useLanguageContext } from \"context/user-language-context\";\nimport {\n datePlaceholder,\n formatDate,\n formatDateLong,\n parseDate\n} from \"i18n/dates\";\nimport _, { uniqueId } from \"lodash-es\";\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport * as Routes from \"routes\";\nimport { ReportAnAbsencePermission } from \"permissions\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { ARWorkflow } from \"features/report-absence/absence-reporting-workflow\";\nimport { getLocale } from \"features/translations/locales\";\n\n/**\n * Generate a unique id to use within a component. This ensures that ids from\n * multiple instances of the component will not interfere.\n */\nexport function useUniqueId(prefix: string) {\n const [id] = useState(() => uniqueId(prefix));\n return id;\n}\n\n/**\n * Provides functions to prevent the default browser outline on an element when\n * the user clicks on it, but keeps the outline behavior when the user uses the\n * TAB key to select it.\n *\n * Inspired by: https://www.darrenlester.com/blog/focus-only-on-tab\n */\nexport function usePreventOutlineOnClick() {\n const mouseDown = useRef(false);\n\n const onMouseDown = () => {\n mouseDown.current = true;\n };\n\n const onMouseUp = () => {\n mouseDown.current = false;\n };\n\n const onFocus = (event: React.FocusEvent) => {\n if (mouseDown.current) {\n event.target.blur();\n }\n };\n\n return { onMouseDown, onMouseUp, onFocus };\n}\n\n/**\n * Hook to detect clicks outside of an element. Useful for e.g. closing a modal\n * when clicking outside of it. Courtesy of https://usehooks.com/useOnClickOutside/\n * with modifications to allow an option reference to an anchor element that should\n * not trigger the event.\n */\nexport function useOnClickOutside(\n popoverRef: React.RefObject,\n handler: (event: MouseEvent | TouchEvent) => void,\n anchorRef?: React.RefObject\n) {\n useEffect(\n () => {\n const listener = (event: MouseEvent | TouchEvent) => {\n // Do nothing if clicking ref's element or descendent elements\n // Or the element responsible for originally activating the ref\n if (\n !popoverRef.current ||\n popoverRef.current.contains(event.target as Node) ||\n anchorRef?.current?.contains(event.target as Node)\n ) {\n return;\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n },\n\n // Add ref and handler to effect dependencies\n // It's worth noting that because passed in handler is a new\n // function on every render that will cause this effect\n // callback/cleanup to run every render. It's not a big deal\n // but to optimize you can wrap handler in useCallback before\n // passing it into this hook.\n [popoverRef, handler, anchorRef]\n );\n}\n\nexport const useWindowSize = () => {\n const [size, setSize] = useState([0, 0]);\n useLayoutEffect(() => {\n function updateSize() {\n setSize([window.innerWidth, window.innerHeight]);\n }\n window.addEventListener(\"resize\", updateSize);\n updateSize();\n return () => window.removeEventListener(\"resize\", updateSize);\n }, []);\n return size;\n};\n\nexport const usePrevious = (value: T): T | undefined => {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\n/**\n * Store a value of any JSON-serializable type in the browser session storage.\n * @param key A unique string key for the sessionStorage dictionary\n * @param defaultValue Returned if there is currently no value stored for the key\n */\nexport function useSessionStorage(\n key: string,\n defaultValue: T\n): [T, (newValue: T) => void] {\n const valueSerialized = sessionStorage.getItem(key);\n const value: T = valueSerialized ? JSON.parse(valueSerialized) : defaultValue;\n\n const setValue = (newValue: T) =>\n sessionStorage.setItem(key, JSON.stringify(newValue));\n\n return [value, setValue];\n}\n\ntype LastLoginType = {\n clientId: string;\n};\nexport function useLastLogin(): {\n lastLogin: LastLoginType | null;\n setLastLogin: (value: LastLoginType) => void;\n} {\n const [lastLogin, setLastLogin] = useSessionStorage(\n \"lastLogin\",\n null\n );\n return { lastLogin, setLastLogin };\n}\n\nexport type LocalizedDateParser = (s: string) => Date | null;\nexport type LocalizedDateFormatter = (d: Date) => string;\nexport const useLocalizedDateParsing = (): {\n parseDate: LocalizedDateParser;\n formatDate: LocalizedDateFormatter;\n formatDateLong: LocalizedDateFormatter;\n\n placeholder: string;\n} => {\n const { currentLang } = useLanguageContext();\n return useMemo(\n () => ({\n parseDate: (s: string) => parseDate(currentLang, s),\n formatDate: (d: Date) => formatDate(currentLang, d),\n formatDateLong: (d: Date) => formatDateLong(currentLang, d),\n placeholder: datePlaceholder(currentLang)\n }),\n [currentLang]\n );\n};\n\n/**\n * A hook that can be used to reflect the desktop media breakpoint in\n * React components.\n * Adapted from https://usehooks.com/useMedia/\n */\nexport function useDesktopBreakpoint(): boolean {\n const mql = window.matchMedia(\"(min-width: 1024px)\");\n\n const getValue = () => {\n return mql.matches;\n };\n\n // State and setter for matched value\n const [isDesktopView, setIsDesktopView] = useState(getValue);\n\n useEffect(\n () => {\n // Event listener callback\n // Note: By defining getValue outside of useEffect we ensure that it has ...\n // ... current values of hook args (as this hook callback is created once on mount).\n const handler = () => setIsDesktopView(getValue);\n\n // Set a listener for the media query\n mql.addListener(handler);\n\n // Remove listener on cleanup\n return () => mql.removeListener(handler);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [] // Empty array ensures effect is only run on mount and unmount\n );\n\n return isDesktopView;\n}\n\nexport const useReportAbsenceLink = (): {\n canReportAbsence: boolean;\n goToReportAbsence: (incidentId?: number) => void;\n getReportAbsenceLink: (incidentId?: number) => string;\n goToReportAbsencePrimaryReason: (incidentId: number) => void;\n} => {\n const history = useHistory();\n\n const sessionService = getSessionService();\n const { currentLang } = useLanguageContext();\n const locale = getLocale(currentLang);\n\n return {\n canReportAbsence: sessionService.hasPrivileges(ReportAnAbsencePermission),\n goToReportAbsence: (incidentId?: number) => {\n // TODO Might be better to make this a method of the workflow context\n ARWorkflow.start(locale);\n history.push(Routes.ReportAbsence.generate({ incidentId: incidentId }));\n },\n getReportAbsenceLink: (incidentId?: number) =>\n Routes.ReportAbsence.generate({ incidentId: incidentId }),\n goToReportAbsencePrimaryReason: (incidentId: number) => {\n ARWorkflow.start(locale);\n history.push(Routes.ReportAbsencePrimaryReason.generate({ incidentId }));\n }\n };\n};\n\nexport function useHistoryDebugging() {\n const history = useHistory();\n\n useEffect(() => {\n return history.listen(location => {\n console.log(\"Navigating to:\", location.pathname);\n });\n }, [history]);\n}\n\n/**\n * Avoid excessive re-rendering by only passing through an updated value when it\n * stops changing for a period of time.\n * @param value Value to pass through (usually the output of another useState)\n * @param delay Minimum period of time (in milliseconds) before passing through value\n *\n * @see https://usehooks.com/useDebounce/\n */\nexport function useDebounce(value: T, delay: number) {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(\n () => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount).\n // This is how we prevent debounced value from updating if value is changed\n // within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay] // Only re-call effect if value or delay changes\n );\n\n return debouncedValue;\n}\n\n/**\n * Get a function that can be called to force a component to rerender.\n */\nexport function useForceRender() {\n const [, _setForceRender] = useState(0);\n return useCallback(() => _setForceRender(i => i + 1), []);\n}\n\n/**\n * Get the scroll position of the window, debounced with configurable interval and options.\n *\n * @param debounceInterval\n * @param debounceOptions\n */\nexport function useWindowScrollTop(\n debounceInterval: number,\n debounceOptions = {\n leading: true,\n trailing: true\n }\n) {\n const [scrollTop, setScrollTop] = useState(\n window.scrollY || window.pageYOffset\n );\n\n useEffect(() => {\n const setScrollTopThrottled = _.debounce(\n setScrollTop,\n debounceInterval,\n debounceOptions\n );\n const onScroll = () => {\n setScrollTopThrottled(window.scrollY || window.pageYOffset); // pageYOffset is for IE11\n };\n window.addEventListener(\"scroll\", onScroll);\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n setScrollTopThrottled.cancel();\n };\n }, [debounceInterval, debounceOptions]);\n\n return scrollTop;\n}\n\n/**\n * Asynchronously perform an API request, with loading and error states.\n *\n * @param doRequest Async callback that performs the request.\n * @param deps An array of dependencies for useEffect. The request is repeated when any of the\n * dependencies change.\n */\nexport function useApiRequest(\n doRequest: (op: { cancelled: boolean }) => Promise,\n deps: ReadonlyArray\n) {\n const [isLoading, setLoading] = useState(true);\n const [data, setData] = useState();\n const [error, setError] = useState();\n\n useEffect(() => {\n const op = { cancelled: false };\n\n async function sendRequestAsync() {\n setLoading(true);\n setData(undefined);\n setError(undefined);\n\n try {\n const data = await doRequest(op);\n\n if (!op.cancelled) {\n setData(data);\n }\n } catch (e) {\n if (!op.cancelled) {\n console.error(\"Error in API request\", e);\n setError(e);\n }\n } finally {\n if (!op.cancelled) {\n setLoading(false);\n }\n }\n }\n\n void sendRequestAsync();\n\n return function cleanup() {\n op.cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n\n return { isLoading, data, error };\n}\n","import React from \"react\";\nimport { IconButton } from \"..\";\nimport { CloseIcon } from \"components/icons\";\nimport styles from \"./close-button.module.scss\";\nimport clsx from \"clsx\";\nimport { useTranslation } from \"hooks/translation\";\n\ntype Props = {\n className?: string;\n onClick: () => void;\n theme?: \"light\" | \"dark\";\n label?: string;\n};\n\nconst CloseButton: React.FC = props => {\n const iconClassname = (() => {\n switch (props.theme) {\n case \"light\":\n default:\n return styles[\"icon--black\"];\n case \"dark\":\n return styles[\"icon--white\"];\n }\n })();\n\n const t = useTranslation();\n return (\n \n \n \n );\n};\n\nexport default CloseButton;\n","import {\n ClientFeature,\n IWebConfigurationService,\n WebConfiguration\n} from \"./web-configuration-model\";\n\nexport class MockWebConfigurationService implements IWebConfigurationService {\n getWebConfigurationByUrl = async (url: string): Promise =>\n new Promise((resolve, reject) => {\n const configuration: WebConfiguration = {\n clientCode: \"DEMOCLIENT\",\n instanceId: \"LEAVES\"\n };\n resolve(configuration);\n });\n\n canAccessApplication = async (clientCode: string): Promise =>\n new Promise(resolve => resolve(true));\n\n getClientFeatureUrl = async (\n clientCode: string,\n featureName: ClientFeature,\n language: string\n ) =>\n new Promise(resolve =>\n resolve(\"https://clientportal.morneaushepell.com\")\n );\n}\n","import { getApiGraphQL } from \"./api-graphql\";\nimport { gql } from \"@apollo/client\";\n\nimport {\n ClientFeature,\n IWebConfigurationService,\n WebConfiguration\n} from \"features/config/web-configuration-model\";\nimport {\n CanAccessApplicationQuery,\n ClientFeatureUrlQuery\n} from \"graphql-types.gen\";\n\nexport type WebConfigurationQuery = {\n webConfigByUrl?: WebConfiguration;\n};\n\nexport class ApiWebConfigurationService implements IWebConfigurationService {\n getWebConfigurationByUrl = async (url: string): Promise =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query web($url: String) {\n webConfigByUrl(url: $url) {\n clientCode\n instanceId\n logoFile {\n content\n fileName\n mimeType\n }\n canUploadDocumentsLeaves\n canUploadingDocumentsWCB\n canUploadingDocumentsDM\n }\n }\n `,\n variables: {\n url: url\n }\n })\n .then(result => {\n if (result.data && result.data.webConfigByUrl) {\n resolve(result.data.webConfigByUrl);\n } else reject(result);\n })\n .catch(error => {\n reject(error);\n });\n });\n\n canAccessApplication = async (clientCode: string) =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query CanAccessApplication($clientCode: String) {\n canAccessApplication(\n application: MYABILITI_PORTAL\n clientCode: $clientCode\n )\n }\n `,\n variables: {\n clientCode\n }\n })\n .then(result => {\n if (result.data) {\n resolve(result.data.canAccessApplication);\n } else {\n reject(result);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n\n getClientFeatureUrl = async (\n clientCode: string,\n feature: ClientFeature,\n language: string\n ) =>\n new Promise((resolve, reject) => {\n getApiGraphQL()\n .query({\n query: gql`\n query clientFeatureUrl(\n $clientCode: String\n $featureName: ClientFeatureName!\n $language: String\n ) {\n clientFeatureUrl(\n clientCode: $clientCode\n featureName: $featureName\n language: $language\n )\n }\n `,\n variables: {\n clientCode,\n featureName: feature === \"connect\" ? \"CLAIMSLIST\" : null,\n language\n }\n })\n .then(result => {\n if (result.data) {\n resolve(result.data.clientFeatureUrl as string);\n } else {\n reject(result);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n}\n","import { AppContext } from \"../../context/app-context\";\nimport { IWebConfigurationService } from \"./web-configuration-model\";\nimport { MockWebConfigurationService } from \"./web-configuration-service-mock\";\nimport { ApiWebConfigurationService } from \"api/api-config\";\n\nexport const getWebConfigurationService = (): IWebConfigurationService => {\n if (AppContext.isSandbox()) {\n return new MockWebConfigurationService();\n }\n return new ApiWebConfigurationService();\n};\n","import { getTranslation, I18nMap, I18nProfile, PropsOf } from \"./core\";\nimport EN_CA from \"./en-CA.json\";\nimport EN_US from \"./en-US.json\";\nimport ES from \"./es.json\";\nimport FR_CA from \"./fr-CA.json\";\nimport { textForLang } from \"shared-types/api\";\nimport _ from \"lodash-es\";\nimport { SupportedLanguage } from \"features/translations/locales\";\n\nexport const ClientI18nProfile = I18nProfile\n /* Global */\n .with(\"global.welcomeMessage\")\n .with(\"global.errorMessage\")\n .with(\"global.apiError.msg\")\n .with(\"global.apiError.title\")\n .with(\"global.accessDenied.msg\", \"contactUs\")\n .with(\"global.accessDenied.title\")\n .with(\"global.accessDenied.contactUs\")\n // .with(\"global.help\")\n /* Languages */\n .with(\"languages.selectLanguage\")\n .with(\"languages.englishUnitedStates\")\n .with(\"languages.englishCanada\")\n .with(\"languages.english\")\n .with(\"languages.french\")\n .with(\"languages.spanishSelected\")\n .with(\"languages.frenchCanada\")\n .with(\"languages.spanish\")\n // /* Footer */\n // .with(\"footer.copyright\")\n // .with(\"footer.privacyPolicy\")\n // .with(\"footer.termsConditions\")\n /* Login */\n .with(\"login.loadApplication\")\n .with(\"login.redirectToAuthServer\")\n .with(\"login.welcomeToAbiliti\")\n .with(\"login.morneauInstructions\")\n .with(\"login.morningstarInstructions\")\n .with(\"login.lastName\")\n .with(\"login.employeeId\")\n .with(\"login.dateOfBirth\")\n .with(\"login.companyCode\")\n .with(\"login.pin\")\n .with(\"login.logIn\")\n .with(\"login.imgAlts.companyLogo\")\n .with(\"login.lastNameRequired\")\n .with(\"login.employeeIdRequired\")\n .with(\"login.dateOfBirthRequired\")\n .with(\"login.dateOfBirthInvalidFormat\", \"dateFormat\")\n .with(\"login.companyCodeRequired\")\n .with(\"login.pinRequired\")\n .with(\"login.pinMustHaveLength\")\n .with(\"login.unexpectedError\")\n .with(\"login.networkError\")\n .with(\"login.incompleteDetails\")\n .with(\"login.userNotAuthenticated\", [\"lockoutMinutes\", \"attemptsRemaining\"])\n // .with(\"login.accountLocked\")\n // .with(\"login.requireAssistance\")\n // .with(\"login.pinTooLongError\");\n /* Buttons */\n .with(\"buttons.cancel\")\n .with(\"buttons.next\")\n .with(\"buttons.previous\")\n .with(\"buttons.edit\")\n .with(\"buttons.save\")\n .with(\"buttons.yes\")\n .with(\"buttons.no\")\n .with(\"buttons.back\")\n .with(\"buttons.copy\")\n .with(\"buttons.newCase\")\n .with(\"buttons.leave\")\n .with(\"buttons.keepReporting\")\n .with(\"buttons.cancelAbsence\")\n .with(\"buttons.continue\")\n .with(\"buttons.restart\")\n .with(\"buttons.logout\")\n /* Time Periods*/\n .with(\"timePeriods.starting\", \"date\")\n .with(\"timePeriods.startToEnd\", [\"startDate\", \"endDate\"])\n .with(\"timePeriods.startAndEnd\", [\"startDate\", \"endDate\"])\n .with(\"timePeriods.daysBetween\", [\"numDays\", \"startDate\", \"endDate\"])\n .with(\"timePeriods.days\")\n .with(\"timePeriods.weeks\")\n .with(\"timePeriods.hours\")\n .with(\"timePeriods.months\")\n .with(\"timePeriods.years\")\n .with(\"timePeriods.day\")\n .with(\"timePeriods.week\")\n .with(\"timePeriods.hour\")\n .with(\"timePeriods.month\")\n .with(\"timePeriods.year\")\n /* Report an Absence */\n .with(\"reportAbsence.title\")\n .with(\"reportAbsence.intro1\")\n .with(\"reportAbsence.intro2\")\n .with(\"reportAbsence.previousSelection\", \"previousSelection\")\n .with(\"reportAbsence.validation.please_select_date\")\n .with(\"reportAbsence.validation.please_save_changes\")\n .with(\"reportAbsence.validation.existing_absence_day\")\n .with(\"reportAbsence.validation.existing_absence_range\")\n .with(\"reportAbsence.validation.return_to_work_date\")\n .with(\"reportAbsence.validation.phone\")\n .with(\"reportAbsence.validation.email\")\n .with(\"reportAbsence.validation.numeric_min\", \"min\")\n .with(\"reportAbsence.validation.numeric_max\", \"max\")\n .with(\"reportAbsence.validation.please_answer_required_question\")\n .with(\"reportAbsence.confirmation.thank_you\")\n .with(\"reportAbsence.confirmation.confirmation_number\")\n .with(\"reportAbsence.confirmation.forgot_number\")\n .with(\"reportAbsence.confirmation.back_to_dashboard\")\n .with(\"reportAbsence.confirmation.copied\")\n .with(\"reportAbsence.confirmation.back_to_report_absence\")\n .with(\"reportAbsence.all_for_now\")\n .with(\"reportAbsence.continuation.back_to_work\")\n .with(\"reportAbsence.continuation.description1\", [\"primaryReason\", \"date\"])\n .with(\"reportAbsence.continuation.description2\", [\n \"primaryReason\",\n \"secondaryReason\",\n \"date\"\n ])\n .with(\"reportAbsence.absence_date.prompt\")\n .with(\"reportAbsence.absence_date.description\")\n .with(\"reportAbsence.absence_shift.prompt\")\n .with(\"reportAbsence.absence_shift.description\")\n .with(\"reportAbsence.absence_shift.your_shift\")\n .with(\"reportAbsence.absence_shift.add_shift\")\n .with(\"reportAbsence.absence_shift.same_shift_toggle\")\n .with(\"reportAbsence.absence_shift.shift_start\")\n .with(\"reportAbsence.absence_shift.shift_end\")\n .with(\"reportAbsence.absence_shift.overnight_shift\")\n .with(\"reportAbsence.absence_shift.next_day\")\n .with(\"reportAbsence.absence_shift.max_shift\", \"hrs\")\n .with(\"reportAbsence.absence_shift.max_24_shift\")\n .with(\"reportAbsence.absence_shift.add_diff_shift\")\n\n .with(\"reportAbsence.absence_time.prompt\")\n .with(\"reportAbsence.absence_time.description\")\n .with(\"reportAbsence.absence_time.invalid_duration\", \"duration\")\n .with(\"reportAbsence.absence_time.overlapping_absences\", [\"from\", \"to\"])\n .with(\"reportAbsence.absence_time.overlapping_many_absences\", [\n \"from1\",\n \"to1\",\n \"from2\",\n \"to2\"\n ])\n .with(\"reportAbsence.absence_time.change_absence_time\")\n .with(\"reportAbsence.absence_duration.prompt\")\n .with(\"reportAbsence.absence_duration.description_one_day\", \"date\")\n .with(\"reportAbsence.absence_duration.description_two_days\", [\n \"date1\",\n \"date2\"\n ])\n .with(\n \"reportAbsence.absence_duration.description_more_than_two_days\",\n \"count\"\n )\n .with(\"reportAbsence.absence_duration.description_confirmation\")\n .with(\"reportAbsence.absence_duration.full_day_off_title\")\n .with(\"reportAbsence.absence_duration.full_day_off_description\")\n .with(\"reportAbsence.absence_duration.partial_day_off_title\")\n .with(\"reportAbsence.absence_association.not_associated\")\n .with(\"reportAbsence.absence_association.associated\")\n .with(\"reportAbsence.employee_search.prompt\")\n .with(\"reportAbsence.employee_search.description\")\n .with(\"reportAbsence.employee_search.placeholder\")\n .with(\"reportAbsence.employee_search.clear_button\")\n .with(\"reportAbsence.employee_search.no_result\")\n .with(\"reportAbsence.employee_search.title\")\n .with(\"reportAbsence.employee_search.department\")\n .with(\"reportAbsence.employee_search.office\")\n .with(\"reportAbsence.employee_search.change_employee_warning_msg\")\n .with(\"reportAbsence.employee_search.add_employee\")\n .with(\"reportAbsence.employee_search.add_button\")\n .with(\"reportAbsence.call_center.prompt\", \"employee_full_name\")\n .with(\"reportAbsence.company_search.prompt\")\n .with(\"reportAbsence.company_search.description\")\n .with(\"reportAbsence.company_search.placeholder\")\n .with(\"reportAbsence.company_search.clear_button\")\n .with(\"reportAbsence.company_search.no_result\")\n .with(\"reportAbsence.add_new_employee.prompt\")\n .with(\"reportAbsence.add_new_employee.description\")\n .with(\"reportAbsence.add_new_employee.optional\")\n .with(\"reportAbsence.add_new_employee.errors.text\")\n .with(\"reportAbsence.add_new_employee.errors.name\")\n .with(\"reportAbsence.add_new_employee.errors.phone\")\n .with(\"reportAbsence.add_new_employee.errors.email\")\n .with(\"reportAbsence.add_new_employee.buttons.add\")\n .with(\"reportAbsence.add_new_employee.buttons.change\")\n .with(\"reportAbsence.add_new_employee.modal.title\")\n .with(\"reportAbsence.add_new_employee.modal.content.top\")\n .with(\"reportAbsence.add_new_employee.modal.content.middle\")\n .with(\"reportAbsence.add_new_employee.modal.content.bottom\")\n .with(\"reportAbsence.add_new_employee.modal.buttons.new_number\")\n .with(\"reportAbsence.add_new_employee.modal.buttons.select\")\n .with(\"reportAbsence.primary_absence_reason.prompt\")\n .with(\"reportAbsence.return_to_work.prompt\")\n .with(\"reportAbsence.secondary_absence_reason.description\")\n .with(\"reportAbsence.continuation.exceedMaxDays\", \"days\")\n .with(\"reportAbsence.summary.title\")\n .with(\"reportAbsence.summary.prompt\")\n .with(\"reportAbsence.summary.subtitle\")\n .with(\"reportAbsence.summary.company\")\n .with(\"reportAbsence.summary.employee_name\")\n .with(\"reportAbsence.summary.employee_id\")\n .with(\"reportAbsence.summary.phone_number\")\n .with(\"reportAbsence.summary.reason\")\n .with(\"reportAbsence.summary.primary_reason\")\n .with(\"reportAbsence.summary.secondary_reason\")\n .with(\"reportAbsence.summary.absence_period\")\n .with(\"reportAbsence.summary.submit\")\n .with(\"reportAbsence.summary.leaving\")\n .with(\"reportAbsence.summary.returning\")\n .with(\"reportAbsence.summary.return_to_work_date\")\n .with(\"reportAbsence.summary.show_all_dates\")\n .with(\"reportAbsence.summary.shift_ends\")\n .with(\"reportAbsence.summary.to\")\n .with(\"reportAbsence.summary.your_shift\", [\"start_shift\", \"end_shift\"])\n .with(\"reportAbsence.summary.cic_email_will_be_sent_to_label\")\n .with(\"reportAbsence.absence_on_behalf.title\")\n .with(\"reportAbsence.absence_on_behalf.myself\")\n .with(\"reportAbsence.absence_on_behalf.other\")\n .with(\"reportAbsence.cancel.title\")\n .with(\"reportAbsence.cancel.support_text\")\n .with(\"reportAbsence.restart.title\")\n .with(\"reportAbsence.restart.support_text\")\n .with(\"errors.page_not_found\")\n .with(\"errors.select_at_least_one_value\")\n .with(\"nav.dashboard\")\n .with(\"nav.resources\")\n .with(\"nav.all_cases\")\n .with(\"nav.apply_for_fml\")\n .with(\"nav.apply_for_std\")\n .with(\"nav.apply_for_wcb\")\n .with(\"nav.need_help\")\n .with(\"nav.settings\")\n .with(\"nav.log_out\")\n .with(\"nav.history\")\n .with(\"nav.goto_connect\")\n .with(\"general.items_not_shown\")\n .with(\"general.show_less\")\n .with(\"dashboard.welcome\")\n .with(\"dashboard.things_to_do\")\n .with(\"dashboard.active_claims\")\n .with(\"dashboard.report_absence_button\")\n .with(\"dashboard.to_do_activities\", \"things_to_do\")\n .with(\"dashboard.recent_activity\")\n .with(\"dashboard.breakdown_by_policy\")\n .with(\"dashboard.period_left\", \"period\")\n .with(\"dashboard.view\")\n /* Calendar */\n .with(\"calendar.one_day_at_a_time\")\n .with(\"calendar.next_month\")\n .with(\"calendar.previous_month\")\n .with(\"calendar.toggle_year_selection\")\n .with(\"calendar.toggle_one_day_at_a_time\")\n .with(\"calendar.day_selected\")\n .with(\"calendar.day_not_selected\")\n .with(\"calendar.day_unselectable\")\n /* Idle Modal */\n .with(\"idle_modal.title\")\n .with(\"idle_modal.description\")\n .with(\"idle_modal.stay_logged_in\")\n /* Logout Modal */\n .with(\"logout_modal.title\")\n .with(\"logout_modal.exit\")\n /* Warning Messages */\n .with(\"warnings.overnight_shift_no_date\")\n .with(\"warnings.overnight_shift\", \"date\")\n .with(\"warnings.overnight_shift_start\")\n .with(\"warnings.overnight_shift_end\")\n\n .with(\"warnings.intermittent_all_overnight_shift\")\n .with(\"warnings.intermittent_some_overnight_shift\")\n .with(\"warnings.schedule_override\")\n /* Date Picker */\n .with(\"date_picker.helper_text\")\n .with(\"date_picker.enter_date\")\n .with(\"date_picker.calendar\")\n .with(\"date_picker.correct_format_text\")\n .with(\"date_label.starting\")\n .with(\"date_label.ending\")\n .with(\"date_label.separator\")\n .with(\"claims.show_all_decisions\")\n .with(\"claims.continuous_leave\")\n .with(\"claims.intermittent_leave\")\n .with(\"claims.reduced_hours_leave\")\n .with(\"claims.claim_hours_desc\")\n .with(\"claims.all_recent_activity\")\n .with(\"claims.select_a_case\")\n .with(\"claims.see_discharged_cases\")\n .with(\"claims.time\", [\"startTime\", \"endTime\"])\n .with(\"claims.created_by\", \"createdBy\")\n .with(\"claims.show_all\")\n .with(\"claims.show_less\")\n .with(\"claims.items_not_shown\", \"itemsNotShown\")\n .with(\"claims.label.case\")\n .with(\"claims.label.case_id\")\n .with(\"claims.label.std_start_date\")\n .with(\"claims.label.type_of_leave\")\n .with(\"claims.label.pertains_to\")\n .with(\"claims.label.date_of_request\")\n .with(\"claims.label.decision_start\")\n .with(\"claims.label.decision_end\")\n .with(\"claims.label.ongoing\")\n .with(\"claims.label.fmla\")\n .with(\"claims.tag.all\")\n .with(\"claims.tag.absence\")\n .with(\"claims.tag.fml\")\n .with(\"claims.tag.std\")\n .with(\"claims.tag.wcb\")\n .with(\"claims.no_case.all\", \"navSection\")\n .with(\"claims.no_case.start_reporting\")\n .with(\"claims.no_case.filtered\", \"filter\")\n .with(\"claims.no_case.try_another_filter\", [\"filter\", \"navSection\"])\n .with(\"claims.no_case.cases_will_appear\")\n .with(\"claims.tab.case_data\")\n .with(\"claims.tab.documents\")\n .with(\"claims.status.open\")\n .with(\"claims.status.closed\")\n .with(\"claims.status.approved\")\n .with(\"claims.status.pending\")\n .with(\"claims.status.pending_review\")\n .with(\"claims.status.pending_paperwork\")\n .with(\"claims.status.cancelled\")\n .with(\"claims.status.denied\")\n .with(\"claims.status.missing_paperwork\")\n .with(\"claims.status.submitted\")\n .with(\"claims.status.in_progress\")\n .with(\"claims.status.completed\")\n .with(\"claims.status.incomplete\")\n .with(\"claims.status.outcomed\")\n .with(\"claims.relationship.child\")\n .with(\"claims.relationship.child_adopted\")\n .with(\"claims.relationship.child_biological\")\n .with(\"claims.relationship.child_adult\")\n .with(\"claims.relationship.child_partner\")\n .with(\"claims.relationship.child_foster\")\n .with(\"claims.relationship.child_step\")\n .with(\"claims.relationship.in_loco_parentis\")\n .with(\"claims.relationship.legal_ward\")\n .with(\"claims.relationship.next_of_kin\")\n .with(\"claims.relationship.parent\")\n .with(\"claims.relationship.parent_step\")\n .with(\"claims.relationship.spouse\")\n .with(\"claims.relationship.self\")\n .with(\"claims.table.header\", \"caseId\")\n .with(\"claims.table.confirmation_number\")\n .with(\"claims.table.date\")\n .with(\"claims.table.start_time\")\n .with(\"claims.table.end_time\")\n .with(\"claims.table.duration\")\n .with(\"claims.table.unpaid_time_in_minutes\")\n .with(\"claims.table.footer\")\n .with(\"claims.pagination.pages\", [\"start\", \"end\", \"all\"])\n .with(\"fml_detail.hours_planned\")\n .with(\"fml_detail.hours_used\")\n .with(\"fml_detail.days_planned\")\n .with(\"fml_detail.days_used\")\n .with(\"fml_detail.weeks_planned\")\n .with(\"fml_detail.weeks_used\")\n .with(\"fml_detail.months_planned\")\n .with(\"fml_detail.months_used\")\n .with(\"absence_detail.absence_period_with_duration\", \"absence_duration\")\n .with(\"absence_detail.absence_period\")\n .with(\"absence_detail.absence_time_period\", [\n \"absence_time_from\",\n \"absence_time_to\"\n ])\n .with(\"absence_detail.std_case_id\")\n .with(\"absence_detail.fml_case_id\")\n .with(\"absence_detail.linked_cases\")\n .with(\"absence_detail.rtw_date\")\n .with(\"absence_detail.continuous_start_label\", \"dayOfWeek\")\n .with(\"absence_detail.non_continuous_start_label\", \"daysCount\")\n .with(\"absence_detail.continuous_end_label\", \"dayOfWeek\")\n .with(\"absence_detail.absence_hours\", \"hoursCount\")\n .with(\"absence_detail.unpaid_minutes\", \"minutesCount\")\n .with(\"absence_detail.confirmation_number\")\n .with(\"absence_detail.items_not_shown\", \"daysCount\")\n .with(\"absence_detail.absence_hours_and_minutes\", [\n \"hoursCount\",\n \"minutesCount\"\n ])\n .with(\"absence_detail.absence_minutes\", \"minutesCount\")\n .with(\"absence_detail.all_dates\")\n .with(\"in_progress_absence_modal.title\")\n .with(\"in_progress_absence_modal.support_text\")\n .with(\"in_progress_absence_modal.employee_support_text\", \"employeeFullName\")\n .with(\"leave-policy.claims_list_header\", \"policyName\")\n .with(\"leave-policy.no_claims\", \"policyName\")\n .with(\"leave-policy.no_claims_subtext\")\n .with(\"docs.upload_documents\")\n .with(\"docs.upload_error\")\n .with(\"docs.upload_drag_drop_or\")\n .with(\"docs.upload_ask_description\")\n .with(\"docs.upload_pick_description\")\n .with(\"docs.browse_files\")\n .with(\"docs.upload_documents\")\n .with(\"docs.upload_close\")\n .with(\"docs.upload\")\n .with(\"docs.uploaded\")\n .with(\"docs.uploading\");\n\nexport type ClientTranslationProps = PropsOf;\n\nexport type TranslationsMap = Record;\n\nexport const AbsenceI18n: TranslationsMap = {\n [SupportedLanguage.EnglishCA]: ClientI18nProfile.verifyI18nMap(EN_CA),\n [SupportedLanguage.EnglishUS]: ClientI18nProfile.verifyI18nMap(EN_US),\n [SupportedLanguage.FrenchCA]: ClientI18nProfile.verifyI18nMap(FR_CA),\n [SupportedLanguage.Spanish]: ClientI18nProfile.verifyI18nMap(ES)\n};\n\n/**\n * Look up a translation from among the fixed, default UI strings\n * built in to the app. (doesn't look for client-customized strings)\n * @param props\n * @param lang\n */\nexport function getDefaultLocalizedString(\n props: ClientTranslationProps,\n lang: SupportedLanguage\n): string {\n const translations = AbsenceI18n[lang];\n const vars = _.mapValues(props.vars, v => {\n if (typeof v === \"string\") {\n return v;\n } else {\n return textForLang(v, lang);\n }\n });\n return getTranslation(translations, props.tag, vars);\n}\n\nconst SUPPORTED_LANGUAGES: string[] = Object.values(SupportedLanguage);\nexport function languageIsSupported(\n locale: string\n): locale is SupportedLanguage {\n return SUPPORTED_LANGUAGES.includes(locale);\n}\n","import axios from \"axios\";\nimport { AppContext } from \"context/app-context\";\nimport { getSessionService } from \"../features/session/session-service\";\n\n//const instance = axios.create();\n\nexport const getAxios = () => {\n const sessionService = getSessionService();\n if (sessionService.isAuthenticated()) {\n const token = sessionService.getAccessToken();\n axios.defaults.headers.common = { Authorization: `Bearer ${token}` };\n } else {\n delete axios.defaults.headers.common.Authorization;\n }\n return axios;\n //return instance;\n};\n\nexport const getRestApiUrl = () => {\n const url = process.env.REACT_APP_ABILITI_API_REST_URL;\n if (!url && !AppContext.isSandbox())\n throw new Error(\"Abiliti REST Api url is not defined\");\n return url;\n};\n","import { isValid } from \"date-fns\";\n\nexport function isValidDate(date: Date | undefined): date is Date {\n return isValid(date);\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"application-access-container\":\"application-access_application-access-container__3eVkY\",\"icon\":\"application-access_icon__34WJW\",\"head\":\"application-access_head__3dCe_\",\"context\":\"application-access_context__1bKRi\",\"logout-button\":\"application-access_logout-button__2LnMQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"decision-block_container__1GwCZ\",\"date-label-container\":\"decision-block_date-label-container__2Uf0t\",\"title-wrapper\":\"decision-block_title-wrapper__2Ro9h\",\"title\":\"decision-block_title__1ke23\",\"arrow\":\"decision-block_arrow__3OtCA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"to-do-activities__wrapper\":\"to-do-activities_to-do-activities__wrapper__1okS9\",\"to-do-activities__claim-card\":\"to-do-activities_to-do-activities__claim-card__H5bnC\",\"to-do-activities__footer\":\"to-do-activities_to-do-activities__footer__1Bxh9\",\"to-do-activities__expand-button\":\"to-do-activities_to-do-activities__expand-button__3T27s\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"layout\":\"standard_layout__1au8g\",\"fixed-pane\":\"standard_fixed-pane__2euOa\",\"fixed-pane--shadowed\":\"standard_fixed-pane--shadowed__13N4v\",\"scrollable-pane\":\"standard_scrollable-pane__1hUIR\",\"bottom-navbar\":\"standard_bottom-navbar__3IU6u\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"tabs_container__FycWR\",\"tab-entry\":\"tabs_tab-entry__XIpeV\",\"tab-entry-bottom\":\"tabs_tab-entry-bottom__1Stu2\",\"tab-entry-active\":\"tabs_tab-entry-active__3yBmX\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"title-row\":\"logout-modal_title-row__3rSW0\",\"title\":\"logout-modal_title__1eG3u\",\"button-row\":\"logout-modal_button-row__1jHSW\",\"logout-button\":\"logout-modal_logout-button__32dq1\"};","import React from \"react\";\nimport styles from \"./card.module.scss\";\nimport clsx from \"clsx\";\n\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst Card: React.FC = props => {\n return (\n \n {props.children}\n \n );\n};\n\nexport default Card;\n","export const ReportAnAbsencePermission = [\n \"absence.submitter\",\n \"absence.modify\"\n];\n\nexport const CancelAbsencePermission = [\"absence.cancel\"];\n\nexport const ModifySubmittedAbsencePermission = [\"myabiliti.absence.modify\"];\n","import React from \"react\";\nimport ReactTooltip, { TooltipProps } from \"react-tooltip\";\nimport clsx from \"clsx\";\nimport styles from \"./styles.module.scss\";\n\nexport const Tooltip: React.FC = ({ className, ...props }) => (\n \n);\n","import { defineRoute } from \"./definition\";\n\nexport const Root = defineRoute(\"/\");\nexport const Dashboard = defineRoute(\"/dashboard\");\n\nexport const ReportAbsence = defineRoute(\"/report-absence/:incidentId?\");\nexport const ReportAbsencePrimaryReason = defineRoute(\n \"/report-absence/:incidentId?#primary-reason\"\n);\n\nexport const ViewFmlClaim = defineRoute(\"/claims/fml/:claimId\", [\"claimId\"]);\nexport const ViewStdClaim = defineRoute(\"/claims/std/:claimId\", [\"claimId\"]);\nexport const ViewAbsenceClaim = defineRoute(\"/claims/absence/:claimId\", [\n \"claimId\"\n]);\nexport const ViewAbsenceClaimAllDates = defineRoute(\n \"/claims/absence/:claimId/all-dates\",\n [\"claimId\"]\n);\n\nexport const ClaimsList = defineRoute(\"/claims\");\nexport const ClaimsHistory = defineRoute(\"/claims/history\");\n\nexport const Logout = defineRoute(\"/logout\");\nexport const AccessDenied = defineRoute(\"/access-denied\");\n\nexport const LeavePolicy = defineRoute(\"/leave-policy/:policyCode\", [\n \"policyCode\"\n]);\n","export enum DocumentEntityType {\n MyAbilitiAbsence = 0,\n Case,\n Referral,\n General\n}\n","import React, { useEffect, useState } from \"react\";\nimport { BaseModal } from \"components/base-modal/base-modal\";\nimport { ContainedButton, TextButton } from \"components/buttons\";\n\nimport { FilePond, registerPlugin } from \"react-filepond\";\nimport FilePondPluginImagePreview from \"filepond-plugin-image-preview\";\nimport \"filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css\";\nimport FilePondPluginFileValidateType from \"filepond-plugin-file-validate-type\";\nimport FilePondPluginFileValidateSize from 'filepond-plugin-file-validate-size';\n\nimport styles from \"./styles.module.scss\";\nimport \"filepond/dist/filepond.min.css\";\nimport \"./filepond.scss\";\n\nimport { FilePondFile, ProcessServerConfigFunction } from \"filepond\";\nimport axios from \"axios\";\nimport { getAxios, getRestApiUrl } from \"api/api-rest\";\nimport CloseButton from \"components/buttons/close-button/close-button\";\nimport { getSessionService } from \"features/session/session-service\";\nimport {\n ApiValidationError,\n localizeError\n} from \"features/report-absence/incident\";\nimport { ErrorMessage } from \"components/error-message\";\nimport { TextArea } from \"components/text-field/text-area\";\nimport clsx from \"clsx\";\nimport { DocumentEntityType } from \"./documents\";\nimport { useTranslation } from \"hooks/translation\";\nimport { useDesktopBreakpoint } from \"hooks\";\nimport { useFormat } from \"hooks/format\";\nimport { createShortcut } from \"utils/util\";\nimport { AppContext } from \"context/app-context\";\n\nregisterPlugin(FilePondPluginImagePreview);\nregisterPlugin(FilePondPluginFileValidateType);\nregisterPlugin(FilePondPluginFileValidateSize);\n\nexport const UploadReferralSource = \"MyAbiliti_AR\";\n\nconst MaxNoteLength = 100;\nconst MaxFileSizeMb = 20;\n\ntype UploadDocumentProps = {\n onClose: () => void;\n isOpen: boolean;\n entityType: DocumentEntityType;\n entityId: number;\n};\n\ntype FileState = {\n progress: number;\n error?: string;\n};\n\nexport const UploadDocumentModal: React.FC = ({\n onClose,\n isOpen,\n entityType,\n entityId\n}) => {\n const t = useTranslation();\n const isDesktop = useDesktopBreakpoint();\n\n const [files, setFiles] = useState([]);\n\n const [notes, setNotes] = useState<{ [id: string]: string }>({});\n\n const [fileState, setFileState] = useState<{ [id: string]: FileState }>({});\n\n const [pond, setPond] = useState();\n\n const [uploadErrors, setUploadErrors] = useState();\n\n const clientCode = getSessionService().getUser()?.client_code;\n\n const hasErrors = Object.values(notes).some(v => v.length > MaxNoteLength) || Object.values(fileState).some(s => s.error);\n\n const [uploading, setUploading] = useState(false);\n\n const { currentLocale } = useFormat();\n\n useEffect(() => {\n if (!isOpen) {\n setUploadErrors([]);\n setUploading(false);\n setFiles([]);\n setNotes({});\n setFileState({});\n pond?.removeFiles();\n }\n }, [isOpen, pond]);\n\n const upload = () => {\n setUploadErrors([]);\n setUploading(true);\n pond?.processFiles();\n };\n\n const processHandler: ProcessServerConfigFunction = async (\n fieldName,\n file,\n metadata,\n load,\n error,\n progress,\n abort\n ) => {\n const formData = new FormData();\n formData.append(\"file\", file, file.name);\n formData.append(\"Data.Description\", metadata?.[\"desc\"] ?? \"\");\n formData.append(\"Data.EntityType\", \"\" + entityType);\n formData.append(\"Data.EntityId\", \"\" + entityId); //1191\n formData.append(\"Data.Source\", UploadReferralSource);\n\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n\n try {\n const url =\n getRestApiUrl() +\n \"/connect/v1.0/Document/upload?clientCode=\" +\n clientCode;\n const response = await getAxios().post(url, formData, {\n cancelToken: source.token,\n onUploadProgress: e => {\n progress(e.lengthComputable, e.loaded, e.total);\n }\n });\n load(response.data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (axios.isCancel(e)) {\n console.log(\"Request canceled\", e?.message);\n } else {\n console.log(\"error\", e.request);\n let errorObj = null;\n\n if (e.request?.response) {\n try {\n const data = JSON.parse(e.request.response);\n if (data[0]?.errorDescription) {\n setUploadErrors(data);\n errorObj = data[0];\n }\n } catch (pe) {}\n } else {\n }\n\n if (errorObj === null) {\n errorObj = { errorDescription: e?.message };\n setUploadErrors([\n {\n errorDescription: e?.message,\n errorCode: \"Upload error\",\n errorFields: []\n }\n ]);\n }\n\n error(errorObj);\n setUploading(false);\n }\n }\n\n return {\n abort: () => {\n source.cancel(\"Operation canceled by the user.\");\n }\n };\n };\n\n return (\n \n
\n {!files.length && (\n
\n {t({ tag: \"docs.upload_pick_description\" })}\n
\n )}\n\n 0 && styles[\"doc-upload-filepond-files\"]\n )}\n >\n setPond(ref)}\n //maxFiles={3}\n allowMultiple={true}\n acceptedFileTypes={[\n \"image/gif\",\n \"image/jpeg\",\n \"image/png\",\n \"image/bmp\",\n \"application/pdf\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n ]}\n instantUpload={false}\n allowFileSizeValidation={true}\n maxFileSize={`${MaxFileSizeMb}MB`}\n labelMaxFileSize={`${t({ text: \"docs.max_file_size\" })} (${MaxFileSizeMb} Mb)`}\n labelMaxFileSizeExceeded={`${t({ text: \"docs.exceed_max_file_size\" })} (${MaxFileSizeMb} Mb)`}\n onupdatefiles={fileItems => {\n setFiles(fileItems);\n }}\n server={{\n process: processHandler\n }}\n onprocessfileprogress={(f, pr) => {\n if (uploadErrors?.length) return;\n setFileState(p => {\n p[f.id] = { progress: Math.round(pr * 100) };\n return p;\n });\n setFiles(ff => [...ff]);\n }}\n onprocessfile={(e, f) => {\n if (uploadErrors?.length) return;\n console.log(\"onprocessfile\", e, f);\n setFileState(p => {\n p[f.id] = { progress: 101 };\n return p;\n });\n setFiles(ff => [...ff]);\n }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onerror={(e: any, f) => {\n const text = e?.main ?? e?.errorDescription;\n const errorText = AppContext.getTranslations().tryTranslate(\n text,\n \"error\"\n );\n console.log(\"onerror\", createShortcut(text), f, e);\n if (f) {\n setFileState(p => {\n p[f.id] = {\n error: errorText ?? t({ tag: \"docs.upload_error\" }),\n progress: 0\n };\n return p;\n });\n setFiles(ff => [...ff]);\n }\n }}\n name=\"files\"\n labelIdle={\n isDesktop\n ? `
\n \n
${t({\n tag: \"docs.upload_drag_drop_or\"\n })} \n ${t({\n tag: \"docs.browse_files\"\n })}\n
\n
`\n : `
\n
\n ${t({ tag: \"docs.browse_files\" })}\n
\n
`\n }\n />\n
\n
\n {!uploading && files.length > 0 && (\n
\n {t({ tag: \"docs.upload_ask_description\" })}\n
\n )}\n {uploadErrors && uploadErrors.length > 0 && (\n \n {uploadErrors.map((e, i) => (\n
\n {localizeError(currentLocale.code, e)?.errorDescription ?? e.errorCode ?? \"Upload error\"}\n
\n ))}\n
\n )}\n {files.map(f => (\n
\n
\n
{f.filename}
\n {fileState[f.id]?.progress > 0 && (\n
\n {fileState[f.id].progress >= 100\n ? t({ tag: \"docs.uploaded\" })\n : t({ tag: \"docs.uploading\" }) +\n \" \" +\n fileState[f.id].progress +\n \"%\"}\n
\n )}\n {fileState[f.id]?.error && (\n
\n {fileState[f.id].error}\n
\n )}\n {!uploading && (\n {\n setNotes(n => {\n delete n[f.id];\n return n;\n });\n setFileState(s => {\n delete s[f.id]\n return s;\n });\n pond?.removeFile(f.id);\n }}\n />\n )}\n
\n
\n MaxNoteLength}\n autoResize={true}\n disabled={fileState[f.id]?.progress >= 100}\n value={notes[f.id]}\n onChange={e => {\n setNotes(n => {\n n[f.id] = e.target.value;\n return n;\n });\n f.setMetadata(\"desc\", e.target.value);\n setFiles(fi => [...fi]);\n }}\n />\n
\n
\n ))}\n
\n\n
\n \n {t({ tag: \"docs.upload_close\" })}\n \n \n {t({ tag: \"docs.upload\" })}\n \n
\n \n \n );\n};\n","import { OutlinedButton } from \"components/buttons\";\nimport { UploadIcon } from \"components/icons\";\nimport { useTranslation } from \"hooks/translation\";\nimport React, { useState } from \"react\";\nimport { DocumentEntityType } from \"./documents\";\nimport styles from \"./styles.module.scss\";\nimport { UploadDocumentModal } from \"./upload-modal\";\n\ninterface DocumentUploadProps {\n entityType: DocumentEntityType;\n entityId: number;\n}\n\nexport const DocumentUpload: React.FC = ({\n entityType,\n entityId\n}: DocumentUploadProps) => {\n const t = useTranslation();\n\n const [isUploadOpen, setUploadOpen] = useState(false);\n\n return (\n <>\n
\n setUploadOpen(true)}\n >\n \n {t({ tag: \"docs.upload_documents\" })}\n \n
\n setUploadOpen(false)}\n entityType={entityType}\n entityId={entityId}\n />\n \n );\n};\n","import React from \"react\";\n\n/**\n * To colorize an icon component, assign the className of a style containing\n * a \"fill\" property set to the desired color.\n */\n\ntype IconProps = {\n className?: string;\n onClick?: () => void;\n};\nexport type IconComponent = React.FunctionComponent;\n\n//#region Action\n\nexport const BookletIcon: IconComponent = props => (\n \n \n \n);\n\nexport const PlusIcon: IconComponent = props => (\n \n \n \n);\n\nexport const CalendarIcon: IconComponent = props => (\n \n \n \n);\n\nexport const TimeIcon: IconComponent = props => (\n \n \n \n \n);\n\nexport const QueryOutlineIcon: IconComponent = props => (\n \n \n \n \n);\n\nexport const SettingsIcon: IconComponent = props => (\n \n \n \n \n);\n\n//#endregion Action\n\n//#region Alert\n\nexport const AlertIcon: IconComponent = props => (\n \n \n \n \n);\n\nexport const ExclamationInCircleIcon: IconComponent = props => (\n \n \n \n \n);\n\n//#endregion Alert\n\n//#region Content\n\nexport const DocumentIcon: IconComponent = props => (\n \n \n \n);\n\nexport const AddDocumentIcon: IconComponent = props => (\n \n \n \n \n);\n\n//#endregion Content\n\n//#region Maps\n\nexport const HomeIcon: IconComponent = props => (\n \n \n \n);\n\n//#endregion Maps\n\n//#region Navigation\n\nexport const ChevronDownIcon: IconComponent = props => {\n return (\n \n \n \n );\n};\n\nexport const ChevronUpIcon: IconComponent = props => (\n \n \n \n);\n\nexport const ChevronBackIcon: IconComponent = props => (\n \n \n \n);\n\nexport const ChevronNextIcon: IconComponent = props => (\n \n \n \n);\n\nexport const UpArrowIcon: IconComponent = props => (\n \n \n \n);\n\nexport const DownArrowIcon: IconComponent = props => (\n \n \n \n);\n\nexport const LeftArrowIcon: IconComponent = props => (\n \n \n \n \n);\n\nexport const RightArrowIcon: IconComponent = props => (\n \n \n \n);\n\nexport const SmallRightArrowIcon: IconComponent = props => (\n \n \n \n);\n\nexport const CloseIcon: IconComponent = props => (\n \n \n \n);\n\nexport const RefreshIcon: IconComponent = props => (\n \n \n \n);\n\nexport const LogoutIcon: IconComponent = props => (\n \n \n \n);\n\nexport const MenuIcon: IconComponent = props => (\n \n \n \n);\n\n//#endregion Navigation\n\nexport const CopyIcon: IconComponent = props => (\n \n \n \n);\n\nexport const MoonIcon: IconComponent = props => (\n \n \n \n);\n\nexport const ProfileIcon: IconComponent = props => (\n \n \n \n);\n\nexport const SearchIcon: IconComponent = props => (\n \n \n \n);\n\nexport const CheckedIcon: IconComponent = props => (\n \n \n \n);\n\nexport const ExternalLinkIcon: IconComponent = props => (\n \n \n \n \n);\n\nexport const UploadIcon: IconComponent = props => (\n \n \n \n \n);\n\nexport const AllIcons: IconComponent[] = [\n AddDocumentIcon,\n AlertIcon,\n BookletIcon,\n CalendarIcon,\n ChevronBackIcon,\n ChevronDownIcon,\n ChevronNextIcon,\n ChevronUpIcon,\n CloseIcon,\n RefreshIcon,\n CopyIcon,\n DocumentIcon,\n DownArrowIcon,\n ExclamationInCircleIcon,\n HomeIcon,\n LogoutIcon,\n MenuIcon,\n MoonIcon,\n PlusIcon,\n ProfileIcon,\n QueryOutlineIcon,\n RightArrowIcon,\n SettingsIcon,\n SmallRightArrowIcon,\n UpArrowIcon,\n SearchIcon,\n CheckedIcon,\n TimeIcon,\n ExternalLinkIcon\n];\n","import { getLocale, getParentLocaleCode, SupportedLanguage } from \"./locales\";\nimport { substitute } from \"i18n/core\";\nimport { createShortcut } from \"utils/util\";\n\nexport type TranslationTable = Map;\n\nexport type TranslationStruct = {\n text: string;\n vars?: Record;\n};\n\nexport class TranslationSet {\n table: TranslationTable;\n locale: Locale;\n langCode: SupportedLanguage;\n parentLangCode: string;\n\n constructor(langCode: SupportedLanguage, table: TranslationTable) {\n this.langCode = langCode;\n this.locale = getLocale(langCode);\n this.parentLangCode = getParentLocaleCode(this.locale.code ?? \"en\");\n this.table = table;\n }\n\n translate = (src: string | TranslationStruct) => {\n if (typeof src === \"string\") {\n return this.table.get(src);\n }\n if (!src.text) return null;\n const template = this.table.get(src.text);\n return template\n ? substitute(template, src.vars ?? {})\n : this.langCode === SupportedLanguage.EnglishCA\n ? src.text\n : `${this.langCode}: ${src.text}`;\n };\n\n has = (src: string) => this.table.has(src);\n\n tryTranslate = (text: string, prefix: string) => {\n const handle = prefix + \".\" + createShortcut(text);\n return this.has(handle) ? this.translate(handle) : text;\n };\n}\n","import { UserManager, WebStorageStateStore, Log, User } from \"oidc-client\";\nimport {\n IDENTITY_CONFIG,\n METADATA_OIDC,\n SIGNIN_PARAMS,\n URL_CONFIG\n} from \"./auth-config\";\nimport { ISessionService } from \"features/session/session-model\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { AppContext } from \"context/app-context\";\nimport { getWebConfigurationService } from \"features/config/web-configuration-service\";\n\nexport const signinCallbackPath = \"signin-oidc\";\n\nexport type AuthResult = {\n accessToken: string;\n idToken: string;\n hasEmployees: boolean;\n privileges: string[];\n isCICUser: boolean;\n accessibleClientCount: number;\n};\n\nexport interface AuthContextService {\n signinRedirectCallback?: () => Promise;\n logout?: () => void;\n signoutRedirectCallback?: () => void;\n signinRedirect?: () => void;\n signinSilentCallback?: () => Promise;\n createSigninRequest?: () => void;\n getIdToken?: () => string;\n setSessionInfo?: (authResult: AuthResult) => void;\n}\n\nexport default class AuthService implements AuthContextService {\n UserManager: UserManager;\n user?: User;\n sessionService: ISessionService;\n\n constructor() {\n this.UserManager = new UserManager({\n ...IDENTITY_CONFIG,\n userStore: new WebStorageStateStore({ store: window.sessionStorage }),\n monitorSession: false,\n metadata: {\n ...METADATA_OIDC\n }\n });\n\n // Logger\n Log.logger = console;\n Log.level = Log.DEBUG;\n\n this.UserManager.events.addUserLoaded(async user => {\n this.user = user;\n this.setSessionInfo({\n accessToken: user.access_token,\n idToken: user.id_token,\n hasEmployees: user.profile.can_manage_employees === \"True\",\n privileges: Array.isArray(user.profile.pv) ? user.profile.pv : [],\n isCICUser: user.profile.ee_no === \"\",\n accessibleClientCount: user.profile.accessible_client_count\n });\n\n await getWebConfigurationService()\n .canAccessApplication(user.profile.client_code)\n .then(result =>\n sessionStorage.setItem(\"hasAccess\", result ? \"true\" : \"false\")\n );\n sessionStorage.setItem(\"client_code\", user.profile.client_code);\n\n if (window.location.href.indexOf(signinCallbackPath) !== -1) {\n this.navigateToScreen();\n }\n });\n\n this.UserManager.events.addUserSignedOut(async () => {\n await this.signinRedirect();\n });\n\n this.UserManager.events.addSilentRenewError(async e => {\n console.log(\"silent renew error\", e.message);\n if (e.message === \"login_required\") {\n await this.signinRedirect();\n }\n });\n this.sessionService = getSessionService();\n }\n\n async signinRedirectCallback(): Promise {\n return this.UserManager.signinRedirectCallback();\n }\n\n signinRedirect = async () => {\n localStorage.setItem(\"redirectUri\", window.location.pathname);\n\n const params = new URLSearchParams(window.location.search);\n if (params.has(\"language\")) {\n localStorage.setItem(\n SIGNIN_PARAMS.language,\n params.get(\"language\") ?? \"\"\n );\n }\n if (params.has(\"clientCode\")) {\n localStorage.setItem(\n SIGNIN_PARAMS.clientCode,\n params.get(\"clientCode\") ?? \"\"\n );\n }\n await this.UserManager.signinRedirect({});\n };\n\n navigateToScreen = () => {\n let redirectUri = !!localStorage.getItem(\"redirectUri\")\n ? localStorage.getItem(\"redirectUri\")\n : \"/dashboard\";\n\n if (this.sessionService.isCICUser()) redirectUri = \"/report-absence\";\n if (!this.sessionService.hasAccess()) redirectUri = \"/access-denied\";\n window.location.replace(redirectUri ?? \"\");\n };\n\n setSessionInfo(authResult: AuthResult) {\n this.sessionService.setSession(authResult.accessToken);\n sessionStorage.setItem(\"id_token\", authResult.idToken);\n\n sessionStorage.setItem(\n \"hasEmployees\",\n authResult.hasEmployees ? \"true\" : \"false\"\n );\n\n sessionStorage.setItem(\n \"isCICUser\",\n authResult.isCICUser ? \"true\" : \"false\"\n );\n\n sessionStorage.setItem(\"privileges\", JSON.stringify(authResult.privileges));\n\n sessionStorage.setItem(\n \"accessibleClientCount\",\n authResult.accessibleClientCount.toString()\n );\n\n const client_code = localStorage.getItem(SIGNIN_PARAMS.clientCode);\n if (client_code) {\n sessionStorage.setItem(\"client_code\", client_code);\n localStorage.removeItem(SIGNIN_PARAMS.clientCode);\n }\n }\n\n getIdToken(): string {\n return sessionStorage.getItem(\"id_token\") ?? \"\";\n }\n\n async signinSilentCallback(): Promise {\n return this.UserManager.signinSilentCallback();\n }\n\n createSigninRequest = async () => {\n return this.UserManager.createSigninRequest();\n };\n\n logout = async () => {\n if (AppContext.isSandbox()) {\n return;\n }\n \n // Get the id_token from sessionStorage (assuming it exists)\n const idToken = sessionStorage.getItem(\"id_token\");\n const post_logout_uri = encodeURI(IDENTITY_CONFIG.post_logout_redirect_uri);\n // Construct the logout URL with the 'culture' query parameter\n const culture = sessionStorage.getItem(\"lang\"); \n const logoutUrl = `${METADATA_OIDC.end_session_endpoint}?id_token_hint=${idToken}&post_logout_redirect_uri=${post_logout_uri}&culture=${culture}`;\n \n // Perform the logout by redirecting the user to the logout URL\n window.location.href = logoutUrl;\n \n // Clear localStorage and reset the session\n localStorage.clear();\n this.sessionService.setSession(null);\n \n // Clear any stale state\n await this.UserManager.clearStaleState();\n };\n\n signoutRedirectCallback = async () => {\n if (AppContext.isSandbox()) {\n window.location.replace(\"\");\n return;\n }\n\n await this.UserManager.signoutRedirectCallback().then(() => {\n localStorage.clear();\n sessionStorage.clear();\n this.sessionService.setSession(null);\n window.location.replace(URL_CONFIG.react_app_redirect_url);\n });\n await this.UserManager.clearStaleState();\n };\n}\n","import React, { useContext, useState } from \"react\";\nimport {\n ClientTranslationProps,\n getDefaultLocalizedString,\n TranslationsMap\n} from \"i18n\";\nimport { SupportedLanguage } from \"features/translations/locales\";\n\nimport { tryGetTranslation } from \"i18n/core\";\nimport _ from \"lodash-es\";\nimport { textForLang } from \"shared-types/api\";\n\ntype PartialTranslationsMap = Partial;\ntype SetTranslationsFunction = (translations: PartialTranslationsMap) => void;\n\nexport type GetLocalizedStringFunction = (\n props: ClientTranslationProps,\n lang: SupportedLanguage\n) => string;\n\ntype TranslationContextType = {\n currentTranslations: PartialTranslationsMap;\n setTranslations: SetTranslationsFunction;\n getLocalizedString: GetLocalizedStringFunction;\n};\n\nconst TranslationContext = React.createContext({\n currentTranslations: {},\n setTranslations: translations => {\n console.log(\n \"Error: default setTranslations() called. Do you have a Provider?\"\n );\n return;\n },\n getLocalizedString: (props, lang) => {\n console.log(\"default getLocalizedString() called. Do you have a provider?\");\n return getDefaultLocalizedString(props, lang);\n }\n});\n\nexport const TranslationProvider: React.FunctionComponent = props => {\n const [state, setState] = useState({});\n return (\n {\n setState(t);\n },\n getLocalizedString: (props, lang) => {\n if (Object.keys(state).includes(lang)) {\n const thisLangMap = state[lang];\n\n if (thisLangMap) {\n const vars = _.mapValues(props.vars, v => {\n if (typeof v === \"string\") {\n return v;\n } else {\n return textForLang(v, lang);\n }\n });\n const customTranslation = tryGetTranslation(\n thisLangMap,\n props.tag,\n vars\n );\n if (customTranslation.result === \"found\") {\n return customTranslation.value;\n }\n }\n }\n\n return getDefaultLocalizedString(props, lang);\n }\n }}\n >\n {props.children}\n \n );\n};\n\nexport const useTranslationContext = () => useContext(TranslationContext);\n","import React from \"react\";\nimport styles from \"./decision-block.module.scss\";\nimport SummaryLabel from \"components/summary-label/summary-label\";\nimport { RightArrowIcon } from \"components/icons\";\nimport { TagForDecisionStatus } from \"components/tag/tag-for-claim-status\";\nimport Card from \"components/card/card\";\nimport clsx from \"clsx\";\nimport { ClaimDecision } from \"features/claims/claims-model\";\nimport { useTranslation } from \"hooks/translation\";\nimport { useFormat } from \"hooks/format\";\n\ntype Props = {\n decision: ClaimDecision;\n className?: string;\n};\n\nconst DecisionBlock: React.FC = ({ decision, className }) => {\n const t = useTranslation();\n const { formatLocal } = useFormat();\n\n const getEndLabel = () => {\n switch (decision.status) {\n case \"PENDING\":\n return (\n \n );\n default:\n return (\n \n );\n }\n };\n\n return (\n \n
\n

\n {t(decision.policyCodeText)}\n

\n
\n
\n \n
\n
\n \n \n {getEndLabel()}\n
\n
\n );\n};\n\nexport default DecisionBlock;\n","import React from \"react\";\nimport DecisionBlock from \"components/decision-block/decision-block\";\nimport { IconButton, TextButton } from \"components/buttons\";\nimport styles from \"./styles.module.scss\";\nimport { useDesktopBreakpoint } from \"hooks\";\nimport { useTranslation } from \"hooks/translation\";\nimport SummaryLabel from \"components/summary-label/summary-label\";\nimport { useHistory } from \"react-router\";\nimport { LeftArrowIcon } from \"components/icons\";\nimport {\n ClaimDecision,\n ClaimRelationship,\n ClaimType\n} from \"features/claims/claims-model\";\nimport { Translation } from \"components/translation\";\nimport { ClientTranslationProps } from \"i18n\";\n\nexport const DecisionsSection: React.FC<{\n showAll: boolean;\n decisions: ClaimDecision[];\n setShowAllDecisions: (show: boolean) => void;\n}> = props => {\n return props.showAll ? (\n <>\n
\n {props.decisions.map(decision => (\n \n ))}\n
\n props.setShowAllDecisions(false)}\n >\n \n \n \n ) : (\n <>\n {props.decisions.length > 0 && (\n <>\n \n
\n props.setShowAllDecisions(true)}\n >\n \n \n \n {props.decisions.length - 1}{\" \"}\n \n \n
\n \n )}\n \n );\n};\n\nexport const DesktopClaimIdLabel: React.FC<{ claimId: string }> = ({\n claimId\n}) => {\n const isDesktop = useDesktopBreakpoint();\n const t = useTranslation();\n\n return (\n <>\n {isDesktop && (\n
\n \n
\n )}\n \n );\n};\n\nexport const DesktopConfirmationNumberLabel: React.FC<{ claimId: string }> = ({\n claimId\n}) => {\n const isDesktop = useDesktopBreakpoint();\n const t = useTranslation();\n\n return (\n <>\n {isDesktop && (\n
\n \n
\n )}\n \n );\n};\n\nexport const ClaimDesktopHeaderFragment = () => {\n const history = useHistory();\n\n return (\n <>\n history.goBack()}\n >\n \n \n \n \n );\n};\n\nexport const calculateCardElementsHeight = (\n elements: HTMLElement[],\n numberOfColumns: number,\n numberOfRows: number\n) => {\n for (let i = 0; i < numberOfRows; i++) {\n const elementsInIRow = elements.slice(\n i * numberOfColumns,\n numberOfColumns * (i + 1)\n );\n const elementsHeights = elementsInIRow.map(el => el.clientHeight);\n const maxElementHeight = elementsHeights.length\n ? Math.max(...elementsHeights)\n : \"auto\";\n const elementHeight = Number.isNaN(maxElementHeight)\n ? maxElementHeight.toString()\n : `${maxElementHeight}px`;\n\n elementsInIRow.forEach(el =>\n el.parentElement ? (el.parentElement.style.height = elementHeight) : null\n );\n }\n};\n\nexport const setAutoHeightOfCardElements = (elements: HTMLElement[]) => {\n elements.forEach(el =>\n el.parentElement ? (el.parentElement.style.height = \"auto\") : null\n );\n};\n\ntype CardProps = {\n cardList: HTMLElement;\n windowWidth: number;\n mobileBreakPoint: number;\n numberOfColumns?: number;\n cardWidth?: number;\n gridGap?: number;\n};\n\nexport const setCardLayout = ({\n cardList,\n mobileBreakPoint,\n windowWidth,\n numberOfColumns,\n cardWidth,\n gridGap\n}: CardProps) => {\n const titles = Array.from(\n cardList.querySelectorAll('[data-card=\"title\"]')\n );\n const tags = Array.from(\n cardList.querySelectorAll('[data-card=\"tag\"]')\n );\n const dates = Array.from(\n cardList.querySelectorAll('[data-card=\"date\"]')\n );\n const numberOfCards = titles.length;\n\n if (windowWidth >= mobileBreakPoint) {\n if (!numberOfColumns) {\n const totalCardWidth = cardWidth ?? 1 + (gridGap ?? 0);\n const listWidth = cardList.clientWidth;\n numberOfColumns =\n 1 + Math.floor((listWidth - (cardWidth ?? 1)) / totalCardWidth);\n }\n\n const numberOfRows = Math.ceil(numberOfCards / numberOfColumns);\n\n calculateCardElementsHeight(titles, numberOfColumns, numberOfRows);\n calculateCardElementsHeight(tags, numberOfColumns, numberOfRows);\n calculateCardElementsHeight(dates, numberOfColumns, numberOfRows);\n } else {\n setAutoHeightOfCardElements(titles);\n setAutoHeightOfCardElements(tags);\n setAutoHeightOfCardElements(dates);\n }\n};\n\nexport const MobileHeaderFragment: React.FC = ({ children }) => {\n const history = useHistory();\n\n return (\n <>\n history.goBack()}\n >\n \n \n {children}\n \n );\n};\n\nexport const ClaimMobileHeaderFragment: React.FC<{ caseId: string }> = ({\n caseId\n}) => {\n return (\n \n {caseId}\n \n );\n};\n\nexport function translateRelationship(\n relationship: ClaimRelationship\n): ClientTranslationProps {\n switch (relationship) {\n case \"child-adopted\":\n return { tag: \"claims.relationship.child_adopted\" };\n case \"child-biological\":\n return { tag: \"claims.relationship.child_biological\" };\n case \"child-adult\":\n return { tag: \"claims.relationship.child_adult\" };\n case \"child-partner\":\n return { tag: \"claims.relationship.child_partner\" };\n case \"child-foster\":\n return { tag: \"claims.relationship.child_foster\" };\n case \"child-step\":\n return { tag: \"claims.relationship.child_step\" };\n case \"in-loco-parentis\":\n return { tag: \"claims.relationship.in_loco_parentis\" };\n case \"legal-ward\":\n return { tag: \"claims.relationship.legal_ward\" };\n case \"next-of-kin\":\n return { tag: \"claims.relationship.next_of_kin\" };\n case \"parent\":\n return { tag: \"claims.relationship.parent\" };\n case \"parent-step\":\n return { tag: \"claims.relationship.parent_step\" };\n case \"spouse\":\n return { tag: \"claims.relationship.spouse\" };\n case \"self\":\n return { tag: \"claims.relationship.self\" };\n }\n}\n\nexport function translateAbbreviatedRelationship(\n relationship: ClaimRelationship | string | undefined\n): ClientTranslationProps | undefined {\n // Using the abbreviated form for some relationships, to keep tags short\n switch (relationship) {\n case \"child-adopted\":\n case \"child-biological\":\n case \"child-adult\":\n case \"child-partner\":\n case \"child-foster\":\n case \"child-step\":\n case \"in-loco-parentis\":\n return { tag: \"claims.relationship.child\" };\n case \"legal-ward\":\n return { tag: \"claims.relationship.legal_ward\" };\n case \"next-of-kin\":\n return { tag: \"claims.relationship.next_of_kin\" };\n case \"parent\":\n return { tag: \"claims.relationship.parent\" };\n case \"parent-step\":\n return { tag: \"claims.relationship.parent_step\" };\n case \"spouse\":\n return { tag: \"claims.relationship.spouse\" };\n case \"self\":\n return { tag: \"claims.relationship.self\" };\n }\n}\n\nexport function getFilterLabel(filter: FilterType): ClientTranslationProps {\n switch (filter) {\n case \"all\":\n return { tag: \"claims.tag.all\" };\n case \"absence\":\n return { tag: \"claims.tag.absence\" };\n case \"fml\":\n return { tag: \"claims.tag.fml\" };\n case \"std\":\n return { tag: \"claims.tag.std\" };\n case \"wcb\":\n return { tag: \"claims.tag.wcb\" };\n }\n}\n\nexport type FilterType = \"all\" | ClaimType;\n\nexport type ClaimTypeFilter = {\n filter: FilterType;\n label: ClientTranslationProps;\n};\n\nexport const filters: ClaimTypeFilter[] = [\n { filter: \"all\", label: { tag: \"claims.tag.all\" } },\n { filter: \"absence\", label: { tag: \"claims.tag.absence\" } },\n { filter: \"fml\", label: { tag: \"claims.tag.fml\" } },\n { filter: \"std\", label: { tag: \"claims.tag.std\" } },\n { filter: \"wcb\", label: { tag: \"claims.tag.wcb\" } }\n];\n\nexport const getFilterTypeFromString = (\n text: string\n): FilterType | undefined => {\n const filterType =\n text === \"all\" ||\n text === \"std\" ||\n text === \"absence\" ||\n text === \"fml\" ||\n text === \"wcb\"\n ? text\n : undefined;\n return filterType;\n};\n\nexport enum ClaimFilterUrlParamName {\n ClaimType = \"claimType\"\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"close-button_button__2nobi\",\"icon--white\":\"close-button_icon--white__1o3y6\",\"icon--black\":\"close-button_icon--black__3UwXN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"content\":\"leave-proceed-modal_content__1AD8V\",\"button-row\":\"leave-proceed-modal_button-row__2RUpJ\",\"close-button\":\"leave-proceed-modal_close-button__HALBE\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"policy-summary-mobile\":\"policy-summary-mobile_policy-summary-mobile__2MNXT\",\"title\":\"policy-summary-mobile_title__17Mqg\",\"policies\":\"policy-summary-mobile_policies__1ox3Y\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"all-dates__header\":\"absence-claim-all-dates_all-dates__header__FvnOs\",\"all-dates__header--mobile\":\"absence-claim-all-dates_all-dates__header--mobile__38tXq\",\"all-dates__fixed-pane--mobile\":\"absence-claim-all-dates_all-dates__fixed-pane--mobile__1JP2Q\"};","import {\n ApiCallResult,\n AbsenceConfig,\n AddNewEmployeePermission,\n EmployeeVerificationFields,\n OrganizationHierarchy,\n AbsenceIncident,\n AbsenceReasonAnswerInfo,\n AbsenceShift,\n AbsenceType,\n ApiValidationError,\n IncidentQuestionModel,\n IncidentSaveResult,\n IncidentsCancelResult,\n IncidentSubmitResult,\n LatestInProgressAbsenceResult,\n WorkShift,\n WorkShiftForDate,\n IncidentClosingScript\n} from \"./incident\";\nimport { ClientTranslationProps } from \"i18n\";\nimport { AnswerChoice, ConfigAbsenceQuestion } from \"./absence-questions\";\nimport { TimeInterval } from \"shared-types/time\";\nimport { LocaleTextEntry, LocaleTexts } from \"shared-types/api\";\nimport {\n EmployeeSchedule,\n PreviousAbsence\n} from \"features/employee/employee-model\";\nimport {\n CancelAbsenceRequestModelInput,\n SaveEmployeeModelInput\n} from \"graphql-types.gen\";\n\nexport interface IAbsenceReportingService {\n loadConfig(clientCode: string, state: string): Promise;\n loadAddingNewEmployeePermission(\n clientCode: string\n ): Promise;\n loadEmployeeVerificationFields(\n clientCode: string\n ): Promise;\n loadOrganizationHierarchy(\n clientCode: string\n ): Promise;\n addNewEmployee(\n clientCode: string,\n input: SaveEmployeeModelInput\n ): Promise;\n saveIncident(\n clientCode?: string,\n incident?: AbsenceIncident,\n askIfCanBeLinked?: boolean,\n locale?: string\n ): Promise;\n submitIncident(\n incident: AbsenceIncident,\n locale?: string\n ): Promise;\n loadConfigQuestions(incidentId: number): Promise;\n loadIncident(incidentId: number): Promise;\n cancelIncidents(\n cancelRequest: CancelAbsenceRequestModelInput,\n incidentIds: number[],\n locale?: string\n ): Promise;\n getLatestInProgressAbsence(\n employeeNumber?: string,\n clientCode?: string\n ): Promise;\n loadClosingScript(incidentId: number): Promise;\n}\n\nexport type ValidationResult =\n | {\n isValid: true;\n }\n | {\n isValid: false;\n message?: ClientTranslationProps;\n };\n\nexport type QuestionValidationCallback = (validation: ValidationResult) => void;\n\nexport type AbsenceDateSelection = {\n absenceType: AbsenceType;\n dates: Date[];\n};\n\nexport type AbsenceTimeSelection = {\n absenceType?: AbsenceType;\n times: TimeInterval[];\n};\n\nexport type AbsenceShiftSelection = {\n shifts: WorkShiftForDate[];\n};\n\nexport type QuestionAnswer =\n | { type: \"empty\" }\n | { type: \"date\"; value?: Date }\n | { type: \"string\"; value?: string }\n | { type: \"absence-dates\"; value: AbsenceDateSelection }\n | { type: \"absence-shifts\"; value: AbsenceShiftSelection }\n | { type: \"absence-times\"; value: AbsenceTimeSelection }\n | { type: \"rtw\"; value: RTWAnswer }\n | { type: \"boolean\"; value?: boolean }\n | { type: \"submit\"; value?: SubmitResult };\n\nexport type WorkflowQuestionType =\n | \"MultipleChoiceListQuestion\"\n | \"CallCenterEmployeePhoneNumber\"\n | \"ReportStart\"\n | \"ConfigQuestion\"\n | \"MultipleChoiceTileQuestion\"\n | \"MultipleChoiceListQuestion\"\n | \"BooleanQuestion\"\n | \"CalendarQuestion\"\n | \"ReturnToWorkQuestion\"\n | \"DatePickerQuestion\"\n | \"TimeQuestion\"\n | \"ShiftQuestion\"\n | \"AbsenceSummary\"\n | \"ConfirmationMessage\";\n\nexport type QuestionSummary = (\n | {\n type: \"text\";\n answer?: string | LocaleTexts;\n }\n | {\n type: \"on-behalf\";\n answer: {\n company?: string;\n employeeName?: string;\n employeeId?: string;\n phoneNumber?: string;\n };\n }\n | {\n type: \"boolean\";\n answer: boolean;\n }\n | {\n type: \"reason\";\n answer: {\n primary?: LocaleTexts;\n secondary?: LocaleTexts;\n };\n }\n | {\n type: \"absence-dates\";\n answer: {\n absenceType?: AbsenceType;\n dates: AbsenceShift[];\n };\n }\n | {\n type: \"date\";\n answer: Date | null;\n }\n) & {\n label: LocaleTexts | ClientTranslationProps;\n};\n\nexport interface WorkflowQuestionBaseTemplate {\n id: string;\n index?: number;\n answer: () => QuestionAnswer;\n setAnswer: (answer: QuestionAnswer) => void;\n validateAnswer?: (answer: QuestionAnswer) => ValidationResult;\n requiresAnswer: () => boolean;\n config?: ConfigAbsenceQuestion;\n choices?: () => AnswerChoice[];\n hidden?: () => boolean;\n absenceReasonInfo?: () => AbsenceReasonAnswerInfo | undefined;\n label?: string;\n promptTag?: () => ClientTranslationProps;\n descriptionTag?: () => ClientTranslationProps;\n postSubmit?: boolean;\n summary?: () => QuestionSummary;\n hideInSummary?: boolean;\n isSubmissionMode?: boolean;\n getSubmitErrorMsg?: () => string | undefined;\n}\n\nexport interface CalendarQuestionTemplate extends WorkflowQuestionBaseTemplate {\n type: \"CalendarQuestion\";\n schedule: () => EmployeeSchedule;\n previousAbsences: () => PreviousAbsence[];\n}\n\nexport interface ShiftQuestionTemplate extends WorkflowQuestionBaseTemplate {\n type: \"ShiftQuestion\";\n workShiftOptions: () => WorkShift[];\n addTempShift: (shift: WorkShift) => void;\n initialSameShiftToggle: () => boolean;\n sameShiftToggleHandler: (val: boolean) => void;\n maxShiftLengthThresholdInMinutes: number;\n}\n\nexport interface TimeQuestionTemplate extends WorkflowQuestionBaseTemplate {\n type: \"TimeQuestion\";\n scheduleOverrideWarning: () => boolean;\n scheduleOverrideMessage: () => LocaleTextEntry[] | ClientTranslationProps;\n selectedWorkShifts: () => WorkShiftForDate[];\n previousAbsences: () => PreviousAbsence[];\n maxShiftLengthThresholdInMinutes: number;\n}\n\nexport type WorkflowQuestionTemplate =\n | ({ type: \"MultipleChoiceListQuestion\" } & WorkflowQuestionBaseTemplate)\n | ({ type: \"CallCenterEmployeePhoneNumber\" } & WorkflowQuestionBaseTemplate)\n | ({ type: \"ReportStart\" } & WorkflowQuestionBaseTemplate)\n | ({ type: \"ConfigQuestion\" } & WorkflowQuestionBaseTemplate)\n | ({ type: \"MultipleChoiceTileQuestion\" } & WorkflowQuestionBaseTemplate)\n | ({ type: \"MultipleChoiceListQuestion\" } & WorkflowQuestionBaseTemplate)\n | CalendarQuestionTemplate\n | ({ type: \"BooleanQuestion\" } & WorkflowQuestionBaseTemplate)\n | ({ type: \"ReturnToWorkQuestion\" } & WorkflowQuestionBaseTemplate)\n | ({ type: \"DatePickerQuestion\" } & WorkflowQuestionBaseTemplate)\n | TimeQuestionTemplate\n | ShiftQuestionTemplate\n | ({ type: \"AbsenceSummary\" } & WorkflowQuestionBaseTemplate)\n | ({ type: \"ConfirmationMessage\" } & WorkflowQuestionBaseTemplate);\n\nexport interface WorkflowQuestionBase {\n id: string;\n index?: number;\n answer: QuestionAnswer;\n setAnswer: (answer: QuestionAnswer) => void;\n validateAnswer?: (answer: QuestionAnswer) => ValidationResult;\n requiresAnswer: boolean;\n isValid: boolean;\n config?: ConfigAbsenceQuestion;\n choices?: AnswerChoice[];\n hidden?: boolean;\n absenceReasonInfo?: AbsenceReasonAnswerInfo;\n promptTag?: ClientTranslationProps;\n descriptionTag?: ClientTranslationProps;\n postSubmit?: boolean;\n summary?: QuestionSummary;\n hideInSummary?: boolean;\n isSubmissionMode?: boolean;\n getSubmitErrorMsg?: () => string | undefined;\n}\n\nexport interface CalendarQuestion extends WorkflowQuestionBase {\n type: \"CalendarQuestion\";\n schedule: EmployeeSchedule;\n previousAbsences: PreviousAbsence[];\n}\n\nexport interface ShiftQuestion extends WorkflowQuestionBase {\n type: \"ShiftQuestion\";\n workShiftOptions: WorkShift[];\n addTempShift: (shift: WorkShift) => void;\n initialSameShiftToggle: () => boolean;\n sameShiftToggleHandler: (val: boolean) => void;\n maxShiftLengthThresholdInMinutes: number;\n}\n\nexport interface TimeQuestion extends WorkflowQuestionBase {\n type: \"TimeQuestion\";\n scheduleOverrideWarning: boolean;\n scheduleOverrideMessage: LocaleTextEntry[] | ClientTranslationProps;\n selectedWorkShifts: WorkShiftForDate[];\n previousAbsences: PreviousAbsence[];\n maxShiftLengthThresholdInMinutes: number;\n}\n\nexport type WorkflowSection =\n | ({ type: \"MultipleChoiceListQuestion\" } & WorkflowQuestionBase)\n | ({ type: \"CallCenterEmployeePhoneNumber\" } & WorkflowQuestionBase)\n | ({ type: \"ReportStart\" } & WorkflowQuestionBase)\n | ({ type: \"ConfigQuestion\" } & WorkflowQuestionBase)\n | ({ type: \"MultipleChoiceTileQuestion\" } & WorkflowQuestionBase)\n | ({ type: \"MultipleChoiceListQuestion\" } & WorkflowQuestionBase)\n | CalendarQuestion\n | ({ type: \"BooleanQuestion\" } & WorkflowQuestionBase)\n | ({ type: \"ReturnToWorkQuestion\" } & WorkflowQuestionBase)\n | ({ type: \"DatePickerQuestion\" } & WorkflowQuestionBase)\n | TimeQuestion\n | ShiftQuestion\n | ({ type: \"AbsenceSummary\" } & WorkflowQuestionBase)\n | ({ type: \"ConfirmationMessage\" } & WorkflowQuestionBase);\n\nexport type RTWAnswer = { returnToWorkDate?: Date };\n\nexport type WorkflowAnswer = {\n answer: string;\n answered?: boolean;\n};\n\nexport type SubmitResult = {\n absenceIncidentId?: number;\n success: boolean;\n closingScripts?: LocaleTexts[];\n validationErrors?: ApiValidationError[];\n};\n\nexport type CancelResult = {\n success: boolean;\n};\n\nexport type Employee = {\n id: string;\n firstName: string;\n lastName: string;\n};\n\nexport enum OnBehalfOf {\n Myself = \"I’m reporting for myself\",\n OtherEmployee = \"I’m reporting on behalf of an employee\"\n}\n","import { AnswerChoice } from \"../absence-questions\";\nimport { ARWorkflowState } from \"../absence-reporting-state\";\nimport { QuestionAnswer, QuestionSummary } from \"../absence-reporting-types\";\n\nconst getSecondaryReasons = (state: ARWorkflowState) => {\n return (\n state.config?.reasonOfAbsence.answers.find(\n a => a.answerId === state.incident.primaryReason\n )?.subAnswers || []\n );\n};\n\nexport function buildReasonSection(state: ARWorkflowState) {\n return [\n {\n id: \"primary-reason\",\n type: \"MultipleChoiceTileQuestion\",\n promptTag: () => ({\n tag: \"reportAbsence.primary_absence_reason.prompt\"\n }),\n answer: () => ({\n type: \"string\",\n value: state.incident.primaryReason\n }),\n summary: (): QuestionSummary => {\n return {\n type: \"reason\",\n label: { tag: \"reportAbsence.absence_date.prompt\" },\n answer: {\n primary: state.config?.reasonOfAbsence.answers.find(\n a => a.answerId === state.incident.primaryReason\n )?.locales,\n secondary: getSecondaryReasons(state).find(\n a => a.answerId === state.incident.secondaryReason\n )?.locales\n }\n };\n },\n setAnswer: (answer: QuestionAnswer) => {\n if (answer.type === \"string\") {\n const newReason = answer.value || \"\";\n const hasAnswerChanged = state.incident.primaryReason !== newReason;\n if (!hasAnswerChanged) return;\n\n state.incident.primaryReason = newReason;\n\n // Automatically set the secondary reason if there is only one option\n const secondaryReasons = getSecondaryReasons(state);\n if (secondaryReasons.length === 1) {\n state.incident.secondaryReason = secondaryReasons[0].answerId;\n } else {\n // Clear secondary reason to ensure we don't submit an invalid primary/secondary combo\n state.incident.secondaryReason = undefined;\n }\n }\n },\n requiresAnswer: () => !state.incident.primaryReason,\n choices: () =>\n state.config?.reasonOfAbsence.answers.map(r => {\n return {\n value: r.answerId,\n text: r.locales,\n imageUrl: r.imageUrl\n } as AnswerChoice;\n }) || [],\n isSubmissionMode: true\n },\n {\n id: \"secondary-reason\",\n type: \"MultipleChoiceListQuestion\",\n promptTag: () => ({\n tag: \"reportAbsence.secondary_absence_reason.description\"\n }),\n answer: () => ({\n type: \"string\",\n value: state.incident.secondaryReason\n }),\n setAnswer: (answer: QuestionAnswer) => {\n if (answer.type === \"string\") {\n const hasReasonChanged =\n state.incident.secondaryReason !== answer.value;\n if (hasReasonChanged) {\n state.incident.secondaryReason = answer.value;\n }\n }\n },\n requiresAnswer: () =>\n !state.incident.secondaryReason &&\n getSecondaryReasons(state).length > 0,\n choices: () =>\n getSecondaryReasons(state).map(r => {\n return {\n value: r.answerId,\n text: r.locales\n };\n }) || [],\n hidden: () => getSecondaryReasons(state).length < 2,\n isSubmissionMode: true\n }\n ];\n}\n","import {\n AbsenceIncident,\n AbsenceIncidentLinkability,\n AbsenceShift\n} from \"features/report-absence/incident\";\nimport {\n addBusinessDays,\n formatISO,\n isAfter,\n isBefore,\n max,\n startOfDay\n} from \"date-fns\";\nimport { isValidDate } from \"shared-types/date\";\nimport _ from \"lodash-es\";\n\nexport function suggestNextShiftDate(\n absenceDates: Pick[]\n): Date | undefined {\n const nextBusinessDay = addBusinessDays(\n max(absenceDates.map(date => date.shiftStartTime)),\n 1\n );\n\n return isValidDate(nextBusinessDay) ? startOfDay(nextBusinessDay) : undefined;\n}\n\nexport function determineIsPartialDate(date: AbsenceShift): boolean {\n if (date.scheduledShiftStartTime && date.scheduledShiftEndTime) {\n return (\n isAfter(date.shiftStartTime, date.scheduledShiftStartTime) ||\n isBefore(date.shiftEndTime, date.scheduledShiftEndTime)\n );\n }\n\n return false;\n}\n\nexport function shouldAskIfCanBeLinked(incident: AbsenceIncident) {\n const isLinkabilityKnown = incident.linkability.canBeLinked !== undefined;\n const hasSufficientDataToAsk =\n incident.primaryReason > \"\" && incident.absenceDates.length > 0;\n\n if (isLinkabilityKnown) {\n const cacheMatches = _.isEqual(\n incident.linkability.cache,\n linkabilityCache(incident)\n );\n return !cacheMatches;\n } else {\n return hasSufficientDataToAsk;\n }\n}\n\nexport function linkabilityCache(incident: AbsenceIncident) {\n // These are the things that affect whether an absence can be linked.\n // Finding out whether an absence can be linked is a potentially expensive operation,\n // so we only ask when one of these things has changed.\n return {\n primaryReason: incident.primaryReason,\n secondaryReason: incident.secondaryReason,\n dates: incident.absenceDates.map(ad =>\n formatISO(ad.shiftStartTime, { representation: \"date\" })\n )\n };\n}\n\nexport function maybeUpdateLinkability(\n askedIfCanBeLinked: boolean,\n apiIncident: AbsenceIncident,\n previousIncident: AbsenceIncident\n): AbsenceIncidentLinkability {\n // Only use the linkability from the API if we asked for it. If we didn't ask,\n // it will just be undefined, so continue to use the old linkability in that case.\n if (askedIfCanBeLinked) {\n return {\n ...apiIncident.linkability,\n cache: linkabilityCache(apiIncident)\n };\n } else {\n return previousIncident.linkability;\n }\n}\n","import { suggestNextShiftDate } from \"../absence-reporting-utils\";\nimport { isValid, isAfter, isSameDay } from \"date-fns\";\nimport {\n QuestionSummary,\n QuestionAnswer,\n ValidationResult\n} from \"../absence-reporting-types\";\nimport { ARWorkflowState } from \"../absence-reporting-state\";\nimport { validateRTWAnswer } from \"./section-helpers\";\nimport isBefore from \"date-fns/isBefore\";\n\nconst _isContinuous = (state: ARWorkflowState) => {\n const threshold = state.config?.minimumThresholdForContinousAbsence ?? 2;\n if (state.incident.absenceDates.length < threshold) return false;\n\n return true;\n};\n\nconst _rtwDateMandatoryForAbsenceType = (state: ARWorkflowState) => {\n return _isContinuous(state)\n ? state.config?.isRTWDateMandatoryContinuous\n : state.config?.isRTWDateMandatoryIntermittent;\n // switch (state.incident.absenceType) {\n // case \"continuous\":\n // return state.config?.isRTWDateMandatoryContinuous;\n // case \"intermittent\":\n // return state.config?.isRTWDateMandatoryIntermittent;\n // default:\n // return false;\n // }\n};\n\nconst _rtwDateQuestionShown = (state: ARWorkflowState) => {\n return _isContinuous(state)\n ? state.config?.displayRTWDateContinuous\n : state.config?.displayRTWDateIntermittent;\n};\n\nexport const buildRtwSections = (state: ARWorkflowState) => {\n if (!_rtwDateQuestionShown(state)) return [];\n return [\n {\n id: \"return-to-work\",\n type: \"ReturnToWorkQuestion\",\n promptTag: () => ({ tag: \"reportAbsence.return_to_work.prompt\" }),\n answer: () => {\n const last = state.incident.absenceDates.length\n ? state.incident.absenceDates[state.incident.absenceDates.length - 1]\n : null;\n\n const isValidRtw =\n state.incident.returnToWorkDate &&\n last?.shiftEndTime &&\n (isAfter(state.incident.returnToWorkDate, last.shiftEndTime) ||\n (last.scheduledShiftEndTime &&\n isBefore(last.shiftEndTime, last.scheduledShiftEndTime) &&\n isSameDay(state.incident.returnToWorkDate, last.shiftEndTime)));\n\n const returnToWorkDate = isValidRtw\n ? state.incident.returnToWorkDate\n : _rtwDateMandatoryForAbsenceType(state)\n ? suggestNextShiftDate(state.incident.absenceDates)\n : undefined;\n\n return {\n type: \"rtw\",\n value: isValid(returnToWorkDate)\n ? {\n returnToWorkDate\n }\n : undefined\n };\n },\n summary: () => {\n return {\n type: \"date\",\n label: { tag: \"reportAbsence.summary.return_to_work_date\" },\n answer: state.incident.returnToWorkDate\n } as QuestionSummary;\n },\n validateAnswer: (answer: QuestionAnswer): ValidationResult => {\n return validateRTWAnswer(\n answer,\n state.incident.absenceDates,\n _rtwDateMandatoryForAbsenceType(state) ?? false\n );\n },\n setAnswer: (answer: QuestionAnswer) => {\n if (answer.type === \"rtw\") {\n state.incident.returnToWorkDate = answer.value.returnToWorkDate;\n }\n },\n hidden: () => state.incident.absenceDates.length === 0,\n requiresAnswer: () =>\n _rtwDateMandatoryForAbsenceType(state) &&\n state.incident.returnToWorkDate === undefined,\n isSubmissionMode: true\n }\n ];\n};\n","import {\n QuestionSummary,\n QuestionAnswer,\n WorkflowQuestionType,\n WorkflowQuestionBaseTemplate,\n ValidationResult\n} from \"../absence-reporting-types\";\nimport { ARWorkflowState } from \"../absence-reporting-state\";\nimport {\n validatePhoneNumber,\n validateEmail,\n formatPhoneNumber,\n formatDateTimeAnswer\n} from \"./section-helpers\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { ConfigAbsenceQuestion } from \"../absence-questions\";\nimport { LocaleTexts } from \"shared-types/api\";\nimport { ClientTranslationProps } from \"i18n\";\nimport { isValid, parseISO } from \"date-fns\";\n\nconst prepareLabelForCIC = (\n question: ConfigAbsenceQuestion\n): LocaleTexts | ClientTranslationProps => {\n if (question.name === \"CQ_EMAIL_ADDRESS_TO_RECEIVE\") {\n return {\n tag: \"reportAbsence.summary.cic_email_will_be_sent_to_label\"\n };\n }\n\n return question.label;\n};\n\nconst normalizeValue = (cq: ConfigAbsenceQuestion, value?: string) => {\n if (cq.questionType === \"boolean\" && value) {\n return value.toLowerCase();\n }\n return value || \"\";\n};\n\nexport const buildConfigSections = (\n state: ARWorkflowState,\n locale: Locale\n): WorkflowQuestionBaseTemplate[] => {\n const isCICUser = getSessionService().isCICUser();\n\n return state.configQuestions.map(cq => {\n if (cq.resolvedValue && !state.answers.has(cq.name)) {\n state.answers.set(cq.name, {\n answer: normalizeValue(cq, cq.resolvedValue)\n });\n } else if (cq.defaultValue && !state.answers.has(cq.name)) {\n state.answers.set(cq.name, {\n answer: normalizeValue(cq, cq.defaultValue)\n });\n }\n return {\n config: cq,\n id: cq.name,\n type: \"ConfigQuestion\" as WorkflowQuestionType,\n answer: () =>\n ({\n type: \"string\",\n value: state.answers.get(cq.name)?.answer\n } as QuestionAnswer),\n setAnswer: (answer: QuestionAnswer) => {\n if (answer.type === \"string\") {\n state.answers.set(cq.name, {\n answer: normalizeValue(cq, answer.value),\n answered: true\n });\n }\n },\n absenceReasonInfo: state.getReasonOfAbsenceInfo,\n requiresAnswer: () => {\n const a = state.answers.get(cq.name);\n return (\n cq.validationConstraint?.required === true &&\n (!a?.answer || a?.answer === \"\")\n );\n },\n hidden: () => cq.isVisible === false,\n summary: (): QuestionSummary => {\n const answer = state.answers.get(cq.name)?.answer || \"\";\n const label = isCICUser ? prepareLabelForCIC(cq) : cq.label;\n\n switch (cq.questionType) {\n case \"boolean\":\n return {\n type: \"boolean\",\n label: label,\n answer: answer === \"true\"\n };\n case \"dropdown\":\n return {\n type: \"text\",\n label: label,\n answer: cq.options?.find(o => o.value === answer)?.text\n };\n case \"date\":\n return {\n type: \"text\",\n label: label,\n answer: answer ? formatDateTimeAnswer(answer, locale) : \"\"\n };\n case \"phone\":\n return {\n type: \"text\",\n label: label,\n answer: answer ? formatPhoneNumber(answer) : \"\"\n };\n case \"card\":\n const summaryObject: QuestionSummary = {\n type: \"text\",\n label,\n answer\n };\n\n if (answer && answer !== \"0\") {\n summaryObject.answer = \"Yes\";\n }\n\n if (answer === \"0\") {\n summaryObject.answer = \"It's new\";\n }\n\n return summaryObject;\n case \"numeric\":\n case \"text\":\n default:\n return {\n type: \"text\",\n label: label,\n answer: answer\n };\n }\n },\n validateAnswer: (answer: QuestionAnswer): ValidationResult => {\n switch (cq.questionType) {\n case \"phone\":\n if (\n answer.type === \"string\" &&\n answer.value === \"\" &&\n !cq.validationConstraint?.required\n ) {\n return { isValid: true };\n }\n if (answer.type === \"string\" && answer.value !== undefined) {\n return validatePhoneNumber(answer.value)\n ? { isValid: true }\n : {\n isValid: false,\n message: { tag: \"reportAbsence.validation.phone\" }\n };\n } else {\n return { isValid: false };\n }\n\n case \"email\":\n if (\n answer.type === \"string\" &&\n answer.value === \"\" &&\n !cq.validationConstraint?.required\n ) {\n return { isValid: true };\n }\n if (answer.type === \"string\" && answer.value !== undefined) {\n return validateEmail(answer.value)\n ? { isValid: true }\n : {\n isValid: false,\n message: { tag: \"reportAbsence.validation.email\" }\n };\n } else {\n return { isValid: false };\n }\n\n case \"numeric\":\n if (\n answer.type === \"string\" &&\n answer.value === \"\" &&\n !cq.validationConstraint?.required\n ) {\n return { isValid: true };\n }\n if (answer.type === \"string\" && answer.value !== undefined) {\n const max = cq.validationConstraint?.max;\n const min = cq.validationConstraint?.min;\n const asNum: number = +answer.value;\n if (min && asNum < min) {\n return {\n isValid: false\n };\n }\n\n if (max && asNum > max) {\n return { isValid: false };\n }\n return { isValid: true };\n } else {\n return { isValid: false };\n }\n\n case \"date\":\n return { isValid: answer.type === \"string\" && (!answer.value || isValid(parseISO(answer.value))) }; \n\n default:\n return { isValid: true };\n }\n },\n isSubmissionMode: true,\n getSubmitErrorMsg: (): string | undefined =>\n state.getSubmitErrorMsgForQuestion(cq.name)\n };\n });\n};\n","import { ARWorkflowState } from \"features/report-absence/absence-reporting-state\";\nimport {\n QuestionAnswer,\n WorkflowQuestionTemplate\n} from \"features/report-absence/absence-reporting-types\";\nimport { continuationQuestionDescription } from \"features/report-absence/sections/section-helpers\";\nimport { hasValue } from \"utils/util\";\n\nexport function buildContinuationSection(\n state: ARWorkflowState,\n locale: Locale\n): WorkflowQuestionTemplate {\n const incident = state.incident;\n const showContinuationQuestion = incident.linkability.canBeLinked ?? false;\n\n const description = continuationQuestionDescription(\n state.config?.reasonOfAbsence.answers ?? [],\n incident,\n locale\n );\n\n const linkability = incident.linkability;\n const answerValue = linkability.canBeLinked\n ? linkability.isLinked === undefined\n ? undefined\n : !linkability.isLinked\n : undefined;\n\n return {\n id: \"continuation\",\n type: \"BooleanQuestion\",\n answer: () => ({\n type: \"boolean\",\n value: answerValue\n }),\n setAnswer: (answer: QuestionAnswer) => {\n if (answer.type === \"boolean\" && incident.linkability.canBeLinked) {\n incident.linkability.isLinked = !answer.value;\n }\n },\n promptTag: () => ({ tag: \"reportAbsence.continuation.back_to_work\" }),\n descriptionTag: description ? () => description : undefined,\n requiresAnswer: () => {\n const isAnswered = answerValue !== undefined;\n return showContinuationQuestion && !isAnswered;\n },\n hidden: () => !showContinuationQuestion,\n validateAnswer: (answer: QuestionAnswer) => {\n if (\n answer.type === \"boolean\" &&\n answer.value === false &&\n incident.maxReportableDays &&\n incident.linkability.canBeLinked &&\n incident.linkability.totalNoOfDaysReportedExcludingCurrent &&\n incident.absenceDates.length +\n incident.linkability.totalNoOfDaysReportedExcludingCurrent >\n incident.maxReportableDays\n ) {\n return {\n isValid: false,\n message: {\n tag: \"reportAbsence.continuation.exceedMaxDays\",\n vars: {\n days: \"\" + incident.maxReportableDays\n }\n }\n };\n }\n return { isValid: true };\n },\n isSubmissionMode: true,\n summary:\n hasValue(answerValue) && hasValue(description)\n ? () => ({\n type: \"boolean\",\n answer: answerValue,\n label: description\n })\n : undefined\n };\n}\n","import { getSessionService } from \"features/session/session-service\";\nimport { ConfigAbsenceQuestion } from \"../absence-questions\";\nimport { ARWorkflowState } from \"../absence-reporting-state\";\nimport {\n QuestionAnswer,\n ValidationResult,\n WorkflowQuestionTemplate\n} from \"../absence-reporting-types\";\nimport { validatePhoneNumber } from \"./section-helpers\";\n\nexport function buildCallCenterSection(\n state: ARWorkflowState\n): WorkflowQuestionTemplate {\n const sessionService = getSessionService();\n const isCICUser = sessionService.isCICUser();\n\n const name = \"call-center-employee-phone-number\";\n return {\n config: {\n name,\n questionType: \"phone\",\n label: [],\n labelLocalizedString: {\n tag: \"reportAbsence.call_center.prompt\",\n vars: {\n employee_full_name:\n state.employeeFirstName && state.employeeLastName\n ? `${state.employeeFirstName} ${state.employeeLastName}`\n : \"\"\n }\n }\n } as ConfigAbsenceQuestion,\n id: name,\n type: \"CallCenterEmployeePhoneNumber\",\n answer: () =>\n ({\n type: \"string\",\n value: state.answers.get(name)?.answer\n } as QuestionAnswer),\n setAnswer: (answer: QuestionAnswer) => {\n if (answer.type === \"string\") { \n state.answers.set(\"CQ_BEST_PHONE_NUMBER_TO_BE_REACHED\", {\n answer: answer.value || \"\",\n answered: true\n });\n\n state.answers.set(name, {\n answer: answer.value || \"\",\n answered: true\n });\n\n state.callCenterEmployeePhoneNumber = answer.value;\n }\n },\n requiresAnswer: () => false,\n hidden: () => isCICUser === false,\n validateAnswer: (answer: QuestionAnswer): ValidationResult => {\n if (answer.type === \"string\" && !answer.value) {\n return { isValid: true };\n }\n if (answer.type === \"string\" && answer.value !== undefined) {\n return validatePhoneNumber(answer.value)\n ? { isValid: true }\n : {\n isValid: false,\n message: { tag: \"reportAbsence.validation.phone\" }\n };\n } else {\n return { isValid: false };\n }\n },\n hideInSummary: true,\n isSubmissionMode: false\n };\n}\n","import { ARWorkflowState } from \"features/report-absence/absence-reporting-state\";\nimport {\n QuestionAnswer,\n WorkflowQuestionTemplate\n} from \"features/report-absence/absence-reporting-types\";\n\nexport function buildConfirmationSection(\n state: ARWorkflowState\n): WorkflowQuestionTemplate {\n return {\n id: \"confirmation\",\n type: \"ConfirmationMessage\",\n promptTag: () => ({ tag: \"reportAbsence.confirmation.thank_you\" }),\n answer: () => ({ type: \"submit\", value: state.submitResult }),\n setAnswer: (answer: QuestionAnswer) => {\n return;\n },\n requiresAnswer: () => false,\n postSubmit: true,\n isSubmissionMode: false\n };\n}\n","import {\n QuestionAnswer,\n WorkflowQuestionBase,\n WorkflowQuestionTemplate,\n WorkflowSection\n} from \"./absence-reporting-types\";\nimport { buildReasonSection as buildReasonSections } from \"./sections/reasons\";\nimport { buildDateTimesSections } from \"./sections/dates-times\";\nimport { buildRtwSections } from \"./sections/rtw\";\nimport { buildConfigSections } from \"./sections/config-questions\";\nimport { buildContinuationSection } from \"features/report-absence/sections/continuation\";\nimport {\n EmployeeSchedule,\n PreviousAbsence\n} from \"features/employee/employee-model\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { WorkShiftForDate, WorkShift } from \"features/report-absence/incident\";\nimport { buildCallCenterSection } from \"./sections/call-center\";\nimport { ARWorkflowState } from \"./absence-reporting-state\";\nimport { buildConfirmationSection } from \"./sections/confirmation\";\nimport { ModifySubmittedAbsencePermission } from \"permissions\";\n\nexport class WorkflowBuilder {\n private readonly state: ARWorkflowState;\n private readonly schedule: EmployeeSchedule;\n private readonly previousAbsences: PreviousAbsence[];\n\n constructor(\n state: ARWorkflowState,\n schedule: EmployeeSchedule,\n previousAbsences: PreviousAbsence[]\n ) {\n this.state = state;\n this.schedule = schedule;\n this.previousAbsences = previousAbsences;\n }\n\n private static renderQuestionTemplate(\n qt: WorkflowQuestionTemplate & { shifts: WorkShift[] }\n ): WorkflowSection {\n const base: WorkflowQuestionBase = {\n id: qt.id,\n index: qt.index,\n answer: qt.answer(),\n setAnswer: qt.setAnswer,\n validateAnswer: qt.validateAnswer,\n requiresAnswer: qt.requiresAnswer(),\n isValid: qt.validateAnswer?.(qt.answer())?.isValid !== false,\n config: qt.config,\n choices: qt.choices?.(),\n hidden: qt.hidden?.(),\n absenceReasonInfo: qt.absenceReasonInfo?.(),\n promptTag: qt.promptTag?.(),\n descriptionTag: qt.descriptionTag?.(),\n postSubmit: qt.postSubmit,\n summary: qt.summary?.(),\n hideInSummary: qt.hideInSummary,\n isSubmissionMode: qt.isSubmissionMode,\n getSubmitErrorMsg: qt.getSubmitErrorMsg\n };\n \n switch (qt.type) {\n case \"CalendarQuestion\":\n return {\n ...base,\n type: \"CalendarQuestion\",\n schedule: qt.schedule(),\n previousAbsences: qt.previousAbsences()\n };\n\n case \"ShiftQuestion\":\n return {\n ...base,\n type: \"ShiftQuestion\",\n workShiftOptions: qt.shifts || qt.workShiftOptions(),\n addTempShift: qt.addTempShift,\n initialSameShiftToggle: qt.initialSameShiftToggle,\n sameShiftToggleHandler: qt.sameShiftToggleHandler,\n maxShiftLengthThresholdInMinutes: qt.maxShiftLengthThresholdInMinutes\n };\n\n case \"TimeQuestion\":\n return {\n ...base,\n type: \"TimeQuestion\",\n scheduleOverrideWarning: qt.scheduleOverrideWarning(),\n scheduleOverrideMessage: qt.scheduleOverrideMessage(),\n selectedWorkShifts: qt.selectedWorkShifts(),\n previousAbsences: qt.previousAbsences(),\n maxShiftLengthThresholdInMinutes: qt.maxShiftLengthThresholdInMinutes\n };\n default:\n return { ...base, type: qt.type };\n }\n }\n\n buildQuestions = () => {\n const sessionService = getSessionService();\n const isCICUser = sessionService.isCICUser();\n const canModifySubmittedIncident = sessionService.hasPrivileges(\n ModifySubmittedAbsencePermission\n );\n const shifts = this.state.shifts.map(\n (shift: WorkShiftForDate) => shift.shift\n );\n\n if (\n this.state.incident.claimStatus === \"S\" &&\n !canModifySubmittedIncident\n ) {\n this.state.questions = [buildConfirmationSection(this.state)].map(\n item => {\n return WorkflowBuilder.renderQuestionTemplate({\n ...(item as WorkflowQuestionTemplate),\n shifts\n });\n }\n );\n } else if (isCICUser) {\n this.state.questions = this.getCICSectionTemplates().map(item => {\n return WorkflowBuilder.renderQuestionTemplate({\n ...(item as WorkflowQuestionTemplate),\n shifts\n });\n });\n } else {\n this.state.questions = this.getSectionTemplates().map(item => {\n return WorkflowBuilder.renderQuestionTemplate({\n ...(item as WorkflowQuestionTemplate),\n shifts\n });\n });\n }\n\n this.state.sections = this.state.questions.filter(\n q => q.hidden !== true && (!this.state.submitted || q.postSubmit)\n );\n\n const i = this.state.sections.findIndex(q => q.requiresAnswer);\n if (i >= 0) this.state.sections = this.state.sections.slice(0, i + 1);\n\n let index = 0;\n this.state.sections.forEach(q => (q.index = index++));\n };\n\n getCICSectionTemplates = () => {\n return [\n buildCallCenterSection(this.state),\n ...this.commonSectionTemplates()\n ];\n };\n\n getSectionTemplates = () => {\n let checkReasonOfAbsence = false;\n if(this.state.config?.reasonOfAbsence?.answers.length === 0){\n checkReasonOfAbsence = true;\n }\n return [\n {\n id: \"start\",\n type: \"ReportStart\",\n answer: () => ({ type: \"empty\" }),\n setAnswer: (answer: QuestionAnswer) => {\n return;\n },\n requiresAnswer: () => checkReasonOfAbsence\n },\n ...this.commonSectionTemplates()\n ];\n };\n\n commonSectionTemplates = () => {\n return [\n ...buildReasonSections(this.state),\n ...buildDateTimesSections(\n this.state,\n this.schedule,\n this.previousAbsences\n ),\n buildContinuationSection(this.state, this.state.locale),\n ...buildRtwSections(this.state),\n ...buildConfigSections(this.state, this.state.locale),\n {\n id: \"summary\",\n type: \"AbsenceSummary\",\n promptTag: () => ({ tag: \"reportAbsence.all_for_now\" }),\n answer: () => ({ type: \"empty\" }),\n setAnswer: (answer: unknown) => {\n return;\n },\n requiresAnswer: () => !this.state.submitted,\n isSubmissionMode: true\n },\n buildConfirmationSection(this.state)\n ];\n };\n}\n","import {\n AbsenceConfig,\n AbsenceIncident,\n AbsenceReasonAnswerInfo,\n AbsenceShift,\n ApiValidationError,\n IncidentClosingScript,\n WorkShift,\n WorkShiftForDate\n} from \"./incident\";\nimport {\n AbsenceAlert,\n ConfigAbsenceQuestion,\n SubmitErrorMsg\n} from \"./absence-questions\";\nimport {\n areTimesEqual,\n makeTime,\n parseTime,\n Time,\n TimeInterval,\n toDateInterval,\n toTimeInterval\n} from \"shared-types/time\";\nimport {\n addDays,\n format,\n isAfter,\n isSameDay,\n isSameHour,\n parseISO,\n setHours,\n setMinutes\n} from \"date-fns\";\nimport {\n OnBehalfOf,\n SubmitResult,\n WorkflowAnswer,\n WorkflowSection\n} from \"./absence-reporting-types\";\nimport { getDefaultShift, getWorkShiftOptions } from \"utils/shift-utils\";\nimport { determineIsPartialDate } from \"./absence-reporting-utils\";\n\nexport class ARWorkflowState {\n incident: AbsenceIncident = {\n primaryReason: \"\",\n secondaryReason: undefined,\n absenceDates: [],\n absenceIncidentId: undefined,\n bestPhoneNumber: undefined,\n firstName: undefined,\n lastName: undefined,\n requestDate: undefined,\n returnToWorkDate: undefined,\n questionResponses: [],\n linkability: { canBeLinked: undefined }\n };\n\n needsSave = false;\n isSavingSynchronously = false;\n showSameShiftForDates: boolean | undefined;\n config?: AbsenceConfig | null = null;\n answers: Map = new Map();\n configQuestions: ConfigAbsenceQuestion[] = [];\n questions: WorkflowSection[] = [];\n sections: WorkflowSection[] = [];\n allAlerts: AbsenceAlert[] = [];\n questionAlerts: AbsenceAlert[] = [];\n errors: ApiValidationError[] = [];\n apiErrors: Error[] = [];\n timeIntervals: TimeInterval[] = [];\n restoredTimeIntervals: TimeInterval[] = [];\n shifts: WorkShiftForDate[] = [];\n tempShiftOptions: WorkShift[] = [];\n\n submitResult?: SubmitResult;\n absenceOnBehalf?: string;\n employeeSearch?: string;\n employeeId?: string;\n employeeFirstName?: string | null;\n employeeLastName?: string | null;\n employeeEmail?: string | null;\n companyName?: string;\n clientCode?: string;\n callCenterEmployeePhoneNumber?: string | null;\n errorMsg: SubmitErrorMsg | null = null;\n //ar3CompaniesToWhichUserHaveAcccesCount?: number;\n restoredIncidentId?: number | null;\n viewedAlertsIds: string[] = [];\n submitted = false;\n locale: Locale;\n addNewEmployeeErrors?: string[];\n addNewEmployeeState?: boolean;\n provinceCode?: string;\n countryCode?: string;\n\n constructor(locale: Locale) {\n this.locale = locale;\n }\n\n getNextUnansweredQuestion(index = 0) {\n const qi =\n index >= this.questions.length\n ? undefined\n : this.questions.slice(index).findIndex(q => q.requiresAnswer);\n return qi;\n }\n\n restore(\n incident: AbsenceIncident,\n currentUserEmployeeId: string,\n isCICUser: boolean,\n hasEmployees: boolean\n ) {\n this.incident = incident;\n this.submitted = false;\n this.submitResult = undefined;\n this.errors = [];\n this.restoredIncidentId = incident.absenceIncidentId;\n\n if (!isCICUser && hasEmployees) {\n this.absenceOnBehalf =\n incident.employeeNumber !== currentUserEmployeeId\n ? OnBehalfOf.OtherEmployee\n : OnBehalfOf.Myself;\n }\n\n this.restoreTimes();\n this.restoreShifts();\n this.restoreQuestions();\n this.restoreEmployee();\n\n if (this.incident.claimStatus === \"S\") {\n this.submitResult = {\n success: true,\n absenceIncidentId: this.incident.absenceIncidentId\n };\n }\n }\n\n private restoreQuestions = () => {\n this.answers.clear();\n this.incident.questionResponses?.forEach(r => {\n this.answers.set(r.key, { answer: r.value, answered: true });\n });\n };\n\n private restoreTimes = () => {\n this.timeIntervals = this.incident.absenceDates.map(d =>\n toTimeInterval(d.shiftStartTime, d.shiftEndTime)\n );\n this.restoredTimeIntervals = JSON.parse(JSON.stringify(this.timeIntervals));\n };\n\n public restoreShifts = () => {\n const shiftOptions = getWorkShiftOptions(this.config);\n\n this.shifts = this.incident.absenceDates.map((d, idx) => {\n const startTime = parseTime(\n d.scheduledShiftStartTime?.toLocaleTimeString(\"en-US\") ?? \"\",\n makeTime(9, 0, \"am\")\n );\n\n const endTime = parseTime(\n d.scheduledShiftEndTime?.toLocaleTimeString(\"en-US\") ?? \"\",\n makeTime(5, 0, \"pm\")\n );\n\n const shift = {\n startTime,\n endTime,\n startTimeHours: ARWorkflowState.determineHoursFromTime(startTime),\n endTimeHours: ARWorkflowState.determineHoursFromTime(endTime),\n isDefault: false,\n order: idx\n };\n\n return {\n date: d.shiftStartTime.toISOString(),\n shift\n };\n });\n\n if (shiftOptions) {\n const defaultWorkShifts: WorkShiftForDate[] = shiftOptions\n .filter(shiftOption => {\n const shiftAlreadyExists = this.shifts.find(\n s =>\n areTimesEqual(s.shift.startTime, shiftOption.startTime) &&\n areTimesEqual(s.shift.endTime, shiftOption.endTime)\n );\n\n if (shiftAlreadyExists) {\n return false;\n }\n\n return true;\n })\n .map(shiftOption => ({\n date: \"\",\n shift: {\n ...shiftOption,\n startTimeHours: ARWorkflowState.determineHoursFromTime(\n shiftOption.startTime\n ),\n endTimeHours: ARWorkflowState.determineHoursFromTime(\n shiftOption.endTime\n )\n }\n }));\n\n this.shifts = [...defaultWorkShifts, ...this.shifts];\n }\n };\n\n public restoreClosingScripts = (closingScripts: IncidentClosingScript[]) => {\n if (this.incident.claimStatus === \"S\" && this.submitResult) {\n this.submitResult.closingScripts = closingScripts.map(cs => cs.text);\n }\n };\n\n private restoreEmployee = () => {\n if (\n this.incident.questionResponses?.some(\n question => question.key === \"call-center-employee-phone-number\"\n )\n ) {\n this.callCenterEmployeePhoneNumber = this.incident.questionResponses?.filter(\n question => question.key === \"call-center-employee-phone-number\"\n )[0].value;\n } else if (\n this.incident.questionResponses?.some(\n question => question.key === \"CQ_BEST_PHONE_NUMBER_TO_BE_REACHED\"\n )\n ) {\n this.callCenterEmployeePhoneNumber = this.incident.questionResponses?.filter(\n question => question.key === \"CQ_BEST_PHONE_NUMBER_TO_BE_REACHED\"\n )[0].value;\n }\n };\n\n static mapDates = (dates: Date[]): AbsenceShift[] => {\n const sortedDates = [...dates].sort(\n (d1, d2) => d1.getTime() - d2.getTime()\n );\n return sortedDates.map(d => {\n return {\n isPartialAbsence: false,\n shiftStartTime: d,\n shiftEndTime: d,\n scheduledShiftStartTime: d,\n scheduledShiftEndTime: d\n };\n });\n };\n\n static applyTimes = (\n dates: AbsenceShift[],\n intervals: TimeInterval[]\n ): TimeInterval[] => {\n const timeIntervals: TimeInterval[] = [];\n\n dates.forEach(d => {\n const interval = intervals.find(i =>\n isSameDay(parseISO(i.date), d.shiftStartTime)\n ) || {\n date: format(d.shiftStartTime, \"yyyy-MM-dd\"),\n startTime: makeTime(8, 0, \"am\"),\n endTime: makeTime(4, 0, \"pm\")\n };\n const dates = toDateInterval(interval);\n d.shiftStartTime = dates.startDate;\n d.shiftEndTime = dates.endDate;\n d.isPartialAbsence = determineIsPartialDate(d);\n\n timeIntervals.push(interval);\n });\n\n return timeIntervals;\n };\n\n static applyShifts = (\n dates: AbsenceShift[],\n shifts: WorkShiftForDate[],\n intervals: TimeInterval[],\n overwriteTimeIntervals?: boolean,\n shiftOptions?: WorkShift[]\n ): WorkShiftForDate[] => {\n const defaultShift = getDefaultShift(shiftOptions);\n let tempShifts: WorkShiftForDate[] = [];\n\n dates.forEach(d => {\n const workShift: WorkShift | undefined =\n shifts.find(s => isSameDay(parseISO(s.date), d.shiftStartTime))\n ?.shift ?? defaultShift;\n\n if (workShift) {\n const startDate = setHours(\n setMinutes(d.shiftStartTime, workShift.startTime.minute),\n ARWorkflowState.determineHoursFromTime(workShift.startTime)\n );\n\n // 2020-11-19 (AZ): Using the 'shiftStartTime' for the 'endDate' to ensure\n // we're not treating the shift as an overnight shift if the user had specified\n // absence times that were for an overnight period. If the shift is truly an\n // overnight shift it will be handled in this function.\n const endDate = setHours(\n setMinutes(d.shiftStartTime, workShift.endTime.minute),\n ARWorkflowState.determineHoursFromTime(workShift.endTime)\n );\n\n const interval = intervals.find(i =>\n isSameDay(parseISO(i.date), d.shiftStartTime)\n );\n\n if (interval && overwriteTimeIntervals) {\n interval.startTime = workShift.startTime;\n interval.endTime = workShift.endTime;\n }\n\n d.scheduledShiftStartTime = startDate;\n d.scheduledShiftEndTime = isAfter(startDate, endDate) || isSameHour(startDate, endDate)\n ? addDays(endDate, 1)\n : endDate;\n\n tempShifts.push({\n date: d.shiftStartTime.toISOString(),\n shift: workShift\n });\n }\n });\n\n if (shiftOptions) {\n const defaultWorkShifts: WorkShiftForDate[] = shiftOptions\n .filter(shiftOption => {\n const shiftAlreadyExists = tempShifts.find(\n ts =>\n areTimesEqual(ts.shift.startTime, shiftOption.startTime) &&\n areTimesEqual(ts.shift.endTime, shiftOption.endTime)\n );\n\n if (shiftAlreadyExists) {\n return false;\n }\n\n return true;\n })\n .map(shiftOption => ({\n date: \"\",\n shift: {\n ...shiftOption,\n startTimeHours: ARWorkflowState.determineHoursFromTime(\n shiftOption.startTime\n ),\n endTimeHours: ARWorkflowState.determineHoursFromTime(\n shiftOption.endTime\n )\n }\n }));\n\n tempShifts = [...defaultWorkShifts, ...tempShifts];\n }\n\n return tempShifts;\n };\n\n private static determineHoursFromTime(time: Time): number {\n if (time.period === \"pm\" && time.hour !== 12) {\n return time.hour + 12;\n } else if (time.period === \"am\" && time.hour === 12) {\n return 0;\n } else {\n return time.hour;\n }\n }\n\n setShowSameShiftForDates = (val: boolean) => {\n this.showSameShiftForDates = val;\n };\n\n setShifts = (\n shifts: WorkShiftForDate[],\n overwriteTimeIntervals?: boolean\n ): void => {\n this.shifts = ARWorkflowState.applyShifts(\n this.incident.absenceDates,\n shifts,\n this.timeIntervals,\n overwriteTimeIntervals,\n getWorkShiftOptions(this.config)\n );\n this.setTimes(this.timeIntervals);\n };\n\n setDates = (dates: Date[]): void => {\n this.incident.absenceDates = ARWorkflowState.mapDates(dates);\n this.setTimes(this.timeIntervals);\n this.setShifts(this.shifts);\n\n this.incident.absenceDates.forEach(ad => {\n const workShift: WorkShift | undefined =\n this.shifts.find(s => isSameDay(parseISO(s.date), ad.shiftStartTime))\n ?.shift ?? getDefaultShift(getWorkShiftOptions(this.config));\n const interval = this.timeIntervals.find(i =>\n isSameDay(parseISO(i.date), ad.shiftStartTime)\n );\n const restoredInterval = this.restoredTimeIntervals.find(i =>\n isSameDay(parseISO(i.date), ad.shiftStartTime)\n );\n\n if (interval && !restoredInterval && workShift) {\n interval.startTime = workShift.startTime;\n interval.endTime = workShift.endTime;\n }\n });\n };\n\n setTimes = (intervals: TimeInterval[]): void => {\n this.timeIntervals = ARWorkflowState.applyTimes(\n this.incident.absenceDates,\n intervals\n );\n };\n\n getTimes = (): TimeInterval[] => this.timeIntervals;\n\n getShifts = (): WorkShiftForDate[] => this.shifts;\n\n getReasonOfAbsenceInfo = (): AbsenceReasonAnswerInfo | undefined => {\n return this.config?.reasonOfAbsence?.answers.find(\n a => a.answerId === this.incident.primaryReason\n );\n };\n\n setSubmitError = (questionId: string, msg: string) => {\n this.errorMsg = {\n questionId,\n msg\n };\n };\n\n getSubmitErrorMsgForQuestion = (questionId: string): string | undefined => {\n if (this.errorMsg?.questionId === questionId) {\n return this.errorMsg.msg;\n }\n\n return undefined;\n };\n\n clearSubmitError = (questionId?: string): void => {\n if (questionId) {\n if (questionId === this.errorMsg?.questionId) {\n this.errorMsg = null;\n }\n } else {\n this.errorMsg = null;\n }\n };\n\n insertViewedAlertId = (alertId: string): void => {\n this.viewedAlertsIds = [...this.viewedAlertsIds, alertId];\n };\n\n resetViewedAlerts = () => {\n this.viewedAlertsIds = [];\n };\n\n buildQuestionAlerts = (currentQuestionId: string) => {\n this.questionAlerts = this.allAlerts.filter(\n alert => alert.questionId === currentQuestionId\n );\n };\n}\n","import { getAbsenceReportingService } from \"./absence-reporting-service\";\nimport {\n EmployeeData,\n EmployeeHistory,\n EmployeeSchedule,\n emptyHistory,\n emptySchedule\n} from \"../employee/employee-model\";\nimport { addDays } from \"date-fns\";\nimport { getEmployeeService } from \"../employee/employee-service\";\nimport { AbsenceAlert } from \"./absence-questions\";\nimport {\n AbsenceConfig,\n AbsenceType,\n ApiValidationError,\n IncidentQuestionModel\n} from \"./incident\";\nimport _, { isEmpty } from \"lodash-es\";\nimport {\n CancelResult,\n QuestionAnswer,\n SubmitResult,\n WorkflowSection\n} from \"./absence-reporting-types\";\nimport { WorkflowBuilder } from \"./workflow-builder\";\nimport { getSessionService } from \"features/session/session-service\";\nimport {\n maybeUpdateLinkability,\n shouldAskIfCanBeLinked\n} from \"features/report-absence/absence-reporting-utils\";\nimport { ARWorkflowState } from \"./absence-reporting-state\";\nimport { enCA } from \"date-fns/locale\";\n\nexport type WorkflowSnapshot = {\n questions: WorkflowSection[];\n alerts: AbsenceAlert[];\n errors: ApiValidationError[];\n};\n\nexport class ARWorkflow {\n private static _instance: ARWorkflow;\n\n // Questions at the end of the workflow for review/submission of incident\n static finalQuestionIds = [\"the-end\", \"placeholder\"];\n\n schedule: EmployeeSchedule = emptySchedule();\n history: EmployeeHistory = emptyHistory();\n state: ARWorkflowState;\n locale: Locale;\n\n constructor(locale: Locale) {\n this.locale = locale;\n this.state = new ARWorkflowState(locale);\n }\n\n // async loadCICConfiguration() {\n // this.ar3CompaniesToWhichUserHaveAcccesCount = await getEmployeeService().getCompaniesCount(\n // \"3\"\n // );\n // }\n\n async loadConfiguration(\n clientCode: string,\n employeeId: string,\n isCICUser: boolean,\n allowBackground: boolean,\n isNewEmployee?: boolean\n ) {\n if (\n this.state.clientCode === clientCode &&\n this.state.employeeId === employeeId\n ) {\n return;\n }\n\n try {\n const ar = getAbsenceReportingService();\n const es = getEmployeeService();\n\n const workState = (await getEmployeeService().getEmployeeData(clientCode, employeeId)).employeeState ?? \"\";\n const countryCode = (await getEmployeeService().getEmployeeData(clientCode, employeeId)).employeeCountry;\n let state = \"\";\n \n if(isNewEmployee)\n {\n state= this.state.countryCode + \":\" + this.state.provinceCode;\n }\n else if (countryCode === \"\" || countryCode === null){\n state = \"\";\n }\n else if(workState === \"\" || workState === null){\n state = countryCode;\n }\n else {\n state = countryCode + \":\" + workState;\n }\n \n const configPromise = ar\n .loadConfig(clientCode, state)\n .then(c => (this.state.config = c));\n\n const schedulePromise = es\n .getSchedule(\n clientCode,\n employeeId,\n addDays(new Date(), -60),\n addDays(new Date(), 365)\n )\n .then(schedule => {\n this.schedule = schedule;\n })\n .catch(error => {\n this.state.apiErrors = this.state.apiErrors.concat(error);\n });\n \n const historyPromise = es\n .getAbsences(clientCode, employeeId)\n .then(h => (this.history = h));\n\n const eeDataPromise = isNewEmployee\n ? null\n : this.getEmployeeData(clientCode, employeeId);\n\n const waitFor: Array | null> = [configPromise, historyPromise, eeDataPromise];\n\n if (isCICUser) {\n const selectedClient = sessionStorage.getItem(\"client_code\");\n const companyNamePromise = getEmployeeService()\n .searchCompany(\"3\", clientCode)\n .then(clientData => {\n this.state.companyName = clientData.items.find(item => item.clientCode === selectedClient)?.name || \"\";\n });\n\n waitFor.push(companyNamePromise);\n }\n\n if (allowBackground) {\n // Don't wait for schedule, since it's not needed until later\n void schedulePromise;\n } else {\n waitFor.push(schedulePromise);\n }\n\n return Promise.all(waitFor).then(async () => {\n\n if (this.state.config?.reasonOfAbsence?.answers.length === 0){\n sessionStorage.setItem(\"containsReasonsOfAbsence\", \"false\");\n }\n else{\n sessionStorage.setItem(\"containsReasonsOfAbsence\", \"true\");\n }\n this.state.restoreShifts();\n await this.restoreClosingScripts();\n this.state.clientCode = clientCode;\n this.state.employeeId = employeeId;\n this.setDefaultQuestionAnswers();\n this.buildQuestions();\n });\n } catch (error) {\n this.state.apiErrors = this.state.apiErrors.concat(error as Error);\n console.error(error);\n }\n }\n\n async restoreClosingScripts() {\n if (\n this.state.incident.claimStatus === \"S\" &&\n this.state.submitResult &&\n this.state.incident.absenceIncidentId\n ) {\n const ar = getAbsenceReportingService();\n const closingScripts = await ar.loadClosingScript(\n this.state.incident.absenceIncidentId\n );\n this.state.restoreClosingScripts(closingScripts);\n }\n }\n\n async restoreIncident(\n incidentId: number,\n defaultClientCode: string,\n currentUserEmployeeId: string,\n isCICUser: boolean,\n hasEmployees: boolean\n ): Promise<{\n restoredEmployeeId: string | null;\n restoredClientCode: string | null;\n }> {\n try {\n const ar = getAbsenceReportingService();\n const incident = await ar.loadIncident(incidentId);\n\n if (incident) {\n this.state.restore(\n incident,\n currentUserEmployeeId,\n isCICUser,\n hasEmployees\n );\n\n const model = await ar.loadConfigQuestions(incidentId);\n\n this.prepareConfigQuestions(model);\n this.setDefaultQuestionAnswers();\n }\n\n return {\n restoredClientCode: incident?.clientCode ?? defaultClientCode,\n restoredEmployeeId: incident?.employeeNumber ?? null\n };\n } catch (error) {\n this.state.apiErrors = this.state.apiErrors.concat(error as Error);\n console.error(error);\n }\n\n return {\n restoredClientCode: null,\n restoredEmployeeId: null\n };\n }\n\n restartWorkflow() {\n this.state = new ARWorkflowState(this.locale);\n this.schedule = emptySchedule();\n this.history = emptyHistory();\n }\n\n buildQuestions() {\n new WorkflowBuilder(\n this.state,\n this.schedule,\n this.getPreviousAbsences()\n ).buildQuestions();\n }\n\n static start(locale?: Locale): ARWorkflow {\n const user = getSessionService().getUser();\n if (!user?.client_code)\n console.error(\"Client code is not found for the user\");\n\n //TODO: implement handling of incorrect client codes for employee\n ARWorkflow._instance = new ARWorkflow(locale ?? enCA);\n return ARWorkflow._instance;\n }\n\n static current(locale?: Locale): ARWorkflow {\n if (!ARWorkflow._instance) return ARWorkflow.start(locale);\n\n return ARWorkflow._instance;\n }\n\n isReadyForSave = () => {\n return !!this.state.incident.primaryReason;\n };\n\n private setDefaultQuestionAnswers() {\n this.state.answers.set(\"call-center-employee-phone-number\", {\n answer: this.state.callCenterEmployeePhoneNumber ?? \"\",\n answered: true\n });\n\n if (!this.state.answers.get(\"CQ_BEST_PHONE_NUMBER_TO_BE_REACHED\")?.answer) {\n this.state.answers.set(\"CQ_BEST_PHONE_NUMBER_TO_BE_REACHED\", {\n answer: this.state.callCenterEmployeePhoneNumber ?? \"\",\n answered: true\n });\n }\n\n if (!this.state.answers.get(\"CQ_EMAIL_ADDRESS_TO_RECEIVE\")?.answer) {\n this.state.answers.set(\"CQ_EMAIL_ADDRESS_TO_RECEIVE\", {\n answer: this.state.employeeEmail ?? \"\",\n answered: true\n });\n }\n }\n\n private prepareConfigQuestions = (model: IncidentQuestionModel) => {\n this.state.configQuestions = _.flatMap(\n _.flatMap(\n [...model.preQualifyingQuestions, ...model.questions].map(p =>\n p.sections.map(s => s.questions)\n )\n )\n );\n\n const questionAlerts = _.flatMap(this.state.configQuestions, q =>\n (q.alerts || [])\n .filter(alert => !this.state.viewedAlertsIds.includes(alert.alertId))\n .map(alert => ({\n questionId: q.name,\n alertId: alert.alertId,\n alertText: alert.alertText\n }))\n );\n\n const reasonOfAbsenceAlerts = model.reasonOfAbsenceAlerts\n .filter(alert => !this.state.viewedAlertsIds.includes(alert.alertId))\n .map(alert => ({\n questionId:\n alert.alertLevel === \"Primary\"\n ? \"primary-reason\"\n : \"secondary-reason\",\n alertId: alert.alertId,\n alertText: alert.alertText\n }));\n\n this.state.allAlerts = [...reasonOfAbsenceAlerts, ...questionAlerts];\n\n this.buildQuestions();\n };\n\n answerQuestion(questionId: string, answer: QuestionAnswer): boolean {\n const question = this.state.questions.find(q => q.id === questionId);\n if (question === undefined) {\n console.error(\"Cannot find question\", questionId);\n return false;\n }\n\n if (\n question?.absenceReasonInfo &&\n question?.absenceReasonInfo?.subAnswers\n ) {\n const subAnswer = question?.absenceReasonInfo?.subAnswers.find(\n sq => sq.answerId === this.state.incident.secondaryReason\n );\n\n if (subAnswer && question?.absenceReasonInfo) {\n question.absenceReasonInfo.reportableDaysInFuture =\n subAnswer?.reportableDaysInFuture;\n question.absenceReasonInfo.reportableDaysInPast =\n subAnswer?.reportableDaysInPast;\n }\n }\n\n const isAnswerDifferent = !_.isEqual(question.answer, answer);\n if (isAnswerDifferent) {\n this.state.needsSave = true;\n }\n\n question.setAnswer(answer);\n this.buildQuestions();\n\n return isAnswerDifferent;\n }\n\n setQuestionResponses = () => {\n this.state.incident.questionResponses = Array.from(\n this.state.answers.entries()\n ).map(a => {\n return {\n key: a[0],\n value: a[1].answer\n };\n });\n };\n\n save = async (synchronous = true) => {\n if (!this.isReadyForSave()) {\n return;\n }\n\n this.setQuestionResponses();\n\n if (synchronous) {\n this.state.isSavingSynchronously = true;\n\n try {\n const incident = this.state.incident;\n const askIfCanBeLinked = shouldAskIfCanBeLinked(incident);\n incident.employeeNumber = this.state.employeeId;\n\n const result = await getAbsenceReportingService().saveIncident(\n this.state.clientCode,\n incident,\n askIfCanBeLinked,\n this.state.locale.code\n );\n\n this.state.errors = [];\n if (!result.success) {\n this.state.errors = result.validationErrors;\n if (!isEmpty(result.validationErrors)) {\n console.error(\"Validation error\", result.validationErrors);\n }\n } else if (result.returnValue) {\n const savedIncident = result.returnValue.absenceIncidentModel;\n\n this.state.incident = {\n ...savedIncident,\n linkability: maybeUpdateLinkability(\n askIfCanBeLinked,\n savedIncident,\n incident\n )\n };\n\n if (result.returnValue.absenceQuestionReturnModel) {\n this.prepareConfigQuestions(\n result.returnValue.absenceQuestionReturnModel\n );\n }\n }\n } catch (error) {\n this.state.apiErrors = this.state.apiErrors.concat(error as Error);\n } finally {\n this.state.isSavingSynchronously = false;\n }\n } else {\n void getAbsenceReportingService()\n .saveIncident(\n this.state.clientCode,\n this.state.incident,\n false,\n this.state.locale.code\n )\n .then(_.noop)\n .catch(error => {\n this.state.apiErrors = this.state.apiErrors.concat(error);\n });\n // Because the save may complete at any time, we don't want to overwrite\n // state that may have changed locally\n }\n };\n\n isReadyForSubmit = () =>\n this.isReadyForSave() && this.state.incident.absenceDates.length > 0;\n\n submit: () => Promise = async () => {\n if (!this.isReadyForSubmit()) {\n console.error(\"Submit failed (not ready for submit)\");\n return { success: false };\n }\n\n if (!this.state.incident.absenceIncidentId) {\n console.error(\"Submit failed (incident has not been saved)\");\n return { success: false };\n }\n\n this.setQuestionResponses();\n\n try {\n const result = await getAbsenceReportingService().submitIncident(\n this.state.incident,\n this.state.locale.code\n );\n this.state.errors = result.validationErrors;\n if (!isEmpty(result.validationErrors)) {\n console.error(\"Validation error\", result.validationErrors);\n }\n this.state.submitResult = {\n absenceIncidentId: this.state.incident.absenceIncidentId,\n success: result.success,\n closingScripts: result.success\n ? result.returnValue?.closingScripts.map(cs => cs.text)\n : [],\n validationErrors: result.validationErrors\n };\n this.state.submitted = result.success;\n\n this.buildQuestions();\n\n return this.state.submitResult;\n } catch (error) {\n this.state.submitResult = {\n absenceIncidentId: this.state.incident.absenceIncidentId,\n success: false\n };\n this.state.apiErrors = this.state.apiErrors.concat(error as Error);\n return this.state.submitResult;\n }\n };\n\n getNextUnansweredQuestion = (currentSection: number): number | undefined => {\n return this.state.getNextUnansweredQuestion(currentSection);\n };\n\n waitForSave = (sectionIndex: number) => {\n const section = this.state.sections[sectionIndex];\n\n // Default behavior is to wait for a save to complete.\n // Config questions have a flag that may allow saving in the background.\n return section.config === undefined\n ? true\n : section.config.reloadIncidentData !== false;\n };\n\n saveAndCheckForErrorsOrAlerts = async (currentQuestionId: string) => {\n this.state.needsSave = false;\n\n await this.save(true);\n this.state.buildQuestionAlerts(currentQuestionId);\n\n const hasNewAlerts = this.checkForAlerts();\n\n const success = this.state.errors.length === 0;\n if (!success) {\n this.state.needsSave = true;\n }\n\n return success && !hasNewAlerts;\n };\n\n checkForAlerts = () =>\n this.state.questionAlerts.some(\n a => !this.state.viewedAlertsIds.includes(a.alertId)\n );\n\n saveInBackground = () => {\n this.state.needsSave = false;\n void this.save(false);\n };\n\n getPreviousAbsences = () => {\n return this.history.previousAbsences.filter(\n a => a.absenceIncidentId !== this.state.incident.absenceIncidentId\n );\n };\n\n getAbsenceType = (): AbsenceType | undefined => {\n return this.state.incident.absenceType;\n };\n\n cancelIncident: () => Promise = async () => {\n if (!this.state.incident.absenceIncidentId) {\n return { success: true };\n }\n\n try {\n const result = await getAbsenceReportingService().cancelIncidents(\n {},\n [this.state.incident.absenceIncidentId],\n this.state.locale.code\n );\n return result;\n } catch (error) {\n return { success: false };\n }\n };\n\n public async getLatestInProgressAbsenceForEmployee(\n employeeId?: string,\n clientCode?: string,\n isNewEmployee?: boolean\n ): Promise {\n const latestInProgressIncident = isNewEmployee\n ? null\n : await getAbsenceReportingService().getLatestInProgressAbsence(\n employeeId,\n clientCode\n );\n\n return latestInProgressIncident?.absenceIncidentId ?? null;\n }\n\n private getEmployeeData = async (clientCode: string, employeeId: string) => {\n if (employeeId) {\n await getEmployeeService()\n .getEmployeeData(clientCode, employeeId)\n .then((employeeData: EmployeeData) => {\n this.setEmployeeData(employeeData);\n })\n .catch(rej => console.log(rej));\n } else {\n this.setEmployeeData(null);\n }\n };\n\n private setEmployeeData = (employeeData: EmployeeData | null) => {\n if (employeeData) {\n this.state.employeeFirstName = employeeData.firstName;\n this.state.employeeLastName = employeeData.lastName;\n this.state.callCenterEmployeePhoneNumber = employeeData?.phoneNumber;\n this.state.employeeEmail = employeeData?.email;\n } else {\n this.state.employeeFirstName = null;\n this.state.employeeLastName = null;\n this.state.callCenterEmployeePhoneNumber = null;\n this.state.employeeEmail = null;\n }\n };\n}\n","export type EmployeeScheduleDate = {\n date: Date;\n hoursWorked: number;\n};\n\nexport type EmployeeSchedule = {\n dates: EmployeeScheduleDate[];\n};\n\nexport type CheckEmployeeByNumber = {\n employeeNumber?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n hasAccess: boolean;\n employeeId: number;\n} | null;\n\nexport type QuickSearchDetails = {\n title: string;\n description: string;\n};\n\nexport type QuickEmployeeSearchResult = {\n birthDate?: string;\n clientCode?: string;\n employeeData?: string;\n employeeId?: number;\n employeeNumber?: string;\n employeeDropDownLabelDetails?: string[];\n rawEmployeeNumber?: string;\n firstName?: string;\n lastName?: string;\n jobTitle?: string;\n organizationId?: number;\n organizationName?: string;\n details?: QuickSearchDetails[];\n};\n\nexport type ResponseDocumentHighlight = {\n field?: keyof QuickEmployeeSearchResult;\n highlightData?: string[] | null;\n};\n\ninterface Document {\n [key: string]: unknown;\n}\n\nexport type ResponseDocumentOfQuickEmployeeSearchResult = {\n document?: Document;\n highlightData?: ResponseDocumentHighlight[];\n};\n\nexport type QuickSearchEmployee = {\n items: ResponseDocumentOfQuickEmployeeSearchResult[] | null;\n};\n\nexport type SearchCompanies = {\n items: SearchCompaniesResult[];\n};\n\nexport type SearchCompaniesResult = {\n clientCode?: string | null;\n companyId?: number | null;\n name?: string | null;\n rawName?: string | null;\n};\n\nexport type PreviousAbsence = {\n absenceIncidentId?: number | null;\n isPartialAbsence: boolean;\n shiftStartTime?: Date;\n shiftEndTime?: Date;\n primaryReason?: string;\n secondaryReason?: string;\n startDate?: Date;\n endDate?: Date;\n scheduledShiftStartTime?: Date;\n scheduledShiftEndTime?: Date;\n};\n\nexport type EmployeeHistory = {\n previousAbsences: PreviousAbsence[];\n};\n\nexport type EmployeeData = {\n phoneNumber?: string;\n firstName: string;\n lastName: string;\n email?: string;\n employeeCountry: string;\n employeeState?: string;\n};\n\nexport const emptySchedule = (): EmployeeSchedule => {\n return { dates: [] };\n};\n\nexport const emptyHistory = (): EmployeeHistory => {\n return { previousAbsences: [] };\n};\n\nexport interface IEmployeeService {\n getSchedule(\n clientCode: string,\n employeeNumber: string,\n from?: Date,\n to?: Date\n ): Promise;\n searchEmployees(\n searchTerms: string,\n clientCode: string\n ): Promise;\n getAbsences(\n clientCode?: string,\n employeeNumber?: string\n ): Promise;\n checkEmployeeByNumber(\n clientCode: string,\n employeeNumber: string\n ): Promise;\n getEmployeeData(clientCode: string, eeNumber: string): Promise;\n searchCompany(\n absenceReportingVersion: string,\n searchTerm: string\n ): Promise;\n getCompaniesCount(absenceReportingVersion: string): Promise;\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"title-row\":\"base-modal_title-row__3ZVn8\",\"title\":\"base-modal_title__1S8JW\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"error-message\":\"styles_error-message__1YcYs\",\"error-icon\":\"styles_error-icon__2XVip\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"icon-frame\":\"framed-icon_icon-frame__2JnP4\",\"icon\":\"framed-icon_icon__1f7Em\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"start-date-container\":\"std-claim_start-date-container__ykX4s\",\"icon\":\"std-claim_icon__3cbCu\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"title-row\":\"styles_title-row__1g76R\",\"title\":\"styles_title__1iXf3\",\"countdown-timer\":\"styles_countdown-timer__1ceSK\",\"button-row\":\"styles_button-row__3iZI0\"};","import React, { ButtonHTMLAttributes } from \"react\";\nimport styles from \"./styles.module.scss\";\nimport clsx from \"clsx\";\n\n/*\n * Note about tooltips:\n * If you want to add a react-tooltip to a button, put it on some kind of wrapper:\n * \n * Adding the tip directly to a \n );\n};\n","import React from \"react\";\nimport { ExclamationInCircleIcon } from \"components/icons\";\nimport styles from \"./styles.module.scss\";\nimport clsx from \"clsx\";\n\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nexport const ErrorMessage: React.FunctionComponent = props => {\n return (\n \n \n
{props.children}
\n \n );\n};\n","import React, {\n CSSProperties,\n KeyboardEventHandler,\n Reducer,\n useEffect,\n useReducer,\n useRef\n} from \"react\";\nimport { useOnClickOutside } from \"hooks\";\nimport { useTranslation } from \"hooks/translation\";\nimport { isEqual } from \"lodash-es\";\nimport { KeyCode, KeyName } from \"shared-types/key-events\";\nimport { ChevronDownIcon, ChevronUpIcon, CloseIcon } from \"components/icons\";\nimport styles from \"./styles.module.scss\";\nimport { IconButton } from \"components/buttons\";\nimport clsx from \"clsx\";\nimport { appInsightLog } from \"app-insights/appInsights\";\n\nexport type Option = { label: string; value: T };\ntype OptionChangeEvent = (option: Option) => void;\n\ntype Props = {\n options: Option[];\n onChange: OptionChangeEvent;\n\n className?: string;\n anchorTestId?: string;\n popoverTestId?: string;\n\n align?: \"left\" | \"right\";\n value?: T;\n placeholder?: string;\n labelText?: string;\n selectorLabelText?: string; //as a title for mobile options selector\n ariaLabelledBy?: string;\n ariaLabel?: string;\n};\n\n/**\n * A reusable select component that provides both mouse and keyboard interactivity.\n *\n * Desired behavior for keyboard interactions were referenced from\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listbox_role.\n * Note that type-ahead is not currently supported.\n */\nexport function DropdownSelect(props: Props): JSX.Element {\n const { value, options } = props;\n\n const [state, dispatch] = useReducer(\n selectReducer,\n props as Props,\n initializeState\n );\n\n const anchorRef = useRef(null);\n\n const handleKeyDown: KeyboardEventHandler = event => {\n if (event.keyCode === KeyCode.ENTER || event.key === KeyName.ENTER) {\n dispatch({ type: \"toggleOpen\" });\n }\n };\n\n const handleListClose = () => {\n dispatch({ type: \"toggleOpen\" });\n anchorRef.current?.focus();\n };\n\n const validSelection = options.find(o => isEqual(o.value, value));\n\n if (value && !validSelection) {\n console.error(\n \"The value specified as the current selection does not match one of the available options.\\nValue is:\",\n value,\n \"\\nOptions are:\",\n options\n );\n }\n\n const label =\n validSelection && validSelection.label\n ? validSelection.label\n : props.placeholder || \"\";\n\n const shouldShowListElements = props.options.length > 0;\n\n const handleOnClick = () => {\n appInsightLog(`User clicks on select: ${props.anchorTestId}`);\n if (shouldShowListElements) {\n dispatch({ type: \"toggleOpen\" });\n }\n };\n\n return (\n
\n \n {props.labelText && (\n
{props.labelText}
\n )}\n\n
{label}
\n\n {shouldShowListElements && (\n
\n {state.isOpen ? : }\n
\n )}\n
\n\n {state.isOpen && (\n \n )}\n \n );\n}\n\ntype SelectState = {\n isOpen: boolean;\n focusedIdx: number;\n selectedIdx: number;\n count: number;\n};\ntype SelectActions =\n | {\n type: \"toggleOpen\";\n }\n | {\n type: \"focusPrevious\";\n }\n | {\n type: \"focusNext\";\n }\n | {\n type: \"focusFirst\";\n }\n | {\n type: \"focusLast\";\n }\n | {\n type: \"selectOption\";\n index: number;\n };\n\nconst selectReducer: Reducer = (state, action) => {\n switch (action.type) {\n case \"toggleOpen\":\n if (!state.isOpen) {\n // When opening, focus the currently selected index if present\n return {\n ...state,\n isOpen: true,\n focusedIdx: Math.max(state.selectedIdx, 0)\n };\n } else {\n return { ...state, isOpen: false };\n }\n case \"focusPrevious\":\n return { ...state, focusedIdx: Math.max(state.focusedIdx - 1, 0) };\n case \"focusNext\":\n return {\n ...state,\n focusedIdx: Math.min(state.focusedIdx + 1, state.count - 1)\n };\n case \"focusFirst\":\n return { ...state, focusedIdx: 0 };\n case \"focusLast\":\n return { ...state, focusedIdx: state.count - 1 };\n case \"selectOption\":\n return { ...state, isOpen: false, selectedIdx: action.index };\n }\n};\n\nconst initializeState = (props: Props): SelectState => {\n const initialIdx = props.options.findIndex(o => isEqual(o, props.value));\n return {\n isOpen: false,\n count: props.options.length,\n focusedIdx: initialIdx,\n selectedIdx: initialIdx\n };\n};\n\ntype OptionListProps = Props & {\n anchorRef: React.RefObject;\n state: SelectState;\n dispatch: (action: SelectActions) => void;\n handleListClose: () => void;\n};\nfunction OptionList(props: OptionListProps) {\n const { anchorRef, state, dispatch, options, value, handleListClose } = props;\n\n const t = useTranslation();\n const popoverRef = useRef(null);\n\n useOnClickOutside(\n popoverRef,\n event => {\n event.preventDefault();\n props.handleListClose();\n },\n anchorRef\n );\n\n const handleSelectOption = (option: Option, index: number) => {\n dispatch({ type: \"selectOption\", index });\n props.onChange(option);\n anchorRef.current?.focus();\n };\n\n const anchorRect = anchorRef.current?.getBoundingClientRect();\n\n const listStyle: CSSProperties = {};\n if (anchorRect) {\n listStyle.top = anchorRect.height + 8;\n }\n if (props.align === \"right\") {\n listStyle.right = 0;\n } else {\n listStyle.left = 0;\n }\n\n return (\n <>\n \n
\n
\n
\n {props.selectorLabelText}\n
\n \n \n \n
\n \n {options.map((o, i) => (\n handleSelectOption(o, i)}\n handleArrowUp={() => dispatch({ type: \"focusPrevious\" })}\n handleArrowDown={() => dispatch({ type: \"focusNext\" })}\n handleHome={() => dispatch({ type: \"focusFirst\" })}\n handleEnd={() => dispatch({ type: \"focusLast\" })}\n handleListClose={handleListClose}\n />\n ))}\n \n
\n \n );\n}\n\ntype OptionItemProps = {\n option: Option;\n isFocused: boolean;\n isSelected: boolean;\n handleSelectOption: () => void;\n handleArrowUp: () => void;\n handleArrowDown: () => void;\n handleHome: () => void;\n handleEnd: () => void;\n handleListClose: () => void;\n};\nfunction OptionItem(props: OptionItemProps) {\n const { isFocused, isSelected, option } = props;\n const ref = useRef(null);\n\n useEffect(() => {\n if (isFocused && ref.current) {\n ref.current.focus();\n }\n }, [ref, isFocused]);\n\n const handleKeyDown: KeyboardEventHandler = event => {\n const { keyCode, key } = event;\n\n if (keyCode === KeyCode.ARROW_UP || key === KeyName.ARROW_UP) {\n props.handleArrowUp();\n } else if (keyCode === KeyCode.ARROW_DOWN || key === KeyName.ARROW_DOWN) {\n props.handleArrowDown();\n } else if (keyCode === KeyCode.HOME || key === KeyName.HOME) {\n props.handleHome();\n } else if (keyCode === KeyCode.END || key === KeyName.END) {\n props.handleEnd();\n } else if (keyCode === KeyCode.ENTER || key === KeyName.ENTER) {\n props.handleSelectOption();\n } else if (keyCode === KeyCode.TAB || key === KeyName.TAB) {\n props.handleListClose();\n } else {\n // Bail for unsupported inputs to avoid overriding misc default behavior\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n };\n\n return (\n {\n props.handleSelectOption();\n appInsightLog(`User clicks: ${option.label}`);\n }}\n onKeyDown={handleKeyDown}\n className={styles[\"option\"]}\n data-value={option.value}\n data-testid={option.label}\n >\n {option.label}\n \n );\n}\n","import React from \"react\";\nimport { BaseModal, modalStyle } from \"components/base-modal/base-modal\";\nimport { ContainedButton, TextButton } from \"components/buttons\";\nimport styles from \"./leave-proceed-modal.module.scss\";\nimport { cloneDeep } from \"lodash-es\";\n\ntype Props = {\n onRequestClose: () => void;\n onRequestLeave: () => void;\n onRequestProceed: () => void;\n title: string;\n contentText: string | JSX.Element;\n leaveButtonText: string;\n proceedButtonText: string;\n isOpen: boolean;\n};\n\nexport const LeaveProceedModal: React.FC = ({\n onRequestClose,\n onRequestLeave,\n onRequestProceed,\n title,\n contentText,\n leaveButtonText,\n proceedButtonText,\n isOpen\n}) => {\n const modalStyles = cloneDeep(modalStyle);\n if (modalStyles.content) {\n modalStyles.content.width = \"544px\";\n }\n\n return (\n \n
{contentText}
\n
\n
\n \n {leaveButtonText}\n \n\n \n {proceedButtonText}\n \n
\n
\n \n );\n};\n","import { IAbilitiUser, ISessionService } from \"./session-model\";\nimport faker from \"faker\";\n\nexport class MockSessionService implements ISessionService {\n private static _firstName = faker.name.firstName();\n private static _lastName = faker.name.lastName();\n\n private static _testUser: IAbilitiUser = {\n name: `${MockSessionService._firstName} ${MockSessionService._lastName}`,\n given_name: MockSessionService._firstName,\n family_name: MockSessionService._lastName,\n role: faker.name.jobTitle(),\n email: faker.internet.email(),\n client_code: \"DEMOCLIENT\",\n ee_no: faker.datatype.number(20000).toString()\n };\n\n getUser(): IAbilitiUser | null {\n return MockSessionService._testUser;\n }\n\n getClientCode = (): string | null => MockSessionService._testUser.client_code;\n\n setClientCode = (clientCode: string) =>\n (MockSessionService._testUser.client_code = clientCode);\n\n isAuthenticated = () => true;\n\n getAccessToken = () => JSON.stringify(MockSessionService._testUser);\n\n hasPrivileges = (privileges: string[], checkAll?: boolean) => true;\n\n setSession = (accessToken: string | null) => {\n return;\n };\n\n resetSessionToken = () => {\n return;\n };\n\n hasEmployees = () => sessionStorage.getItem(\"hasEmployees\") === \"true\";\n\n isCICUser = () => sessionStorage.getItem(\"isCICUser\") === \"true\";\n\n hasAccess = () => true;\n}\n","import { signinCallbackPath } from \"auth/auth-service\";\nimport jwtDecode from \"jwt-decode\";\nimport { IAbilitiUser, ISessionService, IAbilitiToken } from \"./session-model\";\n\nexport class TokenSessionService implements ISessionService {\n logout = () => {\n this.setSession(null);\n };\n\n setSession = (accessToken: string | null) => {\n if (accessToken) {\n sessionStorage.setItem(\"access_token\", accessToken);\n sessionStorage.setItem(\"refetchTokenAttempts\",\"0\");\n } else {\n sessionStorage.clear();\n }\n };\n\n //remove token to force auth check form identity server\n //keep token within 5s to allow for storing by signin and page reload\n resetSessionToken = () => {\n const current = new Date().getTime();\n if (window.location.pathname !== \"/\" + signinCallbackPath) {\n const timestamp = +(sessionStorage.getItem(\"session_ts\") || 0);\n\n if (timestamp < current - 60000) {\n sessionStorage.removeItem(\"access_token\");\n }\n }\n sessionStorage.setItem(\"session_ts\", \"\" + current);\n };\n\n getAccessToken = () => sessionStorage.getItem(\"access_token\");\n\n getUser = (): IAbilitiUser | null => {\n const accessToken = this.getAccessToken();\n if (accessToken === null || !this.isValidToken(accessToken)) return null;\n return jwtDecode(accessToken);\n };\n\n getClientCode = (): string | null => {\n const session_code = sessionStorage.getItem(\"client_code\");\n if (session_code) return session_code;\n return this.getUser()?.client_code ?? null;\n };\n\n setClientCode = (clientCode: string) => {\n sessionStorage.setItem(\"client_code\", clientCode);\n };\n\n getUserPrivileges = (): string[] => {\n const privileges = sessionStorage.getItem(\"privileges\");\n if (!privileges) {\n return [];\n }\n\n return JSON.parse(privileges);\n };\n\n isValidToken = (accessToken: string | null) => {\n if (!accessToken) {\n return false;\n }\n const decoded: IAbilitiToken = jwtDecode(accessToken);\n const currentTime = Date.now() / 1000;\n return decoded.exp > currentTime;\n };\n\n isAuthenticated = () => this.isValidToken(this.getAccessToken());\n\n hasPrivileges = (privileges: string[], checkAll?: boolean) => {\n const user = this.getUser();\n const userPrivileges = (user && this.getUserPrivileges()) || [];\n\n if (checkAll) {\n return (\n privileges.filter(f => userPrivileges?.indexOf(f) < 0).length === 0\n );\n } else {\n return privileges.filter(f => userPrivileges?.indexOf(f) >= 0).length > 0;\n }\n };\n\n hasEmployees = (): boolean => {\n return sessionStorage.getItem(\"hasEmployees\") === \"true\";\n };\n\n isCICUser = (): boolean => {\n return sessionStorage.getItem(\"isCICUser\") === \"true\";\n };\n\n hasAccess = (): boolean => sessionStorage.getItem(\"hasAccess\") !== \"false\";\n}\n","import { ISessionService } from \"./session-model\";\nimport { AppContext } from \"../../context/app-context\";\nimport { MockSessionService } from \"./session-service-mock\";\nimport { TokenSessionService } from \"./token-session-service\";\n\nexport const getSessionService = (): ISessionService => {\n if (AppContext.isSandbox()) {\n return new MockSessionService();\n }\n return new TokenSessionService();\n};\n","// GENERATED FILE - DO NOT EDIT\n\n export interface PossibleTypesResultData {\n possibleTypes: {\n [key: string]: string[]\n }\n }\n const result: PossibleTypesResultData = {\n \"possibleTypes\": {\n \"IClaim\": [\n \"AbilitiReferral\",\n \"LeaveClaim\",\n \"MyAbilitiARClaim\",\n \"STDClaim\"\n ]\n }\n};\n export default result;\n ","import { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { loader } from \"graphql.macro\";\nimport faker from \"faker\";\nimport { addMocksToSchema, MockList } from \"@graphql-tools/mock\";\nimport { addHours } from \"date-fns\";\nimport _, { sample } from \"lodash-es\";\nimport {\n AbilitiReferral,\n AbsenceIncidentInputModelInput,\n Connect_LocaleModel,\n LeaveClaim,\n MyAbilitiArClaim,\n QuickSearchTypes,\n SearchRequestOfClaimSearchRequestInput,\n StdClaim\n} from \"graphql-types.gen\";\n\nexport function mockApiSchema() {\n const schema = makeExecutableSchema({ typeDefs: loader(\"schema.graphql\") });\n\n const scenario = {\n activeClaims: _.flatten([\n _.range(2).map(() => makeMyAbilitiARClaim(true)),\n _.range(2).map(() => makeSTDClaim(true)),\n _.range(2).map(() => makeLeaveClaim(true)),\n _.range(2).map(() => makeAbilitiReferral(\"std\")),\n _.range(2).map(() => makeAbilitiReferral(\"leave\"))\n ]),\n historicalClaims: _.flatten([\n _.range(20).map(() => makeMyAbilitiARClaim(false)),\n _.range(20).map(() => makeSTDClaim(false)),\n _.range(20).map(() => makeLeaveClaim(false))\n ])\n };\n\n const mocks = {\n Int: () => faker.datatype.number(),\n Decimal: () => faker.datatype.number(),\n Long: () => faker.datatype.number(),\n Uuid: () => faker.random.uuid(),\n DateTime: () => faker.date.future().toISOString(),\n TimeSpan: () => faker.datatype.number(8),\n String: () => faker.random.words(3),\n DecisionViewModel: () => ({\n decisionType: () => _.sample(allDecisionStatusTypes)\n }),\n LeaveDeterminationViewModel: () => ({\n resolution: () => _.sample(allDecisionStatusTypes)\n }),\n ValidationErrorGraphQLOfSaveAbsenceIncidentReturnModel: () => ({\n success: () => true\n }),\n ValidationErrorGraphQLOfSubmitAbsenceIncidentReturnModel: () => ({\n success: () => true\n }),\n AbsenceQuestionReturnModel: () => ({\n questions: () => [],\n preQualifyingQuestions: () => [],\n reasonOfAbsenceAlerts: () => new MockList([0, 2])\n }),\n connect_QuestionModel: () => ({\n alerts: () => new MockList(0)\n }),\n WorkShiftModel: () => ({\n endTimeHours: () => faker.datatype.number(23),\n endTimeMinutes: () => faker.datatype.number(59),\n startTimeHours: () => faker.datatype.number(23),\n startTimeMinutes: () => faker.datatype.number(59)\n }),\n STDCaseViewModel: () => ({\n claimStatus: () => sample(StdClaimStatusOptions)\n }),\n LeaveCaseViewModel: () => ({\n claimStatus: () => sample(LeaveClaimStatusOptions)\n }),\n LeavePolicyViewModel: () => ({\n planned: () => faker.datatype.number({ min: 15, max: 30 }),\n used: () => faker.datatype.number(15),\n total: () => faker.datatype.number(30),\n unit: () => sample([\"hours\", \"days\", \"weeks\"])\n }),\n Query: () => ({\n searchActiveClaims: () => ({\n totalRecords: scenario.activeClaims.length,\n items: scenario.activeClaims\n }),\n searchClaimsWithQuickSearchType: ({\n quickSearchType,\n request\n }: {\n quickSearchType: QuickSearchTypes;\n request: SearchRequestOfClaimSearchRequestInput;\n }) => {\n const { pageSize, pageNumber } = request ?? {\n pageSize: 10,\n pageNumber: 1\n };\n\n if (quickSearchType !== \"HISTORICALCLAIMS\") {\n console.error(\"Unknown quickSearchType\", quickSearchType);\n return undefined;\n }\n\n // pageNumber is 1-based\n const pageIndex = pageNumber - 1;\n const items = _.slice(\n scenario.historicalClaims,\n pageIndex * pageSize,\n pageIndex * pageSize + pageSize\n );\n\n return {\n totalRecords: scenario.historicalClaims.length,\n items\n };\n }\n }),\n Mutation: () => ({\n saveAbsenceIncident: (\n _: unknown,\n inputs: AbsenceIncidentInputModelInput\n ) => {\n // TODO: Make this work. The inputs contain more absenceDates than\n // we actually send. Leaving it for now since we still rely on\n // the MockAbsenceReportingService for sandbox mode.\n\n return {\n absenceIncidentModel: () => {\n return {\n primaryReason: () => inputs.primaryReason,\n absenceDates: () => inputs.absenceDates\n };\n }\n };\n }\n })\n };\n return addMocksToSchema({ schema, mocks });\n}\n\nconst StdClaimStatusOptions = [\"OPEN\", \"CLOSED\"];\nconst LeaveClaimStatusOptions = [\n \"APPROVED\",\n \"PENDING\",\n \"PENDING_PAPERWORK\",\n \"PENDING_REVIEW\",\n \"MISSING_PAPERWORK\",\n \"CANCELLED\",\n \"DENIED\"\n];\n\nconst allDecisionStatusTypes = [\n \"APPROVED\",\n \"SUPPORT\",\n \"PREAPROV\",\n \"SUP.TRTW\",\n \"PENDING\",\n \"DENIED\",\n \"NON.PARTIC\",\n \"NONSUPPORT\"\n];\n\nconst allRelationships = [\n \"adoptedChild\",\n \"biologicalChild\",\n \"AdultChild\",\n \"childOfDomestic\",\n \"fosterChild\",\n \"in_loco_parentis\",\n \"legal_ward\",\n \"next_of_kin\",\n \"parent\",\n \"self\",\n \"spouse\",\n \"stepChild\",\n \"step_parent\"\n];\n\nfunction maybeNull(chanceOfNull: number, makeValue: () => T) {\n if (faker.random.float({ min: 0, max: 1 }) <= chanceOfNull) {\n return null;\n } else {\n return makeValue();\n }\n}\n\nfunction makeRelationshipOrNull() {\n return maybeNull(1 / 5, () => faker.random.arrayElement(allRelationships));\n}\n\ntype GqlObject = { __typename: string };\n\nfunction makeAbilitiReferral(\n subtype: \"std\" | \"leave\"\n): GqlObject & Partial {\n const date = faker.date.future();\n\n return {\n __typename: \"AbilitiReferral\",\n incidentTypeCode: \"ABILITI_REFERRAL\",\n isLeavesReferral: subtype === \"leave\",\n isWCBReferral: false,\n status: \"1\",\n caseCancelled: 0,\n firstDateOfAbsence: date.toISOString(),\n caseType: { std: \"STD\", leave: \"LEAVE\" }[subtype],\n claimStatus: sample(\n { std: StdClaimStatusOptions, leave: LeaveClaimStatusOptions }[subtype]\n ),\n leaveTypeLocale: { leave: makeLocaleText(), std: [] }[subtype],\n caseTypeLocale: { std: makeLocaleText(), leave: [] }[subtype],\n relationShip: makeRelationshipOrNull()\n };\n}\n\nfunction makeLeaveClaim(active: boolean): GqlObject & Partial {\n const date = active ? faker.date.soon(30) : faker.date.recent(30);\n\n return {\n __typename: \"LeaveClaim\",\n incidentTypeCode: \"INCIDENT_GENERIC_LEAVE\",\n status: active ? \"1\" : \"0\",\n caseCancelled: active ? 0 : faker.datatype.number({ min: 0, max: 1 }),\n leaveStartDate: date.toISOString(),\n leaveTypeLocale: makeLocaleText(),\n leaveTypeCode: \"PENDING\",\n leaveStatus: sample(LeaveClaimStatusOptions),\n claimStatus: sample(LeaveClaimStatusOptions),\n relationShip: makeRelationshipOrNull()\n };\n}\n\nfunction makeSTDClaim(active: boolean): GqlObject & Partial {\n const date = active ? faker.date.soon(30) : faker.date.recent(30);\n\n return {\n __typename: \"STDClaim\",\n incidentTypeCode: \"INCIDENT_STD\",\n status: active ? \"1\" : \"0\",\n caseCancelled: active ? 0 : faker.datatype.number({ min: 0, max: 1 }),\n dateOfIncident: date.toISOString(),\n caseTypeLocale: makeLocaleText(),\n claimStatus: active ? \"Open\" : \"Closed\",\n relationShip: makeRelationshipOrNull()\n };\n}\n\nfunction makeMyAbilitiARClaim(\n active: boolean\n): GqlObject & Partial {\n const date = active ? faker.date.soon(30) : faker.date.recent(30);\n\n return {\n __typename: \"MyAbilitiARClaim\",\n incidentTypeCode: \"INCIDENT_MYABILITI_AR\",\n caseCancelled: active ? 0 : faker.datatype.number({ min: 0, max: 1 }),\n absenceType: \"intermittent\",\n relationShip: makeRelationshipOrNull(),\n primaryReasonLocale: makeLocaleText(),\n claimDates: [\n {\n startDate: date.toISOString(),\n endDate: addHours(date, 2).toISOString()\n }\n ],\n claimStatus: \"S\"\n };\n}\n\nfunction makeLocaleText(): Connect_LocaleModel[] {\n return [\"EN\", \"FR\"].map(locale => ({\n description: faker.company.catchPhrase(),\n locale\n }));\n}\n","import fetch from \"cross-fetch\";\nimport { AppContext } from \"../context/app-context\";\nimport { getSessionService } from \"../features/session/session-service\";\nimport { IAbilitiUser } from \"features/session/session-model\";\nimport {\n getLanguageFromCode,\n SupportedLanguage\n} from \"features/translations/locales\";\nimport JwtDecode from \"jwt-decode\";\nimport {\n ApolloClient,\n ApolloLink,\n createHttpLink,\n InMemoryCache,\n NormalizedCacheObject\n} from \"@apollo/client\";\nimport { setContext } from \"@apollo/client/link/context\";\nimport { onError } from \"@apollo/client/link/error\";\nimport fragmentTypes from \"graphql-fragment-types.gen\";\nimport { mockApiSchema } from \"api/api-graphql-mock\";\nimport { SchemaLink } from \"@apollo/client/link/schema\";\n\nconst getApiUrl = () => {\n const url = process.env.REACT_APP_ABILITI_API_GQL_URL;\n if (!url && !AppContext.isSandbox())\n throw new Error(\"Abiliti GQL Api url is not defined\");\n return url;\n};\n\nlet _apolloClient: ApolloClient;\nexport const getApiGraphQL = function () {\n if (!_apolloClient) {\n _apolloClient = createApolloClient(\n () => getSessionService().getAccessToken(),\n AppContext.isSandbox()\n );\n }\n\n return _apolloClient;\n};\n\nexport function createApolloClient(\n getAccessToken: () => string | null,\n useMocks = false\n) {\n // We could get a little boost from automatic query batching, but it requires HotChocolate to\n // be upgraded to at least v11 (v10 has a bug that requires synchronous IO for batch queries:\n // https://github.com/ChilliCream/hotchocolate/issues/2273).\n // To enable batching, just replace \"createHttpLink\" with \"new BatchHttpLink\"\n const serverLink = useMocks\n ? new SchemaLink({ schema: mockApiSchema() })\n : createHttpLink({ uri: getApiUrl(), fetch });\n\n const authLink = setContext((_, { headers }) => {\n const token = getSessionService().getAccessToken();\n const requestHeaders = {\n headers: {\n ...headers,\n Authorization: token ? `Bearer ${token}` : \"\"\n }\n };\n\n if (!AppContext.isSandbox()) {\n let decodedToken: IAbilitiUser | { locale: string } = {\n locale: SupportedLanguage.EnglishUS\n };\n\n if (token) {\n decodedToken = JwtDecode(token);\n }\n\n const language = getLanguageFromCode(\n decodedToken.locale || SupportedLanguage.EnglishUS\n );\n\n requestHeaders.headers[\"Accept-Language\"] = language;\n }\n\n return requestHeaders;\n });\n\n const errorLink = onError(({ graphQLErrors, networkError }) => {\n console.error(networkError);\n console.error(graphQLErrors);\n });\n\n // Remove the __typename attribute from objects being passed in as graphql query variables.\n // __typename is needed for correct fragment handling, but just gets in the way for mutations.\n // https://stackoverflow.com/questions/47211778/cleaning-unwanted-fields-from-graphql-responses/51380645#51380645\n const cleanTypeName = new ApolloLink((operation, forward) => {\n if (operation.variables) {\n const omitTypename = (key: unknown, value: unknown) =>\n key === \"__typename\" ? undefined : value;\n operation.variables = JSON.parse(\n JSON.stringify(operation.variables),\n omitTypename\n );\n }\n return forward(operation);\n });\n\n const cache = new InMemoryCache({\n addTypename: true,\n possibleTypes: fragmentTypes.possibleTypes\n });\n\n return new ApolloClient({\n link: ApolloLink.from([cleanTypeName, errorLink, authLink, serverLink]),\n cache,\n name: \"transform-web-client\",\n version: \"1.0\",\n queryDeduplication: false,\n defaultOptions: {\n watchQuery: {\n // watchQuery is only used by the useQuery hook\n fetchPolicy: \"network-only\",\n errorPolicy: \"none\"\n },\n query: {\n fetchPolicy: \"network-only\",\n errorPolicy: \"none\"\n },\n mutate: {\n errorPolicy: \"all\"\n }\n }\n });\n}\n","import {\n QuestionAnswer,\n ValidationResult,\n WorkflowQuestionTemplate\n} from \"../absence-reporting-types\";\nimport { ARWorkflowState } from \"../absence-reporting-state\";\nimport {\n areTimesEqual,\n formatTime,\n TimeInterval,\n toDateInterval,\n toTimeInterval\n} from \"shared-types/time\";\nimport { differenceInMinutes } from \"date-fns\";\nimport { WorkShift } from \"../incident\";\nimport { flatten } from \"lodash-es\";\nimport { getWorkShiftOptions } from \"utils/shift-utils\";\nimport {\n EmployeeSchedule,\n PreviousAbsence\n} from \"features/employee/employee-model\";\n\nconst validateTime = (interval: TimeInterval, duration: number) => {\n const times = toDateInterval(interval);\n const diff = differenceInMinutes(times.endDate, times.startDate);\n return diff % duration === 0;\n};\n\nconst validateInterval = (interval: TimeInterval): boolean => {\n const times = toDateInterval(interval);\n\n return times.startDate.getTime() !== times.endDate.getTime();\n};\n\nconst validateTimeIntervals = (\n state: ARWorkflowState,\n intervals: TimeInterval[]\n): ValidationResult => {\n if (state.incident.absenceType !== \"continuous\") {\n if (!intervals.every(i => validateInterval(i))) {\n return {\n isValid: false,\n message: {\n tag: \"reportAbsence.absence_time.invalid_duration\",\n vars: {\n duration: state.config?.absenceDurationMinutes.toString() || \"\"\n }\n }\n };\n }\n }\n\n const duration = state.config?.absenceDurationMinutes || 0;\n\n if (duration > 0 && !intervals.every(i => validateTime(i, duration))) {\n return {\n isValid: false,\n message: {\n tag: \"reportAbsence.absence_time.invalid_duration\",\n vars: {\n duration: state.config?.absenceDurationMinutes.toString() || \"\"\n }\n }\n };\n }\n return { isValid: true };\n};\n\nconst getOverlappingAbsenceTime = (\n abs1StartDate: Date,\n abs1EndDate: Date,\n abs2StartDate: Date,\n abs2EndDate: Date\n): TimeInterval => {\n const from = abs1StartDate > abs2StartDate ? abs1StartDate : abs2StartDate;\n const to = abs1EndDate > abs2EndDate ? abs2EndDate : abs1EndDate;\n\n return toTimeInterval(from, to);\n};\n\nexport const getOverlappingAbsenceTimes = (\n interval: TimeInterval,\n previousAbsences: PreviousAbsence[]\n): TimeInterval[] => {\n const times: TimeInterval[] = [];\n\n const dateInterval = toDateInterval(interval);\n for (let i = 0; i < previousAbsences.length; i++) {\n const absence = previousAbsences[i];\n if (!absence.startDate || !absence.endDate) {\n continue;\n }\n\n if (\n (dateInterval.startDate >= absence.startDate &&\n dateInterval.startDate < absence.endDate) ||\n (dateInterval.endDate > absence.startDate &&\n dateInterval.endDate <= absence.endDate) ||\n (absence.startDate > dateInterval.startDate &&\n absence.startDate < dateInterval.endDate) ||\n (absence.endDate > dateInterval.startDate &&\n absence.endDate < dateInterval.endDate) ||\n (absence.startDate === dateInterval.startDate &&\n absence.endDate === dateInterval.endDate)\n ) {\n const time = getOverlappingAbsenceTime(\n absence.startDate,\n absence.endDate,\n dateInterval.startDate,\n dateInterval.endDate\n );\n\n if (\n times.length > 0 &&\n times[times.length - 1].date === time.date &&\n areTimesEqual(times[times.length - 1].endTime, time.startTime)\n ) {\n times[times.length - 1] = {\n date: time.date,\n startTime: times[times.length - 1].startTime,\n endTime: time.endTime\n };\n } else {\n times.push(time);\n }\n }\n }\n\n return times;\n};\n\nconst validateTimeOverlaps = (\n previousAbsences: PreviousAbsence[],\n intervals: TimeInterval[]\n): ValidationResult => {\n for (let i = 0; i < intervals.length; i++) {\n const overlappingAbsence = getOverlappingAbsenceTimes(\n intervals[i],\n previousAbsences\n );\n\n if (overlappingAbsence.length === 1) {\n const from = overlappingAbsence[0].startTime\n ? formatTime(overlappingAbsence[0].startTime)\n : \"?\";\n const to = overlappingAbsence[0].endTime\n ? formatTime(overlappingAbsence[0].endTime)\n : \"?\";\n return {\n isValid: false,\n message: {\n tag: \"reportAbsence.absence_time.overlapping_absences\",\n vars: {\n from,\n to\n }\n }\n };\n } else if (overlappingAbsence.length > 1) {\n const from1 = overlappingAbsence[0].startTime\n ? formatTime(overlappingAbsence[0].startTime)\n : \"?\";\n const to1 = overlappingAbsence[0].endTime\n ? formatTime(overlappingAbsence[0].endTime)\n : \"?\";\n const from2 = overlappingAbsence[1].startTime\n ? formatTime(overlappingAbsence[1].startTime)\n : \"?\";\n const to2 = overlappingAbsence[1].endTime\n ? formatTime(overlappingAbsence[1].endTime)\n : \"?\";\n return {\n isValid: false,\n message: {\n tag: \"reportAbsence.absence_time.overlapping_many_absences\",\n vars: {\n from1,\n to1,\n from2,\n to2\n }\n }\n };\n }\n }\n\n return { isValid: true };\n};\n\nexport const buildDateTimesSections = (\n state: ARWorkflowState,\n schedule: EmployeeSchedule,\n previousAbsences: PreviousAbsence[]\n): WorkflowQuestionTemplate[] => {\n const getAllWorkShiftOptions = () => {\n return flatten([getWorkShiftOptions(state.config), state.tempShiftOptions]);\n };\n\n \n return [\n {\n id: \"absence-dates\",\n type: \"CalendarQuestion\",\n promptTag: () => ({ tag: \"reportAbsence.absence_date.prompt\" }),\n descriptionTag: () => ({\n tag: \"reportAbsence.absence_date.description\"\n }),\n absenceReasonInfo: state.getReasonOfAbsenceInfo,\n answer: () => ({\n type: \"absence-dates\",\n value: {\n dates: state.incident.absenceDates.map(d => d.shiftStartTime),\n absenceType: state.incident.absenceType || \"continuous\"\n }\n }),\n summary: () => {\n return {\n type: \"absence-dates\",\n label: { tag: \"reportAbsence.absence_date.prompt\" },\n answer: {\n dates: state.incident.absenceDates,\n absenceType: state.incident.absenceType\n }\n };\n },\n setAnswer: (answer: QuestionAnswer) => {\n if (answer.type === \"absence-dates\") {\n state.incident.absenceType = answer.value.absenceType;\n state.setDates(answer.value.dates);\n }\n },\n requiresAnswer: () => state.incident.absenceDates.length === 0,\n schedule: () => schedule,\n previousAbsences: () => previousAbsences,\n isSubmissionMode: true\n },\n {\n id: \"absence-shifts\",\n type: \"ShiftQuestion\",\n promptTag: () => ({ tag: \"reportAbsence.absence_shift.prompt\" }),\n descriptionTag: () => ({\n tag: \"reportAbsence.absence_shift.description\"\n }),\n workShiftOptions: getAllWorkShiftOptions,\n addTempShift: (shift: WorkShift) => {\n state.tempShiftOptions.push(shift);\n },\n answer: () => ({\n type: \"absence-shifts\",\n value: { shifts: state.getShifts() }\n }),\n setAnswer: (answer: QuestionAnswer) => {\n if (answer.type === \"absence-shifts\") {\n state.setShifts(answer.value.shifts, true);\n }\n },\n requiresAnswer: () => false,\n initialSameShiftToggle: () => {\n return state.showSameShiftForDates !== undefined\n ? state.showSameShiftForDates\n : state.incident.absenceType === \"continuous\";\n },\n sameShiftToggleHandler: val => state.setShowSameShiftForDates(val),\n isSubmissionMode: true, \n maxShiftLengthThresholdInMinutes: state.config?.aR3IvrConfiguration?.maxShiftLengthThresholdInMinutes || 0 \n },\n {\n id: \"absence-times\",\n type: \"TimeQuestion\",\n scheduleOverrideWarning: () =>\n state.config?.workScheduleInfo.scheduleOverrideWarning ?? false,\n scheduleOverrideMessage: () =>\n state.config?.workScheduleInfo.warningMessages ?? {\n tag: \"warnings.schedule_override\"\n },\n selectedWorkShifts: () => state.shifts, \n maxShiftLengthThresholdInMinutes: state.config?.aR3IvrConfiguration?.maxShiftLengthThresholdInMinutes || 0, \n answer: () => ({\n type: \"absence-times\",\n value: {\n absenceType: state.incident.absenceType || \"intermittent\",\n times: state.getTimes(),\n minuteInterval: state.config?.absenceDurationMinutes || 1\n }\n }),\n promptTag: () => ({ tag: \"reportAbsence.absence_time.prompt\" }),\n descriptionTag: () => ({\n tag: \"reportAbsence.absence_time.description\"\n }),\n setAnswer: (answer: QuestionAnswer) => {\n if (answer.type === \"absence-times\") {\n state.setTimes(answer.value.times);\n state.restoredTimeIntervals = JSON.parse(\n JSON.stringify(answer.value.times)\n );\n if (answer.value.absenceType) {\n state.incident.absenceType = answer.value.absenceType;\n }\n }\n },\n validateAnswer: (answer: QuestionAnswer) => {\n if (answer.type === \"absence-times\") {\n const timeOverlapsValidation = validateTimeOverlaps(\n previousAbsences,\n answer.value.times\n );\n\n return !timeOverlapsValidation.isValid\n ? timeOverlapsValidation\n : validateTimeIntervals(state, answer.value.times);\n }\n return { isValid: true };\n },\n requiresAnswer: () => false,\n previousAbsences: () => previousAbsences,\n isSubmissionMode: true\n }\n ];\n};\n","import React, { useState } from \"react\";\nimport { DropdownSelect } from \"components/dropdown-select\";\nimport { useLanguageContext } from \"context/user-language-context\";\nimport { SupportedLanguage } from \"features/translations/locales\";\nimport { useFormat } from \"hooks/format\";\n\nimport { useTranslation } from \"hooks/translation\";\n\n export function LanguageSelectorButton(){\n const { setLanguage } = useLanguageContext();\n const { currentLang } = useLanguageContext();\n const [currentLanguage, setCurrentLanguage] = useState(\"\");\n const { currentLocale } = useFormat();\n const t = useTranslation();\n const languages : string[] = [t({ tag: \"languages.english\" }), t({ tag: \"languages.french\" }), t({ tag: \"languages.spanishSelected\" })];\n \n\n const getLanguages: { label : string, value : string}[] = languages.map(language=>{\n return {label: language, value: language};\n })\n\n let placeHolder = \"\";\n if (currentLang === SupportedLanguage.EnglishCA || currentLang === SupportedLanguage.EnglishUS){\n placeHolder = t({ tag: \"languages.english\" });\n }\n else if (currentLang === SupportedLanguage.FrenchCA){\n placeHolder = t({ tag: \"languages.french\" });\n }\n else if (currentLang === SupportedLanguage.Spanish){\n placeHolder = t({ tag: \"languages.spanishSelected\" }); \n }\n\n const changeLanguage = (languageSelected : string)=>{\n if (languageSelected === t({ tag: \"languages.english\" })){\n setCurrentLanguage(t({ tag: \"languages.english\" }));\n setLanguage(SupportedLanguage.EnglishCA)\n sessionStorage.setItem(\"lang\", \"en\")\n }\n\n else if (languageSelected === t({ tag: \"languages.french\" })){\n setCurrentLanguage(t({ tag: \"languages.french\" }));\n setLanguage(SupportedLanguage.FrenchCA)\n sessionStorage.setItem(\"lang\", \"fr\") \n }\n else if (languageSelected === t({ tag: \"languages.spanishSelected\" })){\n setCurrentLanguage(t({ tag: \"languages.spanishSelected\" }));\n setLanguage(SupportedLanguage.Spanish)\n sessionStorage.setItem(\"lang\", \"es\")\n }\n }\n return (\n
\n {changeLanguage(o.value)}}\n value={currentLanguage}\n placeholder={placeHolder}\n options={getLanguages}/>\n
\n );\n };\n","import { useLanguageContext } from \"context/user-language-context\";\nimport { getWebConfigurationService } from \"features/config/web-configuration-service\";\nimport { getSessionService } from \"features/session/session-service\";\nimport { getParentLanguageCode } from \"features/translations/locales\";\nimport { useEffect, useState } from \"react\";\n\nexport const useFeatures = () => {\n const [connectLink, setConnectLink] = useState();\n const { currentLang } = useLanguageContext();\n\n useEffect(() => {\n const load = async () => {\n const sessionService = getSessionService();\n const canAccessConnect = sessionService.hasEmployees();\n const clientCode = sessionService.getClientCode();\n\n if (clientCode && canAccessConnect) {\n const language = getParentLanguageCode(currentLang);\n await getWebConfigurationService()\n .getClientFeatureUrl(clientCode, \"connect\", language)\n .then(result => {\n setConnectLink(result);\n });\n }\n };\n void load();\n }, [currentLang]);\n\n return {\n connectLink\n };\n};\n","/* eslint-disable react/jsx-no-literals */\nimport { useUniqueId } from \"hooks\";\nimport { isEmpty } from \"lodash-es\";\nimport React, {\n forwardRef,\n InputHTMLAttributes,\n useEffect,\n useImperativeHandle,\n useState,\n TextareaHTMLAttributes,\n RefObject,\n FormEvent,\n useCallback,\n createRef\n} from \"react\";\nimport styles from \"./styles.module.scss\";\nimport clsx from \"clsx\";\n\nexport const getHeight = (rows: number, el: HTMLTextAreaElement): number => {\n const {\n borderBottomWidth,\n borderTopWidth,\n fontSize,\n lineHeight,\n paddingBottom,\n paddingTop\n } = window.getComputedStyle(el);\n\n const lh =\n lineHeight === \"normal\"\n ? parseFloat(fontSize) * 1.2\n : parseFloat(lineHeight);\n\n const rowHeight =\n rows === 0\n ? 0\n : lh * rows +\n parseFloat(borderBottomWidth) +\n parseFloat(borderTopWidth) +\n parseFloat(paddingBottom) +\n parseFloat(paddingTop);\n\n const scrollHeight =\n el.scrollHeight +\n parseFloat(borderBottomWidth) +\n parseFloat(borderTopWidth);\n\n return Math.max(rowHeight, scrollHeight);\n};\n\nexport const resize = (\n rows: number,\n el: HTMLTextAreaElement | null,\n margin = 0\n): void => {\n if (el) {\n el.style.height = \"0\";\n el.style.overflowY = \"hidden\";\n el.style.height = `${getHeight(rows, el) + margin}px`;\n }\n};\n\ninterface TextAreaProps\n extends Omit, \"rows\"> {\n forwardedRef?: RefObject;\n rows?: string | number | undefined;\n value?: string;\n\n id: string;\n name: string;\n labelText: string;\n maxTextLength?: number;\n className?: string;\n placeholder?: string;\n helperText?: string;\n disabled?: boolean;\n readOnly?: boolean;\n testId?: string;\n isInvalid?: boolean;\n autoResize?: boolean;\n autoComplete?: InputHTMLAttributes[\"autoComplete\"];\n\n onChange?: (event: React.ChangeEvent) => void;\n onBlur?: (event: React.FocusEvent) => void;\n onFocus?: (event: React.FocusEvent) => void;\n\n embeddedButton?: React.FunctionComponent;\n}\n\nexport const TextArea = forwardRef(\n (props, ref) => {\n const rows = props.rows ? parseInt(\"\" + props.rows, 10) : 0;\n const heightMargin = 16;\n\n const { id, className, helperText } = props;\n const [currentValue, setCurrentValue] = useState(\"\");\n const helperTextId = useUniqueId(\"help-text-\");\n\n const inputRef = createRef();\n useEffect(() => {\n inputRef.current?.setCustomValidity(props.isInvalid ? \"Invalid\" : \"\");\n\n if (props.autoResize) {\n resize(rows, inputRef.current, heightMargin);\n }\n });\n\n // this next line is to unify the inputRef with ref. I'm not sure whether\n // we can rely on using the ref that may have been passed in to the\n // component, hence this hack\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n useImperativeHandle(ref, () => inputRef.current!);\n\n let labelClasses = styles[\"text-field-label\"];\n if (!isEmpty(props.value || currentValue)) {\n labelClasses += ` ${styles[\"text-field-label--shrink\"]}`;\n }\n\n let containerClasses = styles[\"text-field-container\"];\n if (className) {\n containerClasses += ` ${className}`;\n }\n\n const handleBlur = (e: React.FocusEvent) => {\n setCurrentValue(e.currentTarget.value);\n\n if (props.onBlur) {\n props.onBlur(e);\n }\n };\n\n const handleInput = useCallback(\n (e: FormEvent) => {\n if (props.autoResize) {\n resize(rows, inputRef.current, heightMargin);\n }\n },\n [props.autoResize, rows, inputRef]\n );\n\n return (\n
\n \n\n \n\n {props.maxLength && (\n \n {props.value?.length || 0} / {props.maxLength}\n
\n )}\n\n {!isEmpty(helperText) && (\n \n {helperText || <> }\n \n )}\n \n );\n }\n);\n","import { format, isValid, Locale } from \"date-fns\";\nimport { useLanguageContext } from \"context/user-language-context\";\nimport { getLocale } from \"features/translations/locales\";\n\nexport type FormatWidth = \"narrow\" | \"abbreviated\" | \"wide\";\n\nexport const formatWithLocale = (\n date: Date,\n formatStr: string,\n locale: Locale,\n invalidLabel = \"\"\n) => {\n\n if (!isValid(date)) return invalidLabel;\n\n return format(\n date,\n formatStr,\n locale\n ? {\n locale: locale\n }\n : {}\n );\n};\n\nexport function useFormat() {\n const { currentLang } = useLanguageContext();\n\n const currentLocale = getLocale(currentLang);\n\n const formatLocal = (date: Date, formatStr: string,\n invalidLabel = \"\") =>\n formatWithLocale(date, formatStr, currentLocale, invalidLabel);\n\n const getDaysOfWeek = (width: FormatWidth = \"narrow\") => {\n const localize = currentLocale?.localize;\n const weekdays = localize\n ? Array.from(Array(7).keys()).map(i => localize.day(i, { width }))\n : [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"];\n return weekdays;\n };\n\n return { currentLocale, formatLocal, getDaysOfWeek };\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"card_container__mPLjn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"morneau-tooltip\":\"styles_morneau-tooltip__1nJfM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inline-button\":\"styles_inline-button__1s4dP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"separator\":\"styles_separator__3VI_V\",\"back-button\":\"styles_back-button__2hZbV\",\"back-button-icon\":\"styles_back-button-icon__3E1vp\",\"tag-row\":\"styles_tag-row__30uJ4\",\"mini-header\":\"styles_mini-header__3uc8u\",\"left-and-right\":\"styles_left-and-right__1Tx08\",\"case-id-container\":\"styles_case-id-container__13jXp\",\"text-button\":\"styles_text-button__fPx-H\",\"fineprint\":\"styles_fineprint__2-7Qa\",\"page-title\":\"styles_page-title__13Ty2\",\"doc-upload\":\"styles_doc-upload__1v9Zs\",\"doc-upload-button\":\"styles_doc-upload-button__3UqJV\",\"doc-upload-button--icon\":\"styles_doc-upload-button--icon__2Fhgr\",\"doc-upload-modal\":\"styles_doc-upload-modal__2AnRU\",\"filepond--credits\":\"styles_filepond--credits__dWTUk\",\"button-link\":\"styles_button-link__1Fu3m\",\"scrollable-pane\":\"styles_scrollable-pane__3R5e2\",\"header-info-section\":\"styles_header-info-section__2gW1v\",\"flexible-decisions\":\"styles_flexible-decisions__3t-t-\",\"flexible-block\":\"styles_flexible-block__15ubw\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"leave-policy\":\"leave-policy_leave-policy__2ktSt\",\"title\":\"leave-policy_title__i0erH\",\"header\":\"leave-policy_header__14jL2\",\"remaining-time-box\":\"leave-policy_remaining-time-box__NR68S\",\"content-text\":\"leave-policy_content-text__1AQKe\",\"remaining\":\"leave-policy_remaining__v10KC\",\"label\":\"leave-policy_label__3igsJ\",\"separator\":\"leave-policy_separator__1YqY_\",\"gray-box\":\"leave-policy_gray-box__2vUxU\",\"claims-list-header\":\"leave-policy_claims-list-header__3Bhx8\",\"claims-list\":\"leave-policy_claims-list__1wxx2\",\"spinner\":\"leave-policy_spinner__20fNB\",\"empty-cases\":\"leave-policy_empty-cases__3TrLc\",\"icon\":\"leave-policy_icon__1mtsc\",\"head\":\"leave-policy_head__2qoql\",\"context\":\"leave-policy_context__3fbEB\"};","import { formatISO, parseISO } from \"date-fns\";\nimport { getParentLocaleCode } from \"features/translations/locales\";\nimport {\n AbsenceClosingScriptModel,\n AbsenceDateModelInput,\n AbsenceIncidentInputModelInput,\n CanBeALinkedIncident,\n Connect_QuestionModel,\n DropDownOptionModel,\n IncidentQuestionFieldsFragment,\n KeyValuePairOfStringAndString,\n LoadIncidentQuery,\n LocaleModel,\n Maybe,\n PageSectionModel,\n PrimaryReasonAnswerModel,\n QuestionAlertModel,\n RefStaticResourceModel,\n SaveAbsenceMutation,\n SectionQueryFragment,\n ValidationError,\n Page,\n PageSection,\n Question,\n QuestionAlert,\n DropDownOption,\n ValidationConstraint,\n Compare,\n HierarchicalOrganizationModel,\n VisibilityConditionsModel,\n WorkScheduleInfoModel,\n Ar3IvrConfigurationModel\n} from \"graphql-types.gen\";\nimport { LocaleTextEntry } from \"shared-types/api\";\nimport { hasValue } from \"utils/util\";\nimport {\n AbsenceAlert,\n AbsenceQuestionsPage,\n AbsenceQuestionsSection,\n NewEployeeQuestionsSection,\n NewEmployeeQuestion,\n DropDownOption as DropDownOptions,\n KeyValuePairOfStringAndString as KeyValuePair,\n QuestionAlert as QuestionAlerts,\n ValidationConstraint as ValidationConstraints,\n Compare as Compares,\n AnswerChoice,\n ConfigAbsenceQuestion,\n ConfigQuestionType,\n VisibilityConditions\n} from \"./absence-questions\";\nimport {\n AbsenceIncident,\n AbsenceIncidentLinkability,\n AbsenceReason,\n AbsenceReasonAnswerInfo,\n AbsenceType,\n EmployeeVerificationFields,\n OrganizationHierarchy,\n ApiValidationError,\n IncidentClosingScript,\n IncidentQuestionModel,\n QuestionResponse,\n SubAnswer,\n WorkScheduleInfo,\n localizeError,\n AR3IvrConfiguration\n} from \"./incident\";\n\nexport function parseValidationErrors(\n locale: string,\n errors?:\n | readonly Maybe<\n Pick\n >[]\n | null\n): ApiValidationError[] {\n if (!errors) return [];\n\n return errors\n .filter(hasValue)\n .map(e => {\n if (e.errorCode) {\n const err = {\n errorCode: e.errorCode,\n errorDescription: e.errorDescription,\n errorFields: e.errorFields?.filter(ef => ef).map(ef => ef ?? \"\") ?? []\n };\n return localizeError(locale, err as ApiValidationError);\n }\n return null;\n })\n .filter(hasValue);\n}\n\nexport function parseEmployeeVerificationFields(\n employeeVerificationFields:\n | readonly Maybe<\n Pick<\n Page,\n \"pageId\" | \"pageHeading\" | \"pageHeadingDescription\" | \"sections\"\n >\n >[]\n | null\n): EmployeeVerificationFields[] {\n if (!employeeVerificationFields || !employeeVerificationFields.length) {\n return [];\n } else {\n return employeeVerificationFields.filter(hasValue).map(e => ({\n pageId: e.pageId,\n pageHeading: e.pageHeading?.filter(hasValue).map(ph => ({\n locale: ph.locale || \"\",\n description: ph.description || \"\"\n })),\n pageHeadingDescription: e.pageHeadingDescription\n ?.filter(hasValue)\n .map(phd => ({\n locale: phd.locale || \"\",\n description: phd.description || \"\"\n })),\n sections: parseNewEmployeeSections(e.sections || [])\n }));\n }\n}\n\nexport function parseNewEmployeeSections(\n sections?: readonly Maybe<\n Pick<\n PageSection,\n \"questions\" | \"sectionHeading\" | \"sectionHeadingDescription\" | \"sectionId\"\n >\n >[]\n): NewEployeeQuestionsSection[] {\n if (!sections || !sections.length) {\n return [];\n }\n\n return sections.filter(hasValue).map(s => ({\n sectionId: s.sectionId,\n sectionHeading: s.sectionHeading?.filter(hasValue).map(sh => ({\n locale: sh.locale || \"\",\n description: sh.description || \"\"\n })),\n sectionHeadingDescription: s.sectionHeadingDescription\n ?.filter(hasValue)\n .map(shd => ({\n locale: shd.locale || \"\",\n description: shd.description || \"\"\n })),\n questions: parseQuestion(s.questions || [])\n }));\n}\n\nexport function parseQuestion(\n questions: readonly Maybe[]\n): NewEmployeeQuestion[] {\n if (!questions || !questions.length) {\n return [];\n }\n\n return questions.filter(hasValue).map(q => ({\n name: q.name,\n label: q.label?.filter(hasValue).map(l => ({\n locale: l.locale || \"\",\n description: l.description || \"\"\n })),\n questionType: q.questionType,\n longDescription: q.longDescription?.filter(hasValue).map(ld => ({\n locale: ld.locale || \"\",\n description: ld.description || \"\"\n })),\n placeholder: q.placeholder?.filter(hasValue).map(p => ({\n locale: p.locale || \"\",\n description: p.description || \"\"\n })),\n source: q.source,\n defaultValue: q.defaultValue,\n reloadIncidentData: q.reloadIncidentData,\n resolvedValue: q.resolvedValue,\n isVisible: q.isVisible,\n isReadOnly: q.isReadOnly,\n options: parseOptions(q.options || []),\n validationConstraint: parseValidationConstraint(q.validationConstraint),\n visibilityConditions: parseVisibilityConditions(q.visibilityConditions),\n alerts: parseQuestionAlerts(q.alerts || []),\n config: q.config\n }));\n}\n\nexport function parseValidationConstraint(\n validationConstraint?: Maybe\n): ValidationConstraints {\n return {\n compare: parseCompare(validationConstraint?.compare),\n digits: validationConstraint?.digits,\n required: validationConstraint?.required || null,\n min: validationConstraint?.min,\n max: validationConstraint?.max,\n number: validationConstraint?.number\n };\n}\n\nexport function parseCompare(compare?: Maybe): Compares {\n return {\n fieldToCompare: compare?.fieldToCompare,\n operator: compare?.operator,\n valueToCompare: compare?.valueToCompare\n };\n}\n\nexport function parseQuestionAlerts(\n alerts?: readonly Maybe[]\n): QuestionAlerts[] {\n if (!alerts || !alerts.length) {\n return [];\n }\n\n return alerts.filter(hasValue).map(a => ({\n alertId: a.alertId,\n alertLevel: a.alertLevel,\n alertText: a.alertText?.filter(hasValue).map(at => ({\n locale: at.locale || \"\",\n description: at.description || \"\"\n }))\n }));\n}\n\nexport function parseOptions(\n options?: readonly Maybe[]\n): DropDownOptions[] {\n if (!options || !options.length) {\n return [];\n }\n\n return options.filter(hasValue).map(o => ({\n value: o.value,\n text: o.text?.filter(hasValue).map(t => ({\n locale: t.locale || \"\",\n description: t.description || \"\"\n })),\n metadata: parseMetaData(o.metadata || [])\n }));\n}\n\nexport function parseMetaData(\n metadata?: readonly Maybe[]\n): KeyValuePair[] {\n if (!metadata || !metadata.length) {\n return [];\n }\n\n return metadata.filter(hasValue).map(m => ({\n key: m.key,\n value: m.value\n }));\n}\n\nexport function parseOrganizationHierarchy(\n organizationHierarchy?:\n | readonly Maybe<\n Pick<\n HierarchicalOrganizationModel,\n \"organizationId\" | \"organizationLevel\" | \"organizationName\"\n > & {\n readonly childOrganizations?:\n | readonly Maybe<\n Pick<\n HierarchicalOrganizationModel,\n \"organizationId\" | \"organizationLevel\" | \"organizationName\"\n >\n >[]\n | null;\n }\n >[]\n | null\n): OrganizationHierarchy[] {\n if (!organizationHierarchy || !organizationHierarchy.length) {\n return [];\n }\n\n return organizationHierarchy.filter(hasValue).map(o => ({\n organizationId: o.organizationId,\n organizationLevel: o.organizationLevel,\n organizationName: o.organizationName,\n childOrganizations: o.childOrganizations?.map(c => ({\n organizationId: c?.organizationId ?? 0,\n organizationLevel: c?.organizationLevel ?? 0,\n organizationName: c?.organizationName ?? \"\"\n }))\n }));\n}\n\nexport function parseQuestionReturnModel(\n data: IncidentQuestionFieldsFragment | undefined\n): IncidentQuestionModel {\n if (data) {\n return {\n questions: parseSectionQueryFragment(data.questions),\n preQualifyingQuestions: parseSectionQueryFragment(\n data.preQualifyingQuestions\n ),\n reasonOfAbsenceAlerts: parseAlerts(data.reasonOfAbsenceAlerts)\n };\n } else {\n return {\n questions: [],\n preQualifyingQuestions: [],\n reasonOfAbsenceAlerts: []\n };\n }\n}\n\nexport function parseSectionQueryFragment(\n questions?: readonly Maybe[] | null\n): AbsenceQuestionsPage[] {\n if (!questions) return [];\n\n return questions\n .filter(hasValue)\n .map(q => {\n if (q.pageId && q.pageHeading && q.pageHeadingDescription && q.sections) {\n return {\n pageId: q.pageId,\n pageHeading: parseLocaleModel(q.pageHeading),\n pageHeadingDescription: parseLocaleModel(q.pageHeadingDescription),\n sections: parseSections(q.sections)\n };\n }\n return null;\n })\n .filter(hasValue);\n}\n\nexport function parseSections(\n sections: readonly Maybe<\n Pick<\n PageSectionModel,\n \"questions\" | \"sectionHeading\" | \"sectionHeadingDescription\" | \"sectionId\"\n >\n >[]\n): AbsenceQuestionsSection[] {\n if (!sections) return [];\n\n return sections\n .filter(hasValue)\n .map(s => {\n if (\n s.questions &&\n s.sectionHeading &&\n s.sectionHeadingDescription &&\n s.sectionId\n ) {\n return {\n questions: parseQuestionModel(s.questions),\n sectionHeading: parseLocaleModel(s.sectionHeading),\n sectionHeadingDescription: parseLocaleModel(\n s.sectionHeadingDescription\n ),\n sectionId: s.sectionId\n };\n }\n\n return null;\n })\n .filter(hasValue);\n}\n\nexport function parseQuestionModel(\n questions: readonly Maybe[]\n): ConfigAbsenceQuestion[] {\n if (!questions) return [];\n return questions\n .filter(hasValue)\n .map(q => {\n if (q.name && q.label && q.questionType) {\n const parsedConfigQuestionType = parseConfigQuestionType(\n q.questionType\n );\n const parsedAnswerChoices = parseAnswerChoices(q.options);\n\n return {\n name: q.name,\n label: parseLocaleModel(q.label),\n questionType: parsedConfigQuestionType,\n longDescription: q.longDescription\n ? parseLocaleModel(q.longDescription)\n : undefined,\n placeholder: q.placeholder\n ? parseLocaleModel(q.placeholder)\n : undefined,\n source: q.source,\n defaultValue: parseDefaultValue(\n parsedConfigQuestionType,\n parsedAnswerChoices,\n q.defaultValue\n ),\n resolvedValue: q.resolvedValue,\n isVisible: q.isVisible,\n isReadOnly: q.isReadOnly,\n options: parsedAnswerChoices,\n validationConstraint: q.validationConstraint,\n visibilityConditions: parseVisibilityConditions(\n q.visibilityConditions\n ),\n alerts: parseAlerts(q.alerts),\n config: q.config\n } as ConfigAbsenceQuestion;\n }\n return null;\n })\n .filter(hasValue);\n}\n\nfunction parseDefaultValue(\n questionType: ConfigQuestionType,\n options: AnswerChoice[],\n defaultValue?: string | null\n): string | undefined | null {\n if (questionType === \"dropdown\" && defaultValue !== undefined) {\n if (options.some(option => option.value === defaultValue)) {\n return defaultValue;\n }\n\n return undefined;\n }\n\n return defaultValue;\n}\n\nexport function parseAlerts(\n alerts?: readonly Maybe[] | null\n): AbsenceAlert[] {\n if (!alerts) return [];\n return alerts\n .filter(hasValue)\n .map(a => {\n if (a.alertId && a.alertText) {\n return {\n alertId: a.alertId,\n alertLevel: a.alertLevel,\n alertText: parseLocaleModel(a.alertText)\n } as AbsenceAlert;\n }\n return null;\n })\n .filter(hasValue);\n}\n\nexport function parseVisibilityConditions(\n conditions?: readonly Maybe[] | null\n): VisibilityConditions[] {\n if (!conditions) return [];\n return conditions\n .filter(hasValue)\n .map(cond => {\n if (cond.id && cond.operator && cond.values) {\n return {\n id: cond.id,\n operator: cond.operator,\n values: [...cond.values]\n } as VisibilityConditions;\n }\n return null;\n })\n .filter(hasValue);\n}\n\nexport function parseAnswerChoices(\n options?: readonly Maybe[] | null\n): AnswerChoice[] {\n if (!options) return [];\n return options\n .filter(hasValue)\n .map(o => {\n if (o.text && o.value) {\n return {\n text: parseLocaleModel(o.text),\n value: o.value\n } as AnswerChoice;\n }\n return null;\n })\n .filter(hasValue);\n}\n\nexport function parseConfigQuestionType(type: string): ConfigQuestionType {\n switch (type) {\n case \"textArea\":\n return \"textArea\";\n case \"card\":\n return \"card\";\n case \"dropdown\":\n return \"dropdown\";\n case \"date\":\n return \"date\";\n case \"boolean\":\n return \"boolean\";\n case \"numeric\":\n return \"numeric\";\n case \"phone\":\n return \"phone\";\n case \"email\":\n return \"email\";\n case \"text\":\n default:\n return \"text\";\n }\n}\n\nexport function parseLocaleModel(\n localeModel: readonly Maybe>[]\n): LocaleTextEntry[] {\n if (!localeModel) return [];\n return localeModel.filter(hasValue).map(lm => ({\n description: lm.description as string,\n locale: lm.locale as string\n }));\n}\n\ntype SaveAbsenceIncidentResultModel = NonNullable<\n NonNullable<\n NonNullable[\"returnValue\"]\n >[\"absenceIncidentModel\"]\n>;\n\ntype LoadedAbsenceIncidentResultModel = NonNullable<\n LoadIncidentQuery[\"absenceIncident\"]\n>;\n\nexport function parseAbsenceIncident(\n data: SaveAbsenceIncidentResultModel\n): AbsenceIncident {\n const absenceDates =\n data.absenceDates?.filter(hasValue).map(date => ({\n isPartialAbsence: date.isPartialAbsence ?? false,\n shiftStartTime: parseISO(date.shiftStartTime),\n shiftEndTime: parseISO(date.shiftEndTime),\n scheduledShiftStartTime: date.scheduledShiftStartTime\n ? parseISO(date.scheduledShiftStartTime)\n : undefined,\n scheduledShiftEndTime: date.scheduledShiftEndTime\n ? parseISO(date.scheduledShiftEndTime)\n : undefined\n })) ?? [];\n\n return {\n primaryReason: data.primaryReason,\n secondaryReason: data.secondaryReason,\n absenceDates,\n absenceIncidentId: data.absenceIncidentId,\n bestPhoneNumber: data.bestPhoneNumber ?? undefined,\n firstName: data.firstName ?? undefined,\n lastName: data.lastName ?? undefined,\n employeeNumber: data.employeeNumber ?? undefined,\n clientCode:\n !data.clientCode || data.clientCode === \"\" ? undefined : data.clientCode,\n requestDate: data.requestDate ? parseISO(data.requestDate) : undefined,\n returnToWorkDate: data.returnToWorkDate\n ? parseISO(data.returnToWorkDate)\n : undefined,\n absenceType: getAbsenceType(data.absenceType),\n linkability: parseAbsenceIncidentLinkability(\n data.CanBeALinkedIncident,\n data.linkedIncident ?? undefined\n ),\n questionResponses: getQuestionResponses(data.questionResponses),\n maxDaysAllowed: data.maxDaysAllowed,\n maxReportableDays: data.maxReportableDays\n };\n}\n\nexport function parseLoadedAbsenceIncident(\n data: LoadedAbsenceIncidentResultModel\n): AbsenceIncident {\n const absenceDates =\n data.absenceDates?.filter(hasValue).map(date => ({\n isPartialAbsence: date.isPartialAbsence ?? false,\n shiftStartTime: parseISO(date.shiftStartTime),\n shiftEndTime: parseISO(date.shiftEndTime),\n scheduledShiftStartTime: date.scheduledShiftStartTime\n ? parseISO(date.scheduledShiftStartTime)\n : undefined,\n scheduledShiftEndTime: date.scheduledShiftEndTime\n ? parseISO(date.scheduledShiftEndTime)\n : undefined\n })) ?? [];\n\n return {\n primaryReason: data.primaryReason,\n secondaryReason: data.secondaryReason,\n absenceDates,\n absenceIncidentId: data.absenceIncidentId,\n bestPhoneNumber: data.bestPhoneNumber ?? undefined,\n firstName: data.firstName ?? undefined,\n lastName: data.lastName ?? undefined,\n employeeNumber: data.employeeNumber ?? undefined,\n clientCode:\n !data.clientCode || data.clientCode === \"\" ? undefined : data.clientCode,\n requestDate: data.requestDate ? parseISO(data.requestDate) : undefined,\n returnToWorkDate: data.returnToWorkDate\n ? parseISO(data.returnToWorkDate)\n : undefined,\n absenceType: getAbsenceType(data.absenceType),\n linkability: parseAbsenceIncidentLinkability(\n data.CanBeALinkedIncident,\n data.linkedIncident ?? undefined\n ),\n questionResponses: getQuestionResponses(data.questionResponses),\n claimStatus: data.claimStatus ?? undefined,\n maxDaysAllowed: data.maxDaysAllowed,\n maxReportableDays: data.maxReportableDays\n };\n}\n\nexport function parseWorkScheduleInfo(\n data?: WorkScheduleInfoModel | null\n): WorkScheduleInfo {\n if (data) {\n return {\n scheduleOverrideWarning: data?.warnWhenOverridingSchedule ?? false,\n warningMessages: parseLocaleModel(data?.warningMessages ?? [])\n };\n }\n return {\n scheduleOverrideWarning: false,\n warningMessages: []\n };\n}\n\nexport function parseAR3IVRConfiguration(\n data?: Ar3IvrConfigurationModel | null\n): AR3IvrConfiguration {\n if (data) {\n return {\n maxShiftLengthThresholdInMinutes:\n data?.maxShiftLengthThresholdInMinutes ?? 0\n };\n }\n return {\n maxShiftLengthThresholdInMinutes: 0\n };\n}\n\nfunction parseAbsenceIncidentLinkability(\n canBeALinkedIncident:\n | Maybe<\n Pick<\n CanBeALinkedIncident,\n \"canBeLinked\" | \"latestDate\" | \"totalNoOfDaysReportedExcludingCurrent\"\n >\n >\n | undefined,\n isLinked: boolean | undefined\n): AbsenceIncidentLinkability {\n if (!hasValue(canBeALinkedIncident)) {\n return { canBeLinked: undefined };\n }\n\n if (!canBeALinkedIncident.canBeLinked) {\n return { canBeLinked: false };\n }\n\n return {\n canBeLinked: canBeALinkedIncident.canBeLinked,\n latestDate: parseISO(canBeALinkedIncident.latestDate),\n totalNoOfDaysReportedExcludingCurrent:\n canBeALinkedIncident.totalNoOfDaysReportedExcludingCurrent,\n isLinked\n };\n}\n\nexport function getAbsenceType(type?: string | null): AbsenceType | undefined {\n switch (type) {\n case \"continuous\":\n return \"continuous\";\n case \"intermittent\":\n return \"intermittent\";\n default:\n return;\n }\n}\n\nexport function getQuestionResponses(\n responses?:\n | readonly Pick[]\n | null\n): QuestionResponse[] {\n if (responses) {\n return responses.map(\n r => ({ key: r.key, value: r.value } as QuestionResponse)\n );\n }\n return [];\n}\n\nexport function parseReasonOfAbsence(\n reasonOfAbsence?: Maybe<{\n readonly answers?: Maybe<\n ReadonlyArray<\n Maybe<\n Pick<\n PrimaryReasonAnswerModel,\n | \"answerId\"\n | \"maxDaysAllowed\"\n | \"reportableDaysInFuture\"\n | \"reportableDaysInPast\"\n > & {\n readonly locales?: Maybe<\n ReadonlyArray>>\n >;\n readonly iconResource?: Maybe<\n Pick\n >;\n readonly subAnswers?: Maybe<\n ReadonlyArray<\n Maybe<\n Pick<\n PrimaryReasonAnswerModel,\n | \"answerId\"\n | \"reportableDaysInFuture\"\n | \"reportableDaysInPast\"\n > & {\n readonly locales?: Maybe<\n ReadonlyArray<\n Maybe>\n >\n >;\n }\n >\n >\n >;\n }\n >\n >\n >;\n }> | null\n): AbsenceReason {\n if (!reasonOfAbsence || !reasonOfAbsence.answers) return { answers: [] };\n return {\n answers: reasonOfAbsence.answers\n .filter(hasValue)\n .map(a => {\n if (a.locales) {\n return {\n answerId: a.answerId,\n locales: parseLocaleModel(a.locales),\n maxDaysAllowed: a.maxDaysAllowed,\n reportableDaysInFuture: a.reportableDaysInFuture,\n reportableDaysInPast: a.reportableDaysInPast,\n subAnswers: parseSubAnswers(a.subAnswers),\n imageUrl: a.iconResource?.sourceUrl\n } as AbsenceReasonAnswerInfo;\n }\n return null;\n })\n .filter(hasValue)\n };\n}\n\nexport function parseSubAnswers(\n subAnswers?:\n | readonly Maybe<\n Pick<\n PrimaryReasonAnswerModel,\n \"answerId\" | \"reportableDaysInFuture\" | \"reportableDaysInPast\"\n > & {\n locales?:\n | readonly Maybe>[]\n | null;\n }\n >[]\n | null\n): SubAnswer[] {\n if (!subAnswers) return [];\n\n return subAnswers\n .filter(hasValue)\n .map(\n ({ locales, answerId, reportableDaysInFuture, reportableDaysInPast }) => {\n if (locales) {\n return {\n locales,\n answerId,\n reportableDaysInFuture,\n reportableDaysInPast\n } as SubAnswer;\n }\n return null;\n }\n )\n .filter(hasValue);\n}\n\nexport function parseClosingScripts(\n scripts?:\n | readonly Maybe<\n Pick & {\n readonly text?:\n | readonly Maybe>[]\n | null\n | undefined;\n }\n >[]\n | null\n): IncidentClosingScript[] {\n if (!scripts) return [];\n return scripts\n .filter(hasValue)\n .map(s => {\n if (s.text) {\n return {\n closingScriptId: s.closingScriptId,\n text: parseLocaleModel(s.text)\n } as IncidentClosingScript;\n }\n\n return null;\n })\n .filter(hasValue);\n}\n\nexport function toAbsenceIncidentInputModelInput(\n incident: AbsenceIncident,\n locale: string\n): AbsenceIncidentInputModelInput {\n return {\n absenceIncidentId: incident.absenceIncidentId,\n absenceType: incident.absenceType,\n bestPhoneNumber: incident.bestPhoneNumber,\n employeeNumber: incident.employeeNumber,\n firstName: incident.firstName,\n lastName: incident.lastName,\n linkedIncident:\n incident.linkability.canBeLinked && incident.linkability.isLinked,\n primaryReason: incident.primaryReason,\n secondaryReason: incident.secondaryReason,\n questionResponses: incident.questionResponses,\n requestDate: incident.requestDate && formatISO(incident.requestDate),\n returnToWorkDate:\n incident.returnToWorkDate && formatISO(incident.returnToWorkDate),\n reportingLocale: getParentLocaleCode(locale),\n absenceDates: incident.absenceDates?.map(date => ({\n isPartialAbsence: date.isPartialAbsence,\n shiftStartTime: date.shiftStartTime && formatISO(date.shiftStartTime),\n shiftEndTime: date.shiftEndTime && formatISO(date.shiftEndTime),\n scheduledShiftStartTime:\n date.scheduledShiftStartTime && formatISO(date.scheduledShiftStartTime),\n scheduledShiftEndTime:\n date.scheduledShiftEndTime && formatISO(date.scheduledShiftEndTime)\n }))\n };\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button-link\":\"styles_button-link__37NFc\",\"layout\":\"styles_layout__2Tcd8\",\"menu\":\"styles_menu__12B8r\",\"menu-open\":\"styles_menu-open__34m5X\",\"cover\":\"styles_cover__TLstT\",\"cover-visible\":\"styles_cover-visible__3cN5M\",\"close-button\":\"styles_close-button__2OkM8\",\"top-navbar\":\"styles_top-navbar__1XvWo\",\"top-navbar-with-border\":\"styles_top-navbar-with-border__18TvR\",\"content\":\"styles_content__3XHtD\",\"nav-content\":\"styles_nav-content__J5PMH\",\"nav-links\":\"styles_nav-links__19-ed\",\"current-route\":\"styles_current-route__1xtb1\",\"nav-icon\":\"styles_nav-icon__1Qmxn\",\"logo\":\"styles_logo__1RElK\",\"flex-wrapper\":\"styles_flex-wrapper__16XYm\",\"primary-action-button\":\"styles_primary-action-button__1gSPc\",\"main\":\"styles_main__3dfPL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"visible\":\"claims-list_visible__3R5bb\",\"invisible\":\"claims-list_invisible__2fSHO\",\"tag-filter-row\":\"claims-list_tag-filter-row__1qslm\",\"card-list\":\"claims-list_card-list__1D3-D\",\"claim-card\":\"claims-list_claim-card__1Q0xx\",\"page-title\":\"claims-list_page-title__2aKtS\",\"empty-cases\":\"claims-list_empty-cases__6VJBp\",\"icon\":\"claims-list_icon__1Jj6B\",\"head\":\"claims-list_head__1DqEM\",\"context\":\"claims-list_context__1CZo3\"};","import { SupportedLanguage } from \"features/translations/locales\";\nimport { TranslationSet } from \"features/translations/translation-model\";\n\nexport type AppContextEnv = \"sandbox\" | \"development\" | \"qa\" | \"production\";\n\nexport class AppContext {\n private static _instance: AppContext;\n\n private appEnv: string = process.env.REACT_APP_ENV || process.env.NODE_ENV;\n\n private translations: TranslationSet = new TranslationSet(\n SupportedLanguage.EnglishCA,\n new Map()\n );\n\n static setSandbox = () => AppContext.setEnvironment(\"sandbox\");\n\n static setEnvironment = (env: AppContextEnv) => {\n AppContext.get().appEnv = env;\n };\n\n private static get(): AppContext {\n if (!AppContext._instance) AppContext._instance = new AppContext();\n return AppContext._instance;\n }\n\n static env = () => AppContext.get().appEnv;\n\n static isSandbox = () => AppContext.env() === \"sandbox\";\n\n static setTranslations = (t: TranslationSet) => {\n AppContext.get().translations = t;\n };\n\n static getTranslations = () => AppContext.get().translations;\n}\n"],"sourceRoot":""}