{"version":3,"sources":["stores/closeModal/closeModalActions.ts","utils/contentUtils.ts","components/shared/CloseModal/CloseModal.tsx","stores/confirmationModal/confirmationModalActions.ts","stores/closeModal/closeModalReducer.ts","stores/closeModal/closeModalSelector.ts","containers/CloseModalContainer.ts","components/shared/ConfirmationModal/ConfirmationModal.tsx","stores/form/formActions.ts","stores/confirmationModal/confirmationModalReducer.ts","stores/confirmationModal/confirmationModalSelector.ts","stores/visibility/visibilityActions.ts","containers/ConfirmationModal.ts","constants.ts","utils/animationFrame.ts","utils/scroller.ts","components/shared/Blade/Blade.tsx","constants/analyticsConstants.ts","components/Blades/GetStarted/GetStarted.tsx","containers/Blades/GetStartedContainer.ts","utils/valueUtil.ts","components/Blades/YourDetails/YourDetails.tsx","stores/form/formSelector.ts","containers/Blades/YourDetailsContainer.ts","components/Blades/AccountDetails/AccountDetails.tsx","containers/Blades/AccountDetailsContainer.ts","components/shared/SuccessPage/SuccessPage.tsx","components/shared/ErrorPage/ErrorPage.tsx","components/Page/Page.tsx","containers/PageContainer.ts","components/shared/Header/Header.tsx","containers/HeaderContainer.ts","components/shared/Footer/Footer.tsx","App.tsx","utils/objectUtils.ts","stores/visibility/visibilitySelector.ts","stores/visibility/visibilityLogic.ts","stores/visibility/visibilitySaga.ts","services/apiService.ts","stores/form/formSaga.ts","stores/rootSaga.ts","stores/visibility/visibilityReducer.ts","stores/form/formReducer.ts","stores/index.ts","index.tsx"],"names":["CloseModalActionTypes","content","CloseModal","isOpen","closeModalClose","closeModal","closeOnClick","isCentered","id","className","heading","href","goToHomePageUrl","variant","yesBtnText","onClick","noBtnText","confirmationModalActionTypes","closeModalActions","open","createAction","Open","close","Close","defaultCloseModalState","closeModalReducer","produce","state","action","type","getCloseModalIsOpen","createSelector","mapDispatchToProps","connect","ConfirmationModal","confirmationModalClose","confirmationModalData","confirmationModalDataSubmit","iconClassName","screenreader","symbol","confirmModal","accountName","bsb","accountNumber","btnTxt","editDetails","FormActionTypes","confirmationModalActions","defaultconfirmationModalState","formData","confirmationModalReducer","getconfirmationModalIsOpen","confirmationModal","VisibilityActionTypes","formActions","updated","Updated","validated","Validated","submited","Submited","loading","Loading","loaded","Loaded","inValidRemId","InvalidRemID","validRemId","ValidRemID","success","LoadSuccess","failure","LoadFailure","formSData","formState","BLADES","STYLES","animationFrame","requestAnimationFrame","window","webkitRequestAnimationFrame","setTimeout","callback","scrollToAndFocusId","destinationBlade","document","getElementById","bladeYPosition","offsetTop","scrollTargetY","loopFunction","completeCallback","scrollY","pageYOffset","documentElement","scrollTop","body","speed","currentTime","time","Math","max","min","abs","tick","loopTime","segments","pow","scrollTo","scrollToY","focusBladeHeading","parent","headingElement","querySelector","setAttribute","focus","bladeFocusableElement","Blade","children","shouldVerticalAlign","hasImage","visibility","isGoToPreviousBlade","isLoaded","goToPreviousBladeClick","bladeRef","useRef","useEffect","current","classNames","ref","previousScreen","previousLabel","analyticsConstants","GetStarted","completed","title","paragraphs","btnText","src","alt","width","dangerouslySetInnerHTML","sanitize","visibilityActions","bladeComplete","BladeComplete","bladesUpdate","BladesUpdate","bladeChangeFocus","BladeChangeFocus","bladeChangeDisplay","BladeChangeDisplay","validNameRegex","value","test","yourDetails","focusDisplay","formInitialState","formUpdated","bladeFocus","remediationIdLabel","remediationHelpText","remediationErrorMsg","lastNameLabel","lastNameErrorMsg","dobLabel","dobHelpText","dobErrorMsg","remediationInvalidMsg","maxDateErrorMsg","remediationId","lastName","dob","remediationIdIsValid","lastNameIsValid","dobIsValid","validateMaxDob","isValidRemId","handleRemErrorMsg","formatDate","dateString","split","map","Number","day","month","year","formattedDay","formattedMonth","handleRefresh","helptext","label","isValid","maxLength","errormessage","name","toUpperCase","onChange","event","validRemIDRegex","onBlur","e","v","formattedDate","undefined","isValidDate","Date","userData","length","trim","isConsent","handleValidate","getFormState","closeModalOpen","toblade","currentBlade","accountDetails","confirmationModalOpen","formSubmited","accountInfoTitle","accountInfoDesc","accountInfoDesc2","accountNameLabel","accountNameErrorMsg","bsbLabel","bsbErrorMsg","accountNumberLabel","accountNumberErrorMsg","consentLabel","consentErrorMsg","accountDetailsDesc","accountNameHelpText","accountNameIsValid","bsbIsValid","accountNumberIsValid","isLoading","handleNumberChange","formatNumber","filterData","reverse","join","checked","isVisible","SuccessPage","click","successTitle","successDescription","ErrorPage","analyticsRef","error","errorTitle","errorDescription","Page","bladeWithFocus","Object","keys","forEach","bladeName","hasFocus","isSuccess","isFailure","isPageVisible","GetStartedContainer","display","YourDetailsContainer","AccountDetailsContainer","Header","closeText","header","buttonAttributes","Footer","fluid","App","copyBlades","Visibility","compareBladeObjects","v1","v2","updatedBlades","required","getVisibility","updateDisplayAndFocus","completedBlade","bladeList","bladeNames","bladeIndex","indexOf","nextBlades","slice","displayImmediateBlade","focusSet","blade","bladeCompleteSaga","watchForCompletedBlade","visbilitySaga","select","payload","put","takeLatest","all","apiService","data","axios","post","userFetch","workGetUsersFetch","formSubmitSaga","call","response","status","errorStatusCode","checkValidRemId","insertStatus","rootSaga","defaultBlade","defaultVisibilityState","visibilityReducer","updatedBladeNames","blades","initialState","formReducer","enableES5","rootReducer","combineReducers","sagaMiddleware","createSagaMiddleware","configureStore","store","createStore","applyMiddleware","run","RenderApp","clientData","JSON","parse","cmsContent","fallbackContent","initContent","Root","ReactDOM","render"],"mappings":"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","file":"static/js/main.95d67dc7.chunk.js","sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\r\nimport { ActionType, createAction } from 'typesafe-actions';\r\n\r\nexport enum CloseModalActionTypes {\r\n Open = '[CloseModal] Open',\r\n Close = '[CloseModal] Close',\r\n}\r\n\r\nexport const closeModalActions = {\r\n open: createAction(CloseModalActionTypes.Open)(),\r\n close: createAction(CloseModalActionTypes.Close)(),\r\n};\r\n\r\nexport type CloseModalAction = ActionType;\r\n","/* eslint-disable import/no-mutable-exports, @typescript-eslint/no-unsafe-return, arrow-body-style */\r\n\r\nimport fallbackContent from '../aemContent/fallbackContent.json';\r\n\r\ninterface Content {\r\n [key: string]: any;\r\n}\r\n\r\nexport let content: Content = {};\r\n\r\nexport const initContent = () => {\r\n const data = (window as any)?.clientData;\r\n content = JSON.parse((window as any)?.clientData?.cmsContent) || fallbackContent.cmsContent;\r\n};\r\n","/* eslint-disable arrow-body-style */\r\nimport React from 'react';\r\nimport { ButtonAction, Modal } from '@honeycomb-npm/honeycomb-react';\r\nimport { content } from '../../../utils/contentUtils';\r\n\r\nimport './CloseModal.scss';\r\n\r\nexport interface Props {\r\n isOpen: boolean;\r\n closeModalClose: () => void;\r\n}\r\n\r\nconst CloseModal = ({ isOpen, closeModalClose }: Props) => {\r\n return (\r\n \r\n <>\r\n

\r\n {content.closeModal.heading}\r\n

\r\n

{content.closeModal.content}

\r\n \r\n {content.closeModal.yesBtnText}\r\n \r\n \r\n {content.closeModal.noBtnText}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CloseModal;\r\n","/* eslint-disable import/no-extraneous-dependencies */\r\nimport { ActionType, createAction } from 'typesafe-actions';\r\n\r\nexport enum confirmationModalActionTypes {\r\n Open = '[confirmationModal] Open',\r\n Close = '[confirmationModal] Close',\r\n}\r\n\r\nexport const confirmationModalActions = {\r\n open: createAction(confirmationModalActionTypes.Open)(),\r\n close: createAction(confirmationModalActionTypes.Close)(),\r\n};\r\n\r\nexport type confirmationModalAction = ActionType;\r\n","/* eslint-disable import/no-extraneous-dependencies */\r\nimport produce from 'immer';\r\nimport { CloseModalAction, CloseModalActionTypes } from './closeModalActions';\r\n\r\nexport interface CloseModalState {\r\n isOpen: boolean;\r\n}\r\n\r\nexport const defaultCloseModalState: CloseModalState = {\r\n isOpen: false,\r\n};\r\n\r\nexport const closeModalReducer = produce(\r\n (state: CloseModalState = defaultCloseModalState, action: CloseModalAction) => {\r\n switch (action.type) {\r\n case CloseModalActionTypes.Open: {\r\n state.isOpen = true;\r\n return state;\r\n }\r\n\r\n case CloseModalActionTypes.Close: {\r\n state.isOpen = false;\r\n return state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n },\r\n);\r\n\r\nexport const closeModalOpen = (state: CloseModalState) => state.isOpen;\r\n","import { createSelector } from 'reselect';\r\nimport { closeModalOpen } from './closeModalReducer';\r\nimport { RootState } from '..';\r\n\r\nexport const getCloseModalState = (state: RootState) => state.closeModal;\r\n\r\nexport const getCloseModalIsOpen = createSelector(getCloseModalState, closeModalOpen);\r\n","/* eslint-disable arrow-body-style */\r\nimport { connect } from 'react-redux';\r\nimport CloseModal from '../components/shared/CloseModal/CloseModal';\r\nimport { RootState } from '../stores';\r\nimport { closeModalActions } from '../stores/closeModal/closeModalActions';\r\nimport { getCloseModalIsOpen } from '../stores/closeModal/closeModalSelector';\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n isOpen: getCloseModalIsOpen(state),\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n closeModalClose: closeModalActions.close,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CloseModal);\r\n","/* eslint-disable arrow-body-style */\r\nimport React from 'react';\r\nimport {\r\n Modal,\r\n ButtonActionEmphasis,\r\n Icon,\r\n ButtonActionSubtle,\r\n} from '@honeycomb-npm/honeycomb-react';\r\nimport { content } from '../../../utils/contentUtils';\r\n\r\nimport './ConfirmationModal.scss';\r\n\r\nexport interface Props {\r\n isOpen: boolean;\r\n confirmationModalClose: () => void;\r\n confirmationModalData: any;\r\n confirmationModalDataSubmit: (formInitialState: any) => void;\r\n}\r\n\r\nconst ConfirmationModal = ({\r\n isOpen,\r\n confirmationModalClose,\r\n confirmationModalData,\r\n confirmationModalDataSubmit,\r\n}: Props) => {\r\n const handleValidate = () => {\r\n confirmationModalDataSubmit(confirmationModalData);\r\n confirmationModalClose();\r\n };\r\n return (\r\n \r\n <>\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{content.confirmModal.heading}

\r\n
\r\n
\r\n
\r\n
\r\n {content.confirmModal.content}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {content.confirmModal.accountName}\r\n \r\n {confirmationModalData.accountName}\r\n \r\n
\r\n
\r\n
\r\n
\r\n {content.confirmModal.bsb}\r\n {confirmationModalData.bsb}\r\n
\r\n
\r\n
\r\n
\r\n {content.confirmModal.accountNumber}\r\n \r\n {confirmationModalData.accountNumber}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {content.confirmModal.btnTxt}\r\n \r\n \r\n
\r\n {content.confirmModal.editDetails}\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 ConfirmationModal;\r\n","/* eslint-disable import/no-extraneous-dependencies */\r\nimport { ActionType, createAction } from 'typesafe-actions';\r\nimport { FormState } from './formReducer';\r\n\r\nexport enum FormActionTypes {\r\n Updated = '[Form] Updated',\r\n Validated = '[Form] Validated',\r\n Loading = '[Form] Loading',\r\n Loaded = '[Form] Loaded',\r\n Submited = '[Form] Submited',\r\n LoadSuccess = '[Form] Success',\r\n LoadFailure = '[Form] Failure',\r\n InvalidRemID = '[Form] InvalidRemID',\r\n ValidRemID = '[Form] ValidRemID',\r\n}\r\n\r\nexport const formActions = {\r\n updated: createAction(FormActionTypes.Updated)(),\r\n validated: createAction(FormActionTypes.Validated)(),\r\n submited: createAction(FormActionTypes.Submited)(),\r\n loading: createAction(FormActionTypes.Loading)(),\r\n loaded: createAction(FormActionTypes.Loaded)(),\r\n inValidRemId: createAction(FormActionTypes.InvalidRemID)(),\r\n validRemId: createAction(FormActionTypes.ValidRemID)(),\r\n success: createAction(FormActionTypes.LoadSuccess)(),\r\n failure: createAction(FormActionTypes.LoadFailure)(),\r\n};\r\n\r\nexport type FormAction = ActionType;\r\n","/* eslint-disable import/no-extraneous-dependencies */\r\nimport produce from 'immer';\r\nimport { confirmationModalAction, confirmationModalActionTypes } from './confirmationModalActions';\r\nimport { FormState } from '../form/formReducer';\r\n\r\nexport interface confirmationModalState {\r\n isOpen: boolean;\r\n formData: string;\r\n}\r\n\r\nexport const defaultconfirmationModalState: confirmationModalState = {\r\n isOpen: false,\r\n formData: '',\r\n};\r\n\r\nexport const confirmationModalReducer = produce(\r\n (state: confirmationModalState = defaultconfirmationModalState, action: confirmationModalAction) => {\r\n switch (action.type) {\r\n case confirmationModalActionTypes.Open: {\r\n state.isOpen = true;\r\n return state;\r\n }\r\n\r\n case confirmationModalActionTypes.Close: {\r\n state.isOpen = false;\r\n return state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n },\r\n);\r\n\r\nexport const confirmationModalOpen = (state: confirmationModalState) => state.isOpen;\r\n\r\nexport const confirmationModalData = (state: confirmationModalState) => state.formData;\r\n","import { createSelector } from 'reselect';\r\nimport { confirmationModalOpen } from './confirmationModalReducer';\r\nimport { RootState } from '..';\r\n\r\nexport const getconfirmationModalState = (state: RootState) => state.confirmationModal;\r\n\r\nexport const getconfirmationModalStateData = (state: RootState) => state.formState;\r\n\r\nexport const getconfirmationModalIsOpen = createSelector(getconfirmationModalState, confirmationModalOpen);\r\n","/* eslint-disable import/no-extraneous-dependencies */\r\nimport { ActionType, createAction } from 'typesafe-actions';\r\nimport { VisibilityState } from './visibilityReducer';\r\n\r\nexport enum VisibilityActionTypes {\r\n BladeComplete = '[Visibility] Blade Complete',\r\n BladesUpdate = '[Visibility] Blades Update',\r\n BladeChangeFocus = '[Visibility] Blades Change Focus',\r\n BladeChangeDisplay = '[Visibility] Blades Change Display',\r\n}\r\n\r\nexport const visibilityActions = {\r\n bladeComplete: createAction(VisibilityActionTypes.BladeComplete)(),\r\n bladesUpdate: createAction(VisibilityActionTypes.BladesUpdate)(),\r\n bladeChangeFocus: createAction(VisibilityActionTypes.BladeChangeFocus)(),\r\n bladeChangeDisplay: createAction(VisibilityActionTypes.BladeChangeDisplay)(),\r\n};\r\n\r\nexport type VisibilityAction = ActionType;\r\n","/* eslint-disable arrow-body-style */\r\nimport { connect } from 'react-redux';\r\nimport ConfirmationModal from '../components/shared/ConfirmationModal/ConfirmationModal';\r\nimport { RootState } from '../stores';\r\nimport { confirmationModalActions } from '../stores/confirmationModal/confirmationModalActions';\r\nimport { getconfirmationModalIsOpen } from '../stores/confirmationModal/confirmationModalSelector';\r\nimport { formActions } from '../stores/form/formActions';\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n isOpen: getconfirmationModalIsOpen(state),\r\n confirmationModalData: state.formState.formData,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n confirmationModalClose: confirmationModalActions.close,\r\n confirmationModalDataSubmit: (formSData: any) => formActions.submited(formSData),\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ConfirmationModal);\r\n","export const BLADES = {\r\n getStarted: 'getStarted',\r\n yourDetails: 'yourDetails',\r\n accountDetails: 'accountDetails',\r\n completePage: 'complete',\r\n};\r\n\r\nexport const STYLES = {\r\n headerHeight: 80,\r\n};\r\n","/* eslint-disable @typescript-eslint/no-unsafe-return */\r\n// https://stash.odp.cba/projects/DP/repos/homeinsuranceclaims/browse/src/app/\r\n// HomeInsuranceClaims.Web.Frontend/src/scripts/utils/animationFrame.ts\r\n\r\nconst getAnimationFrame = (): ((callback: FrameRequestCallback) => number) => {\r\n // Check if requestAnimationFrame can be used for the browser\r\n // Otherwise, default to use a timeout\r\n if (typeof requestAnimationFrame !== 'undefined') {\r\n return requestAnimationFrame;\r\n }\r\n if (typeof window !== 'undefined' && typeof window.requestAnimationFrame !== 'undefined') {\r\n return window.requestAnimationFrame;\r\n }\r\n\r\n // Webkit animation\r\n if (typeof (window as any).webkitRequestAnimationFrame !== 'undefined') {\r\n return (window as any).webkitRequestAnimationFrame;\r\n }\r\n if (\r\n typeof window !== 'undefined'\r\n && typeof (window as any).webkitRequestAnimationFrame !== 'undefined'\r\n ) {\r\n return (window as any).webkitRequestAnimationFrame;\r\n }\r\n\r\n // Use timeout\r\n if (typeof window !== 'undefined' && typeof window.setTimeout !== 'undefined') {\r\n return (callback: FrameRequestCallback): number => window.setTimeout(callback, 1000 / 60);\r\n }\r\n\r\n // Unable to handle animation\r\n return (callback: FrameRequestCallback): number => {\r\n callback(0);\r\n return 1;\r\n };\r\n};\r\n\r\nexport const animationFrame = getAnimationFrame();\r\n","/* eslint-disable @typescript-eslint/no-inferrable-types, no-restricted-properties, no-multi-assign */\r\n// https://stash.odp.cba/projects/DP/repos/homeinsuranceclaims/browse/src/app/\r\n// HomeInsuranceClaims.Web.Frontend/src/scripts/utils/scroller.ts\r\n\r\nimport { STYLES } from '../constants';\r\nimport { animationFrame } from './animationFrame';\r\n\r\n// Smooth scroll function\r\nexport const scrollToY = (\r\n scrollTargetY: number = 0,\r\n loopFunction: (recursion: () => void) => void,\r\n completeCallback?: () => void,\r\n): void => {\r\n const scrollY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n const speed = 200;\r\n let currentTime = 0;\r\n const time = Math.max(0.1, Math.min(Math.abs(scrollY - scrollTargetY) / speed, 0.8));\r\n\r\n // add animation loop\r\n function tick() {\r\n if (typeof loopFunction !== 'undefined') {\r\n currentTime += 1 / 60;\r\n\r\n let loopTime = currentTime / time;\r\n const halfLoop = (loopTime /= 0.5);\r\n let segments = 0;\r\n if (halfLoop < 1) {\r\n segments = 0.5 * Math.pow(loopTime, 5);\r\n } else {\r\n segments = 0.5 * (Math.pow(loopTime - 2, 5) + 2);\r\n }\r\n\r\n if (loopTime < 1) {\r\n loopFunction(tick); // use requestAnimationFrame\r\n window.scrollTo(0, scrollY + (scrollTargetY - scrollY) * segments);\r\n } else {\r\n window.scrollTo(0, scrollTargetY);\r\n\r\n if (completeCallback) {\r\n completeCallback();\r\n }\r\n }\r\n } else {\r\n // Use regular scroll if the animation function is not supported\r\n window.scrollTo(0, scrollTargetY);\r\n\r\n if (completeCallback) {\r\n completeCallback();\r\n }\r\n }\r\n }\r\n\r\n // call the loop once to get started\r\n tick();\r\n};\r\n\r\nexport const scrollToAndFocusId = (id: string): void => {\r\n const destinationBlade = document.getElementById(`blade-${id}`);\r\n if (!destinationBlade) {\r\n return;\r\n }\r\n\r\n let bladeYPosition = destinationBlade.offsetTop;\r\n\r\n // Remove navigation header height\r\n bladeYPosition = Math.max(0, bladeYPosition - STYLES.headerHeight);\r\n\r\n // Scroll to element with id\r\n scrollToY(bladeYPosition, animationFrame, () => {\r\n // Set focus once animation has finished\r\n focusBladeHeading(destinationBlade);\r\n });\r\n};\r\n\r\nexport const scrollToTop = () => {\r\n window.scrollTo(0, 0);\r\n};\r\n\r\nexport const focusBladeHeading = (parent: HTMLElement | null) => {\r\n if (!parent) {\r\n return;\r\n }\r\n\r\n const headingSelector = 'h1, h2, h3, h4, h5, h6';\r\n const headingElement = parent.querySelector(headingSelector) as HTMLElement;\r\n\r\n if (headingElement) {\r\n headingElement.setAttribute('tabindex', '-1');\r\n headingElement.focus();\r\n } else {\r\n // Fallback when no heading on the blade\r\n const bladeFocusableElement = parent.querySelector(\r\n 'input:not([disabled]), select:not([disabled]), button:not([disabled])',\r\n ) as HTMLElement;\r\n if (bladeFocusableElement) {\r\n bladeFocusableElement.focus();\r\n }\r\n }\r\n};\r\n","/* eslint-disable import/no-extraneous-dependencies, consistent-return */\r\nimport React, { ReactNode, useEffect, useRef } from 'react';\r\nimport classNames from 'classnames';\r\nimport { Icon, ButtonActionSubtle } from '@honeycomb-npm/honeycomb-react';\r\nimport { content } from '../../../utils/contentUtils';\r\nimport { focusBladeHeading } from '../../../utils/scroller';\r\n\r\nimport './Blade.scss';\r\n\r\nexport interface Props {\r\n id: string;\r\n children: ReactNode;\r\n shouldVerticalAlign: boolean;\r\n hasImage?: boolean;\r\n className?: string;\r\n visibility: boolean;\r\n isGoToPreviousBlade?: boolean;\r\n isLoaded?: boolean; // This state is focussing focussing blade manually when the spinner is hidden\r\n goToPreviousBladeClick?: (blade: string) => void;\r\n}\r\n\r\nconst Blade = ({\r\n id,\r\n className,\r\n children,\r\n shouldVerticalAlign,\r\n hasImage = false,\r\n visibility,\r\n isGoToPreviousBlade = true,\r\n isLoaded = false,\r\n goToPreviousBladeClick,\r\n}: Props) => {\r\n const bladeRef = useRef(null);\r\n useEffect(() => {\r\n // When loader is hidden focus the blade manually\r\n if (isLoaded) {\r\n return focusBladeHeading(bladeRef.current);\r\n }\r\n }, [isLoaded, bladeRef]);\r\n\r\n if (!visibility) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {isGoToPreviousBlade && (\r\n
\r\n
\r\n \r\n \r\n {content.previousScreen.previousLabel}\r\n \r\n \r\n
\r\n
\r\n )}\r\n {children}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default Blade;\r\n","export const analyticsConstants = {\r\n ofiLanding: 'ofi-landing-page',\r\n ofiYourDetails: 'ofi-your-details',\r\n ofiAccountInfo: 'ofi-account-info',\r\n ofiSuccess: 'ofi-success',\r\n ofiError: 'ofi-error',\r\n};\r\n","/* eslint-disable react/jsx-boolean-value */\r\nimport React from 'react';\r\nimport {\r\n ButtonAction, sanitize,\r\n} from '@honeycomb-npm/honeycomb-react';\r\nimport Blade from '../../shared/Blade/Blade';\r\nimport { BLADES } from '../../../constants';\r\nimport { content } from '../../../utils/contentUtils';\r\nimport { analyticsConstants } from '../../../constants/analyticsConstants';\r\n\r\nimport './GetStarted.scss';\r\n\r\nexport interface Props {\r\n visibility: boolean;\r\n completed: (blade: string) => void;\r\n}\r\n\r\nconst GetStarted = ({\r\n visibility, completed,\r\n}: Props) => {\r\n const {\r\n title, paragraphs, btnText,\r\n } = content[BLADES.getStarted];\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n

{title}

\r\n
\r\n
\r\n completed(BLADES.getStarted)}\r\n variant=\"default\"\r\n >\r\n {btnText}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default GetStarted;\r\n","/* eslint-disable arrow-body-style */\r\nimport { connect } from 'react-redux';\r\nimport GetStarted from '../../components/Blades/GetStarted/GetStarted';\r\nimport { visibilityActions } from '../../stores/visibility/visibilityActions';\r\n\r\nconst mapDispatchToProps = {\r\n completed: visibilityActions.bladeComplete,\r\n};\r\n\r\nexport default connect(null, mapDispatchToProps)(GetStarted);\r\n","/* eslint-disable no-confusing-arrow, @typescript-eslint/ban-types */\r\nexport const isDefined = (value: any): boolean => typeof value !== 'undefined';\r\n\r\nexport const isNull = (value: any): boolean => value === null;\r\n\r\nexport const isObject = (value: any): boolean => value !== null && typeof value === 'object';\r\n\r\nexport const isEmpty = (value: any): boolean => value === '';\r\n\r\nexport const isValidNumber = (value: any): boolean => /^\\d+$/.test(value);\r\n\r\nexport const validNameRegex = (value: string): boolean => /[^a-zA-Z\\s]$/.test(value);\r\n\r\nexport const validbsbRegex = (value: string): boolean => /^\\d{6}$/.test(value);\r\n\r\nexport const validRemIDRegex = (value: string): boolean => /[^a-zA-Z0-9]$/.test(value);\r\n\r\nexport const validDateRegex = (value: string): boolean => /^(0[1-9]|[12][0-9]|3[01])\\/(0[1-9]|1[012])\\/(19|20)\\d\\d$/.test(value);\r\n","/* eslint-disable react/jsx-boolean-value, react-hooks/rules-of-hooks,\r\n@typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-call,\r\n@typescript-eslint/no-unsafe-return */\r\nimport React, { useState } from 'react';\r\nimport {\r\n TextField, ButtonAction, DateField, Icon, sanitize, AutoCompleteDateField,\r\n FormatDate,\r\n} from '@honeycomb-npm/honeycomb-react';\r\nimport Blade from '../../shared/Blade/Blade';\r\nimport { BLADES } from '../../../constants';\r\nimport { content } from '../../../utils/contentUtils';\r\nimport { validRemIDRegex, validNameRegex, validDateRegex } from '../../../utils/valueUtil';\r\nimport { analyticsConstants } from '../../../constants/analyticsConstants';\r\nimport './YourDetails.scss';\r\n\r\nexport interface Props {\r\n visibility: boolean;\r\n closeModalOpen: () => void;\r\n focusDisplay: (blade: string) => void;\r\n completed: (blade: string) => void;\r\n formInitialState: any;\r\n formUpdated: (formInitialState: any) => void;\r\n validRemId: (formInitialState: any) => void;\r\n bladeFocus: (blades: any) => void;\r\n}\r\n\r\nconst yourDetails = ({\r\n visibility, focusDisplay, completed, formInitialState, formUpdated, bladeFocus, validRemId,\r\n}: Props) => {\r\n const {\r\n title, remediationIdLabel, remediationHelpText, remediationErrorMsg, lastNameLabel,\r\n lastNameErrorMsg, dobLabel, dobHelpText, dobErrorMsg, btnText, remediationInvalidMsg, maxDateErrorMsg,\r\n } = content[BLADES.yourDetails];\r\n\r\n const {\r\n remediationId,\r\n lastName,\r\n dob,\r\n remediationIdIsValid,\r\n lastNameIsValid,\r\n dobIsValid,\r\n validateMaxDob,\r\n } = formInitialState.formData;\r\n\r\n const { isValidRemId } = formInitialState;\r\n\r\n const handleRemErrorMsg = isValidRemId ? remediationErrorMsg : remediationInvalidMsg;\r\n\r\n const handleRemId = (event:any, value: string) => {\r\n if (!validRemIDRegex(value)) {\r\n formUpdated({\r\n ...formInitialState.formData,\r\n [event]: value.toUpperCase(),\r\n [`${event}IsValid`]: true,\r\n });\r\n }\r\n if (!isValidRemId) {\r\n validRemId(true);\r\n }\r\n };\r\n\r\n const handleChange = (e:any, v:any) => {\r\n if (!validNameRegex(v)) {\r\n formUpdated({ ...formInitialState.formData, [e]: v, [`${e}IsValid`]: true });\r\n }\r\n };\r\n\r\n const isValidDate = (day: number, month: number, year: number) => {\r\n let isValid = false;\r\n if (day === undefined || month === undefined || year === undefined) {\r\n return false;\r\n }\r\n\r\n if (month < 1 || month > 12 || day < 1 || day > 31) {\r\n return false;\r\n }\r\n\r\n if (month === 2) {\r\n if (year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)) {\r\n // Leap year\r\n isValid = day <= 29;\r\n } else {\r\n // Not a leap year\r\n isValid = day <= 28;\r\n }\r\n } else if (month === 4 || month === 6 || month === 9 || month === 11) {\r\n // April, June, September, November\r\n isValid = day <= 30;\r\n } else {\r\n // All other months\r\n isValid = day <= 31;\r\n }\r\n return isValid;\r\n };\r\n\r\n const formatDate = (dateString: string): string => {\r\n const [day, month, year] = dateString.split('/').map(Number);\r\n const formattedDay = day < 10 ? `0${day}` : `${day}`;\r\n const formattedMonth = month < 10 ? `0${month}` : `${month}`;\r\n return `${formattedDay}/${formattedMonth}/${year}`;\r\n };\r\n\r\n const handleDateChange = (e: any, v:any) => {\r\n const formattedDate = formatDate(v);\r\n\r\n if (validDateRegex(formattedDate)) {\r\n const [day, month, year] = v.split('/').map(Number); // Convert to numbers\r\n if (!isValidDate(day, month, year)) {\r\n // Invalid day for the given month and year\r\n formUpdated(\r\n {\r\n ...formInitialState.formData, dob: v, dobIsValid: false, validateMaxDob: false,\r\n },\r\n );\r\n } else {\r\n const date = new Date(year, month - 1, day);\r\n if (date > new Date()) {\r\n // The date is in the future\r\n formUpdated({\r\n ...formInitialState.formData, dob: v, dobIsValid: false, validateMaxDob: true,\r\n });\r\n } else {\r\n formUpdated(\r\n {\r\n ...formInitialState.formData, dob: v, dobIsValid: true, validateMaxDob: false,\r\n },\r\n );\r\n if (formInitialState.formData.dob !== v) {\r\n handleRefresh();\r\n }\r\n }\r\n }\r\n } else {\r\n handleRefresh();\r\n formUpdated(\r\n {\r\n ...formInitialState.formData, dob: v, dobIsValid: false, validateMaxDob: false,\r\n },\r\n );\r\n }\r\n };\r\n\r\n const handleValidate = () => {\r\n let userData = formInitialState.formData;\r\n\r\n if (!remediationId || remediationId.length < 11) {\r\n userData = { ...userData, remediationIdIsValid: false };\r\n }\r\n if (!lastName.trim()) {\r\n userData = { ...userData, lastNameIsValid: false };\r\n }\r\n if (!dob) {\r\n userData = { ...userData, dobIsValid: false, validateMaxDob: false };\r\n }\r\n if (userData.dobIsValid) {\r\n userData = { ...userData, dob: formatDate(dob) };\r\n }\r\n\r\n formUpdated({\r\n ...formInitialState.formData,\r\n ...userData,\r\n accountName: '',\r\n bsb: '',\r\n accountNumber: '',\r\n isConsent: null,\r\n });\r\n if (userData.remediationIdIsValid && userData.lastNameIsValid && userData.dobIsValid && !userData.validateMaxDob && isValidRemId) {\r\n completed(BLADES.yourDetails);\r\n }\r\n };\r\n\r\n const handleNext = () => {\r\n handleValidate();\r\n };\r\n\r\n const handleRefresh = () => {\r\n bladeFocus(BLADES.yourDetails);\r\n };\r\n\r\n return (\r\n focusDisplay(BLADES.getStarted)}\r\n >\r\n
\r\n
\r\n
\r\n

{title}

\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 {btnText}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default yourDetails;\r\n","import { createSelector } from 'reselect';\r\nimport { RootState } from '..';\r\n\r\nexport const getFormState = (state: RootState) => state.formState;\r\nexport const getLoadingState = (state: RootState) => state.formState.isLoading;\r\n","/* eslint-disable arrow-body-style */\r\nimport { connect } from 'react-redux';\r\nimport yourDetails from '../../components/Blades/YourDetails/YourDetails';\r\nimport { RootState } from '../../stores';\r\nimport { closeModalActions } from '../../stores/closeModal/closeModalActions';\r\nimport { visibilityActions } from '../../stores/visibility/visibilityActions';\r\nimport { getFormState } from '../../stores/form/formSelector';\r\nimport { formActions } from '../../stores/form/formActions';\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n formInitialState: getFormState(state),\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n completed: visibilityActions.bladeComplete,\r\n closeModalOpen: closeModalActions.open,\r\n focusDisplay: (toblade: string) => visibilityActions.bladeChangeFocus(toblade),\r\n formUpdated: formActions.updated,\r\n validRemId: formActions.validRemId,\r\n bladeFocus: (currentBlade: string) => visibilityActions.bladeChangeDisplay(currentBlade),\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(yourDetails);\r\n","/* eslint-disable react/jsx-boolean-value, @typescript-eslint/restrict-template-expressions,\r\n@typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call */\r\nimport React, { useState } from 'react';\r\nimport {\r\n TextField, ButtonActionEmphasis, sanitize, Icon, Checkbox, Spinner, ButtonActionDefault,\r\n} from '@honeycomb-npm/honeycomb-react';\r\nimport Blade from '../../shared/Blade/Blade';\r\nimport { BLADES } from '../../../constants';\r\nimport { content } from '../../../utils/contentUtils';\r\nimport { validNameRegex, isValidNumber, validbsbRegex } from '../../../utils/valueUtil';\r\nimport { analyticsConstants } from '../../../constants/analyticsConstants';\r\n\r\nimport './AccountDetails.scss';\r\n\r\nexport interface Props {\r\n visibility: boolean;\r\n closeModalOpen: () => void;\r\n focusDisplay: (blade: string) => void;\r\n completed: (blade: string) => void;\r\n formInitialState: any;\r\n formUpdated: (formInitialState: any) => void;\r\n formSubmited: (formInitialState: any) => void,\r\n confirmationModalOpen: () => void;\r\n confirmationModalData: any;\r\n}\r\n\r\nconst accountDetails = ({\r\n visibility, focusDisplay, completed, formInitialState, formUpdated, formSubmited, confirmationModalOpen, confirmationModalData,\r\n}: Props) => {\r\n const {\r\n accountInfoTitle, accountInfoDesc, accountInfoDesc2, accountNameLabel, accountNameErrorMsg, bsbLabel, bsbErrorMsg,\r\n accountNumberLabel, accountNumberErrorMsg, consentLabel, consentErrorMsg, accountDetailsDesc, btnTxt, accountNameHelpText,\r\n } = content[BLADES.accountDetails];\r\n\r\n const {\r\n accountName,\r\n accountNameIsValid,\r\n bsb,\r\n bsbIsValid,\r\n accountNumber,\r\n accountNumberIsValid,\r\n isConsent,\r\n } = formInitialState.formData;\r\n\r\n const { isLoading } = formInitialState;\r\n\r\n const handleChange = (e:any, v:any) => {\r\n if (!validNameRegex(v)) {\r\n formUpdated({ ...formInitialState.formData, [e]: v, [`${e}IsValid`]: true });\r\n }\r\n };\r\n\r\n const handleNumberChange = (e:any, v:any) => {\r\n const formatNumber = isValidNumber(v) ? v : '';\r\n formUpdated({ ...formInitialState.formData, [e]: formatNumber, [`${e}IsValid`]: true });\r\n };\r\n\r\n const handleCheckbox = (e:any, v: boolean) => {\r\n formUpdated({ ...formInitialState.formData, [e]: v });\r\n };\r\n\r\n const sendModalData = (e:any) => {\r\n handleValidate();\r\n };\r\n\r\n const handleValidate = () => {\r\n let userData = formInitialState.formData;\r\n if (!accountName.trim() || validNameRegex(accountName)) {\r\n userData = { ...userData, accountNameIsValid: false };\r\n }\r\n if (!bsb || !validbsbRegex(bsb)) {\r\n userData = { ...userData, bsbIsValid: false };\r\n }\r\n if (!accountNumber) {\r\n userData = { ...userData, accountNumberIsValid: false };\r\n }\r\n if (!isConsent) {\r\n userData = { ...userData, isConsent: false };\r\n }\r\n formUpdated({ ...formInitialState.formData, ...userData });\r\n if (userData.accountNameIsValid && userData.bsbIsValid && userData.accountNumberIsValid && userData.isConsent) {\r\n completed(BLADES.accountDetails);\r\n const {\r\n remediationIdIsValid: remIdValid,\r\n lastNameIsValid: lastNameValid,\r\n dobIsValid: dobValid,\r\n accountNameIsValid: accountNameValid,\r\n bsbIsValid: bsbValid,\r\n accountNumberIsValid: accountNumberValid,\r\n isConsent: coscent,\r\n ...formatData\r\n } = userData;\r\n const { dob } = userData;\r\n const filterData = { ...userData, dob: dob.split('-').reverse().join('/') };\r\n confirmationModalData(filterData);\r\n confirmationModalOpen();\r\n }\r\n };\r\n\r\n const handleSubmit = () => {\r\n handleValidate();\r\n };\r\n\r\n return (\r\n focusDisplay(BLADES.yourDetails)}\r\n >\r\n
\r\n
\r\n
\r\n
\r\n

{accountInfoTitle}

\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 {isLoading && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n {btnTxt}\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default accountDetails;\r\n","/* eslint-disable arrow-body-style */\r\nimport { connect } from 'react-redux';\r\nimport accountDetails from '../../components/Blades/AccountDetails/AccountDetails';\r\nimport { RootState } from '../../stores';\r\nimport { closeModalActions } from '../../stores/closeModal/closeModalActions';\r\nimport { confirmationModalActions } from '../../stores/confirmationModal/confirmationModalActions';\r\nimport { visibilityActions } from '../../stores/visibility/visibilityActions';\r\nimport { getFormState } from '../../stores/form/formSelector';\r\nimport { formActions } from '../../stores/form/formActions';\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n formInitialState: getFormState(state),\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n completed: visibilityActions.bladeComplete,\r\n closeModalOpen: closeModalActions.open,\r\n confirmationModalOpen: confirmationModalActions.open,\r\n focusDisplay: (toblade: string) => visibilityActions.bladeChangeFocus(toblade),\r\n formUpdated: formActions.updated,\r\n formSubmited: (formState: any) => formActions.submited(formState),\r\n confirmationModalData: formActions.updated,\r\n confirmationModalDataSubmit: (formSData: any) => formActions.submited(formSData),\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(accountDetails);\r\n","/* eslint-disable arrow-body-style */\r\nimport React, { useEffect } from 'react';\r\nimport {\r\n Icon, sanitize,\r\n} from '@honeycomb-npm/honeycomb-react';\r\nimport { content } from '../../../utils/contentUtils';\r\nimport { analyticsConstants } from '../../../constants/analyticsConstants';\r\n\r\nconst SuccessPage = () => {\r\n useEffect(() => {\r\n document.getElementById(analyticsConstants.ofiSuccess)?.click();\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\nexport default SuccessPage;\r\n","/* eslint-disable arrow-body-style */\r\nimport React, { useEffect, useRef } from 'react';\r\nimport {\r\n Icon, sanitize,\r\n} from '@honeycomb-npm/honeycomb-react';\r\nimport { content } from '../../../utils/contentUtils';\r\nimport { analyticsConstants } from '../../../constants/analyticsConstants';\r\n\r\nconst ErrorPage = () => {\r\n const analyticsRef = useRef(null);\r\n useEffect(() => {\r\n analyticsRef.current?.click();\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\nexport default ErrorPage;\r\n","import React, { useEffect } from 'react';\r\nimport { BLADES } from '../../constants';\r\nimport GetStartedContainer from '../../containers/Blades/GetStartedContainer';\r\nimport YourDetailsContainer from '../../containers/Blades/YourDetailsContainer';\r\nimport AccountDetailsContainer from '../../containers/Blades/AccountDetailsContainer';\r\nimport { VisibilityState } from '../../stores/visibility/visibilityReducer';\r\nimport { scrollToAndFocusId } from '../../utils/scroller';\r\nimport SuccessPage from '../shared/SuccessPage/SuccessPage';\r\nimport ErrorPage from '../shared/ErrorPage/ErrorPage';\r\n\r\ninterface Props {\r\n visibility: VisibilityState;\r\n formInitialState: any;\r\n}\r\n\r\nconst Page = ({ visibility, formInitialState }: Props) => {\r\n useEffect(() => {\r\n if (visibility) {\r\n // Find the blade with focus\r\n let bladeWithFocus = '';\r\n Object.keys(visibility).forEach((bladeName: string) => {\r\n if (visibility[bladeName].hasFocus) {\r\n bladeWithFocus = bladeName;\r\n }\r\n });\r\n // Scroll to the blade with focus if found\r\n if (bladeWithFocus.length > 0) {\r\n scrollToAndFocusId(bladeWithFocus);\r\n }\r\n }\r\n }, [visibility]);\r\n\r\n const { isSuccess, isFailure } = formInitialState;\r\n\r\n const isPageVisible = (!isSuccess && !isFailure);\r\n\r\n return (\r\n <>\r\n
\r\n {isPageVisible && (\r\n
\r\n \r\n \r\n \r\n
\r\n )}\r\n {isSuccess && (\r\n \r\n )}\r\n {isFailure && (\r\n \r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default Page;\r\n","/* eslint-disable arrow-body-style */\r\nimport { connect } from 'react-redux';\r\nimport Page from '../components/Page/Page';\r\nimport { RootState } from '../stores';\r\nimport { getFormState } from '../stores/form/formSelector';\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n visibility: state.visibility,\r\n formInitialState: getFormState(state),\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Page);\r\n","/* eslint-disable arrow-body-style */\r\nimport React from 'react';\r\nimport { HeaderOrigination } from '@honeycomb-npm/honeycomb-react';\r\nimport { content } from '../../../utils/contentUtils';\r\n\r\nimport './Header.scss';\r\n\r\nexport interface Props {\r\n closeModalOpen: () => void;\r\n}\r\n\r\nconst Header = ({ closeModalOpen }: Props) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default Header;\r\n","import { connect } from 'react-redux';\r\nimport Header from '../components/shared/Header/Header';\r\nimport { closeModalActions } from '../stores/closeModal/closeModalActions';\r\n\r\nconst mapDispatchToProps = {\r\n closeModalOpen: closeModalActions.open,\r\n};\r\n\r\nexport default connect(null, mapDispatchToProps)(Header);\r\n","import React from 'react';\r\nimport { FooterOrigination } from '@honeycomb-npm/honeycomb-react';\r\n\r\nconst Footer = () => ;\r\n\r\nexport default Footer;\r\n","import React, { useEffect } from 'react';\r\nimport CloseModal from './containers/CloseModalContainer';\r\nimport ConfirmationModal from './containers/ConfirmationModal';\r\nimport Page from './containers/PageContainer';\r\nimport Header from './containers/HeaderContainer';\r\nimport Footer from './components/shared/Footer/Footer';\r\n\r\nimport './styles/app.scss';\r\n\r\nconst App = () => (\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n);\r\n\r\nexport default App;\r\n","import { VisibilityState } from '../stores/visibility/visibilityReducer';\r\n\r\nexport const copyBlades = (Visibility: VisibilityState): VisibilityState => {\r\n const visibility: VisibilityState = {};\r\n\r\n Object.keys(Visibility).forEach((bladeName: string) => {\r\n visibility[bladeName] = { ...Visibility[bladeName] };\r\n });\r\n\r\n return visibility;\r\n};\r\n\r\n/**\r\n * Return a list of blades that are different in the two blade lists\r\n *\r\n * @param v1\r\n * @param v2\r\n */\r\nexport const compareBladeObjects = (v1: VisibilityState, v2: VisibilityState): VisibilityState => {\r\n const updatedBlades: VisibilityState = {};\r\n\r\n Object.keys(v1).forEach((bladeName: string) => {\r\n if (\r\n v1[bladeName].display !== v2[bladeName].display\r\n || v1[bladeName].required !== v2[bladeName].required\r\n || v1[bladeName].hasFocus !== v2[bladeName].hasFocus\r\n ) {\r\n updatedBlades[bladeName] = v2[bladeName];\r\n }\r\n });\r\n\r\n return updatedBlades;\r\n};\r\n","import { RootState } from '..';\r\n\r\nexport const getVisibility = (state: RootState) => state.visibility;\r\n","/* eslint-disable @typescript-eslint/no-inferrable-types */\r\nimport { VisibilityState } from './visibilityReducer';\r\n\r\n// This controls which blades are visible and which blade has focus\r\nexport const updateDisplayAndFocus = (completedBlade: string, bladeList: VisibilityState) => {\r\n const bladeNames = Object.keys(bladeList);\r\n const bladeIndex = bladeNames.indexOf(completedBlade);\r\n const nextBlades = bladeNames.slice(bladeIndex + 1);\r\n\r\n let displayImmediateBlade: boolean = false;\r\n let focusSet = false;\r\n // Remove focus from all blades\r\n bladeNames.forEach((blade: string) => {\r\n bladeList[blade].hasFocus = false;\r\n });\r\n\r\n nextBlades.forEach((blade: string) => {\r\n if (bladeList[blade].required) {\r\n // The first required blade\r\n // thats should be visible next\r\n if (!displayImmediateBlade) {\r\n bladeList[blade].display = true;\r\n displayImmediateBlade = true;\r\n }\r\n } else {\r\n // Hide blades that aren't required\r\n bladeList[blade].display = false;\r\n }\r\n // The first visible blade (after blade completed) should be focused\r\n if (bladeList[blade].display && !focusSet) {\r\n bladeList[blade].hasFocus = true;\r\n focusSet = true;\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * Return whether a blade should display\r\n *\r\n * @param blade\r\n * @param visibility\r\n */\r\nexport const shouldBladeDisplay = (blade: string, visibility: VisibilityState): boolean => {\r\n if (typeof visibility === 'undefined') {\r\n return false;\r\n }\r\n if (typeof visibility[blade] === 'undefined') {\r\n return false;\r\n }\r\n return visibility[blade].display;\r\n};\r\n","import {\r\n all, put, select, takeLatest,\r\n} from 'redux-saga/effects';\r\nimport { compareBladeObjects, copyBlades } from '../../utils/objectUtils';\r\nimport { getVisibility } from './visibilitySelector';\r\nimport { updateDisplayAndFocus } from './visibilityLogic';\r\nimport { visibilityActions } from './visibilityActions';\r\nimport { VisibilityState } from './visibilityReducer';\r\n\r\nexport function* bladeCompleteSaga(action: ReturnType) {\r\n const Visibility: VisibilityState = yield select(getVisibility);\r\n\r\n const bladeName = action.payload;\r\n if (bladeName) {\r\n // Copy visibility object so it can be modified\r\n const visibility = copyBlades(Visibility);\r\n\r\n // Update the visibility object\r\n updateDisplayAndFocus(bladeName, visibility);\r\n\r\n // Compare original visibility object with modified object and put the\r\n // updated blades into the updatedBlades array.\r\n const updatedBlades: VisibilityState = compareBladeObjects(Visibility, visibility);\r\n\r\n if (Object.keys(updatedBlades).length === 0) {\r\n // This code is to address an issue where the bladeCompleteSaga is dispatched\r\n // but there doesn't seem to be any change in the visibility list. It occurs\r\n // when a user completes a blade (Blade A) and the next blade (Blade B) is\r\n // displayed, given focus, and the browser scrolls to it. If the user scrolls\r\n // back to Blade A and hits \"complete\" again, there is no change in the visibility\r\n // list (because Blade B already has focus) and the browser does not scroll as the\r\n // reducer did not return a changed state. To force scrolling to work, we ensure\r\n // that the blade with focus is updated so that \"componentDidUpdate\" executes in App.tsx\r\n // and the scroll occurs.\r\n Object.keys(visibility).forEach((name: string) => {\r\n if (visibility[name].hasFocus) {\r\n updatedBlades[name] = visibility[name];\r\n }\r\n });\r\n }\r\n yield put(visibilityActions.bladesUpdate(updatedBlades));\r\n }\r\n}\r\n\r\nfunction* watchForCompletedBlade() {\r\n yield takeLatest(visibilityActions.bladeComplete, bladeCompleteSaga);\r\n}\r\n\r\nexport default function* visbilitySaga() {\r\n yield all([watchForCompletedBlade()]);\r\n}\r\n","/* eslint-disable compat/compat */\r\nimport axios from 'axios';\r\n\r\nexport const getCsrfToken = (): string | null => {\r\n const element = document.getElementsByName('__RequestVerificationToken')[0] as HTMLInputElement;\r\n if (element != null) {\r\n return element.value;\r\n }\r\n return null;\r\n};\r\n\r\nexport const getHeaders = (): Headers => {\r\n const headers = new Headers();\r\n const token = getCsrfToken();\r\n headers.append('Content-Type', 'application/json');\r\n if (token != null) {\r\n headers.append('RequestVerificationToken', token);\r\n }\r\n return headers;\r\n};\r\n\r\nexport const apiService = {\r\n submitForm: (data: any) => axios.post('/digital/PaymentDetails/submit', data),\r\n};\r\n","/* eslint-disable compat/compat, @typescript-eslint/no-unsafe-call, @typescript-eslint/unbound-method */\r\nimport {\r\n takeLatest, all, call, put,\r\n} from 'redux-saga/effects';\r\nimport { formActions, FormActionTypes } from './formActions';\r\nimport { visibilityActions } from '../visibility/visibilityActions';\r\nimport { apiService } from '../../services/apiService';\r\nimport * as formSubmit from '../../models/formSubmit';\r\n\r\nexport interface ResponseGenerator{\r\n config?:any,\r\n data?:any,\r\n headers?:any,\r\n request?:any,\r\n status?:number,\r\n statusText?:string,\r\n insertStatus?: string,\r\n}\r\n\r\nexport function* userFetch(action: ReturnType) {\r\n try {\r\n yield put(formActions.loading());\r\n const response: ResponseGenerator = yield call(\r\n apiService.submitForm,\r\n action.payload,\r\n );\r\n yield put(formActions.loaded());\r\n if (response.status === 200) {\r\n yield put(formActions.success());\r\n }\r\n } catch (error: any) {\r\n const errorStatusCode = error.response.status === 400;\r\n const checkValidRemId = error.response.data.insertStatus === 'N';\r\n yield put(formActions.loaded());\r\n if (errorStatusCode && checkValidRemId) {\r\n yield put(formActions.inValidRemId());\r\n yield put(visibilityActions.bladeChangeFocus('yourDetails'));\r\n yield put(visibilityActions.bladeChangeDisplay('yourDetails'));\r\n } else {\r\n yield put(formActions.failure());\r\n }\r\n }\r\n}\r\n\r\nfunction* workGetUsersFetch() {\r\n yield takeLatest(formActions.submited, userFetch);\r\n}\r\n\r\nexport default function* formSubmitSaga() {\r\n yield all([workGetUsersFetch()]);\r\n}\r\n","import { all } from 'redux-saga/effects';\r\nimport visbilitySaga from './visibility/visibilitySaga';\r\nimport formSubmitSaga from './form/formSaga';\r\n\r\nexport default function* rootSaga() {\r\n yield all([visbilitySaga(), formSubmitSaga()]);\r\n}\r\n","/* eslint-disable import/no-extraneous-dependencies */\r\nimport { produce } from 'immer';\r\nimport { BLADES } from '../../constants';\r\nimport { VisibilityAction, VisibilityActionTypes } from './visibilityActions';\r\n\r\nexport interface Blade {\r\n /** used to show or hide the blade */\r\n display: boolean;\r\n /** used to tell the display logic if blade needs to displayed on update */\r\n required: boolean;\r\n /** used to indicate current active blade */\r\n hasFocus: boolean;\r\n}\r\n\r\nexport const defaultBlade: Blade = {\r\n display: false,\r\n hasFocus: false,\r\n required: false,\r\n};\r\n\r\nexport interface VisibilityState {\r\n [key: string]: Blade;\r\n}\r\n\r\nexport const defaultVisibilityState: VisibilityState = {\r\n [BLADES.getStarted]: {\r\n ...defaultBlade,\r\n required: true,\r\n },\r\n [BLADES.yourDetails]: {\r\n ...defaultBlade,\r\n required: true,\r\n },\r\n [BLADES.accountDetails]: {\r\n ...defaultBlade,\r\n required: true,\r\n },\r\n};\r\n\r\nexport const visibilityReducer = produce(\r\n (\r\n state: VisibilityState = defaultVisibilityState,\r\n action: VisibilityAction,\r\n ) => {\r\n switch (action.type) {\r\n case VisibilityActionTypes.BladeComplete: {\r\n state[BLADES.getStarted].display = true;\r\n return state;\r\n }\r\n\r\n case VisibilityActionTypes.BladesUpdate: {\r\n const bladeList = action.payload;\r\n const updatedBladeNames = Object.keys(bladeList);\r\n if (updatedBladeNames.length > 0) {\r\n updatedBladeNames.forEach((bladeName: string) => {\r\n state[bladeName] = bladeList[bladeName];\r\n });\r\n }\r\n return state;\r\n }\r\n\r\n case VisibilityActionTypes.BladeChangeFocus: {\r\n const bladeNames = Object.keys(state);\r\n // Remove focus from all blades\r\n bladeNames.forEach((blade: string) => {\r\n state[blade].hasFocus = false;\r\n });\r\n state[action.payload].hasFocus = true;\r\n return state;\r\n }\r\n\r\n case VisibilityActionTypes.BladeChangeDisplay: {\r\n const blades = Object.keys(state);\r\n const bladeIndex = blades.indexOf(action.payload);\r\n const nextBlades = blades.slice(bladeIndex + 1);\r\n // Remove focus from all blades\r\n nextBlades.forEach((blade: string) => {\r\n state[blade].hasFocus = false;\r\n state[blade].display = false;\r\n });\r\n state[action.payload].hasFocus = true;\r\n state[action.payload].display = true;\r\n return state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n },\r\n);\r\n","/* eslint-disable import/no-extraneous-dependencies, @typescript-eslint/no-unsafe-return */\r\nimport produce from 'immer';\r\nimport { FormAction, FormActionTypes } from './formActions';\r\n\r\nexport interface FormState {\r\n formData : any,\r\n isLoading: boolean,\r\n isSuccess: boolean,\r\n isFailure: boolean,\r\n isValidRemId: boolean,\r\n}\r\n\r\nexport const initialState: FormState = {\r\n formData: {\r\n remediationId: '',\r\n remediationIdIsValid: null,\r\n lastName: '',\r\n lastNameIsValid: null,\r\n dobIsValid: true,\r\n dob: '',\r\n accountName: '',\r\n accountNameIsValid: null,\r\n bsb: '',\r\n bsbIsValid: null,\r\n accountNumber: '',\r\n accountNumberIsValid: null,\r\n isConsent: null,\r\n },\r\n isLoading: false,\r\n isSuccess: false,\r\n isValidRemId: true,\r\n isFailure: false,\r\n};\r\n\r\nexport const formReducer = produce(\r\n (state: FormState = initialState, action: any) => {\r\n switch (action.type) {\r\n case FormActionTypes.Updated:\r\n return {\r\n ...state,\r\n formData: action.payload,\r\n };\r\n case FormActionTypes.Loading:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n };\r\n case FormActionTypes.Loaded:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n };\r\n case FormActionTypes.Submited:\r\n return {\r\n ...state,\r\n };\r\n case FormActionTypes.InvalidRemID:\r\n return {\r\n ...state,\r\n isValidRemId: false,\r\n };\r\n case FormActionTypes.ValidRemID:\r\n return {\r\n ...state,\r\n isValidRemId: true,\r\n };\r\n case FormActionTypes.LoadSuccess:\r\n return {\r\n ...state,\r\n isSuccess: true,\r\n };\r\n case FormActionTypes.LoadFailure:\r\n return {\r\n ...state,\r\n isFailure: true,\r\n };\r\n default:\r\n return state;\r\n }\r\n },\r\n);\r\n\r\nexport const getFormLoading = (state: FormState) => state.isLoading;\r\n","/* eslint-disable import/no-extraneous-dependencies */\r\nimport { applyMiddleware, combineReducers, createStore } from 'redux';\r\nimport createSagaMiddleware from 'redux-saga';\r\nimport { composeWithDevTools } from 'redux-devtools-extension';\r\nimport { enableES5 } from 'immer';\r\nimport rootSaga from './rootSaga';\r\nimport { VisibilityAction } from './visibility/visibilityActions';\r\nimport { visibilityReducer, VisibilityState } from './visibility/visibilityReducer';\r\nimport { CloseModalAction } from './closeModal/closeModalActions';\r\nimport { closeModalReducer, CloseModalState } from './closeModal/closeModalReducer';\r\nimport { confirmationModalAction } from './confirmationModal/confirmationModalActions';\r\nimport { confirmationModalReducer, confirmationModalState } from './confirmationModal/confirmationModalReducer';\r\nimport { formReducer, FormState, getFormLoading } from './form/formReducer';\r\nimport { FormAction } from './form/formActions';\r\n\r\nenableES5(); // Loading ES5 plugin for IE11\r\n\r\nexport type RootAction =\r\n | VisibilityAction\r\n | CloseModalAction\r\n | FormAction\r\n | confirmationModalAction;\r\n\r\nexport interface RootState {\r\n visibility: VisibilityState;\r\n closeModal: CloseModalState;\r\n confirmationModal: confirmationModalState;\r\n formState: FormState;\r\n}\r\n\r\nexport const rootReducer = combineReducers({\r\n visibility: visibilityReducer,\r\n closeModal: closeModalReducer,\r\n confirmationModal: confirmationModalReducer,\r\n formState: formReducer,\r\n});\r\n\r\nconst sagaMiddleware = createSagaMiddleware();\r\n\r\nconst configureStore = () => {\r\n const store = createStore(rootReducer, applyMiddleware(sagaMiddleware));\r\n\r\n sagaMiddleware.run(rootSaga);\r\n\r\n return store;\r\n};\r\n\r\nexport default configureStore;\r\n","/* eslint-disable import/no-extraneous-dependencies, arrow-body-style */\r\n/** @jsxRuntime classic */\r\nimport 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\n\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport App from './App';\r\nimport configureStore from './stores';\r\nimport { initContent } from './utils/contentUtils';\r\n// import reportWebVitals from './reportWebVitals';\r\n\r\n// Load Honeycomb CSS\r\nimport '@honeycomb-npm/honeycomb/src/bundles/honeycomb.scss';\r\n\r\n(window as any).RenderApp = () => {\r\n initContent();\r\n const store = configureStore();\r\n const Root = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n ReactDOM.render(, document.getElementById('root'));\r\n};\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\n// reportWebVitals();\r\n"],"sourceRoot":""}