{"version":3,"sources":["common/context/auth/token-cookie.ts","common/utils/cookie.ts","common/api-client/rest.ts","features/budget/budget.constants.js","features/budget/wizard/state/wizard-assignment.actions.js","features/budget/wizard/state/wizard.selectors.js","common/routes/sections/roles.sections.js","common/assets/logo.svg","common/proptypes/section.proptypes.js","common/layout/sidebar/sidebar.styles.js","common/layout/sidebar/sidebar.component.jsx","common/layout/sidebar/sidebar.container.jsx","common/assets/step-number.jsx","features/budget/wizard/views/stepper/stepper.styles.js","features/budget/wizard/views/stepper/budget-steps.component.jsx","features/budget/wizard/state/finish/finish-scenario.hooks.js","features/budget/wizard/views/loading-backdrop/loading-backdrop.styles.js","features/budget/wizard/views/loading-backdrop/loading-backdrop.component.jsx","features/budget/wizard/views/loading-backdrop/loading-backdrop.container.jsx","features/budget/wizard/views/stepper/stepper.component.jsx","common/layout/header/clock/clock.component.jsx","common/layout/header/header-title.styles.js","common/layout/header/header-title.component.jsx","common/layout/header/header-title.container.jsx","common/layout/header/header.styles.js","common/layout/header/header.component.jsx","common/layout/header/header.container.jsx","common/layout/layout.styles.js","common/layout/layout.component.jsx","common/routes/protected-app.routes.jsx","common/app/protected-app.component.jsx","common/assets/logo-long.png","common/assets/login-image.png","features/login-screen/login.styles.js","features/login-screen/header.component.jsx","features/login-screen/login-form/views/login-form.fallback.jsx","common/assets/microsoft-icon.svg","features/login-screen/login-form/views/login-form.styles.js","features/login-screen/login-form/user-id-form/views/user-id-form.component.jsx","features/login-screen/login-form/user-id-form/state/user-id-form.validation.js","features/login-screen/login-form/password-form/views/password-form.component.jsx","features/login-screen/login-form/password-form/state/password-form.validation.js","features/login-screen/login-form/views/login-form.component.jsx","features/login-screen/main-panel.component.jsx","features/login-screen/demo-panel.component.jsx","features/login-screen/footer.component.jsx","features/login-screen/login.component.jsx","features/login-screen/login.container.jsx","common/app/app.component.tsx","features/budget/accounts/rdx/accounts-rdx.reducer.js","features/budget/wizard/state/wizard.reducer.js","features/budget/owners/rdx/owners.reducer.js","features/budget/company-structure/rdx/company-structure-rdx.reducer.js","features/budget/templates/rdx/template.reducer.js","features/coordinator-user/state/coordinator-user.reducer.js","common/utils/tree/get-all-nodes-count.ts","features/budget/wizard/state/wizard-assignment.reducer.js","features/overview-budget/rdx/scenario-details.reducer.js","common/rdx/feedback/feedback.reducer.js","common/rdx/root.reducer.js","common/rdx/store.config.js","common/context/auth/msal/navigation-client.ts","common/context/auth/msal/msal-context.tsx","common/context/app-providers.jsx","index.jsx","common/context/auth/roles.ts","common/context/auth/token-validation.ts","common/context/auth/submit-login-request.ts","common/context/auth/msal/msal-login-popup.ts","common/utils/storage/idb-stores.js","common/context/auth/msal/msal-acquire-token-popup.ts","common/context/auth/msal/msal-login-request.ts","common/context/auth/auth-context.tsx","features/workforce/workforce-sections.js","features/overview/state/overview.sections.js","common/constants/config-error-messages.constants.js","common/hooks/fetch/fetch.reducer.js","common/constants/budget-status.constants.js","common/proptypes/react.proptypes.js","common/hooks/fetch/fetch.constants.js","common/assets/logo-long-small.png","common/components/full-page/full-page-spinner.tsx","common/config/app-version.config.js","features/coordinator-user/state/coordinator-user.actions.js","common/utils/user-data.js","common/assets/summarize-icon.svg","common/routes/sections/main.sections.jsx","common/context/auth/get-authentication-type.ts","features/coordinator-user/state/user.sections.js","common/rdx/feedback/feedback.actions.js","common/proptypes/react-redux.proptypes.js","common/proptypes/react-children.proptypes.js","features/budget/workforce/views/employee-data-tab/state/undo-redo-utils.ts","features/budget/owners/rdx/owners.actions.js","features/budget/wizard/state/wizard.storage.js","features/budget/workforce/views/employee-data-tab/state/use-save-employee-allocation.js","features/budget/accounts/rdx/accounts.actions.js","common/hooks/use-promise.ts","common/components/full-page/full-page-error-fallback.tsx","common/routes/sections/all.sections.js","common/routes/sections/sections.hooks.js","common/utils/storage/local-storage.js","features/budget/templates/state/template.storage.js","features/overview-budget/state/budget.utils.js","common/rdx/reducer-status.constants.js","common/utils/is-ms-legacy.js","features/budget/budget.sections.js","features/budget/company-structure/rdx/company-structure.actions.js","common/api-client/api-client.ts","features/budget/wizard/state/wizard.hooks.js","common/hooks/fetch/fetch-manual.hooks.js","features/budget/schedules/state/schedules.storage.js","features/budget/company-structure/state/company-structure.storage.js","features/budget/start/state/meta.storage.js","common/error-boundary/error-boundary.component.jsx","common/components/form-fields/input/input.styles.js","common/components/form-fields/input/input.component.jsx","common/components/form-fields/input/input.container.jsx","features/budget/owners/state/owners.storage.js","features/budget/templates/state/template.constants.js","common/components/form-fields/utils/are-equal.js","common/constants/token-error.constants.js","common/components/fallbacks/error-message.styles.js","common/components/fallbacks/error-message.component.jsx","features/budget/templates/rdx/template.actions.js","features/overview-budget/rdx/scenario-details.actions.js","common/components/form-fields/password.styles.js","common/components/form-fields/password.component.jsx","common/utils/storage/session-storage.js","common/assets/progress-clock.jsx","common/context/toast/toast.jsx","common/context/toast/toast-styles.js","common/context/toast/details-toast-styles.js","common/context/toast/details-toast.jsx","common/context/toast/toast-context.jsx","features/budget/wizard/state/wizard.actions.js","common/utils/storage/idb.js","common/themes/default.theme.js","features/budget/wizard/state/stepper.data.js","common/utils/storage/legacy-storage.js","common/config/api-url.config.js"],"names":["TOKEN_COOKIE","hasTokenCookie","cookieName","document","cookie","split","some","item","trim","startsWith","getTokenCookie","token","find","row","getCookie","setTokenCookie","value","cookieValue","options","undefined","deleteTokenCookie","Date","toUTCString","getFetchInput","endpoint","baseURL","endsWith","slice","isRequestInitBody","body","ReadableStream","Blob","ArrayBuffer","isView","FormData","URLSearchParams","getFetchInit","customConfig","method","headers","JSON","stringify","getInitBody","getHeadersObject","entries","reduce","accumulator","key","getErrorBodyMessage","getMessageFromErrorResponse","message","error","Error","getRestErrorBuilder","url","request","response","omit","object","keys","Object","filter","includes","toLowerCase","errorObject","status","emptyRestError","kind","restErrorWithBody","readResponseBody","restErrorBuilder","readResponseMethod","a","clone","isEmptyResponse","get","responseAsTextResult","length","getResponseBody","contentType","handleUnauthorizedResponse","onUnauthorized","logoutResult","handleNotSuccessfulResponse","isEmptyResponseResult","bodyResult","handleSuccessfulResponse","emptyResponse","freeze","responseWithBody","rest","globalThis","location","origin","input","init","fetch","then","ok","BUDGET_STORE","DUE_DATES_STORE","TEMPLATES_STORE","ASSUMPTIONS_STORE","BUDGET_IDX_KEYPATH","BUDGET_IDX_NAME","CURRENT_BUDGET","NEW_PREFIX","IS_WORKFORCE_SCENARIO","START_KEY","ACCOUNTS_KEY","COMPANY_STRUCTURE_KEY","ASSUMPTION_KEY","SCHEDULES_KEY","TEMPLATES_KEY","WORKFORCE_KEY","OWNERS_KEY","UNDO","CURRENT","REDO","UNDO_ALLOCATED","REDO_ALLOCATED","UNDO_UNALLOCATED","REDO_UNALLOCATED","CHANGE_ASSIGNMENT_MODAL_OPEN","CHANGE_ASSIGNEE_ID","CHANGE_ASSIGNER_ID","CHANGE_PARENTS_MAP","CHANGE_ROOT_NODE","ADD_ASSIGNMENTS","SET_ASSIGNMENTS","CHANGE_ITEMS_LIST","REMOVE_ASSIGNMENT","RESET_ASSIGNMENTS","changeAssignmentModalOpen","open","type","payload","changeAssigneeId","id","changeAssignerId","changeParentsMap","parentsMap","changeRootNode","node","addAssignments","assignments","setAssignments","changeItemsList","list","removeAssignment","resetAssignments","getScenarioName","state","budget","scenarioName","getValid","isValid","getSubmitting","isSubmitting","getRequestingNext","isRequestingNext","getFetching","isFetching","getCallingNextCallback","isCallingNextCallback","ADMINISTRATOR_SECTIONS","SECTION_BUDGET_SETTINGS","SECTION_USERS","COORDINATOR_SECTIONS","SECTION_BUDGET","SECTION_OVERVIEW","SECTION_WORKFORCE_SETTINGS","SECTION_ANALYSIS","OWNER_SECTIONS","HR_COORDINATOR_SECTIONS","SECTION_EMPLOYEE_MANAGEMENT","PropTypes","shape","string","path","isRequired","params","title","subtitle","withStepper","bool","withDate","menuText","menuIcon","componentType","step","number","sidebarStyle","theme","sidebarWidth","appDefaults","headerHeight","footerHeight","sidebar","height","display","flexDirection","alignItems","justifyContent","padding","spacing","borderTop","palette","divider","breakpoints","up","content","menu","drawerPaper","overflowX","zIndex","drawerAnchorLeft","maxWidth","logoContainer","margin","borderBottom","width","nav","flexFlow","paddingTop","paddingBottom","fontSize","typography","pxToRem","link","color","text","primary","textDecoration","textAlign","active","main","fill","profile","cursor","toolbar","useStyles","makeStyles","NavItem","handleClick","onClick","isActive","classes","ListItem","button","className","clsx","ListItemIcon","Typography","variant","gutterBottom","Sidebar","toggleDrawer","isPhone","drawerOpen","setDrawerOpen","sections","handleStartClick","imageUrl","initials","anchorEl","handleClose","handleLogout","match","useRouteMatch","useLocation","React","menuAnchorElement","setMenuAnchorElement","handleOpenMenu","event","currentTarget","handleCloseMenu","IconButton","edge","Drawer","anchor","onClose","paper","paperAnchorDockedLeft","Hidden","xsDown","to","src","logo","alt","List","component","map","section","menuItems","pathname","keepMounted","Boolean","menuItem","activeClassName","exact","MenuItem","Avatar","avatar","sizes","appVersion","Divider","defaultProps","SidebarContainer","role","useAuth","logout","user","userRole","roles","dispatch","useDispatch","useTheme","useMediaQuery","down","useState","setAnchorEl","ADMINISTRATOR_ROLE","BUDGET_COORDINATOR_ROLE","BUDGET_OWNER_ROLE","HR_COORDINATOR_ROLE","getUser","name","names","removeLocalStorageItem","changeScenarioName","StepNumber","focusable","viewBox","cx","cy","r","x","y","textAnchor","stepperStyles","stepper","background","flex","flexWrap","alignContent","fontWeight","steps","buttonsContainer","minWidth","buttonsContainerBig","hidden","visibility","bigButton","BudgetSteps","activeStep","isLargeScreen","stepperRef","useRef","linkStep","BUDGET_STEPS_ROUTES","LinkComponent","forwardRef","props","ref","displayName","handleExpandClick","current","handleMenuItemClick","Stepper","connector","Step","StepButton","Tooltip","tooltip","placement","caption","selected","disabled","ListItemText","useFinishScenario","useReducer","responseReducer","initialState","loading","post","usePost","getLocalStorageItem","getCompanyStructure","companyStructure","getOwnerAssignments","ownerAssignments","templateOrganizations","organizationId","userTemplates","userId","ownersBody","budgetScenarioId","finishBody","Number","PENDING","REJECTED","FULFILLED","finishScenario","loadingBackdropStyles","backdrop","drawer","uppercaseText","textTransform","action","marginRight","closeAction","LoadingBackdrop","success","CircularProgress","setOpen","history","useHistory","useEffect","redirectToOverview","push","OVERVIEW_URL","currentBudget","clearScenarioLevelAssumptions","clearTemplates","clearDueDates","isMSLegacy","LEGACY_deleteBudget","deleteBudget","timeoutID","setTimeout","clearTimeout","afterSuccess","Backdrop","timeout","toastDispatch","useToastDispatch","data","dispatchRdx","useSelector","useStep","json","errorMessage","TOKEN_ERROR","redirectToLogin","showWarningToast","showErrorToast","handleFinishError","backDisabled","nextDisabled","useMemo","backButtonContent","nextButtonContent","backContent","nextContent","Button","size","prevStep","isWorkforceScenario","removeAllSessionStorageForUndoRedo","changeRequestingNext","dateOptions","weekday","year","month","day","hour","minute","getDateString","toLocaleDateString","Clock","date","setDate","rAFId","isSubscribed","window","requestAnimationFrame","rAFCallback","cancelAnimationFrame","headerTitleStyle","titleWrapper","textOverflow","overflow","whiteSpace","common","white","HeaderTitle","backTo","budgetRegexp","RegExp","BUDGET_URL","preparerRegexp","OVERVIEW_BUDGET","test","headerStyle","header","boxSizing","lineHeight","flexRow","Header","useSection","layoutStyles","wrapper","Layout","children","BudgetSettings","lazy","Overview","Budget","CoordinatorUser","WorkforceSettings","EmployeeManagement","Analysis","ProtectedAppRoutes","routes","strict","fallback","ProtectedApp","loginStyles","gridTemplate","gridArea","paddingLeft","mainPanel","minHeight","backgroundColor","fallBack","demoPanel","loginImage","backgroundPosition","backgroundSize","backgroundRepeat","paddingRight","demoText","demoButton","corporateGreen","dark","marginTop","footer","textGroup","centeredText","smallText","letterSpacing","bold","logoLong","LoginFallback","_path","_path2","_path3","_path4","_excluded","_extends","assign","target","i","arguments","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgMicrosoftIcon","_ref","svgRef","titleId","xmlns","d","transform","ForwardRef","loginFormStyles","msSignIn","marginBottom","msSignInButton","form","flexGrow","field","borderBottomColor","backButton","grey","UserIdForm","useFormikContext","label","fullWidth","userIdSchema","ensure","required","PasswordForm","handleBackClick","onBackClick","values","setErrors","setFieldValue","autoFocus","passwordSchema","password","initialValues","LoginForm","accounts","useMsal","submitUserId","MSALLogin","login","MSALTokenLogin","showPasswordForm","setShowPasswordForm","handleSubmitLogin","setSubmitting","submitLoginResult","handleSubmitUserId","authenticationTypeResult","errorTitle","API_URL_ERROR","validation","authenticationType","MSAL_AUTH_TYPE","MSALLoginResult","BFYI_AUTH_TYPE","userIdInput","passwordInput","msalTokenLoginResult","startIcon","validationSchema","onSubmit","MainPanel","href","DemoPanel","Footer","getFullYear","Link","Login","Helmet","App","titleTemplate","INITIAL_STATE","rowDefinition","listEmpty","accountsRdxReducer","CHANGE_SELECTED_ROWDEF","rowDefinitionID","rowDefinitionName","CHANGE_ROWDEF_LIST_EMPTY","empty","RESET_ACCOUNTS_STATE","wizardReducer","CHANGE_SCENARIO_NAME","CHANGE_VALID","valid","CHANGE_SUBMITTING","submitting","CHANGE_REQUESTING_NEXT","requestingNext","CHANGE_FETCHING","fetching","CHANGE_CALLING_NEXT_CALLBACK","calling","selectedOrg","selectedOwner","ownersReducer","SELECT_ORG","orgID","toString","SELECT_OWNER","RESET_OWNERS_STATE","companyStructureRdxReducer","CHANGE_SELECTED_STRUCTURE","structureID","structureName","RESET_STRUCTURES_STATE","selectedTemplate","templateReducer","CHANGE_SELECTED_TEMPLATE","template","userList","userDetail","getUserListReducer","REQUEST","SUCCESS","FAILURE","FULFILL","postNewUserReducer","userData","addUserRolesReducer","deleteUserReducer","editUserReducer","coordinatorUserReducer","GET_USER_LIST","POST_NEW_USER","ADD_USER_ROLES","DELETE_USER","EDIT_USER","getAllNodesCount","root","count","recurse","Array","isArray","assignmentModalOpen","assigneeId","assignerId","rootNode","itemsList","total","wizardAssignmentReducer","Map","newAssignments","parentsTree","scenarioDetailsReducer","SET_PARENTS_TREE","dialog","onFormikCallback","FormatReducer","CHANGE_IS_VALID","SET_ON_SUBMIT","SET_DIALOG","RESET_DIALOG","rootReducer","combineReducers","budgetReducer","owners","structure","templates","users","wizardAssignments","scenarioDetails","feedback","feedbackFormReducer","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","createStore","applyMiddleware","thunk","CustomNavigationClient","relativePath","replace","noHistory","NavigationClient","apiURL","result","MSALConfiguration","auth","clientId","authority","tenantId","navigateToLoginRequestUrl","pca","PublicClientApplication","navigationClient","setNavigationClient","CustomMSALProvider","usePromise","promiseState","run","MSALSettingsPromise","getMSALSettings","instance","queryClient","QueryClient","AppProviders","client","ThemeProvider","CssBaseline","store","initialIsOpen","position","wjcCore","matchAll","shim","allSettled","ReactDOM","render","getElementById","ADMINISTRATOR","BUDGET_COORDINATOR","BUDGET_OWNER","HR_COORDINATOR","getRole","jwt","decode","payloadElement","isBudgetCoordinator","isBudgetOwner","isHRCoordinator","Authorization","email","submitLoginRequest","msalResponse","MSALLoginPopup","MSALInstance","setActiveAccount","loginPopup","scopes","prompt","loginHint","idbStores","storeName","keyPath","index","BUDGET_FILLING_STORE","BUDGET_DETAILING_STORE","MSALAcquireTokenPopup","acquireTokenPopup","msalLoginRequest","AuthContext","setDataAfterLogin","userInfoResponse","setData","createIDBStores","APP_VERSION_ERROR","setUserId","setUser","AuthProvider","userPromise","tokenValidation","getAuthenticationType","loginResult","setDataResult","msalResult","msalTokenResult","msalLoginResult","Provider","context","WORKFORCE_SETTINGS_URL","EMPLOYEE_MANAGEMENT_URL","WORKFORCE_DATA_PREVIEW","WORKFORCE_TEMPLATE_SETUP","EMPLOYEE_MANAGEMENT_PATH","DATA_PREVIEW_PATH","TEMPLATE_SETUP_PATH","OVERVIEW","initialResponse","ACTIVE","IN_REVIEW","APPROVED","WITH_ERROR","oneOfType","element","func","GET","POST","PUT","PATCH","DELETE","FullPageSpinner","style","APP_CONFIG","ROLES_ADDED_MSG","getUserListAction","actionCallback","cancelGetUserListAction","cancelCallback","postNewUserAction","postUserCallback","userFormValues","cancelPostNewUserAction","addUserRolesAction","userRoles","cancelAddUserRolesAction","deleteUserAction","deleteUserCallback","usersToDelete","cancelDeleteUserAction","editUserAction","editUserCallback","usersToEdit","userEditedId","cancelEditUserAction","USER_KEYS","setLocalStorageItem","getUserId","parse","_g","_g2","SvgSummarizeIcon","enableBackground","USERS_URL","USER_FORM","changeIsValid","setOnSubmit","setDialog","resetDialog","connectedComponentType","WrappedComponent","getEmployeesAllocated","employeesInfo","employeeRecordId","allocation","orgDetailId","removeSessionStorageItem","createSessionStorageAllocatedEmployees","employees","sessionStorageKey","allocatedEmployees","info","setSessionStorageItem","undoAllocatedEmployee","saveAllocations","undo","getSessionStorageItem","currValue","allocatedEmployeeInfo","mutate","getEmployeeData","redoAllocatedEmployee","redoInfo","unAllocatedEmployeeInfo","undoUnAllocatedEmployee","redo","redoUnAllocateEmployee","saveEmployee","budgetScenarioEmployeeAllocationId","scenarioId","selectOrg","resetOwnersState","getBudget","currentBudgetId","getIDBValue","LEGACY_getBudget","getStorageItem","deleteIDBValue","removeStorageItem","saveStepData","stepIndex","budgetInDB","now","putIDBValue","idbKey","upserted","LEGACY_saveStepData","setStorageItem","getStepData","LEGACY_getStepData","saveBudgetRelatedValue","valueInDB","LEGACY_saveBudgetRelatedValue","collection","valueInStorage","getRelatedStorageItem","setRelatedStorageItem","getBudgetRelatedValues","getAllFromIndex","LEGACY_getBudgetRelatedValues","getRelatedStorageItems","clearBudgetRelatedValues","deleteAllFromIndex","LEGACY_clearBudgetRelatedValues","clearRelatedStorageItems","allocations","getAllocationPayload","flexInstance","collectionView","sourceCollection","getAllocationWithoutPopup","postAllocations","apiClient","employeeRecordsToAllocate","useSaveEmployeeAllocation","handleCloseDialog","orgId","setOrgId","useMutation","onError","onSuccess","showSuccessToast","changeSelectedRowDef","changeRowDefListEmpty","resetAccountsState","promiseReducer","promise","promiseData","promiseError","FullPageErrorFallback","OPTIONAL_PARAMS","ALL_SECTIONS","START_BUDGET","SELECT_ACCOUNTS","CREATE_ASSUMPTIONS","CREATE_COMPANY","CREATE_SCHEDULES","CREATE_TEMPLATES","CREATE_WORKFORCE","OWNER_ASSIGNATION","pattern","getSection","localStorage","setItem","getItem","removeItem","sortAllAccountsFirst","ALL_ACCOUNTS_NAME","saveTemplateAssignments","assignmentsObj","getTemplateAssignments","templateAssignments","clearTemplateAssignments","getTemplate","removeTemplate","removeRelatedStorageItem","saveTemplate","getTemplates","allAccountsFirst","sort","saveScenarioLevelAssumptions","getScenarioLevelAssumptions","assumptions","saveTemplatesList","templateList","asyncOperations","Promise","all","assignIcon","templateStatusId","icon","AccessAlarmIcon","ProgressClock","blue","HighlightOffIcon","CheckCircleOutlineIcon","ErrorOutlineIcon","warning","documentMode","StyleMedia","changeSelectedStructure","resetStructuresState","handleUnauthorized","useRedirectToStep","useCallback","newStep","useRedirectToNext","redirectTo","nextStep","useWizardForm","submitForm","submit","changeValid","changeSubmitting","useValidatePrevious","showDialog","redirectName","redirectStep","setResult","currentStep","stepTitle","validate","useScenarioHeaderTitle","getBudgetMeta","formValues","scenario","getHeader","useChangeFetching","changeFetching","useRequestingNext","callback","redirect","shouldGoNext","changeCallingNextCallback","AbortController","getFetchHook","abortController","abort","signal","Accept","resolve","reject","textData","jsonData","catch","useGet","usePut","useDelete","saveScheduleAssignments","getScheduleAssignments","scheduleAssignments","clearSchedulesAssignments","removeDueDate","saveDueDate","getDueDate","saveCompanyStructure","saveBudgetMeta","budgetMeta","meta","newDueDates","newDueDatesSet","Set","newTemplates","newTemplatesSet","ErrorBoundary","hasError","Component","inputStyles","WebkitBoxShadow","WebkitTextFillColor","borderTopLeftRadius","borderTopRightRadius","InputField","touched","inputPropsOptions","onBlur","onChange","multiline","rows","placeholder","TextField","helperText","InputProps","inputProps","memo","areEqual","useField","autoComplete","saveOwnerAssignments","clearOwners","ALL_ACCOUNTS_ID","prevProps","nextProps","nextValue","nextTouched","nextError","nextName","errorMessageStyles","overflowWrap","ErrorMessage","changeSelectedTemplate","setParentsTree","passwordStyles","passwordVisibilityOffIcon","A200","PasswordField","showVisibilityToggle","showPassword","setShowPassword","FormControl","InputLabel","htmlFor","FilledInput","endAdornment","InputAdornment","onMouseDown","preventDefault","FormHelperText","sessionStorage","version","border","borderLeftWidth","SlideTransition","Slide","direction","Toast","isOpen","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","e","reason","TransitionComponent","SnackbarContent","toastContent","maxHeight","overflowY","expansionToggle","expansionDetails","DetailsToast","isExpanded","details","toggleDetails","Accordion","expanded","AccordionSummary","expandIcon","AccordionDetails","ToastDispatchContext","actionTypes","toastReducer","ToastProvider","IDB_NAME","getIDBVersion","paddedRevision","padStart","stores","openDB","upgrade","database","forEach","autoIncrement","objectStoreNames","contains","createObjectStore","createIndex","db","put","delete","getCursorFromIndex","indexName","query","transactionMode","transaction","openCursor","concat","continue","listItemHeight","inputHeight","space","maxContentWidth","createTheme","xs","sm","md","lg","xl","overrides","MuiButton","MuiPickersCalendarHeader","switchHeader","dayLabel","MuiPickersCalendar","transitionContainer","MuiPickersDay","MuiSnackbarContent","default","secondary","indeterminateCheckbox","fontFamily","join","set","remove","getRelationshipKey","foreignCollection","foreignId","getRelationshipPrefix","prefix","each"],"mappings":"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","file":"static/js/main.b2933a4f.chunk.js","sourcesContent":["import {\n doesCookieExist,\n deleteCookie,\n getCookie,\n setCookie,\n} from \"common/utils/cookie\";\n\nconst TOKEN_COOKIE = \"token\";\n\nexport function hasTokenCookie() {\n return doesCookieExist(TOKEN_COOKIE);\n}\n\nexport function getTokenCookie() {\n const token = getCookie(TOKEN_COOKIE);\n return token !== \"\" ? token : null;\n}\n\nexport function setTokenCookie(value: string) {\n setCookie(TOKEN_COOKIE, value, \"Max-Age=7200; Path=/; SameSite=Strict\");\n}\n\nexport function deleteTokenCookie() {\n deleteCookie(TOKEN_COOKIE, \"Path=/\");\n}\n","export function doesCookieExist(cookieName: string) {\n return document.cookie\n .split(\";\")\n .some((item) => item.trim().startsWith(`${cookieName}=`));\n}\n\nexport function getCookie(cookieName: string) {\n return (\n document.cookie\n .split(\"; \")\n .find((row) => row.startsWith(`${cookieName}=`))\n ?.split(\"=\")[1] ?? null\n );\n}\n\nexport function setCookie(\n cookieName: string,\n cookieValue: unknown,\n options?: string,\n) {\n document.cookie = `${cookieName}=${cookieValue}${\n options === undefined ? \"\" : `; ${options}`\n }`;\n}\n\nexport function deleteCookie(cookieName: string, options?: string) {\n document.cookie = `${cookieName}= ; Max-Age=0; Expires=${new Date(\n 1970,\n 0,\n 1,\n ).toUTCString()}${options === undefined ? \"\" : `; ${options}`}`;\n}\n","import type { JSONTypes } from \"common/types/common-types\";\nimport type { Result } from \"common/utils/result\";\n\nexport type ResponseBody = Blob | JSONTypes;\n\nexport type ReadResponseMethods = \"json\" | \"text\" | \"blob\";\n\nexport type LogoutFn = () => void | Promise>;\n\nexport type GetMessageFromErrorResponseFn = (\n responseBody: TErrorBody,\n) => string;\n\nexport interface RestOptions\n extends Omit {\n body?: RequestInit[\"body\"] | JSONTypes;\n baseURL?: string;\n onUnauthorized?: LogoutFn;\n getMessageFromErrorResponse?: GetMessageFromErrorResponseFn;\n}\n\nexport type HeadersObject = Readonly<{ [headerName: string]: string }>;\n\nexport interface ResponseContent {\n status: number;\n headers: HeadersObject;\n}\n\nexport interface FetchError {\n kind: \"fetchError\";\n message: string;\n}\n\nexport interface ErrorRequest extends Omit {\n url: string;\n headers?: HeadersObject;\n}\n\nexport interface RestErrorObject {\n message: string;\n response: ResponseContent;\n request: ErrorRequest;\n}\n\nexport interface EmptyRestError extends RestErrorObject {\n kind: \"emptyRestError\";\n}\n\nexport interface RestErrorWithBody\n extends RestErrorObject {\n kind: \"restErrorWithBody\";\n response: ResponseContent & { body: TErrorBody };\n}\n\nexport type RestError =\n | EmptyRestError\n | RestErrorWithBody;\n\nexport type ErrorObject =\n | FetchError\n | RestError;\n\nexport type RestErrorBuilder = (\n message: string,\n body?: TErrorBody,\n) => string;\n\nexport interface SuccessfulEmptyResponse extends ResponseContent {\n kind: \"empty\";\n}\n\nexport interface SuccessfulResponseWithBody\n extends ResponseContent {\n kind: \"withBody\";\n body: TResponseBody;\n}\n\nexport type SuccessfulResponse =\n | SuccessfulEmptyResponse\n | SuccessfulResponseWithBody;\n\nfunction getFetchInput(endpoint: string, baseURL: string) {\n if (endpoint.startsWith(\"https://\")) {\n return endpoint;\n }\n return `${baseURL.endsWith(\"/\") ? baseURL.slice(0, -1) : baseURL}/${\n endpoint.startsWith(\"/\") ? endpoint.slice(1) : endpoint\n }`;\n}\n\nfunction isRequestInitBody(\n body: RestOptions[\"body\"],\n): body is RequestInit[\"body\"] {\n return (\n body === undefined ||\n body === null ||\n typeof body === \"string\" ||\n body instanceof ReadableStream ||\n body instanceof Blob ||\n body instanceof ArrayBuffer ||\n ArrayBuffer.isView(body) ||\n body instanceof FormData ||\n body instanceof URLSearchParams\n );\n}\n\nfunction getInitBody(\n body: RestOptions[\"body\"],\n): {\n body?: RequestInit[\"body\"];\n} {\n if (body === undefined) {\n return {};\n }\n\n return {\n body: isRequestInitBody(body) ? body : JSON.stringify(body),\n };\n}\n\nfunction getFetchInit(\n body: RestOptions[\"body\"],\n customConfig: Omit,\n): RequestInit {\n return {\n method: body ? \"post\" : \"get\",\n ...customConfig,\n headers: {\n ...(isRequestInitBody(body)\n ? {}\n : { \"content-type\": \"application/json\" }),\n ...customConfig.headers,\n },\n ...getInitBody(body),\n };\n}\n\nfunction getHeadersObject(headers: Headers): HeadersObject {\n return [...headers.entries()].reduce(\n (accumulator, [key, value]) => ({ ...accumulator, [key]: value }),\n {},\n );\n}\n\nfunction getErrorBodyMessage(\n getMessageFromErrorResponse: GetMessageFromErrorResponseFn,\n body: TErrorBody,\n) {\n try {\n const message = getMessageFromErrorResponse(body);\n if (typeof message === \"string\") {\n return message;\n }\n return \"The error message is not a string. Check the provided `getMessageFromErrorResponse` function.\";\n } catch (error) {\n return `Error running \\`getMessageFromErrorResponse\\`${\n error instanceof Error ? `: \\`${error.message}\\`` : \"\"\n }`;\n }\n}\n\nfunction getRestErrorBuilder(\n url: string,\n request: RequestInit,\n response: Response,\n getMessageFromErrorResponse?: GetMessageFromErrorResponseFn,\n): RestErrorBuilder {\n function omit(object: RequestInit | HeadersInit, keys: string[]) {\n return Object.entries(object)\n .filter(([key]) => !keys.includes(key.toLowerCase()))\n .reduce(\n (accumulator, [key, value]) => ({ ...accumulator, [key]: value }),\n {},\n );\n }\n\n return (...[message, body]: Parameters>) => {\n if (getMessageFromErrorResponse !== undefined) {\n return body === undefined\n ? message\n : getErrorBodyMessage(getMessageFromErrorResponse, body);\n }\n\n const errorObject = {\n message,\n response: {\n status: response.status,\n headers: getHeadersObject(response.headers),\n },\n request: {\n url,\n ...omit(request, [\"signal\"]),\n ...(request.headers === undefined\n ? {}\n : { headers: omit(request.headers, [\"authorization\"]) }),\n },\n };\n\n if (body === undefined) {\n const emptyRestError: EmptyRestError = {\n ...errorObject,\n kind: \"emptyRestError\",\n };\n\n return JSON.stringify(emptyRestError);\n }\n\n const restErrorWithBody: RestErrorWithBody = {\n ...errorObject,\n kind: \"restErrorWithBody\",\n response: {\n ...errorObject.response,\n body,\n },\n };\n\n return JSON.stringify(restErrorWithBody);\n };\n}\n\nasync function readResponseBody<\n TResponseBody extends ResponseBody,\n TErrorBody extends ResponseBody,\n>(\n restErrorBuilder: RestErrorBuilder,\n response: Response,\n readResponseMethod: ReadResponseMethods,\n): Promise> {\n try {\n return await response.clone()[readResponseMethod]();\n } catch (error) {\n return new Error(\n restErrorBuilder(\n `Error reading the response body${\n error instanceof Error ? `: ${error.message}` : \"\"\n }`,\n ),\n );\n }\n}\n\nasync function isEmptyResponse(\n restErrorBuilder: RestErrorBuilder,\n method: RequestInit[\"method\"],\n response: Response,\n): Promise> {\n if (\n method?.toLowerCase() === \"head\" ||\n response.status === 204 ||\n response.status === 205 ||\n response.headers.get(\"content-length\") === \"0\"\n ) {\n return true;\n }\n\n const responseAsTextResult = await readResponseBody(\n restErrorBuilder,\n response,\n \"text\",\n );\n if (responseAsTextResult instanceof Error) {\n return responseAsTextResult;\n }\n\n return responseAsTextResult.length === 0;\n}\n\nfunction getResponseBody<\n TResponseBody extends ResponseBody,\n TErrorBody extends ResponseBody,\n>(restErrorBuilder: RestErrorBuilder, response: Response) {\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"json\")) {\n return readResponseBody(\n restErrorBuilder,\n response,\n \"json\",\n );\n }\n if (contentType?.startsWith(\"text/\")) {\n return readResponseBody(\n restErrorBuilder,\n response,\n \"text\",\n );\n }\n\n return readResponseBody(\n restErrorBuilder,\n response,\n \"blob\",\n );\n}\n\nasync function handleUnauthorizedResponse(\n restErrorBuilder: RestErrorBuilder,\n onUnauthorized?: LogoutFn,\n body?: TErrorBody,\n) {\n const logoutResult = await onUnauthorized?.();\n if (logoutResult instanceof Error) {\n return new Error(\n restErrorBuilder(`Logout error: ${logoutResult.message}`, body),\n );\n }\n return new Error(restErrorBuilder(\"Unauthorized\", body));\n}\n\nasync function handleNotSuccessfulResponse(\n restErrorBuilder: RestErrorBuilder,\n method: RequestInit[\"method\"],\n response: Response,\n onUnauthorized?: LogoutFn,\n) {\n const isEmptyResponseResult = await isEmptyResponse(\n restErrorBuilder,\n method,\n response,\n );\n if (isEmptyResponseResult instanceof Error) {\n return isEmptyResponseResult;\n }\n\n if (isEmptyResponseResult) {\n if (response.status === 401) {\n return handleUnauthorizedResponse(\n restErrorBuilder,\n onUnauthorized,\n );\n }\n\n return new Error(\n restErrorBuilder(\"Received not successful empty response\"),\n );\n }\n\n const bodyResult = await getResponseBody(\n restErrorBuilder,\n response,\n );\n if (bodyResult instanceof Error) {\n return bodyResult;\n }\n\n if (response.status === 401) {\n return handleUnauthorizedResponse(\n restErrorBuilder,\n onUnauthorized,\n bodyResult,\n );\n }\n\n return new Error(\n restErrorBuilder(\"Received not successful response\", bodyResult),\n );\n}\n\nasync function handleSuccessfulResponse<\n TResponseBody extends ResponseBody,\n TErrorBody extends ResponseBody,\n>(\n restErrorBuilder: RestErrorBuilder,\n method: RequestInit[\"method\"],\n response: Response,\n): Promise>> {\n const isEmptyResponseResult = await isEmptyResponse(\n restErrorBuilder,\n method,\n response,\n );\n if (isEmptyResponseResult instanceof Error) {\n return isEmptyResponseResult;\n }\n\n if (isEmptyResponseResult) {\n const emptyResponse: SuccessfulEmptyResponse = {\n kind: \"empty\",\n status: response.status,\n headers: getHeadersObject(response.headers),\n };\n return Object.freeze(emptyResponse);\n }\n\n const bodyResult = await getResponseBody(\n restErrorBuilder,\n response,\n );\n if (bodyResult instanceof Error) {\n return bodyResult;\n }\n\n const responseWithBody: SuccessfulResponseWithBody = {\n kind: \"withBody\",\n status: response.status,\n headers: getHeadersObject(response.headers),\n body: bodyResult,\n };\n return Object.freeze(responseWithBody);\n}\n\nexport type DefaultErrorBody = {\n message: string;\n};\n\nexport function getErrorObject<\n TErrorBody extends ResponseBody = DefaultErrorBody,\n>(errorMessage: string): Result> {\n try {\n const object = JSON.parse(errorMessage);\n return Object.freeze(object);\n } catch (error) {\n return new Error(\n `Parse JSON error${\n error instanceof Error ? `: \\`${error.message}\\`` : \"\"\n }`,\n );\n }\n}\n\nexport async function rest<\n TResponseBody extends ResponseBody,\n TErrorBody extends ResponseBody = DefaultErrorBody,\n>(\n endpoint: string,\n {\n baseURL = globalThis.location.origin,\n onUnauthorized,\n getMessageFromErrorResponse,\n body,\n ...customConfig\n }: RestOptions = {},\n) {\n const input = getFetchInput(endpoint, baseURL);\n const init = getFetchInit(body, customConfig);\n\n try {\n return await fetch(input, init).then((response) => {\n const restErrorBuilder = getRestErrorBuilder(\n input,\n init,\n response,\n getMessageFromErrorResponse,\n );\n\n if (response.ok) {\n return handleSuccessfulResponse(\n restErrorBuilder,\n init.method,\n response,\n );\n }\n\n return handleNotSuccessfulResponse(\n restErrorBuilder,\n init.method,\n response,\n onUnauthorized,\n );\n });\n } catch (error) {\n const message = `Error running \\`fetch\\`${\n error instanceof Error ? `: \\`${error.message}\\`` : \"\"\n }`;\n\n if (getMessageFromErrorResponse !== undefined) {\n return new Error(message);\n }\n\n const errorObject: FetchError = {\n kind: \"fetchError\",\n message,\n };\n\n return new Error(JSON.stringify(errorObject));\n }\n}\n","export const BUDGET_STORE = \"budget_store\";\nexport const DUE_DATES_STORE = \"due_dates_store\";\nexport const TEMPLATES_STORE = \"templates_store\";\nexport const ASSUMPTIONS_STORE = \"assumptions_store\";\n\nexport const BUDGET_IDX_KEYPATH = \"budgetId\";\nexport const BUDGET_IDX_NAME = \"budget_idx\";\n\nexport const CURRENT_BUDGET = \"current_budget\";\nexport const NEW_PREFIX = \"new_\";\nexport const IS_WORKFORCE_SCENARIO = \"isWorkforceScenario\";\n\nexport const START_KEY = 0;\nexport const ACCOUNTS_KEY = 1;\nexport const COMPANY_STRUCTURE_KEY = 2;\nexport const ASSUMPTION_KEY = 3;\nexport const SCHEDULES_KEY = 4;\nexport const TEMPLATES_KEY = 5;\nexport const WORKFORCE_KEY = 6;\nexport const OWNERS_KEY = 7;\n\nexport const UNDO = \"UNDO\";\nexport const CURRENT = \"CURRENT\";\nexport const REDO = \"REDO\";\nexport const UNDO_ALLOCATED = \"UNDO_ALLOCATED\";\nexport const REDO_ALLOCATED = \"REDO_ALLOCATED\";\nexport const UNDO_UNALLOCATED = \"UNDO_UNALLOCATED\";\nexport const REDO_UNALLOCATED = \"REDO_UNALLOCATED\";\n","export const CHANGE_ASSIGNMENT_MODAL_OPEN = \"CHANGE_ASSIGNMENT_MODAL_OPEN\";\nexport const CHANGE_ASSIGNEE_ID = \"CHANGE_ASSIGNEE_ID\";\nexport const CHANGE_ASSIGNER_ID = \"CHANGE_ASSIGNER_ID\";\nexport const CHANGE_PARENTS_MAP = \"CHANGE_PARENTS_MAP\";\nexport const CHANGE_ROOT_NODE = \"CHANGE_ROOT_NODE\";\nexport const ADD_ASSIGNMENTS = \"ADD_ASSIGNMENTS\";\nexport const SET_ASSIGNMENTS = \"SET_ASSIGNMENTS\";\nexport const CHANGE_ITEMS_LIST = \"CHANGE_ITEMS_LIST\";\nexport const REMOVE_ASSIGNMENT = \"REMOVE_ASSIGNMENT\";\nexport const RESET_ASSIGNMENTS = \"RESET_ASSIGNMENTS\";\n\nexport const changeAssignmentModalOpen = (open) => ({\n type: CHANGE_ASSIGNMENT_MODAL_OPEN,\n payload: {\n open,\n },\n});\n\nexport const changeAssigneeId = (id) => ({\n type: CHANGE_ASSIGNEE_ID,\n payload: {\n id,\n },\n});\n\nexport const changeAssignerId = (id) => ({\n type: CHANGE_ASSIGNER_ID,\n payload: {\n id,\n },\n});\n\nexport const changeParentsMap = (parentsMap) => ({\n type: CHANGE_PARENTS_MAP,\n payload: {\n parentsMap,\n },\n});\n\nexport const changeRootNode = (node) => ({\n type: CHANGE_ROOT_NODE,\n payload: {\n node,\n },\n});\n\nexport const addAssignments = (assignments) => ({\n type: ADD_ASSIGNMENTS,\n payload: {\n assignments,\n },\n});\n\nexport const setAssignments = (assignments) => ({\n type: SET_ASSIGNMENTS,\n payload: {\n assignments,\n },\n});\n\nexport const changeItemsList = (list) => ({\n type: CHANGE_ITEMS_LIST,\n payload: {\n list,\n },\n});\n\nexport const removeAssignment = (id) => ({\n type: REMOVE_ASSIGNMENT,\n payload: { id },\n});\n\nexport const resetAssignments = () => ({\n type: RESET_ASSIGNMENTS,\n});\n","export const getScenarioName = (state) => state.budget.scenarioName;\nexport const getValid = (state) => state.budget.isValid;\nexport const getSubmitting = (state) => state.budget.isSubmitting;\nexport const getRequestingNext = (state) => state.budget.isRequestingNext;\nexport const getFetching = (state) => state.budget.isFetching;\nexport const getCallingNextCallback = (state) =>\n state.budget.isCallingNextCallback;\n","import {\n SECTION_ANALYSIS,\n SECTION_BUDGET,\n SECTION_BUDGET_SETTINGS,\n SECTION_EMPLOYEE_MANAGEMENT,\n SECTION_OVERVIEW,\n SECTION_USERS,\n SECTION_WORKFORCE_SETTINGS,\n} from \"common/routes/sections/main.sections\";\n\nexport const ADMINISTRATOR_SECTIONS = [SECTION_BUDGET_SETTINGS, SECTION_USERS];\n\nexport const COORDINATOR_SECTIONS = [\n SECTION_BUDGET,\n SECTION_OVERVIEW,\n SECTION_USERS,\n SECTION_WORKFORCE_SETTINGS,\n SECTION_ANALYSIS,\n];\n\nexport const OWNER_SECTIONS = [SECTION_OVERVIEW];\n\nexport const HR_COORDINATOR_SECTIONS = [\n SECTION_WORKFORCE_SETTINGS,\n SECTION_EMPLOYEE_MANAGEMENT,\n];\n","export default __webpack_public_path__ + \"static/media/logo.24ddfb85.svg\";","import PropTypes from \"prop-types\";\n\nimport componentType from \"./react.proptypes\";\n\nconst sectionType = PropTypes.shape({\n id: PropTypes.string,\n path: PropTypes.string.isRequired,\n params: PropTypes.string,\n title: PropTypes.string.isRequired,\n subtitle: PropTypes.string.isRequired,\n withStepper: PropTypes.bool.isRequired,\n withDate: PropTypes.bool.isRequired,\n menuText: PropTypes.string,\n menuIcon: componentType,\n step: PropTypes.number,\n});\n\nexport default sectionType;\n","import { appDefaults } from \"common/themes/default.theme\";\n\nconst sidebarStyle = (theme) => {\n const { sidebarWidth, headerHeight, footerHeight } = appDefaults;\n\n return {\n sidebar: {\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: theme.spacing(1.5, 3),\n borderTop: `1px solid ${theme.palette.divider}`,\n [theme.breakpoints.up(\"sm\")]: {\n padding: 0,\n borderTop: \"none\",\n flexDirection: \"column\",\n },\n },\n content: {\n height: `calc(100% - ${headerHeight}px)`,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n },\n menu: {\n display: \"inline-flex\",\n [theme.breakpoints.up(\"sm\")]: {\n display: \"none\",\n },\n },\n drawerPaper: {\n overflowX: \"hidden\",\n zIndex: 1,\n },\n drawerAnchorLeft: {\n maxWidth: sidebarWidth,\n },\n logoContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: headerHeight,\n margin: theme.spacing(0, 1.5),\n borderBottom: `1px solid ${theme.palette.divider}`,\n \"&>img\": {\n height: \"100%\",\n width: \"100%\",\n },\n },\n nav: {\n width: \"100%\",\n height: \"100%\",\n \"& div.MuiListItemIcon-root\": {\n justifyContent: \"center\",\n },\n [theme.breakpoints.up(\"sm\")]: {\n height: `calc(100% - ${headerHeight}px - ${footerHeight}px)`,\n \"& div.MuiListItem-root\": {\n flexFlow: \"column nowrap\",\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n \"& span\": {\n fontSize: theme.typography.pxToRem(8),\n },\n },\n },\n },\n link: {\n color: theme.palette.text.primary,\n textDecoration: \"none\",\n },\n menuText: {\n textAlign: \"center\",\n },\n active: {\n color: theme.palette.primary.main,\n \"& svg\": {\n fill: theme.palette.primary.main,\n },\n },\n profile: {\n cursor: \"pointer\",\n padding: theme.spacing(2),\n zIndex: 2,\n },\n toolbar: {\n justifyContent: \"space-between\",\n },\n };\n};\n\nexport default sidebarStyle;\n","/* eslint-disable jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events */\nimport * as React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Link, NavLink, useRouteMatch, useLocation } from \"react-router-dom\";\nimport clsx from \"clsx\";\n\nimport Drawer from \"@material-ui/core/Drawer\";\nimport Hidden from \"@material-ui/core/Hidden\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport Typography from \"@material-ui/core/Typography\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Menu from \"@material-ui/core/Menu\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Divider from \"@material-ui/core/Divider\";\n\nimport logo from \"common/assets/logo.svg\";\nimport appVersion from \"common/config/app-version.config\";\nimport sectionType from \"common/proptypes/section.proptypes\";\nimport reactChildrenType from \"common/proptypes/react-children.proptypes\";\nimport { SECTION_BUDGET } from \"common/routes/sections/main.sections\";\nimport sidebarStyle from \"./sidebar.styles\";\n\nconst useStyles = makeStyles(sidebarStyle);\n\nfunction NavItem({ onClick: handleClick, menuIcon, menuText, isActive }) {\n const classes = useStyles();\n return (\n \n {menuIcon}\n \n {menuText}\n \n \n );\n}\nNavItem.propTypes = {\n onClick: PropTypes.func,\n menuIcon: reactChildrenType.isRequired,\n menuText: PropTypes.string.isRequired,\n isActive: PropTypes.bool,\n};\nNavItem.defaultProps = {\n onClick: null,\n isActive: false,\n};\n\nfunction Sidebar({\n className,\n toggleDrawer,\n isPhone,\n drawerOpen,\n setDrawerOpen,\n sections,\n handleStartClick,\n imageUrl,\n handleClick,\n initials,\n anchorEl,\n handleClose,\n handleLogout,\n}) {\n const match = useRouteMatch();\n const location = useLocation();\n const [menuAnchorElement, setMenuAnchorElement] = React.useState(null);\n\n const handleOpenMenu = (event) => {\n setMenuAnchorElement(event.currentTarget);\n };\n\n const handleCloseMenu = () => {\n setMenuAnchorElement(null);\n };\n\n const classes = useStyles();\n\n return (\n \n );\n}\n\nSidebar.propTypes = {\n className: PropTypes.string,\n toggleDrawer: PropTypes.func.isRequired,\n isPhone: PropTypes.bool.isRequired,\n drawerOpen: PropTypes.bool.isRequired,\n setDrawerOpen: PropTypes.func.isRequired,\n sections: PropTypes.arrayOf(sectionType).isRequired,\n handleStartClick: PropTypes.func.isRequired,\n imageUrl: PropTypes.string,\n handleClick: PropTypes.func.isRequired,\n initials: PropTypes.string.isRequired,\n anchorEl: PropTypes.instanceOf(Object),\n handleClose: PropTypes.func.isRequired,\n handleLogout: PropTypes.func.isRequired,\n};\n\nSidebar.defaultProps = {\n className: \"\",\n imageUrl: null,\n anchorEl: null,\n};\n\nexport default Sidebar;\n","import { useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\n\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\nimport useTheme from \"@material-ui/core/styles/useTheme\";\nimport {\n ADMINISTRATOR_ROLE,\n BUDGET_COORDINATOR_ROLE,\n BUDGET_OWNER_ROLE,\n HR_COORDINATOR_ROLE,\n} from \"common/context/auth/roles\";\nimport { getUser } from \"common/utils/user-data\";\nimport { removeLocalStorageItem } from \"common/utils/storage/local-storage\";\nimport {\n ADMINISTRATOR_SECTIONS,\n COORDINATOR_SECTIONS,\n HR_COORDINATOR_SECTIONS,\n OWNER_SECTIONS,\n} from \"common/routes/sections/roles.sections\";\nimport { CURRENT_BUDGET } from \"features/budget/budget.constants\";\nimport { changeScenarioName } from \"features/budget/wizard/state/wizard.actions\";\nimport { useAuth } from \"common/context/auth/auth-context\";\nimport SidebarComponent from \"./sidebar.component\";\n\nfunction getUserSectionsByRole(role) {\n if (role === null) {\n return [];\n }\n\n if (role === ADMINISTRATOR_ROLE) {\n return ADMINISTRATOR_SECTIONS;\n }\n\n if (role === BUDGET_COORDINATOR_ROLE) {\n return COORDINATOR_SECTIONS;\n }\n\n if (role === BUDGET_OWNER_ROLE) {\n return OWNER_SECTIONS;\n }\n\n if (role === HR_COORDINATOR_ROLE) {\n return HR_COORDINATOR_SECTIONS;\n }\n\n return [];\n}\n\nexport function SidebarContainer({ className }) {\n const { logout, user } = useAuth();\n const userRole = user === null ? null : user.roles[0]?.value ?? null;\n\n const dispatch = useDispatch();\n\n const theme = useTheme();\n const isPhone = useMediaQuery(theme.breakpoints.down(\"xs\"));\n const [drawerOpen, setDrawerOpen] = useState(false);\n\n const toggleDrawer = () => {\n setDrawerOpen(!drawerOpen);\n };\n\n const handleStartClick = () => {\n removeLocalStorageItem(CURRENT_BUDGET);\n dispatch(changeScenarioName(\"\"));\n };\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const sections = getUserSectionsByRole(userRole);\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n function handleLogout() {\n logout();\n }\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const { name = \" \", imageUrl } = getUser() || {};\n const names = name.split(\" \");\n const initials = `${name[0]}${names[1] ? names[1][0] : \"\"}`;\n\n return (\n \n );\n}\n","import PropTypes from \"prop-types\";\n\nfunction StepNumber({ number }) {\n return (\n \n \n \n {number}\n \n \n );\n}\n\nStepNumber.propTypes = {\n number: PropTypes.number.isRequired,\n};\n\nexport default StepNumber;\n","const stepperStyles = (theme) => ({\n stepper: {\n background: \"initial\",\n padding: 0,\n flex: \"2 1 auto\",\n flexWrap: \"wrap\",\n alignContent: \"space-between\",\n },\n link: {\n color: theme.palette.text.primary,\n textDecoration: \"none\",\n },\n active: {\n fontWeight: \"bold\",\n },\n steps: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n \"& .MuiStepper-root\": {},\n },\n buttonsContainer: {\n display: \"flex\",\n minWidth: 120,\n justifyContent: \"space-evenly\",\n },\n buttonsContainerBig: {\n minWidth: 150,\n },\n hidden: {\n visibility: \"hidden\",\n width: 0,\n padding: 0,\n },\n button: {\n padding: 0,\n minWidth: 50,\n },\n bigButton: {\n padding: theme.spacing(0.5, 1.25),\n minWidth: 64,\n },\n});\n\nexport default stepperStyles;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport { forwardRef, useRef, useState } from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport Stepper from \"@material-ui/core/Stepper\";\nimport Step from \"@material-ui/core/Step\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport StepButton from \"@material-ui/core/StepButton\";\nimport Menu from \"@material-ui/core/Menu\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport StepNumber from \"common/assets/step-number\";\nimport steps from \"features/budget/wizard/state/stepper.data\";\nimport { BUDGET_STEPS_ROUTES } from \"features/budget/budget.sections\";\nimport stepperStyles from \"features/budget/wizard/views/stepper/stepper.styles\";\n\nconst useStyles = makeStyles(stepperStyles);\n\nfunction BudgetSteps({ activeStep, isLargeScreen }) {\n const stepperRef = useRef(null);\n const [anchorEl, setAnchorEl] = useState(null);\n const classes = useStyles();\n\n const link = (step) => {\n const linkStep = BUDGET_STEPS_ROUTES[step];\n const LinkComponent = forwardRef((props, ref) => (\n \n ));\n LinkComponent.displayName = \"routeStep\";\n return LinkComponent;\n };\n\n const handleExpandClick = () => {\n setAnchorEl(stepperRef.current);\n };\n\n const handleMenuItemClick = () => {\n setAnchorEl(null);\n };\n\n const handleCloseMenu = () => {\n setAnchorEl(null);\n };\n\n if (isLargeScreen) {\n return (\n \n {steps.map((step) => (\n \n \n \n {step.caption}\n \n \n \n ))}\n \n );\n }\n\n return (\n <>\n \n {steps.map((step) => (\n \n \n \n {step.caption}\n \n \n \n ))}\n \n\n \n \n \n \n {steps\n .filter(({ key }) => key !== activeStep)\n .map((step) => (\n activeStep}\n >\n \n \n \n \n \n ))}\n \n \n );\n}\n\nBudgetSteps.propTypes = {\n activeStep: PropTypes.number.isRequired,\n isLargeScreen: PropTypes.bool.isRequired,\n};\n\nexport default BudgetSteps;\n","import { useReducer } from \"react\";\n\nimport responseReducer, {\n init,\n initialState,\n PENDING,\n REJECTED,\n FULFILLED,\n} from \"common/hooks/fetch/fetch.reducer\";\nimport { usePost } from \"common/hooks/fetch/fetch-manual.hooks\";\n\nimport { getLocalStorageItem } from \"common/utils/storage/local-storage\";\n\nimport { CURRENT_BUDGET } from \"features/budget/budget.constants\";\nimport { getCompanyStructure } from \"features/budget/company-structure/state/company-structure.storage\";\nimport { getOwnerAssignments } from \"features/budget/owners/state/owners.storage\";\n\nfunction useFinishScenario() {\n const [state, dispatch] = useReducer(\n responseReducer,\n { ...initialState, loading: false },\n init,\n );\n const post = usePost();\n\n async function finishScenario() {\n const id = getLocalStorageItem(CURRENT_BUDGET);\n\n const companyStructure = await getCompanyStructure();\n const ownerAssignments = await getOwnerAssignments();\n const templateOrganizations =\n ownerAssignments === undefined\n ? null\n : Object.entries(ownerAssignments).map(([organizationId, userId]) => ({\n organizationId,\n userTemplates: [{ userId }],\n }));\n\n const ownersBody = {\n budgetScenarioId: id,\n organizationId: companyStructure.id,\n templateOrganizations,\n };\n\n const finishBody = {\n id: Number(id),\n };\n\n dispatch({ type: PENDING });\n let response;\n try {\n await post(\"budgetScenario/organization/user\", ownersBody);\n response = await post(\"budgetScenario/finish\", finishBody);\n } catch (error) {\n dispatch({ type: REJECTED, payload: error });\n return;\n }\n\n dispatch({ type: FULFILLED, payload: response });\n }\n\n return { ...state, finishScenario };\n}\n\nexport default useFinishScenario;\n","const loadingBackdropStyles = (theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n flexDirection: \"column\",\n },\n content: {\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n uppercaseText: {\n textTransform: \"uppercase\",\n },\n action: {\n cursor: \"pointer\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n \"& :first-child\": {\n marginRight: theme.spacing(1),\n },\n },\n closeAction: {\n width: \"100%\",\n textAlign: \"right\",\n padding: theme.spacing(2),\n },\n});\n\nexport default loadingBackdropStyles;\n","import PropTypes from \"prop-types\";\n\nimport Typography from \"@material-ui/core/Typography\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport CheckIcon from \"@material-ui/icons/Check\";\n\nimport loadingBackdropStyles from \"features/budget/wizard/views/loading-backdrop/loading-backdrop.styles\";\n\nconst useStyles = makeStyles(loadingBackdropStyles);\n\nfunction LoadingBackdrop({ loading, success }) {\n const classes = useStyles();\n\n if (loading) {\n return (\n
\n \n Generating Budget...\n \n \n
\n );\n }\n\n if (success) {\n return (\n
\n \n Budget Scenario\n \n \n Saved\n \n \n
\n );\n }\n\n return null;\n}\n\nLoadingBackdrop.propTypes = {\n loading: PropTypes.bool.isRequired,\n success: PropTypes.bool.isRequired,\n};\n\nexport default LoadingBackdrop;\n","import { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { useHistory } from \"react-router-dom\";\n\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport { OVERVIEW_URL } from \"features/overview/state/overview.sections\";\n\nimport LoadingBackdropComponent from \"features/budget/wizard/views/loading-backdrop/loading-backdrop.component\";\nimport loadingBackdropStyles from \"features/budget/wizard/views/loading-backdrop/loading-backdrop.styles\";\nimport { clearDueDates } from \"features/budget/schedules/state/schedules.storage\";\nimport {\n clearScenarioLevelAssumptions,\n clearTemplates,\n} from \"features/budget/templates/state/template.storage\";\nimport {\n deleteBudget,\n // eslint-disable-next-line camelcase\n LEGACY_deleteBudget,\n} from \"features/budget/wizard/state/wizard.storage\";\nimport { getLocalStorageItem } from \"common/utils/storage/local-storage\";\nimport { CURRENT_BUDGET } from \"features/budget/budget.constants\";\nimport isMSLegacy from \"common/utils/is-ms-legacy\";\n\nconst useStyles = makeStyles(loadingBackdropStyles);\n\nfunction LoadingBackdrop({ loading, success }) {\n const classes = useStyles();\n const [open, setOpen] = useState(false);\n const history = useHistory();\n\n useEffect(() => {\n async function afterSuccess() {\n function redirectToOverview() {\n setOpen(false);\n history.push(OVERVIEW_URL);\n }\n\n let timeoutID;\n if (success) {\n const currentBudget = getLocalStorageItem(CURRENT_BUDGET);\n\n await clearScenarioLevelAssumptions(currentBudget);\n await clearTemplates();\n await clearDueDates();\n if (isMSLegacy() === true) {\n LEGACY_deleteBudget();\n } else {\n await deleteBudget();\n }\n\n timeoutID = setTimeout(redirectToOverview, 2000);\n }\n\n return function cleanup() {\n clearTimeout(timeoutID);\n };\n }\n\n afterSuccess();\n }, [history, success]);\n\n useEffect(() => {\n if (!loading && !success) {\n setOpen(false);\n } else {\n setOpen(true);\n }\n }, [loading, success]);\n\n return (\n \n \n \n );\n}\n\nLoadingBackdrop.propTypes = {\n loading: PropTypes.bool.isRequired,\n success: PropTypes.bool.isRequired,\n};\n\nexport default LoadingBackdrop;\n","import { useEffect, useMemo } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport clsx from \"clsx\";\n\nimport Button from \"@material-ui/core/Button\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport { useTheme } from \"@material-ui/core/styles\";\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\nimport ChevronLeftIcon from \"@material-ui/icons/ChevronLeft\";\nimport ChevronRightIcon from \"@material-ui/icons/ChevronRight\";\nimport DoneIcon from \"@material-ui/icons/Done\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport TOKEN_ERROR from \"common/constants/token-error.constants\";\nimport { removeAllSessionStorageForUndoRedo } from \"features/budget/workforce/views/employee-data-tab/state/undo-redo-utils\";\n\nimport { useStep } from \"features/budget/wizard/state/wizard.hooks\";\nimport steps from \"features/budget/wizard/state/stepper.data\";\nimport BudgetSteps from \"features/budget/wizard/views/stepper/budget-steps.component\";\nimport stepperStyles from \"features/budget/wizard/views/stepper/stepper.styles\";\nimport {\n getCallingNextCallback,\n getFetching,\n getRequestingNext,\n getSubmitting,\n getValid,\n} from \"features/budget/wizard/state/wizard.selectors\";\nimport { BUDGET_STEPS_ROUTES } from \"features/budget/budget.sections\";\nimport { changeRequestingNext } from \"features/budget/wizard/state/wizard.actions\";\nimport useFinishScenario from \"features/budget/wizard/state/finish/finish-scenario.hooks\";\nimport LoadingBackdrop from \"features/budget/wizard/views/loading-backdrop/loading-backdrop.container\";\nimport {\n showErrorToast,\n showWarningToast,\n useToastDispatch,\n} from \"common/context/toast/toast-context\";\nimport { getLocalStorageItem } from \"common/utils/storage/local-storage\";\nimport { IS_WORKFORCE_SCENARIO } from \"features/budget/budget.constants\";\n\nconst useStyles = makeStyles(stepperStyles);\n\nfunction Stepper() {\n const toastDispatch = useToastDispatch();\n const { finishScenario, data, loading, error } = useFinishScenario();\n\n const theme = useTheme();\n const isLargeScreen = useMediaQuery(theme.breakpoints.up(\"lg\"));\n const classes = useStyles();\n\n const history = useHistory();\n const dispatchRdx = useDispatch();\n\n const isCallingNextCallback = useSelector(getCallingNextCallback);\n const step = useStep();\n\n const isValid = useSelector(getValid);\n const isSubmitting = useSelector(getSubmitting);\n const isRequestingNext = useSelector(getRequestingNext);\n const isFetching = useSelector(getFetching);\n\n useEffect(() => {\n async function handleFinishError() {\n const { message: errorMessage } = await error.json();\n\n if (errorMessage === TOKEN_ERROR) {\n const redirectToLogin = () => {\n history.push(\"/\");\n };\n\n showWarningToast(\n toastDispatch,\n \"Your session expired. Redirecting to sign in page...\",\n );\n\n setTimeout(redirectToLogin, 3000);\n } else {\n showErrorToast(toastDispatch, \"Error saving scenario\", errorMessage);\n }\n }\n\n if (error !== null) {\n handleFinishError();\n }\n }, [error, history, toastDispatch]);\n\n const backDisabled = step === 0 || isRequestingNext || isFetching;\n const nextDisabled =\n !isValid || isSubmitting || isRequestingNext || isFetching;\n\n const handleBackClick = () => {\n let prevStep;\n const isWorkforceScenario = getLocalStorageItem(IS_WORKFORCE_SCENARIO);\n prevStep = BUDGET_STEPS_ROUTES[step - 1];\n if ((step === 4 || step === 7) && isWorkforceScenario === \"false\") {\n prevStep = BUDGET_STEPS_ROUTES[step - 2];\n }\n if (step === 5) {\n removeAllSessionStorageForUndoRedo();\n }\n history.push(prevStep);\n };\n\n const handleNextClick = () => {\n if (step === steps[steps.length - 1].key) {\n finishScenario();\n } else {\n dispatchRdx(changeRequestingNext(true));\n }\n };\n\n const [backContent, nextContent] = useMemo(() => {\n const backButtonContent =\n isLargeScreen === true ? \"Back\" : ;\n let nextButtonContent =\n isLargeScreen === true ? \"Next\" : ;\n\n const isLastStep = step === steps[steps.length - 1].key;\n if (isLastStep === true) {\n nextButtonContent = isLargeScreen === true ? \"Finish\" : ;\n }\n\n return [backButtonContent, nextButtonContent];\n }, [isLargeScreen, step]);\n\n return (\n <>\n
\n \n \n \n {backContent}\n \n {isCallingNextCallback ? (\n \n ) : (\n \n {nextContent}\n \n )}\n \n
\n\n \n \n );\n}\n\nexport default Stepper;\n","import { useEffect, useState } from \"react\";\n\nimport Typography from \"@material-ui/core/Typography\";\n\nconst dateOptions = {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n};\n\nfunction getDateString() {\n return new Date().toLocaleDateString(\"en-US\", dateOptions);\n}\n\nfunction Clock() {\n const [date, setDate] = useState(() => getDateString());\n\n useEffect(() => {\n let isSubscribed = true;\n\n let rAFId;\n const rAFCallback = () => {\n if (isSubscribed === true) {\n setDate(getDateString());\n }\n\n rAFId = window.requestAnimationFrame(rAFCallback);\n };\n rAFId = window.requestAnimationFrame(rAFCallback);\n\n return function cleanup() {\n isSubscribed = false;\n window.cancelAnimationFrame(rAFId);\n };\n }, [date]);\n\n return (\n \n {`Today is ${date}`}\n \n );\n}\n\nexport default Clock;\n","const headerTitleStyle = (theme) => ({\n titleWrapper: {\n margin: 0,\n maxWidth: \"40%\",\n flex: \"1 0 auto\",\n display: \"flex\",\n },\n title: {\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n },\n link: {\n color: theme.palette.common.white,\n display: \"flex\",\n alignItems: \"center\",\n marginRight: theme.spacing(1),\n },\n});\n\nexport default headerTitleStyle;\n","import PropTypes from \"prop-types\";\nimport { Link } from \"react-router-dom\";\n\nimport Typography from \"@material-ui/core/Typography\";\nimport ArrowBackIcon from \"@material-ui/icons/ArrowBack\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport headerTitleStyle from \"./header-title.styles\";\n\nconst useStyles = makeStyles(headerTitleStyle);\n\nfunction HeaderTitle({ text, backTo }) {\n const classes = useStyles();\n\n return (\n
\n {backTo === null ? null : (\n \n \n \n )}\n \n \n {text}\n \n \n
\n );\n}\n\nHeaderTitle.propTypes = {\n text: PropTypes.string.isRequired,\n backTo: PropTypes.string,\n};\n\nHeaderTitle.defaultProps = {\n backTo: null,\n};\n\nexport default HeaderTitle;\n","import { useMemo } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { useLocation } from \"react-router-dom\";\nimport { useSelector } from \"react-redux\";\n\nimport { BUDGET_URL } from \"features/budget/budget.sections\";\nimport { getScenarioName } from \"features/budget/wizard/state/wizard.selectors\";\nimport {\n OVERVIEW_URL,\n OVERVIEW_BUDGET,\n} from \"features/overview/state/overview.sections\";\nimport HeaderTitleComponent from \"./header-title.component\";\n\nfunction HeaderTitle({ title, backTo }) {\n const location = useLocation();\n const scenarioName = useSelector(getScenarioName);\n const budgetRegexp = useMemo(() => RegExp(`^${BUDGET_URL}`), []);\n const preparerRegexp = useMemo(\n () => RegExp(`^${OVERVIEW_URL}${OVERVIEW_BUDGET.path}`),\n [],\n );\n\n const text = useMemo(() => {\n if (\n budgetRegexp.test(location.pathname) ||\n preparerRegexp.test(location.pathname)\n ) {\n return scenarioName;\n }\n return title;\n }, [budgetRegexp, location.pathname, preparerRegexp, scenarioName, title]);\n\n return ;\n}\n\nHeaderTitle.propTypes = {\n title: PropTypes.string.isRequired,\n backTo: PropTypes.string,\n};\n\nHeaderTitle.defaultProps = {\n backTo: null,\n};\n\nexport default HeaderTitle;\n","const headerStyle = (theme) => ({\n header: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-evenly\",\n boxSizing: \"border-box\",\n padding: theme.spacing(1.5, 3),\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n subtitle: {\n lineHeight: 1,\n },\n flexRow: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n },\n});\n\nexport default headerStyle;\n","import PropTypes from \"prop-types\";\nimport clsx from \"clsx\";\n\nimport Typography from \"@material-ui/core/Typography\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport sectionType from \"common/proptypes/section.proptypes\";\nimport Stepper from \"features/budget/wizard/views/stepper/stepper.component\";\nimport Clock from \"./clock/clock.component\";\nimport HeaderTitle from \"./header-title.container\";\nimport headerStyle from \"./header.styles\";\n\nconst useStyles = makeStyles(headerStyle);\n\nfunction Header({ section, className }) {\n const classes = useStyles();\n\n return (\n
\n \n {section.subtitle}\n \n
\n \n {section.withDate ? : null}\n {section.withStepper ? : null}\n
\n
\n );\n}\n\nHeader.propTypes = {\n section: sectionType.isRequired,\n className: PropTypes.string,\n};\n\nHeader.defaultProps = {\n className: \"\",\n};\n\nexport default Header;\n","import PropTypes from \"prop-types\";\n\nimport useSection from \"common/routes/sections/sections.hooks\";\nimport HeaderComponent from \"./header.component\";\n\nfunction Header({ className }) {\n const section = useSection();\n\n return ;\n}\n\nHeader.propTypes = {\n className: PropTypes.string,\n};\n\nHeader.defaultProps = {\n className: \"\",\n};\n\nexport default Header;\n","import { appDefaults } from \"common/themes/default.theme\";\n\nconst layoutStyles = (theme) => {\n const { sidebarWidth, headerHeight, footerHeight } = appDefaults;\n\n return {\n wrapper: {\n display: \"flex\",\n flexDirection: \"column-reverse\",\n width: \"100%\",\n [theme.breakpoints.up(\"sm\")]: {\n flexDirection: \"row\",\n },\n },\n sidebar: {\n width: \"100%\",\n height: footerHeight,\n [theme.breakpoints.up(\"sm\")]: {\n width: sidebarWidth,\n height: \"100%\",\n },\n },\n content: {\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n [theme.breakpoints.up(\"sm\")]: {\n width: `calc(100% - ${sidebarWidth}px)`,\n },\n },\n header: {\n height: headerHeight,\n },\n main: {\n width: \"100%\",\n height: `calc(100% - ${sidebarWidth}px)`,\n [theme.breakpoints.up(\"sm\")]: {\n height: `calc(100% - ${headerHeight}px)`,\n },\n },\n };\n};\n\nexport default layoutStyles;\n","import makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport reactChildrenType from \"common/proptypes/react-children.proptypes\";\nimport { SidebarContainer } from \"common/layout/sidebar/sidebar.container\";\nimport Header from \"./header/header.container\";\nimport layoutStyles from \"./layout.styles\";\n\nconst useStyles = makeStyles(layoutStyles);\n\nfunction Layout({ children }) {\n const classes = useStyles();\n\n return (\n
\n \n
\n
\n
{children}
\n
\n
\n );\n}\n\nLayout.propTypes = {\n children: reactChildrenType.isRequired,\n};\n\nexport default Layout;\n","import { lazy, Suspense } from \"react\";\nimport { Redirect, Route, Switch } from \"react-router-dom\";\nimport {\n ADMINISTRATOR_ROLE,\n BUDGET_COORDINATOR_ROLE,\n BUDGET_OWNER_ROLE,\n HR_COORDINATOR_ROLE,\n} from \"common/context/auth/roles\";\nimport {\n SECTION_ANALYSIS,\n SECTION_BUDGET,\n SECTION_BUDGET_SETTINGS,\n SECTION_EMPLOYEE_MANAGEMENT,\n SECTION_OVERVIEW,\n SECTION_USERS,\n SECTION_WORKFORCE_SETTINGS,\n} from \"common/routes/sections/main.sections\";\nimport { FullPageSpinner } from \"common/components/full-page/full-page-spinner\";\nimport { useAuth } from \"common/context/auth/auth-context\";\n\nconst BudgetSettings = lazy(() =>\n import(\"features/budget-settings/views/budget-settings\"),\n);\nconst Overview = lazy(() => import(\"features/overview/overview.component\"));\nconst Budget = lazy(() =>\n import(\"features/budget/wizard/views/budget.container\"),\n);\nconst CoordinatorUser = lazy(() =>\n import(\"features/coordinator-user/views/coordinator-user.consumer\"),\n);\nconst WorkforceSettings = lazy(() =>\n import(\"features/workforce/workforce-settings/views/workforce-settings\"),\n);\nconst EmployeeManagement = lazy(() =>\n import(\"features/workforce/employee-management/views/employee-management\"),\n);\nconst Analysis = lazy(() => import(\"features/analysis/analysis\"));\n\nfunction ProtectedAppRoutes() {\n const { user } = useAuth();\n const userRole = user === null ? null : user.roles[0]?.value ?? null;\n if (userRole === null) {\n return null;\n }\n\n let routes = null;\n if (userRole === ADMINISTRATOR_ROLE) {\n routes = (\n \n \n \n \n \n \n \n \n \n );\n } else if (userRole === BUDGET_COORDINATOR_ROLE) {\n routes = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n } else if (userRole === BUDGET_OWNER_ROLE) {\n routes = (\n \n \n \n \n \n \n );\n } else if (userRole === HR_COORDINATOR_ROLE) {\n routes = (\n \n \n \n \n \n \n \n \n \n );\n }\n\n return }>{routes};\n}\n\nexport default ProtectedAppRoutes;\n","import Layout from \"common/layout/layout.component\";\nimport ProtectedAppRoutes from \"common/routes/protected-app.routes\";\n\nexport function ProtectedApp() {\n return (\n \n \n \n );\n}\n","export default __webpack_public_path__ + \"static/media/logo-long.39c0b993.png\";","export default __webpack_public_path__ + \"static/media/login-image.2068fcd6.png\";","import loginImage from \"common/assets/login-image.png\";\n\nconst loginStyles = (theme) => ({\n wrapper: {\n display: \"grid\",\n \"-ms-grid-rows\": \"1fr 10fr 1fr\",\n gridTemplate: `\n \"header demo\" 1fr\n \"main demo\" 10fr\n \"footer footer\" 1fr `,\n width: \"100%\",\n height: \"100%\",\n },\n header: {\n \"-ms-grid-row\": 1,\n \"-ms-grid-column\": 1,\n gridArea: \"header\",\n minWidth: \"50vw\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n padding: `${theme.spacing(4)}px 0`,\n paddingLeft: theme.spacing(19),\n },\n logo: {\n width: 200,\n },\n mainPanel: {\n \"-ms-grid-row\": 2,\n \"-ms-grid-column\": 1,\n gridArea: \"main\",\n minWidth: \"50vw\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingLeft: \"10%\",\n paddingBottom: \"10%\",\n },\n paper: {\n padding: theme.spacing(3),\n width: 380,\n minHeight: 350,\n backgroundColor: theme.palette.background.paper,\n display: \"flex\",\n flexDirection: \"column\",\n },\n fallBack: {\n padding: theme.spacing(2, 0),\n minHeight: 270,\n },\n demoPanel: {\n \"-ms-grid-row\": 1,\n \"-ms-grid-row-span\": 2,\n \"-ms-grid-column\": 2,\n gridArea: \"demo\",\n minWidth: \"50vw\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: `linear-gradient(to right, rgba(0, 0, 0, 0.85), rgba(0, 0, 0, 0.85)), url(${loginImage})`,\n backgroundPosition: \"center\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n paddingRight: \"20%\",\n paddingBottom: \"7%\",\n },\n demoText: {\n width: 360,\n },\n demoButton: {\n backgroundColor: theme.palette.corporateGreen.main,\n color: theme.palette.common.white,\n \"&:hover\": {\n backgroundColor: theme.palette.corporateGreen.dark,\n },\n marginTop: theme.spacing(2),\n width: 180,\n },\n footer: {\n \"-ms-grid-row\": 3,\n \"-ms-grid-column\": 1,\n \"-ms-grid-column-span\": 2,\n gridArea: \"footer\",\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: theme.spacing(0, 10),\n \"& *\": {\n fontSize: \"inherit\",\n },\n },\n textGroup: {\n display: \"flex\",\n justifyContent: \"space-evenly\",\n \"& :first-child\": {\n marginRight: theme.spacing(3),\n },\n },\n centeredText: {\n textAlign: \"center\",\n },\n smallText: {\n fontSize: \"0.9rem\",\n },\n title: {\n letterSpacing: 0.81,\n fontSize: \"2.25rem\",\n },\n link: {\n color: \"inherit\",\n textDecoration: \"none\",\n \"&:hover\": {\n textDecoration: \"underline\",\n },\n },\n bold: {\n fontWeight: 900,\n },\n subtitle: {\n fontSize: \"1.2rem\",\n },\n});\n\nexport default loginStyles;\n","import makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport logoLong from \"common/assets/logo-long.png\";\nimport loginStyles from \"features/login-screen/login.styles\";\n\nconst useStyles = makeStyles(loginStyles);\n\nfunction Header() {\n const classes = useStyles();\n\n return (\n
\n \"FYIsoft\n
\n );\n}\n\nexport default Header;\n","import makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport ErrorMessage from \"common/components/fallbacks/error-message.component\";\nimport loginStyles from \"features/login-screen/login.styles\";\n\nconst useStyles = makeStyles(loginStyles);\n\nfunction LoginFallback() {\n const classes = useStyles();\n\n return (\n
\n \n
\n );\n}\n\nexport default LoginFallback;\n","var _path, _path2, _path3, _path4;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgMicrosoftIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 48 48\",\n width: \"48px\",\n height: \"48px\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#ff5722\",\n d: \"M6 6H22V22H6z\",\n transform: \"rotate(-180 14 14)\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#4caf50\",\n d: \"M26 6H42V22H26z\",\n transform: \"rotate(-180 34 14)\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#ffc107\",\n d: \"M26 26H42V42H26z\",\n transform: \"rotate(-180 34 34)\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#03a9f4\",\n d: \"M6 26H22V42H6z\",\n transform: \"rotate(-180 14 34)\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgMicrosoftIcon);\nexport default __webpack_public_path__ + \"static/media/microsoft-icon.8edf188c.svg\";\nexport { ForwardRef as ReactComponent };","const loginFormStyles = (theme) => ({\n msSignIn: {\n display: \"flex\",\n marginBottom: theme.spacing(1),\n },\n msSignInButton: {\n maxWidth: \"max-content\",\n },\n form: {\n flexGrow: 1,\n minWidth: 302,\n maxWidth: 328,\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(3),\n },\n button: {\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(2.5),\n padding: theme.spacing(0.7, 0),\n backgroundColor: theme.palette.corporateGreen.main,\n color: theme.palette.common.white,\n \"&:hover\": {\n backgroundColor: theme.palette.corporateGreen.dark,\n },\n },\n field: {\n \"& label.Mui-focused\": {\n color: theme.palette.corporateGreen.main,\n },\n \"& .MuiFilledInput-underline:after\": {\n borderBottomColor: theme.palette.corporateGreen.main,\n },\n },\n backButton: {\n display: \"flex\",\n alignItems: \"center\",\n cursor: \"pointer\",\n \"&:hover\": {\n backgroundColor: theme.palette.grey[\"800\"],\n },\n \"& :first-child\": {\n marginRight: theme.spacing(2),\n },\n },\n});\n\nexport default loginFormStyles;\n","import { Form, useFormikContext } from \"formik\";\n\nimport Button from \"@material-ui/core/Button\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport InputField from \"common/components/form-fields/input/input.container\";\nimport loginFormStyles from \"features/login-screen/login-form/views/login-form.styles\";\n\nconst useStyles = makeStyles(loginFormStyles);\n\nfunction UserIdForm() {\n const classes = useStyles();\n const { isValid, isSubmitting } = useFormikContext();\n return (\n
\n \n \n Next\n \n \n );\n}\n\nexport default UserIdForm;\n","import { object, string } from \"yup\";\n\nconst userIdSchema = object().shape({\n userId: string().ensure().trim().required(\"User ID is required\"),\n});\n\nexport default userIdSchema;\n","/* eslint-disable jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events,jsx-a11y/no-autofocus */\nimport PropTypes from \"prop-types\";\nimport { Form, useFormikContext } from \"formik\";\n\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\nimport ArrowBackIcon from \"@material-ui/icons/ArrowBack\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport PasswordField from \"common/components/form-fields/password.component\";\nimport loginFormStyles from \"features/login-screen/login-form/views/login-form.styles\";\n\nconst useStyles = makeStyles(loginFormStyles);\n\nfunction PasswordForm({ onBackClick: handleBackClick }) {\n const classes = useStyles();\n\n const {\n isValid,\n isSubmitting,\n values: { userId },\n setErrors,\n setFieldValue,\n } = useFormikContext();\n\n const handleBackButtonClick = () => {\n setErrors({});\n setFieldValue(\"userId\", \"\");\n setFieldValue(\"password\", \"\");\n handleBackClick();\n };\n\n return (\n
\n
\n \n {userId}\n
\n \n \n Sign in\n \n \n );\n}\n\nPasswordForm.propTypes = {\n onBackClick: PropTypes.func.isRequired,\n};\n\nexport default PasswordForm;\n","import { object, string } from \"yup\";\n\nconst passwordSchema = object().shape({\n password: string().ensure().trim().required(\"A password is required\"),\n});\n\nexport default passwordSchema;\n","import * as React from \"react\";\nimport { Formik } from \"formik\";\nimport { useMsal } from \"@azure/msal-react\";\n\nimport { API_URL_ERROR } from \"common/constants/config-error-messages.constants\";\nimport { ReactComponent as MicrosoftIcon } from \"common/assets/microsoft-icon.svg\";\nimport UserIdForm from \"features/login-screen/login-form/user-id-form/views/user-id-form.component\";\nimport userIdSchema from \"features/login-screen/login-form/user-id-form/state/user-id-form.validation\";\nimport PasswordForm from \"features/login-screen/login-form/password-form/views/password-form.component\";\nimport passwordSchema from \"features/login-screen/login-form/password-form/state/password-form.validation\";\n\nimport {\n showErrorToast,\n showWarningToast,\n useToastDispatch,\n} from \"common/context/toast/toast-context\";\nimport {\n BFYI_AUTH_TYPE,\n MSAL_AUTH_TYPE,\n} from \"common/context/auth/get-authentication-type\";\nimport { useAuth } from \"common/context/auth/auth-context\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport loginFormStyles from \"features/login-screen/login-form/views/login-form.styles\";\n\nconst useStyles = makeStyles(loginFormStyles);\n\nconst initialValues = { userId: \"\", password: \"\" };\n\nfunction LoginForm() {\n const { accounts } = useMsal();\n\n const classes = useStyles();\n\n const toastDispatch = useToastDispatch();\n\n const { submitUserId, MSALLogin, login, MSALTokenLogin } = useAuth();\n\n const [showPasswordForm, setShowPasswordForm] = React.useState(false);\n\n const handleSubmitLogin = async (setSubmitting, userId, password) => {\n const submitLoginResult = await login({ userId, password });\n if (submitLoginResult instanceof Error) {\n showErrorToast(\n toastDispatch,\n \"An error occurred while trying to sign in\",\n submitLoginResult.message,\n );\n\n setSubmitting(false);\n return;\n }\n\n setSubmitting(false);\n };\n\n async function handleSubmitUserId(setSubmitting, userId) {\n const authenticationTypeResult = await submitUserId(userId);\n if (authenticationTypeResult instanceof Error) {\n const { errorTitle, errorMessage } = API_URL_ERROR;\n\n if (authenticationTypeResult.message === errorTitle) {\n showErrorToast(toastDispatch, errorTitle, errorMessage);\n } else if (\n [\n \"Not Found\",\n \"Failed to fetch\",\n \"NetworkError when attempting to fetch resource.\",\n \"A server with the specified hostname could not be found.\",\n ].includes(authenticationTypeResult.message)\n ) {\n showErrorToast(\n toastDispatch,\n \"Please verify the API URL is set correctly\",\n authenticationTypeResult.message,\n );\n } else {\n showErrorToast(\n toastDispatch,\n \"An error occurred while submitting the user id\",\n authenticationTypeResult.message,\n );\n }\n\n setSubmitting(false);\n return;\n }\n\n if (authenticationTypeResult.validation === false) {\n showWarningToast(\n toastDispatch,\n \"Validation failed while getting the authentication type\",\n authenticationTypeResult.message,\n );\n\n setSubmitting(false);\n return;\n }\n\n if (authenticationTypeResult.authenticationType === MSAL_AUTH_TYPE) {\n const MSALLoginResult = await MSALLogin(userId);\n if (MSALLoginResult instanceof Error) {\n showErrorToast(\n toastDispatch,\n \"An error occurred with the MSAL authentication\",\n MSALLoginResult.message,\n );\n }\n } else if (authenticationTypeResult.authenticationType === BFYI_AUTH_TYPE) {\n setShowPasswordForm(true);\n }\n\n setSubmitting(false);\n }\n\n async function handleSubmit(values, { setSubmitting }) {\n const { userId: userIdInput, password: passwordInput } = values;\n const userId = userIdInput.trim();\n const password = passwordInput.trim();\n\n if (showPasswordForm === false) {\n await handleSubmitUserId(setSubmitting, userId);\n } else {\n await handleSubmitLogin(setSubmitting, userId, password);\n }\n }\n\n async function handleMSTokenLogin() {\n const msalTokenLoginResult = await MSALTokenLogin();\n if (msalTokenLoginResult instanceof Error) {\n showErrorToast(\n toastDispatch,\n \"An error occurred while trying to sign in\",\n msalTokenLoginResult.message,\n );\n }\n }\n\n function handleBackClick() {\n setShowPasswordForm(false);\n }\n\n return (\n <>\n {accounts.length > 0 ? (\n
\n \n \n You have an active Microsoft session\n \n }\n onClick={handleMSTokenLogin}\n fullWidth\n className={classes.msSignInButton}\n >\n Sign in\n \n \n \n
\n ) : null}\n \n {showPasswordForm === false ? (\n \n ) : (\n \n )}\n \n \n );\n}\n\nexport default LoginForm;\n","import Typography from \"@material-ui/core/Typography\";\nimport MaterialLink from \"@material-ui/core/Link\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport ErrorBoundary from \"common/error-boundary/error-boundary.component\";\nimport LoginFallback from \"features/login-screen/login-form/views/login-form.fallback\";\nimport loginStyles from \"features/login-screen/login.styles\";\nimport LoginForm from \"features/login-screen/login-form/views/login-form.component\";\n\nconst useStyles = makeStyles(loginStyles);\n\nfunction MainPanel() {\n const classes = useStyles();\n\n return (\n
\n
\n }>\n \n Welcome back!\n \n \n \n By clicking here, you agree to our \n \n \n Privacy Policy\n \n \n \n \n
\n
\n );\n}\n\nexport default MainPanel;\n","import Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport clsx from \"clsx\";\n\nimport loginStyles from \"features/login-screen/login.styles\";\n\nconst useStyles = makeStyles(loginStyles);\n\nfunction DemoPanel() {\n const classes = useStyles();\n\n return (\n \n );\n}\n\nexport default DemoPanel;\n","import Typography from \"@material-ui/core/Typography\";\nimport Link from \"@material-ui/core/Link\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport appVersion from \"common/config/app-version.config\";\nimport loginStyles from \"features/login-screen/login.styles\";\n\nconst useStyles = makeStyles(loginStyles);\n\nfunction Footer() {\n const classes = useStyles();\n\n return (\n
\n \n \n {`© ${new Date().getFullYear()} FYIsoft, Inc. All Rights Reserved.`}\n \n \n Current version {appVersion}\n \n \n \n \n \n Terms and Conditions\n \n \n \n \n Privacy Policy\n \n \n \n
\n );\n}\n\nexport default Footer;\n","import makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport Header from \"features/login-screen/header.component\";\nimport MainPanel from \"features/login-screen/main-panel.component\";\nimport DemoPanel from \"features/login-screen/demo-panel.component\";\nimport Footer from \"features/login-screen/footer.component\";\nimport loginStyles from \"features/login-screen/login.styles\";\n\nconst useStyles = makeStyles(loginStyles);\n\nfunction Login() {\n const classes = useStyles();\n\n return (\n
\n
\n \n \n
\n
\n );\n}\n\nexport default Login;\n","import { Helmet } from \"react-helmet\";\nimport LoginComponent from \"features/login-screen/login.component\";\n\nexport function Login() {\n return (\n <>\n \n Login\n \n \n \n );\n}\n","import { Helmet } from \"react-helmet\";\n\nimport { ProtectedApp } from \"common/app/protected-app.component\";\nimport { Login } from \"features/login-screen/login.container\";\nimport { useAuth } from \"common/context/auth/auth-context\";\n\nfunction App() {\n const { user } = useAuth();\n\n return (\n <>\n \n {user === null ? : }\n \n );\n}\n\nexport default App;\n","import {\n CHANGE_ROWDEF_LIST_EMPTY,\n CHANGE_SELECTED_ROWDEF,\n RESET_ACCOUNTS_STATE,\n} from \"features/budget/accounts/rdx/accounts.actions\";\n\nconst INITIAL_STATE = {\n rowDefinition: null,\n listEmpty: false,\n};\n\n// eslint-disable-next-line default-param-last\nconst accountsRdxReducer = (state = INITIAL_STATE, action) => {\n const { type, payload } = action;\n\n switch (type) {\n case CHANGE_SELECTED_ROWDEF:\n return {\n ...state,\n rowDefinition: {\n id: payload.rowDefinitionID,\n name: payload.rowDefinitionName,\n },\n };\n case CHANGE_ROWDEF_LIST_EMPTY:\n return {\n ...state,\n listEmpty: payload.empty,\n };\n case RESET_ACCOUNTS_STATE:\n return { ...INITIAL_STATE };\n default:\n return state;\n }\n};\n\nexport default accountsRdxReducer;\n","import {\n CHANGE_SCENARIO_NAME,\n CHANGE_VALID,\n CHANGE_SUBMITTING,\n CHANGE_REQUESTING_NEXT,\n CHANGE_FETCHING,\n CHANGE_CALLING_NEXT_CALLBACK,\n} from \"features/budget/wizard/state/wizard.actions\";\n\nconst INITIAL_STATE = {\n scenarioName: \"\",\n isValid: true,\n isSubmitting: false,\n isRequestingNext: false,\n isFetching: false,\n isCallingNextCallback: false,\n};\n\n// eslint-disable-next-line default-param-last\nconst wizardReducer = (state = INITIAL_STATE, action) => {\n const { type, payload } = action;\n\n switch (type) {\n case CHANGE_SCENARIO_NAME:\n return {\n ...state,\n scenarioName: payload.scenarioName,\n };\n case CHANGE_VALID:\n return {\n ...state,\n isValid: payload.valid,\n };\n case CHANGE_SUBMITTING:\n return {\n ...state,\n isSubmitting: payload.submitting,\n };\n case CHANGE_REQUESTING_NEXT:\n return {\n ...state,\n isRequestingNext: payload.requestingNext,\n };\n case CHANGE_FETCHING:\n return {\n ...state,\n isFetching: payload.fetching,\n };\n case CHANGE_CALLING_NEXT_CALLBACK:\n return {\n ...state,\n isCallingNextCallback: payload.calling,\n };\n default:\n return state;\n }\n};\n\nexport default wizardReducer;\n","import {\n SELECT_ORG,\n SELECT_OWNER,\n RESET_OWNERS_STATE,\n} from \"features/budget/owners/rdx/owners.actions\";\n\nconst INITIAL_STATE = {\n selectedOrg: null,\n selectedOwner: null,\n};\n\n// eslint-disable-next-line default-param-last\nconst ownersReducer = (state = INITIAL_STATE, action) => {\n const { type, payload } = action;\n\n switch (type) {\n case SELECT_ORG:\n return {\n ...state,\n selectedOrg: payload.orgID.toString(),\n selectedOwner: null,\n };\n case SELECT_OWNER:\n return {\n ...state,\n selectedOwner: {\n id: payload.id.toString(),\n name: payload.name,\n },\n };\n case RESET_OWNERS_STATE:\n return { ...INITIAL_STATE };\n default:\n return state;\n }\n};\n\nexport default ownersReducer;\n","import {\n CHANGE_SELECTED_STRUCTURE,\n RESET_STRUCTURES_STATE,\n} from \"features/budget/company-structure/rdx/company-structure.actions\";\n\nconst INITIAL_STATE = {\n companyStructure: null,\n};\n\n// eslint-disable-next-line default-param-last\nconst companyStructureRdxReducer = (state = INITIAL_STATE, action) => {\n const { type, payload } = action;\n\n switch (type) {\n case CHANGE_SELECTED_STRUCTURE:\n return {\n ...state,\n companyStructure: {\n id: payload.structureID,\n name: payload.structureName,\n },\n };\n case RESET_STRUCTURES_STATE:\n return { ...INITIAL_STATE };\n default:\n return state;\n }\n};\n\nexport default companyStructureRdxReducer;\n","import { CHANGE_SELECTED_TEMPLATE } from \"features/budget/templates/rdx/template.actions\";\n\nconst INITIAL_STATE = {\n selectedTemplate: null,\n};\n\n// eslint-disable-next-line default-param-last\nconst templateReducer = (state = INITIAL_STATE, action) => {\n const { type, payload } = action;\n\n switch (type) {\n case CHANGE_SELECTED_TEMPLATE:\n return {\n ...state,\n selectedTemplate: payload.template,\n };\n default:\n return state;\n }\n};\n\nexport default templateReducer;\n","import {\n FAILURE,\n SUCCESS,\n REQUEST,\n FULFILL,\n} from \"common/rdx/reducer-status.constants\";\n\nimport {\n GET_USER_LIST,\n POST_NEW_USER,\n ADD_USER_ROLES,\n DELETE_USER,\n EDIT_USER,\n} from \"features/coordinator-user/state/coordinator-user.actions\";\n\nconst INITIAL_STATE = {\n status: \"\",\n message: null,\n userList: [],\n userDetail: null,\n};\n\n// eslint-disable-next-line default-param-last\nconst getUserListReducer = (state = INITIAL_STATE, action) => {\n const { status, message, payload } = action;\n\n if (status === REQUEST) {\n return {\n ...state,\n status,\n };\n }\n if (status === SUCCESS) {\n return {\n ...state,\n status,\n userList: payload.userList,\n message,\n };\n }\n if (status === FAILURE) {\n return {\n ...state,\n status,\n message,\n };\n }\n if (status === FULFILL) {\n return {\n ...state,\n status,\n };\n }\n\n return state;\n};\n\n// eslint-disable-next-line default-param-last\nconst postNewUserReducer = (state = INITIAL_STATE, action) => {\n const { status, message, payload } = action;\n\n if (status === REQUEST) {\n return {\n ...state,\n status,\n };\n }\n if (status === SUCCESS) {\n return {\n ...state,\n status,\n message,\n userDetail: payload.userData,\n };\n }\n if (status === FAILURE) {\n return {\n ...state,\n status,\n message,\n };\n }\n if (status === FULFILL) {\n return {\n ...state,\n status,\n };\n }\n\n return state;\n};\n\n// eslint-disable-next-line default-param-last\nconst addUserRolesReducer = (state = INITIAL_STATE, action) => {\n const { status, message } = action;\n\n if (status === REQUEST) {\n return {\n ...state,\n status,\n };\n }\n if (status === SUCCESS) {\n return {\n ...state,\n status,\n message,\n };\n }\n if (status === FAILURE) {\n return {\n ...state,\n status,\n message,\n };\n }\n if (status === FULFILL) {\n return {\n ...state,\n status,\n };\n }\n\n return state;\n};\n\n// eslint-disable-next-line default-param-last\nconst deleteUserReducer = (state = INITIAL_STATE, action) => {\n const { status, message } = action;\n\n if (status === REQUEST) {\n return {\n ...state,\n status,\n };\n }\n if (status === SUCCESS) {\n return {\n ...state,\n status,\n message,\n };\n }\n if (status === FAILURE) {\n return {\n ...state,\n status,\n message,\n };\n }\n if (status === FULFILL) {\n return {\n ...state,\n status,\n };\n }\n\n return state;\n};\n\n// eslint-disable-next-line default-param-last\nconst editUserReducer = (state = INITIAL_STATE, action) => {\n const { status, message } = action;\n\n if (status === REQUEST) {\n return {\n ...state,\n status,\n };\n }\n if (status === SUCCESS) {\n return {\n ...state,\n status,\n message,\n };\n }\n if (status === FAILURE) {\n return {\n ...state,\n status,\n message,\n };\n }\n if (status === FULFILL) {\n return {\n ...state,\n status,\n };\n }\n\n return state;\n};\n\n// eslint-disable-next-line default-param-last\nconst coordinatorUserReducer = (state = INITIAL_STATE, action) => {\n const { type } = action;\n\n if (type === GET_USER_LIST) {\n return getUserListReducer(state, action);\n }\n if (type === POST_NEW_USER) {\n return postNewUserReducer(state, action);\n }\n if (type === ADD_USER_ROLES) {\n return addUserRolesReducer(state, action);\n }\n if (type === DELETE_USER) {\n return deleteUserReducer(state, action);\n }\n if (type === EDIT_USER) {\n return editUserReducer(state, action);\n }\n\n return state;\n};\n\nexport default coordinatorUserReducer;\n","import type { ObjectLike } from \"common/types/common-types\";\n\ntype TreeNode = ObjectLike & {\n children?: TreeNode[];\n};\n\nexport function getAllNodesCount(root: TreeNode) {\n let count = 0;\n\n function recurse(node: TreeNode) {\n count += 1;\n if (Array.isArray(node.children)) {\n for (const child of node.children) {\n recurse(child);\n }\n }\n }\n\n recurse(root);\n\n return count;\n}\n","import {\n ADD_ASSIGNMENTS,\n CHANGE_ASSIGNEE_ID,\n CHANGE_ASSIGNER_ID,\n CHANGE_ASSIGNMENT_MODAL_OPEN,\n CHANGE_ITEMS_LIST,\n CHANGE_PARENTS_MAP,\n CHANGE_ROOT_NODE,\n REMOVE_ASSIGNMENT,\n RESET_ASSIGNMENTS,\n SET_ASSIGNMENTS,\n} from \"features/budget/wizard/state/wizard-assignment.actions\";\nimport { getAllNodesCount } from \"common/utils/tree/get-all-nodes-count\";\n\nconst INITIAL_STATE = {\n assignmentModalOpen: false,\n assigneeId: null,\n assignerId: null,\n parentsMap: null,\n rootNode: null,\n assignments: null,\n itemsList: [],\n total: 0,\n};\n\n// eslint-disable-next-line default-param-last\nconst wizardAssignmentReducer = (state = INITIAL_STATE, action) => {\n const { type, payload } = action;\n\n switch (type) {\n case CHANGE_ASSIGNMENT_MODAL_OPEN: {\n return {\n ...state,\n assignmentModalOpen: payload.open,\n };\n }\n case CHANGE_ASSIGNEE_ID: {\n return {\n ...state,\n assigneeId: payload.id,\n };\n }\n case CHANGE_ASSIGNER_ID: {\n return {\n ...state,\n assignerId: payload.id,\n };\n }\n case CHANGE_PARENTS_MAP: {\n return {\n ...state,\n parentsMap: new Map(payload.parentsMap),\n };\n }\n case CHANGE_ROOT_NODE: {\n const total = getAllNodesCount(payload.node);\n return {\n ...state,\n rootNode: { ...payload.node },\n total,\n };\n }\n case ADD_ASSIGNMENTS: {\n return {\n ...state,\n assignments: {\n ...state.assignments,\n ...payload.assignments,\n },\n };\n }\n case SET_ASSIGNMENTS: {\n return {\n ...state,\n assignments: payload.assignments,\n };\n }\n case CHANGE_ITEMS_LIST: {\n return {\n ...state,\n itemsList: [...payload.list],\n };\n }\n case REMOVE_ASSIGNMENT: {\n const newAssignments = { ...state.assignments };\n delete newAssignments[payload.id];\n\n return {\n ...state,\n assignments: { ...newAssignments },\n };\n }\n case RESET_ASSIGNMENTS: {\n return { ...INITIAL_STATE };\n }\n default:\n return state;\n }\n};\n\nexport default wizardAssignmentReducer;\n","import { SET_PARENTS_TREE } from \"features/overview-budget/rdx/scenario-details.actions\";\n\nconst INITIAL_STATE = {\n parentsTree: null,\n};\n\n// eslint-disable-next-line default-param-last\nconst scenarioDetailsReducer = (state = INITIAL_STATE, action) => {\n const { type, payload } = action;\n\n switch (type) {\n case SET_PARENTS_TREE:\n return {\n ...state,\n parentsTree: new Map([...payload.parentsTree]),\n };\n default:\n return state;\n }\n};\n\nexport default scenarioDetailsReducer;\n","import {\n CHANGE_IS_VALID,\n SET_ON_SUBMIT,\n SET_DIALOG,\n RESET_DIALOG,\n} from \"common/rdx/feedback/feedback.actions\";\n\nexport const INITIAL_STATE = {\n dialog: {\n type: null,\n open: false,\n onSubmit: null,\n isValid: false,\n onFormikCallback: null,\n },\n};\n\n// eslint-disable-next-line default-param-last\nfunction FormatReducer(state = INITIAL_STATE, action) {\n const { type, payload } = action;\n\n switch (type) {\n case CHANGE_IS_VALID:\n return {\n ...state,\n dialog: {\n ...state.dialog,\n isValid: payload,\n },\n };\n case SET_ON_SUBMIT:\n return {\n ...state,\n dialog: {\n ...state.dialog,\n onSubmit: payload,\n },\n };\n case SET_DIALOG:\n return {\n ...state,\n dialog: {\n ...state.dialog,\n ...payload,\n },\n };\n case RESET_DIALOG:\n return {\n ...state,\n dialog: INITIAL_STATE.dialog,\n };\n default:\n return state;\n }\n}\n\nexport default FormatReducer;\n","import { combineReducers } from \"redux\";\n\nimport accountsRdxReducer from \"features/budget/accounts/rdx/accounts-rdx.reducer\";\nimport budgetReducer from \"features/budget/wizard/state/wizard.reducer\";\nimport ownersReducer from \"features/budget/owners/rdx/owners.reducer\";\nimport companyStructureRdxReducer from \"features/budget/company-structure/rdx/company-structure-rdx.reducer\";\nimport templateReducer from \"features/budget/templates/rdx/template.reducer\";\nimport coordinatorUserReducer from \"features/coordinator-user/state/coordinator-user.reducer\";\nimport wizardAssignmentReducer from \"features/budget/wizard/state/wizard-assignment.reducer\";\nimport scenarioDetailsReducer from \"features/overview-budget/rdx/scenario-details.reducer\";\nimport feedbackFormReducer from \"common/rdx/feedback/feedback.reducer\";\n\nconst rootReducer = combineReducers({\n accounts: accountsRdxReducer,\n budget: budgetReducer,\n owners: ownersReducer,\n structure: companyStructureRdxReducer,\n templates: templateReducer,\n users: coordinatorUserReducer,\n wizardAssignments: wizardAssignmentReducer,\n scenarioDetails: scenarioDetailsReducer,\n feedback: feedbackFormReducer,\n});\n\nexport default rootReducer;\n","import { applyMiddleware, compose, createStore } from \"redux\";\nimport thunk from \"redux-thunk\";\n\nimport rootReducer from \"common/rdx/root.reducer\";\n\n// eslint-disable-next-line no-underscore-dangle\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\nexport default createStore(\n rootReducer,\n composeEnhancers(applyMiddleware(thunk)),\n);\n","import type { NavigationOptions } from \"@azure/msal-browser\";\nimport { NavigationClient } from \"@azure/msal-browser\";\nimport type { History } from \"history\";\n\n/**\n * This is an example for overriding the default function MSAL uses to navigate to other urls in your webpage\n */\nexport class CustomNavigationClient extends NavigationClient {\n private history: History;\n\n constructor(history: History) {\n super();\n this.history = history;\n }\n\n /**\n * Navigates to other pages within the same web application\n * You can use the useHistory hook provided by react-router-dom to take advantage of client-side routing\n * @param url\n * @param options\n */\n override async navigateInternal(url: string, options: NavigationOptions) {\n const relativePath = url.replace(window.location.origin, \"\");\n if (options.noHistory) {\n this.history.replace(relativePath);\n } else {\n this.history.push(relativePath);\n }\n\n return false;\n }\n}\n","import * as React from \"react\";\nimport { MsalProvider } from \"@azure/msal-react\";\nimport type { Configuration } from \"@azure/msal-browser\";\nimport { PublicClientApplication } from \"@azure/msal-browser\";\nimport type { History } from \"history\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { CustomNavigationClient } from \"common/context/auth/msal/navigation-client\";\nimport { usePromise } from \"common/hooks/use-promise\";\nimport { rest } from \"common/api-client/rest\";\nimport apiURL from \"common/config/api-url.config\";\nimport { FullPageSpinner } from \"common/components/full-page/full-page-spinner\";\nimport { FullPageErrorFallback } from \"common/components/full-page/full-page-error-fallback\";\n\ntype MSALLSettings = {\n clientId: string;\n tenantId: string;\n};\n\ntype SuccessfulMSALSettingsResponse = MSALLSettings & {\n validation: true;\n};\ntype MSALSettingsResponse =\n | SuccessfulMSALSettingsResponse\n | { validation: false; message?: string };\n\nasync function getMSALSettings(history: History) {\n const result = await rest(\"auth/msalSettings\", {\n baseURL: apiURL,\n });\n if (result instanceof Error) {\n throw result;\n }\n if (result.kind === \"empty\") {\n throw new Error(\"Response does not have a body\");\n }\n if (!result.body.validation) {\n throw new Error(`Validation failed: ${result.body.message}`);\n }\n\n const MSALConfiguration: Configuration = {\n auth: {\n clientId: result.body.clientId,\n authority: `https://login.microsoftonline.com/${result.body.tenantId}`,\n navigateToLoginRequestUrl: false,\n },\n };\n\n const pca = new PublicClientApplication(MSALConfiguration);\n\n const navigationClient = new CustomNavigationClient(history);\n pca.setNavigationClient(navigationClient);\n\n return pca;\n}\n\nexport function CustomMSALProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const history = useHistory();\n\n const { promiseState, run } = usePromise();\n\n React.useEffect(() => {\n const MSALSettingsPromise = getMSALSettings(history);\n run(MSALSettingsPromise);\n }, [history, run]);\n\n if (promiseState.status === \"pending\" || promiseState.status === \"idle\") {\n return ;\n }\n\n if (promiseState.status === \"rejected\") {\n return ;\n }\n\n if (promiseState.status === \"resolved\") {\n return {children};\n }\n\n return (\n
If this message is displayed there is an unhandled promise status
\n );\n}\n","import * as React from \"react\";\nimport { QueryClient, QueryClientProvider } from \"react-query\";\nimport { ReactQueryDevtools } from \"react-query/devtools\";\nimport { HashRouter as Router } from \"react-router-dom\";\nimport { Provider as ReduxProvider } from \"react-redux\";\nimport { ThemeProvider } from \"@material-ui/core/styles\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\n\nimport { ToastProvider } from \"common/context/toast/toast-context\";\nimport theme from \"common/themes/default.theme\";\nimport store from \"common/rdx/store.config\";\nimport { CustomMSALProvider } from \"common/context/auth/msal/msal-context\";\nimport { AuthProvider } from \"common/context/auth/auth-context\";\n\nconst queryClient = new QueryClient();\n\nfunction AppProviders({ children }) {\n return (\n \n \n \n \n \n \n\n \n {children}\n \n \n \n \n \n\n \n \n );\n}\n\nexport default AppProviders;\n","/* eslint-disable import/no-extraneous-dependencies */\nimport \"react-app-polyfill/ie11\";\nimport \"react-app-polyfill/stable\";\nimport \"abortcontroller-polyfill/dist/polyfill-patch-fetch\";\nimport matchAll from \"string.prototype.matchall\";\nimport allSettled from \"promise.allsettled\";\n\nimport ReactDOM from \"react-dom\";\n\nimport \"@grapecity/wijmo.styles/wijmo.css\";\nimport * as wjcCore from \"@grapecity/wijmo\";\n\nimport App from \"common/app/app.component\";\nimport \"./index.css\";\nimport AppProviders from \"common/context/app-providers\";\n\nwjcCore.setLicenseKey(\n \"flexi,715154219476768#B0M6ZRrI4Yn94aWB7VK5GNnJEeB5mUtJXZvw6KCxEcmNmbuVjMslld8YkSLdjajxWQSRUSzR4Y5F5czNWRypldnJEaoBnQEJVaGFDelZTYmZnN4xESnhGe9Q4Zz3mSyhzL93UNZdlavh7QJNVUrl7cItCd42kTMxUO9k5QnRFakNTUwdXS8YGM6EXcvYlc52WayNkZ7RDcjZDZWtWRvUzTLhUY6NmWCdEOwYXeOJXOaR4dGFWS6U6UhtEZqFnY8NnUBlUV4k7Nx8WaxMTQKRWRzdmQntkTsxmUz4mRVJHesVzZ8oGVFh7Vwd7c8RUUadXNOpUazVmZ5plc7tWVUBFUyljVvNkI0IyUiwiIGZkQ4AzM5IiOigkIsgDO8UDN5IDO0IicfJye35XX3JSSwIjUiojIDJCLi86bpNnblRHeFBCI4VWZoNFelxmRg2Wbql6ViojIOJyes4nIzMEMCJiOiMkIsISZy36Qg2Wbql6ViojIOJyebpjIkJHUiwiIxATOwUDMgcDMwEDMyAjMiojI4J7QiwiIlJXY7RnZvNFIsFmbvlGdh9mclRnbJlGelxmRiojIh94QiwiI8YzN6cDN9EjM4UTM5EzNiojIklkIs4nIzYHMyAjMiojIyVmdiwSZzxWYmpjIyNHZisnOiwmbBJye0ICRiwiI34TUkpmRoFTU7olSM36ZzUDUCV7cydDV584Qat4QStkMvMnbwIzRLlmYzpndLpkbzIkWvU6LM5UW6oUTvR4ZM3mSBJTMzsmYEZnaVJlbUFlTNFkM\",\n);\n\nmatchAll.shim();\nallSettled.shim();\n\nif (process.env.NODE_ENV === \"development\") {\n import(\"common/mocks/browser\").then(({ worker }) => {\n (async () => {\n // see https://mswjs.io/docs/getting-started/integrate/browser#using-homepage-property-in-packagejson\n if (!window.location.pathname.endsWith(\"/\")) {\n window.location.pathname = `${window.location.pathname}/`;\n return;\n }\n\n await worker.start({\n serviceWorker: {\n url: `${window.location.pathname}mockServiceWorker.js`,\n },\n onUnhandledRequest: \"bypass\",\n });\n })();\n });\n}\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\"),\n);\n","// @ts-ignore\nimport jwt from \"jsonwebtoken\";\n\nimport { getTokenCookie } from \"common/context/auth/token-cookie\";\n\nconst ROLES_KEY =\n \"http://schemas.microsoft.com/ws/2008/06/identity/claims/role\";\n\nexport const ADMINISTRATOR_ROLE = \"Administrator\";\nexport const ADMINISTRATOR = {\n value: ADMINISTRATOR_ROLE,\n label: \"Administrator\",\n};\n\nexport const BUDGET_COORDINATOR_ROLE = \"Budget_Coordinator\";\nexport const BUDGET_COORDINATOR = {\n value: BUDGET_COORDINATOR_ROLE,\n label: \"Budget Coordinator\",\n};\n\nexport const BUDGET_OWNER_ROLE = \"Budget_Owner\";\nexport const BUDGET_OWNER = {\n value: BUDGET_OWNER_ROLE,\n label: \"Budget Owner\",\n};\n\nexport const HR_COORDINATOR_ROLE = \"HR_Coordinator\";\nexport const HR_COORDINATOR = {\n value: HR_COORDINATOR_ROLE,\n label: \"HR Coordinator\",\n};\n\nexport function getRole() {\n const payload = jwt.decode(getTokenCookie());\n const payloadElement:\n | typeof ADMINISTRATOR\n | typeof BUDGET_COORDINATOR_ROLE\n | typeof BUDGET_OWNER_ROLE\n | typeof HR_COORDINATOR_ROLE\n | undefined = payload?.[ROLES_KEY];\n\n return payloadElement ?? \"\";\n}\n\nexport function isBudgetCoordinator() {\n return getRole() === BUDGET_COORDINATOR_ROLE;\n}\n\nexport function isBudgetOwner() {\n return getRole() === BUDGET_OWNER_ROLE;\n}\n\nexport function isHRCoordinator() {\n return getRole() === HR_COORDINATOR_ROLE;\n}\n","import {\n getTokenCookie,\n hasTokenCookie,\n} from \"common/context/auth/token-cookie\";\nimport { rest } from \"common/api-client/rest\";\nimport apiURL from \"common/config/api-url.config\";\n\nexport type UserInfoResponse = {\n id: number;\n name: string;\n email: string;\n token: string;\n roles: {\n value: string;\n label: string;\n }[];\n};\n\nexport type UserInfo = Omit | null;\n\ntype SuccessfulUserResponse = UserInfoResponse & { validation: true };\nexport type TokenValidationResponse =\n | SuccessfulUserResponse\n | { validation: false; message?: string };\n\nexport async function tokenValidation() {\n if (!hasTokenCookie()) {\n return null;\n }\n\n const result = await rest(\"auth/tokenValidation\", {\n baseURL: apiURL,\n headers: {\n Authorization: `Bearer ${getTokenCookie()}`,\n },\n });\n\n if (result instanceof Error) {\n return null;\n }\n if (result.kind === \"empty\") {\n throw new Error(\"Response does not have a body\");\n }\n\n if (!result.body.validation) {\n return null;\n }\n\n const {\n body: { id, name, email, roles },\n } = result;\n\n const user: UserInfo = {\n id,\n name,\n email,\n roles,\n };\n return user;\n}\n","import { rest } from \"common/api-client/rest\";\nimport apiURL from \"common/config/api-url.config\";\nimport type { UserInfoResponse } from \"common/context/auth/token-validation\";\nimport type { Result } from \"common/utils/result\";\n\ntype SubmitLoginResponse =\n | (UserInfoResponse & { validation: true })\n | { validation: false; message?: string };\n\nexport type SubmitLoginParams = {\n userId: string;\n password?: string;\n msalResponse?: string | undefined;\n};\n\nexport async function submitLoginRequest({\n userId,\n password = \"\",\n msalResponse,\n}: SubmitLoginParams): Promise> {\n const result = await rest(\"auth/login\", {\n baseURL: apiURL,\n body: {\n userId,\n password,\n ...(msalResponse === undefined ? {} : { msalResponse }),\n },\n });\n\n if (result instanceof Error) {\n return result;\n }\n if (result.kind === \"empty\") {\n return new Error(\"Response does not have a body\");\n }\n if (!result.body.validation) {\n return new Error(`Validation failed: ${result.body.message}`);\n }\n\n return result.body;\n}\n","import type { IPublicClientApplication } from \"@azure/msal-browser\";\nimport type { AuthenticationResult } from \"@azure/msal-common\";\nimport type { Result } from \"common/utils/result\";\n\nexport async function MSALLoginPopup(\n MSALInstance: IPublicClientApplication,\n userId: string,\n): Promise> {\n MSALInstance.setActiveAccount(null);\n\n try {\n return await MSALInstance.loginPopup({\n scopes: [\"user.read\"],\n prompt: \"login\",\n loginHint: userId,\n });\n } catch (error) {\n if (error instanceof Error) {\n return error;\n }\n\n return new Error(\"An error occurred with the MSAL authentication\");\n }\n}\n","import {\n ASSUMPTIONS_STORE,\n BUDGET_IDX_KEYPATH,\n BUDGET_IDX_NAME,\n BUDGET_STORE,\n DUE_DATES_STORE,\n TEMPLATES_STORE,\n} from \"features/budget/budget.constants\";\nimport {\n BUDGET_FILLING_STORE,\n BUDGET_DETAILING_STORE,\n} from \"features/overview-budget/state/budget.utils\";\n\nconst idbStores = [\n {\n storeName: BUDGET_STORE,\n },\n {\n storeName: DUE_DATES_STORE,\n keyPath: \"id\",\n index: {\n name: BUDGET_IDX_NAME,\n keyPath: BUDGET_IDX_KEYPATH,\n },\n },\n {\n storeName: TEMPLATES_STORE,\n keyPath: \"id\",\n index: {\n name: BUDGET_IDX_NAME,\n keyPath: BUDGET_IDX_KEYPATH,\n },\n },\n {\n storeName: ASSUMPTIONS_STORE,\n keyPath: \"id\",\n index: {\n name: BUDGET_IDX_NAME,\n keyPath: BUDGET_IDX_KEYPATH,\n },\n },\n {\n storeName: BUDGET_FILLING_STORE,\n },\n {\n storeName: BUDGET_DETAILING_STORE,\n },\n];\n\nexport default idbStores;\n","import type { IPublicClientApplication } from \"@azure/msal-browser\";\nimport type { AuthenticationResult } from \"@azure/msal-common\";\nimport type { Result } from \"common/utils/result\";\n\nexport async function MSALAcquireTokenPopup(\n MSALInstance: IPublicClientApplication,\n): Promise> {\n try {\n return await MSALInstance.acquireTokenPopup({\n scopes: [\"user.read\"],\n prompt: \"select_account\",\n });\n } catch (error) {\n if (error instanceof Error) {\n return error;\n }\n\n return new Error(\"An error occurred while acquiring a MSAL token\");\n }\n}\n","import { rest } from \"common/api-client/rest\";\nimport apiURL from \"common/config/api-url.config\";\nimport type {\n UserInfoResponse,\n TokenValidationResponse,\n} from \"common/context/auth/token-validation\";\nimport type { Result } from \"common/utils/result\";\n\nexport async function msalLoginRequest(\n msalResponse: string,\n): Promise> {\n const result = await rest(\"auth/login/ms\", {\n baseURL: apiURL,\n body: {\n msalResponse,\n },\n });\n\n if (result instanceof Error) {\n return result;\n }\n if (result.kind === \"empty\") {\n return new Error(\"Response does not have a body\");\n }\n if (!result.body.validation) {\n return new Error(`Validation failed: ${result.body.message}`);\n }\n\n return result.body;\n}\n","import * as React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useMsal } from \"@azure/msal-react\";\n\nimport { usePromise } from \"common/hooks/use-promise\";\nimport {\n deleteTokenCookie,\n setTokenCookie,\n} from \"common/context/auth/token-cookie\";\nimport { FullPageSpinner } from \"common/components/full-page/full-page-spinner\";\nimport type {\n UserInfo,\n UserInfoResponse,\n} from \"common/context/auth/token-validation\";\nimport { tokenValidation } from \"common/context/auth/token-validation\";\nimport { getAuthenticationType } from \"common/context/auth/get-authentication-type\";\nimport { FullPageErrorFallback } from \"common/components/full-page/full-page-error-fallback\";\nimport type { SubmitLoginParams } from \"common/context/auth/submit-login-request\";\nimport { submitLoginRequest } from \"common/context/auth/submit-login-request\";\nimport { MSALLoginPopup } from \"common/context/auth/msal/msal-login-popup\";\nimport isMSLegacy from \"common/utils/is-ms-legacy\";\nimport { createIDBStores } from \"common/utils/storage/idb\";\nimport idbStores from \"common/utils/storage/idb-stores\";\nimport { APP_VERSION_ERROR } from \"common/constants/config-error-messages.constants\";\nimport { setUser, setUserId } from \"common/utils/user-data\";\nimport { MSALAcquireTokenPopup } from \"common/context/auth/msal/msal-acquire-token-popup\";\nimport { msalLoginRequest } from \"common/context/auth/msal/msal-login-request\";\nimport type { Result } from \"common/utils/result\";\n\ntype LoginType = ({\n userId,\n password,\n msalResponse,\n}: SubmitLoginParams) => Promise>;\n\ntype AuthContextType =\n | {\n user: UserInfo;\n submitUserId: typeof getAuthenticationType;\n login: LoginType;\n MSALLogin: (userId: string) => ReturnType;\n MSALTokenLogin: () => Promise>;\n logout: () => void;\n }\n | undefined;\nconst AuthContext = React.createContext(undefined);\nAuthContext.displayName = \"AuthContext\";\n\nasync function setDataAfterLogin(\n userInfoResponse: UserInfoResponse,\n setData: (data: UserInfo) => void,\n): Promise> {\n // TODO: remove idb\n if (isMSLegacy() === false) {\n const error = await createIDBStores(idbStores);\n if (error instanceof Error) {\n return new Error(\n `${error}. ${APP_VERSION_ERROR.errorTitle}. ${APP_VERSION_ERROR.errorMessage}`,\n );\n }\n }\n\n const { id, name, email, roles, token } = userInfoResponse;\n\n // TODO: remove these two lines\n setUserId(id);\n setUser({ name, email });\n\n setTokenCookie(token);\n\n setData({\n id,\n name,\n email,\n roles,\n });\n\n return null;\n}\n\nexport function AuthProvider({ children }: { children: React.ReactNode }) {\n const { instance: MSALInstance } = useMsal();\n const history = useHistory();\n\n const { promiseState, run, setData } = usePromise();\n\n React.useEffect(() => {\n const userPromise = tokenValidation();\n run(userPromise);\n }, [run]);\n\n const submitUserId = React.useCallback(\n (userId: string) => getAuthenticationType(userId),\n [],\n );\n\n const login = React.useCallback(\n async ({\n userId,\n password = \"\",\n msalResponse,\n }: SubmitLoginParams): Promise> => {\n const loginResult = await submitLoginRequest({\n userId,\n password,\n msalResponse,\n });\n if (loginResult instanceof Error) {\n return loginResult;\n }\n\n const setDataResult = await setDataAfterLogin(loginResult, setData);\n if (setDataResult instanceof Error) {\n return setDataResult;\n }\n\n return null;\n },\n [setData],\n );\n\n const MSALLogin = React.useCallback(\n async (userId: string) => {\n const msalResult = await MSALLoginPopup(MSALInstance, userId);\n if (msalResult instanceof Error) {\n return msalResult;\n }\n\n return login({ userId, msalResponse: JSON.stringify(msalResult) });\n },\n [MSALInstance, login],\n );\n\n const MSALTokenLogin = React.useCallback(async () => {\n const msalTokenResult = await MSALAcquireTokenPopup(MSALInstance);\n if (msalTokenResult instanceof Error) {\n return msalTokenResult;\n }\n\n const msalLoginResult = await msalLoginRequest(\n JSON.stringify(msalTokenResult),\n );\n if (msalLoginResult instanceof Error) {\n return msalLoginResult;\n }\n\n const setDataResult = await setDataAfterLogin(msalLoginResult, setData);\n if (setDataResult instanceof Error) {\n return setDataResult;\n }\n\n return null;\n }, [MSALInstance, setData]);\n\n const logout = React.useCallback(() => {\n deleteTokenCookie();\n\n MSALInstance.setActiveAccount(null);\n\n setData(null);\n history.push(\"/\");\n }, [MSALInstance, history, setData]);\n\n const value = React.useMemo(\n () => ({\n user: promiseState.status === \"resolved\" ? promiseState.data : null,\n submitUserId,\n login,\n MSALLogin,\n MSALTokenLogin,\n logout,\n }),\n [promiseState, submitUserId, login, MSALLogin, MSALTokenLogin, logout],\n );\n\n if (promiseState.status === \"pending\" || promiseState.status === \"idle\") {\n return ;\n }\n\n if (promiseState.status === \"rejected\") {\n return ;\n }\n\n if (promiseState.status === \"resolved\") {\n return (\n {children}\n );\n }\n\n return (\n
If this message is displayed there is an unhandled promise status
\n );\n}\n\nexport function useAuth() {\n const context = React.useContext(AuthContext);\n\n if (context === undefined) {\n throw new Error(\"useAuth must be used within a AuthProvider\");\n }\n\n return context;\n}\n","import {\n SECTION_EMPLOYEE_MANAGEMENT,\n SECTION_WORKFORCE_SETTINGS,\n} from \"common/routes/sections/main.sections\";\n\nexport const WORKFORCE_SETTINGS_URL = `/${SECTION_WORKFORCE_SETTINGS.path}`;\nexport const EMPLOYEE_MANAGEMENT_URL = `/${SECTION_EMPLOYEE_MANAGEMENT.path}`;\n\nexport const WORKFORCE_DATA_PREVIEW = {\n path: \"data-preview/\",\n backTo: null,\n subtitle: \"Import Data Preview\",\n title: \"Import Data Preview\",\n withStepper: false,\n withDate: false,\n};\n\nexport const WORKFORCE_TEMPLATE_SETUP = {\n path: \"template-setup/\",\n backTo: null,\n subtitle: \"Import Template Setup\",\n title: \"Import Template Setup\",\n withStepper: false,\n withDate: false,\n};\n\nexport const EMPLOYEE_MANAGEMENT_PATH = `/${SECTION_EMPLOYEE_MANAGEMENT.path}`;\nexport const DATA_PREVIEW_PATH = `/${SECTION_EMPLOYEE_MANAGEMENT.path}${WORKFORCE_DATA_PREVIEW.path}`;\nexport const TEMPLATE_SETUP_PATH = `/${SECTION_EMPLOYEE_MANAGEMENT.path}${WORKFORCE_TEMPLATE_SETUP.path}`;\n","import { SECTION_OVERVIEW } from \"common/routes/sections/main.sections\";\n\nexport const OVERVIEW_URL = `/${SECTION_OVERVIEW.path}`;\n\nexport const OVERVIEW = {\n path: \"\",\n params: \"\",\n subtitle: \"Overview\",\n title: \"Dashboard\",\n withStepper: false,\n withDate: true,\n};\n\nexport const OVERVIEW_BUDGET = {\n path: \"budget/\",\n params: \":scenarioId?/\",\n backTo: OVERVIEW_URL,\n subtitle: \"Project Status\",\n title: \"\",\n withStepper: false,\n withDate: true,\n};\n","export const APP_VERSION_ERROR = {\n errorTitle: \"The app version is not correct\",\n errorMessage:\n \"Please clear cache or check the appVersion property in the 'config.js' file is correct.\",\n};\n\nexport const API_URL_ERROR = {\n errorTitle: \"API URL not found\",\n errorMessage: \"Please define the apiUrl property in the config.js file\",\n};\n","export const initialState = { data: null, loading: true, error: null };\nexport const PENDING = \"PENDING\";\nexport const FULFILLED = \"FULFILLED\";\nexport const REJECTED = \"REJECTED\";\n\nexport function init(initialResponse) {\n return { ...initialResponse };\n}\n\nfunction responseReducer(state, action) {\n const { type, payload } = action;\n\n switch (type) {\n case PENDING:\n return { ...initialState };\n case FULFILLED:\n return { data: payload, loading: false, error: null };\n case REJECTED:\n return { data: null, loading: false, error: payload };\n default:\n throw new Error(\"Unknown action type\");\n }\n}\n\nexport default responseReducer;\n","// Budgets status Ids\nexport const ACTIVE = 1;\nexport const IN_REVIEW = 2;\nexport const REJECTED = 3;\nexport const APPROVED = 4;\nexport const WITH_ERROR = 5;\n","import PropTypes from \"prop-types\";\n\nconst componentType = PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.node,\n PropTypes.func,\n]);\n\nexport default componentType;\n","export const GET = \"get\";\nexport const POST = \"post\";\nexport const PUT = \"put\";\nexport const PATCH = \"patch\";\nexport const DELETE = \"delete\";\n","export default \"data:image/png;base64,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\"","import logo from \"common/assets/logo-long-small.png\";\n\nexport function FullPageSpinner() {\n return (\n \n \n

Loading...

\n \n );\n}\n","// Set via the public/config.js file\nconst { appVersion } = window.APP_CONFIG;\n\nexport default appVersion;\n","import {\n REQUEST,\n FAILURE,\n SUCCESS,\n FULFILL,\n} from \"common/rdx/reducer-status.constants\";\n\nexport const GET_USER_LIST = \"GET_USER_LIST\";\nexport const POST_NEW_USER = \"POST_NEW_USER\";\nexport const ADD_USER_ROLES = \"ADD_USER_ROLES\";\nexport const DELETE_USER = \"DELETE_USER\";\nexport const EDIT_USER = \"EDIT_USER\";\n\nexport const USER_ADDED_MSG = \"user added successfully\";\nexport const ROLES_ADDED_MSG = \"roles added successfully\";\n\n// GET USER LIST ACTIONS\nexport const getUserListAction = (actionCallback) => async (dispatch) => {\n dispatch({\n type: GET_USER_LIST,\n status: REQUEST,\n });\n\n let userList;\n try {\n userList = await actionCallback();\n } catch (error) {\n dispatch({\n type: GET_USER_LIST,\n status: FAILURE,\n message: error,\n });\n return;\n }\n\n dispatch({\n type: GET_USER_LIST,\n status: SUCCESS,\n payload: { userList },\n message: null,\n });\n};\n\nexport const cancelGetUserListAction = (cancelCallback) => (dispatch) => {\n cancelCallback();\n dispatch({\n type: GET_USER_LIST,\n status: FULFILL,\n });\n};\n\n// POST USER ACTIONS\nexport const postNewUserAction =\n (postUserCallback, userFormValues) => async (dispatch) => {\n dispatch({\n type: POST_NEW_USER,\n status: REQUEST,\n });\n\n let userData;\n try {\n userData = await postUserCallback(userFormValues);\n } catch (error) {\n dispatch({\n type: POST_NEW_USER,\n status: FAILURE,\n message: error,\n });\n return null;\n }\n\n dispatch({\n type: POST_NEW_USER,\n status: SUCCESS,\n message: USER_ADDED_MSG,\n payload: { userData },\n });\n return userData.id;\n };\n\nexport const cancelPostNewUserAction = (cancelCallback) => (dispatch) => {\n cancelCallback();\n dispatch({\n type: POST_NEW_USER,\n status: FULFILL,\n });\n};\n\n// ADD USER ROLES ACTIONS\nexport const addUserRolesAction =\n (actionCallback, userRoles, userId) => async (dispatch) => {\n if (userId) {\n dispatch({\n type: ADD_USER_ROLES,\n status: REQUEST,\n });\n\n try {\n await actionCallback(userRoles, userId);\n } catch (error) {\n dispatch({\n type: ADD_USER_ROLES,\n status: FAILURE,\n message: error,\n });\n return;\n }\n\n dispatch({\n type: ADD_USER_ROLES,\n status: SUCCESS,\n message: ROLES_ADDED_MSG,\n });\n }\n };\n\nexport const cancelAddUserRolesAction = (cancelCallback) => (dispatch) => {\n cancelCallback();\n dispatch({\n type: ADD_USER_ROLES,\n status: FULFILL,\n });\n};\n\n// DELETE USERS ACTIONS\nexport const deleteUserAction =\n (deleteUserCallback, usersToDelete) => async (dispatch) => {\n dispatch({\n type: DELETE_USER,\n status: REQUEST,\n });\n\n try {\n await deleteUserCallback(usersToDelete);\n } catch (error) {\n dispatch({\n type: DELETE_USER,\n status: FAILURE,\n message: error,\n });\n return;\n }\n\n dispatch({\n type: DELETE_USER,\n status: SUCCESS,\n });\n };\n\nexport const cancelDeleteUserAction = (cancelCallback) => (dispatch) => {\n cancelCallback();\n dispatch({\n type: DELETE_USER,\n status: FULFILL,\n });\n};\n\n// EDIT USER ACTIONS\nexport const editUserAction =\n (editUserCallback, usersToEdit) => async (dispatch) => {\n dispatch({\n type: EDIT_USER,\n status: REQUEST,\n });\n\n let userEditedId;\n try {\n userEditedId = await editUserCallback(usersToEdit);\n } catch (error) {\n dispatch({\n type: EDIT_USER,\n status: FAILURE,\n message: error,\n });\n return null;\n }\n\n dispatch({\n type: EDIT_USER,\n status: SUCCESS,\n });\n return userEditedId;\n };\n\nexport const cancelEditUserAction = (cancelCallback) => (dispatch) => {\n cancelCallback();\n dispatch({\n type: EDIT_USER,\n status: FULFILL,\n });\n};\n","import {\n setLocalStorageItem,\n getLocalStorageItem,\n removeLocalStorageItem,\n} from \"common/utils/storage/local-storage\";\n\nexport const USER_KEYS = [\"userId\", \"current_user\"];\n\nexport const setUserId = (value) => {\n setLocalStorageItem(USER_KEYS[0], value);\n};\n\nexport const getUserId = () => getLocalStorageItem(USER_KEYS[0]);\n\nexport const deleteUser = () => {\n // eslint-disable-next-line no-restricted-syntax\n USER_KEYS.forEach((key) => {\n removeLocalStorageItem(USER_KEYS[key]);\n });\n};\n\nexport const setUser = (value) => {\n setLocalStorageItem(USER_KEYS[1], JSON.stringify(value));\n};\n\nexport const getUser = () => JSON.parse(getLocalStorageItem(USER_KEYS[1]));\n","var _g, _g2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSummarizeIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n enableBackground: \"new 0 0 24 24\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#fff\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0,0h24v24H0V0z\",\n fill: \"none\"\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15,3H5C3.9,3,3.01,3.9,3.01,5L3,19c0,1.1,0.89,2,1.99,2H19c1.1,0,2-0.9,2-2V9L15,3z M8,17c-0.55,0-1-0.45-1-1s0.45-1,1-1 s1,0.45,1,1S8.55,17,8,17z M8,13c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S8.55,13,8,13z M8,9C7.45,9,7,8.55,7,8s0.45-1,1-1 s1,0.45,1,1S8.55,9,8,9z M14,10V4.5l5.5,5.5H14z\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSummarizeIcon);\nexport default __webpack_public_path__ + \"static/media/summarize-icon.0a103854.svg\";\nexport { ForwardRef as ReactComponent };","import TableChartOutlinedIcon from \"@material-ui/icons/TableChartOutlined\";\nimport PeopleAltOutlinedIcon from \"@material-ui/icons/PeopleAltOutlined\";\nimport QueuePlayNextIcon from \"@material-ui/icons/QueuePlayNext\";\nimport TrackChangesIcon from \"@material-ui/icons/TrackChanges\";\nimport WorkOutlineOutlinedIcon from \"@material-ui/icons/WorkOutlineOutlined\";\nimport PeopleOutlineIcon from \"@material-ui/icons/PeopleOutline\";\nimport { ReactComponent as SummarizeIcon } from \"common/assets/summarize-icon.svg\";\n\nexport const SECTION_BUDGET_SETTINGS = {\n id: \"budget settings\",\n path: \"budget-settings/\",\n subtitle: \"Budget Settings\",\n title: \"Budget Settings\",\n withStepper: false,\n withDate: false,\n menuText: \"Budget Settings\",\n menuIcon: ,\n};\n\nexport const SECTION_OVERVIEW = {\n id: \"overview\",\n path: \"overview/\",\n subtitle: \"Overview\",\n title: \"Dashboard\",\n withStepper: false,\n withDate: true,\n menuText: \"Overview\",\n menuIcon: ,\n};\nexport const SECTION_BUDGET = {\n id: \"start\",\n path: \"budget/\",\n subtitle: \"Create Budget Scenario\",\n title: \"\",\n withStepper: true,\n withDate: false,\n menuText: \"Start\",\n menuIcon: ,\n};\n\nexport const SECTION_USERS = {\n id: \"users\",\n path: \"users/\",\n subtitle: \"User Menu\",\n title: \"Users\",\n withStepper: false,\n withDate: true,\n menuText: \"Users\",\n menuIcon: ,\n};\n\nexport const SECTION_WORKFORCE_SETTINGS = {\n id: \"workforce settings\",\n path: \"workforce-settings/\",\n subtitle: \"Workforce Settings\",\n title: \"Workforce Settings\",\n withStepper: false,\n withDate: false,\n menuText: \"Workforce Settings\",\n menuIcon: ,\n};\n\nexport const SECTION_EMPLOYEE_MANAGEMENT = {\n id: \"employee management\",\n path: \"employee-management/\",\n subtitle: \"Employee Management\",\n title: \"Employee Management\",\n withStepper: false,\n withDate: false,\n menuText: \"Employee Management\",\n menuIcon: ,\n};\n\nexport const SECTION_ANALYSIS = {\n id: \"analysis\",\n path: \"analysis/\",\n subtitle: \"Analysis\",\n title: \"Analysis\",\n withStepper: false,\n withDate: false,\n menuText: \"Analysis\",\n menuIcon: ,\n};\n","import { rest } from \"common/api-client/rest\";\nimport apiURL from \"common/config/api-url.config\";\nimport type { Result } from \"common/utils/result\";\n\nexport const BFYI_AUTH_TYPE = 1;\nexport const MSAL_AUTH_TYPE = 2;\n\ntype SuccessfulAuthenticationTypeResponse = {\n validation: true;\n authenticationType: typeof MSAL_AUTH_TYPE | typeof BFYI_AUTH_TYPE;\n};\ntype AuthenticationTypeResponse =\n | SuccessfulAuthenticationTypeResponse\n | { validation: false; message?: string };\n\nexport async function getAuthenticationType(\n userId: string,\n): Promise> {\n const result = await rest(\"auth/type\", {\n baseURL: apiURL,\n body: { userId },\n });\n\n if (result instanceof Error) {\n return result;\n }\n if (result.kind === \"empty\") {\n return new Error(\"Response does not have a body\");\n }\n\n return result.body;\n}\n","import { SECTION_USERS } from \"common/routes/sections/main.sections\";\n\nexport const USERS_URL = `/${SECTION_USERS.path}`;\n\nexport const USER_FORM = {\n path: \"form/\",\n params: \":userId?/\",\n backTo: USERS_URL,\n subtitle: \"User Form\",\n title: \"Users View\",\n withStepper: false,\n withDate: true,\n};\n","export const CHANGE_IS_VALID = \"CHANGE_IS_VALID\";\nexport const SET_ON_SUBMIT = \"SET_ON_SUBMIT\";\nexport const SET_DIALOG = \"SET_DIALOG\";\nexport const RESET_DIALOG = \"RESET_DIALOG\";\n\nexport const changeIsValid = (isValid) => ({\n type: CHANGE_IS_VALID,\n payload: isValid,\n});\n\nexport const setOnSubmit = (method) => ({\n type: SET_ON_SUBMIT,\n payload: method,\n});\n\nexport const setDialog = (options) => ({\n type: SET_DIALOG,\n payload: options,\n});\n\nexport const resetDialog = () => ({\n type: RESET_DIALOG,\n});\n","import PropTypes from \"prop-types\";\n\nimport componentType from \"./react.proptypes\";\n\nconst connectedComponentType = PropTypes.shape({\n WrappedComponent: componentType,\n displayName: PropTypes.string,\n type: PropTypes.func,\n});\n\nexport default connectedComponentType;\n","import PropTypes from \"prop-types\";\n\nimport componentType from \"./react.proptypes\";\nimport connectedComponentType from \"./react-redux.proptypes\";\n\nconst reactChildrenType = PropTypes.oneOfType([\n componentType,\n connectedComponentType,\n]);\n\nexport default reactChildrenType;\n","import {\n getSessionStorageItem,\n removeSessionStorageItem,\n setSessionStorageItem,\n} from \"common/utils/storage/session-storage\";\nimport {\n CURRENT,\n REDO,\n REDO_ALLOCATED,\n REDO_UNALLOCATED,\n UNDO,\n UNDO_ALLOCATED,\n UNDO_UNALLOCATED,\n} from \"features/budget/budget.constants\";\nimport type { useSaveEmployeeRow } from \"./handle-employee\";\nimport type useSaveEmployeeAllocation from \"./use-save-employee-allocation\";\nimport { getEmployeeData } from \"./use-save-employee-allocation\";\n\ntype UnAllocatedType = {\n action: string;\n data: [\n {\n budgetScenarioEmployeeAllocationId: string;\n orgDetailId: number;\n scenarioId: string;\n },\n ];\n};\n\ntype UndoRedoType = {\n action: string;\n data: [{ allocation: number; employeeRecordId: string; orgDetailId: number }];\n};\n\ntype EmployeesAllocateType = {\n employeeRecordId: number;\n orgDetailId: number;\n allocation: number;\n};\n\nconst getValue = (value: number) => {\n if (value < 1) {\n return value * 100;\n }\n return value / 100;\n};\n\nconst getEmployeesAllocated = (employeesInfo: EmployeesAllocateType[]) => {\n const employeesData = employeesInfo.map(\n ({ employeeRecordId, allocation, orgDetailId }) => ({\n employeeRecordId,\n allocation: getValue(allocation),\n orgDetailId: Number(orgDetailId),\n }),\n );\n\n return { data: employeesData };\n};\n\nexport const removeSessionStorageUNDO = () => {\n removeSessionStorageItem(UNDO);\n};\n\nexport const removeSessionStorageREDO = () => {\n removeSessionStorageItem(REDO);\n};\n\nexport const removeSessionStorageCURRENT = () => {\n removeSessionStorageItem(CURRENT);\n};\n\nexport const removeAllSessionStorageForUndoRedo = () => {\n removeSessionStorageUNDO();\n removeSessionStorageREDO();\n removeSessionStorageCURRENT();\n};\n\nexport const getSessionStorageCURRENT: any = () => {\n const current = getSessionStorageItem(CURRENT);\n\n return JSON.parse(current!);\n};\n\n/**\n * Every time an employee is un-allocated either with the deallocate button or undo button, this method creates a sessionStorage object with the information of the un-allocated employee\n */\nexport const createSessionStorageOnUnAllocatedEmployee = (\n employeeRecordId: string,\n organizationId: number,\n allocation: number,\n scenarioId: string,\n) => {\n setSessionStorageItem(\n UNDO,\n JSON.stringify({\n data: [{ employeeRecordId, orgDetailId: organizationId, allocation }],\n action: UNDO_UNALLOCATED,\n }),\n );\n\n setSessionStorageItem(\n CURRENT,\n JSON.stringify({\n data: [{ employeeRecordId, orgDetailId: organizationId, scenarioId }],\n action: REDO_UNALLOCATED,\n }),\n );\n\n removeSessionStorageItem(REDO);\n};\n\n/**\n * Every time an employee record is un-allocated, the allocation percentage is updated, or allocated to a node either with the drag and drop functionality or with the redo button, this method creates a sessionStorage object with the information of the allocated employee\n */\nexport const createSessionStorageAllocatedEmployees = (\n employees: [\n { employeeRecordId: number; orgDetailId: number; allocation: number },\n ],\n sessionStorageKey = UNDO,\n) => {\n const allocatedEmployees = getEmployeesAllocated(employees);\n const action = sessionStorageKey === UNDO ? UNDO_ALLOCATED : REDO_ALLOCATED;\n\n const info = { action, ...allocatedEmployees };\n\n setSessionStorageItem(sessionStorageKey, JSON.stringify(info));\n};\n\n/**\n * When an employee record has been assigned to more nodes, this method takes the information from the sessionStorage object and changes the allocations percentage\n */\nexport const undoAllocatedEmployee = (\n saveAllocations: ReturnType,\n) => {\n const undo = getSessionStorageItem(UNDO);\n const currValue = getSessionStorageItem(CURRENT);\n const allocatedEmployeeInfo: UndoRedoType = JSON.parse(undo!);\n\n saveAllocations.mutate(getEmployeeData(allocatedEmployeeInfo.data));\n\n removeSessionStorageItem(UNDO);\n removeSessionStorageItem(REDO);\n\n setSessionStorageItem(REDO, currValue);\n setSessionStorageItem(CURRENT, undo);\n};\n\nexport const redoAllocatedEmployee = (\n saveAllocations: ReturnType,\n) => {\n const redoInfo = getSessionStorageItem(REDO);\n const unAllocatedEmployeeInfo: UndoRedoType = JSON.parse(redoInfo!);\n\n saveAllocations.mutate(getEmployeeData(unAllocatedEmployeeInfo.data));\n removeSessionStorageItem(REDO);\n\n const undo = getSessionStorageItem(CURRENT);\n setSessionStorageItem(UNDO, undo);\n setSessionStorageItem(CURRENT, redoInfo);\n};\n\n/**\n * Be aware that an employee record can be un-allocated with the deallocate buttons or with the redo button\n * if it's been previously reallocated\n */\nexport const undoUnAllocatedEmployee = (\n saveAllocations: ReturnType,\n) => {\n const undo = getSessionStorageItem(UNDO);\n\n const allocatedEmployeeInfo: UndoRedoType = JSON.parse(undo!);\n\n saveAllocations.mutate(getEmployeeData(allocatedEmployeeInfo.data));\n\n const redo = getSessionStorageItem(CURRENT);\n\n removeSessionStorageItem(UNDO);\n\n setSessionStorageItem(REDO, redo);\n setSessionStorageItem(CURRENT, undo);\n};\n\n/**\n * Deallocate an employee record\n *\n * When an employee record has been reallocated, this method takes the\n * information from the sessionStorage object and deallocate the employee record\n */\nexport const redoUnAllocateEmployee = (\n saveEmployee: ReturnType,\n) => {\n const redoInfo = getSessionStorageItem(REDO);\n const unAllocatedEmployeeInfo: UnAllocatedType = JSON.parse(redoInfo!);\n\n const {\n budgetScenarioEmployeeAllocationId,\n orgDetailId: organizationId,\n scenarioId,\n } = unAllocatedEmployeeInfo.data[0];\n\n saveEmployee.mutate({\n scenarioId,\n organizationId,\n budgetScenarioEmployeeAllocationId,\n });\n removeSessionStorageItem(REDO);\n\n const undo = getSessionStorageItem(CURRENT);\n setSessionStorageItem(UNDO, undo);\n setSessionStorageItem(CURRENT, redoInfo);\n};\n\nexport const ACTION_TO_PERFORM = {\n UNDO_ALLOCATED: (\n saveAllocations: ReturnType,\n ) => undoAllocatedEmployee(saveAllocations),\n REDO_ALLOCATED: (\n saveAllocations: ReturnType,\n ) => redoAllocatedEmployee(saveAllocations),\n UNDO_UNALLOCATED: (\n saveAllocations: ReturnType,\n ) => undoUnAllocatedEmployee(saveAllocations),\n REDO_UNALLOCATED: (saveEmployee: ReturnType) =>\n redoUnAllocateEmployee(saveEmployee),\n};\n","export const SELECT_ORG = \"SELECT_ORG\";\nexport const SELECT_OWNER = \"SELECT_OWNER\";\nexport const RESET_OWNERS_STATE = \"RESET_OWNERS_STATE\";\n\nexport const selectOrg = (orgID) => ({\n type: SELECT_ORG,\n payload: {\n orgID,\n },\n});\n\nexport const selectOwner = ({ id, name }) => ({\n type: SELECT_OWNER,\n payload: {\n id,\n name,\n },\n});\n\nexport const resetOwnersState = () => ({\n type: RESET_OWNERS_STATE,\n});\n","import {\n getLocalStorageItem,\n removeLocalStorageItem,\n setLocalStorageItem,\n} from \"common/utils/storage/local-storage\";\nimport {\n getRelatedStorageItem,\n getRelatedStorageItems,\n getStorageItem,\n clearRelatedStorageItems,\n removeStorageItem,\n setRelatedStorageItem,\n setStorageItem,\n} from \"common/utils/storage/legacy-storage\";\nimport {\n deleteAllFromIndex,\n deleteIDBValue,\n getAllFromIndex,\n getIDBValue,\n putIDBValue,\n} from \"common/utils/storage/idb\";\n\nimport {\n BUDGET_IDX_KEYPATH,\n BUDGET_IDX_NAME,\n BUDGET_STORE,\n CURRENT_BUDGET,\n NEW_PREFIX,\n} from \"features/budget/budget.constants\";\nimport steps from \"features/budget/wizard/state/stepper.data\";\n\nexport async function getBudget(id = null) {\n const currentBudgetId = id ?? getLocalStorageItem(CURRENT_BUDGET);\n\n if (currentBudgetId === null) {\n return undefined;\n }\n\n const budget = await getIDBValue(BUDGET_STORE, currentBudgetId);\n return budget;\n}\n\n// eslint-disable-next-line camelcase\nexport function LEGACY_getBudget(id = null) {\n const currentBudgetId = id ?? getLocalStorageItem(CURRENT_BUDGET);\n\n if (currentBudgetId === null) {\n return undefined;\n }\n\n const budget = getStorageItem(currentBudgetId);\n return budget;\n}\n\nexport async function deleteBudget(id = null) {\n const currentBudgetId = id ?? getLocalStorageItem(CURRENT_BUDGET);\n\n if (currentBudgetId !== null) {\n await deleteIDBValue(BUDGET_STORE, currentBudgetId);\n removeLocalStorageItem(CURRENT_BUDGET);\n }\n}\n\n// eslint-disable-next-line camelcase\nexport function LEGACY_deleteBudget(id = null) {\n const currentBudgetId = id ?? getLocalStorageItem(CURRENT_BUDGET);\n\n if (currentBudgetId !== null) {\n removeStorageItem(currentBudgetId);\n removeLocalStorageItem(CURRENT_BUDGET);\n }\n}\n\nexport async function saveStepData(stepIndex, values) {\n let currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n\n let budgetInDB;\n if (currentBudgetId) {\n budgetInDB = await getIDBValue(BUDGET_STORE, currentBudgetId);\n } else {\n currentBudgetId = `${NEW_PREFIX}${Date.now()}`;\n setLocalStorageItem(CURRENT_BUDGET, currentBudgetId);\n }\n\n const upserted = await putIDBValue(\n BUDGET_STORE,\n {\n ...budgetInDB,\n [steps[stepIndex].idbKey]: values,\n },\n currentBudgetId,\n );\n\n return Boolean(upserted);\n}\n\n// eslint-disable-next-line camelcase\nexport function LEGACY_saveStepData(stepIndex, values) {\n let currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n\n let budgetInDB;\n if (currentBudgetId) {\n budgetInDB = getStorageItem(currentBudgetId);\n } else {\n currentBudgetId = `${NEW_PREFIX}${Date.now()}`;\n setLocalStorageItem(CURRENT_BUDGET, currentBudgetId);\n }\n\n setStorageItem(currentBudgetId, {\n ...budgetInDB,\n [steps[stepIndex].idbKey]: values,\n });\n}\n\nexport async function getStepData(stepIndex) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n if (currentBudgetId !== null) {\n const budget = await getIDBValue(BUDGET_STORE, currentBudgetId);\n\n return budget?.[steps[stepIndex].idbKey];\n }\n return undefined;\n}\n\n// eslint-disable-next-line camelcase\nexport function LEGACY_getStepData(stepIndex) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n if (currentBudgetId !== null) {\n const budget = getStorageItem(currentBudgetId);\n\n return budget?.[steps[stepIndex].idbKey];\n }\n return undefined;\n}\n\nexport async function saveBudgetRelatedValue(storeName, id, data) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n\n const valueInDB = await getIDBValue(storeName, id);\n await putIDBValue(storeName, {\n ...valueInDB,\n ...data,\n [BUDGET_IDX_KEYPATH]: currentBudgetId,\n });\n}\n\n// eslint-disable-next-line camelcase\nexport function LEGACY_saveBudgetRelatedValue(collection, id, data) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n\n const valueInStorage = getRelatedStorageItem(currentBudgetId, collection, id);\n setRelatedStorageItem(currentBudgetId, collection, id, {\n ...valueInStorage,\n ...data,\n });\n}\n\nexport async function getBudgetRelatedValues(storeName) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n\n const result = await getAllFromIndex(\n storeName,\n BUDGET_IDX_NAME,\n currentBudgetId,\n );\n return result;\n}\n\n// eslint-disable-next-line camelcase\nexport function LEGACY_getBudgetRelatedValues(collection) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n\n return getRelatedStorageItems(currentBudgetId, collection);\n}\n\nexport async function clearBudgetRelatedValues(storeName) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n await deleteAllFromIndex(storeName, BUDGET_IDX_NAME, currentBudgetId);\n}\n\n// eslint-disable-next-line camelcase\nexport function LEGACY_clearBudgetRelatedValues(collection) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n\n clearRelatedStorageItems(currentBudgetId, collection);\n}\n","import { useMutation } from \"react-query\";\nimport { apiClient } from \"common/api-client/api-client\";\nimport {\n showErrorToast,\n showSuccessToast,\n showWarningToast,\n useToastDispatch,\n} from \"common/context/toast/toast-context\";\nimport { getLocalStorageItem } from \"common/utils/storage/local-storage\";\nimport { CURRENT_BUDGET } from \"features/budget/budget.constants\";\n\nfunction getValue(value) {\n return value / 100;\n}\n\nexport function getEmployeeData(source) {\n const employeesData = source.map(\n ({\n budgetScenarioEmployeeAllocationId,\n employeeRecordId,\n allocation,\n orgDetailId,\n }) => ({\n budgetScenarioEmployeeAllocationId,\n employeeRecordId,\n allocation: getValue(allocation),\n orgDetailId: Number(orgDetailId),\n }),\n );\n\n return {\n allocations: employeesData,\n };\n}\n\nexport function getAllocationPayload(flexInstance) {\n const source = flexInstance.collectionView.sourceCollection;\n\n return getEmployeeData(source);\n}\n\nexport function getAllocationWithoutPopup(data) {\n return getEmployeeData(data);\n}\n\nasync function postAllocations({ allocations }) {\n const scenarioId = getLocalStorageItem(CURRENT_BUDGET);\n const result = await apiClient(\n `BudgetScenario/${scenarioId}/Workforce/Employee/Allocation`,\n {\n body: { employeeRecordsToAllocate: allocations },\n },\n );\n if (result instanceof Error) {\n throw result;\n }\n if (result.kind === \"empty\") {\n throw new Error(\"Response does not have a body\");\n }\n\n return result.body;\n}\n\nfunction useSaveEmployeeAllocation(handleCloseDialog, orgId, setOrgId) {\n const toastDispatch = useToastDispatch();\n\n return useMutation(postAllocations, {\n onError: (error) => {\n showErrorToast(\n toastDispatch,\n \"Error saving employee allocation\",\n error.message,\n );\n },\n onSuccess: (response) => {\n setOrgId(-1);\n\n if (response?.validation === false) {\n showWarningToast(\n toastDispatch,\n \"Validation failed for employee allocation\",\n response.message,\n );\n setOrgId(orgId);\n } else {\n setOrgId(orgId);\n showSuccessToast(toastDispatch, \"Employee allocated successfully\");\n handleCloseDialog();\n }\n },\n });\n}\n\nexport default useSaveEmployeeAllocation;\n","export const CHANGE_SELECTED_ROWDEF = \"CHANGE_SELECTED_ROWDEF\";\nexport const CHANGE_ROWDEF_LIST_EMPTY = \"CHANGE_ROWDEF_LIST_EMPTY\";\nexport const RESET_ACCOUNTS_STATE = \"RESET_ACCOUNTS_STATE\";\n\nexport const changeSelectedRowDef = (id, name) => ({\n type: CHANGE_SELECTED_ROWDEF,\n payload: {\n rowDefinitionID: id,\n rowDefinitionName: name,\n },\n});\n\nexport const changeRowDefListEmpty = (empty) => ({\n type: CHANGE_ROWDEF_LIST_EMPTY,\n payload: {\n empty,\n },\n});\n\nexport const resetAccountsState = () => ({\n type: RESET_ACCOUNTS_STATE,\n});\n","import * as React from \"react\";\n\ntype PromiseState =\n | {\n status: \"idle\";\n data?: null;\n error?: null;\n promise?: null;\n }\n | {\n status: \"pending\";\n data?: null;\n error?: null;\n promise: Promise;\n }\n | {\n status: \"resolved\";\n data: DataType;\n error: null;\n promise: null;\n }\n | {\n status: \"rejected\";\n data: null;\n error: Error;\n promise: null;\n };\n\ntype PromiseAction =\n | { type: \"reset\" }\n | { type: \"pending\"; promise: Promise }\n | { type: \"resolved\"; data: DataType; promise?: Promise }\n | { type: \"rejected\"; error: Error; promise: Promise };\n\nfunction promiseReducer(\n state: PromiseState,\n action: PromiseAction,\n): PromiseState {\n const { type } = action;\n\n switch (type) {\n case \"pending\": {\n return {\n status: \"pending\",\n data: null,\n error: null,\n promise: action.promise,\n };\n }\n case \"resolved\": {\n if (action.promise !== undefined && action.promise !== state.promise) {\n return state;\n }\n return {\n status: \"resolved\",\n data: action.data,\n error: null,\n promise: null,\n };\n }\n case \"rejected\": {\n if (action.promise !== state.promise) {\n return state;\n }\n return {\n status: \"rejected\",\n data: null,\n error: action.error,\n promise: null,\n };\n }\n case \"reset\":\n return {\n status: \"idle\",\n data: null,\n error: null,\n };\n default: {\n const exhaustiveCheck: never = type;\n return exhaustiveCheck;\n }\n }\n}\n\nexport function usePromise() {\n const [promiseState, dispatch] = React.useReducer<\n React.Reducer, PromiseAction>\n >(promiseReducer, {\n status: \"idle\",\n data: null,\n error: null,\n });\n\n const run = React.useCallback((promise: Promise) => {\n dispatch({ type: \"pending\", promise });\n\n promise.then(\n (promiseData) => {\n dispatch({ type: \"resolved\", data: promiseData, promise });\n },\n (promiseError) => {\n dispatch({ type: \"rejected\", error: promiseError, promise });\n },\n );\n }, []);\n\n const setData = React.useCallback((data: DataType) => {\n dispatch({ type: \"resolved\", data });\n }, []);\n\n return { promiseState, run, setData };\n}\n","export function FullPageErrorFallback({\n message,\n}: {\n message?: string | null | undefined;\n}) {\n return (\n \n

There was an error loading this page

\n

Please verify the API URL is set correctly

\n {message === undefined || message === null ? null : (\n

The error message we received is: `{message}`

\n )}\n \n );\n}\n","import {\n SECTION_ANALYSIS,\n SECTION_BUDGET,\n SECTION_BUDGET_SETTINGS,\n SECTION_EMPLOYEE_MANAGEMENT,\n SECTION_OVERVIEW,\n SECTION_USERS,\n SECTION_WORKFORCE_SETTINGS,\n} from \"common/routes/sections/main.sections\";\n\nimport {\n BUDGET_URL,\n CREATE_ASSUMPTIONS,\n CREATE_COMPANY,\n CREATE_SCHEDULES,\n CREATE_TEMPLATES,\n CREATE_WORKFORCE,\n OWNER_ASSIGNATION,\n SELECT_ACCOUNTS,\n START_BUDGET,\n} from \"features/budget/budget.sections\";\nimport {\n OVERVIEW_BUDGET,\n OVERVIEW_URL,\n} from \"features/overview/state/overview.sections\";\nimport {\n USER_FORM,\n USERS_URL,\n} from \"features/coordinator-user/state/user.sections\";\nimport {\n EMPLOYEE_MANAGEMENT_URL,\n WORKFORCE_DATA_PREVIEW,\n WORKFORCE_SETTINGS_URL,\n WORKFORCE_TEMPLATE_SETUP,\n} from \"features/workforce/workforce-sections\";\n\nconst OPTIONAL_PARAMS = \"(?:\\\\w+/)?\";\n\nconst ALL_SECTIONS = new Map([\n [`^/${SECTION_BUDGET_SETTINGS.path}`, SECTION_BUDGET_SETTINGS],\n [\n `^${OVERVIEW_URL}${OVERVIEW_BUDGET.path}${OPTIONAL_PARAMS}$`,\n OVERVIEW_BUDGET,\n ],\n [`^/${SECTION_OVERVIEW.path}`, SECTION_OVERVIEW],\n [`^${BUDGET_URL}$`, SECTION_BUDGET],\n [`^${BUDGET_URL}${START_BUDGET.path}${OPTIONAL_PARAMS}$`, START_BUDGET],\n [`^${BUDGET_URL}${SELECT_ACCOUNTS.path}$`, SELECT_ACCOUNTS],\n [`^${BUDGET_URL}${CREATE_ASSUMPTIONS.path}$`, CREATE_ASSUMPTIONS],\n [`^${BUDGET_URL}${CREATE_COMPANY.path}$`, CREATE_COMPANY],\n [`^${BUDGET_URL}${CREATE_SCHEDULES.path}$`, CREATE_SCHEDULES],\n [`^${BUDGET_URL}${CREATE_TEMPLATES.path}$`, CREATE_TEMPLATES],\n [`^${BUDGET_URL}${CREATE_WORKFORCE.path}$`, CREATE_WORKFORCE],\n [`^${BUDGET_URL}${OWNER_ASSIGNATION.path}$`, OWNER_ASSIGNATION],\n [`^${USERS_URL}$`, SECTION_USERS],\n [`^${USERS_URL}${USER_FORM.path}${OPTIONAL_PARAMS}$`, USER_FORM],\n [`^${WORKFORCE_SETTINGS_URL}$`, SECTION_WORKFORCE_SETTINGS],\n [`^${EMPLOYEE_MANAGEMENT_URL}$`, SECTION_EMPLOYEE_MANAGEMENT],\n [\n `^${EMPLOYEE_MANAGEMENT_URL}${WORKFORCE_DATA_PREVIEW.path}$`,\n WORKFORCE_DATA_PREVIEW,\n ],\n [\n `^${EMPLOYEE_MANAGEMENT_URL}${WORKFORCE_TEMPLATE_SETUP.path}$`,\n WORKFORCE_TEMPLATE_SETUP,\n ],\n [`^/${SECTION_ANALYSIS.path}`, SECTION_ANALYSIS],\n]);\n\nexport default ALL_SECTIONS;\n","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nimport ALL_SECTIONS from \"common/routes/sections/all.sections\";\nimport { SECTION_OVERVIEW } from \"common/routes/sections/main.sections\";\n\nfunction getSection(pathname) {\n const key = [...ALL_SECTIONS.keys()].filter((pattern) =>\n new RegExp(pattern).test(pathname),\n )[0];\n\n return ALL_SECTIONS.get(key);\n}\n\nfunction useSection() {\n const location = useLocation();\n\n return useMemo(() => {\n const section = getSection(location.pathname);\n if (section === undefined) {\n return SECTION_OVERVIEW;\n }\n return section;\n }, [location]);\n}\n\nexport default useSection;\n","export const setLocalStorageItem = (key, value) => {\n localStorage.setItem(key, value);\n};\n\nexport const getLocalStorageItem = (key) => localStorage.getItem(key);\n\nexport const removeLocalStorageItem = (key) => {\n localStorage.removeItem(key);\n};\n\nexport const clearAllLocalStorage = () => {\n localStorage.clear();\n};\n","/* eslint-disable camelcase */\nimport { deleteIDBValue, getIDBValue } from \"common/utils/storage/idb\";\nimport isMSLegacy from \"common/utils/is-ms-legacy\";\nimport {\n getRelatedStorageItem,\n removeRelatedStorageItem,\n} from \"common/utils/storage/legacy-storage\";\nimport { getLocalStorageItem } from \"common/utils/storage/local-storage\";\n\nimport {\n ASSUMPTIONS_STORE,\n CURRENT_BUDGET,\n TEMPLATES_STORE,\n} from \"features/budget/budget.constants\";\nimport {\n clearBudgetRelatedValues,\n getBudgetRelatedValues,\n getStepData,\n LEGACY_clearBudgetRelatedValues,\n LEGACY_getBudgetRelatedValues,\n LEGACY_getStepData,\n LEGACY_saveBudgetRelatedValue,\n LEGACY_saveStepData,\n saveBudgetRelatedValue,\n saveStepData,\n} from \"features/budget/wizard/state/wizard.storage\";\nimport { ALL_ACCOUNTS_NAME } from \"features/budget/templates/state/template.constants\";\n\nconst STEP = 4;\n\nexport function sortAllAccountsFirst(a) {\n if (a.name === ALL_ACCOUNTS_NAME) {\n return -1;\n }\n return 0;\n}\n\nexport async function saveTemplateAssignments(assignmentsObj) {\n if (isMSLegacy() === true) {\n LEGACY_saveStepData(STEP, assignmentsObj);\n } else {\n await saveStepData(STEP, assignmentsObj);\n }\n}\n\nexport async function getTemplateAssignments() {\n let templateAssignments;\n if (isMSLegacy() === true) {\n templateAssignments = LEGACY_getStepData(STEP);\n } else {\n templateAssignments = await getStepData(STEP);\n }\n return templateAssignments;\n}\n\nexport async function clearTemplateAssignments() {\n await saveTemplateAssignments(undefined);\n}\n\nexport async function getTemplate(id) {\n let template;\n\n if (isMSLegacy() === true) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n template = getRelatedStorageItem(currentBudgetId, TEMPLATES_STORE, id);\n } else {\n template = await getIDBValue(TEMPLATES_STORE, id);\n }\n return template;\n}\n\nexport async function removeTemplate(id) {\n if (isMSLegacy() === true) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n removeRelatedStorageItem(currentBudgetId, TEMPLATES_STORE, id);\n } else {\n await deleteIDBValue(TEMPLATES_STORE, id);\n }\n}\n\nexport async function saveTemplate(id, data) {\n if (isMSLegacy() === true) {\n LEGACY_saveBudgetRelatedValue(TEMPLATES_STORE, id, data);\n } else {\n await saveBudgetRelatedValue(TEMPLATES_STORE, id, data);\n }\n}\n\nexport async function getTemplates(allAccountsFirst = false) {\n let result;\n\n if (isMSLegacy() === true) {\n result = LEGACY_getBudgetRelatedValues(TEMPLATES_STORE);\n } else {\n result = await getBudgetRelatedValues(TEMPLATES_STORE);\n }\n\n if (allAccountsFirst === true) {\n result.sort(sortAllAccountsFirst);\n }\n return result;\n}\n\nexport async function clearTemplates() {\n if (isMSLegacy() === true) {\n LEGACY_clearBudgetRelatedValues(TEMPLATES_STORE);\n } else {\n await clearBudgetRelatedValues(TEMPLATES_STORE);\n }\n}\n\nexport async function saveScenarioLevelAssumptions(scenarioId, data) {\n if (isMSLegacy() === true) {\n LEGACY_saveBudgetRelatedValue(ASSUMPTIONS_STORE, scenarioId, data);\n } else {\n await saveBudgetRelatedValue(ASSUMPTIONS_STORE, scenarioId, data);\n }\n}\n\nexport async function getScenarioLevelAssumptions(scenarioId) {\n let assumptions;\n\n if (isMSLegacy() === true) {\n [assumptions] = LEGACY_getBudgetRelatedValues(ASSUMPTIONS_STORE);\n } else {\n assumptions = await getIDBValue(ASSUMPTIONS_STORE, scenarioId);\n }\n return assumptions;\n}\n\nexport async function clearScenarioLevelAssumptions(scenarioId) {\n if (isMSLegacy() === true) {\n LEGACY_clearBudgetRelatedValues(ASSUMPTIONS_STORE);\n } else {\n await deleteIDBValue(ASSUMPTIONS_STORE, scenarioId);\n }\n}\n\nexport async function saveTemplatesList(templateList) {\n const asyncOperations = [];\n // eslint-disable-next-line no-restricted-syntax\n for (const template of templateList) {\n asyncOperations.push(saveTemplate(template.id, template));\n }\n await Promise.all(asyncOperations);\n}\n","import AccessAlarmIcon from \"@material-ui/icons/AccessAlarm\";\nimport CheckCircleOutlineIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\n\nimport ProgressClock from \"common/assets/progress-clock\";\nimport {\n ACTIVE,\n APPROVED,\n WITH_ERROR,\n IN_REVIEW,\n REJECTED,\n} from \"common/constants/budget-status.constants\";\nimport theme from \"common/themes/default.theme\";\n\nexport const BUDGET_FILLING_STORE = \"budget_filling_store\";\nexport const BUDGET_DETAILING_STORE = \"budget_detailing_store\";\n\nexport const assignIcon = (templateStatusId) => {\n let icon = AccessAlarmIcon;\n let color = \"#ffffff\";\n let label = \"\";\n switch (templateStatusId) {\n case ACTIVE:\n icon = AccessAlarmIcon;\n color = theme.palette.grey[\"600\"];\n label = \"Active\";\n break;\n case IN_REVIEW:\n icon = ProgressClock;\n color = theme.palette.blue.main;\n label = \"In Review\";\n break;\n case REJECTED:\n icon = HighlightOffIcon;\n color = theme.palette.error.main;\n label = \"Rejected\";\n break;\n case APPROVED:\n icon = CheckCircleOutlineIcon;\n color = theme.palette.success.main;\n label = \"Approved\";\n break;\n case WITH_ERROR:\n icon = ErrorOutlineIcon;\n color = theme.palette.warning.main;\n label = \"With error\";\n break;\n default:\n icon = AccessAlarmIcon;\n color = \"#ffffff\";\n label = \"Not Defined\";\n }\n return { id: templateStatusId, icon, color, label };\n};\n","export const REQUEST = \"REQUEST\";\nexport const FAILURE = \"FAILURE\";\nexport const WARNING = \"WARNING\";\nexport const SUCCESS = \"SUCCESS\";\nexport const FULFILL = \"FULFILL\";\n","export function isIE() {\n return window.document.documentMode !== undefined;\n}\n\nexport function isEdge() {\n return window.StyleMedia !== undefined;\n}\n\nfunction isMSLegacy() {\n return isIE() || isEdge();\n}\n\nexport default isMSLegacy;\n","import { SECTION_BUDGET } from \"common/routes/sections/main.sections\";\n\nexport const START_BUDGET = {\n path: \"start/\",\n params: \":scenarioId?/\",\n subtitle: \"Create Budget Scenario\",\n title: \"\",\n withStepper: true,\n withDate: false,\n step: 0,\n};\n\nexport const SELECT_ACCOUNTS = {\n path: \"accounts/\",\n subtitle: \"Create Budget Scenario\",\n title: \"\",\n withStepper: true,\n withDate: false,\n step: 1,\n};\n\nexport const CREATE_COMPANY = {\n path: \"company-structure/\",\n subtitle: \"Create Budget Scenario\",\n title: \"\",\n withStepper: true,\n withDate: false,\n step: 2,\n};\n\nexport const CREATE_ASSUMPTIONS = {\n path: \"assumptions/\",\n subtitle: \"Create assumptions\",\n title: \"\",\n withStepper: true,\n withDate: false,\n step: 3,\n};\n\nexport const CREATE_SCHEDULES = {\n path: \"schedules/\",\n subtitle: \"Create Budget Scenario\",\n title: \"\",\n withStepper: true,\n withDate: false,\n step: 4,\n};\n\nexport const CREATE_TEMPLATES = {\n path: \"templates/\",\n subtitle: \"Create Budget Scenario\",\n title: \"\",\n withStepper: true,\n withDate: false,\n step: 5,\n};\n\nexport const CREATE_WORKFORCE = {\n path: \"workforce/\",\n subtitle: \"Workforce allocation\",\n title: \"\",\n withStepper: true,\n withDate: false,\n step: 6,\n};\n\nexport const OWNER_ASSIGNATION = {\n path: \"owner/\",\n subtitle: \"Create Budget Scenario\",\n title: \"\",\n withStepper: true,\n withDate: false,\n step: 7,\n};\n\nexport const BUDGET_URL = `/${SECTION_BUDGET.path}`;\n\nexport const BUDGET_STEPS_ROUTES = {\n [START_BUDGET.step]: `${BUDGET_URL}${START_BUDGET.path}${START_BUDGET.params}`,\n [SELECT_ACCOUNTS.step]: `${BUDGET_URL}${SELECT_ACCOUNTS.path}`,\n [CREATE_COMPANY.step]: `${BUDGET_URL}${CREATE_COMPANY.path}`,\n [CREATE_ASSUMPTIONS.step]: `${BUDGET_URL}${CREATE_ASSUMPTIONS.path}`,\n [CREATE_SCHEDULES.step]: `${BUDGET_URL}${CREATE_SCHEDULES.path}`,\n [CREATE_TEMPLATES.step]: `${BUDGET_URL}${CREATE_TEMPLATES.path}`,\n [CREATE_WORKFORCE.step]: `${BUDGET_URL}${CREATE_WORKFORCE.path}`,\n [OWNER_ASSIGNATION.step]: `${BUDGET_URL}${OWNER_ASSIGNATION.path}`,\n};\n","export const CHANGE_SELECTED_STRUCTURE = \"CHANGE_SELECTED_STRUCTURE\";\nexport const RESET_STRUCTURES_STATE = \"RESET_STRUCTURES_STATE\";\n\nexport const changeSelectedStructure = (id, name) => ({\n type: CHANGE_SELECTED_STRUCTURE,\n payload: {\n structureID: id,\n structureName: name,\n },\n});\n\nexport const resetStructuresState = () => ({\n type: RESET_STRUCTURES_STATE,\n});\n","import type {\n DefaultErrorBody,\n ResponseBody,\n RestOptions,\n} from \"common/api-client/rest\";\nimport { rest } from \"common/api-client/rest\";\nimport {\n deleteTokenCookie,\n getTokenCookie,\n} from \"common/context/auth/token-cookie\";\nimport apiURL from \"common/config/api-url.config\";\n\nfunction handleUnauthorized() {\n deleteTokenCookie();\n window.location.assign(\n `${window.location.origin}${window.location.pathname}`,\n );\n}\n\nexport async function apiClient(\n endpoint: string,\n customConfig: Omit<\n RestOptions,\n \"baseURL\" | \"onUnauthorized\" | \"getMessageFromErrorResponse\"\n > = {},\n) {\n return rest(endpoint, {\n ...customConfig,\n baseURL: apiURL,\n onUnauthorized: handleUnauthorized,\n headers: {\n Authorization: `Bearer ${getTokenCookie()}`,\n ...customConfig.headers,\n },\n });\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useFormikContext } from \"formik\";\n\nimport useSection from \"common/routes/sections/sections.hooks\";\nimport { removeAllSessionStorageForUndoRedo } from \"features/budget/workforce/views/employee-data-tab/state/undo-redo-utils\";\n\nimport { BUDGET_STEPS_ROUTES } from \"features/budget/budget.sections\";\nimport { getRequestingNext } from \"features/budget/wizard/state/wizard.selectors\";\nimport {\n changeCallingNextCallback,\n changeFetching,\n changeRequestingNext,\n changeScenarioName,\n changeSubmitting,\n changeValid,\n} from \"features/budget/wizard/state/wizard.actions\";\nimport {\n getBudget,\n // eslint-disable-next-line camelcase\n LEGACY_getBudget,\n} from \"features/budget/wizard/state/wizard.storage\";\nimport steps from \"features/budget/wizard/state/stepper.data\";\nimport { getBudgetMeta } from \"features/budget/start/state/meta.storage\";\nimport {\n ASSUMPTION_KEY,\n IS_WORKFORCE_SCENARIO,\n OWNERS_KEY,\n SCHEDULES_KEY,\n TEMPLATES_KEY,\n} from \"features/budget/budget.constants\";\nimport isMSLegacy from \"common/utils/is-ms-legacy\";\nimport { getLocalStorageItem } from \"common/utils/storage/local-storage\";\n\nexport function useStep() {\n const section = useSection();\n return useMemo(() => {\n const { step } = section;\n if (step === undefined) {\n return 0;\n }\n return step;\n }, [section]);\n}\n\nexport function useRedirectToStep() {\n const history = useHistory();\n\n return useCallback(\n (step) => {\n const newStep = BUDGET_STEPS_ROUTES[step];\n\n if (newStep !== undefined) {\n history.push(newStep);\n }\n },\n [history],\n );\n}\n\nexport function useRedirectToNext() {\n const step = useStep();\n const isWorkforceScenario = getLocalStorageItem(IS_WORKFORCE_SCENARIO);\n\n const redirectTo = useRedirectToStep();\n const nextStep =\n (step === 2 || step === 5) && isWorkforceScenario === \"false\"\n ? step + 2\n : step + 1;\n\n if (step === 6) {\n removeAllSessionStorageForUndoRedo();\n }\n return useCallback(() => redirectTo(nextStep), [redirectTo, nextStep]);\n}\n\nexport function useWizardForm() {\n const dispatch = useDispatch();\n const { submitForm, isValid, isSubmitting } = useFormikContext();\n\n const isRequestingNext = useSelector(getRequestingNext);\n useEffect(() => {\n async function submit() {\n await submitForm();\n }\n if (isRequestingNext === true) {\n submit();\n }\n }, [isRequestingNext, submitForm]);\n\n useEffect(() => {\n dispatch(changeValid(isValid));\n }, [dispatch, isValid]);\n\n useEffect(() => {\n dispatch(changeSubmitting(isSubmitting));\n }, [dispatch, isSubmitting]);\n}\n\nexport function useValidatePrevious() {\n const [result, setResult] = useState({\n showDialog: false,\n redirectName: \"\",\n redirectStep: null,\n });\n const currentStep = useStep();\n\n useEffect(() => {\n async function validate() {\n let budget;\n if (isMSLegacy() === true) {\n budget = LEGACY_getBudget();\n } else {\n budget = await getBudget();\n }\n for (let i = 0; i < currentStep; i += 1) {\n const { caption: stepTitle, key } = steps[i];\n if (\n ![ASSUMPTION_KEY, SCHEDULES_KEY, TEMPLATES_KEY, OWNERS_KEY].includes(\n key,\n ) &&\n (budget === undefined || budget[steps[i].idbKey] === undefined)\n ) {\n setResult({\n showDialog: true,\n redirectName: stepTitle,\n redirectStep: key,\n });\n return;\n }\n }\n }\n\n validate();\n }, [currentStep]);\n\n return result;\n}\n\nexport function useScenarioHeaderTitle() {\n const dispatch = useDispatch();\n useEffect(() => {\n async function getHeader() {\n const formValues = await getBudgetMeta();\n if (formValues !== undefined) {\n const { scenario } = formValues;\n dispatch(changeScenarioName(scenario));\n }\n }\n\n getHeader();\n }, [dispatch]);\n}\n\nexport function useChangeFetching(loading) {\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (loading) {\n dispatch(changeFetching(true));\n } else {\n dispatch(changeFetching(false));\n }\n }, [dispatch, loading]);\n}\n\n/**\n *\n * @param {() => Promise} callback\n */\nexport function useRequestingNext(callback = null) {\n const dispatch = useDispatch();\n const redirect = useRedirectToNext();\n\n const isRequestingNext = useSelector(getRequestingNext);\n useEffect(() => {\n async function requestingNext() {\n if (isRequestingNext === true) {\n dispatch(changeRequestingNext(false));\n\n let shouldGoNext = true;\n if (callback !== null && typeof callback === \"function\") {\n dispatch(changeCallingNextCallback(true));\n shouldGoNext = await callback();\n dispatch(changeCallingNextCallback(false));\n }\n if (shouldGoNext !== false) {\n redirect();\n }\n }\n }\n requestingNext();\n }, [callback, dispatch, isRequestingNext, redirect]);\n}\n","import { useCallback, useEffect, useRef } from \"react\";\n\nimport { getTokenCookie } from \"common/context/auth/token-cookie\";\nimport apiURL from \"common/config/api-url.config\";\nimport { API_URL_ERROR } from \"common/constants/config-error-messages.constants\";\nimport {\n DELETE,\n GET,\n PATCH,\n POST,\n PUT,\n} from \"common/hooks/fetch/fetch.constants\";\n\nconst { AbortController } = window;\n\nfunction getFetchHook(method, baseURL = apiURL) {\n return function useFetch() {\n const abortController = useRef(null);\n\n useEffect(() => {\n abortController.current = new AbortController();\n return function cleanup() {\n return abortController.current?.abort();\n };\n }, []);\n\n const request = useCallback((endpoint, body = null, headers = null) => {\n const { signal } = abortController.current;\n\n const token = getTokenCookie();\n const options = {\n method,\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n ...headers,\n },\n body: body !== null ? JSON.stringify(body) : undefined,\n signal,\n };\n\n if (!apiURL) {\n throw new Error(API_URL_ERROR.errorTitle);\n }\n\n return new Promise((resolve, reject) => {\n fetch(`${baseURL}${endpoint}`, options)\n .then((response) => {\n if (response.ok) {\n return response.text();\n }\n return reject(response);\n })\n .then((textData) => {\n const jsonData = textData ? JSON.parse(textData) : {};\n return resolve(jsonData);\n })\n .catch((error) => {\n if (error.name === \"AbortError\") {\n return null;\n }\n return reject(error);\n });\n });\n }, []);\n\n return request;\n };\n}\n\nexport const useGet = getFetchHook(GET);\nexport const usePost = getFetchHook(POST);\nexport const usePut = getFetchHook(PUT);\nexport const usePatch = getFetchHook(PATCH);\nexport const useDelete = getFetchHook(DELETE);\n\nexport default getFetchHook;\n","/* eslint-disable camelcase */\nimport isMSLegacy from \"common/utils/is-ms-legacy\";\nimport { deleteIDBValue, getIDBValue } from \"common/utils/storage/idb\";\nimport {\n CURRENT_BUDGET,\n DUE_DATES_STORE,\n} from \"features/budget/budget.constants\";\nimport {\n clearBudgetRelatedValues,\n getBudgetRelatedValues,\n getStepData,\n LEGACY_clearBudgetRelatedValues,\n LEGACY_getBudgetRelatedValues,\n LEGACY_getStepData,\n LEGACY_saveBudgetRelatedValue,\n LEGACY_saveStepData,\n saveBudgetRelatedValue,\n saveStepData,\n} from \"features/budget/wizard/state/wizard.storage\";\nimport {\n getRelatedStorageItem,\n removeRelatedStorageItem,\n} from \"common/utils/storage/legacy-storage\";\nimport { getLocalStorageItem } from \"common/utils/storage/local-storage\";\n\nconst STEP = 3;\n\nexport async function saveScheduleAssignments(assignments) {\n if (isMSLegacy() === true) {\n LEGACY_saveStepData(STEP, assignments);\n } else {\n await saveStepData(STEP, assignments);\n }\n}\n\nexport async function getScheduleAssignments() {\n let scheduleAssignments;\n\n if (isMSLegacy() === true) {\n scheduleAssignments = LEGACY_getStepData(STEP);\n } else {\n scheduleAssignments = await getStepData(STEP);\n }\n\n return scheduleAssignments;\n}\n\nexport async function clearSchedulesAssignments() {\n await saveScheduleAssignments(undefined);\n}\n\nexport async function removeDueDate(id) {\n if (isMSLegacy() === true) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n removeRelatedStorageItem(currentBudgetId, DUE_DATES_STORE, id);\n } else {\n await deleteIDBValue(DUE_DATES_STORE, id);\n }\n}\n\nexport async function saveDueDate(id, data) {\n if (isMSLegacy() === true) {\n LEGACY_saveBudgetRelatedValue(DUE_DATES_STORE, id, data);\n } else {\n await saveBudgetRelatedValue(DUE_DATES_STORE, id, data);\n }\n}\n\nexport async function getDueDate(id) {\n let result;\n\n if (isMSLegacy() === true) {\n const currentBudgetId = getLocalStorageItem(CURRENT_BUDGET);\n result = getRelatedStorageItem(currentBudgetId, DUE_DATES_STORE, id);\n } else {\n result = await getIDBValue(DUE_DATES_STORE, id);\n }\n return result;\n}\n\nexport async function getDueDates() {\n let result;\n\n if (isMSLegacy() === true) {\n result = LEGACY_getBudgetRelatedValues(DUE_DATES_STORE);\n } else {\n result = await getBudgetRelatedValues(DUE_DATES_STORE);\n }\n return result;\n}\n\nexport async function clearDueDates() {\n if (isMSLegacy() === true) {\n LEGACY_clearBudgetRelatedValues(DUE_DATES_STORE);\n } else {\n await clearBudgetRelatedValues(DUE_DATES_STORE);\n }\n}\n","/* eslint-disable camelcase */\nimport isMSLegacy from \"common/utils/is-ms-legacy\";\n\nimport {\n getStepData,\n LEGACY_getStepData,\n LEGACY_saveStepData,\n saveStepData,\n} from \"features/budget/wizard/state/wizard.storage\";\n\nconst STEP = 2;\n\nexport async function saveCompanyStructure(values) {\n if (isMSLegacy() === true) {\n LEGACY_saveStepData(STEP, values);\n } else {\n await saveStepData(STEP, values);\n }\n}\n\nexport async function getCompanyStructure() {\n let companyStructure;\n\n if (isMSLegacy() === true) {\n companyStructure = LEGACY_getStepData(STEP);\n } else {\n companyStructure = await getStepData(STEP);\n }\n return companyStructure;\n}\n\nexport async function clearCompanyStructure() {\n await saveCompanyStructure(undefined);\n}\n","/* eslint-disable camelcase */\nimport isMSLegacy from \"common/utils/is-ms-legacy\";\nimport {\n getStepData,\n LEGACY_getStepData,\n LEGACY_saveStepData,\n saveStepData,\n} from \"features/budget/wizard/state/wizard.storage\";\n\nconst STEP = 0;\n\nexport async function saveBudgetMeta(budgetMeta) {\n let meta = { ...budgetMeta };\n\n // Save Sets as arrays\n const newDueDates = budgetMeta?.newDueDatesSet;\n if (newDueDates !== undefined && newDueDates instanceof Set) {\n const newDueDatesSet = [...newDueDates.values()];\n meta = { ...meta, newDueDatesSet };\n }\n\n const newTemplates = budgetMeta?.newTemplatesSet;\n if (newTemplates !== undefined && newTemplates instanceof Set) {\n const newTemplatesSet = [...newTemplates.values()];\n meta = { ...meta, newTemplatesSet };\n }\n\n if (isMSLegacy() === true) {\n LEGACY_saveStepData(STEP, meta);\n } else {\n await saveStepData(STEP, meta);\n }\n}\n\nexport async function getBudgetMeta() {\n let meta;\n\n if (isMSLegacy() === true) {\n meta = LEGACY_getStepData(STEP);\n } else {\n meta = await getStepData(STEP);\n }\n\n // Convert arrays back to Sets\n if (meta !== undefined) {\n const newDueDates = meta.newDueDatesSet;\n const newTemplates = meta.newTemplatesSet;\n if (newDueDates !== undefined && Array.isArray(newDueDates)) {\n const newDueDatesSet = new Set(newDueDates);\n meta = {\n ...meta,\n newDueDatesSet,\n };\n }\n if (newTemplates !== undefined && Array.isArray(newTemplates)) {\n const newTemplatesSet = new Set(newTemplates);\n meta = {\n ...meta,\n newTemplatesSet,\n };\n }\n }\n\n return meta;\n}\n\nexport async function clearBudgetMeta() {\n await saveBudgetMeta(undefined);\n}\n","import { Component } from \"react\";\nimport reactChildrenType from \"common/proptypes/react-children.proptypes\";\n\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error) {\n return { hasError: true, error };\n }\n\n render() {\n const { children, fallback } = this.props;\n const { hasError } = this.state;\n\n if (hasError) {\n return fallback;\n }\n\n return children;\n }\n}\n\nErrorBoundary.propTypes = {\n children: reactChildrenType.isRequired,\n fallback: reactChildrenType.isRequired,\n};\n\nexport default ErrorBoundary;\n","const inputStyles = (theme) => ({\n input: {\n \"&:-webkit-autofill\": {\n WebkitBoxShadow:\n theme.palette.type === \"dark\" ? \"0 0 0 100px #292828 inset\" : null,\n WebkitTextFillColor: theme.palette.type === \"dark\" ? \"#fff\" : null,\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n },\n },\n});\n\nexport default inputStyles;\n","import { memo } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport TextField from \"@material-ui/core/TextField\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport inputStyles from \"common/components/form-fields/input/input.styles\";\nimport areEqual from \"common/components/form-fields/utils/are-equal\";\n\nconst useStyles = makeStyles(inputStyles);\n\nfunction InputField({\n name,\n touched,\n error,\n inputPropsOptions,\n onBlur,\n onChange,\n value,\n variant,\n label,\n margin,\n fullWidth,\n required,\n className,\n multiline,\n rows,\n placeholder,\n type,\n disabled,\n}) {\n const classes = useStyles();\n\n return (\n \n );\n}\n\nInputField.propTypes = {\n name: PropTypes.string.isRequired,\n touched: PropTypes.bool.isRequired,\n error: PropTypes.string,\n inputPropsOptions: PropTypes.instanceOf(Object).isRequired,\n onBlur: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n variant: PropTypes.oneOf([\"standard\", \"outlined\", \"filled\"]).isRequired,\n label: PropTypes.string.isRequired,\n margin: PropTypes.oneOf([\"none\", \"dense\", \"normal\"]).isRequired,\n fullWidth: PropTypes.bool,\n required: PropTypes.bool,\n className: PropTypes.string,\n multiline: PropTypes.bool,\n rows: PropTypes.string,\n placeholder: PropTypes.string,\n type: PropTypes.oneOf([\"text\", \"number\"]),\n disabled: PropTypes.bool,\n};\n\nInputField.defaultProps = {\n error: undefined,\n fullWidth: false,\n required: false,\n className: \"\",\n multiline: false,\n rows: \"\",\n placeholder: \"\",\n type: \"text\",\n disabled: false,\n};\n\nexport default memo(InputField, areEqual);\n","import PropTypes from \"prop-types\";\nimport { useField } from \"formik\";\n\nimport InputFieldComponent from \"common/components/form-fields/input/input.component\";\n\nfunction InputField({\n variant,\n label,\n margin,\n fullWidth,\n required,\n className,\n multiline,\n rows,\n placeholder,\n type,\n inputPropsOptions,\n disabled,\n ...props\n}) {\n const [field, meta] = useField(props);\n\n const { name, onBlur, onChange, value } = field;\n const { touched, error } = meta;\n\n return (\n \n );\n}\n\nInputField.propTypes = {\n variant: PropTypes.oneOf([\"standard\", \"outlined\", \"filled\"]).isRequired,\n label: PropTypes.string.isRequired,\n margin: PropTypes.oneOf([\"none\", \"dense\", \"normal\"]).isRequired,\n fullWidth: PropTypes.bool,\n required: PropTypes.bool,\n className: PropTypes.string,\n multiline: PropTypes.bool,\n rows: PropTypes.string,\n placeholder: PropTypes.string,\n type: PropTypes.oneOf([\"text\", \"number\"]),\n inputPropsOptions: PropTypes.instanceOf(Object),\n disabled: PropTypes.bool,\n};\n\nInputField.defaultProps = {\n fullWidth: false,\n required: false,\n className: \"\",\n multiline: false,\n rows: \"\",\n placeholder: \"\",\n type: \"text\",\n inputPropsOptions: {},\n disabled: false,\n};\n\nexport default InputField;\n","/* eslint-disable camelcase */\nimport isMSLegacy from \"common/utils/is-ms-legacy\";\nimport {\n getStepData,\n LEGACY_getStepData,\n LEGACY_saveStepData,\n saveStepData,\n} from \"features/budget/wizard/state/wizard.storage\";\n\nconst STEP = 5;\n\nexport async function saveOwnerAssignments(assignments) {\n if (isMSLegacy() === true) {\n LEGACY_saveStepData(STEP, assignments);\n } else {\n await saveStepData(STEP, assignments);\n }\n}\n\nexport async function getOwnerAssignments() {\n let ownerAssignments;\n\n if (isMSLegacy() === true) {\n ownerAssignments = LEGACY_getStepData(STEP);\n } else {\n ownerAssignments = await getStepData(STEP);\n }\n return ownerAssignments;\n}\n\nexport async function clearOwners() {\n await saveOwnerAssignments(undefined);\n}\n","export const ALL_ACCOUNTS_ID = 0;\nexport const ALL_ACCOUNTS_NAME = \"All Accounts\";\n","function areEqual(prevProps, nextProps) {\n const { value, touched, error, name, disabled } = prevProps;\n const {\n value: nextValue,\n touched: nextTouched,\n error: nextError,\n name: nextName,\n disabled: nextDisabled,\n } = nextProps;\n\n return (\n value === nextValue &&\n touched === nextTouched &&\n error === nextError &&\n name === nextName &&\n disabled === nextDisabled\n );\n}\n\nexport default areEqual;\n","const TOKEN_ERROR =\n \"Internal server error .The token doesn't seem to be in a proper JWT format.\";\n\nexport default TOKEN_ERROR;\n","const errorMessageStyles = () => ({\n message: {\n width: 310,\n overflowWrap: \"break-word\",\n },\n \"@media (min-width: 1280px)\": {\n message: {\n width: 330,\n },\n },\n});\n\nexport default errorMessageStyles;\n","import Typography from \"@material-ui/core/Typography\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport errorMessageStyles from \"common/components/fallbacks/error-message.styles\";\n\nconst useStyles = makeStyles(errorMessageStyles);\n\nfunction ErrorMessage() {\n const classes = useStyles();\n return (\n
\n \n Oh no\n \n \n There was an error on our end.\n \n \n Please try again in a couple of minutes.\n \n
\n );\n}\n\nexport default ErrorMessage;\n","export const CHANGE_SELECTED_TEMPLATE = \"CHANGE_SELECTED_TEMPLATE\";\n\nexport function changeSelectedTemplate(template) {\n return {\n type: CHANGE_SELECTED_TEMPLATE,\n payload: {\n template,\n },\n };\n}\n","export const SET_PARENTS_TREE = \"SET_PARENTS_TREE\";\n\nexport const setParentsTree = (parentsMap) => ({\n type: SET_PARENTS_TREE,\n payload: {\n parentsTree: parentsMap,\n },\n});\n","const passwordStyles = (theme) => ({\n passwordVisibilityOffIcon: {\n color: theme.palette.grey.A200,\n },\n input: {\n \"&:-webkit-autofill\": {\n WebkitBoxShadow:\n theme.palette.type === \"dark\" ? \"0 0 0 100px #292828 inset\" : null,\n WebkitTextFillColor: theme.palette.type === \"dark\" ? \"#fff\" : null,\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n },\n },\n});\n\nexport default passwordStyles;\n","/* eslint-disable jsx-a11y/no-autofocus */\nimport { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { useField } from \"formik\";\n\nimport FormControl from \"@material-ui/core/FormControl\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport FilledInput from \"@material-ui/core/FilledInput\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport Visibility from \"@material-ui/icons/Visibility\";\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\n\nimport isMSLegacy from \"common/utils/is-ms-legacy\";\nimport passwordStyles from \"./password.styles\";\n\nconst useStyles = makeStyles(passwordStyles);\n\nfunction PasswordField({\n variant,\n label,\n margin,\n fullWidth,\n required,\n className,\n inputProps,\n autoFocus,\n showVisibilityToggle,\n ...props\n}) {\n // eslint-disable-next-line no-unused-vars\n const [showPassword, setShowPassword] = useState(false);\n const [field, meta] = useField(props);\n\n const { name, onBlur, onChange, value } = field;\n\n const classes = useStyles();\n\n const handleClickShowPassword = () => {\n setShowPassword(!showPassword);\n };\n const handleMouseDownPassword = (event) => {\n event.preventDefault();\n };\n\n return (\n \n \n {label}\n \n \n \n {showPassword ? (\n \n ) : (\n \n )}\n \n \n )\n }\n name={name}\n onBlur={onBlur}\n onChange={onChange}\n value={value}\n />\n \n {meta.touched ? meta.error : \"\"}\n \n \n );\n}\n\nPasswordField.propTypes = {\n variant: PropTypes.oneOf([\"standard\", \"outlined\", \"filled\"]).isRequired,\n label: PropTypes.string.isRequired,\n margin: PropTypes.oneOf([\"none\", \"dense\", \"normal\"]).isRequired,\n fullWidth: PropTypes.bool,\n required: PropTypes.bool,\n className: PropTypes.string,\n inputProps: PropTypes.objectOf(PropTypes.string),\n autoFocus: PropTypes.bool,\n showVisibilityToggle: PropTypes.bool,\n};\n\nPasswordField.defaultProps = {\n fullWidth: false,\n required: false,\n className: \"\",\n inputProps: null,\n autoFocus: false,\n showVisibilityToggle: true,\n};\n\nexport default PasswordField;\n","export function setSessionStorageItem(key, value) {\n sessionStorage.setItem(key, value);\n}\n\nexport function getSessionStorageItem(key) {\n return sessionStorage.getItem(key);\n}\n\nexport function removeSessionStorageItem(key) {\n sessionStorage.removeItem(key);\n}\n\nexport function clearAllSessionStorage() {\n sessionStorage.clear();\n}\n","import PropTypes from \"prop-types\";\nimport theme from \"common/themes/default.theme\";\n\nconst ProgressClock = ({ fill, className }) => (\n \n \n \n);\n\nProgressClock.propTypes = {\n fill: PropTypes.string,\n className: PropTypes.string,\n};\n\nProgressClock.defaultProps = {\n fill: theme.palette.blue.main,\n className: null,\n};\n\nexport default ProgressClock;\n","import PropTypes from \"prop-types\";\n\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport Slide from \"@material-ui/core/Slide\";\nimport SnackbarContent from \"@material-ui/core/SnackbarContent\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport reactChildrenType from \"common/proptypes/react-children.proptypes\";\nimport { toastStyles } from \"common/context/toast/toast-styles\";\n\nconst useStyles = makeStyles(toastStyles);\n\nfunction SlideTransition(props) {\n return (\n \n );\n}\n\nexport function Toast({\n isOpen,\n onClose,\n children = null,\n type = \"normal\",\n message = \"\",\n}) {\n const classes = useStyles();\n\n function handleClose(e, reason) {\n if (reason !== \"clickaway\") {\n onClose(e);\n }\n }\n\n return (\n \n
\n {children ?? }\n
\n \n );\n}\n\nToast.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n children: reactChildrenType,\n type: PropTypes.oneOf([\"error\", \"warning\", \"success\", \"normal\"]),\n message: PropTypes.string,\n};\n","export const toastStyles = (theme) => ({\n error: {\n \"& *\": {\n color: theme.palette.error.main,\n },\n border: `1px solid ${theme.palette.error.main}`,\n borderLeftWidth: 10,\n },\n warning: {\n \"& *\": {\n color: theme.palette.warning.main,\n },\n border: `1px solid ${theme.palette.warning.main}`,\n borderLeftWidth: 10,\n },\n success: {\n \"& *\": {\n color: theme.palette.success.main,\n },\n border: `1px solid ${theme.palette.success.main}`,\n borderLeftWidth: 10,\n },\n});\n","export const detailsToastStyles = (theme) => ({\n toastContent: {\n maxWidth: 500,\n maxHeight: 250,\n overflowY: \"auto\",\n \"& .MuiAccordionSummary-expandIcon\": {\n transform: \"none\",\n },\n },\n expansionToggle: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n \"& > *\": {\n color: theme.palette.common.white,\n fill: theme.palette.common.white,\n },\n },\n expansionDetails: {\n color: theme.palette.common.white,\n },\n});\n","import PropTypes from \"prop-types\";\n\nimport Accordion from \"@material-ui/core/Accordion\";\nimport AccordionSummary from \"@material-ui/core/AccordionSummary\";\nimport AccordionDetails from \"@material-ui/core/AccordionDetails\";\nimport Typography from \"@material-ui/core/Typography\";\nimport ExpandLessIcon from \"@material-ui/icons/ExpandLess\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\n\nimport { Toast } from \"common/context/toast/toast\";\nimport { detailsToastStyles } from \"common/context/toast/details-toast-styles\";\n\nconst useStyles = makeStyles(detailsToastStyles);\n\nexport function DetailsToast({\n isOpen,\n type,\n message,\n onClose: handleClose,\n isExpanded,\n details,\n toggleDetails,\n}) {\n const classes = useStyles();\n\n return (\n \n {details === \"\" ? null : (\n \n \n \n {isExpanded ? \"Hide\" : \"View\"} details\n \n {isExpanded ? : }\n \n }\n aria-controls=\"toast-details-content\"\n id=\"toast-details-header\"\n >\n {message}\n \n \n \n {details}\n \n \n \n )}\n \n );\n}\n\nDetailsToast.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n type: PropTypes.oneOf([\"error\", \"warning\", \"success\", \"normal\"]).isRequired,\n message: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n details: PropTypes.string.isRequired,\n isExpanded: PropTypes.bool.isRequired,\n toggleDetails: PropTypes.func.isRequired,\n};\n","import * as React from \"react\";\nimport { DetailsToast } from \"common/context/toast/details-toast\";\n\nconst ToastDispatchContext = React.createContext(undefined);\nToastDispatchContext.displayName = \"ToastDispatchContext\";\n\nconst initialState = {\n isOpen: false,\n type: \"normal\",\n message: \"\",\n isExpanded: false,\n details: \"\",\n};\n\nconst actionTypes = {\n toastClosed: \"TOAST_CLOSED\",\n successfulAction: \"SUCCESSFUL_ACTION\",\n errorHappened: \"ERROR_HAPPENED\",\n warningHappened: \"WARNING_HAPPENED\",\n toggleToastDetails: \"TOGGLE_TOAST_DETAILS\",\n};\n\nfunction toastReducer(state, action) {\n const { type, payload } = action;\n\n switch (type) {\n case actionTypes.toastClosed:\n return initialState;\n case actionTypes.toggleToastDetails:\n return {\n ...state,\n isExpanded: !state.isExpanded,\n };\n case actionTypes.successfulAction:\n return {\n ...state,\n isOpen: true,\n message: payload,\n type: \"success\",\n };\n case actionTypes.errorHappened:\n return {\n ...state,\n isOpen: true,\n type: \"error\",\n message: payload.message,\n details: payload.details,\n };\n case actionTypes.warningHappened:\n return {\n ...state,\n isOpen: true,\n type: \"warning\",\n message: payload.message,\n details: payload.details,\n };\n default: {\n const exhaustiveCheck = state;\n return exhaustiveCheck;\n }\n }\n}\n\nexport function ToastProvider({ children }) {\n const [{ isOpen, type, message, isExpanded, details }, dispatch] =\n React.useReducer(toastReducer, initialState);\n\n function handleClose() {\n dispatch({ type: actionTypes.toastClosed });\n }\n\n function toggleDetails() {\n dispatch({ type: actionTypes.toggleToastDetails });\n }\n\n return (\n \n {children}\n \n \n );\n}\n\nexport function useToastDispatch() {\n const context = React.useContext(ToastDispatchContext);\n\n if (context === undefined) {\n throw new Error(\"useToastDispatch must be used within a ToastProvider\");\n }\n\n return context;\n}\n\nexport function showSuccessToast(dispatch, message) {\n dispatch({ type: actionTypes.successfulAction, payload: message });\n}\n\nexport function showErrorToast(dispatch, message, details = \"\") {\n dispatch({ type: actionTypes.errorHappened, payload: { message, details } });\n}\n\nexport function showWarningToast(dispatch, message, details = \"\") {\n dispatch({\n type: actionTypes.warningHappened,\n payload: { message, details },\n });\n}\n","export const CHANGE_SCENARIO_NAME = \"CHANGE_SCENARIO_NAME\";\nexport const CHANGE_VALID = \"CHANGE_VALID\";\nexport const CHANGE_SUBMITTING = \"CHANGE_SUBMITTING\";\nexport const CHANGE_REQUESTING_NEXT = \"CHANGE_REQUESTING_NEXT\";\nexport const CHANGE_FETCHING = \"CHANGE_FETCHING\";\nexport const CHANGE_CALLING_NEXT_CALLBACK = \"CHANGE_CALLING_NEXT_CALLBACK\";\n\nexport const changeScenarioName = (name) => ({\n type: CHANGE_SCENARIO_NAME,\n payload: {\n scenarioName: name,\n },\n});\n\nexport const changeValid = (valid) => ({\n type: CHANGE_VALID,\n payload: { valid },\n});\n\nexport const changeSubmitting = (submitting) => ({\n type: CHANGE_SUBMITTING,\n payload: { submitting },\n});\n\nexport const changeRequestingNext = (requestingNext) => ({\n type: CHANGE_REQUESTING_NEXT,\n payload: { requestingNext },\n});\n\nexport const changeFetching = (fetching) => ({\n type: CHANGE_FETCHING,\n payload: { fetching },\n});\n\nexport const changeCallingNextCallback = (calling) => ({\n type: CHANGE_CALLING_NEXT_CALLBACK,\n payload: { calling },\n});\n","/* eslint-disable no-await-in-loop */\nimport { openDB } from \"idb\";\nimport appVersion from \"common/config/app-version.config\";\n\nexport const IDB_NAME = \"FYI\";\nconst DEV_VERSION = 1;\nconst BUILD_SEPARATOR = \"#\";\nconst REVISION_SEPARATOR = \".\";\n\nexport function getIDBVersion() {\n if (process.env.NODE_ENV === \"production\") {\n const [, buildVersion] = appVersion.split(BUILD_SEPARATOR);\n const [date, revision] = buildVersion.split(REVISION_SEPARATOR);\n const paddedRevision = revision.padStart(3, \"0\");\n\n return Number(`${date}${paddedRevision}`);\n }\n return DEV_VERSION;\n}\n\nexport async function createIDBStores(stores) {\n let version;\n try {\n version = getIDBVersion();\n } catch (error) {\n return error;\n }\n\n try {\n await openDB(IDB_NAME, version, {\n upgrade(database) {\n // eslint-disable-next-line no-restricted-syntax\n stores.forEach(\n ({\n storeName,\n keyPath = null,\n autoIncrement = false,\n index = null,\n }) => {\n if (database.objectStoreNames.contains(storeName) === false) {\n const store = database.createObjectStore(storeName, {\n keyPath,\n autoIncrement,\n });\n\n if (index !== null) {\n store.createIndex(index.name, index.keyPath);\n }\n }\n },\n );\n },\n });\n } catch (error) {\n return error;\n }\n\n return null;\n}\n\nexport async function putIDBValue(storeName, value, key = undefined) {\n const db = await openDB(IDB_NAME, getIDBVersion());\n const id = await db.put(storeName, value, key);\n\n return id;\n}\n\nexport async function getIDBValue(storeName, key) {\n const db = await openDB(IDB_NAME, getIDBVersion());\n const value = await db.get(storeName, key);\n\n return value;\n}\n\nexport async function deleteIDBValue(storeName, key) {\n const db = await openDB(IDB_NAME, getIDBVersion());\n await db.delete(storeName, key);\n}\n\nexport async function clearIDBStore(storeName) {\n const db = await openDB(IDB_NAME, getIDBVersion());\n await db.clear(storeName);\n}\n\nexport async function getCursor(\n storeName,\n query = undefined,\n transactionMode = undefined,\n) {\n const db = await openDB(IDB_NAME, getIDBVersion());\n\n const cursor = await db\n .transaction(storeName, transactionMode)\n .store.openCursor(query);\n return cursor;\n}\n\nexport async function getCursorFromIndex(\n storeName,\n indexName,\n query,\n transactionMode = undefined,\n) {\n const db = await openDB(IDB_NAME, getIDBVersion());\n\n const index = await db\n .transaction(storeName, transactionMode)\n .store.index(indexName);\n const cursor = await index.openCursor(query);\n return cursor;\n}\n\nexport async function getAllFromCursor(\n storeName,\n query = undefined,\n withKey = false,\n) {\n let cursor = await getCursor(storeName, query);\n let result = [];\n\n while (cursor) {\n if (withKey === true) {\n result = result.concat({ key: cursor.key, value: cursor.value });\n } else {\n result = result.concat(cursor.value);\n }\n cursor = await cursor.continue();\n }\n\n return result;\n}\n\nexport async function getAllFromIndex(storeName, indexName, query) {\n let cursor = await getCursorFromIndex(storeName, indexName, query);\n let result = [];\n\n while (cursor) {\n result = result.concat(cursor.value);\n cursor = await cursor.continue();\n }\n\n return result;\n}\n\nexport async function deleteAllFromIndex(storeName, indexName, query) {\n let cursor = await getCursorFromIndex(\n storeName,\n indexName,\n query,\n \"readwrite\",\n );\n\n while (cursor) {\n await cursor.delete();\n cursor = await cursor.continue();\n }\n}\n\nexport async function idbKeyExists(storeName, key) {\n const db = await openDB(IDB_NAME, getIDBVersion());\n const count = await db.count(storeName, key);\n return count > 0;\n}\n","import createTheme from \"@material-ui/core/styles/createTheme\";\n\nexport const listItemHeight = 46; // default in the material-ui virtualized list example\nexport const inputHeight = 56; // default in material-ui TextField component, used for skeletons\nexport const space = 8; // default recommended by material and default in material-ui theme\nconst paper = \"#1d1c1c\";\n\nexport const appDefaults = {\n headerHeight: space * 10, // 80px\n sidebarWidth: space * 10, // 80px\n footerHeight: space * 7.5, // 60px\n maxContentWidth: 1440, // per design\n};\n\nconst theme = createTheme({\n breakpoints: {\n values: {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1800,\n },\n },\n overrides: {\n MuiButton: {\n root: {\n fontWeight: 700,\n },\n },\n MuiPickersCalendarHeader: {\n switchHeader: {\n minHeight: space * 4,\n },\n dayLabel: {\n width: space * 3,\n textTransform: \"uppercase\",\n fontSize: \"0.5rem\",\n },\n },\n MuiPickersCalendar: {\n transitionContainer: {\n marginTop: space,\n minHeight: space * 18,\n },\n },\n MuiPickersDay: {\n day: {\n width: space * 2.25,\n height: space * 2.25,\n margin: `${space * 0.375}px ${space * 0.625}px`,\n },\n },\n MuiSnackbarContent: {\n root: {\n backgroundColor: paper,\n color: \"inherit\",\n },\n },\n },\n palette: {\n background: {\n default: \"#101010\",\n paper,\n },\n primary: {\n main: \"#ff9800\",\n },\n secondary: {\n main: \"#ffd600\",\n },\n corporateGreen: {\n main: \"#7ab742\",\n dark: \"#6A9E39\",\n },\n error: {\n main: \"#d32f2f\",\n dark: \"#a82424\",\n },\n success: {\n main: \"#7bb442\",\n },\n warning: {\n main: \"#ffd600\",\n },\n blue: {\n main: \"#247afd\",\n },\n indeterminateCheckbox: {\n main: \"#997000\",\n },\n type: \"dark\",\n },\n typography: {\n fontFamily: [\n \"Lato\",\n \"-apple-system\",\n \"BlinkMacSystemFont\",\n '\"Segoe UI\"',\n \"Roboto\",\n '\"Helvetica Neue\"',\n \"Arial\",\n \"sans-serif\",\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n ].join(\",\"),\n },\n});\n\nexport default theme;\n","import {\n ACCOUNTS_KEY,\n COMPANY_STRUCTURE_KEY,\n OWNERS_KEY,\n ASSUMPTION_KEY,\n SCHEDULES_KEY,\n START_KEY,\n TEMPLATES_KEY,\n WORKFORCE_KEY,\n} from \"features/budget/budget.constants\";\n\nconst steps = [\n {\n key: START_KEY,\n caption: \"Start\",\n tooltip:\n \"Here you will define the calendar and scenario name. Also you can start based on a previously made one.\",\n idbKey: \"formValues\",\n },\n {\n key: ACCOUNTS_KEY,\n caption: \"Accounts\",\n tooltip:\n \"You'll have to select an account collection to work on your budget. This will define the rows on your template.\",\n idbKey: \"rowDef\",\n },\n {\n key: COMPANY_STRUCTURE_KEY,\n caption: \"Company Structure\",\n tooltip:\n \"Your budget's structure organizes your budgeted accounts and automatically defines the approval chains.\",\n idbKey: \"companyStructure\",\n },\n {\n key: ASSUMPTION_KEY,\n caption: \"Assumptions\",\n tooltip: \"Your assumptions\",\n idbKey: \"assumption\",\n },\n {\n key: SCHEDULES_KEY,\n caption: \"Schedules\",\n tooltip:\n \"Create schedules to assign different units from your company structure\",\n idbKey: \"scheduleAssignments\",\n },\n {\n key: TEMPLATES_KEY,\n caption: \"Templates\",\n tooltip:\n \"Here you can create specific templates-list for different groups from the company structure.\",\n idbKey: \"templateAssignments\",\n },\n {\n key: WORKFORCE_KEY,\n caption: \"Workforce\",\n tooltip: \"Template Workforce allocation\",\n idbKey: \"workforceAssignments\",\n },\n {\n key: OWNERS_KEY,\n caption: \"Owners\",\n tooltip:\n \"Here you can select which owner will be on charge of a specific node or peer from the company structure.\",\n idbKey: \"ownersAssignments\",\n },\n];\n\nexport default steps;\n","/* eslint-disable no-restricted-syntax */\nimport store from \"store\";\n\nexport function setStorageItem(key, value) {\n store.set(key, value);\n}\n\nexport function getStorageItem(key) {\n return store.get(key);\n}\n\nexport function removeStorageItem(key) {\n store.remove(key);\n}\n\nexport function clearAllStorage() {\n store.clearAll();\n}\n\nfunction getRelationshipKey(id, foreignCollection, foreignId) {\n return `${id}_${foreignCollection}_${foreignId}`;\n}\n\nfunction getRelationshipPrefix(id, foreignCollection) {\n return `${id}_${foreignCollection}`;\n}\n\nexport function setRelatedStorageItem(id, foreignCollection, foreignId, value) {\n const key = getRelationshipKey(id, foreignCollection, foreignId);\n\n setStorageItem(key, value);\n}\n\nexport function getRelatedStorageItem(id, foreignCollection, foreignId) {\n const key = getRelationshipKey(id, foreignCollection, foreignId);\n\n return getStorageItem(key);\n}\n\nexport function removeRelatedStorageItem(id, foreignCollection, foreignId) {\n const key = getRelationshipKey(id, foreignCollection, foreignId);\n\n removeStorageItem(key);\n}\n\nexport function getRelatedStorageItems(id, foreignCollection) {\n const prefix = getRelationshipPrefix(id, foreignCollection);\n let result = [];\n\n store.each((value, key) => {\n if (key.startsWith(prefix)) {\n result = [...result, value];\n }\n });\n\n return result;\n}\n\nexport function clearRelatedStorageItems(id, foreignCollection) {\n const prefix = getRelationshipPrefix(id, foreignCollection);\n let keys = [];\n\n store.each((value, key) => {\n if (key.startsWith(prefix)) {\n keys = [...keys, key];\n }\n });\n\n for (const key of keys) {\n store.remove(key);\n }\n}\n","// Set via the public/config.js file\nconst { apiURL } = window.APP_CONFIG;\n\nexport default apiURL;\n"],"sourceRoot":""}