{"version":3,"sources":["state/LocalStorage.ts","utilities/request.ts","state/User.ts","state/root.ts","utilities/colors.ts","common/Button.tsx","common/Tooltip.tsx","common/CalculationHeader.tsx","common/Dialog.tsx","common/TimeoutDialog.tsx","state/Calculation.ts","state/Admin.ts","state/Alert.ts","components/Admin/BulkUpdate.tsx","common/CalculationSection.tsx","state/CalculationErrors.ts","common/useId.tsx","common/CalculationSelect.tsx","common/TextField.tsx","common/CalculationTextField.tsx","components/Admin/CreateCalculation.tsx","common/CalculationDate.tsx","common/CalculationLabel.tsx","utilities/user.ts","components/Calculation/Contributions.tsx","components/Admin/CreateMember.tsx","common/PasswordField.tsx","components/Admin/ManageMember.tsx","components/Admin/Spreadsheet.tsx","components/BenefitOptions/BenefitOptions.tsx","components/BenefitOptions/index.ts","components/Calculation/Results.tsx","common/CalculationDialog.tsx","components/Calculation/BasicInformation.tsx","state/Guard.ts","components/Calculation/BenefitElections.tsx","components/Calculation/ServiceAndSalary.tsx","components/Calculation/Calculation.tsx","components/Calculation/index.ts","components/Calculation/Export.tsx","components/Home/HomeAdmin.tsx","components/Home/Home.tsx","components/Home/index.ts","components/Login/ForgotPassword.tsx","components/Login/Login.tsx","components/Login/index.ts","components/Login/ResetPassword.tsx","components/Login/UpdatePassword.tsx","components/RepaymentOfContributions/RepaymentOfContributions.tsx","components/RepaymentOfContributions/index.ts","components/Header/Header.tsx","components/Header/index.ts","common/Guard.tsx","components/Admin/ExportResults.tsx","components/ContactUs/ContactUs.tsx","components/NavMenu/NavMenu.tsx","components/NavMenu/index.ts","Layout.tsx","App.tsx","index.tsx"],"names":["LocalStorage","acceptedTerms","makeAutoObservable","this","_syncToLocalStorage","name","storedJson","localStorage","getItem","Object","assign","JSON","parse","autorun","setItem","stringify","axios","defaults","headers","get","interceptors","response","use","config","error","StatusCode","ErrorCode","Api","request","User","makeObservable","a","_endpoint","status","runInAction","data","undefined","password","currentPassword","put","id","_toServer","post","email","firstName","lastName","userType","deactivated","needsPasswordChange","username","load","telephone","message","token","userData","newUser","observable","RootStore","Login","user","ContactUs","StartEmailReset","FinishEmailReset","logout","RootState","RootContext","React","createContext","Colors","useStyles","makeStyles","theme","gold","backgroundColor","red","slate","green","containedPrimary","colorInitial","color","variant","props","styles","Button","classes","tooltip","marginLeft","marginTop","Tooltip","style","title","placement","className","icon","size","centered","textAlign","display","marginBottom","formLabel","margin","height","width","fontWeight","primary","secondary","CalculationHeader","FormLabel","clsx","useDialogTitleStyles","root","padding","spacing","closeButton","position","right","top","palette","grey","DialogTitle","onClose","disableTypography","IconButton","onClick","DialogContent","withStyles","MuiDialogContent","DialogActions","MuiDialogActions","Dialog","open","setOpen","maxWidth","children","dividers","Grid","container","warningTime","TimeoutDialog","useState","showDialog","setShowDialog","rootContext","useContext","refresh","useCallback","window","location","reload","useEffect","showDialogHandle","logoutHandle","interceptRequestHandle","setTimeout","clearTimeout","eject","paddingLeft","autoFocus","EMPTY_DATE","Calculation","userId","uniqueId","isRepayment","created","calculationName","isFinal","lastState","originalState","getState","exportResult","export","reduce","previous","current","address","text","_fromServer","c","updateState","pageId","employeeNumber","gender","dateOfBirth","moment","dateOfMembership","description","benefitType","isProjection","lastDayOfEmployment","dateOfRetirement","beneficiaryInformationFirstName","beneficiaryInformationLastName","beneficiaryDateOfBirth","multipleBeneficiaries","employer","totalMemberContributions","totalBenefitContributions","nonTaxableContributions","extraContributionsPre83","extraContributionsPost83","memberContributionsLastQuarter","benefitContributionsLastQuarter","memberContributionsLastPayPeriod","benefitContributionsLastPayPeriod","additionalContributionsPre83","additionalContributionsPost83","currentContributionsLastPayDate","serviceAdjustmentPre83Years","serviceAdjustmentPre83Months","serviceAdjustmentPre83Days","serviceAdjustmentPre83Hours","serviceAdjustmentPost83Years","serviceAdjustmentPost83Months","serviceAdjustmentPost83Days","serviceAdjustmentPost83Hours","portability","portabilitySystem","portabilityFae","portabilityService","portabilityOfServicePost97","finalSalary","currentGrossPayPerPeriod","salaryInflation","monthlyRate1","longevity1","months1","monthlyRate2","longevity2","months2","monthlyRate3","longevity3","months3","monthlyRate4","longevity4","months4","monthlyRate5","longevity5","months5","monthlyRate6","longevity6","months6","monthlyRate7","longevity7","months7","monthlyRate8","longevity8","months8","code9Time","annuitantType","annuitantDateOfBirth","benefitOption","benefitOptions","nonTaxables","ssAdjustment","ssAtAge62","servicePurchaseSelected","amountOfServiceToPurchase","totalBenefitContributionsLastQuarter","taxTreatmentOfPayment","amountWithdrawn","dateWithdrawn","serviceRegained","repaymentDate","results","format","forceRefresh","calculationId","calculations","map","calculation","computed","action","CalculationStore","getCalculations","currentCalculation","find","CalculationState","CalculationContext","Admin","file","formData","FormData","append","updateText","responseType","calculationToCopy","Ok","delete","forceLoad","calculationListItems","length","eeNumber","sortColumn","sortOrder","page","pageLength","users","u","fromServer","AdminState","AdminContext","AlertStore","currentAlert","AlertState","AlertContext","button","input","BulkUpdate","observer","adminContext","alertContext","calculationContext","value","setValue","onUpdate","bulkUpdate","result","getUserList","showAlert","type","content","usersCreated","usersUpdated","usersDeleted","usersFailed","multiline","rows","onChange","e","currentTarget","grid","borderRadius","CalculationSection","item","sm","CalculationErrors","validateErrors","formErrors","errors","errorString","formErrorString","values","join","formKey","set","_trim","clear","replaceAll","trim","CalculationErrorsState","CalculationErrorContext","useId","initialId","createId","useMenuItemStyles","MenuItem","forwardRef","ref","label","select","flexGrow","labelInner","labelWidth","labelPlacementStart","justifyContent","minWidth","selectError","borderColor","disabled","calculationErrorContext","valueError","addFormError","removeFormError","FormControlLabel","control","Select","target","labelPlacement","NumberFormatCustom","inputRef","other","getInputRef","onValueChange","floatValue","thousandSeparator","textField","textFieldRoot","background","textFieldError","validateEmail","toLowerCase","match","TextField","maxLength","InputProps","hasError","showPassword","setShowPassword","endAdornment","InputAdornment","Visibility","VisibilityOff","currentType","inputProps","decimalScale","fixedDecimalScale","inputComponent","onKeyDown","event","includes","key","preventDefault","alignItems","startAdornment","originalId","hasErrors","mustHaveValue","inputEndAdornment","validation","validationError","emailError","invalidEmail","addError","removeError","CreateCalculation","estimateType","setEstimateType","copyExisting","setCopyExisting","setCalculationToCopy","setEeNumber","items","setItems","getPaginatedCalculationList","foundCalculations","filter","li","userName","sort","b","localeCompare","foundUser","handleCreateCalculation","createCalculation","success","CalculationTextField","CalculationSelect","inputError","inputValue","minDateMessage","minDate","maxDateMessage","maxDate","labelOverride","isSame","isValid","isInRange","isAfter","isBefore","rangeError","inputVariant","invalidDateMessage","placeholder","date","keyboardIcon","allowKeyboardControl","marginRight","paddingTop","paddingBottom","inputRight","CalculationLabel","minimumFractionDigits","rightAlign","displayValue","toLocaleString","maximumFractionDigits","InputBase","fullWidth","isUserAdmin","isUserFullAdmin","filterUserBenefitOptions","isAdmin","bo","employerLookUp","C","T","H","L","D","Contributions","keys","newUserTemplate","CreateMember","setError","setNewUserState","errorContext","setNewUser","state","employeeId","goodEe","handleAddUser","hasAnyErrors","addUser","Failed","CalculationDate","Alert","severity","allErrorString","Provider","PASSWORD_ERROR","PASSWORD_REGEX","enforcePasswordValidation","passwordError","test","adornment","ConfirmationDelete","memberId","showWarning","setShowWarning","handleDelete","deleteUser","opacity","ConfirmationCheck","editUser","handleDeactivate","saveToServer","Checkbox","checked","useEditMemberStyles","userPanel","buttons","EditMemberDrawer","initialUser","setPassword","confirmPassword","setConfirmPassword","isDirty","setEditUser","handleUpdate","errorCode","InvalidPassword","InvalidEmail","Drawer","SlideProps","direction","anchor","chars","len","i","Array","fill","x","Math","floor","random","concat","split","generatePassword","PasswordField","hasFormErrors","ManageMember","setLastName","UserColumns","editable","field","headerName","flex","renderCell","params","getUserTypeString","row","sortable","xs","columns","pageSize","getRowId","disableColumnMenu","autoHeight","rowsPerPageOptions","isCellEditable","isRowSelectable","Spreadsheet","serverFile","setServerFile","setFile","getFiles","files","onFileUpload","addFile","Typography","fileName","accept","htmlFor","component","AttachFile","accordion","accordionExpanded","minHeight","accordionSummary","transition","accordionContent","accordionDetails","flexDirection","BenefitOptions","index","Accordion","expanded","square","AccordionSummary","expandIcon","AccordionDetails","gutterBottom","SalaryMayExceed415ToolTip","SalaryMayExceed401Tooltip","gridLeft","breakpoints","up","paddingRight","gridRight","BenefitsDescription","option","description1","description2","description3","dangerouslySetInnerHTML","__html","Results","md","alignContent","ageOfRetirement","annuitantAge","deathBeneficiaryAge","pre83ExtraContributions","post83ExtraContributions","averageFinalSalary","tersService","flag415Limit","flag401Limit","servicePurchaseAvailable","servicePurchaseAmount","isEligibleForRetirement","nt","formatNumber","decimalPlaces","hasBenefit","dateToString","m","isYes","toYesNo","hasBeneficiary","BasicInformationData","property","groupId","groupFilter","getValue","ContributionData","ServiceAndSalaryData","BenefitElectionsData","yearsNeededToRetire","maxEligibleServicePurchase","ResultsData","show","useCalculationDialogStyles","itemBold","itemLine","borderTop","paper","boxShadow","estimatePaper","border","borderStyle","Row","header","pos","getProperty","obj","forEach","Paper","getRowValue","isMoment","shouldShow","heightStyle","CalculationDialog","slice","d","some","float","ParticipantInformationToolTip","DeathImmediateInformationToolTip","BasicInformation","GuardState","showGuardDialog","Promise","resolve","resolveGuard","GuardContext","AnnuitantInformationToolTip","ServicePurchaseToolTip","benefit","link","cursor","BenefitElections","history","useHistory","guard","paragraph","Link","MuiLink","showGuard","push","underline","isEligibleForRetirementWithoutPurchase","NumberField","inputAdornmentLabel","max","min","isAllowed","abs","onBlur","isNaN","useSalaryStyles","labelCommon","center","labelRightBorder","smallNumber","SalaryRate","showHeaders","rate","hourlyRate","hourlyRateChanged","longevity","longevityChanged","months","monthsChanged","SalaryProjectionToolTip","ServiceAdjustmentToolTip","PortabilityToolTip","ServiceAndSalary","defaultValue","pageIdToTab","tabId","tabToPageId","buttonRight","useParams","tab","currentPageId","calculationPageId","changeTab","updateCalculations","debounce","updateCalculation","dispose","Tabs","indicatorColor","textColor","_","Tab","print","saveCalculation","bold","parent","zoom","blue","borderBottom","toRows","count","start","from","Table","cellSpacing","TD","underlines","Export","er","setExportResults","then","colSpan","isHeader","deleteCalculation","useStylesNameCell","CalculationNameCell","adminCalculation","CalculationColumns","update","HomeAdmin","sortModel","setSortModel","setPage","setRows","rowCount","setRowCount","RouterLink","to","onPageChange","onSortModelChange","paginationMode","sortingMode","descriptionSpacing","useRowStyles","CalculationRow","onSelect","Home","createStyles","loginForm","signInBtn","visualContainer","backgroundImage","backgroundRepeat","clipPath","disclaimer","overflowX","forgotLinks","formContainer","default","forgotPasswordForm","noEmailInstruction","overflow","visual","actions","confirmation","main","confirmationIcon","collapse","expand","ForgotPassword","userEmail","setUserEmail","showPasswordReset","setShowPasswordReset","Box","maxHeight","Hidden","smDown","setUserName","setAcceptedTerms","login","hidden","ResetPassword","showSuccess","setShowSuccess","hasPasswords","validPassword","validatePassword","passwordsMatch","onResetPassword","URL","document","href","searchParams","UpdatePassword","emailAddress","oldState","note","RepaymentOfContributionsToolTip","RepaymentOfContributions","repayment","hasResult","totalRepaymentAmount","amountPerQuarter","useUserStyles","UserInfo","setUserPanelOpen","inBackupCalculations","useLocation","pathname","startsWith","showHeader","profileIcon","fontSize","INVALID_PASSWORD_ERROR","borderBottomStyle","borderBottomColor","borderBottomWidth","userDrawer","userInfo","Header","userPanelOpen","passwordEdit","setPasswordEdit","emailEdit","setEmailEdit","setFirstName","setEmail","setCurrentPassword","setValidateErrors","Fragment","AppBar","elevation","Toolbar","GuardDialog","onCancel","proceed","onSave","ExportResultsDialog","setRequest","updateRequest","oldRequest","handleExportResults","exportResults","saveAs","startDateOfMembership","endDateOfMembership","startDateOfCalculation","endDateOfCalculation","startDateOfRetirement","endDateOfRetirement","ContactUsDialog","setResult","handleSubmit","categoryHeader","categoryItem","selectedMainItem","selectedCategoryItem","categoryHeaderPrimary","common","white","itemIcon","list","listActive","listLogout","ListItem","selected","ListItemIcon","ListItemText","Navigator","contactUsOpen","setContactUsOpen","exportOpen","setExportOpen","inCalculation","calculationPage","replace","inAdmin","adminPage","onChangePage","toCalculation","List","disablePadding","Collapse","in","timeout","unmountOnExit","ExportResults","Guard","Logout","NavMenu","createTheme","light","dark","typography","h5","letterSpacing","shape","MuiTab","disableRipple","mixins","toolbar","overrides","MuiAlert","MuiButton","contained","containedSizeLarge","containedSecondary","textTransform","textDecoration","MuiDataGrid","outline","MuiDrawer","paperAnchorRight","MuiDialog","paperWidthSm","MuiFormControlLabel","MuiSelect","MuiTabs","indicator","borderTopLeftRadius","borderTopRightRadius","MuiOutlinedInput","MuiInputLabel","outlined","MuiIconButton","colorPrimary","MuiTooltip","MuiDivider","MuiListItem","MuiListItemText","fontWeightMedium","MuiListItemIcon","MuiAvatar","body","drawer","flexShrink","app","footer","Layout","mobileOpen","setMobileOpen","ThemeProvider","CssBaseline","smUp","PaperProps","xsDown","alert","path","exact","Snackbar","anchorOrigin","horizontal","vertical","TransitionComponent","Slide","autoHideDuration","library","add","faCalculator","faDonate","faHome","faList","faPaperPlane","faPencilAlt","faQuestion","faQuestionCircle","faSignOutAlt","faSquare","faTools","faTrash","faTrashAlt","faUser","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","render","basename","libInstance","utils","MomentUtils","App"],"mappings":"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","file":"static/js/main.aaee9b0b.chunk.js","sourcesContent":["import { autorun, makeAutoObservable } from \"mobx\";\r\nexport class LocalStorage {\r\n acceptedTerms = false;\r\n\r\n constructor() {\r\n makeAutoObservable(this);\r\n this._syncToLocalStorage(\"localStore\");\r\n }\r\n\r\n private _syncToLocalStorage(name: string): void {\r\n const storedJson = localStorage.getItem(name);\r\n if (storedJson) {\r\n Object.assign(this, JSON.parse(storedJson));\r\n }\r\n\r\n autorun(() => {\r\n localStorage.setItem(\r\n name,\r\n JSON.stringify({ acceptedTerms: this.acceptedTerms })\r\n );\r\n });\r\n }\r\n}\r\n","import axios from \"axios\";\r\n\r\n// IE 11 disable cache\r\naxios.defaults.headers.get[\"Pragma\"] = \"no-cache\";\r\naxios.defaults.headers.get[\"Cache-Control\"] = \"no-cache, no-store\";\r\n\r\naxios.interceptors.response.use(\r\n (config) => config,\r\n (error) => error.response\r\n);\r\n\r\nexport class Api {\r\n static request = axios;\r\n}\r\n","import { makeObservable, observable, runInAction } from \"mobx\";\r\n\r\nimport { Api } from \"../utilities/request\";\r\n\r\nexport enum StatusCode {\r\n Ok = 0,\r\n Failed = 1,\r\n}\r\n\r\nexport enum ErrorCode {\r\n LoginInvalid = 1,\r\n ResetPasswordExpired = 2,\r\n InvalidModel = 3,\r\n InvalidEmail = 4,\r\n InvalidPassword = 5,\r\n InvalidPermissions = 6,\r\n InvalidObjectId = 7,\r\n}\r\nexport interface ServerResult {\r\n status: StatusCode;\r\n errorCode: ErrorCode;\r\n}\r\n\r\nexport interface UserServerData {\r\n email: string;\r\n id: string;\r\n userName: string;\r\n firstName: string;\r\n lastName: string;\r\n userType: string;\r\n deactivated: boolean;\r\n}\r\n\r\nexport type UserType = \"Admin\" | \"User\" | \"TacomaAdmin\";\r\n\r\nexport class User {\r\n static readonly _endpoint = \"/api/User\";\r\n\r\n @observable\r\n email?: string;\r\n\r\n @observable\r\n firstName?: string;\r\n\r\n @observable\r\n lastName?: string;\r\n\r\n @observable\r\n employeeId?: string;\r\n\r\n @observable\r\n deactivated?: boolean;\r\n\r\n @observable\r\n id?: string;\r\n\r\n @observable\r\n userType?: UserType;\r\n\r\n @observable\r\n needsPasswordChange?: boolean;\r\n\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n static async Login(\r\n username: string,\r\n password: string\r\n ): Promise {\r\n const response = await Api.request.post(`${this._endpoint}/login`, {\r\n username,\r\n password,\r\n });\r\n if (response.status === 200) {\r\n return new User().load();\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n static async ContactUs(\r\n name: string,\r\n telephone: string,\r\n email: string,\r\n message: string\r\n ): Promise {\r\n const response = await Api.request.post(`${this._endpoint}/ContactUs`, {\r\n name,\r\n telephone,\r\n email,\r\n message,\r\n });\r\n return response.status === 200;\r\n }\r\n\r\n static async StartEmailReset(email: string): Promise {\r\n const response = await Api.request.post(\r\n `${this._endpoint}/ResetPassword/Request`,\r\n {\r\n email,\r\n }\r\n );\r\n return response.status === 200;\r\n }\r\n\r\n static async FinishEmailReset(\r\n token: string,\r\n password: string\r\n ): Promise {\r\n const response = await Api.request.post(\r\n `${this._endpoint}/ResetPassword/?token=${token}`,\r\n {\r\n password,\r\n }\r\n );\r\n return response.data;\r\n }\r\n\r\n static fromServer(userData: UserServerData): User {\r\n const newUser = new User();\r\n Object.assign(newUser, userData);\r\n return newUser;\r\n }\r\n\r\n async load(): Promise {\r\n const response = await Api.request.get(\r\n `${User._endpoint}/profile`,\r\n {}\r\n );\r\n\r\n if (response.status === 200) {\r\n runInAction(() => {\r\n Object.assign(this, response.data);\r\n });\r\n return this;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n async saveToServer(\r\n data: Partial,\r\n password?: string,\r\n currentPassword?: string\r\n ): Promise {\r\n const response = await Api.request.put(\r\n `${User._endpoint}/${this.id}`,\r\n {\r\n ...this._toServer(data),\r\n password,\r\n currentPassword,\r\n }\r\n );\r\n\r\n runInAction(() => {\r\n if (response.status === 200) {\r\n Object.assign(this, response.data);\r\n }\r\n });\r\n return response.data;\r\n }\r\n\r\n async logout(): Promise {\r\n return Api.request.post(`${User._endpoint}/logout`);\r\n }\r\n\r\n _toServer(data?: Partial): any {\r\n return {\r\n email: this.email,\r\n firstName: this.firstName,\r\n lastName: this.lastName,\r\n userType: this.userType,\r\n deactivated: this.deactivated,\r\n needsPasswordChange: this.needsPasswordChange,\r\n ...data,\r\n };\r\n }\r\n}\r\n","import { makeObservable, observable, runInAction } from \"mobx\";\r\nimport React from \"react\";\r\n\r\nimport { LocalStorage } from \"./LocalStorage\";\r\nimport { ServerResult, User } from \"./User\";\r\n\r\nclass RootStore {\r\n @observable\r\n user?: User;\r\n\r\n @observable\r\n localStorage: LocalStorage;\r\n\r\n constructor() {\r\n this.localStorage = new LocalStorage();\r\n makeObservable(this);\r\n }\r\n\r\n async Login(email: string, password: string): Promise {\r\n const user = await User.Login(email, password);\r\n if (user) {\r\n runInAction(() => {\r\n this.user = user;\r\n this.localStorage.acceptedTerms = true;\r\n });\r\n }\r\n\r\n return !!user;\r\n }\r\n\r\n async ContactUs(\r\n name: string,\r\n telephone: string,\r\n email: string,\r\n message: string\r\n ): Promise {\r\n return User.ContactUs(name, telephone, email, message);\r\n }\r\n\r\n async StartEmailReset(email: string): Promise {\r\n return User.StartEmailReset(email);\r\n }\r\n\r\n async FinishEmailReset(\r\n token: string,\r\n password: string\r\n ): Promise {\r\n return User.FinishEmailReset(token, password);\r\n }\r\n\r\n async Logout(): Promise {\r\n await this.user?.logout();\r\n runInAction(() => {\r\n this.user = undefined;\r\n });\r\n }\r\n}\r\n\r\nconst RootState = new RootStore();\r\nconst RootContext = React.createContext(RootState);\r\n\r\nexport { RootContext, RootState };\r\n","const Colors = {\r\n Black: \"#000000\",\r\n MillimanBlue: \"#004877\",\r\n MillimanBlueHover: \"#004899\",\r\n MillimanGreen: \"#9DB290\",\r\n MillimanGreenHover: \"#9DB2A0\",\r\n VibrantBlue: \"#0080e2\",\r\n VibrantBlueHover: \"#0080ff\",\r\n Sky: \"#50bde1\",\r\n Spring: \"#74bf60\",\r\n SpringHover: \"#74cc60\",\r\n White: \"#ffffff\",\r\n Charcoal: \"#39414d\",\r\n CalculationsBackground: \"#f7f7f7\",\r\n NormalBackground: \"#ffffff\",\r\n TextHeader: \"#161616\",\r\n NavMenuGrey: \"#232f3e\",\r\n Steel: \"#c6c9ca\",\r\n Gold: \"#ffa100\",\r\n GoldHover: \"#cf8d1d\",\r\n Red: \"#a5203f\",\r\n RedHover: \"#82152e\",\r\n Slate: \"#727a7d\",\r\n SlateHover: \"#4a4e4f\",\r\n};\r\n\r\nexport { Colors };\r\n","import Button, {\r\n ButtonProps as ButtonPropsBase,\r\n} from \"@material-ui/core/Button\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport React from \"react\";\r\n\r\nimport { Colors } from \"../utilities/colors\";\r\n\r\ntype ColorType =\r\n | \"inherit\"\r\n | \"primary\"\r\n | \"secondary\"\r\n | \"default\"\r\n | \"gold\"\r\n | \"red\"\r\n | \"slate\"\r\n | \"green\";\r\ninterface ButtonProps extends Omit {\r\n color: ColorType;\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n gold: {\r\n backgroundColor: Colors.Gold,\r\n \"&:hover\": {\r\n backgroundColor: Colors.GoldHover,\r\n },\r\n },\r\n red: {\r\n backgroundColor: Colors.Red,\r\n \"&:hover\": {\r\n backgroundColor: Colors.RedHover,\r\n },\r\n },\r\n slate: {\r\n backgroundColor: Colors.Slate,\r\n \"&:hover\": {\r\n backgroundColor: Colors.SlateHover,\r\n },\r\n },\r\n green: {\r\n backgroundColor: Colors.MillimanGreen,\r\n \"&:hover\": {\r\n backgroundColor: Colors.MillimanGreenHover,\r\n },\r\n },\r\n}));\r\n\r\nexport default ({\r\n color: colorInitial,\r\n variant = \"contained\",\r\n ...props\r\n}: ButtonProps) => {\r\n const styles = useStyles();\r\n let containedPrimary: string | undefined;\r\n let color = colorInitial;\r\n switch (colorInitial) {\r\n case \"gold\":\r\n containedPrimary = styles.gold;\r\n color = \"primary\";\r\n break;\r\n case \"red\":\r\n containedPrimary = styles.red;\r\n color = \"primary\";\r\n break;\r\n case \"slate\":\r\n containedPrimary = styles.slate;\r\n color = \"primary\";\r\n break;\r\n case \"green\":\r\n containedPrimary = styles.green;\r\n color = \"primary\";\r\n break;\r\n default:\r\n containedPrimary = undefined;\r\n break;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport MuiTooltip from \"@material-ui/core/Tooltip\";\r\nimport React from \"react\";\r\n\r\nimport { Colors } from \"../utilities/colors\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n tooltip: {\r\n marginLeft: \"0.5rem\",\r\n marginTop: \"-0.2rem\",\r\n },\r\n}));\r\n\r\nconst Tooltip: React.FC<{\r\n tooltip?: React.ReactChild | React.ReactFragment | React.ReactPortal;\r\n style?: React.CSSProperties;\r\n}> = ({ tooltip, style }) => {\r\n const styles = useStyles();\r\n return (\r\n <>\r\n {tooltip && (\r\n \r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport { Tooltip };\r\n","import FormLabel from \"@material-ui/core/FormLabel\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport clsx from \"clsx\";\r\nimport React, { FC } from \"react\";\r\n\r\nimport { Colors } from \"../utilities/colors\";\r\n\r\nimport { Tooltip } from \"./Tooltip\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n centered: {\r\n textAlign: \"center\",\r\n display: \"inline-block !important\",\r\n marginTop: \"0.5rem !important\",\r\n marginBottom: \"0rem !important\",\r\n },\r\n formLabel: {\r\n display: \"flex\",\r\n margin: \"1rem\",\r\n color: \"black\",\r\n height: \"1rem\",\r\n width: \"100%\",\r\n fontWeight: \"bold\",\r\n },\r\n primary: {\r\n color: Colors.MillimanBlue,\r\n },\r\n secondary: {\r\n color: Colors.Black,\r\n },\r\n}));\r\n\r\ninterface CalculationHeaderProps {\r\n title: string;\r\n tooltip?: React.ReactChild | React.ReactFragment | React.ReactPortal;\r\n variant?: \"primary\" | \"secondary\";\r\n centered?: boolean;\r\n}\r\n\r\nconst CalculationHeader: FC = ({\r\n title,\r\n tooltip,\r\n variant = \"primary\",\r\n centered = false,\r\n}) => {\r\n const styles = useStyles();\r\n\r\n return (\r\n \r\n {title}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CalculationHeader;\r\n","import DialogBase from \"@material-ui/core/Dialog\";\r\nimport MuiDialogActions from \"@material-ui/core/DialogActions\";\r\nimport MuiDialogContent from \"@material-ui/core/DialogContent\";\r\nimport MuiDialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport { makeStyles, Theme, withStyles } from \"@material-ui/core/styles\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport React, { FC } from \"react\";\r\n\r\nimport CalculationHeader from \"./CalculationHeader\";\r\n\r\nconst useDialogTitleStyles = makeStyles((theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(2),\r\n },\r\n closeButton: {\r\n position: \"absolute\",\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n color: theme.palette.grey[500],\r\n },\r\n}));\r\n\r\ninterface DialogTitleProps {\r\n title: string;\r\n onClose: () => void;\r\n}\r\n\r\nconst DialogTitle: FC = (props) => {\r\n const { onClose, title } = props;\r\n const classes = useDialogTitleStyles();\r\n return (\r\n \r\n \r\n {onClose ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport const DialogContent = withStyles((theme: Theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n },\r\n}))(MuiDialogContent);\r\n\r\nexport const DialogActions = withStyles((theme: Theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(1),\r\n },\r\n}))(MuiDialogActions);\r\n\r\nexport interface DialogProps {\r\n open: boolean;\r\n title: string;\r\n setOpen: (open: boolean) => void;\r\n maxWidth?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | false;\r\n}\r\n\r\nconst Dialog: FC = ({\r\n open,\r\n setOpen,\r\n title,\r\n maxWidth,\r\n children,\r\n}) => (\r\n setOpen(false)}>\r\n setOpen(false)} title={title} />\r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n);\r\n\r\nexport default Dialog;\r\n","import Grid from \"@material-ui/core/Grid\";\r\nimport React, { useCallback, useContext } from \"react\";\r\n\r\nimport { RootContext } from \"../state/root\";\r\nimport { Api } from \"../utilities/request\";\r\n\r\nimport Button from \"./Button\";\r\nimport Modal, { DialogActions } from \"./Dialog\";\r\n\r\n// authentication timeout should be 60 minutes so we will show the dialog with 15 minutes to spare\r\n// and force a refresh after the session expiry\r\nconst warningTime = 45 * 60 * 1000;\r\nconst expiryTime = 15 * 60 * 1000;\r\n\r\nconst TimeoutDialog: React.FC = () => {\r\n const [showDialog, setShowDialog] = React.useState(false);\r\n const rootContext = useContext(RootContext);\r\n\r\n const refresh = useCallback(async () => {\r\n setShowDialog(false);\r\n if (!(await rootContext.user?.load())) {\r\n window.location.reload();\r\n }\r\n }, [rootContext]);\r\n\r\n React.useEffect(() => {\r\n let showDialogHandle = 0;\r\n let logoutHandle = 0;\r\n let interceptRequestHandle = 0;\r\n\r\n if (rootContext.user) {\r\n if (showDialog) {\r\n logoutHandle = window.setTimeout(refresh, expiryTime);\r\n } else {\r\n showDialogHandle = window.setTimeout(\r\n () => setShowDialog(true),\r\n warningTime\r\n );\r\n }\r\n\r\n // handle requests\r\n interceptRequestHandle = Api.request.interceptors.request.use(\r\n (request) => {\r\n clearTimeout(showDialogHandle);\r\n clearTimeout(logoutHandle);\r\n showDialogHandle = window.setTimeout(\r\n () => setShowDialog(true),\r\n warningTime\r\n );\r\n return request;\r\n }\r\n );\r\n }\r\n\r\n return () => {\r\n clearTimeout(showDialogHandle);\r\n clearTimeout(logoutHandle);\r\n Api.request.interceptors.request.eject(interceptRequestHandle);\r\n };\r\n }, [showDialog, rootContext.user, refresh]);\r\n\r\n return (\r\n \r\n \r\n
\r\n

A period of inactivity has been detected.

\r\n

\r\n You will be logged out shortly and any unsaved work will be lost.\r\n

\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default TimeoutDialog;\r\n","import {\r\n action,\r\n computed,\r\n makeObservable,\r\n observable,\r\n runInAction,\r\n} from \"mobx\";\r\nimport moment, { Moment } from \"moment\";\r\nimport React from \"react\";\r\n\r\nimport { Api } from \"../utilities/request\";\r\n\r\nexport type BenefitType =\r\n | \"Retirement\"\r\n | \"Disability\"\r\n | \"Death-Immediate\"\r\n | \"Death-Deferred\";\r\n\r\nexport interface BenefitOption {\r\n description1: string;\r\n description2: string;\r\n description3: string;\r\n display: boolean;\r\n name: string;\r\n value: string;\r\n}\r\n\r\nexport interface NonTaxable {\r\n description1: string;\r\n description2: string;\r\n description3: string;\r\n display: boolean;\r\n statement: string;\r\n}\r\n\r\nconst EMPTY_DATE = \"01/01/0001\";\r\n\r\nexport interface CalculationData {\r\n pageId?: number;\r\n isFinal?: boolean;\r\n\r\n // Basic Information\r\n firstName: string;\r\n lastName: string;\r\n gender: string;\r\n employeeNumber: string;\r\n dateOfMembership: string;\r\n dateOfBirth: string;\r\n description: string;\r\n isProjection: string;\r\n benefitType: BenefitType;\r\n dateOfRetirement: string;\r\n lastDayOfEmployment: string;\r\n beneficiaryInformationFirstName: string;\r\n beneficiaryInformationLastName: string;\r\n beneficiaryDateOfBirth: string;\r\n multipleBeneficiaries: string;\r\n\r\n // Contributions\r\n employer: \"C\" | \"T\" | \"H\" | \"L\" | \"D\";\r\n totalMemberContributions: number;\r\n totalBenefitContributions: number;\r\n nonTaxableContributions: number;\r\n extraContributionsPre83: number;\r\n extraContributionsPost83: number;\r\n memberContributionsLastQuarter: number;\r\n benefitContributionsLastQuarter: number;\r\n memberContributionsLastPayPeriod: number;\r\n benefitContributionsLastPayPeriod: number;\r\n additionalContributionsPre83: number;\r\n additionalContributionsPost83: number;\r\n currentContributionsLastPayDate: string;\r\n\r\n // Service and Salary\r\n serviceAdjustmentPre83Years: number;\r\n serviceAdjustmentPre83Months: number;\r\n serviceAdjustmentPre83Days: number;\r\n serviceAdjustmentPre83Hours: number;\r\n serviceAdjustmentPost83Years: number;\r\n serviceAdjustmentPost83Months: number;\r\n serviceAdjustmentPost83Days: number;\r\n serviceAdjustmentPost83Hours: number;\r\n portability: string;\r\n portabilitySystem: string;\r\n portabilityFae: number;\r\n portabilityService: number;\r\n portabilityOfServicePost97: string;\r\n finalSalary: string;\r\n currentGrossPayPerPeriod: number;\r\n salaryInflation: string;\r\n monthlyRate1: number;\r\n longevity1: number;\r\n months1: number;\r\n monthlyRate2: number;\r\n longevity2: number;\r\n months2: number;\r\n monthlyRate3: number;\r\n longevity3: number;\r\n months3: number;\r\n monthlyRate4: number;\r\n longevity4: number;\r\n months4: number;\r\n monthlyRate5: number;\r\n longevity5: number;\r\n months5: number;\r\n monthlyRate6: number;\r\n longevity6: number;\r\n months6: number;\r\n monthlyRate7: number;\r\n longevity7: number;\r\n months7: number;\r\n monthlyRate8: number;\r\n longevity8: number;\r\n months8: number;\r\n code9Time: number;\r\n\r\n // Benefit elections\r\n annuitantType: string;\r\n annuitantDateOfBirth: string;\r\n benefitOption: string;\r\n ssAdjustment: string;\r\n ssAtAge62: number;\r\n servicePurchaseSelected: string;\r\n amountOfServiceToPurchase: number;\r\n totalBenefitContributionsLastQuarter: number;\r\n taxTreatmentOfPayment: string;\r\n\r\n // Repayment of Contributions\r\n amountWithdrawn: number;\r\n dateWithdrawn: string;\r\n serviceRegained: number;\r\n repaymentDate: string;\r\n}\r\n\r\nexport interface CalculationResults {\r\n /*\r\n * Basic Information\r\n */\r\n ageOfRetirement: number;\r\n annuitantAge: number;\r\n deathBeneficiaryAge: number;\r\n\r\n /*\r\n * Contributions\r\n */\r\n totalMemberContributions: number;\r\n totalBenefitContributions: number;\r\n nonTaxableContributions: number;\r\n pre83ExtraContributions: number;\r\n post83ExtraContributions: number;\r\n\r\n /*\r\n * Salary\r\n */\r\n averageFinalSalary: number;\r\n\r\n /*\r\n * Service\r\n */\r\n pre83DockTime: number;\r\n post83DockTime: number;\r\n purchasedService: number;\r\n tersService: number;\r\n yearsNeededToRetire: number;\r\n maxEligibleServicePurchase: number;\r\n portabilityChange: number;\r\n servicePurchaseAvailable: string;\r\n\r\n /*\r\n * Benefit Values\r\n */\r\n unmodifiedBenefit: number;\r\n totalContributionsInclAdditional: number;\r\n optionADecreasingInsrAmnt: number;\r\n optionABenefit: number;\r\n optionBDecreasingInsrAmnt: number;\r\n optionBBenefit: number;\r\n optionC5Benefit: number;\r\n optionC10Benefit: number;\r\n optionDF50Participant: number;\r\n optionDF50Survivor: number;\r\n optionEF100Benefit: number;\r\n\r\n /*\r\n * Death Benefit\r\n */\r\n lSTotalMemberContributions: number;\r\n tenYearCertainAnnuity: number;\r\n immediateAnnuity: number;\r\n oneHalfLSAmount: number;\r\n oneHalfLSImmediateAnnuity: number;\r\n\r\n /*\r\n * Benefit Options\r\n */\r\n servicePurchaseYears: number;\r\n servicePurchaseAmount: number;\r\n socialSecurityBenefitAmount: number;\r\n socialSecurityAdvance: number;\r\n\r\n /*\r\n * Non-taxable Contributions\r\n */\r\n singleLifeMonths: number;\r\n singleLifeAmount: number;\r\n twoLivesMonths: number;\r\n twoLivesAmount: number;\r\n\r\n /*\r\n * Non-Social Security Adjustment Descriptions\r\n */\r\n unmodifiedDescription: string[];\r\n optionADescription: string[];\r\n optionBDescription: string[];\r\n optionC5Description: string[];\r\n optionC10Description: string[];\r\n optionDDescription: string[];\r\n optionF50Description: string[];\r\n optionEDescription: string[];\r\n optionF100Description: string[];\r\n\r\n /*\r\n * Social Security Adjustment Descriptions\r\n */\r\n unmodifiedSocialSecurityDescription: string[];\r\n optionASocialSecurityDescription: string[];\r\n optionBSocialSecurityDescription: string[];\r\n optionC5SocialSecurityDescription: string[];\r\n optionC10SocialSecurityDescription: string[];\r\n optionDSocialSecurityDescription: string[];\r\n optionF50SocialSecurityDescription: string[];\r\n optionESocialSecurityDescription: string[];\r\n optionF100SocialSecurityDescription: string[];\r\n\r\n /*\r\n * Death Benefits\r\n */\r\n immediateLumpSumBenefitDescription: string[];\r\n tenYearCertainDeathDescription: string[];\r\n immediateAnnuityDeathBenefitDescription: string[];\r\n halfLumpSumImmediateAnnuityDeathBenefitDescription: string[];\r\n\r\n /*\r\n * Non-taxable Portion of the Benefit\r\n */\r\n nonTaxableDescriptionA: string[];\r\n nonTaxableDescriptionB: string[];\r\n nonTaxableDescriptionC: string[];\r\n nonTaxableDescriptionD: string[];\r\n nonTaxableDescriptionE: string[];\r\n nonTaxableDescriptionF: string[];\r\n nonTaxableDescriptionG: string[];\r\n\r\n /*\r\n * Flags\r\n */\r\n flag415Limit: string;\r\n flag401Limit: string;\r\n isEligibleForRetirement: string;\r\n isEligibleForRetirementWithoutPurchase: string;\r\n\r\n /*\r\n * Repayment of Contributions\r\n */\r\n totalRepaymentAmount: number;\r\n amountPerQuarter: number;\r\n}\r\ninterface ServerCalculation {\r\n uniqueId: string;\r\n created?: string;\r\n isRepayment: boolean;\r\n calculationName: string;\r\n benefitOptions?: BenefitOption[];\r\n nonTaxables?: NonTaxable[];\r\n data: CalculationData;\r\n results: CalculationResults;\r\n}\r\n\r\ninterface ExportServerResults {\r\n export: {\r\n address: string;\r\n text: string;\r\n }[];\r\n}\r\nexport interface ExportResults {\r\n [address: string]: string;\r\n}\r\n\r\nexport class Calculation {\r\n static readonly _endpoint = \"/api/Calculation\";\r\n readonly uniqueId: string;\r\n readonly created: Moment;\r\n readonly calculationName: string;\r\n readonly isRepayment: boolean;\r\n readonly userId: string | undefined;\r\n\r\n isFinal?: boolean;\r\n\r\n @observable\r\n originalState?: string;\r\n\r\n @observable\r\n lastState?: string;\r\n\r\n @observable\r\n pageId?: number;\r\n\r\n // Basic Information\r\n @observable\r\n firstName?: string;\r\n\r\n @observable\r\n lastName?: string;\r\n\r\n @observable\r\n gender?: string;\r\n\r\n @observable\r\n employeeNumber?: string;\r\n\r\n @observable\r\n dateOfBirth?: Moment;\r\n\r\n @observable\r\n dateOfMembership?: Moment;\r\n\r\n @observable\r\n description?: string;\r\n\r\n @observable\r\n benefitType?: BenefitType;\r\n\r\n @observable\r\n isProjection?: string;\r\n\r\n @observable\r\n lastDayOfEmployment?: Moment;\r\n\r\n @observable\r\n dateOfRetirement?: Moment;\r\n\r\n @observable\r\n beneficiaryInformationFirstName?: string;\r\n\r\n @observable\r\n beneficiaryInformationLastName?: string;\r\n\r\n @observable\r\n beneficiaryDateOfBirth?: Moment;\r\n\r\n @observable\r\n multipleBeneficiaries?: string;\r\n\r\n // Contributions\r\n @observable\r\n employer?: \"C\" | \"T\" | \"H\" | \"L\" | \"D\";\r\n\r\n @observable\r\n totalMemberContributions?: number;\r\n\r\n @observable\r\n totalBenefitContributions?: number;\r\n\r\n @observable\r\n nonTaxableContributions?: number;\r\n\r\n @observable\r\n extraContributionsPre83?: number;\r\n\r\n @observable\r\n extraContributionsPost83?: number;\r\n\r\n @observable\r\n memberContributionsLastQuarter?: number;\r\n\r\n @observable\r\n benefitContributionsLastQuarter?: number;\r\n\r\n @observable\r\n memberContributionsLastPayPeriod?: number;\r\n\r\n @observable\r\n benefitContributionsLastPayPeriod?: number;\r\n\r\n @observable\r\n additionalContributionsPre83?: number;\r\n\r\n @observable\r\n additionalContributionsPost83?: number;\r\n\r\n @observable\r\n currentContributionsLastPayDate?: Moment;\r\n\r\n // Service and Salary\r\n @observable\r\n serviceAdjustmentPre83Years?: number;\r\n\r\n @observable\r\n serviceAdjustmentPre83Months?: number;\r\n\r\n @observable\r\n serviceAdjustmentPre83Days?: number;\r\n\r\n @observable\r\n serviceAdjustmentPre83Hours?: number;\r\n\r\n @observable\r\n serviceAdjustmentPost83Years?: number;\r\n\r\n @observable\r\n serviceAdjustmentPost83Months?: number;\r\n\r\n @observable\r\n serviceAdjustmentPost83Days?: number;\r\n\r\n @observable\r\n serviceAdjustmentPost83Hours?: number;\r\n\r\n @observable\r\n portability?: string;\r\n\r\n @observable\r\n portabilitySystem?: string;\r\n\r\n @observable\r\n portabilityFae?: number;\r\n\r\n @observable\r\n portabilityService?: number;\r\n\r\n @observable\r\n portabilityOfServicePost97?: string;\r\n\r\n @observable\r\n finalSalary?: string;\r\n\r\n @observable\r\n currentGrossPayPerPeriod?: number;\r\n\r\n @observable\r\n salaryInflation?: string;\r\n\r\n @observable\r\n monthlyRate1?: number;\r\n\r\n @observable\r\n longevity1?: number;\r\n\r\n @observable\r\n months1?: number;\r\n\r\n @observable\r\n monthlyRate2?: number;\r\n\r\n @observable\r\n longevity2?: number;\r\n\r\n @observable\r\n months2?: number;\r\n\r\n @observable\r\n monthlyRate3?: number;\r\n\r\n @observable\r\n longevity3?: number;\r\n\r\n @observable\r\n months3?: number;\r\n\r\n @observable\r\n monthlyRate4?: number;\r\n\r\n @observable\r\n longevity4?: number;\r\n\r\n @observable\r\n months4?: number;\r\n\r\n @observable\r\n monthlyRate5?: number;\r\n\r\n @observable\r\n longevity5?: number;\r\n\r\n @observable\r\n months5?: number;\r\n\r\n @observable\r\n monthlyRate6?: number;\r\n\r\n @observable\r\n longevity6?: number;\r\n\r\n @observable\r\n months6?: number;\r\n\r\n @observable\r\n monthlyRate7?: number;\r\n\r\n @observable\r\n longevity7?: number;\r\n\r\n @observable\r\n months7?: number;\r\n\r\n @observable\r\n monthlyRate8?: number;\r\n\r\n @observable\r\n longevity8?: number;\r\n\r\n @observable\r\n months8?: number;\r\n\r\n @observable\r\n code9Time?: number;\r\n\r\n // Benefit elections\r\n @observable\r\n annuitantType?: string;\r\n\r\n @observable\r\n annuitantDateOfBirth?: Moment;\r\n\r\n @observable\r\n benefitOption?: string;\r\n\r\n @observable\r\n ssAdjustment?: string;\r\n\r\n @observable\r\n ssAtAge62?: number;\r\n\r\n @observable\r\n servicePurchaseSelected?: string;\r\n\r\n @observable\r\n amountOfServiceToPurchase?: number;\r\n\r\n @observable\r\n totalBenefitContributionsLastQuarter?: number;\r\n\r\n @observable\r\n taxTreatmentOfPayment?: string;\r\n\r\n // Repayment of Contributions\r\n @observable\r\n amountWithdrawn?: number;\r\n\r\n @observable\r\n dateWithdrawn?: Moment;\r\n\r\n @observable\r\n serviceRegained?: number;\r\n\r\n @observable\r\n repaymentDate?: Moment;\r\n\r\n @observable\r\n results?: CalculationResults;\r\n\r\n @observable\r\n benefitOptions?: BenefitOption[];\r\n\r\n @observable\r\n nonTaxables?: NonTaxable[];\r\n\r\n constructor(\r\n userId: string | undefined,\r\n uniqueId: string,\r\n isRepayment: boolean,\r\n created: Moment,\r\n calculationName: string\r\n ) {\r\n makeObservable(this);\r\n this.userId = userId;\r\n this.uniqueId = uniqueId;\r\n this.isRepayment = isRepayment;\r\n this.created = created;\r\n this.calculationName = calculationName;\r\n }\r\n\r\n static async getCalculations(\r\n userId?: string,\r\n forceRefresh: boolean = false,\r\n calculationId?: string\r\n ): Promise {\r\n const response = await Api.request.get<{\r\n calculations: ServerCalculation[];\r\n }>(\r\n `${this._endpoint}/${\r\n userId ?? \"\"\r\n }?forceRefresh=${forceRefresh}&calculationId=${calculationId}`\r\n );\r\n\r\n if (response.status === 200) {\r\n return response.data.calculations.map((c) => {\r\n const calculation = new Calculation(\r\n userId,\r\n c.uniqueId,\r\n c.isRepayment,\r\n moment(c.created),\r\n c.calculationName\r\n );\r\n calculation._fromServer(c);\r\n return calculation;\r\n });\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n @computed\r\n get isDirty(): boolean {\r\n return (\r\n this.lastState !== this.originalState ||\r\n this.lastState !== this.getState()\r\n );\r\n }\r\n\r\n async export(): Promise {\r\n const response = await Api.request.get(\r\n `${Calculation._endpoint}/export/${this.uniqueId}`\r\n );\r\n if (response.status === 200) {\r\n const exportResult = response.data.export.reduce(\r\n (previous: any, current) => {\r\n previous[current.address] = current.text;\r\n return previous;\r\n },\r\n {}\r\n );\r\n return exportResult;\r\n }\r\n }\r\n\r\n async saveCalculation(): Promise {\r\n const response = await Api.request.post(\r\n `${Calculation._endpoint}/${this.uniqueId}`,\r\n this._toServer()\r\n );\r\n if (response.status === 200) {\r\n this._fromServer(response.data, true);\r\n }\r\n }\r\n\r\n async updateCalculation(): Promise {\r\n const response = await Api.request.put(\r\n `${Calculation._endpoint}/${this.uniqueId}`,\r\n this._toServer()\r\n );\r\n if (response.status === 200) {\r\n this._fromServer(response.data);\r\n }\r\n }\r\n\r\n getState(): string {\r\n return JSON.stringify(this._toServer());\r\n }\r\n\r\n @action\r\n private _fromServer(\r\n c: ServerCalculation,\r\n updateState: boolean = false\r\n ): void {\r\n this.pageId = c.data.pageId;\r\n // Basic Information\r\n this.firstName = c.data.firstName;\r\n this.lastName = c.data.lastName;\r\n this.employeeNumber = c.data.employeeNumber;\r\n this.gender = c.data.gender;\r\n this.dateOfBirth = moment(c.data.dateOfBirth);\r\n this.dateOfMembership = moment(c.data.dateOfMembership);\r\n this.description = c.data.description;\r\n this.benefitType = c.data.benefitType;\r\n this.isProjection = c.data.isProjection;\r\n this.lastDayOfEmployment = moment(c.data.lastDayOfEmployment);\r\n this.dateOfRetirement = moment(c.data.dateOfRetirement);\r\n this.beneficiaryInformationFirstName =\r\n c.data.beneficiaryInformationFirstName;\r\n this.beneficiaryInformationLastName = c.data.beneficiaryInformationLastName;\r\n this.beneficiaryDateOfBirth = moment(c.data.beneficiaryDateOfBirth);\r\n this.multipleBeneficiaries = c.data.multipleBeneficiaries;\r\n // Contributions\r\n this.employer = c.data.employer;\r\n this.totalMemberContributions = c.data.totalMemberContributions;\r\n this.totalBenefitContributions = c.data.totalBenefitContributions;\r\n this.nonTaxableContributions = c.data.nonTaxableContributions;\r\n this.extraContributionsPre83 = c.data.extraContributionsPre83;\r\n this.extraContributionsPost83 = c.data.extraContributionsPost83;\r\n this.memberContributionsLastQuarter = c.data.memberContributionsLastQuarter;\r\n this.benefitContributionsLastQuarter =\r\n c.data.benefitContributionsLastQuarter;\r\n this.memberContributionsLastPayPeriod =\r\n c.data.memberContributionsLastPayPeriod;\r\n this.benefitContributionsLastPayPeriod =\r\n c.data.benefitContributionsLastPayPeriod;\r\n this.additionalContributionsPre83 = c.data.additionalContributionsPre83;\r\n this.additionalContributionsPost83 = c.data.additionalContributionsPost83;\r\n this.currentContributionsLastPayDate = moment(\r\n c.data.currentContributionsLastPayDate\r\n );\r\n // Service and Salary\r\n this.serviceAdjustmentPre83Years = c.data.serviceAdjustmentPre83Years;\r\n this.serviceAdjustmentPre83Months = c.data.serviceAdjustmentPre83Months;\r\n this.serviceAdjustmentPre83Days = c.data.serviceAdjustmentPre83Days;\r\n this.serviceAdjustmentPre83Hours = c.data.serviceAdjustmentPre83Hours;\r\n this.serviceAdjustmentPost83Years = c.data.serviceAdjustmentPost83Years;\r\n this.serviceAdjustmentPost83Months = c.data.serviceAdjustmentPost83Months;\r\n this.serviceAdjustmentPost83Days = c.data.serviceAdjustmentPost83Days;\r\n this.serviceAdjustmentPost83Hours = c.data.serviceAdjustmentPost83Hours;\r\n this.portability = c.data.portability;\r\n this.portabilitySystem = c.data.portabilitySystem;\r\n this.portabilityFae = c.data.portabilityFae;\r\n this.portabilityService = c.data.portabilityService;\r\n this.portabilityOfServicePost97 = c.data.portabilityOfServicePost97;\r\n this.finalSalary = c.data.finalSalary;\r\n this.currentGrossPayPerPeriod = c.data.currentGrossPayPerPeriod;\r\n this.salaryInflation = c.data.salaryInflation;\r\n this.monthlyRate1 = c.data.monthlyRate1;\r\n this.longevity1 = c.data.longevity1;\r\n this.months1 = c.data.months1;\r\n this.monthlyRate2 = c.data.monthlyRate2;\r\n this.longevity2 = c.data.longevity2;\r\n this.months2 = c.data.months2;\r\n this.monthlyRate3 = c.data.monthlyRate3;\r\n this.longevity3 = c.data.longevity3;\r\n this.months3 = c.data.months3;\r\n this.monthlyRate4 = c.data.monthlyRate4;\r\n this.longevity4 = c.data.longevity4;\r\n this.months4 = c.data.months4;\r\n this.monthlyRate5 = c.data.monthlyRate5;\r\n this.longevity5 = c.data.longevity5;\r\n this.months5 = c.data.months5;\r\n this.monthlyRate6 = c.data.monthlyRate6;\r\n this.longevity6 = c.data.longevity6;\r\n this.months6 = c.data.months6;\r\n this.monthlyRate7 = c.data.monthlyRate7;\r\n this.longevity7 = c.data.longevity7;\r\n this.months7 = c.data.months7;\r\n this.monthlyRate8 = c.data.monthlyRate8;\r\n this.longevity8 = c.data.longevity8;\r\n this.months8 = c.data.months8;\r\n this.code9Time = c.data.code9Time;\r\n // Benefit elections\r\n this.annuitantType = c.data.annuitantType;\r\n this.annuitantDateOfBirth = moment(c.data.annuitantDateOfBirth);\r\n this.benefitOption = c.data.benefitOption;\r\n this.benefitOptions = c.benefitOptions;\r\n this.nonTaxables = c.nonTaxables;\r\n this.ssAdjustment = c.data.ssAdjustment;\r\n this.ssAtAge62 = c.data.ssAtAge62;\r\n this.servicePurchaseSelected = c.data.servicePurchaseSelected;\r\n this.amountOfServiceToPurchase = c.data.amountOfServiceToPurchase;\r\n this.totalBenefitContributionsLastQuarter =\r\n c.data.totalBenefitContributionsLastQuarter;\r\n this.taxTreatmentOfPayment = c.data.taxTreatmentOfPayment;\r\n // Repayment of Contributions\r\n this.amountWithdrawn = c.data.amountWithdrawn;\r\n this.dateWithdrawn = moment(c.data.dateWithdrawn);\r\n this.serviceRegained = c.data.serviceRegained;\r\n this.repaymentDate = moment(c.data.repaymentDate);\r\n // Results\r\n this.results = c.results;\r\n // Set State\r\n this.lastState = this.getState();\r\n this.originalState = updateState\r\n ? this.lastState\r\n : this.originalState ?? this.lastState;\r\n }\r\n\r\n private _toServer(): Omit {\r\n return {\r\n calculationName: this.calculationName,\r\n uniqueId: this.uniqueId,\r\n isRepayment: this.isRepayment,\r\n data: {\r\n pageId: this.pageId,\r\n isFinal: this.isFinal,\r\n // Basic Information\r\n firstName: this.firstName!,\r\n lastName: this.lastName!,\r\n employeeNumber: this.employeeNumber!,\r\n dateOfBirth: this.dateOfBirth?.format(\"L\") ?? EMPTY_DATE,\r\n dateOfMembership: this.dateOfMembership?.format(\"L\") ?? EMPTY_DATE,\r\n gender: this.gender!,\r\n description: this.description!,\r\n benefitType: this.benefitType!,\r\n isProjection: this.isProjection!,\r\n lastDayOfEmployment:\r\n this.lastDayOfEmployment?.format(\"L\") ?? EMPTY_DATE,\r\n dateOfRetirement: this.dateOfRetirement?.format(\"L\") ?? EMPTY_DATE,\r\n beneficiaryInformationFirstName: this.beneficiaryInformationFirstName!,\r\n beneficiaryInformationLastName: this.beneficiaryInformationLastName!,\r\n beneficiaryDateOfBirth:\r\n this.beneficiaryDateOfBirth?.format(\"L\") ?? EMPTY_DATE,\r\n multipleBeneficiaries: this.multipleBeneficiaries!,\r\n // Contributions\r\n employer: this.employer!,\r\n totalMemberContributions: this.totalMemberContributions!,\r\n totalBenefitContributions: this.totalBenefitContributions!,\r\n nonTaxableContributions: this.nonTaxableContributions!,\r\n extraContributionsPre83: this.extraContributionsPre83!,\r\n extraContributionsPost83: this.extraContributionsPost83!,\r\n memberContributionsLastQuarter: this.memberContributionsLastQuarter!,\r\n benefitContributionsLastQuarter: this.benefitContributionsLastQuarter!,\r\n memberContributionsLastPayPeriod:\r\n this.memberContributionsLastPayPeriod!,\r\n benefitContributionsLastPayPeriod:\r\n this.benefitContributionsLastPayPeriod!,\r\n additionalContributionsPre83: this.additionalContributionsPre83!,\r\n additionalContributionsPost83: this.additionalContributionsPost83!,\r\n currentContributionsLastPayDate:\r\n this.currentContributionsLastPayDate?.format(\"L\") ?? EMPTY_DATE,\r\n // Service and Salary\r\n serviceAdjustmentPre83Years: this.serviceAdjustmentPre83Years!,\r\n serviceAdjustmentPre83Months: this.serviceAdjustmentPre83Months!,\r\n serviceAdjustmentPre83Days: this.serviceAdjustmentPre83Days!,\r\n serviceAdjustmentPre83Hours: this.serviceAdjustmentPre83Hours!,\r\n serviceAdjustmentPost83Years: this.serviceAdjustmentPost83Years!,\r\n serviceAdjustmentPost83Months: this.serviceAdjustmentPost83Months!,\r\n serviceAdjustmentPost83Days: this.serviceAdjustmentPost83Days!,\r\n serviceAdjustmentPost83Hours: this.serviceAdjustmentPost83Hours!,\r\n portability: this.portability!,\r\n portabilitySystem: this.portabilitySystem!,\r\n portabilityFae: this.portabilityFae!,\r\n portabilityService: this.portabilityService!,\r\n portabilityOfServicePost97: this.portabilityOfServicePost97!,\r\n finalSalary: this.finalSalary!,\r\n currentGrossPayPerPeriod: this.currentGrossPayPerPeriod!,\r\n salaryInflation: this.salaryInflation!,\r\n monthlyRate1: this.monthlyRate1!,\r\n longevity1: this.longevity1!,\r\n months1: this.months1!,\r\n monthlyRate2: this.monthlyRate2!,\r\n longevity2: this.longevity2!,\r\n months2: this.months2!,\r\n monthlyRate3: this.monthlyRate3!,\r\n longevity3: this.longevity3!,\r\n months3: this.months3!,\r\n monthlyRate4: this.monthlyRate4!,\r\n longevity4: this.longevity4!,\r\n months4: this.months4!,\r\n monthlyRate5: this.monthlyRate5!,\r\n longevity5: this.longevity5!,\r\n months5: this.months5!,\r\n monthlyRate6: this.monthlyRate6!,\r\n longevity6: this.longevity6!,\r\n months6: this.months6!,\r\n monthlyRate7: this.monthlyRate7!,\r\n longevity7: this.longevity7!,\r\n months7: this.months7!,\r\n monthlyRate8: this.monthlyRate8!,\r\n longevity8: this.longevity8!,\r\n months8: this.months8!,\r\n code9Time: this.code9Time!,\r\n // Benefit elections\r\n annuitantType: this.annuitantType!,\r\n annuitantDateOfBirth:\r\n this.annuitantDateOfBirth?.format(\"L\") ?? EMPTY_DATE,\r\n benefitOption: this.benefitOption!,\r\n ssAdjustment: this.ssAdjustment!,\r\n ssAtAge62: this.ssAtAge62!,\r\n servicePurchaseSelected: this.servicePurchaseSelected!,\r\n amountOfServiceToPurchase: this.amountOfServiceToPurchase!,\r\n totalBenefitContributionsLastQuarter:\r\n this.totalBenefitContributionsLastQuarter!,\r\n taxTreatmentOfPayment: this.taxTreatmentOfPayment!,\r\n // Repayment of Contributions\r\n amountWithdrawn: this.amountWithdrawn!,\r\n dateWithdrawn: this.dateWithdrawn?.format(\"L\") ?? EMPTY_DATE,\r\n serviceRegained: this.serviceRegained!,\r\n repaymentDate: this.repaymentDate?.format(\"L\") ?? EMPTY_DATE,\r\n },\r\n };\r\n }\r\n}\r\n\r\nclass CalculationStore {\r\n @observable\r\n calculations?: Calculation[];\r\n\r\n @observable\r\n currentCalculation?: Calculation;\r\n\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n async load(\r\n userId?: string,\r\n calculationId?: string,\r\n forceRefresh: boolean = false\r\n ): Promise {\r\n const calculations = await Calculation.getCalculations(\r\n userId,\r\n forceRefresh,\r\n calculationId\r\n );\r\n runInAction(() => {\r\n this.calculations = calculations;\r\n this.currentCalculation = calculationId\r\n ? calculations?.find((c) => c.uniqueId === calculationId)\r\n : calculations?.find((c) => !c.isRepayment);\r\n });\r\n }\r\n}\r\n\r\nconst CalculationState = new CalculationStore();\r\nconst CalculationContext = React.createContext(CalculationState);\r\n\r\nexport { CalculationState, CalculationContext };\r\n","import { makeObservable, observable, runInAction } from \"mobx\";\r\nimport { Moment } from \"moment\";\r\nimport React from \"react\";\r\n\r\nimport { Api } from \"../utilities/request\";\r\n\r\nimport { Calculation } from \"./Calculation\";\r\nimport { StatusCode, User, UserServerData } from \"./User\";\r\n\r\nexport interface PaginatedCalculationListItem {\r\n calculations: CalculationListItem[];\r\n count: number;\r\n}\r\n\r\nexport interface CalculationListItem {\r\n calculationName: string;\r\n uniqueId: string;\r\n created: string;\r\n userName: string;\r\n firstName: string;\r\n lastName: string;\r\n description: string;\r\n userId: string;\r\n isFinal: boolean;\r\n}\r\n\r\nexport interface NewUser {\r\n employeeNumber: string;\r\n firstName: string;\r\n lastName: string;\r\n gender: string;\r\n dateOfBirth: Moment;\r\n employer: string;\r\n dateOfMembership: Moment;\r\n lastDayOfEmployment: Moment;\r\n totalMemberContributions: number;\r\n totalBenefitContributions: number;\r\n nonTaxableContributions: number;\r\n memberContributionsLastPayPeriod: number;\r\n benefitContributionsLastPayPeriod: number;\r\n currentContributionsLastPayDate: Moment;\r\n currentGrossPayPerPeriod: number;\r\n additionalContributionsPre83: number;\r\n additionalContributionsPost83: number;\r\n}\r\n\r\nexport interface ExportResults {\r\n isFinal?: boolean;\r\n employeeNumber?: string;\r\n lastName?: string;\r\n startDateOfMembership?: Moment;\r\n endDateOfMembership?: Moment;\r\n startDateOfCalculation?: Moment;\r\n endDateOfCalculation?: Moment;\r\n startDateOfRetirement?: Moment;\r\n endDateOfRetirement?: Moment;\r\n}\r\n\r\nexport interface BulkUpdateResult {\r\n status: StatusCode;\r\n usersCreated: number;\r\n usersUpdated: number;\r\n usersFailed: number;\r\n usersDeleted: number;\r\n}\r\n\r\nexport interface ServerFile {\r\n uniqueId: string;\r\n fileName: string;\r\n created: string;\r\n}\r\n\r\nexport class Admin {\r\n private static readonly _endpoint = \"/api/Admin\";\r\n\r\n @observable\r\n calculationListItems: CalculationListItem[] = [];\r\n\r\n @observable\r\n users: User[] = [];\r\n\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n async addUser(newUser: NewUser): Promise<{ status: StatusCode }> {\r\n const data = await Api.request.post<{ status: StatusCode }>(\r\n `${Admin._endpoint}/AddUser`,\r\n newUser\r\n );\r\n return data;\r\n }\r\n\r\n async addFile(file: File): Promise<{ status: StatusCode }> {\r\n const formData = new FormData();\r\n formData.append(\"spreadsheet\", file, file.name);\r\n const { data } = await Api.request.post<{ status: StatusCode }>(\r\n `${Admin._endpoint}/Files`,\r\n formData\r\n );\r\n return data;\r\n }\r\n\r\n async getFiles(): Promise<{ status: StatusCode; files: ServerFile[] }> {\r\n const { data } = await Api.request.get<{\r\n status: StatusCode;\r\n files: ServerFile[];\r\n }>(`${Admin._endpoint}/Files`);\r\n return data;\r\n }\r\n\r\n async bulkUpdate(updateText: string): Promise {\r\n const { data } = await Api.request.post(\r\n `${Admin._endpoint}/BulkUpdate`,\r\n { updateText }\r\n );\r\n return data;\r\n }\r\n\r\n async exportResults(request: ExportResults): Promise {\r\n const response = await Api.request.post(\r\n `${Admin._endpoint}/ExportResults`,\r\n request,\r\n {\r\n responseType: \"blob\",\r\n }\r\n );\r\n return response.data;\r\n }\r\n\r\n async createCalculation(\r\n userId: string,\r\n isFinal: boolean,\r\n calculationToCopy?: string\r\n ): Promise {\r\n const { data } = await Api.request.post<{ status: StatusCode }>(\r\n `${Calculation._endpoint}/AddCalculation/${userId}`,\r\n { calculationToCopy, isFinal }\r\n );\r\n return data.status === StatusCode.Ok;\r\n }\r\n\r\n async deleteCalculation(\r\n userId: string,\r\n calculationId: string\r\n ): Promise {\r\n const { data } = await Api.request.delete<{ status: StatusCode }>(\r\n `${Calculation._endpoint}/${userId}/${calculationId}`\r\n );\r\n return data.status === StatusCode.Ok;\r\n }\r\n\r\n async deleteUser(userId: string): Promise {\r\n const { data } = await Api.request.delete<{ status: StatusCode }>(\r\n `${Admin._endpoint}/Users/${userId}`\r\n );\r\n return data.status === StatusCode.Ok;\r\n }\r\n\r\n async getCalculationList(\r\n forceLoad: boolean = false\r\n ): Promise {\r\n if (this.calculationListItems.length !== 0 && !forceLoad) {\r\n return this.calculationListItems;\r\n }\r\n\r\n const response = await Api.request.get<{\r\n calculations: CalculationListItem[];\r\n }>(`${Admin._endpoint}/Calculations`);\r\n if (response.status === 200) {\r\n runInAction(() => {\r\n this.calculationListItems = response.data.calculations;\r\n });\r\n return this.calculationListItems;\r\n }\r\n return undefined;\r\n }\r\n\r\n async getPaginatedCalculationList(\r\n eeNumber: string,\r\n lastName: string,\r\n sortColumn: string,\r\n sortOrder: string,\r\n page: number,\r\n pageLength: number\r\n ): Promise {\r\n const response = await Api.request.get(\r\n `${Admin._endpoint}/PaginatedCalculations?eeNumber=${eeNumber}&lastName=${lastName}&page=${page}&pageLength=${pageLength}&sortColumn=${sortColumn}&sortOrder=${sortOrder}`\r\n );\r\n return response.data;\r\n }\r\n\r\n async getUserList(forceLoad: boolean = false): Promise {\r\n if (this.users.length !== 0 && !forceLoad) {\r\n return this.users;\r\n }\r\n\r\n const response = await Api.request.get<{ users: UserServerData[] }>(\r\n `${Admin._endpoint}/Users`\r\n );\r\n if (response.status === 200) {\r\n runInAction(() => {\r\n this.users = response.data.users.map((u) => User.fromServer(u));\r\n });\r\n return this.users;\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n\r\nconst AdminState = new Admin();\r\nconst AdminContext = React.createContext(AdminState);\r\n\r\nexport { AdminState, AdminContext };\r\n","import { action, makeObservable, observable } from \"mobx\";\r\nimport React, { ReactNode } from \"react\";\r\n\r\nexport interface AlertProps {\r\n type: \"success\" | \"error\" | \"warning\" | \"info\";\r\n content: ReactNode | ReactNode[];\r\n}\r\n\r\nclass AlertStore {\r\n @observable\r\n currentAlert?: AlertProps;\r\n\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n @action\r\n showAlert(props?: AlertProps): void {\r\n this.currentAlert = props;\r\n }\r\n}\r\n\r\nconst AlertState = new AlertStore();\r\nconst AlertContext = React.createContext(AlertState);\r\n\r\nexport { AlertContext, AlertState };\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useState } from \"react\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport { AdminContext } from \"../../state/Admin\";\r\nimport { AlertContext } from \"../../state/Alert\";\r\nimport { CalculationContext } from \"../../state/Calculation\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n button: {\r\n marginTop: \"1rem\",\r\n },\r\n input: {\r\n width: \"100%\",\r\n },\r\n}));\r\n\r\nconst BulkUpdate: React.FC = observer(() => {\r\n const styles = useStyles();\r\n const adminContext = useContext(AdminContext);\r\n const alertContext = useContext(AlertContext);\r\n const calculationContext = useContext(CalculationContext);\r\n const [value, setValue] = useState(\"\");\r\n\r\n const onUpdate = async () => {\r\n const result = await adminContext.bulkUpdate(value);\r\n await adminContext.getUserList(true);\r\n await calculationContext.load(\r\n calculationContext.currentCalculation?.userId,\r\n calculationContext.currentCalculation?.uniqueId,\r\n true\r\n );\r\n alertContext.showAlert({\r\n type: \"info\",\r\n content: `Users created: ${result.usersCreated}, updated: ${result.usersUpdated}, deleted: ${result.usersDeleted} and failed: ${result.usersFailed}`,\r\n });\r\n setValue(\"\");\r\n };\r\n\r\n return (\r\n <>\r\n setValue(e.currentTarget.value)}\r\n value={value}\r\n variant=\"outlined\"\r\n />\r\n \r\n \r\n );\r\n});\r\n\r\nexport default BulkUpdate;\r\n","import Grid, { GridProps } from \"@material-ui/core/Grid\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport clsx from \"clsx\";\r\nimport React, { FC } from \"react\";\r\n\r\nimport { Colors } from \"../utilities/colors\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n grid: {\r\n backgroundColor: Colors.CalculationsBackground,\r\n padding: \"2rem\",\r\n borderRadius: \".2rem\",\r\n },\r\n}));\r\n\r\nexport interface CCalculationSectionProps extends GridProps {}\r\n\r\nconst CalculationSection: FC = ({\r\n className,\r\n children,\r\n ...props\r\n}) => {\r\n const styles = useStyles();\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default CalculationSection;\r\n","import { action, computed, makeObservable, observable } from \"mobx\";\r\nimport React from \"react\";\r\n\r\nclass CalculationErrors {\r\n @observable\r\n formErrors = observable.map();\r\n\r\n @observable\r\n errors = observable.map();\r\n\r\n @observable\r\n validateErrors: boolean;\r\n\r\n constructor(validateErrors: boolean | undefined = true) {\r\n makeObservable(this);\r\n this.validateErrors = validateErrors;\r\n }\r\n\r\n @computed\r\n get hasFormErrors(): boolean {\r\n return this.formErrors.size !== 0;\r\n }\r\n\r\n @computed\r\n get hasAnyErrors(): boolean {\r\n return this.formErrors.size !== 0 || this.errors.size !== 0;\r\n }\r\n\r\n get allErrorString(): string {\r\n return `${this.errorString} ${this.formErrorString}`;\r\n }\r\n\r\n get formErrorString(): string {\r\n if (this.formErrors.size !== 0) {\r\n return `${[...this.formErrors.values()].join(\", \")} field(s) required.\\n`;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n get errorString(): string {\r\n if (this.errors.size !== 0) {\r\n return `${[...this.errors.values()].join(\", \")}.`;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n @action\r\n addError(id: string, formKey: string): void {\r\n this.errors.set(`${id}:${formKey}`, this._trim(formKey));\r\n }\r\n\r\n @action\r\n removeError(id: string, formKey: string): void {\r\n this.errors.delete(`${id}:${formKey}`);\r\n }\r\n\r\n @action\r\n addFormError(id: string, formKey: string): void {\r\n this.formErrors.set(`${id}:${formKey}`, this._trim(formKey));\r\n }\r\n\r\n @action\r\n removeFormError(id: string, formKey: string): void {\r\n this.formErrors.delete(`${id}:${formKey}`);\r\n }\r\n\r\n @action\r\n clear(): void {\r\n this.formErrors.clear();\r\n this.errors.clear();\r\n }\r\n\r\n @action\r\n setValidateErrors(validateErrors: boolean): void {\r\n this.validateErrors = validateErrors;\r\n }\r\n\r\n private _trim(value: string): string {\r\n return value.replaceAll(\":\", \"\").trim();\r\n }\r\n}\r\n\r\nconst CalculationErrorsState = new CalculationErrors();\r\nconst CalculationErrorContext = React.createContext(CalculationErrorsState);\r\n\r\nexport { CalculationErrors, CalculationErrorsState, CalculationErrorContext };\r\n","import { useState } from \"react\";\r\nimport { v4 as createId } from \"uuid\";\r\n\r\nconst useId = (initialId?: string) => {\r\n const [id] = useState(initialId ?? createId());\r\n return id;\r\n};\r\n\r\nexport { useId };\r\n","import FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport MuiMenuItem, { MenuItemProps } from \"@material-ui/core/MenuItem\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport clsx from \"clsx\";\r\nimport { runInAction } from \"mobx\";\r\nimport React, { FC, ReactNode, useContext, useEffect } from \"react\";\r\n\r\nimport { CalculationErrorContext } from \"../state/CalculationErrors\";\r\n\r\nimport { useId } from \"./useId\";\r\n\r\nconst useMenuItemStyles = makeStyles((theme) => ({\r\n root: {\r\n \"&:hover\": {\r\n backgroundColor: \"#a9a9a9\",\r\n },\r\n },\r\n}));\r\n\r\nconst MenuItem: FC = React.forwardRef(\r\n ({ button, ...props }, ref) => {\r\n const styles = useMenuItemStyles();\r\n return (\r\n \r\n );\r\n }\r\n);\r\n\r\nexport { MenuItem };\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n label: {\r\n width: \"100%\",\r\n marginBottom: \".5rem\",\r\n },\r\n select: {\r\n flexGrow: 1,\r\n marginLeft: \"2rem\",\r\n },\r\n labelInner: {\r\n width: ({ labelWidth }) => `${labelWidth}rem`,\r\n },\r\n labelPlacementStart: {\r\n justifyContent: \"space-between\",\r\n minWidth: \"15rem\",\r\n },\r\n selectError: {\r\n \"& fieldset\": {\r\n borderColor: \"red !important\",\r\n },\r\n },\r\n}));\r\n\r\ninterface CalculationSelectProps {\r\n value?: string;\r\n label: string;\r\n disabled?: boolean;\r\n onChange: (value: string) => void;\r\n children?: ReactNode | ReactNode[];\r\n labelWidth?: number;\r\n}\r\n\r\nexport default ({\r\n children,\r\n label,\r\n onChange,\r\n value,\r\n disabled = false,\r\n labelWidth = 15,\r\n}: CalculationSelectProps) => {\r\n const id = useId();\r\n const styles = useStyles({ label, onChange, labelWidth });\r\n const calculationErrorContext = useContext(CalculationErrorContext);\r\n const valueError = value === undefined || value === \"\";\r\n\r\n useEffect(() => {\r\n if (valueError) {\r\n calculationErrorContext.addFormError(id, label);\r\n } else {\r\n calculationErrorContext.removeFormError(id, label);\r\n }\r\n }, [calculationErrorContext, label, valueError, id]);\r\n\r\n return (\r\n \r\n runInAction(() => onChange(e.target.value as string))\r\n }\r\n disabled={disabled}\r\n >\r\n {children}\r\n \r\n }\r\n label={label}\r\n labelPlacement=\"start\"\r\n className={styles.label}\r\n classes={{\r\n labelPlacementStart: styles.labelPlacementStart,\r\n label: styles.labelInner,\r\n }}\r\n value={value}\r\n />\r\n );\r\n};\r\n","import { makeStyles, Theme } from \"@material-ui/core\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport MuiTextField, {\r\n OutlinedTextFieldProps,\r\n} from \"@material-ui/core/TextField\";\r\nimport { Visibility, VisibilityOff } from \"@material-ui/icons\";\r\nimport clsx from \"clsx\";\r\nimport { runInAction } from \"mobx\";\r\nimport React, { useState } from \"react\";\r\nimport NumberFormat from \"react-number-format\";\r\n\r\nimport { Colors } from \"../utilities/colors\";\r\n\r\ninterface NumberFormatCustomProps {\r\n inputRef: (instance: NumberFormat | null) => void;\r\n onChange: (event: { target: { value: number | undefined } }) => void;\r\n}\r\n\r\nconst NumberFormatCustom = (props: NumberFormatCustomProps) => {\r\n const { inputRef, onChange, ...other } = props;\r\n\r\n return (\r\n {\r\n onChange({\r\n target: {\r\n value: values.floatValue,\r\n },\r\n });\r\n }}\r\n thousandSeparator\r\n />\r\n );\r\n};\r\n\r\nconst useStyles = makeStyles(() => ({\r\n textField: {\r\n flexGrow: 1,\r\n marginLeft: \"2rem\",\r\n },\r\n textFieldRoot: {\r\n borderRadius: \".5rem\",\r\n backgroundColor: Colors.White,\r\n \"& input\": {\r\n background: ({ disabled }) =>\r\n disabled ? Colors.CalculationsBackground : Colors.White,\r\n borderRadius: \"inherit\",\r\n },\r\n },\r\n textFieldError: {\r\n \"& fieldset\": {\r\n borderColor: \"red !important\",\r\n },\r\n },\r\n}));\r\n\r\nexport const validatePassword = (password: string) =>\r\n !!password.match(\r\n /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*\\-)(]).{8,}$/\r\n );\r\n\r\nexport const validateEmail = (email: string) =>\r\n !!email\r\n .toLowerCase()\r\n .match(\r\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n );\r\n\r\nexport interface TextFieldProps\r\n extends Omit {\r\n value?: string | number;\r\n type?: \"number\" | \"text\" | \"password\" | \"email\";\r\n onChange?: (value: string | number) => void;\r\n hasError?: boolean;\r\n maxLength?: number;\r\n}\r\n\r\nconst TextField: React.FC = ({\r\n maxLength,\r\n InputProps,\r\n type,\r\n onChange,\r\n hasError,\r\n ...props\r\n}) => {\r\n const styles = useStyles(props);\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const endAdornment = type === \"password\" && (\r\n \r\n setShowPassword(!showPassword)}>\r\n {showPassword ? : }\r\n \r\n \r\n );\r\n\r\n const currentType =\r\n type !== \"password\" ? \"text\" : showPassword ? \"text\" : \"password\";\r\n\r\n return (\r\n runInAction(() => onChange?.(e.target.value))}\r\n type={currentType}\r\n rows={6}\r\n InputProps={{\r\n endAdornment,\r\n inputProps:\r\n type === \"number\"\r\n ? { decimalScale: maxLength ?? 2, fixedDecimalScale: true }\r\n : { maxLength },\r\n inputComponent:\r\n type === \"number\" ? (NumberFormatCustom as any) : undefined,\r\n ...InputProps,\r\n }}\r\n onKeyDown={(event) => {\r\n if (type === \"number\" && [\"+\", \"-\", \"e\"].includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n }}\r\n {...props}\r\n />\r\n );\r\n};\r\n\r\nexport { TextField };\r\n","import FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport clsx from \"clsx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect } from \"react\";\r\n\r\nimport { CalculationErrorContext } from \"../state/CalculationErrors\";\r\nimport { Colors } from \"../utilities/colors\";\r\n\r\nimport { TextField, validateEmail } from \"./TextField\";\r\nimport { useId } from \"./useId\";\r\n\r\nconst useStyles = makeStyles(\r\n ({ props, ...theme }) => ({\r\n label: {\r\n width: \"100%\",\r\n marginBottom: \".5rem\",\r\n },\r\n textField: {\r\n flexGrow: 1,\r\n marginLeft: \"2rem\",\r\n },\r\n textFieldRoot: {\r\n borderRadius: \".5rem\",\r\n backgroundColor: Colors.White,\r\n \"& input\": {\r\n background: ({ disabled }) =>\r\n disabled ? Colors.CalculationsBackground : Colors.White,\r\n borderRadius: \"inherit\",\r\n },\r\n },\r\n textFieldError: {\r\n \"& fieldset\": {\r\n borderColor: \"red !important\",\r\n },\r\n },\r\n labelInner: {\r\n width: ({ labelWidth }) => `${labelWidth}rem`,\r\n minWidth: ({ labelWidth }) => `${labelWidth}rem`,\r\n },\r\n labelPlacementStart: {\r\n justifyContent: \"space-between\",\r\n minWidth: \"15rem\",\r\n alignItems: \"baseline\",\r\n },\r\n })\r\n);\r\n\r\nexport interface CalculationTextFieldProps {\r\n id?: string;\r\n hasErrors?: boolean;\r\n className?: string;\r\n classes?: Partial>;\r\n value?: string | number;\r\n label: string;\r\n type?: \"number\" | \"text\" | \"password\" | \"email\";\r\n onChange?: (value: string | number) => void;\r\n labelWidth?: number;\r\n mustHaveValue?: boolean;\r\n multiline?: boolean;\r\n endAdornment?: React.ReactNode;\r\n format?: \"number\" | \"dollar\" | \"percentage\";\r\n disabled?: boolean;\r\n maxLength?: number;\r\n validation?: (value: string | number) => string | undefined;\r\n}\r\n\r\nexport default observer(\r\n ({\r\n id: originalId,\r\n hasErrors,\r\n className,\r\n classes,\r\n label,\r\n onChange,\r\n value,\r\n type = \"text\",\r\n labelWidth = 15,\r\n mustHaveValue = true,\r\n multiline,\r\n endAdornment: inputEndAdornment,\r\n format,\r\n disabled,\r\n maxLength,\r\n validation,\r\n }: CalculationTextFieldProps) => {\r\n const id = originalId ?? useId();\r\n const styles = useStyles({\r\n classes,\r\n label,\r\n onChange,\r\n labelWidth,\r\n disabled,\r\n });\r\n const calculationErrorContext = useContext(CalculationErrorContext);\r\n const valueError = mustHaveValue && (value === undefined || value === \"\");\r\n const validationError = value && validation?.(value);\r\n const emailError = `Please enter a valid email address`;\r\n const invalidEmail =\r\n type === \"email\" && value && !validateEmail(value as string);\r\n\r\n let startAdornment: React.ReactNode;\r\n let endAdornment = inputEndAdornment;\r\n\r\n switch (format) {\r\n case \"dollar\": {\r\n startAdornment = $;\r\n break;\r\n }\r\n case \"percentage\": {\r\n endAdornment = %;\r\n break;\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (valueError) {\r\n calculationErrorContext.addFormError(id, label);\r\n } else if (invalidEmail) {\r\n calculationErrorContext.addError(id, emailError);\r\n }\r\n if (validationError) {\r\n calculationErrorContext.addError(id, validationError);\r\n }\r\n return () => {\r\n calculationErrorContext.removeFormError(id, label);\r\n calculationErrorContext.removeError(id, emailError);\r\n if (validationError) {\r\n calculationErrorContext.removeError(id, validationError);\r\n }\r\n };\r\n }, [\r\n id,\r\n calculationErrorContext,\r\n label,\r\n valueError,\r\n validationError,\r\n invalidEmail,\r\n emailError,\r\n ]);\r\n\r\n return (\r\n \r\n }\r\n label={label}\r\n labelPlacement=\"start\"\r\n className={clsx(className, styles.label)}\r\n classes={{\r\n labelPlacementStart: styles.labelPlacementStart,\r\n label: styles.labelInner,\r\n }}\r\n value={value ?? \"\"}\r\n />\r\n );\r\n }\r\n);\r\n","import Grid from \"@material-ui/core/Grid\";\r\nimport makeStyles from \"@material-ui/styles/makeStyles\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport CalculationSelect, { MenuItem } from \"../../common/CalculationSelect\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport { AdminContext, CalculationListItem } from \"../../state/Admin\";\r\nimport { AlertContext } from \"../../state/Alert\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n maxWidth: \"80rem\",\r\n minWidth: \"40rem\",\r\n },\r\n spacing: {\r\n marginBottom: \"1rem\",\r\n margin: \"1rem\",\r\n },\r\n}));\r\n\r\nconst CreateCalculation = observer(() => {\r\n const styles = useStyles();\r\n const [estimateType, setEstimateType] = useState(\"Estimate\");\r\n const [copyExisting, setCopyExisting] = useState(\"No\");\r\n const [calculationToCopy, setCalculationToCopy] = useState();\r\n const [eeNumber, setEeNumber] = useState(\"\");\r\n const [items, setItems] = useState([]);\r\n const alertContext = useContext(AlertContext);\r\n const adminContext = useContext(AdminContext);\r\n\r\n useEffect(() => {\r\n // tslint:disable-next-line: no-floating-promises\r\n (async () => {\r\n const result = await adminContext.getPaginatedCalculationList(\r\n eeNumber,\r\n \"\",\r\n \"calculationName\",\r\n \"asc\",\r\n 0,\r\n 10\r\n );\r\n setItems(result.calculations);\r\n })();\r\n }, [adminContext, eeNumber]);\r\n\r\n const foundCalculations = items\r\n .filter((li) => li.userName === eeNumber)\r\n .sort((a, b) => a.calculationName.localeCompare(b.calculationName));\r\n const foundUser = !!foundCalculations.length;\r\n const [calculation] = foundCalculations;\r\n\r\n const handleCreateCalculation = async () => {\r\n const success = await adminContext.createCalculation(\r\n calculation.userId,\r\n estimateType === \"Final\",\r\n copyExisting === \"Yes\"\r\n ? calculationToCopy ?? foundCalculations[0].uniqueId\r\n : undefined\r\n );\r\n setEeNumber(\"\");\r\n setCalculationToCopy(undefined);\r\n setEstimateType(\"Estimate\");\r\n setCopyExisting(\"No\");\r\n alertContext.showAlert({\r\n type: success ? \"success\" : \"error\",\r\n content: success ? \"Calculation created\" : \"Error\",\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n setEeNumber(value as string)}\r\n mustHaveValue={false}\r\n />\r\n {foundUser && (\r\n <>\r\n \r\n Estimate\r\n Final\r\n \r\n \r\n No\r\n Yes\r\n \r\n {copyExisting === \"Yes\" && (\r\n \r\n {foundCalculations.map((c) => (\r\n {c.calculationName}\r\n ))}\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n Create\r\n \r\n \r\n );\r\n});\r\n\r\nexport default CreateCalculation;\r\n","import FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { ParsableDate } from \"@material-ui/pickers/constants/prop-types\";\r\nimport { KeyboardDatePicker } from \"@material-ui/pickers/DatePicker\";\r\nimport clsx from \"clsx\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { Moment } from \"moment\";\r\nimport React, { useContext, useEffect } from \"react\";\r\n\r\nimport { CalculationErrorContext } from \"../state/CalculationErrors\";\r\nimport { Colors } from \"../utilities/colors\";\r\n\r\nimport { useId } from \"./useId\";\r\n\r\ninterface CalculationDateProps {\r\n value?: Moment | null;\r\n label: string | React.ReactNode;\r\n labelOverride?: string;\r\n onChange?: (value: Moment) => void;\r\n mustHaveValue?: boolean;\r\n labelWidth?: number;\r\n minDateMessage?: string;\r\n minDate?: ParsableDate;\r\n maxDateMessage?: string;\r\n maxDate?: ParsableDate;\r\n validation?: (date: Moment) => string | undefined;\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n label: {\r\n width: \"100%\",\r\n marginBottom: \".5rem\",\r\n },\r\n input: {\r\n width: \"100%\",\r\n marginLeft: \"2rem\",\r\n \"& > div\": {\r\n background: Colors.White,\r\n },\r\n \"& .MuiIconButton-root\": {\r\n display: \"none\",\r\n },\r\n },\r\n inputError: {\r\n \"& fieldset\": {\r\n borderColor: \"red !important\",\r\n },\r\n },\r\n labelInner: {\r\n width: ({ labelWidth }) => `${labelWidth}rem`,\r\n minWidth: ({ labelWidth }) => `${labelWidth}rem`,\r\n },\r\n labelPlacementStart: {\r\n justifyContent: \"space-between\",\r\n minWidth: \"15rem\",\r\n },\r\n}));\r\n\r\nexport default observer(\r\n ({\r\n label,\r\n onChange,\r\n value: inputValue,\r\n mustHaveValue = true,\r\n labelWidth = 15,\r\n minDateMessage = \"\",\r\n minDate,\r\n maxDateMessage = \"\",\r\n maxDate,\r\n validation,\r\n labelOverride,\r\n }: CalculationDateProps) => {\r\n const id = useId();\r\n const styles = useStyles({ label, labelWidth });\r\n const calculationErrorContext = useContext(CalculationErrorContext);\r\n const value = inputValue?.isSame(\"0001-01-01\") ? null : inputValue;\r\n const isValid = inputValue?.isValid();\r\n const isInRange =\r\n inputValue?.isAfter(\"1900-01-01\") && inputValue?.isBefore(\"2100-01-01\");\r\n const validationError = isValid && isInRange && validation?.(inputValue!);\r\n const rangeError = `${\r\n labelOverride ?? label\r\n } required. Please enter a valid date`;\r\n\r\n useEffect(() => {\r\n if ((!isValid && mustHaveValue) || !isInRange) {\r\n calculationErrorContext.addError(id, rangeError);\r\n }\r\n if (validationError) {\r\n calculationErrorContext.addError(id, validationError);\r\n }\r\n return () => {\r\n if ((!isValid && mustHaveValue) || !isInRange) {\r\n calculationErrorContext.removeError(id, rangeError);\r\n }\r\n if (validationError) {\r\n calculationErrorContext.removeError(id, validationError);\r\n }\r\n };\r\n }, [\r\n id,\r\n isInRange,\r\n rangeError,\r\n calculationErrorContext,\r\n label,\r\n value,\r\n isValid,\r\n mustHaveValue,\r\n validationError,\r\n ]);\r\n\r\n return (\r\n \r\n runInAction(() => onChange?.(date as moment.Moment))\r\n }\r\n keyboardIcon={null}\r\n allowKeyboardControl={false}\r\n />\r\n }\r\n label={label}\r\n labelPlacement=\"start\"\r\n className={styles.label}\r\n classes={{\r\n labelPlacementStart: styles.labelPlacementStart,\r\n label: styles.labelInner,\r\n }}\r\n />\r\n );\r\n }\r\n);\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport InputBase from \"@material-ui/core/InputBase\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport clsx from \"clsx\";\r\nimport React, { FC, ReactNode } from \"react\";\r\n\r\nimport { Colors } from \"../utilities/colors\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n label: {\r\n minWidth: ({ labelWidth }) => `${labelWidth}rem`,\r\n maxWidth: ({ labelWidth }) => `${labelWidth}rem`,\r\n color: `${Colors.Black} !important`,\r\n display: \"flex\",\r\n marginRight: \"0.5rem\",\r\n },\r\n root: {\r\n paddingTop: \"0 !important\",\r\n paddingBottom: \".5rem !important\",\r\n },\r\n labelPlacementStart: {\r\n justifyContent: \"space-between\",\r\n paddingTop: \".5rem\",\r\n paddingBottom: \".5rem\",\r\n alignItems: \"baseline\",\r\n width: \"100%\",\r\n },\r\n inputRight: {\r\n textAlign: \"right\",\r\n },\r\n}));\r\n\r\nexport interface CalculationLabelProps {\r\n className?: string;\r\n label: string;\r\n value: string | number | undefined;\r\n labelWidth?: number;\r\n tooltip?: ReactNode;\r\n rightAlign?: boolean;\r\n format?: \"number\" | \"dollar\" | \"percentage\";\r\n minimumFractionDigits?: number;\r\n}\r\n\r\nconst CalculationLabel: FC = ({\r\n className,\r\n label,\r\n value,\r\n labelWidth = 17,\r\n tooltip,\r\n minimumFractionDigits = 0,\r\n rightAlign = false,\r\n format = \"number\",\r\n}) => {\r\n const styles = useStyles({ label, value, labelWidth });\r\n let displayValue =\r\n typeof value === \"number\"\r\n ? value.toLocaleString(\"en-US\", {\r\n maximumFractionDigits: minimumFractionDigits ?? 2,\r\n minimumFractionDigits,\r\n })\r\n : value;\r\n if (format !== \"number\") {\r\n switch (format) {\r\n case \"dollar\":\r\n displayValue = `$${displayValue}`;\r\n break;\r\n case \"percentage\":\r\n displayValue = `${displayValue}%`;\r\n break;\r\n }\r\n }\r\n\r\n return (\r\n \r\n }\r\n label={\r\n <>\r\n {label}\r\n {tooltip && (\r\n \r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n }\r\n labelPlacement=\"start\"\r\n className={className}\r\n classes={{\r\n root: styles.root,\r\n labelPlacementStart: styles.labelPlacementStart,\r\n label: styles.label,\r\n }}\r\n value={displayValue}\r\n />\r\n );\r\n};\r\n\r\nexport default CalculationLabel;\r\n","import { BenefitOption } from \"../state/Calculation\";\r\nimport { User } from \"../state/User\";\r\n\r\nexport const isUserAdmin = (user: User | undefined) =>\r\n user?.userType === \"Admin\" || user?.userType === \"TacomaAdmin\";\r\n\r\nexport const isUserFullAdmin = (user: User | undefined) =>\r\n user?.userType === \"Admin\";\r\n\r\nexport const getUserTypeString = (user: User | undefined) => {\r\n switch (user?.userType) {\r\n case \"TacomaAdmin\": {\r\n return \"Tacoma Admin\";\r\n }\r\n default:\r\n return user?.userType;\r\n }\r\n};\r\n\r\nexport const filterUserBenefitOptions = (\r\n benefitOptions: BenefitOption[] | undefined,\r\n isAdmin: boolean\r\n): BenefitOption[] | undefined =>\r\n benefitOptions\r\n ?.filter((bo) => bo.display)\r\n .filter((bo) => bo.value !== \"5YR\" || isAdmin);\r\n","import { Grid } from \"@material-ui/core\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect } from \"react\";\r\n\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationLabel from \"../../common/CalculationLabel\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport CalculationSelect, { MenuItem } from \"../../common/CalculationSelect\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport { CalculationContext } from \"../../state/Calculation\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { isUserAdmin } from \"../../utilities/user\";\r\n\r\nimport { CalculationPageProps } from \"./CalculationPage\";\r\n\r\nexport const employerLookUp = {\r\n C: \"City of Tacoma\",\r\n T: \"Pierce Transit\",\r\n H: \"Health\",\r\n L: \"LESA\",\r\n D: \"Deferred\",\r\n};\r\n\r\nexport type EmployeeLookupKey = typeof employerLookUp;\r\n\r\nconst Contributions: React.FC = observer(() => {\r\n const calculationContext = useContext(CalculationContext);\r\n const rootContext = useContext(RootContext);\r\n const { currentCalculation } = calculationContext;\r\n const isAdmin = isUserAdmin(rootContext.user);\r\n\r\n useEffect(() => {\r\n if (currentCalculation?.dateOfMembership?.isAfter(\"01/01/1983\")) {\r\n runInAction(() => {\r\n currentCalculation.extraContributionsPre83 = 0;\r\n currentCalculation.additionalContributionsPre83 = 0;\r\n });\r\n }\r\n });\r\n\r\n if (!currentCalculation) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {currentCalculation.isProjection === \"Y\" ? (\r\n <>\r\n {!isAdmin ? (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n \r\n (currentCalculation.employer = value as any)\r\n }\r\n >\r\n {Object.keys(employerLookUp).map((key) => (\r\n \r\n {employerLookUp[key as keyof EmployeeLookupKey]}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n (currentCalculation.memberContributionsLastQuarter =\r\n value as number)\r\n }\r\n />\r\n \r\n (currentCalculation.benefitContributionsLastQuarter =\r\n value as number)\r\n }\r\n />\r\n \r\n (currentCalculation.memberContributionsLastPayPeriod =\r\n value as number)\r\n }\r\n />\r\n \r\n (currentCalculation.benefitContributionsLastPayPeriod =\r\n value as number)\r\n }\r\n />\r\n \r\n\r\n \r\n \r\n {currentCalculation.dateOfMembership?.isBefore(\"8/1/1983\") && (\r\n \r\n (currentCalculation.additionalContributionsPre83 =\r\n value as number)\r\n }\r\n />\r\n )}\r\n \r\n (currentCalculation.additionalContributionsPost83 =\r\n value as number)\r\n }\r\n />\r\n \r\n \r\n )}\r\n \r\n ) : !isAdmin ? (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n (currentCalculation.totalMemberContributions = value as number)\r\n }\r\n />\r\n \r\n (currentCalculation.totalBenefitContributions = value as number)\r\n }\r\n />\r\n \r\n (currentCalculation.nonTaxableContributions = value as number)\r\n }\r\n />\r\n \r\n \r\n \r\n {currentCalculation.dateOfMembership?.isBefore(\"8/1/1983\") && (\r\n \r\n (currentCalculation.extraContributionsPre83 = value as number)\r\n }\r\n />\r\n )}\r\n \r\n (currentCalculation.extraContributionsPost83 = value as number)\r\n }\r\n />\r\n \r\n \r\n )}\r\n\r\n {currentCalculation.isProjection === \"Y\" && (\r\n
\r\n

\r\n These are your latest known contributions. If these numbers do not\r\n appear correct, contact the TERS administrative office.\r\n

\r\n {isAdmin && (\r\n

\r\n If the last pay period falls at the end of a quarter, the\r\n contribution amounts as of the last quarter and last pay period\r\n should be the same. If not, the contributions as of the last pay\r\n period should be greater for an active employee.\r\n

\r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n});\r\n\r\nexport default Contributions;\r\n","import Grid from \"@material-ui/core/Grid\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\nimport makeStyles from \"@material-ui/styles/makeStyles\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport CalculationDate from \"../../common/CalculationDate\";\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationLabel from \"../../common/CalculationLabel\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport CalculationSelect, { MenuItem } from \"../../common/CalculationSelect\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport { AdminContext, NewUser } from \"../../state/Admin\";\r\nimport { AlertContext } from \"../../state/Alert\";\r\nimport {\r\n CalculationErrorContext,\r\n CalculationErrors,\r\n} from \"../../state/CalculationErrors\";\r\nimport { StatusCode } from \"../../state/User\";\r\nimport { employerLookUp } from \"../Calculation/Contributions\";\r\n\r\ntype EmployeeLookupKey = typeof employerLookUp;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n maxWidth: \"80rem\",\r\n minWidth: \"40rem\",\r\n },\r\n spacing: {\r\n marginBottom: \"1rem\",\r\n margin: \"1rem\",\r\n },\r\n}));\r\n\r\nconst newUserTemplate = {\r\n employeeNumber: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n gender: \"Male\",\r\n dateOfBirth: undefined,\r\n employer: \"C\",\r\n dateOfMembership: undefined,\r\n lastDayOfEmployment: undefined,\r\n totalMemberContributions: 0,\r\n totalBenefitContributions: 0,\r\n nonTaxableContributions: 0,\r\n memberContributionsLastPayPeriod: 0,\r\n benefitContributionsLastPayPeriod: 0,\r\n currentContributionsLastPayDate: undefined,\r\n currentGrossPayPerPeriod: 0,\r\n additionalContributionsPre83: 0,\r\n additionalContributionsPost83: 0,\r\n};\r\n\r\nconst CreateMember = observer(() => {\r\n const styles = useStyles();\r\n const [error, setError] = useState(\"\");\r\n const [newUser, setNewUserState] =\r\n useState>(newUserTemplate);\r\n const adminContext = useContext(AdminContext);\r\n const errorContext = useContext(CalculationErrorContext);\r\n const alertContext = useContext(AlertContext);\r\n\r\n useEffect(() => {\r\n // tslint:disable-next-line: no-floating-promises\r\n adminContext.getUserList();\r\n }, [adminContext]);\r\n\r\n if (!adminContext.users) {\r\n return null;\r\n }\r\n\r\n const setNewUser = (newUser: Partial) => {\r\n setNewUserState((state) => ({ ...state, ...newUser }));\r\n };\r\n const foundUser = adminContext.users.find(\r\n (u) => u.employeeId === newUser.employeeNumber\r\n );\r\n const eeNumber = newUser.employeeNumber ?? \"\";\r\n const goodEe = !foundUser && eeNumber.length >= 4;\r\n\r\n const handleAddUser = async () => {\r\n setError(\"\");\r\n runInAction(() => (errorContext.validateErrors = true));\r\n if (errorContext.hasAnyErrors) {\r\n return;\r\n }\r\n const result = await adminContext.addUser(newUser as NewUser);\r\n if (result.status === StatusCode.Failed) {\r\n setError(\"Add user failed, check password requirements and EmployeeId.\");\r\n } else {\r\n await adminContext.getUserList(true);\r\n setNewUserState(newUserTemplate);\r\n alertContext.showAlert({\r\n type: \"success\",\r\n content: `User created`,\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n setNewUser({ employeeNumber: value as string })\r\n }\r\n mustHaveValue={false}\r\n />\r\n \r\n\r\n {goodEe && (\r\n <>\r\n \r\n \r\n \r\n setNewUser({ firstName: value as string })}\r\n />\r\n setNewUser({ lastName: value as string })}\r\n />\r\n setNewUser({ dateOfBirth: value })}\r\n />\r\n setNewUser({ dateOfMembership: value })}\r\n />\r\n \r\n setNewUser({ currentContributionsLastPayDate: value })\r\n }\r\n />\r\n \r\n\r\n \r\n \r\n \r\n setNewUser({ currentGrossPayPerPeriod: value as number })\r\n }\r\n />\r\n setNewUser({ gender: value })}\r\n >\r\n Male\r\n Female\r\n \r\n setNewUser({ employer: value })}\r\n >\r\n {Object.keys(employerLookUp).map((key) => (\r\n \r\n {employerLookUp[key as keyof EmployeeLookupKey]}\r\n \r\n ))}\r\n \r\n \r\n setNewUser({\r\n totalMemberContributions: value as number,\r\n })\r\n }\r\n />\r\n \r\n setNewUser({\r\n totalBenefitContributions: value as number,\r\n })\r\n }\r\n />\r\n \r\n setNewUser({\r\n memberContributionsLastPayPeriod: value as number,\r\n })\r\n }\r\n />\r\n \r\n setNewUser({\r\n benefitContributionsLastPayPeriod: value as number,\r\n })\r\n }\r\n />\r\n \r\n setNewUser({ additionalContributionsPre83: value as number })\r\n }\r\n />\r\n \r\n setNewUser({ additionalContributionsPost83: value as number })\r\n }\r\n />\r\n \r\n \r\n )}\r\n \r\n\r\n {(error ||\r\n foundUser ||\r\n (errorContext.validateErrors && errorContext.hasAnyErrors)) && (\r\n \r\n {error || errorContext.allErrorString}\r\n {foundUser &&\r\n \"This employee number has already been used. Please try again with another employee number\"}\r\n \r\n )}\r\n\r\n \r\n Create\r\n \r\n \r\n );\r\n});\r\n\r\nexport default () => (\r\n \r\n \r\n \r\n);\r\n","import IconButton from \"@material-ui/core/IconButton\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport { Visibility, VisibilityOff } from \"@material-ui/icons\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\n\r\nimport { CalculationErrorContext } from \"../state/CalculationErrors\";\r\n\r\nimport CalculationTextField, {\r\n CalculationTextFieldProps,\r\n} from \"./CalculationTextField\";\r\nimport { useId } from \"./useId\";\r\n\r\nconst PASSWORD_ERROR =\r\n \"Password must contain at least one uppercase, lowercase, number and special character with a length of at least 8 characters.\";\r\nconst PASSWORD_REGEX =\r\n /(?=(.*[0-9]))(?=.*[!@#$%^&*()\\\\[\\]{}\\-_+=~`|:;\"'<>,./?])(?=.*[a-z])(?=(.*[A-Z]))(?=(.*)).{6,}/;\r\n\r\ninterface PasswordFieldProps extends CalculationTextFieldProps {\r\n enforcePasswordValidation: boolean;\r\n}\r\n\r\nexport default ({\r\n type,\r\n value,\r\n enforcePasswordValidation,\r\n ...props\r\n}: PasswordFieldProps) => {\r\n const id = useId();\r\n const calculationErrorContext = useContext(CalculationErrorContext);\r\n const [showPassword, setShowPassword] = useState(false);\r\n const currentType = showPassword ? \"text\" : \"password\";\r\n const passwordError =\r\n enforcePasswordValidation &&\r\n (!value || !PASSWORD_REGEX.test(value as string));\r\n\r\n useEffect(() => {\r\n if (passwordError) {\r\n calculationErrorContext.addError(id, PASSWORD_ERROR);\r\n }\r\n\r\n return () => {\r\n calculationErrorContext.removeError(id, PASSWORD_ERROR);\r\n };\r\n }, [calculationErrorContext, value, passwordError, id]);\r\n\r\n const adornment = (\r\n \r\n setShowPassword(!showPassword)}>\r\n {showPassword ? : }\r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport {\r\n Checkbox,\r\n Drawer,\r\n IconButton,\r\n Theme,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport MuiDialogActions from \"@material-ui/core/DialogActions\";\r\nimport MuiDialogContent from \"@material-ui/core/DialogContent\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { DataGrid, GridColumns } from \"@material-ui/data-grid\";\r\nimport ReplayIcon from \"@material-ui/icons/Replay\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\nimport makeStyles from \"@material-ui/styles/makeStyles\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { FC, useContext, useEffect, useState } from \"react\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport CalculationSelect, { MenuItem } from \"../../common/CalculationSelect\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport Dialog from \"../../common/Dialog\";\r\nimport PasswordField from \"../../common/PasswordField\";\r\nimport { AdminContext } from \"../../state/Admin\";\r\nimport {\r\n CalculationErrorContext,\r\n CalculationErrors,\r\n} from \"../../state/CalculationErrors\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { ErrorCode, StatusCode, User, UserType } from \"../../state/User\";\r\nimport { getUserTypeString, isUserFullAdmin } from \"../../utilities/user\";\r\n\r\nconst DialogContent = withStyles((theme: Theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n },\r\n}))(MuiDialogContent);\r\n\r\nconst DialogActions = withStyles((theme: Theme) => ({\r\n root: {\r\n marginTop: \"1rem\",\r\n padding: theme.spacing(1),\r\n },\r\n}))(MuiDialogActions);\r\n\r\n/**\r\n * some garbage code to generate a password\r\n */\r\nconst generatePassword = (length: number) => {\r\n const chars = [\r\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\", // letters\r\n \"abcdefghijklmnopqrstuvwxyz\",\r\n \"0123456789\", // numbers\r\n \"!@#$%^&*()\", // special chars\r\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()\", // all\r\n ];\r\n\r\n return [1, 1, 1, 1, length - 4]\r\n .map((len, i) =>\r\n Array(len)\r\n .fill(chars[i])\r\n .map((x) => x[Math.floor(Math.random() * x.length)])\r\n .join(\"\")\r\n )\r\n .concat()\r\n .join(\"\")\r\n .split(\"\")\r\n .sort(() => 0.5 - Math.random())\r\n .join(\"\");\r\n};\r\n\r\ninterface ConfirmationDeleteProps {\r\n memberId: string;\r\n userId: string;\r\n action: string;\r\n disabled: boolean;\r\n}\r\n\r\nconst ConfirmationDelete: FC = ({\r\n action,\r\n memberId,\r\n userId,\r\n disabled,\r\n}) => {\r\n const adminContext = useContext(AdminContext);\r\n const [showWarning, setShowWarning] = useState(false);\r\n\r\n const handleDelete = async () => {\r\n await adminContext.deleteUser(userId);\r\n await adminContext.getUserList(true);\r\n setShowWarning(false);\r\n };\r\n\r\n return (\r\n <>\r\n setShowWarning(true)}\r\n >\r\n \r\n \r\n \r\n \r\n Are you sure you want to {action.toLowerCase()} member \r\n {memberId}?\r\n \r\n \r\n setShowWarning(false)}\r\n color=\"slate\"\r\n >\r\n Cancel\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst ConfirmationCheck: FC<{ editUser: User; user?: User }> = ({\r\n editUser,\r\n user,\r\n}) => {\r\n const [showWarning, setShowWarning] = useState(false);\r\n const handleDeactivate = async () => {\r\n await editUser.saveToServer({ deactivated: !editUser.deactivated });\r\n setShowWarning(false);\r\n };\r\n const action = editUser.deactivated ? \"Activate\" : \"Deactivate\";\r\n const disabled =\r\n editUser.userType === \"Admin\" && user?.userType === \"TacomaAdmin\";\r\n return (\r\n <>\r\n setShowWarning(true)}\r\n />\r\n \r\n \r\n Are you sure you want to {action} member \r\n {editUser.employeeId}?\r\n \r\n \r\n setShowWarning(false)}\r\n color=\"slate\"\r\n >\r\n Cancel\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst useEditMemberStyles = makeStyles((theme) => ({\r\n container: {\r\n maxWidth: \"80rem\",\r\n minWidth: \"40rem\",\r\n },\r\n spacing: {\r\n marginBottom: \"1rem\",\r\n margin: \"1rem\",\r\n },\r\n userPanel: {\r\n margin: \"1rem\",\r\n maxWidth: \"30rem\",\r\n },\r\n buttons: {\r\n marginLeft: \"1rem\",\r\n marginTop: \"1.5rem\",\r\n },\r\n}));\r\n\r\ninterface EditMemberDrawerProps {\r\n editUser: User;\r\n onClose: () => void;\r\n}\r\n\r\nconst EditMemberDrawer: FC = observer(\r\n ({ editUser: initialUser, onClose }) => {\r\n const styles = useEditMemberStyles();\r\n const errorContext = useContext(CalculationErrorContext);\r\n const { user } = useContext(RootContext);\r\n const [password, setPassword] = useState(\"\");\r\n const [confirmPassword, setConfirmPassword] = useState(\"\");\r\n const [editUser, setEditUser] = useState({\r\n ...initialUser._toServer(),\r\n isDirty: false,\r\n });\r\n const [error, setError] = useState(\"\");\r\n\r\n const isDirty = password || editUser.isDirty;\r\n const handleUpdate = async () => {\r\n const result = await initialUser.saveToServer(\r\n editUser,\r\n password,\r\n confirmPassword\r\n );\r\n if (result.status === StatusCode.Failed) {\r\n switch (result.errorCode) {\r\n case ErrorCode.InvalidPassword:\r\n setError(\"Invalid Password\");\r\n break;\r\n case ErrorCode.InvalidEmail:\r\n setError(\"Invalid Email\");\r\n break;\r\n }\r\n return;\r\n }\r\n onClose();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {\r\n setEditUser({\r\n ...editUser,\r\n email: value as string,\r\n isDirty: true,\r\n });\r\n }}\r\n mustHaveValue={false}\r\n type=\"email\"\r\n />\r\n {\r\n setEditUser({\r\n ...editUser,\r\n firstName: value as string,\r\n isDirty: true,\r\n });\r\n }}\r\n mustHaveValue={false}\r\n />\r\n {\r\n setEditUser({\r\n ...editUser,\r\n lastName: value as string,\r\n isDirty: true,\r\n });\r\n }}\r\n mustHaveValue={false}\r\n />\r\n {isUserFullAdmin(user) && (\r\n {\r\n setEditUser({\r\n ...editUser,\r\n userType: value as UserType,\r\n isDirty: true,\r\n });\r\n }}\r\n >\r\n Admin\r\n Tacoma Admin\r\n User\r\n \r\n )}\r\n setPassword(value as string)}\r\n mustHaveValue={false}\r\n endAdornment={\r\n setPassword(generatePassword(8))}>\r\n \r\n \r\n }\r\n />\r\n {isDirty && (\r\n setConfirmPassword(value as string)}\r\n />\r\n )}\r\n \r\n \r\n Update\r\n \r\n \r\n \r\n {error && {error}}\r\n \r\n \r\n );\r\n }\r\n);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n maxWidth: \"80rem\",\r\n minWidth: \"40rem\",\r\n },\r\n spacing: {\r\n marginBottom: \"1rem\",\r\n margin: \"1rem\",\r\n },\r\n userPanel: {\r\n margin: \"1rem\",\r\n maxWidth: \"30rem\",\r\n },\r\n}));\r\n\r\nconst ManageMember = observer(() => {\r\n const styles = useStyles();\r\n const [editUser, setEditUser] = useState();\r\n const adminContext = useContext(AdminContext);\r\n const { user } = useContext(RootContext);\r\n const [eeNumber, setEeNumber] = useState(\"\");\r\n const [lastName, setLastName] = useState(\"\");\r\n\r\n useEffect(() => {\r\n // tslint:disable-next-line: no-floating-promises\r\n adminContext.getUserList();\r\n }, [adminContext]);\r\n\r\n if (!adminContext.users) {\r\n return null;\r\n }\r\n\r\n const items = adminContext.users.filter((item) => {\r\n let match = true;\r\n if (eeNumber && match) {\r\n match =\r\n item.employeeId?.toLowerCase()!.includes(eeNumber.toLowerCase()) ??\r\n false;\r\n }\r\n if (lastName && match) {\r\n match =\r\n item.lastName?.toLowerCase()!.includes(lastName.toLowerCase()) ?? false;\r\n }\r\n return match;\r\n });\r\n\r\n const UserColumns: GridColumns = [\r\n {\r\n editable: false,\r\n field: \"employeeId\",\r\n headerName: \"EE num\",\r\n flex: 1,\r\n minWidth: 150,\r\n },\r\n {\r\n field: \"email\",\r\n headerName: \"Email\",\r\n flex: 1,\r\n minWidth: 150,\r\n },\r\n {\r\n field: \"firstName\",\r\n headerName: \"First name\",\r\n flex: 1,\r\n minWidth: 150,\r\n },\r\n {\r\n field: \"lastName\",\r\n headerName: \"Last name\",\r\n flex: 1,\r\n minWidth: 150,\r\n },\r\n {\r\n field: \"userType\",\r\n headerName: \"Role\",\r\n flex: 0.75,\r\n minWidth: 100,\r\n renderCell: (params) => getUserTypeString(params.row as User),\r\n },\r\n {\r\n editable: false,\r\n field: \"deactivated\",\r\n headerName: \"Deactivate\",\r\n flex: 0.75,\r\n minWidth: 100,\r\n renderCell: (params) => (\r\n \r\n ),\r\n },\r\n {\r\n editable: false,\r\n field: \"actions\",\r\n headerName: \" \",\r\n sortable: false,\r\n flex: 0.75,\r\n minWidth: 100,\r\n renderCell: (params) => {\r\n const disabled =\r\n params.row.userType === \"Admin\" && user?.userType === \"TacomaAdmin\";\r\n return (\r\n <>\r\n setEditUser(params.row as User)}\r\n disabled={disabled}\r\n style={{ opacity: disabled ? 0.4 : 1 }}\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n setEeNumber(value as string)}\r\n mustHaveValue={false}\r\n />\r\n setLastName(value as string)}\r\n mustHaveValue={false}\r\n />\r\n \r\n \r\n row.id}\r\n disableColumnMenu={true}\r\n autoHeight={true}\r\n rowsPerPageOptions={[10]}\r\n isCellEditable={() => false}\r\n isRowSelectable={() => false}\r\n />\r\n \r\n \r\n {!!editUser && (\r\n setEditUser(undefined)}\r\n />\r\n )}\r\n \r\n );\r\n});\r\n\r\nexport default () => (\r\n \r\n \r\n \r\n);\r\n","import { Typography } from \"@material-ui/core\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { AttachFile } from \"@material-ui/icons\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { ChangeEvent, useContext, useEffect, useState } from \"react\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport { AdminContext, ServerFile } from \"../../state/Admin\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n input: {\r\n display: \"none\",\r\n },\r\n button: {\r\n marginTop: \"1rem\",\r\n },\r\n}));\r\n\r\nconst Spreadsheet: React.FC = observer(() => {\r\n const styles = useStyles();\r\n const adminContext = useContext(AdminContext);\r\n const [serverFile, setServerFile] = useState();\r\n const [file, setFile] = useState();\r\n\r\n useEffect(() => {\r\n if (!serverFile) {\r\n // tslint:disable-next-line: no-floating-promises\r\n (async () => {\r\n const result = await adminContext.getFiles();\r\n const [file] = result.files;\r\n setServerFile(file);\r\n })();\r\n }\r\n }, [serverFile, adminContext]);\r\n\r\n const onFileChange = (event: ChangeEvent) => {\r\n if (event.target.files) {\r\n setFile(event.target.files[0]);\r\n }\r\n };\r\n\r\n const onFileUpload = async () => {\r\n await adminContext.addFile(file!);\r\n setServerFile(undefined);\r\n setFile(undefined);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Current spreadsheet:\r\n \r\n {serverFile ? (\r\n \r\n {serverFile.fileName}\r\n {serverFile.created}\r\n \r\n ) : (\r\n \r\n None\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Upload\r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default Spreadsheet;\r\n","import Accordion from \"@material-ui/core/Accordion\";\r\nimport AccordionDetails from \"@material-ui/core/AccordionDetails\";\r\nimport AccordionSummary from \"@material-ui/core/AccordionSummary\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\nimport makeStyles from \"@material-ui/styles/makeStyles\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport { Colors } from \"../../utilities/colors\";\r\n\r\nconst items = [\r\n {\r\n title: \"Unmodified Option\",\r\n content: [\r\n \"The maximum allowance you can receive is the unmodified monthly form of payment.\",\r\n ],\r\n },\r\n {\r\n title: \"Options\",\r\n content: [\r\n \"The following options provide for a death benefit under which your estate or your named beneficiary may receive a payment following your death. Because a death benefit is payable, the monthly amount of your retirement allowance will be less under these options. The total financial value of each option, however, remains the same (i.e. the options are actuarially equivalent).\",\r\n \"It is important to update your beneficiary form so the monies may be paid properly. Under Options A, B, and C, you may name a beneficiary to receive a death benefit. If you want to benefit a person under age 18, it is recommended you do so through a trust to avoid the requirement of a legal guardianship. Please consult with your lawyer. You may select an optional form of benefit within the 30-day period preceding your retirement date. Your election will be irrevocable.\",\r\n ],\r\n },\r\n {\r\n title: \"Option A\",\r\n content: [\r\n \"Provides that at your death your estate or beneficiary will receive a lump sum refund of the difference between your total accumulated contributions and interest at the date of retirement and the annuity payments you have received since retirement.\",\r\n \"Annuity payment refers to that portion of the retirement benefit that is considered payable from the member’s accumulated contributions.\",\r\n ],\r\n },\r\n {\r\n title: \"Option B\",\r\n content: [\r\n \"Provides that at your death your estate or beneficiary will continue to receive monthly annuity payments until the total of them equals your total accumulated contributions and interest at the date of retirement.\",\r\n \"Annuity payment refers to that portion of the retirement benefit that is considered payable from the member’s accumulated contributions.\",\r\n ],\r\n },\r\n {\r\n title: \"Option C\",\r\n content: [\r\n \"Provides for the payment of a retirement allowance for a guaranteed period of years. If you live beyond the guaranteed period, the allowance is continued to you for life, but if you die before the expiration of the period, the allowance will be continued to your estate or beneficiary for the balance of the time. You have an option of five or ten years for the guaranteed period.\",\r\n ],\r\n },\r\n {\r\n title: \"Option D\",\r\n content: [\r\n \"(See Pop-Up provision) (See Divorce Pop-Up provision).\",\r\n \"Provides a modified monthly allowance for life and after your death your spouse or domestic partner at the time of retirement will receive one-half of this amount each month for life.\",\r\n ],\r\n },\r\n {\r\n title: \"Option E\",\r\n content: [\r\n \"(See Pop-Up provision) (See Divorce Pop-Up provision).\",\r\n \"Provides a modified monthly allowance for life and after your death your spouse or domestic partner at the time of retirement will receive the same monthly allowance for life.\",\r\n ],\r\n },\r\n {\r\n title: \"Option F\",\r\n content: [\r\n \"(See Pop-Up provision)\",\r\n \"If a member at the time of retirement has no spouse or domestic partner, a modified monthly allowance for life is provided and after death, the beneficiary will receive one-half of this amount each month for life or will receive the same monthly allowance for life.\",\r\n ],\r\n },\r\n {\r\n title: \"Pop-Up provision\",\r\n content: [\r\n \"A member retiring on or after 01/01/1999 electing Option D or E, if the spouse or domestic partner dies before the retiree, the member’s benefit is increased to the Unmodified retirement allowance. This same benefit is provided for Option F as well.\",\r\n ],\r\n },\r\n {\r\n title: \"Divorce Pop-Up provision\",\r\n content: [\r\n \"A member retiring on or after 01/01/2008, electing Option D or E and divorced thereafter and has satisfied Section 1.30.690.C of the Tacoma Municipal Code, the benefit payable to the member effective as of the first day of the month following the entry of the Order shall be increased to the Unmodified retirement allowance. Provided further, that in the event the member is divorced and later remarries, within three months of remarriage the member will have the option to irrevocably designate the member’s new spouse or domestic partner as the wife or husband under Options D or E, subject to the same conditions as provided in Options D or E for a member who remarries after the death of a husband or wife.\",\r\n ],\r\n },\r\n {\r\n title: \"Social Security modification\",\r\n content: [\r\n \"A member retiring from service, who has not reached the age of 62, may elect to receive an additional pension allowance equal to a portion of their official projected Social Security benefit at age 62. This additional amount will continue until they reach the age of 62. At age 62, the member’s pension will be permanently reduced by the official projected Social Security benefit at age 62. The portion is calculated such that the total benefit paid from TERS is actuarially equivalent to the benefit paid from TERS had this option not been selected. If the member dies leaving a beneficiary entitled to an allowance, the allowance shall be the same as the beneficiary would have received had the member not selected this modification.\",\r\n ],\r\n },\r\n];\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n maxWidth: \"60rem\",\r\n minWidth: \"40rem\",\r\n },\r\n description: {\r\n margin: \"1rem\",\r\n },\r\n accordion: {\r\n margin: \"16px 0\",\r\n backgroundColor: Colors.CalculationsBackground,\r\n },\r\n accordionExpanded: {\r\n minHeight: \"unset\",\r\n },\r\n accordionSummary: {\r\n backgroundColor: Colors.MillimanBlue,\r\n color: Colors.White,\r\n minHeight: \"unset !important\",\r\n transition: \"unset\",\r\n },\r\n accordionContent: {\r\n margin: \"12px !important\",\r\n minHeight: \"unset !important\",\r\n },\r\n accordionDetails: {\r\n flexDirection: \"column\",\r\n },\r\n}));\r\n\r\nconst Home = observer(() => {\r\n const styles = useStyles();\r\n return (\r\n \r\n \r\n \r\n {items.map((item, index) => (\r\n \r\n }\r\n >\r\n {item.title}\r\n \r\n \r\n {item.content.map((item, index) => (\r\n \r\n {item}\r\n \r\n ))}\r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n});\r\n\r\nexport default Home;\r\n","import BenefitOptions from \"./BenefitOptions\";\r\nexport default BenefitOptions;\r\n","import { Grid, Theme } from \"@material-ui/core\";\r\nimport makeStyles from \"@material-ui/styles/makeStyles\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext } from \"react\";\r\n\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationLabelBase, {\r\n CalculationLabelProps,\r\n} from \"../../common/CalculationLabel\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport {\r\n BenefitOption,\r\n CalculationContext,\r\n NonTaxable,\r\n} from \"../../state/Calculation\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { filterUserBenefitOptions, isUserAdmin } from \"../../utilities/user\";\r\n\r\nconst SalaryMayExceed415ToolTip = () => (\r\n <>\r\n

\r\n The internal Revenue Code (IRC) provides an annual computation that sets a\r\n dollar limitation of benefits to be paid from a defined benefit plan like\r\n TERS. This compensation is subject to annual adjustments for cost of\r\n living increases.\r\n

\r\n

\r\n This means that any amount that exceeds the limits imposed by the IRC\r\n Section 415(m)(2) will be treated like private deferred compensation for\r\n income tax purposes and subject to withholding similar to wages, which are\r\n also subject to FICA and Medicare deductions for both employer and the\r\n employee (retiree). A separate deposit will be paid from the City of\r\n Tacoma Payroll Division for any excess payment over the benefit\r\n limitation, net of mandatory withholding.\r\n

\r\n

\r\n Once you retire, a reminder notice will be sent to you should the IRC\r\n Section 415 benefit limits apply.\r\n

\r\n \r\n);\r\n\r\nconst SalaryMayExceed401Tooltip = () => (\r\n <>\r\n

\r\n In order to be a qualified plan, TERS must satisfy section 401(a)(17) of\r\n the Internal Revenue Code (IRC), which limits the amount of compensation\r\n that may be taken into account. The regulations imposed under IRC Section\r\n 401(a)(17) apply the compensation limit to \"allocations\" in a defined\r\n contribution plan and \"benefit accruals\" in a defined benefit plan like\r\n TERS. This means that once a member reaches the yearly limits, no TERS\r\n contributions will be taken out from both the employee (member) and the\r\n employer. In effect, the average final compensation (AFC) that will be\r\n used to determine TERS benefit will probably be limited also. This amount\r\n is generally adjusted on a yearly basis factoring in the cost of living\r\n increases.\r\n

\r\n \r\n);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n gridLeft: {\r\n [theme.breakpoints.up(\"md\")]: {\r\n paddingRight: \"2rem\",\r\n },\r\n },\r\n gridRight: {\r\n [theme.breakpoints.up(\"md\")]: {\r\n paddingLeft: \"2rem\",\r\n },\r\n },\r\n}));\r\n\r\nexport const BenefitsDescription: React.FC<{\r\n option?: BenefitOption | NonTaxable;\r\n}> = ({ option }) => {\r\n if (!option?.description1 || !option?.description2 || !option?.description3) {\r\n return  ;\r\n }\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\nconst CalculationLabel: React.FC = (props) => (\r\n \r\n);\r\n\r\nconst Results: React.FC = observer(() => {\r\n const calculationContext = useContext(CalculationContext);\r\n const rootContext = useContext(RootContext);\r\n const styles = useStyles();\r\n const { currentCalculation } = calculationContext;\r\n const isAdmin = isUserAdmin(rootContext.user);\r\n\r\n if (!currentCalculation) {\r\n return null;\r\n }\r\n\r\n const benefitOption = currentCalculation.benefitOptions?.find(\r\n (bo) => bo.value === currentCalculation.benefitOption\r\n );\r\n\r\n return (\r\n \r\n {\" \"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {currentCalculation.annuitantType !== \"No Annuitant\" && (\r\n \r\n )}\r\n {(currentCalculation.benefitType === \"Death-Deferred\" ||\r\n currentCalculation.benefitType === \"Death-Immediate\") && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {isAdmin && (\r\n \r\n )}\r\n \r\n {currentCalculation.annuitantType !== \"No Annuitant\" && (\r\n \r\n )}\r\n {(currentCalculation.benefitType === \"Death-Deferred\" ||\r\n currentCalculation.benefitType === \"Death-Immediate\") && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {isAdmin && (\r\n \r\n )}\r\n \r\n {!!currentCalculation?.dateOfMembership?.isBefore(\"01/01/1983\") && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {currentCalculation.portability === \"Y\" && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n }\r\n />\r\n }\r\n />\r\n \r\n \r\n {currentCalculation.servicePurchaseSelected === \"Yes\" &&\r\n currentCalculation.results?.servicePurchaseAvailable === \"Yes\" &&\r\n !!currentCalculation.amountOfServiceToPurchase && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {currentCalculation.ssAdjustment === \"Yes\" && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {currentCalculation.results?.isEligibleForRetirement === \"Y\" ? (\r\n benefitOption ? (\r\n \r\n ) : (\r\n filterUserBenefitOptions(\r\n currentCalculation.benefitOptions,\r\n isAdmin\r\n )?.map((bo, index) => (\r\n \r\n ))\r\n )\r\n ) : (\r\n \"You are not eligible to retire under this scenario. If applicable, you can purchase up to 5 years of additional service under the ‘Benefit Elections’ screen. Please contact the Retirement Department if you have any questions.\"\r\n )}\r\n \r\n \r\n {currentCalculation.results?.isEligibleForRetirement === \"Y\" &&\r\n currentCalculation?.nonTaxables!.filter((nt) => nt.display).length >\r\n 0 && (\r\n \r\n \r\n \r\n {currentCalculation\r\n ?.nonTaxables!.filter((nt) => nt.display)\r\n ?.map((bo, index) => (\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n Application for Retirement must be made at least 30 days prior to\r\n Retirement. Retirement counseling takes approximately one hour for the\r\n options to be explained and the forms to be filled out. A Birth\r\n Certificate is needed for proof of age. If Option D or E is elected, a\r\n Marriage Certificate is required. Please contact us if you have worked\r\n under another Retirement System in Washington since you could have\r\n dual membership which may affect your benefits. If you have any\r\n questions or to make an appointment please call 253-502-8200 or\r\n 888-404-3787.\r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default Results;\r\n","import Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport MuiDialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport clsx from \"clsx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport moment, { Moment } from \"moment\";\r\nimport React, { FC, ReactNode, useContext } from \"react\";\r\n\r\nimport { employerLookUp } from \"../components/Calculation/Contributions\";\r\nimport { BenefitsDescription } from \"../components/Calculation/Results\";\r\nimport { Calculation, CalculationContext } from \"../state/Calculation\";\r\nimport { RootContext } from \"../state/root\";\r\nimport { Colors } from \"../utilities/colors\";\r\nimport { filterUserBenefitOptions, isUserAdmin } from \"../utilities/user\";\r\n\r\nimport Button from \"./Button\";\r\nimport CalculationHeader from \"./CalculationHeader\";\r\nimport { Tooltip } from \"./Tooltip\";\r\n\r\nconst useDialogTitleStyles = makeStyles((theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(2),\r\n },\r\n closeButton: {\r\n position: \"absolute\",\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n color: theme.palette.grey[500],\r\n },\r\n}));\r\n\r\nexport interface DialogTitleProps {\r\n id: string;\r\n title: string;\r\n onClose: () => void;\r\n}\r\n\r\nconst DialogTitle: FC = (props) => {\r\n const { onClose, title } = props;\r\n const classes = useDialogTitleStyles();\r\n return (\r\n \r\n \r\n {onClose ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\ninterface CalculationRowData {\r\n title: string;\r\n property?: string;\r\n height?: number;\r\n getValue?: (calculation: Calculation, isAdmin: boolean) => string | ReactNode;\r\n show?: (calculation: Calculation, isAdmin: boolean) => boolean;\r\n groupId?: string;\r\n groupFilter?: (calculation: Calculation) => boolean;\r\n decimalPlaces?: number;\r\n format?: \"number\" | \"dollar\" | \"percentage\";\r\n}\r\n\r\nconst formatNumber = (value: number | undefined, decimalPlaces: number) =>\r\n value?.toLocaleString(\"en-US\", {\r\n maximumFractionDigits: decimalPlaces,\r\n minimumFractionDigits: decimalPlaces,\r\n });\r\nconst hasBenefit = (c?: Calculation) =>\r\n c?.benefitType === \"Death-Deferred\" || c?.benefitType === \"Death-Immediate\";\r\nconst dateToString = (m?: Moment) =>\r\n m?.isSame(\"0001-01-01\") ? \"N/A\" : m?.format(\"L\");\r\nconst isYes = (input?: string) => input === \"Y\" || input === \"Yes\";\r\nconst toYesNo = (input?: string) =>\r\n input === \"Y\" || input === \"Yes\" ? \"Yes\" : \"No\";\r\nconst hasBeneficiary = (c?: Calculation) =>\r\n c?.benefitType === \"Death-Deferred\" || c?.benefitType === \"Death-Immediate\";\r\n\r\nconst BasicInformationData: CalculationRowData[] = [\r\n { title: \"Calculation description:\", property: \"description\" },\r\n { title: \"Benefit type:\", property: \"benefitType\" },\r\n { title: \"Participant information\" },\r\n { title: \"Employee number:\", property: \"employeeNumber\" },\r\n { title: \"First name:\", property: \"firstName\" },\r\n { title: \"Last name:\", property: \"lastName\" },\r\n { title: \"Date of birth:\", property: \"dateOfBirth\" },\r\n { title: \"Date of membership:\", property: \"dateOfMembership\" },\r\n { title: \"Last day of employment:\", property: \"lastDayOfEmployment\" },\r\n { title: \"Date of retirement:\", property: \"dateOfRetirement\" },\r\n {\r\n title: \"Age at retirement:\",\r\n property: \"results.ageOfRetirement\",\r\n decimalPlaces: 2,\r\n },\r\n {\r\n title: \"Death beneficiary information\",\r\n height: 4,\r\n groupId: \"death-ben\",\r\n groupFilter: hasBenefit,\r\n },\r\n {\r\n title: \"First name:\",\r\n groupId: \"death-ben\",\r\n getValue: (c) =>\r\n hasBenefit(c) ? c?.beneficiaryInformationFirstName : undefined,\r\n },\r\n {\r\n title: \"Last name:\",\r\n groupId: \"death-ben\",\r\n getValue: (c) =>\r\n hasBenefit(c) ? c?.beneficiaryInformationLastName : undefined,\r\n },\r\n {\r\n title: \"Date of birth:\",\r\n getValue: (c) =>\r\n hasBenefit(c) ? dateToString(c?.beneficiaryDateOfBirth) : undefined,\r\n groupId: \"death-ben\",\r\n },\r\n];\r\n\r\nconst ContributionData: CalculationRowData[] = [\r\n { title: \"Calculation description:\", property: \"description\" },\r\n { title: \"Employer:\", getValue: (c) => employerLookUp[c?.employer!] },\r\n { title: \"Employee contributions\" },\r\n {\r\n title: \"Benefit contributions as of last quarter:\",\r\n property: \"benefitContributionsLastQuarter\",\r\n format: \"dollar\",\r\n decimalPlaces: 2,\r\n },\r\n];\r\n\r\nconst ServiceAndSalaryData: CalculationRowData[] = [\r\n { title: \"Calculation description:\", property: \"description\" },\r\n { title: \"Service adjustment\" },\r\n {\r\n title: \"Before 8/1/1983:\",\r\n groupId: \"pre-83\",\r\n groupFilter: (c) => !!c?.dateOfMembership?.isBefore(\"01/01/1983\"),\r\n getValue: (c) =>\r\n !!c?.dateOfMembership?.isBefore(\"01/01/1983\") ? (\r\n <>\r\n Years: \r\n {formatNumber(c?.serviceAdjustmentPre83Years, 0)} \r\n Months: \r\n {formatNumber(c?.serviceAdjustmentPre83Months, 0)} \r\n Days: \r\n {formatNumber(c?.serviceAdjustmentPre83Days, 0)} \r\n Hours: \r\n {formatNumber(c?.serviceAdjustmentPre83Hours, 1)}\r\n \r\n ) : undefined,\r\n },\r\n {\r\n title: \"After 8/1/1983:\",\r\n getValue: (c) => (\r\n <>\r\n Years: \r\n {formatNumber(c?.serviceAdjustmentPost83Years, 0)} \r\n Months: \r\n {formatNumber(c?.serviceAdjustmentPost83Months, 0)} \r\n Days: \r\n {formatNumber(c?.serviceAdjustmentPost83Days, 0)} \r\n Hours: \r\n {formatNumber(c?.serviceAdjustmentPost83Hours, 1)}\r\n \r\n ),\r\n },\r\n { title: \"Portability\" },\r\n {\r\n title: \"Portability?:\",\r\n getValue: (c) => toYesNo(c?.portability),\r\n },\r\n {\r\n title: \"Portability system:\",\r\n getValue: (c) => (isYes(c?.portability) ? c?.portabilitySystem : undefined),\r\n groupId: \"portability\",\r\n groupFilter: (c) => isYes(c?.portability),\r\n },\r\n {\r\n title: \"Portability after 1/1/1997:\",\r\n getValue: (c) =>\r\n isYes(c?.portability)\r\n ? toYesNo(c?.portabilityOfServicePost97)\r\n : undefined,\r\n groupId: \"portability\",\r\n },\r\n {\r\n title: \"Portability monthly highest average salary:\",\r\n getValue: (c) => (isYes(c?.portability) ? c?.portabilityFae : undefined),\r\n height: 4,\r\n groupId: \"portability\",\r\n format: \"dollar\",\r\n decimalPlaces: 2,\r\n },\r\n {\r\n title: \"Portability service years:\",\r\n getValue: (c) =>\r\n isYes(c?.portability) ? c?.portabilityService : undefined,\r\n groupId: \"portability\",\r\n decimalPlaces: 5,\r\n },\r\n { title: \"Salary\" },\r\n {\r\n title: \"Current monthly salary:\",\r\n property: \"currentGrossPayPerPeriod\",\r\n format: \"dollar\",\r\n decimalPlaces: 2,\r\n },\r\n {\r\n title: \"Assumed annual raises:\",\r\n property: \"salaryInflation\",\r\n format: \"percentage\",\r\n },\r\n];\r\n\r\nconst BenefitElectionsData: CalculationRowData[] = [\r\n { title: \"Calculation description:\", property: \"description\" },\r\n {\r\n title: \"Annuitant information\",\r\n },\r\n { title: \"Annuitant type:\", property: \"annuitantType\" },\r\n {\r\n title: \"Annuitant date of birth:\",\r\n groupId: \"annuitant\",\r\n getValue: (c) =>\r\n c?.annuitantType !== \"No Annuitant\" ? c?.annuitantDateOfBirth : undefined,\r\n groupFilter: (c) => c.annuitantType !== \"No Annuitant\",\r\n },\r\n { title: \"Benefit form\" },\r\n {\r\n title: \"Benefit option:\",\r\n getValue: (c) =>\r\n c?.benefitOptions?.find((bo) => bo.value === c.benefitOption)?.name ??\r\n \"All Options\",\r\n height: 4,\r\n },\r\n {\r\n title: \"Social security adjustments\",\r\n groupId: \"social-security\",\r\n groupFilter: (c) => c?.ssAdjustment === \"Yes\",\r\n },\r\n {\r\n title: \"Social security benefit at age 62:\",\r\n groupId: \"social-security\",\r\n getValue: (c) => (c?.ssAdjustment === \"Yes\" ? c?.ssAtAge62 : undefined),\r\n height: 4,\r\n },\r\n { title: \"Service purchase\" },\r\n {\r\n title: \"Is service purchase available?:\",\r\n property: \"results.servicePurchaseAvailable\",\r\n height: 4,\r\n },\r\n {\r\n title: \"Years of service purchase needed to retire:\",\r\n height: 4,\r\n decimalPlaces: 5,\r\n getValue: (c) =>\r\n c?.results?.servicePurchaseAvailable === \"Yes\"\r\n ? c.results.yearsNeededToRetire\r\n : undefined,\r\n groupId: \"service-purchase\",\r\n groupFilter: (c) => c?.results?.servicePurchaseAvailable === \"Yes\",\r\n },\r\n {\r\n title: \"Maximum available years of service purchase:\",\r\n getValue: (c) =>\r\n c?.results?.servicePurchaseAvailable === \"Yes\"\r\n ? c.results.maxEligibleServicePurchase\r\n : undefined,\r\n height: 4,\r\n decimalPlaces: 5,\r\n groupId: \"service-purchase\",\r\n },\r\n {\r\n title: \"Are you purchasing additional service?:\",\r\n getValue: (c) =>\r\n c?.results?.servicePurchaseAvailable === \"Yes\"\r\n ? c.servicePurchaseSelected\r\n : undefined,\r\n height: 4,\r\n groupId: \"service-purchase\",\r\n },\r\n {\r\n title: \"Years of service to purchase:\",\r\n getValue: (c) =>\r\n c?.results?.servicePurchaseAvailable === \"Yes\"\r\n ? c.amountOfServiceToPurchase\r\n : undefined,\r\n decimalPlaces: 5,\r\n groupId: \"service-purchase\",\r\n },\r\n];\r\n\r\nconst ResultsData: CalculationRowData[] = [\r\n { title: \"Basic information\" },\r\n { title: \"Calculation description:\", property: \"description\" },\r\n { title: \"SAP number:\", property: \"employeeNumber\" },\r\n { title: \"Name:\", getValue: (c) => `${c?.firstName} ${c?.lastName}` },\r\n { title: \"Membership date:\", property: \"dateOfMembership\" },\r\n { title: \"Termination date:\", property: \"lastDayOfEmployment\" },\r\n { title: \"Retirement date:\", property: \"dateOfRetirement\" },\r\n { title: \"Member birth date:\", property: \"dateOfBirth\" },\r\n {\r\n title: \"Annuitant birth date:\",\r\n getValue: (c) =>\r\n c?.annuitantType !== \"No Annuitant\" ? c?.annuitantDateOfBirth : undefined,\r\n groupId: \"adob\",\r\n groupFilter: (c) => c?.annuitantType !== \"No Annuitant\",\r\n },\r\n {\r\n title: \"Death beneficiary birth date:\",\r\n getValue: (c) =>\r\n hasBeneficiary(c) ? dateToString(c?.beneficiaryDateOfBirth) : undefined,\r\n groupId: \"dbdob\",\r\n groupFilter: hasBeneficiary,\r\n },\r\n { title: \"Gender:\", property: \"gender\", show: (c, isAdmin) => isAdmin },\r\n {\r\n title: \"Member age:\",\r\n property: \"results.ageOfRetirement\",\r\n decimalPlaces: 2,\r\n },\r\n {\r\n title: \"Annuitant age:\",\r\n groupId: \"adob\",\r\n getValue: (c) =>\r\n c?.annuitantType !== \"No Annuitant\"\r\n ? c?.results?.annuitantAge\r\n : undefined,\r\n decimalPlaces: 2,\r\n },\r\n {\r\n title: \"Death beneficiary age:\",\r\n property: \"results.deathBeneficiaryAge\",\r\n groupId: \"dbdob\",\r\n getValue: (c) =>\r\n hasBeneficiary(c) ? c?.results?.deathBeneficiaryAge : undefined,\r\n decimalPlaces: 2,\r\n },\r\n { title: \"Contributions\" },\r\n {\r\n title: \"Total member contributions:\",\r\n property: \"results.totalMemberContributions\",\r\n format: \"dollar\",\r\n decimalPlaces: 2,\r\n },\r\n {\r\n title: \"Total benefit contributions:\",\r\n property: \"results.totalBenefitContributions\",\r\n format: \"dollar\",\r\n decimalPlaces: 2,\r\n },\r\n {\r\n title: \"Additional pre-83 contributions:\",\r\n format: \"dollar\",\r\n decimalPlaces: 2,\r\n getValue: (c) =>\r\n !!c?.dateOfMembership?.isBefore(\"01/01/1983\")\r\n ? c?.results?.pre83ExtraContributions\r\n : undefined,\r\n groupFilter: (c) => !!c?.dateOfMembership?.isBefore(\"01/01/1983\"),\r\n groupId: \"pre-83\",\r\n },\r\n {\r\n title: \"Additional post-83 contributions:\",\r\n property: \"results.post83ExtraContributions\",\r\n format: \"dollar\",\r\n decimalPlaces: 2,\r\n },\r\n {\r\n title: \"Non-taxable contributions:\",\r\n property: \"results.nonTaxableContributions\",\r\n format: \"dollar\",\r\n decimalPlaces: 2,\r\n },\r\n { title: \"Service and salary\" },\r\n {\r\n title: \"Average final salary:\",\r\n property: \"results.averageFinalSalary\",\r\n format: \"dollar\",\r\n decimalPlaces: 2,\r\n },\r\n { title: \"TERS service:\", property: \"results.tersService\" },\r\n {\r\n title: \"Portability\",\r\n groupId: \"portability\",\r\n groupFilter: (c) => c?.portability === \"Y\",\r\n },\r\n {\r\n title: \"Portability average salary:\",\r\n groupId: \"portability\",\r\n format: \"dollar\",\r\n decimalPlaces: 2,\r\n getValue: (c) => (c?.portability === \"Y\" ? c.portabilityFae : undefined),\r\n },\r\n {\r\n title: \"Portability service:\",\r\n groupId: \"portability\",\r\n decimalPlaces: 5,\r\n getValue: (c) =>\r\n c?.portability === \"Y\" ? c.portabilityService : undefined,\r\n },\r\n { title: \"IRS tests\" },\r\n {\r\n title: \"Benefit amount may exceed 415 limit:\",\r\n getValue: (c) => toYesNo(c?.results?.flag415Limit),\r\n },\r\n {\r\n title: \"Benefit amount may exceed 401(a)(17) limit:\",\r\n getValue: (c) => toYesNo(c?.results?.flag401Limit),\r\n height: 4,\r\n },\r\n {\r\n title: \"Service Purchase\",\r\n groupId: \"servicePurchase\",\r\n groupFilter: (c) => !!(c?.servicePurchaseSelected === \"Yes\"),\r\n },\r\n {\r\n title: \"Service purchase years:\",\r\n groupId: \"servicePurchase\",\r\n decimalPlaces: 5,\r\n getValue: (c) =>\r\n c?.servicePurchaseSelected === \"Yes\"\r\n ? c?.amountOfServiceToPurchase\r\n : undefined,\r\n },\r\n {\r\n title: \"Service purchase amount:\",\r\n groupId: \"servicePurchase\",\r\n decimalPlaces: 2,\r\n getValue: (c) =>\r\n c?.servicePurchaseSelected === \"Yes\"\r\n ? c?.results!.servicePurchaseAmount\r\n : undefined,\r\n },\r\n {\r\n title: \"Social security adjustments\",\r\n groupId: \"social-security\",\r\n groupFilter: (c) => c?.ssAdjustment === \"Yes\",\r\n },\r\n {\r\n title: \"Social security benefit at age 62:\",\r\n groupId: \"social-security\",\r\n getValue: (c) => (c?.ssAdjustment === \"Yes\" ? c?.ssAtAge62 : undefined),\r\n },\r\n { title: \"Benefits\" },\r\n {\r\n title: \"Benefits election:\",\r\n getValue: (c) =>\r\n c?.benefitOptions?.find((bo) => bo.value === c.benefitOption)?.name ??\r\n \"Show all options\",\r\n },\r\n {\r\n title: \"Option description:\",\r\n getValue: (c, u) => {\r\n const benefitOption = c?.benefitOptions?.find(\r\n (bo) => bo.value === c.benefitOption\r\n );\r\n const isEligible = c?.results?.isEligibleForRetirement === \"Y\";\r\n if (isEligible) {\r\n return benefitOption ? (\r\n \r\n ) : (\r\n filterUserBenefitOptions(c?.benefitOptions, u)?.map((bo, index) => (\r\n \r\n ))\r\n );\r\n }\r\n return \"You do not have enough service to retire. If available, you can purchase up to 5 years of additional service under the 'Benefit Elections' screen.\";\r\n },\r\n height: -1,\r\n },\r\n];\r\n\r\nconst useCalculationDialogStyles = makeStyles((theme) => ({\r\n itemBold: {\r\n fontWeight: 700,\r\n },\r\n itemLine: {\r\n borderTop: `3px solid ${Colors.Steel}`,\r\n },\r\n content: {\r\n width: \"1300px\",\r\n },\r\n paper: {\r\n padding: \".5rem\",\r\n boxShadow: \"none\",\r\n },\r\n estimatePaper: {\r\n borderRadius: \".2rem\",\r\n border: \"#dfdfe08f\",\r\n borderStyle: \"solid\",\r\n },\r\n}));\r\n\r\nconst Row: FC<{\r\n pos?: number;\r\n calculation?: Calculation;\r\n header: boolean;\r\n isAdmin: boolean;\r\n data: CalculationRowData[];\r\n}> = ({ calculation, data, header, pos, isAdmin }) => {\r\n const classes = useCalculationDialogStyles();\r\n const getProperty = (property: string) => {\r\n let obj = calculation as any;\r\n property.split(\".\").forEach((m) => (obj = obj?.[m]));\r\n return obj;\r\n };\r\n\r\n const getValue = (\r\n title: string,\r\n property?: string,\r\n getRowValue?: (\r\n calculation: Calculation,\r\n isAdmin: boolean\r\n ) => string | ReactNode,\r\n decimalPlaces?: number,\r\n format: \"number\" | \"dollar\" | \"percentage\" = \"number\"\r\n ) => {\r\n let value;\r\n if (!header && property) {\r\n value = getProperty(property);\r\n } else {\r\n value = getRowValue?.(calculation!, isAdmin);\r\n }\r\n\r\n if (moment.isMoment(value)) {\r\n value = dateToString(value);\r\n } else if (typeof value === \"number\" && decimalPlaces) {\r\n value = value.toLocaleString(\"en-US\", {\r\n maximumFractionDigits: decimalPlaces,\r\n minimumFractionDigits: decimalPlaces,\r\n });\r\n }\r\n\r\n if (value !== undefined) {\r\n if (format !== \"number\") {\r\n switch (format) {\r\n case \"dollar\":\r\n value = `$${value}`;\r\n break;\r\n case \"percentage\":\r\n value = `${value * 100}%`;\r\n break;\r\n }\r\n }\r\n } else if (getRowValue) {\r\n value = \"N/A\";\r\n }\r\n\r\n return header ? title : value;\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {header ?
: `Estimate ${pos}`}\r\n
\r\n
\r\n {data.map(\r\n (\r\n {\r\n title,\r\n property,\r\n height = 2.5,\r\n getValue: getRowValue,\r\n show,\r\n decimalPlaces,\r\n format,\r\n },\r\n index\r\n ) => {\r\n const value = getValue(\r\n title,\r\n property,\r\n getRowValue,\r\n decimalPlaces,\r\n format\r\n );\r\n const shouldShow = show?.(calculation!, isAdmin) ?? true;\r\n const heightStyle = height === -1 ? \"unset\" : `${height}rem`;\r\n\r\n if (!shouldShow) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n \r\n \r\n {value ??
}\r\n \r\n
\r\n );\r\n }\r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport interface CalculationDialogProps {\r\n page: \"BasicInformation\" | string;\r\n}\r\n\r\nconst CalculationDialog: FC = observer(({ page }) => {\r\n const [open, setOpen] = React.useState(false);\r\n const classes = useCalculationDialogStyles();\r\n const rootContext = useContext(RootContext);\r\n const calculationContext = useContext(CalculationContext);\r\n const isAdmin = isUserAdmin(rootContext.user);\r\n const calculations = calculationContext?.calculations\r\n ?.filter((c) => !c.isRepayment)\r\n ?.slice(0, 3);\r\n\r\n let data: CalculationRowData[];\r\n switch (page) {\r\n case \"BasicInformation\":\r\n data = BasicInformationData;\r\n break;\r\n case \"Contributions\":\r\n data = ContributionData;\r\n break;\r\n case \"ServiceAndSalary\":\r\n data = ServiceAndSalaryData;\r\n break;\r\n case \"BenefitElections\":\r\n data = BenefitElectionsData;\r\n break;\r\n case \"Results\":\r\n default:\r\n data = ResultsData;\r\n break;\r\n }\r\n\r\n const filters = data?.filter((d) => d.groupFilter);\r\n filters.forEach(({ groupFilter, groupId }) => {\r\n if (!groupFilter || !groupId) {\r\n return;\r\n }\r\n if (!calculations?.some(groupFilter)) {\r\n data = data.filter((d) => d.groupId !== groupId);\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n \r\n \r\n setOpen(false)}\r\n >\r\n setOpen(false)}\r\n title=\"Compare Estimates\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default CalculationDialog;\r\n","import { Grid } from \"@material-ui/core\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect } from \"react\";\r\n\r\nimport CalculationDate from \"../../common/CalculationDate\";\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationLabel from \"../../common/CalculationLabel\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport CalculationSelect, { MenuItem } from \"../../common/CalculationSelect\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport { Tooltip } from \"../../common/Tooltip\";\r\nimport { BenefitType, CalculationContext } from \"../../state/Calculation\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { isUserAdmin } from \"../../utilities/user\";\r\n\r\nimport { CalculationPageProps } from \"./CalculationPage\";\r\n\r\nconst ParticipantInformationToolTip = () => (\r\n <>\r\n To update your name, date of birth, or date of membership:\r\n
    \r\n
  • \r\n If you are currently employed, notify human resources of the correct\r\n information so that they can make corrections.\r\n
  • \r\n
  • \r\n If you are not currently employed, use the Contact Us page to let the\r\n Retirement Department know the correct information.\r\n
  • \r\n
  • \r\n If date of membership is incorrect use the Contact Us page to let the\r\n Retirement Department know the correct information.\r\n
  • \r\n
\r\n \r\n);\r\n\r\nconst DeathImmediateInformationToolTip = () => (\r\n <>\r\n Please enter the Death Beneficiary's Date of Birth. If the benefit is going\r\n to the Estate, please enter the member's Date of Birth.\r\n \r\n);\r\n\r\nconst BasicInformation: React.FC = observer(() => {\r\n const calculationContext = useContext(CalculationContext);\r\n const rootContext = useContext(RootContext);\r\n const { currentCalculation } = calculationContext;\r\n const isAdmin = isUserAdmin(rootContext.user);\r\n\r\n useEffect(() => {\r\n if (\r\n currentCalculation?.benefitType === \"Retirement\" ||\r\n currentCalculation?.benefitType === \"Disability\"\r\n ) {\r\n runInAction(() => {\r\n currentCalculation.beneficiaryInformationFirstName = \"\";\r\n currentCalculation.beneficiaryInformationLastName = \"\";\r\n currentCalculation.multipleBeneficiaries = \"No\";\r\n currentCalculation.beneficiaryDateOfBirth = undefined;\r\n });\r\n }\r\n });\r\n\r\n if (!currentCalculation) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n (currentCalculation.description = value as string)\r\n }\r\n />\r\n \r\n (currentCalculation.benefitType = value as BenefitType)\r\n }\r\n >\r\n Retirement\r\n Disability\r\n Death-Immediate\r\n \r\n Death-Survivor's Retirement\r\n \r\n \r\n\r\n {isAdmin && (\r\n (currentCalculation.isProjection = value)}\r\n >\r\n Yes\r\n No\r\n \r\n )}\r\n \r\n\r\n }\r\n />\r\n \r\n \r\n \r\n \r\n {isAdmin ? (\r\n (currentCalculation.dateOfBirth = date)}\r\n />\r\n ) : (\r\n \r\n )}\r\n {isAdmin ? (\r\n (currentCalculation.dateOfMembership = date)}\r\n />\r\n ) : (\r\n \r\n )}\r\n \r\n Last day of employment:\r\n \r\n \r\n ) : (\r\n \"Last day of employment:\"\r\n )\r\n }\r\n value={currentCalculation.lastDayOfEmployment}\r\n onChange={(date) => (currentCalculation.lastDayOfEmployment = date)}\r\n validation={(date) => {\r\n if (date < currentCalculation.dateOfMembership!) {\r\n return \"Last day of employment cannot be before Date of membership\";\r\n }\r\n }}\r\n />\r\n (currentCalculation.dateOfRetirement = date)}\r\n minDate={currentCalculation.lastDayOfEmployment}\r\n validation={(date) => {\r\n if (date < currentCalculation.lastDayOfEmployment!) {\r\n return \"Date of retirement cannot be before Last day of employment\";\r\n }\r\n if (date.date() !== 1) {\r\n return \"Date of retirement can only be 1st of a month\";\r\n }\r\n }}\r\n />\r\n \r\n {isAdmin && (\r\n (currentCalculation.gender = value)}\r\n >\r\n Male\r\n Female\r\n \r\n )}\r\n \r\n\r\n {(currentCalculation.benefitType === \"Death-Deferred\" ||\r\n currentCalculation.benefitType === \"Death-Immediate\") && (\r\n <>\r\n \r\n {isAdmin && (\r\n \r\n (currentCalculation.multipleBeneficiaries = value)\r\n }\r\n >\r\n Yes\r\n No\r\n \r\n )}\r\n \r\n (currentCalculation.beneficiaryInformationFirstName =\r\n value as string)\r\n }\r\n />\r\n \r\n (currentCalculation.beneficiaryInformationLastName =\r\n value as string)\r\n }\r\n />\r\n \r\n Date of birth:\r\n \r\n )\r\n }\r\n />\r\n \r\n }\r\n value={currentCalculation.beneficiaryDateOfBirth}\r\n onChange={(date) =>\r\n (currentCalculation.beneficiaryDateOfBirth = date)\r\n }\r\n />\r\n \r\n \r\n )}\r\n \r\n );\r\n});\r\n\r\nexport default BasicInformation;\r\n","import { action, makeObservable, observable } from \"mobx\";\r\nimport React from \"react\";\r\n\r\nclass GuardStore {\r\n @observable\r\n showGuardDialog?: Promise;\r\n\r\n @observable\r\n resolveGuard?: (value: boolean) => void;\r\n\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n @action\r\n showGuard(): Promise {\r\n return (this.showGuardDialog = new Promise((resolve) => {\r\n this.resolveGuard = resolve;\r\n }));\r\n }\r\n}\r\n\r\nconst GuardState = new GuardStore();\r\nconst GuardContext = React.createContext(GuardState);\r\n\r\nexport { GuardContext, GuardState };\r\n","import Grid from \"@material-ui/core/Grid\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport MuiLink from \"@material-ui/core/Link\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { makeStyles } from \"@material-ui/styles\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nimport CalculationDate from \"../../common/CalculationDate\";\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationLabel from \"../../common/CalculationLabel\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport CalculationSelect, { MenuItem } from \"../../common/CalculationSelect\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport { CalculationContext } from \"../../state/Calculation\";\r\nimport { GuardContext } from \"../../state/Guard\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { filterUserBenefitOptions, isUserAdmin } from \"../../utilities/user\";\r\n\r\nimport { CalculationPageProps } from \"./CalculationPage\";\r\n\r\nconst AnnuitantInformationToolTip = () => (\r\n <>\r\n

\r\n Annuitant: The beneficiary of an annuity, also known as the person you\r\n chose as your beneficiary.\r\n

\r\n \r\n);\r\n\r\nconst ServicePurchaseToolTip = () => (\r\n <>\r\n

\r\n Purchase of Time: Effective January 1, 2002, any Member who is vested and\r\n has five or more years of City Service as a Member may purchase up to five\r\n years of creditable service at the time of retirement, provided that no\r\n purchase made shall result in a member's total years of creditable service\r\n exceeding 30. Payment shall be in a lump sum on an after-tax basis, by a\r\n direct trustee-to-trustee transfer to the Retirement Fund from a plan\r\n qualified under Internal Revenue Code Section 457 or 403 (b), or effective\r\n September 1, 2002, by a direct rollover to the Retirement Fund from a\r\n individual retirement account or annuity qualified under Internal Revenue\r\n Code 408, or by irrevocably electing to apply the amount equal to 1.5\r\n times the Member's overtime contributions, plus interest that could be\r\n withdrawn.\r\n

\r\n

\r\n Purchase of creditable service is not treated as an employee contribution\r\n and does not affect the 150 percent refund of accumulated normal\r\n contributions and interest or the guarantee that a member's pension will\r\n be at least the actuarial equivalent of 200 percent of accumulated normal\r\n contributions.\r\n

\r\n \r\n);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n benefit: {\r\n marginLeft: \"1rem\",\r\n },\r\n link: {\r\n cursor: \"pointer\",\r\n },\r\n}));\r\n\r\nconst BenefitElections: React.FC = observer(() => {\r\n const calculationContext = useContext(CalculationContext);\r\n const rootContext = useContext(RootContext);\r\n const history = useHistory();\r\n const guard = useContext(GuardContext);\r\n const style = useStyles();\r\n\r\n const { currentCalculation } = calculationContext;\r\n const isAdmin = isUserAdmin(rootContext.user);\r\n\r\n useEffect(() => {\r\n if (\r\n currentCalculation?.benefitOptions &&\r\n !filterUserBenefitOptions(\r\n currentCalculation?.benefitOptions,\r\n isAdmin\r\n )?.find((option) => option.value === currentCalculation.benefitOption)\r\n ) {\r\n runInAction(() => {\r\n currentCalculation.benefitOption = \"All\";\r\n });\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n if (\r\n currentCalculation?.servicePurchaseSelected === \"No\" ||\r\n currentCalculation?.results?.servicePurchaseAvailable === \"No\"\r\n ) {\r\n runInAction(() => {\r\n currentCalculation.amountOfServiceToPurchase = 0;\r\n });\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n if (currentCalculation?.ssAdjustment === \"No\") {\r\n runInAction(() => {\r\n currentCalculation.ssAtAge62 = 0;\r\n });\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n if (currentCalculation?.annuitantType === \"No Annuitant\") {\r\n runInAction(() => {\r\n currentCalculation.annuitantDateOfBirth = undefined;\r\n });\r\n }\r\n });\r\n\r\n if (!currentCalculation) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n {currentCalculation.benefitType !== \"Death-Immediate\" && (\r\n <>\r\n }\r\n />\r\n \r\n (currentCalculation.annuitantType = value)}\r\n >\r\n Spouse\r\n Non-Spouse\r\n No Annuitant\r\n \r\n {currentCalculation.annuitantType !== \"No Annuitant\" && (\r\n \r\n (currentCalculation.annuitantDateOfBirth = date)\r\n }\r\n />\r\n )}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n (currentCalculation.benefitOption = value)}\r\n >\r\n \r\n Show all options\r\n \r\n {filterUserBenefitOptions(\r\n currentCalculation.benefitOptions,\r\n isAdmin\r\n )?.map((option) => (\r\n \r\n {option.name}\r\n \r\n ))}\r\n \r\n\r\n \r\n To see a description of these options, click on \r\n {\r\n if (!(await guard.showGuard())) {\r\n return;\r\n }\r\n history.push(\"/BenefitOptions\");\r\n }}\r\n underline=\"always\"\r\n >\r\n benefit options\r\n \r\n .\r\n \r\n\r\n {isAdmin && (\r\n <>\r\n (currentCalculation.ssAdjustment = value)}\r\n >\r\n Yes\r\n No\r\n \r\n {currentCalculation.ssAdjustment === \"Yes\" && (\r\n \r\n (currentCalculation.ssAtAge62 = value as number)\r\n }\r\n type=\"number\"\r\n format=\"dollar\"\r\n />\r\n )}\r\n \r\n )}\r\n \r\n\r\n }\r\n />\r\n \r\n \r\n {currentCalculation.results?.servicePurchaseAvailable === \"Yes\" && (\r\n <>\r\n \r\n \r\n \r\n (currentCalculation.servicePurchaseSelected = value)\r\n }\r\n >\r\n Yes\r\n No\r\n \r\n {currentCalculation.servicePurchaseSelected === \"Yes\" && (\r\n <>\r\n \r\n (currentCalculation.amountOfServiceToPurchase =\r\n value as number)\r\n }\r\n validation={(value: number | string) => {\r\n if (\r\n value >\r\n currentCalculation.results?.maxEligibleServicePurchase!\r\n ) {\r\n return \"Years of purchase cannot exceed maximum allowable service purchase\";\r\n }\r\n }}\r\n type=\"number\"\r\n maxLength={5}\r\n />\r\n {isAdmin && (\r\n \r\n (currentCalculation.taxTreatmentOfPayment = value)\r\n }\r\n >\r\n Pre-Tax\r\n Post-Tax\r\n \r\n )}\r\n {currentCalculation.isProjection === \"N\" &&\r\n currentCalculation.results\r\n .isEligibleForRetirementWithoutPurchase === \"N\" && (\r\n \r\n (currentCalculation.totalBenefitContributionsLastQuarter =\r\n value as number)\r\n }\r\n type=\"number\"\r\n format=\"dollar\"\r\n />\r\n )}\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n );\r\n});\r\n\r\nexport default BenefitElections;\r\n","import Grid from \"@material-ui/core/Grid\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport TextField, { TextFieldProps } from \"@material-ui/core/TextField\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport clsx from \"clsx\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect } from \"react\";\r\nimport NumberFormat from \"react-number-format\";\r\n\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport CalculationSelect, { MenuItem } from \"../../common/CalculationSelect\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport { CalculationContext } from \"../../state/Calculation\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { Colors } from \"../../utilities/colors\";\r\nimport { isUserAdmin } from \"../../utilities/user\";\r\n\r\nimport { CalculationPageProps } from \"./CalculationPage\";\r\n\r\ninterface NumberFormatCustomProps {\r\n inputRef: (instance: NumberFormat | null) => void;\r\n onChange: (event: { target: { value: number | undefined } }) => void;\r\n}\r\n\r\nconst NumberFormatCustom = (props: NumberFormatCustomProps) => {\r\n const { inputRef, onChange, ...other } = props;\r\n\r\n return (\r\n {\r\n onChange({\r\n target: {\r\n value: values.floatValue,\r\n },\r\n });\r\n }}\r\n thousandSeparator\r\n />\r\n );\r\n};\r\n\r\nconst NumberField = ({\r\n decimalScale,\r\n inputAdornmentLabel,\r\n max,\r\n ...props\r\n}: TextFieldProps & {\r\n decimalScale: number;\r\n inputAdornmentLabel?: string;\r\n max?: number;\r\n}) => {\r\n const isAllowed = ({ floatValue }: { floatValue: number }) =>\r\n floatValue === undefined || !max || Math.abs(floatValue) <= max;\r\n return (\r\n \r\n {inputAdornmentLabel}\r\n \r\n ),\r\n inputComponent: NumberFormatCustom as any,\r\n }}\r\n onBlur={() => {\r\n if (isNaN(props.value as number)) {\r\n props.onChange?.({ target: { value: 0 } } as any);\r\n }\r\n }}\r\n onKeyDown={(event) => {\r\n if ([\"+\", \"e\"].includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n }}\r\n {...props}\r\n />\r\n );\r\n};\r\nconst useSalaryStyles = makeStyles((theme) => ({\r\n input: {\r\n width: \"10rem\",\r\n borderRadius: \".5rem\",\r\n backgroundColor: Colors.White,\r\n \"& input\": {\r\n background: Colors.White,\r\n borderRadius: \"inherit\",\r\n },\r\n },\r\n label: {\r\n minWidth: \"18rem\",\r\n display: \"inline-block\",\r\n },\r\n labelCommon: {\r\n marginLeft: \"16px\",\r\n marginRight: \"-11px\",\r\n },\r\n center: {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n label: {\r\n minWidth: \"18rem\",\r\n display: \"inline-block\",\r\n },\r\n labelRightBorder: {\r\n marginLeft: \"5px\",\r\n marginRight: \"5px\",\r\n },\r\n labelCommon: {\r\n marginLeft: \"16px\",\r\n marginRight: \"-11px\",\r\n },\r\n smallNumber: {\r\n width: \"5rem\",\r\n },\r\n labelPlacementStart: {\r\n justifyContent: \"space-between\",\r\n },\r\n center: {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n },\r\n}));\r\n\r\ninterface SalaryRateProps {\r\n showHeaders?: boolean;\r\n rate: number;\r\n hourlyRate?: number;\r\n hourlyRateChanged: (rate: number) => void;\r\n longevity?: number;\r\n longevityChanged: (rate: number) => void;\r\n months?: number;\r\n monthsChanged: (rate: number) => void;\r\n}\r\n\r\nconst SalaryRate: React.FC = ({\r\n showHeaders = false,\r\n rate,\r\n hourlyRate,\r\n hourlyRateChanged,\r\n longevity,\r\n longevityChanged,\r\n months,\r\n monthsChanged,\r\n}) => {\r\n const styles = useSalaryStyles();\r\n return (\r\n \r\n
\r\n \r\n Rate {rate}:\r\n \r\n {\r\n runInAction(() => hourlyRateChanged(+e.target.value));\r\n }}\r\n />\r\n  \r\n {\r\n runInAction(() => longevityChanged(+e.target.value));\r\n }}\r\n />\r\n  \r\n {\r\n runInAction(() => monthsChanged(+e.target.value));\r\n }}\r\n />\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst SalaryProjectionToolTip = () => (\r\n <>\r\n

\r\n Benefit estimate will be based on a projection of the current monthly\r\n salary shown, unless the final average salary is entered. The actual\r\n retirement benefit calculated by the Retirement Service Staff will be\r\n based on the highest 24 consecutive monthly salary.\r\n

\r\n \r\n);\r\n\r\nconst ServiceAdjustmentToolTip = () => (\r\n <>\r\n

\r\n Service Adjustment: A member shall receive service credit for hours of\r\n City Service for which the member is paid under the provisions of Section\r\n 1.30.130, but in all cases excluding overtime hours.\r\n

\r\n

\r\n A full year of membership service will be credited for each full calendar\r\n year from date of membership that a member is employed as a full time\r\n employee, not counting periods in excess of 15 consecutive calendar days\r\n during which the member is in a nonpaid status. A full year of membership\r\n service will be credited to each other member for each 2,080 hours of City\r\n Service for which the member is paid under the provisions of Section\r\n 1.30.130 (excluding overtime hours). A member forced to take dock time due\r\n to emergency overtime work shall not lose credit.\r\n

\r\n

\r\n A partial year of membership service shall be credited as earned. (Ord.\r\n 26694 § 1; passed Sept. 12, 2000: Ord. 26118 § 1; passed Aug. 19, 1997:\r\n Ord. 25955 § 13; passed Sept. 24, 1996: Ord. 18805 § 1; passed Apr. 22,\r\n 1969: Ord. 17014 § 1; passed Mar. 20, 1962)\r\n

\r\n \r\n);\r\n\r\nconst PortabilityToolTip = () => (\r\n <>\r\n

\r\n Tacoma Municipal Code Section 1.30.890 - Agreements for Portability of\r\n Retirement Benefits with the State of Washington\r\n

\r\n

\r\n Portability: RCW Chapter 41.54 - Portability of Public Retirement Systems\r\n was passed in 1987 and subsequent amendments provided for portability of\r\n service under chapters 41.26, 41.32, 41.40, 41.44, 41.35 (effective\r\n September 1, 2000), and 43.43 of the Revised Code of Washington (RCW).\r\n

\r\n

\r\n In summary, RCW Chapter 41.54 provides for portability of public pension\r\n benefits between the Teachers Retirement System (TRS), Public Employees'\r\n Retirement System (PERS), the Statewide City Employees' Retirement System\r\n (SCERS), Washington State Patrol Retirement System (WSPRS), Law\r\n Enforcement Officers /Fire Fighters Retirement System - Plan II (LEOFF\r\n II), Washington School Employees' Retirement System (SERS) (effective\r\n September 1, 2000) and the three \"first class\" cities (Seattle, Spokane,\r\n and Tacoma).\r\n

\r\n

\r\n \r\n The term portability refers to retirement service that can be utilized\r\n in conjunction with another retirement system.\r\n \r\n

\r\n

\r\n Upon retirement, each retirement system will issue a check for the service\r\n earned at that system.\r\n

\r\n \r\n);\r\n\r\nconst ServiceAndSalary: React.FC = observer(() => {\r\n const styles = useStyles();\r\n const calculationContext = useContext(CalculationContext);\r\n const rootContext = useContext(RootContext);\r\n const { currentCalculation } = calculationContext;\r\n const isAdmin = isUserAdmin(rootContext.user);\r\n\r\n useEffect(() => {\r\n if (currentCalculation?.portability === \"N\") {\r\n runInAction(() => {\r\n currentCalculation.portabilityFae = 0;\r\n currentCalculation.portabilityService = 0;\r\n });\r\n }\r\n if (currentCalculation?.dateOfMembership?.isAfter(\"01/01/1983\")) {\r\n runInAction(() => {\r\n currentCalculation.serviceAdjustmentPre83Years = 0;\r\n currentCalculation.serviceAdjustmentPre83Months = 0;\r\n currentCalculation.serviceAdjustmentPre83Days = 0;\r\n currentCalculation.serviceAdjustmentPre83Hours = 0;\r\n });\r\n }\r\n });\r\n\r\n if (!currentCalculation) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n Enter the total amount of time between your date of membership and\r\n last day of employment in which you did not work full-time.\r\n \r\n \r\n {currentCalculation?.dateOfMembership?.isBefore(\"01/01/1983\") && (\r\n \r\n
\r\n \r\n Pre 8/1/1983:\r\n \r\n \r\n Years\r\n \r\n \r\n (currentCalculation.serviceAdjustmentPre83Years =\r\n +e.target.value)\r\n }\r\n />\r\n \r\n Months\r\n \r\n \r\n (currentCalculation.serviceAdjustmentPre83Months =\r\n +e.target.value)\r\n }\r\n />\r\n \r\n Days\r\n \r\n \r\n (currentCalculation.serviceAdjustmentPre83Days =\r\n +e.target.value)\r\n }\r\n />\r\n \r\n Hours\r\n \r\n \r\n (currentCalculation.serviceAdjustmentPre83Hours =\r\n +e.target.value)\r\n }\r\n />\r\n
\r\n
\r\n )}\r\n\r\n \r\n
\r\n \r\n After 8/1/1983:\r\n \r\n \r\n Years\r\n \r\n \r\n (currentCalculation.serviceAdjustmentPost83Years =\r\n +e.target.value)\r\n }\r\n />\r\n \r\n Months\r\n \r\n \r\n (currentCalculation.serviceAdjustmentPost83Months =\r\n +e.target.value)\r\n }\r\n />\r\n \r\n Days\r\n \r\n \r\n (currentCalculation.serviceAdjustmentPost83Days =\r\n +e.target.value)\r\n }\r\n />\r\n \r\n Hours\r\n \r\n \r\n (currentCalculation.serviceAdjustmentPost83Hours =\r\n +e.target.value)\r\n }\r\n />\r\n
\r\n
\r\n
\r\n
\r\n\r\n }\r\n />\r\n \r\n (currentCalculation.portability = value)}\r\n >\r\n Yes\r\n No\r\n \r\n\r\n {currentCalculation.portability === \"Y\" && (\r\n <>\r\n \r\n (currentCalculation.portabilitySystem = value)\r\n }\r\n >\r\n TRS\r\n PERS\r\n SCERS\r\n WSPRS\r\n LEOFF II\r\n SERS\r\n SEATTLE\r\n SPOKANE\r\n Multiple Systems\r\n \r\n \r\n (currentCalculation.portabilityOfServicePost97 = value)\r\n }\r\n >\r\n Yes\r\n No\r\n \r\n \r\n (currentCalculation.portabilityFae = value as number)\r\n }\r\n type=\"number\"\r\n />\r\n \r\n (currentCalculation.portabilityService = value as number)\r\n }\r\n type=\"number\"\r\n maxLength={5}\r\n />\r\n \r\n )}\r\n \r\n\r\n \r\n {currentCalculation.isProjection === \"Y\" && (\r\n <>\r\n \r\n \r\n \r\n (currentCalculation.currentGrossPayPerPeriod = value as number)\r\n }\r\n type=\"number\"\r\n />\r\n \r\n *If you plan to retire in the next 24 months or you are not\r\n presently employed by the City of Tacoma, enter your final average\r\n earnings instead of you current monthly salary to obtain a better\r\n estimate of your benefit.\r\n \r\n (currentCalculation.salaryInflation = value)}\r\n >\r\n 0%\r\n 1%\r\n 2%\r\n 3%\r\n 4%\r\n 5%\r\n \r\n \r\n \r\n )}\r\n <>\r\n {isAdmin && currentCalculation.isProjection === \"Y\" && (\r\n }\r\n />\r\n )}\r\n \r\n {isAdmin && currentCalculation.isProjection === \"Y\" && (\r\n (currentCalculation.finalSalary = value)}\r\n >\r\n Yes\r\n No\r\n \r\n )}\r\n {(currentCalculation.finalSalary === \"Y\" ||\r\n currentCalculation.isProjection === \"N\") && (\r\n <>\r\n \r\n Enter your highest TERS salary earned over 24 consecutive\r\n months, broken down into each hourly rate, longevity, and months\r\n at that rate.\r\n \r\n \r\n \r\n (currentCalculation.monthlyRate1 = rate)\r\n }\r\n longevity={currentCalculation.longevity1}\r\n longevityChanged={(longevity) =>\r\n (currentCalculation.longevity1 = longevity)\r\n }\r\n months={currentCalculation.months1}\r\n monthsChanged={(months) =>\r\n (currentCalculation.months1 = months)\r\n }\r\n />\r\n \r\n (currentCalculation.monthlyRate2 = rate)\r\n }\r\n longevity={currentCalculation.longevity2}\r\n longevityChanged={(longevity) =>\r\n (currentCalculation.longevity2 = longevity)\r\n }\r\n months={currentCalculation.months2}\r\n monthsChanged={(months) =>\r\n (currentCalculation.months2 = months)\r\n }\r\n />\r\n \r\n (currentCalculation.monthlyRate3 = rate)\r\n }\r\n longevity={currentCalculation.longevity3}\r\n longevityChanged={(longevity) =>\r\n (currentCalculation.longevity3 = longevity)\r\n }\r\n months={currentCalculation.months3}\r\n monthsChanged={(months) =>\r\n (currentCalculation.months3 = months)\r\n }\r\n />\r\n \r\n (currentCalculation.monthlyRate4 = rate)\r\n }\r\n longevity={currentCalculation.longevity4}\r\n longevityChanged={(longevity) =>\r\n (currentCalculation.longevity4 = longevity)\r\n }\r\n months={currentCalculation.months4}\r\n monthsChanged={(months) =>\r\n (currentCalculation.months4 = months)\r\n }\r\n />\r\n \r\n (currentCalculation.monthlyRate5 = rate)\r\n }\r\n longevity={currentCalculation.longevity5}\r\n longevityChanged={(longevity) =>\r\n (currentCalculation.longevity5 = longevity)\r\n }\r\n months={currentCalculation.months5}\r\n monthsChanged={(months) =>\r\n (currentCalculation.months5 = months)\r\n }\r\n />\r\n \r\n (currentCalculation.monthlyRate6 = rate)\r\n }\r\n longevity={currentCalculation.longevity6}\r\n longevityChanged={(longevity) =>\r\n (currentCalculation.longevity6 = longevity)\r\n }\r\n months={currentCalculation.months6}\r\n monthsChanged={(months) =>\r\n (currentCalculation.months6 = months)\r\n }\r\n />\r\n \r\n (currentCalculation.monthlyRate7 = rate)\r\n }\r\n longevity={currentCalculation.longevity7}\r\n longevityChanged={(longevity) =>\r\n (currentCalculation.longevity7 = longevity)\r\n }\r\n months={currentCalculation.months7}\r\n monthsChanged={(months) =>\r\n (currentCalculation.months7 = months)\r\n }\r\n />\r\n \r\n (currentCalculation.monthlyRate8 = rate)\r\n }\r\n longevity={currentCalculation.longevity8}\r\n longevityChanged={(longevity) =>\r\n (currentCalculation.longevity8 = longevity)\r\n }\r\n months={currentCalculation.months8}\r\n monthsChanged={(months) =>\r\n (currentCalculation.months8 = months)\r\n }\r\n />\r\n \r\n \r\n \r\n \r\n (currentCalculation.code9Time = value as number)\r\n }\r\n type=\"number\"\r\n format=\"dollar\"\r\n />\r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default ServiceAndSalary;\r\n","import Grid from \"@material-ui/core/Grid\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport Tabs from \"@material-ui/core/Tabs\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\nimport clsx from \"clsx\";\r\nimport { debounce } from \"debounce\";\r\nimport { autorun, runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect } from \"react\";\r\nimport { useParams } from \"react-router\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport CalculationDialog from \"../../common/CalculationDialog\";\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport { CalculationContext } from \"../../state/Calculation\";\r\nimport { CalculationErrorContext } from \"../../state/CalculationErrors\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { isUserAdmin, isUserFullAdmin } from \"../../utilities/user\";\r\n\r\nimport BasicInformation from \"./BasicInformation\";\r\nimport BenefitElections from \"./BenefitElections\";\r\nimport Contributions from \"./Contributions\";\r\nimport Results from \"./Results\";\r\nimport ServiceAndSalary from \"./ServiceAndSalary\";\r\n\r\nconst pageIdToTab = (tabId: number) => {\r\n switch (tabId) {\r\n case 1:\r\n return \"BasicInformation\";\r\n case 2:\r\n return \"Contributions\";\r\n case 3:\r\n return \"ServiceAndSalary\";\r\n case 4:\r\n return \"BenefitElections\";\r\n case 5:\r\n return \"Results\";\r\n default:\r\n return \"BasicInformation\";\r\n }\r\n};\r\n\r\nconst tabToPageId = (tabId: string) => {\r\n switch (tabId) {\r\n case \"BasicInformation\":\r\n return 1;\r\n case \"Contributions\":\r\n return 2;\r\n case \"ServiceAndSalary\":\r\n return 3;\r\n case \"BenefitElections\":\r\n return 4;\r\n case \"Results\":\r\n return 5;\r\n default:\r\n return 1;\r\n }\r\n};\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n buttons: {\r\n marginTop: \"1rem\",\r\n },\r\n buttonRight: {\r\n float: \"right\",\r\n marginRight: 0,\r\n },\r\n}));\r\n\r\nconst Calculation: React.FC = observer(() => {\r\n const styles = useStyles();\r\n const history = useHistory();\r\n const { tabId } = useParams<{ tabId: string }>();\r\n const { user } = useContext(RootContext);\r\n const calculationContext = useContext(CalculationContext);\r\n const calculationErrorContext = useContext(CalculationErrorContext);\r\n\r\n const { currentCalculation } = calculationContext;\r\n const tab = tabId ?? \"BasicInformation\";\r\n const currentPageId = tabToPageId(tab);\r\n const calculationPageId = currentCalculation?.pageId ?? 1;\r\n const isAdmin = isUserAdmin(user);\r\n\r\n const changeTab = (tabId: string) => {\r\n runInAction(() => {\r\n if (calculationErrorContext.hasAnyErrors) {\r\n calculationErrorContext.validateErrors = true;\r\n return;\r\n }\r\n\r\n calculationErrorContext.validateErrors = false;\r\n if (calculationPageId >= tabToPageId(tabId)) {\r\n history.push(`/Calculation/${tabId}`);\r\n }\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n runInAction(() => {\r\n calculationErrorContext.validateErrors = false;\r\n });\r\n }, [calculationErrorContext]);\r\n\r\n useEffect(() => {\r\n if (!currentCalculation) {\r\n // tslint:disable-next-line: no-floating-promises\r\n calculationContext.load();\r\n }\r\n }, [currentCalculation, calculationContext]);\r\n\r\n useEffect(() => {\r\n if (currentPageId > calculationPageId) {\r\n changeTab(pageIdToTab(calculationPageId));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [calculationPageId, currentPageId]);\r\n\r\n // Automatically apply updates\r\n useEffect(() => {\r\n const updateCalculations = debounce(() => {\r\n if (!calculationErrorContext.hasAnyErrors) {\r\n currentCalculation?.updateCalculation();\r\n }\r\n updateCalculations.clear();\r\n }, 2500);\r\n\r\n const dispose = autorun(() => {\r\n if (\r\n currentCalculation?.lastState !== currentCalculation?.getState() &&\r\n !calculationErrorContext.hasAnyErrors\r\n ) {\r\n updateCalculations();\r\n }\r\n });\r\n\r\n return () => {\r\n dispose();\r\n };\r\n }, [currentCalculation, calculationErrorContext]);\r\n\r\n if (!currentCalculation) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n {tab !== \"Export\" && (\r\n <>\r\n \r\n \r\n \r\n \r\n
\r\n {isAdmin && (\r\n <>\r\n {currentPageId === 5 && (\r\n \r\n window.open(\r\n `/BackupCalculations/${currentCalculation.uniqueId}`,\r\n \"_blank\"\r\n )\r\n }\r\n >\r\n Backup Calculations\r\n \r\n )}\r\n {isUserFullAdmin(user) && (\r\n \r\n window.open(\r\n `api/calculation/SaveSpreadsheet/${currentCalculation.uniqueId}`,\r\n \"_blank\"\r\n )\r\n }\r\n color=\"green\"\r\n >\r\n Save spreadsheet\r\n \r\n )}\r\n \r\n )}\r\n \r\n
\r\n \r\n changeTab(value)}\r\n className=\"no-print\"\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {tab === \"BasicInformation\" && }\r\n {tab === \"Contributions\" && }\r\n {tab === \"ServiceAndSalary\" && }\r\n {tab === \"BenefitElections\" && }\r\n {tab === \"Results\" && }\r\n\r\n {calculationErrorContext.validateErrors &&\r\n calculationErrorContext.hasAnyErrors && (\r\n \r\n {calculationErrorContext.allErrorString}\r\n \r\n )}\r\n\r\n
\r\n {currentPageId < 5 ? (\r\n {\r\n runInAction(() => {\r\n if (calculationErrorContext.hasAnyErrors) {\r\n calculationErrorContext.validateErrors = true;\r\n return;\r\n }\r\n\r\n calculationErrorContext.validateErrors = false;\r\n currentCalculation.pageId = Math.max(\r\n currentPageId + 1,\r\n currentCalculation.pageId!\r\n );\r\n history.push(`/Calculation/${pageIdToTab(currentPageId + 1)}`);\r\n });\r\n }}\r\n >\r\n Next\r\n \r\n ) : (\r\n <>\r\n window.print()}\r\n >\r\n Print\r\n \r\n \r\n )}\r\n currentCalculation.saveCalculation()}\r\n >\r\n Save\r\n \r\n {\r\n changeTab(pageIdToTab(currentPageId - 1));\r\n }}\r\n >\r\n Back\r\n \r\n
\r\n \r\n );\r\n});\r\n\r\nexport default Calculation;\r\n","import Calculation from \"./Calculation\";\r\nexport default Calculation;\r\n","import Grid from \"@material-ui/core/Grid\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport clsx from \"clsx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { FC, useEffect, useState } from \"react\";\r\nimport { useContext } from \"react\";\r\nimport { useParams } from \"react-router\";\r\n\r\nimport { CalculationContext, ExportResults } from \"../../state/Calculation\";\r\nimport { Colors } from \"../../utilities/colors\";\r\n\r\nimport { CalculationPageProps } from \"./CalculationPage\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n bold: {\r\n fontWeight: \"bold\",\r\n },\r\n parent: {\r\n padding: \"2rem\",\r\n \"@media print\": {\r\n padding: \"1rem\",\r\n margin: \"0 !important\",\r\n zoom: 0.75,\r\n },\r\n },\r\n container: {\r\n \"@media print\": {\r\n padding: \"0 !important\",\r\n margin: \"0 !important\",\r\n },\r\n },\r\n blue: {\r\n backgroundColor: Colors.MillimanBlue,\r\n color: Colors.White,\r\n },\r\n underline: {\r\n borderBottom: \"2px solid black\",\r\n },\r\n grey: {\r\n backgroundColor: Colors.CalculationsBackground,\r\n fontWeight: \"bold\",\r\n },\r\n}));\r\n\r\nconst toRows = (count: number, start: number, headers: number[]) =>\r\n Array.from({ length: count }, (_, i) => i + start).map((i) => [\r\n i,\r\n headers.includes(i),\r\n ]);\r\n\r\nconst Table: FC<{ children: JSX.Element[] | JSX.Element }> = ({ children }) => (\r\n \r\n {children}\r\n
\r\n);\r\n\r\nconst TD: FC<{\r\n children: JSX.Element[] | JSX.Element | string;\r\n headers?: number[];\r\n index: number;\r\n underlines?: number[];\r\n}> = ({ children, headers, index, underlines }) => {\r\n const styles = useStyles();\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst Export: React.FC = observer(() => {\r\n const calculationContext = useContext(CalculationContext);\r\n const { calculationId } = useParams<{ calculationId: string }>();\r\n const [er, setExportResults] = useState(undefined);\r\n const styles = useStyles();\r\n const c = calculationContext?.calculations?.find(\r\n (c) => c.uniqueId === calculationId\r\n );\r\n\r\n useEffect(() => {\r\n if (!calculationContext.calculations) {\r\n // tslint:disable-next-line: no-floating-promises\r\n calculationContext.load(undefined, calculationId);\r\n }\r\n }, [calculationContext, calculationId]);\r\n\r\n useEffect(() => {\r\n c?.export().then(setExportResults);\r\n }, [c]);\r\n\r\n if (!c || !er) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Name{er[\"$C$4\"]}
SAP Number{er[\"$C$5\"]}
Filename{c.calculationName}
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Age Calculations
StartEndAA-QtrsAA-MnthsAttained Age
Participant{er[\"$G$5\"]}{er[\"$H$5\"]}{er[\"$J$5\"]}{er[\"$K$5\"]}{er[\"$L$5\"]}
Death Beneficiary{er[\"$G$6\"]}{er[\"$H$6\"]}{er[\"$J$6\"]}{er[\"$K$6\"]}{er[\"$L$6\"]}
Annuitant{er[\"$G$7\"]}{er[\"$H$7\"]}{er[\"$J$7\"]}{er[\"$K$7\"]}{er[\"$L$7\"]}
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {[11, 12, 13].map((index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {[16, 17, 18].map((index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {[21].map((index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n <>\r\n {[23, 24, 25].map((index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Service Calculations
StartDaysDaysEndYearsMonthsDaysHoursYear Frac
{er[`$B$${index}`]}{er[`$C$${index}`]}{er[`$D$${index}`]}{er[`$E$${index}`]}\r\n {er[`$F$${index}`]}\r\n \r\n {er[`$G$${index}`]}\r\n \r\n {er[`$H$${index}`]}\r\n \r\n {er[`$I$${index}`]}\r\n \r\n {er[`$J$${index}`]}\r\n \r\n {er[`$K$${index}`]}\r\n
 
StartBOMBOMEndYearsMonthsDaysHoursYear Frac
{er[`$B$${index}`]}{er[`$C$${index}`]}{er[`$D$${index}`]}{er[`$E$${index}`]}\r\n {er[`$F$${index}`]}\r\n \r\n {er[`$G$${index}`]}\r\n \r\n {er[`$H$${index}`]}\r\n \r\n {er[`$I$${index}`]}\r\n \r\n {er[`$J$${index}`]}\r\n \r\n {er[`$K$${index}`]}\r\n
 
StartBOMBOMEndYearsMonthsDaysYear Frac
{er[`$B$${index}`]}{er[`$C$${index}`]}{er[`$D$${index}`]}{er[`$E$${index}`]}{er[`$F$${index}`]}{er[`$G$${index}`]}{er[`$H$${index}`]}{er[`$I$${index}`]}{er[`$J$${index}`]}{er[`$K$${index}`]}
 
{er[`$B$${index}`]}{er[`$C$${index}`]}{er[`$D$${index}`]}{er[`$E$${index}`]}{er[`$F$${index}`]}{er[`$G$${index}`]}{er[`$J$${index}`]}{er[`$K$${index}`]}
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {Array.from({ length: 19 }, (_, i) => i + 29).map((index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Salary Calculations
RateLongHourlyMonthly#MonthsAmount
{er[`$B$${index}`]}{er[`$C$${index}`]}{er[`$D$${index}`]}{er[`$E$${index}`]}{er[`$F$${index}`]}{er[`$G$${index}`]}
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {Array.from({ length: 26 }, (_, i) => i + 28).map((index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Contribution Calculations
\r\n {er[`$I$${index}`]}\r\n \r\n {er[`$L$${index}`]}\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {Array.from({ length: 22 }, (_, i) => i + 49).map((index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Benefit Factors
{er[`$B$${index}`]}{er[`$C$${index}`]}{er[`$D$${index}`]}{er[`$E$${index}`]}{er[`$F$${index}`]}{er[`$G$${index}`]}
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {[57, 58, 59, 60, 61].map((index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
2xEECI Benefit
{er[`$I$${index}`]}{er[`$L$${index}`]}
\r\n\r\n \r\n \r\n \r\n \r\n <>\r\n {[65, 66, 67, 68, 69].map((index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Service Retirement Benefit
{er[`$I$${index}`]}{er[`$L$${index}`]}
\r\n
\r\n\r\n {/** Portability Retirement Benefit */}\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {toRows(12, 72, [72]).map(([index, isHeader]) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
{er[`$B$71`]}
{er[`$B$${index}`]}{er[`$C$${index}`]}{er[`$D$${index}`]}{er[`$E$${index}`]}
\r\n
\r\n\r\n \r\n {/** Disability Retirement Benefit */}\r\n \r\n \r\n \r\n \r\n <>\r\n {[72, 73, 74, 75, 76, 77].map((index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
{er[`$G$71`]}
{er[`$G$${index}`]}{er[`$K$${index}`]}
\r\n {/** Service Purchase Tests */}\r\n \r\n \r\n \r\n \r\n <>\r\n {[80, 81].map((index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
{er[`$G$79`]}
{er[`$G$${index}`]}{er[`$K$${index}`]}
\r\n
\r\n\r\n {/** Service Purchase Retirement Benefit */}\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {Array.from({ length: 28 }, (_, i) => i + 86).map((index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
{er[`$B$85`]}
{er[`$B$${index}`]}{er[`$C$${index}`]}{er[`$D$${index}`]}{er[`$E$${index}`]}
\r\n
\r\n\r\n \r\n {/** Unmodified Benefits & 415 Limits */}\r\n \r\n \r\n \r\n \r\n <>\r\n {toRows(27, 86, [87, 91, 98, 107]).map(([index, isHeader]) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
{er[`$G$85`]}
{er[`$G$${index}`]}{er[`$J$${index}`]}
\r\n
\r\n\r\n {/** Option Factors */}\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {Array.from({ length: 21 }, (_, i) => i + 116).map((index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
{er[`$B$115`]}
{er[`$B$${index}`]}{er[`$C$${index}`]}{er[`$D$${index}`]}{er[`$F$${index}`]}{er[`$H$${index}`]}{er[`$J$${index}`]}{er[`$L$${index}`]}
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {[139, 140, 141, 142].map((index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
For Internal Use Only
{er[`$B$${index}`]}{er[`$D$${index}`]}
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {[139, 140].map((index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Portability Change
{er[`$F$${index}`]}{er[`$J$${index}`]}
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {[143, 144, 145].map((index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Modified Retirement Benefits
{er[`$G$${index}`]}{er[`$K$${index}`]}
\r\n
\r\n \r\n );\r\n});\r\n\r\nexport { Export };\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { DataGrid, GridColumns, GridSortModel } from \"@material-ui/data-grid\";\r\nimport makeStyles from \"@material-ui/styles/makeStyles\";\r\nimport debounce from \"debounce\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { FC, useContext, useEffect, useState } from \"react\";\r\nimport { Link as RouterLink, useHistory } from \"react-router-dom\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport Dialog from \"../../common/Dialog\";\r\nimport {\r\n Admin,\r\n AdminContext,\r\n CalculationListItem,\r\n PaginatedCalculationListItem,\r\n} from \"../../state/Admin\";\r\nimport { CalculationState } from \"../../state/Calculation\";\r\n\r\ninterface ConfirmationDeleteProps {\r\n userId: string;\r\n calculationId: string;\r\n calculationName: string;\r\n}\r\n\r\nconst ConfirmationDelete: FC = ({\r\n userId,\r\n calculationId,\r\n calculationName,\r\n}) => {\r\n const adminContext = useContext(AdminContext);\r\n const [showWarning, setShowWarning] = useState(false);\r\n\r\n const handleDelete = async () => {\r\n await adminContext.deleteCalculation(userId, calculationId);\r\n setShowWarning(false);\r\n };\r\n\r\n return (\r\n <>\r\n setShowWarning(true)}>\r\n \r\n \r\n \r\n \r\n Are you sure you want to delete calculation{\" \"}\r\n {calculationName}?\r\n \r\n \r\n setShowWarning(false)}\r\n color=\"slate\"\r\n >\r\n Cancel\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n maxWidth: \"80rem\",\r\n minWidth: \"40rem\",\r\n },\r\n spacing: {\r\n marginBottom: \"1rem\",\r\n margin: \"1rem\",\r\n },\r\n}));\r\n\r\nconst useStylesNameCell = makeStyles((theme) => ({\r\n link: {\r\n cursor: \"pointer\",\r\n },\r\n}));\r\n\r\nconst CalculationNameCell: FC<{ params: any }> = ({ params }) => {\r\n const history = useHistory();\r\n const styles = useStylesNameCell();\r\n return (\r\n {\r\n const adminCalculation = params.row as CalculationListItem;\r\n await CalculationState.load(\r\n adminCalculation.userId,\r\n adminCalculation.uniqueId,\r\n true\r\n );\r\n history.push(\"/Calculation/BasicInformation\");\r\n }}\r\n >\r\n {params.value}\r\n \r\n );\r\n};\r\n\r\nconst CalculationColumns: GridColumns = [\r\n {\r\n field: \"calculationName\",\r\n headerName: \"File name\",\r\n sortable: false,\r\n flex: 1.5,\r\n renderCell: (params) => ,\r\n },\r\n {\r\n field: \"userName\",\r\n headerName: \"EE num\",\r\n flex: 1,\r\n },\r\n {\r\n field: \"firstName\",\r\n headerName: \"First name\",\r\n flex: 1,\r\n },\r\n {\r\n field: \"lastName\",\r\n headerName: \"Last name\",\r\n flex: 1,\r\n },\r\n {\r\n field: \"isFinal\",\r\n headerName: \"Type\",\r\n flex: 1,\r\n renderCell: (params) => (params.row.isFinal ? \"Final\" : \"Estimate\"),\r\n },\r\n {\r\n field: \"description\",\r\n headerName: \"Description\",\r\n flex: 1,\r\n },\r\n {\r\n editable: false,\r\n field: \"actions\",\r\n headerName: \" \",\r\n sortable: false,\r\n flex: 0.5,\r\n renderCell: (params) => (\r\n \r\n ),\r\n },\r\n];\r\n\r\nconst PAGE_LENGTH = 10;\r\nconst getCalculations = debounce(\r\n async (\r\n adminContext: Admin,\r\n eeNumber: string,\r\n lastName: string,\r\n sortColumn: string,\r\n sortOrder: string,\r\n page: number,\r\n update: (results: PaginatedCalculationListItem) => void\r\n ) => {\r\n update(\r\n await adminContext.getPaginatedCalculationList(\r\n eeNumber,\r\n lastName,\r\n sortColumn,\r\n sortOrder,\r\n page,\r\n PAGE_LENGTH\r\n )\r\n );\r\n },\r\n 1000\r\n);\r\n\r\nconst HomeAdmin = observer(() => {\r\n const styles = useStyles();\r\n const [eeNumber, setEeNumber] = useState(\"\");\r\n const [lastName, setLastName] = useState(\"\");\r\n const [sortModel, setSortModel] = React.useState([\r\n {\r\n field: \"userName\",\r\n sort: \"asc\",\r\n },\r\n ]);\r\n const adminContext = useContext(AdminContext);\r\n const [page, setPage] = useState(0);\r\n const [rows, setRows] = React.useState([]);\r\n const [rowCount, setRowCount] = React.useState(0);\r\n\r\n useEffect(() => {\r\n // tslint:disable-next-line: no-floating-promises\r\n getCalculations(\r\n adminContext,\r\n eeNumber,\r\n lastName,\r\n sortModel[0]?.field,\r\n sortModel[0]?.sort as string,\r\n page,\r\n (result) => {\r\n setRows(result.calculations ?? []);\r\n setRowCount(result.count);\r\n }\r\n );\r\n }, [adminContext, page, eeNumber, lastName, sortModel]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n To restore a prior calculation, enter a participant's EE number, last\r\n name or select from the list below. To create a new calculation, go to{\" \"}\r\n \r\n Admin > Create calculation\r\n \r\n \r\n \r\n\r\n \r\n setEeNumber(value as string)}\r\n mustHaveValue={false}\r\n />\r\n setLastName(value as string)}\r\n mustHaveValue={false}\r\n />\r\n \r\n\r\n \r\n row.uniqueId}\r\n disableColumnMenu={true}\r\n autoHeight={true}\r\n rowsPerPageOptions={[PAGE_LENGTH]}\r\n sortModel={sortModel}\r\n onSortModelChange={setSortModel}\r\n paginationMode={\"server\"}\r\n sortingMode={\"server\"}\r\n />\r\n \r\n \r\n );\r\n});\r\n\r\nexport default HomeAdmin;\r\n","import { Button, Typography } from \"@material-ui/core\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport makeStyles from \"@material-ui/styles/makeStyles\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { FC, useContext, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router\";\r\n\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationLabel from \"../../common/CalculationLabel\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport { Calculation, CalculationContext } from \"../../state/Calculation\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { isUserAdmin } from \"../../utilities/user\";\r\n\r\nimport HomeAdmin from \"./HomeAdmin\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n maxWidth: \"60rem\",\r\n minWidth: \"40rem\",\r\n },\r\n description: {\r\n margin: \"1rem\",\r\n },\r\n descriptionSpacing: {\r\n marginBottom: \"1.5rem\",\r\n },\r\n}));\r\n\r\nconst useRowStyles = makeStyles((theme) => ({\r\n button: {\r\n paddingLeft: \"2rem\",\r\n paddingTop: \".05rem\",\r\n \"& button\": {\r\n height: \"2.2rem\",\r\n },\r\n },\r\n\r\n label: {\r\n flexGrow: 1,\r\n },\r\n}));\r\n\r\ninterface CalculationRowProps {\r\n calculation: Calculation;\r\n index: number;\r\n onSelect: () => void;\r\n}\r\n\r\nconst CalculationRow: FC = observer(\r\n ({ calculation, index, onSelect }) => {\r\n const styles = useRowStyles();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n);\r\n\r\nconst Home = observer(() => {\r\n const rootContext = useContext(RootContext);\r\n const calculationContext = useContext(CalculationContext);\r\n const history = useHistory();\r\n const styles = useStyles();\r\n const { user } = rootContext;\r\n\r\n useEffect(() => {\r\n if (!calculationContext.calculations) {\r\n // tslint:disable-next-line: no-floating-promises\r\n calculationContext.load();\r\n }\r\n }, [calculationContext]);\r\n\r\n if (!calculationContext.calculations) {\r\n return null;\r\n }\r\n\r\n const handleSelect = (calculation: Calculation) => {\r\n calculationContext.currentCalculation = calculation;\r\n history.push(`/Calculation/`);\r\n };\r\n\r\n if (isUserAdmin(user)) {\r\n return ;\r\n }\r\n\r\n const calculations = calculationContext.calculations.filter(\r\n (c) => !c.isRepayment\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n This website will calculate your Tacoma Employees' Retirement System\r\n (TERS) benefit. You will be able to save three different estimates.\r\n Some data is provided by the TERS office and cannot be overridden.\r\n \r\n \r\n Please select one of the estimates below to get started. Update the\r\n input box alongside the estimate number to give your estimate a name.\r\n Example: Age 60.\r\n \r\n \r\n \r\n {calculations.map((c, index) => (\r\n handleSelect(c)}\r\n />\r\n ))}\r\n \r\n \r\n );\r\n});\r\n\r\nexport default Home;\r\n","import Home from \"./Home\";\r\nexport default Home;\r\n","import {\r\n Box,\r\n Button,\r\n createStyles,\r\n Grid,\r\n Hidden,\r\n Link,\r\n makeStyles,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\n\r\nimport { TextField, validateEmail } from \"../../common/TextField\";\r\nimport { RootContext } from \"../../state/root\";\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n content: {\r\n marginTop: 0,\r\n marginBottom: 0,\r\n height: \"100%\",\r\n },\r\n loginForm: {\r\n padding: theme.spacing(2),\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n signInBtn: {\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n },\r\n visualContainer: {\r\n margin: 0,\r\n height: \"100%\",\r\n backgroundImage: \"url(/public/images/signup.png)\",\r\n backgroundRepeat: \"no-repeat\",\r\n clipPath: \"polygon(10% 0, 100% 0, 100% 100%, 0 100%)\",\r\n },\r\n disclaimer: {\r\n overflowX: \"hidden\",\r\n \"*::-webkit-scrollbar-thumb\": {\r\n backgroundColor: \"green\",\r\n },\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n },\r\n forgotLinks: {\r\n marginTop: theme.spacing(1),\r\n },\r\n field: {\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n formContainer: {\r\n backgroundColor: theme.palette.background.default,\r\n padding: \"2rem\",\r\n },\r\n forgotPasswordForm: {\r\n padding: theme.spacing(2),\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n noEmailInstruction: {\r\n overflow: \"hidden\",\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n borderColor: theme.palette.action.disabled,\r\n },\r\n visual: {\r\n width: \"100%\",\r\n clipPath: \"polygon(10% 0, 100% 0, 100% 100%, 0 100%)\",\r\n },\r\n actions: {\r\n paddingLeft: \"2rem\",\r\n paddingRight: \"2rem\",\r\n paddingTop: theme.spacing(2),\r\n },\r\n confirmation: {\r\n display: \"flex\",\r\n border: \"1px solid\",\r\n borderColor: theme.palette.secondary.main,\r\n padding: theme.spacing(1),\r\n },\r\n confirmationIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n collapse: {\r\n display: \"None\",\r\n },\r\n expand: {\r\n display: \"flex\",\r\n marginTop: \"1rem\",\r\n },\r\n })\r\n);\r\n\r\nconst ForgotPassword: React.FC = observer(() => {\r\n const [userEmail, setUserEmail] = useState();\r\n const [showPasswordReset, setShowPasswordReset] = useState();\r\n const rootContext = useContext(RootContext);\r\n const styles = useStyles();\r\n const invalidEmail = !!(userEmail && !validateEmail(userEmail));\r\n\r\n return (\r\n \r\n \r\n \r\n Forgot Password\r\n \r\n Enter your email address below:\r\n \r\n setUserEmail(value as string)}\r\n />\r\n \r\n \r\n No email? \r\n \r\n \r\n If you don't have an email address associated with your Tacoma\r\n Employees' Retirement System account call the Retirement\r\n Department at (253) 502-8200.\r\n \r\n \r\n \r\n \r\n \r\n \r\n Password reset instructions sent to your email. Please check your\r\n spam folder if you do not see the email immediately.\r\n \r\n \r\n \r\n \r\n {\r\n await rootContext.StartEmailReset(userEmail!);\r\n setShowPasswordReset(true);\r\n }}\r\n >\r\n Confirm\r\n \r\n \r\n \r\n \r\n Cancel\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default ForgotPassword;\r\n","import {\r\n Box,\r\n Button,\r\n Checkbox,\r\n createStyles,\r\n FormControlLabel,\r\n Grid,\r\n Hidden,\r\n Link,\r\n makeStyles,\r\n TextField,\r\n Tooltip,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { Link as RouterLink, useHistory } from \"react-router-dom\";\r\n\r\nimport { RootContext } from \"../../state/root\";\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n content: {\r\n marginTop: 0,\r\n marginBottom: 0,\r\n height: \"100%\",\r\n },\r\n loginForm: {\r\n padding: theme.spacing(2),\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n signInBtn: {\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n },\r\n visualContainer: {\r\n margin: 0,\r\n height: \"100%\",\r\n backgroundImage: \"url(/public/images/signup.png)\",\r\n backgroundRepeat: \"no-repeat\",\r\n clipPath: \"polygon(10% 0, 100% 0, 100% 100%, 0 100%)\",\r\n },\r\n disclaimer: {\r\n overflowX: \"hidden\",\r\n \"*::-webkit-scrollbar-thumb\": {\r\n backgroundColor: \"green\",\r\n },\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n },\r\n forgotLinks: {\r\n marginTop: theme.spacing(1),\r\n },\r\n })\r\n);\r\n\r\nconst Login: React.FC = observer(() => {\r\n const rootContext = useContext(RootContext);\r\n const [error, setError] = useState();\r\n const history = useHistory();\r\n\r\n const [userName, setUserName] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n\r\n const [acceptedTerms, setAcceptedTerms] = useState(\r\n rootContext.localStorage.acceptedTerms\r\n );\r\n const styles = useStyles();\r\n const login = async () => {\r\n if (!acceptedTerms) {\r\n return;\r\n }\r\n const success = await rootContext.Login(userName, password);\r\n if (success) {\r\n history.push(\"\");\r\n } else {\r\n setError(\"Login Failed\");\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n setUserName(e.currentTarget.value)}\r\n />\r\n e.key === \"Enter\" && login()}\r\n onChange={(e) => setPassword(e.currentTarget.value)}\r\n />\r\n \r\n {error && {error}}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default Login;\r\n","import ForgotPassword from \"./ForgotPassword\";\r\nimport Login from \"./Login\";\r\n\r\nexport { ForgotPassword };\r\nexport default Login;\r\n","import {\r\n Box,\r\n Button,\r\n createStyles,\r\n Grid,\r\n Hidden,\r\n Link,\r\n makeStyles,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport { Alert } from \"@material-ui/lab\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { Link as RouterLink, useHistory } from \"react-router-dom\";\r\n\r\nimport { TextField, validatePassword } from \"../../common/TextField\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { StatusCode } from \"../../state/User\";\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n content: {\r\n marginTop: 0,\r\n marginBottom: 0,\r\n height: \"100%\",\r\n },\r\n loginForm: {\r\n padding: theme.spacing(2),\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n signInBtn: {\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n },\r\n visualContainer: {\r\n margin: 0,\r\n height: \"100%\",\r\n backgroundImage: \"url(/public/images/signup.png)\",\r\n backgroundRepeat: \"no-repeat\",\r\n clipPath: \"polygon(10% 0, 100% 0, 100% 100%, 0 100%)\",\r\n },\r\n disclaimer: {\r\n overflowX: \"hidden\",\r\n \"*::-webkit-scrollbar-thumb\": {\r\n backgroundColor: \"green\",\r\n },\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n },\r\n forgotLinks: {\r\n marginTop: theme.spacing(1),\r\n },\r\n field: {\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n formContainer: {\r\n backgroundColor: theme.palette.background.default,\r\n padding: \"2rem\",\r\n },\r\n forgotPasswordForm: {\r\n padding: theme.spacing(2),\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n noEmailInstruction: {\r\n overflow: \"hidden\",\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n borderColor: theme.palette.action.disabled,\r\n },\r\n visual: {\r\n width: \"100%\",\r\n clipPath: \"polygon(10% 0, 100% 0, 100% 100%, 0 100%)\",\r\n },\r\n actions: {\r\n paddingLeft: \"2rem\",\r\n paddingRight: \"2rem\",\r\n paddingTop: theme.spacing(2),\r\n },\r\n confirmation: {\r\n display: \"flex\",\r\n border: \"1px solid\",\r\n borderColor: theme.palette.secondary.main,\r\n padding: theme.spacing(1),\r\n },\r\n confirmationIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n collapse: {\r\n display: \"None\",\r\n },\r\n expand: {\r\n display: \"flex\",\r\n marginTop: \"1rem\",\r\n },\r\n })\r\n);\r\n\r\nconst ResetPassword: React.FC = observer(() => {\r\n const [error, setError] = useState();\r\n const [showSuccess, setShowSuccess] = useState();\r\n const [password, setPassword] = useState();\r\n const [confirmPassword, setConfirmPassword] = useState();\r\n const history = useHistory();\r\n const rootContext = useContext(RootContext);\r\n const styles = useStyles();\r\n\r\n const hasPasswords = !!password && !!confirmPassword;\r\n const validPassword = !password || validatePassword(password);\r\n const passwordsMatch = hasPasswords && password === confirmPassword;\r\n\r\n const onResetPassword = async () => {\r\n if (!validPassword) {\r\n setError(\"Password does not meet minimum specifications\");\r\n return;\r\n }\r\n if (!passwordsMatch) {\r\n setError(\"Password and confirm password do not match\");\r\n return;\r\n }\r\n setError(undefined);\r\n // Post the form data\r\n const token = new URL(document.location.href).searchParams?.get(\"token\");\r\n if (token && password) {\r\n const result = await rootContext.FinishEmailReset(token, password);\r\n if (result.status === StatusCode.Ok) {\r\n setShowSuccess(true);\r\n window.setTimeout(() => {\r\n history.push(\"\");\r\n }, 2500);\r\n return;\r\n }\r\n }\r\n\r\n setError(\"Password reset failed token invalid or expired\");\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n Forgot Password\r\n \r\n Enter your new password below:\r\n \r\n setPassword(value as string)}\r\n />\r\n Forgot Password\r\n Confirm password below:\r\n setConfirmPassword(value as string)}\r\n />\r\n \r\n Password must contain at least one uppercase, lowercase, number and special character with a length of at least 8 characters.\r\n \r\n \r\n \r\n \r\n Password has been reset\r\n \r\n \r\n \r\n \r\n Confirm\r\n \r\n \r\n \r\n \r\n Cancel\r\n \r\n \r\n \r\n {error && !showSuccess && {error}}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default ResetPassword;\r\n","import {\r\n Box,\r\n Button,\r\n createStyles,\r\n Grid,\r\n Link,\r\n makeStyles,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { Link as RouterLink, useHistory } from \"react-router-dom\";\r\n\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport PasswordField from \"../../common/PasswordField\";\r\nimport { useId } from \"../../common/useId\";\r\nimport {\r\n CalculationErrorContext,\r\n CalculationErrors,\r\n} from \"../../state/CalculationErrors\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { ErrorCode, StatusCode } from \"../../state/User\";\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n content: {\r\n marginTop: 0,\r\n marginBottom: 0,\r\n height: \"100%\",\r\n },\r\n loginForm: {\r\n padding: theme.spacing(2),\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n spacing: {\r\n marginTop: \"2rem\",\r\n marginBottom: \"2rem\",\r\n marginLeft: \"1rem\",\r\n },\r\n disclaimer: {\r\n overflowX: \"hidden\",\r\n \"*::-webkit-scrollbar-thumb\": {\r\n backgroundColor: \"green\",\r\n },\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n },\r\n forgotLinks: {\r\n marginTop: theme.spacing(1),\r\n },\r\n formContainer: {\r\n backgroundColor: theme.palette.background.default,\r\n padding: \"2rem\",\r\n },\r\n\r\n actions: {\r\n paddingLeft: \"2rem\",\r\n paddingRight: \"2rem\",\r\n paddingTop: theme.spacing(2),\r\n },\r\n })\r\n);\r\n\r\nconst UpdatePassword: React.FC = observer(() => {\r\n const id = useId();\r\n const history = useHistory();\r\n const errorContext = useContext(CalculationErrorContext);\r\n const { user } = useContext(RootContext);\r\n const styles = useStyles();\r\n\r\n const [state, updateState] = useState<{\r\n password: string;\r\n confirmPassword: string;\r\n currentPassword: string;\r\n emailAddress: string;\r\n }>({\r\n password: \"\",\r\n confirmPassword: \"\",\r\n currentPassword: \"\",\r\n emailAddress: \"\",\r\n });\r\n\r\n useEffect(() => {\r\n updateState((oldState) => ({\r\n ...oldState,\r\n emailAddress: user?.email ?? \"\",\r\n }));\r\n }, [user]);\r\n\r\n const handleUpdate = async () => {\r\n errorContext.clear();\r\n const result = await user?.saveToServer(\r\n {\r\n email: state.emailAddress,\r\n },\r\n state.password,\r\n state.currentPassword\r\n );\r\n if (result?.status === StatusCode.Failed) {\r\n switch (result.errorCode) {\r\n case ErrorCode.InvalidPassword:\r\n errorContext.addError(id, \"Supplied password is invalid\");\r\n break;\r\n }\r\n } else {\r\n history.push(``);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n Update Your Password\r\n \r\n In order to use the system you must first change your temporary\r\n password:\r\n \r\n {\r\n updateState((oldState) => ({\r\n ...oldState,\r\n currentPassword: value as string,\r\n }));\r\n errorContext.removeError(id, \"Supplied password is invalid\");\r\n }}\r\n enforcePasswordValidation={false}\r\n />\r\n \r\n state.currentPassword === state.password\r\n ? \"Current password and new password should not match\"\r\n : undefined\r\n }\r\n onChange={(value) =>\r\n updateState((oldState) => ({\r\n ...oldState,\r\n password: value as string,\r\n }))\r\n }\r\n enforcePasswordValidation={true}\r\n />\r\n \r\n state.confirmPassword !== state.password\r\n ? \"New password and confirmation password do not match\"\r\n : undefined\r\n }\r\n value={state.confirmPassword}\r\n onChange={(value) =>\r\n updateState((oldState) => ({\r\n ...oldState,\r\n confirmPassword: value as string,\r\n }))\r\n }\r\n enforcePasswordValidation={false}\r\n />\r\n \r\n\r\n \r\n Add/Update Your Email Account\r\n \r\n updateState((oldState) => ({\r\n ...oldState,\r\n emailAddress: value as string,\r\n }))\r\n }\r\n />\r\n \r\n {errorContext.validateErrors && errorContext.hasAnyErrors && (\r\n {errorContext.allErrorString}\r\n )}\r\n \r\n \r\n {\r\n runInAction(() => {\r\n errorContext.validateErrors = true;\r\n });\r\n if (errorContext.hasAnyErrors) {\r\n return;\r\n }\r\n await handleUpdate();\r\n }}\r\n >\r\n Confirm\r\n \r\n \r\n \r\n \r\n Cancel\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default () => (\r\n \r\n \r\n \r\n);\r\n","import { Grid, makeStyles, Typography } from \"@material-ui/core\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect } from \"react\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport CalculationDate from \"../../common/CalculationDate\";\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationLabel from \"../../common/CalculationLabel\";\r\nimport CalculationSection from \"../../common/CalculationSection\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport { CalculationContext } from \"../../state/Calculation\";\r\nimport {\r\n CalculationErrorContext,\r\n CalculationErrors,\r\n} from \"../../state/CalculationErrors\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n paragraph: {\r\n marginLeft: \"1rem\",\r\n marginBottom: \"1rem\",\r\n },\r\n note: {\r\n marginTop: \"1rem\",\r\n marginLeft: \"1rem\",\r\n marginBottom: \"1rem\",\r\n },\r\n buttons: {\r\n marginTop: \"1rem\",\r\n },\r\n buttonRight: {\r\n float: \"right\",\r\n marginRight: 0,\r\n },\r\n}));\r\n\r\nconst RepaymentOfContributionsToolTip = () => (\r\n <>\r\n

\r\n Repayment of Contributions: If you have already re-paid your contributions\r\n this should already be reflected in your membership date and contribution\r\n totals. If you have questions please contact the Retirement Department.\r\n

\r\n \r\n);\r\n\r\nconst RepaymentOfContributions: React.FC = observer(() => {\r\n const styles = useStyles();\r\n const calculationContext = useContext(CalculationContext);\r\n const calculationErrorContext = useContext(CalculationErrorContext);\r\n\r\n useEffect(() => {\r\n if (!calculationContext.calculations) {\r\n // tslint:disable-next-line: no-floating-promises\r\n calculationContext.load();\r\n }\r\n }, [calculationContext]);\r\n\r\n if (!calculationContext.calculations) {\r\n return null;\r\n }\r\n\r\n const [repayment] = calculationContext.calculations.filter(\r\n (c) => c.isRepayment\r\n );\r\n\r\n if (!repayment) {\r\n return null;\r\n }\r\n\r\n const hasResult =\r\n !!repayment.results?.totalRepaymentAmount ||\r\n !!repayment.results?.amountPerQuarter;\r\n\r\n return (\r\n <>\r\n \r\n }\r\n />\r\n \r\n If you withdrew your contributions after termination and were later\r\n rehired, you are eligible to regain your prior service by repaying\r\n your withdrawn contributions plus interest.\r\n \r\n \r\n Enter the following information to calculate the repayment amount.\r\n \r\n \r\n \r\n (repayment.amountWithdrawn = value as number)}\r\n />\r\n (repayment.dateWithdrawn = value)}\r\n />\r\n (repayment.serviceRegained = value as number)}\r\n />\r\n (repayment.dateOfMembership = value)}\r\n />\r\n (repayment.lastDayOfEmployment = value)}\r\n />\r\n (repayment.repaymentDate = value)}\r\n />\r\n \r\n\r\n {hasResult && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n Note that this is an estimate. The exact cost will be calculated by\r\n Staff.\r\n \r\n \r\n\r\n {calculationErrorContext.validateErrors &&\r\n calculationErrorContext.hasAnyErrors && (\r\n \r\n {calculationErrorContext.allErrorString}\r\n \r\n )}\r\n\r\n
\r\n {\r\n runInAction(() => (calculationErrorContext.validateErrors = true));\r\n if (calculationErrorContext.hasAnyErrors) {\r\n return;\r\n }\r\n await repayment.saveCalculation();\r\n }}\r\n >\r\n Calculate\r\n \r\n window.print()}\r\n >\r\n Print\r\n \r\n
\r\n \r\n );\r\n});\r\n\r\nexport default () => (\r\n \r\n \r\n \r\n);\r\n","import RepaymentOfContributions from \"./RepaymentOfContributions\";\r\nexport default RepaymentOfContributions;\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Drawer from \"@material-ui/core/Drawer\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport ArrowDropDownIcon from \"@material-ui/icons/ArrowDropDown\";\r\nimport ArrowDropUpIcon from \"@material-ui/icons/ArrowDropUp\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\nimport { ClassNameMap } from \"@material-ui/styles/withStyles\";\r\nimport clsx from \"clsx\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { FC, useContext, useEffect, useState } from \"react\";\r\nimport { useLocation } from \"react-router\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationLabel from \"../../common/CalculationLabel\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport PasswordField from \"../../common/PasswordField\";\r\nimport { useId } from \"../../common/useId\";\r\nimport {\r\n CalculationErrorContext,\r\n CalculationErrors,\r\n} from \"../../state/CalculationErrors\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { ErrorCode, StatusCode, User } from \"../../state/User\";\r\nimport { Colors } from \"../../utilities/colors\";\r\n\r\nconst useUserStyles = makeStyles((theme) => ({\r\n content: {\r\n cursor: \"pointer\",\r\n },\r\n}));\r\n\r\ninterface UserInfoProps {\r\n state: \"open\" | \"closed\";\r\n user?: User;\r\n classes: ClassNameMap<\"main\" | \"text\" | \"profileIcon\" | \"header\">;\r\n setUserPanelOpen: (value: boolean) => void;\r\n}\r\n\r\nconst UserInfo: FC = ({\r\n classes,\r\n user,\r\n setUserPanelOpen,\r\n state,\r\n}) => {\r\n const styles = useUserStyles();\r\n const { pathname } = useLocation();\r\n const inBackupCalculations = pathname.startsWith(\"/BackupCalculations\");\r\n const showHeader = user && !user.needsPasswordChange && !inBackupCalculations;\r\n\r\n if (!user) {\r\n return null;\r\n }\r\n\r\n return showHeader ? (\r\n \r\n setUserPanelOpen(state === \"closed\")}\r\n >\r\n
\r\n \r\n
\r\n
\r\n \r\n Welcome {user.firstName}\r\n \r\n \r\n Employee num: {user.employeeId}\r\n \r\n
\r\n setUserPanelOpen(state === \"closed\")}\r\n >\r\n {state === \"closed\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n
\r\n \r\n ) : null;\r\n};\r\n\r\nconst PASSWORDS_MATCH_ERROR = \"New password and confirm password do not match\";\r\nconst INVALID_PASSWORD_ERROR = \"The current password entered is not valid\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n buttons: {\r\n marginLeft: \"1rem\",\r\n marginTop: \"1.5rem\",\r\n },\r\n main: {\r\n backgroundColor: Colors.NormalBackground,\r\n minHeight: \"5rem\",\r\n },\r\n profileIcon: {\r\n padding: \".2rem\",\r\n backgroundColor: Colors.MillimanBlue,\r\n borderRadius: \".3rem\",\r\n marginRight: \".5rem\",\r\n marginLeft: \"1rem\",\r\n },\r\n header: {\r\n borderBottomStyle: \"solid\",\r\n borderBottomColor: Colors.Slate,\r\n borderBottomWidth: \"1px\",\r\n },\r\n control: {\r\n width: \"85% !important\",\r\n },\r\n icon: {\r\n marginLeft: \"15px\",\r\n marginBottom: \"10px\",\r\n color: Colors.VibrantBlue,\r\n },\r\n text: {\r\n color: Colors.TextHeader,\r\n },\r\n userDrawer: {\r\n backgroundColor: Colors.CalculationsBackground,\r\n borderStyle: \"none\",\r\n maxWidth: \"25rem\",\r\n marginRight: \"1rem\",\r\n },\r\n userInfo: {\r\n marginTop: \"2rem\",\r\n },\r\n}));\r\n\r\nconst Header = observer(() => {\r\n const classes = useStyles();\r\n const rootContext = useContext(RootContext);\r\n const [userPanelOpen, setUserPanelOpen] = useState(false);\r\n const [passwordEdit, setPasswordEdit] = useState(false);\r\n const [emailEdit, setEmailEdit] = useState(false);\r\n const { user } = rootContext;\r\n const [firstName, setFirstName] = useState(user?.firstName);\r\n const [lastName, setLastName] = useState(user?.lastName);\r\n const [email, setEmail] = useState(user?.email);\r\n const [password, setPassword] = useState(\"\");\r\n const [confirmPassword, setConfirmPassword] = useState(\"\");\r\n const [currentPassword, setCurrentPassword] = useState(\"\");\r\n const errorContext = useContext(CalculationErrorContext);\r\n const id = useId();\r\n\r\n useEffect(() => {\r\n setFirstName(user?.firstName);\r\n setLastName(user?.lastName);\r\n setEmail(user?.email);\r\n setPassword(\"\");\r\n setPasswordEdit(false);\r\n setEmailEdit(false);\r\n setConfirmPassword(\"\");\r\n setCurrentPassword(\"\");\r\n errorContext.clear();\r\n errorContext.setValidateErrors(false);\r\n }, [errorContext, user, userPanelOpen]);\r\n\r\n const handleUpdate = async () => {\r\n errorContext.clear();\r\n const result = await user?.saveToServer(\r\n {\r\n firstName,\r\n lastName,\r\n email,\r\n },\r\n password,\r\n currentPassword\r\n );\r\n if (result?.status === StatusCode.Failed) {\r\n switch (result.errorCode) {\r\n case ErrorCode.InvalidEmail:\r\n errorContext.addError(\r\n id,\r\n \"Email address is already associated with another user.\"\r\n );\r\n break;\r\n case ErrorCode.InvalidPassword:\r\n errorContext.addError(id, INVALID_PASSWORD_ERROR);\r\n break;\r\n }\r\n } else {\r\n setUserPanelOpen(false);\r\n }\r\n };\r\n\r\n const isDirty = emailEdit || passwordEdit;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Tacoma Employees' Retirement System\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n setUserPanelOpen(false)}\r\n >\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {emailEdit ? (\r\n setEmail(value as string)}\r\n />\r\n ) : (\r\n \r\n )}\r\n setEmailEdit(true)}\r\n >\r\n \r\n \r\n
\r\n
\r\n \r\n {passwordEdit ? (\r\n \r\n setPassword(value as string)\r\n }\r\n mustHaveValue={false}\r\n enforcePasswordValidation={true}\r\n />\r\n ) : (\r\n \r\n )}\r\n setPasswordEdit(true)}\r\n >\r\n \r\n \r\n {passwordEdit && (\r\n <>\r\n \r\n setConfirmPassword(value as string)\r\n }\r\n validation={(value) =>\r\n value !== password ? PASSWORDS_MATCH_ERROR : undefined\r\n }\r\n enforcePasswordValidation={false}\r\n />\r\n \r\n )}\r\n
\r\n
\r\n {isDirty && (\r\n <>\r\n \r\n {\r\n setCurrentPassword(value as string);\r\n errorContext.removeError(id, INVALID_PASSWORD_ERROR);\r\n }}\r\n enforcePasswordValidation={false}\r\n />\r\n \r\n )}\r\n
\r\n\r\n {errorContext.validateErrors && errorContext.hasAnyErrors && (\r\n {errorContext.allErrorString}\r\n )}\r\n\r\n \r\n {\r\n runInAction(() => {\r\n if (errorContext.hasAnyErrors) {\r\n errorContext.validateErrors = true;\r\n return;\r\n }\r\n // tslint:disable-next-line: no-floating-promises\r\n handleUpdate();\r\n });\r\n }}\r\n color=\"secondary\"\r\n variant=\"contained\"\r\n >\r\n Update\r\n \r\n setUserPanelOpen(false)}\r\n >\r\n Cancel\r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\nexport default () => (\r\n \r\n
\r\n \r\n);\r\n","import Header from \"./Header\";\r\nexport default Header;\r\n","import Grid from \"@material-ui/core/Grid\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useCallback, useContext, useEffect } from \"react\";\r\n\r\nimport { CalculationContext } from \"../state/Calculation\";\r\nimport { GuardContext } from \"../state/Guard\";\r\nimport { Colors } from \"../utilities/colors\";\r\n\r\nimport Button from \"./Button\";\r\nimport Modal, { DialogActions } from \"./Dialog\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n error: {\r\n color: Colors.Red,\r\n },\r\n}));\r\n\r\nconst GuardDialog: React.FC = observer(() => {\r\n const style = useStyles();\r\n const [showDialog, setShowDialog] = React.useState(false);\r\n const guard = useContext(GuardContext);\r\n const calculationContext = useContext(CalculationContext);\r\n const { currentCalculation } = calculationContext;\r\n\r\n const onCancel = useCallback(\r\n async (proceed = false) => {\r\n if (proceed) {\r\n await calculationContext.load(\r\n currentCalculation?.userId,\r\n currentCalculation?.uniqueId,\r\n true\r\n );\r\n }\r\n runInAction(() => {\r\n guard.showGuardDialog = undefined;\r\n guard.resolveGuard?.(proceed);\r\n guard.resolveGuard = undefined;\r\n setShowDialog(false);\r\n });\r\n },\r\n [\r\n guard,\r\n calculationContext,\r\n currentCalculation?.uniqueId,\r\n currentCalculation?.userId,\r\n ]\r\n );\r\n\r\n const onSave = useCallback(async () => {\r\n await currentCalculation?.saveCalculation();\r\n runInAction(() => {\r\n guard.showGuardDialog = undefined;\r\n guard.resolveGuard?.(true);\r\n guard.resolveGuard = undefined;\r\n setShowDialog(false);\r\n });\r\n }, [guard, currentCalculation]);\r\n\r\n useEffect(() => {\r\n if (guard.showGuardDialog && currentCalculation?.isDirty) {\r\n setShowDialog(true);\r\n } else {\r\n runInAction(() => {\r\n guard.showGuardDialog = undefined;\r\n guard.resolveGuard?.(true);\r\n guard.resolveGuard = undefined;\r\n });\r\n }\r\n }, [guard, guard.showGuardDialog, currentCalculation, onCancel]);\r\n\r\n return (\r\n \r\n \r\n
\r\n

\r\n Warning: we have detected\r\n unsaved changes to your account. Select the save button to save your\r\n work, or ignore to continue without saving.\r\n

\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default GuardDialog;\r\n","import { Grid } from \"@material-ui/core\";\r\nimport MuiDialogActions from \"@material-ui/core/DialogActions\";\r\nimport MuiDialogContent from \"@material-ui/core/DialogContent\";\r\nimport { Theme, withStyles } from \"@material-ui/core/styles\";\r\nimport { saveAs } from \"file-saver\";\r\nimport React, { FC, useContext, useState } from \"react\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport CalculationDate from \"../../common/CalculationDate\";\r\nimport CalculationHeader from \"../../common/CalculationHeader\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport Dialog from \"../../common/Dialog\";\r\nimport { AdminContext, ExportResults } from \"../../state/Admin\";\r\nimport {\r\n CalculationErrorContext,\r\n CalculationErrors,\r\n} from \"../../state/CalculationErrors\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { isUserFullAdmin } from \"../../utilities/user\";\r\n\r\nconst DialogContent = withStyles((theme: Theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n },\r\n}))(MuiDialogContent);\r\n\r\nconst DialogActions = withStyles((theme: Theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(1),\r\n justifyContent: \"space-between\",\r\n },\r\n}))(MuiDialogActions);\r\n\r\nexport interface ExportResultsProps {\r\n open: boolean;\r\n setOpen: (open: boolean) => void;\r\n}\r\n\r\nconst ExportResultsDialog: FC = ({ open, setOpen }) => {\r\n const [request, setRequest] = useState({});\r\n const adminContext = useContext(AdminContext);\r\n const { user } = useContext(RootContext);\r\n const updateRequest = (request: Partial) => {\r\n setRequest((oldRequest) => ({ ...oldRequest, ...request }));\r\n };\r\n const handleExportResults = async (isFinal: boolean) => {\r\n const result = await adminContext.exportResults({ ...request, isFinal });\r\n saveAs(result, \"export.csv\");\r\n setRequest({});\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n setOpen(false)}\r\n open={open}\r\n title=\"Export results\"\r\n maxWidth=\"md\"\r\n >\r\n \r\n \r\n \r\n \r\n updateRequest({ employeeNumber: value as string })\r\n }\r\n mustHaveValue={false}\r\n labelWidth={10}\r\n type=\"text\"\r\n />\r\n \r\n \r\n updateRequest({ lastName: value as string })}\r\n mustHaveValue={false}\r\n labelWidth={10}\r\n />\r\n \r\n \r\n \r\n \r\n updateRequest({ startDateOfMembership: value })\r\n }\r\n mustHaveValue={false}\r\n labelWidth={5}\r\n />\r\n \r\n \r\n \r\n updateRequest({ endDateOfMembership: value })\r\n }\r\n mustHaveValue={false}\r\n labelWidth={5}\r\n />\r\n \r\n \r\n \r\n \r\n updateRequest({ startDateOfCalculation: value })\r\n }\r\n mustHaveValue={false}\r\n labelWidth={5}\r\n />\r\n \r\n \r\n \r\n updateRequest({ endDateOfCalculation: value })\r\n }\r\n mustHaveValue={false}\r\n labelWidth={5}\r\n />\r\n \r\n \r\n \r\n \r\n updateRequest({ startDateOfRetirement: value })\r\n }\r\n mustHaveValue={false}\r\n labelWidth={5}\r\n />\r\n \r\n \r\n \r\n updateRequest({ endDateOfRetirement: value })\r\n }\r\n mustHaveValue={false}\r\n labelWidth={5}\r\n />\r\n \r\n \r\n \r\n {\r\n await handleExportResults(false);\r\n }}\r\n color=\"secondary\"\r\n size=\"large\"\r\n >\r\n Export results\r\n \r\n {isUserFullAdmin(user) && (\r\n {\r\n await handleExportResults(true);\r\n }}\r\n color=\"primary\"\r\n size=\"large\"\r\n >\r\n Export Final Results\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default (props: ExportResultsProps) => (\r\n \r\n \r\n \r\n);\r\n","import { Grid } from \"@material-ui/core\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\nimport { makeStyles } from \"@material-ui/styles\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { FC, useContext, useState } from \"react\";\r\n\r\nimport Button from \"../../common/Button\";\r\nimport CalculationTextField from \"../../common/CalculationTextField\";\r\nimport Dialog, { DialogActions, DialogContent } from \"../../common/Dialog\";\r\nimport {\r\n CalculationErrorContext,\r\n CalculationErrors,\r\n} from \"../../state/CalculationErrors\";\r\nimport { RootContext } from \"../../state/root\";\r\nexport interface ContactUsDialogProps {\r\n open: boolean;\r\n setOpen: (open: boolean) => void;\r\n}\r\n\r\nconst useStyles = makeStyles(() => ({\r\n grid: {\r\n width: \" 95%\",\r\n marginTop: \"2rem\",\r\n },\r\n}));\r\n\r\nconst ContactUsDialog: FC =\r\n observer(({ open, setOpen }) => {\r\n const styles = useStyles();\r\n const rootContext = useContext(RootContext);\r\n const errorContext = useContext(CalculationErrorContext);\r\n const [result, setResult] = useState({\r\n name: \"\",\r\n email: \"\",\r\n telephone: \"\",\r\n message: \"\",\r\n });\r\n\r\n const handleSubmit = async () => {\r\n runInAction(() => (errorContext.validateErrors = true));\r\n if (errorContext.hasAnyErrors) {\r\n return;\r\n }\r\n await rootContext.ContactUs(\r\n result.name,\r\n result.telephone,\r\n result.email,\r\n result.message\r\n );\r\n setOpen(false);\r\n setResult({\r\n name: \"\",\r\n email: \"\",\r\n telephone: \"\",\r\n message: \"\",\r\n });\r\n };\r\n\r\n return (\r\n setOpen(false)}\r\n open={open}\r\n title=\"Contact us\"\r\n maxWidth=\"md\"\r\n >\r\n \r\n \r\n Please fill out the form below or call the Retirement Department at\r\n (253) 502-8200 during regular business hours or email  \r\n \r\n TERSretirement@cityoftacoma.org\r\n \r\n .\r\n \r\n \r\n \r\n setResult({ ...result, name: value as string })\r\n }\r\n labelWidth={5}\r\n />\r\n \r\n setResult({ ...result, email: value as string })\r\n }\r\n mustHaveValue={false}\r\n labelWidth={5}\r\n />\r\n \r\n setResult({ ...result, telephone: value as string })\r\n }\r\n mustHaveValue={false}\r\n labelWidth={5}\r\n />\r\n \r\n setResult({ ...result, message: value as string })\r\n }\r\n labelWidth={5}\r\n multiline\r\n />\r\n \r\n\r\n {errorContext.validateErrors && errorContext.hasAnyErrors && (\r\n {errorContext.allErrorString}\r\n )}\r\n\r\n \r\n \r\n Submit\r\n \r\n \r\n \r\n \r\n \r\n );\r\n });\r\n\r\nexport default (props: ContactUsDialogProps) => (\r\n \r\n \r\n \r\n);\r\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport Drawer, { DrawerProps } from \"@material-ui/core/Drawer\";\r\nimport MuiLink from \"@material-ui/core/Link\";\r\nimport List from \"@material-ui/core/List\";\r\nimport ListItemBase, {\r\n ListItemProps as ListItemPropsBase,\r\n} from \"@material-ui/core/ListItem\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport clsx from \"clsx\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useState } from \"react\";\r\nimport { Link, useHistory, useLocation } from \"react-router-dom\";\r\n\r\nimport Guard from \"../../common/Guard\";\r\nimport { CalculationContext } from \"../../state/Calculation\";\r\nimport { CalculationErrorContext } from \"../../state/CalculationErrors\";\r\nimport { GuardContext } from \"../../state/Guard\";\r\nimport { RootContext } from \"../../state/root\";\r\nimport { Colors } from \"../../utilities/colors\";\r\nimport { isUserAdmin, isUserFullAdmin } from \"../../utilities/user\";\r\nimport ExportResultsDialog from \"../Admin/ExportResults\";\r\nimport ContactUsDialog from \"../ContactUs/ContactUs\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n categoryHeader: {\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n },\r\n categoryItem: {\r\n paddingTop: theme.spacing(2),\r\n paddingLeft: theme.spacing(6),\r\n paddingBottom: theme.spacing(2),\r\n },\r\n selectedMainItem: {\r\n backgroundColor: Colors.Black,\r\n },\r\n selectedCategoryItem: {\r\n backgroundColor: Colors.NavMenuGrey,\r\n },\r\n categoryHeaderPrimary: {\r\n color: theme.palette.common.white,\r\n \"$selectedMainItem &\": {\r\n color: Colors.Sky,\r\n },\r\n },\r\n itemIcon: {\r\n minWidth: \"auto\",\r\n marginRight: theme.spacing(2),\r\n },\r\n list: {\r\n marginTop: \"5rem\",\r\n },\r\n listActive: {\r\n backgroundColor: Colors.Black,\r\n paddingTop: \"1rem\",\r\n paddingBottom: \"1rem\",\r\n },\r\n listLogout: {\r\n paddingTop: \"2rem\",\r\n paddingBottom: \"1rem\",\r\n backgroundColor: Colors.Black,\r\n },\r\n}));\r\n\r\ninterface ListItemProps extends ListItemPropsBase {\r\n component?: React.ComponentType | undefined;\r\n icon?: IconProp;\r\n label: string;\r\n to?: string;\r\n selected?: boolean;\r\n disabled?: boolean;\r\n main?: boolean;\r\n href?: string;\r\n target?: string;\r\n}\r\n\r\nconst ListItem: React.FC = ({\r\n icon,\r\n to,\r\n label,\r\n selected,\r\n disabled,\r\n main = true,\r\n component = Link,\r\n href,\r\n target,\r\n onClick,\r\n}) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n {icon && (\r\n \r\n \r\n \r\n )}\r\n \r\n {label}\r\n \r\n \r\n );\r\n};\r\n\r\nconst Navigator: React.FC = observer((props: DrawerProps) => {\r\n const classes = useStyles();\r\n const [contactUsOpen, setContactUsOpen] = useState(false);\r\n const [exportOpen, setExportOpen] = useState(false);\r\n const history = useHistory();\r\n const rootContext = useContext(RootContext);\r\n const calculationErrorContext = useContext(CalculationErrorContext);\r\n const { pathname } = useLocation();\r\n const guard = useContext(GuardContext);\r\n\r\n const inCalculation = pathname.startsWith(\"/Calculation\");\r\n const calculationPage =\r\n inCalculation && pathname.replace(\"/Calculation/\", \"\");\r\n\r\n const inAdmin = pathname.startsWith(\"/Admin\");\r\n const adminPage = inAdmin && pathname.replace(\"/Admin/\", \"\");\r\n\r\n const calculationContext = useContext(CalculationContext);\r\n const { currentCalculation } = calculationContext;\r\n const calculationPageId = currentCalculation?.pageId ?? 1;\r\n\r\n const onChangePage = async (page: string) => {\r\n const toCalculation = page.startsWith(\"/Calculation\");\r\n if (!toCalculation && inCalculation && !(await guard.showGuard())) {\r\n return;\r\n }\r\n runInAction(() => {\r\n if (calculationErrorContext.hasAnyErrors && toCalculation) {\r\n calculationErrorContext.validateErrors = true;\r\n return;\r\n }\r\n\r\n calculationErrorContext.validateErrors = false;\r\n history.push(page);\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n onChangePage(\"/Home\")}\r\n label=\"Home\"\r\n icon=\"home\"\r\n selected={pathname === \"/Home\" || pathname === \"/\"}\r\n />\r\n\r\n {isUserAdmin(rootContext.user) && (\r\n <>\r\n onChangePage(\"/Admin/ManageMember\")}\r\n label=\"Admin\"\r\n icon=\"tools\"\r\n selected={inAdmin}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n setExportOpen(true)}\r\n main={false}\r\n />\r\n {isUserFullAdmin(rootContext.user) && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n )}\r\n\r\n onChangePage(\"/Calculation/BasicInformation\")}\r\n label=\"Calculation\"\r\n icon=\"calculator\"\r\n selected={inCalculation}\r\n />\r\n \r\n {inCalculation && }\r\n \r\n onChangePage(\"/Calculation/BasicInformation\")}\r\n label=\"Basic information\"\r\n selected={\r\n calculationPage === \"BasicInformation\" || !calculationPage\r\n }\r\n main={false}\r\n component={MuiLink}\r\n />\r\n onChangePage(\"/Calculation/Contributions\")}\r\n label=\"Contributions\"\r\n selected={calculationPage === \"Contributions\"}\r\n disabled={calculationPageId < 2}\r\n main={false}\r\n component={MuiLink}\r\n />\r\n onChangePage(\"/Calculation/ServiceAndSalary\")}\r\n label=\"Service and salary\"\r\n selected={calculationPage === \"ServiceAndSalary\"}\r\n disabled={calculationPageId < 3}\r\n main={false}\r\n component={MuiLink}\r\n />\r\n onChangePage(\"/Calculation/BenefitElections\")}\r\n label=\"Benefit elections\"\r\n selected={calculationPage === \"BenefitElections\"}\r\n disabled={calculationPageId < 4}\r\n main={false}\r\n component={MuiLink}\r\n />\r\n onChangePage(\"/Calculation/Results\")}\r\n label=\"Results\"\r\n selected={calculationPage === \"Results\"}\r\n disabled={calculationPageId < 5}\r\n main={false}\r\n component={MuiLink}\r\n />\r\n \r\n \r\n onChangePage(\"/RepaymentOfContributions\")}\r\n label=\"Repayment of contributions\"\r\n icon=\"donate\"\r\n selected={pathname === \"/RepaymentOfContributions\"}\r\n />\r\n onChangePage(\"/BenefitOptions\")}\r\n label=\"Benefit options\"\r\n icon=\"list\"\r\n selected={pathname === \"/BenefitOptions\"}\r\n />\r\n \r\n \r\n setContactUsOpen(true)}\r\n />\r\n \r\n\r\n \r\n {\r\n if (inCalculation && !(await guard.showGuard())) {\r\n return;\r\n }\r\n await rootContext.Logout();\r\n window.open(\"./\", \"_self\");\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n Log out\r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default Navigator;\r\n","import NavMenu from \"./NavMenu\";\r\nexport default NavMenu;\r\n","import CssBaseline from \"@material-ui/core/CssBaseline\";\r\nimport Hidden from \"@material-ui/core/Hidden\";\r\nimport {\r\n createTheme,\r\n makeStyles,\r\n ThemeProvider,\r\n} from \"@material-ui/core/styles\";\r\nimport clsx from \"clsx\";\r\nimport React, { FC, useContext } from \"react\";\r\nimport { useLocation } from \"react-router\";\r\n\r\nimport Header from \"./components/Header\";\r\nimport NavMenu from \"./components/NavMenu\";\r\nimport { RootContext } from \"./state/root\";\r\nimport { Colors } from \"./utilities/colors\";\r\n\r\ndeclare module \"@material-ui/core/styles/overrides\" {\r\n export interface ComponentNameToClassKey {\r\n MuiAlert: any;\r\n MuiDataGrid: any;\r\n }\r\n}\r\n\r\nlet theme = createTheme({\r\n palette: {\r\n primary: {\r\n light: \"#4473a6\",\r\n main: \"#004877\",\r\n dark: \"#00214b\",\r\n },\r\n secondary: {\r\n light: \"#c1e4c0\",\r\n main: \"#90B290\",\r\n dark: \"#628262\",\r\n },\r\n },\r\n typography: {\r\n h5: {\r\n fontWeight: 500,\r\n fontSize: 26,\r\n letterSpacing: 0.5,\r\n },\r\n },\r\n shape: {\r\n borderRadius: 8,\r\n },\r\n props: {\r\n MuiTab: {\r\n disableRipple: true,\r\n },\r\n },\r\n mixins: {\r\n toolbar: {\r\n minHeight: 48,\r\n },\r\n },\r\n});\r\n\r\ntheme = {\r\n ...theme,\r\n overrides: {\r\n MuiAlert: {\r\n root: {\r\n marginTop: \"1rem\",\r\n },\r\n },\r\n MuiButton: {\r\n root: {\r\n minWidth: \"5rem\",\r\n height: \"1.5rem\",\r\n },\r\n contained: {\r\n color: Colors.White,\r\n borderRadius: \"0.2rem\",\r\n boxShadow: \"none\",\r\n marginRight: \".5rem\",\r\n minWidth: \"5rem\",\r\n height: \"1.5rem\",\r\n backgroundColor: Colors.VibrantBlue,\r\n \"&:active\": {\r\n boxShadow: \"none\",\r\n },\r\n \"&:hover\": {\r\n backgroundColor: Colors.VibrantBlueHover,\r\n },\r\n },\r\n label: {\r\n marginTop: \".2rem\",\r\n },\r\n containedSizeLarge: {\r\n height: \"2.5rem\",\r\n },\r\n containedSecondary: {\r\n color: Colors.White,\r\n backgroundColor: Colors.Spring,\r\n \"&:hover\": {\r\n backgroundColor: Colors.SpringHover,\r\n },\r\n },\r\n containedPrimary: {\r\n backgroundColor: Colors.MillimanBlue,\r\n \"&:hover\": {\r\n backgroundColor: Colors.MillimanBlueHover,\r\n },\r\n },\r\n text: {\r\n color: Colors.VibrantBlue,\r\n textTransform: \"none\",\r\n textDecoration: \"underline !important\",\r\n borderRadius: \"0.2rem\",\r\n },\r\n },\r\n MuiDataGrid: {\r\n root: {\r\n \"& .MuiDataGrid-cell:focus\": {\r\n outline: \"none\",\r\n },\r\n },\r\n },\r\n MuiDrawer: {\r\n paper: {\r\n backgroundColor: Colors.Charcoal,\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n },\r\n paperAnchorRight: {\r\n backgroundColor: Colors.CalculationsBackground,\r\n padding: \"1rem\",\r\n paddingTop: \"1.5rem\",\r\n },\r\n },\r\n MuiDialog: {\r\n paperWidthSm: {\r\n maxWidth: \"620px\",\r\n },\r\n },\r\n MuiFormControlLabel: {\r\n disabled: {\r\n color: Colors.Black,\r\n },\r\n },\r\n MuiSelect: {\r\n root: {\r\n backgroundColor: Colors.White,\r\n },\r\n },\r\n MuiTabs: {\r\n root: {\r\n borderBottom: \"1px solid #e8e8e8\",\r\n marginBottom: \"1rem\",\r\n },\r\n indicator: {\r\n height: 3,\r\n borderTopLeftRadius: 3,\r\n borderTopRightRadius: 3,\r\n backgroundColor: Colors.VibrantBlue,\r\n },\r\n },\r\n MuiTab: {\r\n root: {\r\n textTransform: \"none\",\r\n margin: \"0 16px\",\r\n minWidth: 0,\r\n padding: 0,\r\n [theme.breakpoints.up(\"md\")]: {\r\n padding: 0,\r\n minWidth: 0,\r\n },\r\n },\r\n },\r\n MuiOutlinedInput: {\r\n input: {\r\n backgroundColor: Colors.White,\r\n borderRadius: \"inherit\",\r\n padding: \".6rem\",\r\n },\r\n },\r\n MuiInputLabel: {\r\n outlined: {\r\n marginTop: \"-.5rem\",\r\n },\r\n },\r\n MuiIconButton: {\r\n root: {\r\n padding: theme.spacing(1),\r\n width: \"2.5rem\",\r\n height: \"2.5rem\",\r\n },\r\n colorPrimary: {\r\n color: Colors.MillimanBlue,\r\n },\r\n },\r\n MuiTooltip: {\r\n tooltip: {\r\n borderRadius: 4,\r\n fontSize: \"0.9rem\",\r\n },\r\n },\r\n MuiDivider: {\r\n root: {\r\n backgroundColor: \"#404854\",\r\n },\r\n },\r\n MuiListItem: {\r\n button: {\r\n \"&:hover\": {\r\n backgroundColor: Colors.NavMenuGrey,\r\n textDecoration: \"none !important\",\r\n },\r\n },\r\n },\r\n MuiListItemText: {\r\n primary: {\r\n fontWeight: theme.typography.fontWeightMedium,\r\n },\r\n },\r\n MuiListItemIcon: {\r\n root: {\r\n color: \"inherit\",\r\n marginRight: 0,\r\n \"& svg\": {\r\n fontSize: 20,\r\n },\r\n },\r\n },\r\n MuiAvatar: {\r\n root: {\r\n width: 32,\r\n height: 32,\r\n },\r\n },\r\n },\r\n};\r\n\r\nconst drawerWidth = 256;\r\nconst useStyles = makeStyles({\r\n \"@global\": {\r\n body: {\r\n background: Colors.NormalBackground,\r\n },\r\n \"input::-ms-clear, input::-ms-reveal\": {\r\n display: \"none\",\r\n },\r\n \".no-print\": {\r\n \"@media print\": {\r\n display: \"none\",\r\n },\r\n },\r\n },\r\n root: {\r\n display: \"flex\",\r\n minHeight: \"100vh\",\r\n },\r\n drawer: {\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n },\r\n },\r\n app: {\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n main: {\r\n flex: 1,\r\n padding: theme.spacing(6, 4),\r\n background: Colors.NormalBackground,\r\n },\r\n footer: {\r\n background: Colors.NormalBackground,\r\n },\r\n});\r\n\r\nexport const Layout: FC<{ children: JSX.Element[] | JSX.Element }> = ({\r\n children,\r\n}) => {\r\n const classes = useStyles();\r\n const rootContext = useContext(RootContext);\r\n const [mobileOpen, setMobileOpen] = React.useState(false);\r\n const { pathname } = useLocation();\r\n const inBackupCalculations = pathname.startsWith(\"/BackupCalculations\");\r\n const showHeader =\r\n !!rootContext.user &&\r\n !rootContext.user.needsPasswordChange &&\r\n !inBackupCalculations;\r\n const handleDrawerToggle = () => {\r\n setMobileOpen(!mobileOpen);\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n {showHeader && (\r\n \r\n )}\r\n
\r\n
\r\n {showHeader ? (\r\n
{children}
\r\n ) : (\r\n children\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import \"@fontsource/roboto\";\r\nimport Slide from \"@material-ui/core/Slide\";\r\nimport Snackbar from \"@material-ui/core/Snackbar\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\nimport { runInAction } from \"mobx\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect } from \"react\";\r\nimport { Route, Switch, useHistory } from \"react-router\";\r\n\r\nimport TimeoutDialog from \"./common/TimeoutDialog\";\r\nimport BulkUpdate from \"./components/Admin/BulkUpdate\";\r\nimport CreateCalculation from \"./components/Admin/CreateCalculation\";\r\nimport CreateMember from \"./components/Admin/CreateMember\";\r\nimport ManageMember from \"./components/Admin/ManageMember\";\r\nimport Spreadsheet from \"./components/Admin/Spreadsheet\";\r\nimport BenefitOptions from \"./components/BenefitOptions\";\r\nimport Calculation from \"./components/Calculation\";\r\nimport { Export } from \"./components/Calculation/Export\";\r\nimport Home from \"./components/Home\";\r\nimport Login, { ForgotPassword } from \"./components/Login\";\r\nimport ResetPassword from \"./components/Login/ResetPassword\";\r\nimport UpdatePassword from \"./components/Login/UpdatePassword\";\r\nimport RepaymentOfContributions from \"./components/RepaymentOfContributions\";\r\nimport { Layout } from \"./Layout\";\r\nimport { AlertContext } from \"./state/Alert\";\r\nimport { RootContext } from \"./state/root\";\r\nimport { User } from \"./state/User\";\r\n\r\nexport default observer(() => {\r\n const rootContext = useContext(RootContext);\r\n const alertContext = useContext(AlertContext);\r\n const history = useHistory();\r\n const alert = alertContext.currentAlert;\r\n\r\n useEffect(() => {\r\n // tslint:disable-next-line: no-floating-promises\r\n (async () => {\r\n if (!rootContext.user) {\r\n const user = await new User().load();\r\n if (user) {\r\n runInAction(() => {\r\n rootContext.user = user;\r\n });\r\n }\r\n }\r\n })();\r\n\r\n if (rootContext.user?.needsPasswordChange) {\r\n history.push(`/Login/UpdatePassword`);\r\n }\r\n }, [rootContext, rootContext.user, history]);\r\n\r\n return (\r\n \r\n <>\r\n {rootContext.user && !rootContext.user.needsPasswordChange ? (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {alert && (\r\n alertContext.showAlert()}\r\n >\r\n alertContext.showAlert()}\r\n severity={alert.type}\r\n >\r\n {alert.content}\r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n});\r\n","import MomentUtils from \"@date-io/moment\";\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport {\r\n faCalculator,\r\n faDonate,\r\n faHome,\r\n faList,\r\n faPaperPlane,\r\n faPencilAlt,\r\n faQuestion,\r\n faQuestionCircle,\r\n faSignOutAlt,\r\n faSquare,\r\n faTools,\r\n faTrash,\r\n faTrashAlt,\r\n faUser,\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\nimport MuiPickersUtilsProvider from \"@material-ui/pickers/MuiPickersUtilsProvider\";\r\nimport moment from \"moment\";\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\n\r\nimport App from \"./App\";\r\n\r\nlibrary.add(\r\n faCalculator,\r\n faDonate,\r\n faHome,\r\n faList,\r\n faPaperPlane,\r\n faPencilAlt,\r\n faQuestion,\r\n faQuestionCircle,\r\n faSignOutAlt,\r\n faSquare,\r\n faTools,\r\n faTrash,\r\n faTrashAlt,\r\n faUser\r\n);\r\nconst baseUrl = document\r\n .getElementsByTagName(\"base\")[0]\r\n .getAttribute(\"href\") as string;\r\nconst rootElement = document.getElementById(\"root\");\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n rootElement\r\n);\r\n"],"sourceRoot":""}