{"version":3,"sources":["constants/LoanTypes.constants.ts","services/interests.service.ts","constants/RepaymentFrequencies.constants.ts","services/calculate.service.ts","constants/LoanPurposes.constants.ts","store/calcSlice.ts","constants/FrequencyCoversions.constants.ts","utils.ts","components/CalcFooter/CalcCompare.tsx","components/CalcFooter/CalcCompare.constants.ts","components/CalcFooter/CalcTerms.tsx","components/CalcFooter/CalcFooter.tsx","components/shared/CalcModal.tsx","components/CalcHeader/CalcHeader.tsx","constants/DebtTypes.constants.ts","components/CalcInput/DebtConsolidation/DebtDetails.tsx","components/shared/LoanCard.tsx","components/CalcInput/DebtConsolidation/DebtSummary.tsx","components/CalcInput/DebtConsolidation/TotalDebtAmount.tsx","components/CalcInput/DebtConsolidation/DebtModal.tsx","utils/analyticsutils.ts","components/CalcInput/LoanAmount.tsx","components/CalcInput/LoanPurpose.tsx","components/CalcInput/LoanTerm.tsx","components/CalcInput/LoanInfoSection.tsx","components/CalcInput/LoanTypeInfo.tsx","components/CalcInput/LoanType.tsx","components/CalcInput/CalcInput.tsx","store/store.ts","utils/validation.util.ts","components/CalcFooter/offer.svg","components/CalcFooter/CalcOffer.tsx","components/shared/RangeSlider/RangeSlider.tsx","components/CalcOutput/ApplyNow.tsx","components/CalcOutput/DebtConsolidation/AboutCalculation.tsx","components/CalcOutput/Edit-Icon.svg","components/CalcOutput/Swap-Icon.svg","components/CalcOutput/Info-Icon.svg","components/CalcOutput/DebtConsolidation/RepaymentSavings.tsx","components/CalcOutput/DebtConsolidation/OverallSavings.tsx","components/CalcOutput/OutputTab.tsx","components/CalcOutput/CalcOutput.tsx","App.tsx","index.tsx"],"names":["LOAN_TYPES","Object","freeze","PERSONAL_LOAN_SECURED","PERSONAL_LOAN_UNSECURED","PERSONAL_LOAN_FIXED","PERSONAL_LOAN_VARIABLE","fetchInterestRates","a","fetch","response","json","respJSON","Promise","resolve","getMappedLoanType","loanType","mappedLoanType","getLoanTypeGroup","loanTypeGroup","getInterestRange","interestRates","loanTypeMin","loanTypeMax","interestRange","min","loanName","interestRate","comparisonRate","max","rates","find","loan","loanDetails","forEach","rate","getInterestRepRate","REPAYMENT_FREQUENCIES","MONTHLY","FORTNIGHTLY","WEEKLY","REPAYMENT_FREQUENCIES_LIB","calculateRepayments","amount","frequency","term","calculators","repayments","convertRepaymentFrequency","LOAN_PURPOSES","CAR","TRAVEL","RENOVATIONS","PERSONAL_GOODS","DEBT_CONSOLIDATION","OTHER","initialState","isDebtConsolidation","pendingActionCount","loanTerm","loanAmount","loanPurpose","loanFrequency","loanInterestRate","userInterestRateMode","totalDebtAmount","loanAmountMin","loanAmountMax","debts","debtPurpose","cms","CMS_local","page_react","feesAndCharges","feesAndCharges_local","repaymentAmount","total","principal","interest","groups","duration","years","months","fetchInterestRatesAction","createAsyncThunk","calculateTotalDebt","state","totalDebt","debt","debtAmount","calculateRepaymentsAction","_","getState","calcState","calc","Number","calcSlice","createSlice","name","reducers","setIsDebtConsolidation","action","payload","setPendingActionCount","increasePendingActionCount","decreasePendingActionCount","setLoanTerm","setLoanType","setLoanFrequency","setLoanAmount","setLoanPurpose","setLoanInterestRate","setUserInterestRateMode","setTotalDebtAmount","setLoanAmountMin","setLoanAmountMax","setDebtPurpose","setDebts","setDefaults","defaultLoanAmount","defaultOption","addDebt","length","push","editDebt","changedDebtIndex","findIndex","id","deleteDebt","filteredDebts","filter","deleteAllDebts","caseReducers","setCMS","setFeesAndCharges","setRepaymentAmount","extraReducers","String","fulfilled","Math","ceil","actions","selectIsDebtConsolidation","selectPendingActionCount","selectLoanTerm","selectLoanType","selectLoanFrequency","selectLoanAmount","selectLoanPurpose","selectTotalDebtAmount","selectLoanAmountMin","selectLoanAmountMax","selectDebts","selectDebtPurpose","selectCMS","selectFeesAndCharges","selectInterestRates","selectLoanInterestRate","selectUserInterestRateMode","selectRepayments","selectRepaymentAmount","COUNT_IN_YEAR","getStaticContent","unsafeContent","safeContent","sanitize","__html","ReactHtmlParser","applyTntVariants","content","_variants","variant","window","tntSelectedVariant","_default","keys","key","val","processTemplate","template","values","resultTemplate","valueKey","replace","parseCurrency","amountString","result","split","join","formatInterestRate","value","parseFloat","toFixed","parseBool","booleanString","trim","toLowerCase","getFrequencyConversionFactor","debtFrequency","toUpperCase","formatAnalyticsValue","CalcCompare","useSelector","comparePersonalLoans","compareLabel","compareButton","guideMessage","footerTerms","className","onClick","open","CalcTerms","termsAndConditions","offer","blurb","userInterestBlurb","title","isOfferExists","CalcFooter","CalcModal","props","isOpen","onClose","modelId","ariaHide","ariaLabelledBy","closeModal","closeOnClick","children","closeBtn","showBtn","btnDetail","controlId","displayText","CalcHeader","header","disclaimerModal","CMS_offer","useState","displayModal","setDisplayModal","aboutCalcDetails","blurb1","blurb2","text","tooltipLabel","tooltipText","blurb3","type","link","DEBT_TYPES","LOAN","CREDITCARD","OVERDRAFT","DebtDetails","optionalInfoHeaderId","dispatch","useDispatch","debtDetails","isEditMode","onEdit","onCancel","isAddingAnotherDebtMode","debtModal","debtTypeDefaultOption","debtTypeLabel","debtTypeOptions","optionalInfo","addDebtBtn","cancelBtn","debtTypeValidation","updateDebtBtn","debtTypeTooltipText","ongoingFee","exitFee","interestRate_CMS","remainingLoanTerm_CMS","remainingLoanTerm","debtsArray","debtType","debtTypeValue","setDebtTypeValue","debtAmountValue","setDebtAmountValue","repaymentAmountValue","setRepaymentAmountValue","repaymentFrequency","repaymentFrequencyDefaultOption","repaymentFrequencyValue","setRepaymentFrequencyValue","ongoingFeeValue","setOngoingFeeValue","exitFeeValue","setExitFeeValue","interestRateValue","setInterestRateValue","remainingLoanTermValue","setRemainingLoanTermValue","isValidInterestRate","setIsValidInterestRate","isValidRemainingLoanTerm","setIsValidRemainingLoanTerm","isValidRepayment","setIsValidRepayment","isValidDebtType","setIsValidDebtType","validateDebtType","validateRepaymentAmount","repaymentAmt","debtAmt","useEffect","validateRemainingLoanTerm","label","onChange","errormessage","options","map","debtTypeOption","isValid","required","precision","errormessageMin","errorMessage","autoComplete","Formatters","formatCurrency","parsedValue","errorMessageMin","validationMessage","onBlur","repaymentFrequencyLabel","repaymentFrequencyOptions","repaymentFrequencyOption","hideDefaultOption","collapseAll","isAccordion","targetContentId","targetHeaderId","toolTipText","updatedDebt","debtInfo","Date","now","onAddDebt","disabled","LoanCard","onDeleteDebt","onEditDebt","isDeleteMode","setIsDeleteMode","setIsEditMode","loanCard","confirmDeleteMessage","editBtn","goBackBtn","deleteBtn","opt","decimals","LoanType","debtsValue","debtValue","TotalDebtAmount","totalDebtAmountValue","loanAmountMinValue","loanAmountMaxValue","errorMessageParsed","minLoanAmount","maxLoanAmount","forceVisible","iconType","message","DebtModal","scDebtPurposeValue","setSCDebtPurposeValue","scOptionalFieldsValue","setSCOptionalFieldsValue","isAddingAnotherDebt","setIsAddingAnotherDebt","debtDetailsKey","setDebtDetailsKey","isValidDebtPurpose","setIsValidDebtPurpose","isAddFirstDebtMode","debtPurposeValue","onOk","debtInfoTypes","i","reduce","x","y","indexOf","toLocaleLowerCase","generateOptionalFieldsSummary","validateDebtPurpose","debtPurposeLabel","debtPurposeDefaultOption","displayValue","debtPurposeOptions","debtPurposeOption","debtPurposeValidation","DebtSummary","addAnotherDebt","okBtn","updateAnalyticsField","elementId","elementValue","event","page","SMT","isLoadSuccess","elementBindToAnalytics","document","getElementById","setTimeout","dispatchEvent","CustomEvent","bubbles","composed","LoanAmount","invalidLoanAmountErrorId","scLoanAmountErrorValue","setSCLoanAmountErrorValue","loanAmountValue","isValidLoanAmount","LoanPurpose","scLoanPurposeValue","setSCLoanPurposeValue","loanPurposeOptions","splLoanPurposeOptions","loanPurposeValue","loanPurposeOption","LoanTerm","btnGrpLoanTermId","scLoanTermValue","setSCLoanTermValue","loanTermOptions","ToggleButtonGroup","parseInt","role","loanTermOption","index","ToggleButton","LoanInfoSection","loanTypeInfoModal","loanTypesInfo","repRateInterest","representativeRateSection","repRateRange","rateRange","minRange","maxRange","compRateInterest","comparisonRateSection","compRateRange","establishmentFee","monthlyFee","monthlyServiceFee","usualRateRange","usualInterestRate","extraRepayments","borrowFrom","redrawOption","LoanTypeInfo","btnGrpLoanTypeId","scLoanTypeValue","setSCLoanTypeValue","loanTypeOptions","maxLoanAmountSecured","selectedLoanType","loanTypeOption","loanTypeAbbreviation","createToggleButton","CalcInput","CMS_output","CMS_totalDebtAmount","CMS_enterDebtConsolidationDetails","enterDebtConsolidationDetails","CMS_debtModal","CMS_loanAmount","isDebtConsolidationValue","debtConsolidationLabel","debtSummaryTileId","invalidDebtAmtErrorMsg","debtModalDisplay","setDebtModalDisplay","openDebtModal","modalTriggerValue","enterDebtDetailsBtn","store","configureStore","reducer","calcReducer","minInterestRate","maxInterestRate","CalcOffer","repayment","src","OfferIcon","alt","RangeSlider","isValidValue","fillWidth","e","target","style","width","Card","headingText","buttonText","onButtonClick","ApplyNow","cmsContent","applyNowModal","etbHeading","etbMessage","etbButton","etb_url","dividerText","ntbHeading","ntbMessage","ntbButton","ntb_url","DEBT_PURPOSES","LOWER_REPAYMENTS","SHORTER_TERM","REDUCE_COST","AboutCalculation","CMS","output","aboutThisCalculation","headerText","reduceCosts","lowerRepayments","shorterTerm","default","getMessageForDebtPurpose","RepaymentSavings","CMS_tabs","tabs","CMS_repayments","CMS_repaymentSavings","repaymentSavings","floor","totalRepayment","calculateRepayment","caveat_sign","noSavings","noSavingsTips","OverallSavings","overallSavings","costs","totalOngoingFee","totalInterest","totalExitFee","anyLoan","allValidLoans","noAdditionalInfo","savings","interestSavings","feeSavings","totalSavings","totals","undefined","calculateTotalCostsAndSavings","round","overallSavingsBreakdown","feeChange","interestChange","exitFeeMessage","OutputTab","totalAmount","feesAndChargesText","feesAndChargesToolTip","loanServiceFee","CalcOutput","CMS_applyNow","applyNow","defaultSliderValue","applyNowModalDisplay","setApplyNowModalDisplay","displayInterestInput","setDisplayInterestInput","blurb2Parsed","invalidLoanAmountOutput","compRateInfoMsgParsed","compRateInfoMsg","compRateRangeParsed","compRateRangeMsg","minRate","maxRate","parsedBlurb","invalidInterestRateOutput","infoMessage","repRate","onTabChange","tab","KeyboardEvent","kbEvent","code","onSliderChange","onChangeInterestRate","onUseRepRate","onBlurHandler","isValidDebtConsolidation","onClickEditBtn","firstRender","useRef","current","interestInputRef","editBtnRef","useLayoutEffect","focus","outputComponents","ariaLabel","onKeyDown","isActive","weekly","fortnightly","monthly","tabPanels","refinanceLoanPurposeOutput","interests","userInterestRate","userInterestRateTooltip","interestRateTooltip","step","maxLength","ref","pattern","inputMode","size","interestRateFrequency","EditIcon","SwapIcon","useRepRate","InfoIcon","costSaving","renderOutput","btnText","approvedMessage","App","hasCalculatorInitialized","RenderApp","el","mboxName","getAttribute","initApp","ReactDOM","render","StrictMode","$","on","CommBank","Online","Common","TestAndTarget","myAMmBox"],"mappings":"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","file":"static/js/main.2917a6af.chunk.js","sourcesContent":["export const LOAN_TYPES = Object.freeze({\r\n PERSONAL_LOAN_SECURED: 'PLS',\r\n PERSONAL_LOAN_UNSECURED: 'PLU',\r\n PERSONAL_LOAN_FIXED: 'PLF',\r\n PERSONAL_LOAN_VARIABLE: 'PLV',\r\n});\r\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-assignment */\r\nimport { LOAN_TYPES } from '../constants/LoanTypes.constants';\r\nimport { InterestRateType, InterestRatesGroupType, InterestRangeType } from '../models/InterestRateTypes';\r\n\r\n\r\nexport const fetchInterestRates = async():Promise => {\r\n const response = await fetch('api/RepaymentsCalculator/LoanInterestRates');\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n const respJSON = await response.json();\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\r\n return Promise.resolve(respJSON);\r\n};\r\n\r\n// eg: PLS -> SCL\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport const getMappedLoanType = (loanType: string) => {\r\n let mappedLoanType = 'FR';\r\n if(loanType === LOAN_TYPES.PERSONAL_LOAN_SECURED){\r\n mappedLoanType = 'SCL';\r\n } else if(loanType === LOAN_TYPES.PERSONAL_LOAN_VARIABLE) {\r\n mappedLoanType = 'VR';\r\n }\r\n return mappedLoanType;\r\n};\r\n\r\n// API response has only PLS & PLU groups. PLF & PLV are part of PLU\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport const getLoanTypeGroup = (loanType: string) => {\r\n let loanTypeGroup = LOAN_TYPES.PERSONAL_LOAN_SECURED;\r\n if(loanType !== LOAN_TYPES.PERSONAL_LOAN_SECURED) {\r\n loanTypeGroup = LOAN_TYPES.PERSONAL_LOAN_UNSECURED;\r\n }\r\n return loanTypeGroup;\r\n};\r\n\r\n// Returns min and max interest rates for given type\r\nexport const getInterestRange = (interestRates: InterestRatesGroupType[], loanType: string):InterestRangeType => {\r\n const loanTypeGroup = getLoanTypeGroup(loanType);\r\n const mappedLoanType = getMappedLoanType(loanType);\r\n\r\n const loanTypeMin = `${loanType}`;\r\n const loanTypeMax = `${mappedLoanType}MAX`;\r\n\r\n const interestRange: InterestRangeType = {\r\n min: {\r\n loanName: '',\r\n interestRate: '0',\r\n comparisonRate: 0,\r\n },\r\n max : {\r\n loanName: '',\r\n interestRate: '0',\r\n comparisonRate: 0,\r\n },\r\n };\r\n const rates = interestRates?.find(loan => loan.loanType === loanTypeGroup);\r\n rates?.loanDetails?.forEach((rate: InterestRateType) => {\r\n if(rate.loanName === loanTypeMin){\r\n interestRange.min = rate;\r\n } else if(rate.loanName === loanTypeMax){\r\n interestRange.max = rate;\r\n }\r\n });\r\n\r\n return interestRange;\r\n};\r\n\r\n// Returns representative interest rate\r\nexport const getInterestRepRate = (interestRates: InterestRatesGroupType[], loanType: string):InterestRateType => {\r\n const loanTypeGroup = getLoanTypeGroup(loanType);\r\n const mappedLoanType = getMappedLoanType(loanType);\r\n\r\n const rates = interestRates?.find(loan => loan.loanType === loanTypeGroup);\r\n const rate = rates?.loanDetails?.find((rate: InterestRateType) => rate.loanName === `${mappedLoanType}REP`);\r\n return rate as InterestRateType;\r\n};\r\n","export const REPAYMENT_FREQUENCIES = Object.freeze({\r\n MONTHLY: 'monthly',\r\n FORTNIGHTLY: 'fortnightly',\r\n WEEKLY: 'weekly',\r\n});\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access */\r\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n// @ts-ignore - cba-mortgage-calculator is not typescript, not type defs available\r\nimport calculators from 'cba-mortgage-calculator';\r\nimport RepaymentsType from '../models/RepaymentsType';\r\nimport { REPAYMENT_FREQUENCIES } from '../constants/RepaymentFrequencies.constants';\r\n\r\n// from cba-mortgage-calculator\r\nexport const REPAYMENT_FREQUENCIES_LIB = Object.freeze({\r\n MONTHLY: 1,\r\n FORTNIGHTLY: 2,\r\n WEEKLY: 4,\r\n});\r\n\r\nexport const calculateRepayments = (amount: number, frequency:string, rate: number, term: number): RepaymentsType => {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call,no-console\r\n return calculators.repayments(\r\n amount, convertRepaymentFrequency(frequency), { rate, term }\r\n );\r\n};\r\n\r\nexport const convertRepaymentFrequency = (frequency: string):number => {\r\n switch(frequency) {\r\n case REPAYMENT_FREQUENCIES.WEEKLY:\r\n return REPAYMENT_FREQUENCIES_LIB.WEEKLY;\r\n case REPAYMENT_FREQUENCIES.FORTNIGHTLY:\r\n return REPAYMENT_FREQUENCIES_LIB.FORTNIGHTLY;\r\n default:\r\n return REPAYMENT_FREQUENCIES_LIB.MONTHLY;\r\n }\r\n};\r\n","export const LOAN_PURPOSES = Object.freeze({\r\n CAR: 'car',\r\n TRAVEL: 'travel',\r\n RENOVATIONS: 'renovations',\r\n PERSONAL_GOODS: 'personalGoods',\r\n DEBT_CONSOLIDATION: 'debtConsolidation',\r\n OTHER: 'other',\r\n});\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\r\nimport { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport CMS_local from '../App_Data/fallback_v1-0.cnt.json';\r\nimport feesAndCharges_local from '../mock/feesAndCharges.json';\r\nimport { CalcInputProps } from '../components/CalcInput/CalcInput';\r\nimport { CalcOutputProps } from '../components/CalcOutput/CalcOutput';\r\nimport { CalcHeaderProps } from '../components/CalcHeader/CalcHeader';\r\nimport { fetchInterestRates, getInterestRepRate } from '../services/interests.service';\r\nimport { InterestRatesGroupType, InterestRateType } from '../models/InterestRateTypes';\r\nimport { calculateRepayments } from '../services/calculate.service';\r\nimport RepaymentsType from '../models/RepaymentsType';\r\nimport { DebtInfoType } from '../models/DebtInfoType';\r\nimport { REPAYMENT_FREQUENCIES } from '../constants/RepaymentFrequencies.constants';\r\nimport { LOAN_TYPES } from '../constants/LoanTypes.constants';\r\nimport { LOAN_PURPOSES } from '../constants/LoanPurposes.constants';\r\nimport type { RootState } from './store';\r\n\r\nexport type CMS = CalcHeaderProps & CalcInputProps & CalcOutputProps;\r\nexport type FeesAndChargesSubType = {\r\n establishmentFee: number,\r\n monthlyServiceFee: number,\r\n}\r\nexport type FeesAndChargesType = {\r\n plv: FeesAndChargesSubType,\r\n plf: FeesAndChargesSubType,\r\n pls: FeesAndChargesSubType\r\n}\r\nexport type CalcState = {\r\n isDebtConsolidation: boolean,\r\n pendingActionCount: number,\r\n loanTerm: number,\r\n loanType: string,\r\n loanAmount: number,\r\n loanPurpose: string,\r\n loanFrequency: string;\r\n loanInterestRate: InterestRateType;\r\n userInterestRateMode: boolean;\r\n totalDebtAmount: number,\r\n loanAmountMin: number,\r\n loanAmountMax: number,\r\n debts: DebtInfoType[],\r\n debtPurpose: string,\r\n cms: CMS,\r\n feesAndCharges: FeesAndChargesType,\r\n interestRates: InterestRatesGroupType[],\r\n repaymentAmount: number;\r\n repayments: RepaymentsType,\r\n};\r\n\r\nexport const initialState: CalcState = {\r\n isDebtConsolidation: false,\r\n pendingActionCount: 0,\r\n loanTerm: 7,\r\n loanType: LOAN_TYPES.PERSONAL_LOAN_FIXED,\r\n loanAmount: 10000,\r\n loanPurpose: LOAN_PURPOSES.CAR,\r\n loanFrequency: REPAYMENT_FREQUENCIES.WEEKLY,\r\n loanInterestRate: {\r\n loanName: '',\r\n interestRate: '0',\r\n comparisonRate: 0,\r\n },\r\n userInterestRateMode: false,\r\n totalDebtAmount: 0,\r\n loanAmountMin: 4000,\r\n loanAmountMax: 50000,\r\n debts: [],\r\n debtPurpose: '',\r\n cms: CMS_local?.page_react,\r\n feesAndCharges: feesAndCharges_local,\r\n interestRates: [],\r\n repaymentAmount: 0,\r\n repayments: {\r\n total: {\r\n amount: 0,\r\n principal: 0,\r\n interest: 0,\r\n },\r\n groups: [{\r\n repayments:[{\r\n principal: 0,\r\n interest: 0,\r\n amount: 0,\r\n }],\r\n }],\r\n duration: {\r\n years: 0,\r\n months: 0,\r\n },\r\n },\r\n};\r\n\r\nexport const fetchInterestRatesAction = createAsyncThunk('calc/fetchInterestRates',\r\n async () => {\r\n return fetchInterestRates();\r\n }\r\n);\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport const calculateTotalDebt = (state: CalcState) => {\r\n let totalDebt = 0;\r\n state.debts.forEach(debt => totalDebt += debt.debtAmount);\r\n state.totalDebtAmount = totalDebt;\r\n};\r\n\r\nexport const calculateRepaymentsAction = createAsyncThunk('calc/calculateRepayments',\r\n async (_, { getState }) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\r\n const state = await getState() as RootState;\r\n const calcState: CalcState = state?.calc;\r\n const interestRate = calcState.loanInterestRate.interestRate;\r\n return Promise.resolve(calculateRepayments(\r\n calcState.loanAmount, calcState.loanFrequency, Number(interestRate), calcState.loanTerm\r\n ));\r\n }\r\n);\r\n\r\nexport const calcSlice = createSlice({\r\n name: 'calc',\r\n initialState,\r\n reducers: {\r\n // PayloadAction type to declare the contents of `action.payload`\r\n setIsDebtConsolidation: (state: CalcState, action: PayloadAction) => {\r\n state.isDebtConsolidation = action.payload;\r\n },\r\n setPendingActionCount: (state: CalcState, action: PayloadAction) => {\r\n state.pendingActionCount = action.payload;\r\n },\r\n increasePendingActionCount: (state: CalcState) => {\r\n state.pendingActionCount += 1;\r\n },\r\n decreasePendingActionCount: (state: CalcState) => {\r\n state.pendingActionCount -= 1;\r\n },\r\n setLoanTerm: (state: CalcState, action: PayloadAction) => {\r\n state.loanTerm = action.payload;\r\n },\r\n setLoanType: (state: CalcState, action: PayloadAction) => {\r\n state.loanType = action.payload;\r\n state.loanInterestRate = getInterestRepRate(state.interestRates, state.loanType);\r\n },\r\n setLoanFrequency: (state: CalcState, action: PayloadAction) => {\r\n state.loanFrequency = action.payload;\r\n },\r\n setLoanAmount: (state: CalcState, action: PayloadAction) => {\r\n state.loanAmount = action.payload;\r\n },\r\n setLoanPurpose: (state: CalcState, action: PayloadAction) => {\r\n state.loanPurpose = action.payload;\r\n },\r\n setLoanInterestRate: (state: CalcState, action: PayloadAction) => {\r\n state.loanInterestRate = action.payload;\r\n },\r\n setUserInterestRateMode: (state: CalcState, action: PayloadAction) => {\r\n state.userInterestRateMode = action.payload;\r\n },\r\n setTotalDebtAmount: (state: CalcState, action: PayloadAction) => {\r\n state.totalDebtAmount = action.payload;\r\n },\r\n setLoanAmountMin: (state: CalcState, action: PayloadAction) => {\r\n state.loanAmountMin = action.payload;\r\n },\r\n setLoanAmountMax: (state: CalcState, action: PayloadAction) => {\r\n state.loanAmountMax = action.payload;\r\n },\r\n setDebtPurpose: (state: CalcState, action: PayloadAction) => {\r\n state.debtPurpose = action.payload;\r\n },\r\n setDebts: (state: CalcState, action: PayloadAction) => {\r\n state.debts = action.payload;\r\n },\r\n setDefaults: (state: CalcState) => {\r\n state.debts = [];\r\n state.loanAmount = Number(state.cms.loanAmount.defaultLoanAmount);\r\n state.loanPurpose = state.cms.loanPurpose.defaultOption;\r\n state.totalDebtAmount = 0;\r\n state.isDebtConsolidation = false;\r\n },\r\n addDebt: (state: CalcState, action: PayloadAction) => {\r\n if (state.debts.length < 5) {\r\n state.debts.push(action.payload);\r\n calculateTotalDebt(state);\r\n }\r\n },\r\n editDebt: (state: CalcState, action: PayloadAction) => {\r\n const changedDebtIndex = state.debts.findIndex(debt => debt.id === action.payload.id);\r\n state.debts[changedDebtIndex] = action.payload;\r\n calculateTotalDebt(state);\r\n },\r\n deleteDebt: (state: CalcState, action: PayloadAction) => {\r\n const filteredDebts = state.debts.filter(debt => {\r\n return debt.id !== action.payload;\r\n });\r\n state.debts = filteredDebts;\r\n calculateTotalDebt(state);\r\n },\r\n deleteAllDebts: (state: CalcState) => {\r\n calcSlice.caseReducers.setDefaults(state);\r\n },\r\n setCMS: (state: CalcState, action: PayloadAction) => {\r\n state.cms = action.payload;\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n setFeesAndCharges: (state: CalcState, action: PayloadAction) => {\r\n state.feesAndCharges = action.payload;\r\n },\r\n setRepaymentAmount: (state: CalcState, action: PayloadAction) => {\r\n state.repaymentAmount = action.payload;\r\n },\r\n },\r\n extraReducers: {\r\n [String(fetchInterestRatesAction.fulfilled)]: (state, action) => {\r\n state.interestRates = action.payload;\r\n state.loanInterestRate = getInterestRepRate(state.interestRates, state.loanType);\r\n },\r\n [String(calculateRepaymentsAction.fulfilled)]: (state, action) => {\r\n state.repayments = action.payload;\r\n state.repaymentAmount = Math.ceil(action.payload?.groups[0]?.repayments[0]?.amount);\r\n },\r\n },\r\n});\r\n\r\nexport const {\r\n setIsDebtConsolidation, setPendingActionCount, increasePendingActionCount, decreasePendingActionCount, setCMS, setLoanType,\r\n setDebtPurpose, setLoanAmount, setLoanPurpose, setLoanFrequency, setTotalDebtAmount, setLoanAmountMin,\r\n setLoanAmountMax, setLoanTerm, setDebts, setDefaults, addDebt, editDebt, deleteDebt,\r\n deleteAllDebts, setRepaymentAmount, setFeesAndCharges, setLoanInterestRate, setUserInterestRateMode,\r\n} = calcSlice.actions;\r\n// selectors can use the imported `RootState` type\r\nexport const selectIsDebtConsolidation = (state: RootState): boolean => state.calc.isDebtConsolidation;\r\nexport const selectPendingActionCount = (state: RootState): number => state.calc.pendingActionCount;\r\nexport const selectLoanTerm = (state: RootState): number => state.calc.loanTerm;\r\nexport const selectLoanType = (state: RootState): string => state.calc.loanType;\r\nexport const selectLoanFrequency = (state: RootState): string => state.calc.loanFrequency;\r\nexport const selectLoanAmount = (state: RootState): number => state.calc.loanAmount;\r\nexport const selectLoanPurpose = (state: RootState): string => state.calc.loanPurpose;\r\nexport const selectTotalDebtAmount = (state: RootState): number => state.calc.totalDebtAmount;\r\nexport const selectLoanAmountMin = (state: RootState): number => state.calc.loanAmountMin;\r\nexport const selectLoanAmountMax = (state: RootState): number => state.calc.loanAmountMax;\r\nexport const selectDebts = (state: RootState): DebtInfoType[] => state.calc.debts;\r\nexport const selectDebtPurpose = (state: RootState): string => state.calc.debtPurpose;\r\nexport const selectCMS = (state: RootState): CMS => state.calc.cms;\r\nexport const selectFeesAndCharges = (state: RootState): FeesAndChargesType => state.calc.feesAndCharges;\r\nexport const selectInterestRates = (state: RootState): InterestRatesGroupType[] => state.calc.interestRates;\r\nexport const selectLoanInterestRate = (state: RootState): InterestRateType => state.calc.loanInterestRate;\r\nexport const selectUserInterestRateMode = (state: RootState): boolean => state.calc.userInterestRateMode;\r\nexport const selectRepayments = (state: RootState): RepaymentsType => state.calc.repayments;\r\nexport const selectRepaymentAmount = (state: RootState): number => state.calc.repaymentAmount;\r\n\r\nexport default calcSlice.reducer;\r\n","export const FREQUENCY_CONVERSIONS = Object.freeze({\r\n // Aligning with HLS\r\n FORTNIGHTLY: 26/12,\r\n WEEKLY: 52/12,\r\n});\r\n\r\nexport const COUNT_IN_YEAR = Object.freeze({\r\n MONTHLY: 12,\r\n FORTNIGHTLY: 26,\r\n WEEKLY: 52,\r\n});\r\n\r\n","/* eslint-disable @typescript-eslint/no-unsafe-return */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\r\n/* eslint-disable no-underscore-dangle */\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport { sanitize } from '@honeycomb-npm/honeycomb-react';\r\nimport { ReactElement } from 'react';\r\nimport { COUNT_IN_YEAR } from './constants/FrequencyCoversions.constants';\r\nimport { DebtInfoType } from './models/DebtInfoType';\r\n\r\n// sanitize and parse html from AEM into react elements\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const getStaticContent = (unsafeContent: string): ReactElement[] => {\r\n const safeContent = sanitize(unsafeContent, true);\r\n if (safeContent?.__html) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\r\n return ReactHtmlParser(String(safeContent?.__html));\r\n }\r\n return [];\r\n};\r\n\r\n// Preprocessor for AEM content that may include Test&Target campaign variations\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\r\nexport function applyTntVariants(content: any) {\r\n // finish recursive loop\r\n if (content === null || typeof content !== 'object') {\r\n return null;\r\n }\r\n\r\n if (content._variants) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const variant = (window as any).tntSelectedVariant;\r\n return variant && content._variants[variant]\r\n ? content._variants[variant]\r\n : content._variants._default;\r\n }\r\n\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const key of Object.keys(content)) {\r\n const val = applyTntVariants(content[key]);\r\n if (val) {\r\n // eslint-disable-next-line no-param-reassign\r\n content[key] = val;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport const processTemplate = (template: string, values: Record):string => {\r\n let resultTemplate = template;\r\n Object.keys(values).forEach(valueKey => {\r\n resultTemplate = resultTemplate.replace('${'+valueKey+'}', values[valueKey]);\r\n });\r\n return resultTemplate;\r\n};\r\n\r\nexport const parseCurrency = (amountString:string):number => {\r\n let result = amountString.split('$').join('').split(',').join('');\r\n if(result === '-'){\r\n result = '';\r\n }\r\n return Number(result);\r\n};\r\n\r\nexport const formatInterestRate = (value: string):string => {\r\n return Number.parseFloat(value).toFixed(2);\r\n};\r\n\r\nexport const parseBool = (booleanString: string): boolean =>{\r\n return booleanString?.trim().toLowerCase() === 'true';\r\n};\r\n\r\nexport const getFrequencyConversionFactor = (debtFrequency:string, loanFrequency:string): number => {\r\n let conversionFactor = 0;\r\n if(debtFrequency === loanFrequency){\r\n conversionFactor = 1;\r\n }else{\r\n conversionFactor = COUNT_IN_YEAR[debtFrequency.toUpperCase() as keyof typeof COUNT_IN_YEAR]/\r\n COUNT_IN_YEAR[loanFrequency.toUpperCase() as keyof typeof COUNT_IN_YEAR];\r\n }\r\n return conversionFactor;\r\n};\r\n\r\nexport const generateOptionalFieldsSummary = (debtInfoTypes: DebtInfoType[]): string =>{\r\n let value = '';\r\n if (debtInfoTypes?.length > 0) {\r\n const ongoingFee = debtInfoTypes.map(i => i.ongoingFeeValue ?? 0).reduce((x,y) => x + y,0);\r\n const interestRate = debtInfoTypes.map(i => i.interestRateValue ?? 0).reduce((x,y) => x + y,0);\r\n const remainingLoanTerm = debtInfoTypes.map(i => i.remainingLoanTermValue ?? 0).reduce((x,y) => x + y,0);\r\n const exitFee = debtInfoTypes.map(i => i.exitFeeValue ?? 0).reduce((x,y) => x + y,0);\r\n value = `ongoing-fee-${ongoingFee > 0 ?'t':'f'},interest-rate-${interestRate > 0 ?'t':'f'},remaining-loan-term-${remainingLoanTerm > 0 ?'t':'f'},exit-fee-${exitFee > 0 ?'t':'f'}`;\r\n const debtTypes = debtInfoTypes.map(i => i.debtType).filter((x, i, a) => a.indexOf(x) === i);\r\n debtTypes.forEach(debtType => {\r\n value += `,debttype-${debtType.toLocaleLowerCase()}`;\r\n });\r\n }\r\n return value;\r\n};\r\n\r\nexport const formatAnalyticsValue = (value: string): string =>{\r\n return value?.trim().replace(/\\//g, ' ').replace(/\\s+/g, '-').toLowerCase();\r\n};\r\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\nimport { ButtonAction } from '@honeycomb-npm/honeycomb-react';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectCMS } from '../../store/calcSlice';\r\nimport { getStaticContent } from '../../utils';\r\nimport { COMPARE_PL_URL } from './CalcCompare.constants';\r\nimport './CalcCompare.scss';\r\n\r\nconst CalcCompare = (): JSX.Element => {\r\n const { compareLabel, compareButton } = useSelector(selectCMS)?.comparePersonalLoans;\r\n const { guideMessage } = useSelector(selectCMS)?.footerTerms;\r\n const onCompareButtonClick = () => {\r\n window.open(COMPARE_PL_URL, '_blank');\r\n };\r\n return(\r\n
\r\n
\r\n
{getStaticContent(compareLabel)}
\r\n \r\n {getStaticContent(compareButton)}\r\n \r\n
\r\n
\r\n {getStaticContent(guideMessage)}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CalcCompare;\r\n","export const COMPARE_PL_URL = 'https://www.commbank.com.au/personal/personal-loans/comparison-table.html?ei=cb-pe-compare-def';\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport React, { VFC } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getStaticContent, parseBool, processTemplate } from '../../utils';\r\nimport { selectCMS, selectUserInterestRateMode } from '../../store/calcSlice';\r\nimport './CalcTerms.scss';\r\n\r\nconst CalcTerms: VFC = () => {\r\n const { termsAndConditions, offer } = useSelector(selectCMS);\r\n const userInterestRateMode = useSelector(selectUserInterestRateMode);\r\n let blurb = termsAndConditions.blurb;\r\n if(userInterestRateMode){\r\n blurb = processTemplate(blurb, { userInterestBlurb: termsAndConditions.userInterestBlurb });\r\n }else {\r\n blurb = processTemplate(blurb, { userInterestBlurb: '' });\r\n }\r\n return (\r\n
\r\n
\r\n
\r\n

\r\n {getStaticContent(termsAndConditions.title)}\r\n

\r\n
\r\n {parseBool(offer.isOfferExists) && getStaticContent(termsAndConditions?.offer)}\r\n {getStaticContent(blurb)}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CalcTerms;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport React from 'react';\r\nimport CalcTerms from './CalcTerms';\r\n\r\nconst CalcFooter: React.VFC = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default CalcFooter;\r\n","/* eslint-disable react/jsx-props-no-spreading */\r\nimport React, { ReactElement } from 'react';\r\nimport { ButtonAction, Modal } from '@honeycomb-npm/honeycomb-react';\r\nimport { getStaticContent } from '../../utils';\r\nimport './CalcModal.scss';\r\n\r\nexport type CalcModalContent = {\r\n title?: string;\r\n blurb?: string;\r\n closeBtn?: {\r\n showBtn: string;\r\n btnDetail: {\r\n controlId: string;\r\n displayText: string;\r\n };\r\n };\r\n};\r\n\r\nexport type CalcModalDetails = {\r\n id: string\r\n content?: CalcModalContent;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n};\r\n\r\nexport const CalcModal: React.FC = (props) => {\r\n const { id, content, isOpen, onClose } = props;\r\n\r\n const modelId = `${id}-modal-header`;\r\n\r\n return (\r\n \r\n <>\r\n

{getStaticContent(content?.title || '')}

\r\n {getStaticContent(content?.blurb || '')}\r\n {props.children}\r\n {content?.closeBtn?.showBtn === 'true' && (\r\n
\r\n \r\n {getStaticContent(content.closeBtn.btnDetail.displayText)}\r\n \r\n
\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport const showModal = (modalDetails: CalcModalDetails): ReactElement => ;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access */\r\nimport React, { useState, VFC } from 'react';\r\nimport { ButtonActionSubtle, Tooltip } from '@honeycomb-npm/honeycomb-react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getStaticContent, parseBool } from '../../utils';\r\nimport { selectCMS } from '../../store/calcSlice';\r\nimport { CalcModalContentsType } from '../../models/CalcModalTypes';\r\nimport { CalcModal } from '../shared/CalcModal';\r\nimport './CalcHeader.scss';\r\n\r\nexport type CalcHeaderProps = {\r\n header: {\r\n title: string;\r\n blurb: string;\r\n link: {\r\n displayText: string;\r\n };\r\n };\r\n disclaimerModal: CalcModalContentsType\r\n};\r\n\r\nconst CalcHeader: VFC = () => {\r\n const { header, disclaimerModal } = useSelector(selectCMS);\r\n const CMS_offer = useSelector(selectCMS).offer;\r\n const [displayModal, setDisplayModal] = useState(false);\r\n const openCalculatorDetails = () => setDisplayModal(true);\r\n const closeCalculatorDetails = () => setDisplayModal(false);\r\n const aboutCalcDetails = {\r\n title: String(getStaticContent(disclaimerModal.title)),\r\n blurb: '',\r\n closeBtn: {\r\n showBtn: String(getStaticContent(disclaimerModal.closeBtn.showBtn)),\r\n btnDetail: {\r\n controlId: String(getStaticContent(disclaimerModal.closeBtn.btnDetail.controlId)),\r\n displayText: String(getStaticContent(disclaimerModal.closeBtn.btnDetail.displayText)),\r\n },\r\n },\r\n };\r\n return (\r\n
\r\n \r\n {getStaticContent(disclaimerModal.blurb1)}\r\n

\r\n {getStaticContent(disclaimerModal.blurb2)} \r\n  \r\n {getStaticContent(disclaimerModal.blurb3)}\r\n

\r\n
\r\n

{getStaticContent(header?.title)}

\r\n
\r\n {getStaticContent(header?.blurb)}\r\n {parseBool(CMS_offer.isOfferExists) && getStaticContent(header?.offer)}\r\n \r\n {getStaticContent(header?.link?.displayText)}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CalcHeader;\r\n","export const DEBT_TYPES = Object.freeze({\r\n LOAN: 'loan',\r\n CREDITCARD: 'creditCard',\r\n OVERDRAFT: 'overdraft',\r\n});\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport {\r\n Accordion,\r\n AccordionContent,\r\n AccordionHeader,\r\n ButtonActionEmphasis,\r\n ButtonActionSubtle,\r\n Dropdown,\r\n Formatters,\r\n TextField,\r\n TextInputHelperCurrency,\r\n Tooltip,\r\n} from '@honeycomb-npm/honeycomb-react';\r\nimport { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { DebtDetailsPropsType } from '../../../models/DebtDetailsPropsType';\r\nimport { DropdownType } from '../../../models/DropdownType';\r\nimport { addDebt, decreasePendingActionCount, editDebt, selectCMS, selectDebts } from '../../../store/calcSlice';\r\nimport { getStaticContent, parseCurrency } from '../../../utils';\r\nimport { DEBT_TYPES } from '../../../constants/DebtTypes.constants';\r\nimport './DebtDetails.scss';\r\n\r\nconst DebtDetails = (props: DebtDetailsPropsType): JSX.Element => {\r\n const optionalInfoHeaderId = 'calculate_debtConsolidation_btnToggleAdditionalInfo';\r\n const dispatch = useDispatch();\r\n const { debtDetails, isEditMode, onEdit, onCancel, isAddingAnotherDebtMode } = props;\r\n const {\r\n debtTypeDefaultOption,\r\n debtTypeLabel,\r\n debtTypeOptions,\r\n debtAmount,\r\n optionalInfo,\r\n addDebtBtn,\r\n cancelBtn,\r\n debtTypeValidation,\r\n updateDebtBtn,\r\n debtTypeTooltipText,\r\n ongoingFee,\r\n exitFee,\r\n interestRate: interestRate_CMS,\r\n remainingLoanTerm: remainingLoanTerm_CMS,\r\n } = useSelector(selectCMS)?.debtModal;\r\n const debtsArray = useSelector(selectDebts);\r\n const { repaymentAmount } = useSelector(selectCMS);\r\n const [debtTypeValue, setDebtTypeValue] = useState(debtDetails?.debtType || '');\r\n const [debtAmountValue, setDebtAmountValue] = useState(debtDetails?.debtAmount || 0);\r\n const [repaymentAmountValue, setRepaymentAmountValue] = useState(debtDetails?.repaymentAmount || 0);\r\n const [repaymentFrequencyValue, setRepaymentFrequencyValue] = useState(\r\n debtDetails?.repaymentFrequency || repaymentAmount.repaymentFrequencyDefaultOption\r\n );\r\n const [ongoingFeeValue, setOngoingFeeValue] = useState(debtDetails?.ongoingFeeValue || 0);\r\n const [exitFeeValue, setExitFeeValue] = useState(debtDetails?.exitFeeValue || 0);\r\n const [interestRateValue, setInterestRateValue] = useState(debtDetails?.interestRateValue || 0);\r\n const [remainingLoanTermValue, setRemainingLoanTermValue] = useState(debtDetails?.remainingLoanTermValue || 0);\r\n const [isValidInterestRate, setIsValidInterestRate] = useState(true);\r\n const [isValidRemainingLoanTerm, setIsValidRemainingLoanTerm] = useState(true);\r\n const [isValidRepayment, setIsValidRepayment] = useState(true);\r\n const [isValidDebtType, setIsValidDebtType] = useState(true);\r\n\r\n const validateDebtType = (value: string) => {\r\n setIsValidDebtType(value !== '');\r\n };\r\n\r\n const validateRepaymentAmount = (repaymentAmt: number, debtAmt: number) => {\r\n if (!repaymentAmt) {\r\n setIsValidRepayment(false);\r\n } else if (debtAmt <= repaymentAmt) {\r\n setIsValidRepayment(false);\r\n } else {\r\n setIsValidRepayment(true);\r\n }\r\n };\r\n\r\n const onChangeDebtType = (name: string, value: string) => {\r\n setDebtTypeValue(value);\r\n validateDebtType(value);\r\n // clear all additional info when debt type is changed as it is dependent on type\r\n setOngoingFeeValue(0);\r\n setExitFeeValue(0);\r\n setInterestRateValue(0);\r\n setRemainingLoanTermValue(0);\r\n };\r\n const onChangeDebtAmount = (name: string, value: string) => {\r\n setDebtAmountValue(Number(value));\r\n validateRepaymentAmount(repaymentAmountValue, Number(value));\r\n validateDebtType(debtTypeValue);\r\n };\r\n const onChangeRepaymentAmount = (name: string, value: string) => {\r\n const parsedValue = parseCurrency(value);\r\n setRepaymentAmountValue(parsedValue);\r\n validateRepaymentAmount(parsedValue, debtAmountValue);\r\n validateDebtType(debtTypeValue);\r\n };\r\n const onBlurRepaymentAmount = (name: string, value: string) => {\r\n validateRepaymentAmount(repaymentAmountValue, debtAmountValue);\r\n };\r\n const onChangeRepaymentFreq = (name: string, value: string) => {\r\n setRepaymentFrequencyValue(value);\r\n };\r\n const onChangeOnGoingFee = (name: string, value: string) => {\r\n setOngoingFeeValue(Number(value));\r\n };\r\n const onChangeExitFee = (name: string, value: string) => {\r\n setExitFeeValue(Number(value));\r\n };\r\n const onChangeInterestRate = (name: string, value: string) => {\r\n setInterestRateValue(Number(value));\r\n };\r\n const onChangeRemainingLoanTerm = (name: string, value: string) => {\r\n setRemainingLoanTermValue(Number(value));\r\n };\r\n const validateInterestRate = (value: number) => {\r\n if (value > 0) {\r\n setIsValidInterestRate(true);\r\n } else if (value < 0 || remainingLoanTermValue > 0) {\r\n setIsValidInterestRate(false);\r\n } else {\r\n setIsValidInterestRate(true);\r\n }\r\n };\r\n\r\n const validateRemainingLoanTerm = (value: number) => {\r\n if (value <= 0 && ongoingFeeValue > 0) {\r\n setIsValidRemainingLoanTerm(false);\r\n } else if (value > 0) {\r\n setIsValidRemainingLoanTerm(true);\r\n } else if (value < 0 || interestRateValue > 0) {\r\n setIsValidRemainingLoanTerm(false);\r\n } else {\r\n setIsValidRemainingLoanTerm(true);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (debtTypeValue === DEBT_TYPES.LOAN) {\r\n validateInterestRate(interestRateValue);\r\n validateRemainingLoanTerm(remainingLoanTermValue);\r\n }\r\n }, [interestRateValue, ongoingFeeValue, remainingLoanTermValue]);\r\n const isDataValid = () => {\r\n if (\r\n debtTypeValue !== '' &&\r\n debtAmountValue > 0 &&\r\n repaymentAmountValue > 0 &&\r\n repaymentFrequencyValue !== null &&\r\n isValidInterestRate &&\r\n isValidRemainingLoanTerm &&\r\n debtsArray.length <= 5 &&\r\n debtAmountValue > repaymentAmountValue\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const onAddDebt = () => {\r\n const debtInfo = {\r\n id: Date.now(),\r\n debtType: debtTypeValue,\r\n debtAmount: debtAmountValue,\r\n repaymentAmount: repaymentAmountValue,\r\n repaymentFrequency: repaymentFrequencyValue,\r\n ongoingFeeValue: ongoingFeeValue,\r\n exitFeeValue: exitFeeValue,\r\n interestRateValue: interestRateValue,\r\n remainingLoanTermValue: remainingLoanTermValue,\r\n };\r\n dispatch(addDebt(debtInfo));\r\n setOngoingFeeValue(0);\r\n setExitFeeValue(0);\r\n setInterestRateValue(0);\r\n setRemainingLoanTermValue(0);\r\n props.onAddDebt?.();\r\n if (isAddingAnotherDebtMode) {\r\n dispatch(decreasePendingActionCount());\r\n }\r\n };\r\n const onEditDebt = () => {\r\n if (debtDetails) {\r\n const updatedDebt = {\r\n id: debtDetails.id,\r\n debtType: debtTypeValue,\r\n debtAmount: debtAmountValue,\r\n repaymentAmount: repaymentAmountValue,\r\n repaymentFrequency: repaymentFrequencyValue,\r\n ongoingFeeValue: ongoingFeeValue,\r\n exitFeeValue: exitFeeValue,\r\n interestRateValue: interestRateValue,\r\n remainingLoanTermValue: remainingLoanTermValue,\r\n };\r\n dispatch(editDebt(updatedDebt));\r\n onEdit?.(false);\r\n dispatch(decreasePendingActionCount());\r\n }\r\n };\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n ({\r\n label: String(getStaticContent(debtTypeOption.value)),\r\n value: String(getStaticContent(debtTypeOption.key)),\r\n }))}\r\n value={String(debtTypeValue)}\r\n isValid={isValidDebtType}\r\n aria-labelledby=\"debtTypeLabel\"\r\n />\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n ({\r\n label: String(getStaticContent(repaymentFrequencyOption.value)),\r\n value: String(getStaticContent(repaymentFrequencyOption.key)),\r\n }))}\r\n value={repaymentFrequencyValue}\r\n hideDefaultOption={true}\r\n />\r\n
\r\n
\r\n \r\n \r\n {getStaticContent(optionalInfo?.title)}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {getStaticContent(ongoingFee.frequency)}\r\n
\r\n
\r\n {debtTypeValue === DEBT_TYPES.LOAN && (\r\n <>\r\n
\r\n
\r\n \r\n
\r\n
\r\n {getStaticContent(interestRate_CMS.frequency)}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {getStaticContent(remainingLoanTerm_CMS.frequency)}\r\n
\r\n
\r\n \r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {isEditMode ? getStaticContent(updateDebtBtn.btnDetail.displayText) : getStaticContent(addDebtBtn.btnDetail.displayText)}\r\n \r\n
\r\n
\r\n \r\n {getStaticContent(cancelBtn.btnDetail.displayText)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default DebtDetails;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport { ButtonAction, ButtonActionSubtle, Currency } from '@honeycomb-npm/honeycomb-react';\r\nimport React, { useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { DropdownType } from '../../models/DropdownType';\r\nimport { LoanCardPropsType } from '../../models/LoanCardPropsType';\r\nimport { decreasePendingActionCount, increasePendingActionCount, selectCMS } from '../../store/calcSlice';\r\nimport { getStaticContent } from '../../utils';\r\nimport DebtDetails from '../CalcInput/DebtConsolidation/DebtDetails';\r\nimport './LoanCard.scss';\r\n\r\nconst LoanCard: React.VFC = (props) => {\r\n const dispatch = useDispatch();\r\n const { id, label, debtAmount, debtType, debtDetails, onDeleteDebt, onEditDebt } = props;\r\n const [isDeleteMode, setIsDeleteMode] = useState(false);\r\n const [isEditMode, setIsEditMode] = useState(false);\r\n const { confirmDeleteMessage, editBtn, goBackBtn, deleteBtn } = useSelector(selectCMS)?.loanCard;\r\n const debtTypeValue = useSelector(selectCMS)?.debtModal?.debtTypeOptions?.find((opt: DropdownType) => opt.key === debtType);\r\n const deleteDebt = (id: number) => {\r\n onDeleteDebt(id);\r\n };\r\n const onEdit = (isEditMode: boolean) => {\r\n onEditDebt? onEditDebt() : setIsEditMode(isEditMode);\r\n // increasePendingActionCount shouldn't be called in main screen\r\n if(isEditMode && !onEditDebt){\r\n dispatch(increasePendingActionCount());\r\n }\r\n };\r\n const onCancel = () => {\r\n setIsEditMode(false);\r\n dispatch(decreasePendingActionCount());\r\n };\r\n const onDelete = () => {\r\n setIsDeleteMode(true);\r\n };\r\n const onGoBack = () => {\r\n setIsDeleteMode(false);\r\n };\r\n\r\n return (\r\n
\r\n {isDeleteMode ? (\r\n <>\r\n
\r\n

{getStaticContent(confirmDeleteMessage)}

\r\n \r\n {getStaticContent(goBackBtn.btnDetail.displayText)}\r\n \r\n deleteDebt(id)}>\r\n {getStaticContent(deleteBtn.btnDetail.displayText)}\r\n \r\n
\r\n \r\n ) : isEditMode ? (\r\n \r\n ) : (\r\n <>\r\n
\r\n

\r\n {label} \r\n {debtTypeValue?.value}\r\n

\r\n \r\n
\r\n
\r\n onEdit(true)}>\r\n {getStaticContent(editBtn.btnDetail.displayText)}\r\n \r\n |\r\n \r\n {getStaticContent(deleteBtn.btnDetail.displayText)}\r\n \r\n
\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default LoanCard;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { DebtInfoType } from '../../../models/DebtInfoType';\r\nimport { selectDebts, deleteDebt, selectCMS } from '../../../store/calcSlice';\r\nimport LoanCard from '../../shared/LoanCard';\r\n\r\nconst LoanType: React.VFC = () => {\r\n const dispatch = useDispatch();\r\n const debtsValue = useSelector(selectDebts);\r\n const { label } = useSelector(selectCMS)?.loanCard;\r\n const onDeleteDebt = (id: number) => {\r\n dispatch(deleteDebt(id));\r\n };\r\n return (\r\n
\r\n {debtsValue.map((debtValue: DebtInfoType) => {\r\n return ();\r\n })}\r\n
\r\n );\r\n};\r\n\r\nexport default LoanType;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { Currency, Formatters } from '@honeycomb-npm/honeycomb-react';\r\nimport { ErrorMessage } from '@honeycomb-npm/honeycomb-react';\r\nimport { getStaticContent, processTemplate } from '../../../utils';\r\nimport { selectCMS, selectLoanAmountMax, selectLoanAmountMin, selectTotalDebtAmount } from '../../../store/calcSlice';\r\nimport './TotalDebtAmount.scss';\r\n\r\nconst TotalDebtAmount: React.VFC = () => {\r\n const totalDebtAmountValue = useSelector(selectTotalDebtAmount);\r\n const loanAmountMinValue = useSelector(selectLoanAmountMin);\r\n const loanAmountMaxValue = useSelector(selectLoanAmountMax);\r\n const { totalDebtAmount } = useSelector(selectCMS);\r\n const errorMessageParsed = processTemplate(totalDebtAmount.errorMessage, {\r\n minLoanAmount: Formatters.formatCurrency(Number(loanAmountMinValue), 'AUD', 'symbol', 0),\r\n maxLoanAmount: Formatters.formatCurrency(Number(loanAmountMaxValue), 'AUD', 'symbol', 0),\r\n });\r\n return (\r\n
\r\n
\r\n
\r\n

{getStaticContent(totalDebtAmount.label)}

\r\n
\r\n
\r\n \r\n
\r\n
\r\n {totalDebtAmountValue < loanAmountMinValue || totalDebtAmountValue > loanAmountMaxValue ? (\r\n \r\n ) : null}\r\n
\r\n );\r\n};\r\n\r\nexport default TotalDebtAmount;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access */\r\nimport { ButtonActionEmphasis, ButtonActionSubtle, Dropdown, Modal, Tooltip } from '@honeycomb-npm/honeycomb-react';\r\nimport { useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { DropdownType } from '../../../models/DropdownType';\r\nimport {\r\n decreasePendingActionCount,\r\n increasePendingActionCount,\r\n selectCMS,\r\n selectDebtPurpose,\r\n selectDebts,\r\n selectLoanAmountMax,\r\n selectLoanAmountMin,\r\n selectPendingActionCount,\r\n selectTotalDebtAmount,\r\n setDebtPurpose,\r\n setIsDebtConsolidation,\r\n setLoanAmount,\r\n} from '../../../store/calcSlice';\r\nimport { formatAnalyticsValue, generateOptionalFieldsSummary, getStaticContent } from '../../../utils';\r\nimport DebtDetails from './DebtDetails';\r\nimport DebtSummary from './DebtSummary';\r\nimport TotalDebtAmount from './TotalDebtAmount';\r\nimport './DebtModal.scss';\r\n\r\nconst DebtModal = (props: {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n}): JSX.Element => {\r\n const ddlDebtPurposeId = 'calculate_debtConsolidation_ddlDebtPurpose';\r\n const [scDebtPurposeValue, setSCDebtPurposeValue] = useState('');\r\n const [scOptionalFieldsValue, setSCOptionalFieldsValue] = useState('');\r\n const dispatch = useDispatch();\r\n const { isOpen, onClose } = props;\r\n const { debtModal } = useSelector(selectCMS);\r\n const pendingActionCount = useSelector(selectPendingActionCount);\r\n const debtsArray = useSelector(selectDebts);\r\n const loanAmountMinValue = useSelector(selectLoanAmountMin);\r\n const loanAmountMaxValue = useSelector(selectLoanAmountMax);\r\n const totalDebtAmountValue = useSelector(selectTotalDebtAmount);\r\n const [ isAddingAnotherDebt, setIsAddingAnotherDebt ] = useState(false);\r\n const [ debtDetailsKey , setDebtDetailsKey ] = useState(0);\r\n const [isValidDebtPurpose, setIsValidDebtPurpose] = useState(true);\r\n const isAddFirstDebtMode = debtsArray.length === 0;\r\n const debtPurposeValue = useSelector(selectDebtPurpose);\r\n const isValidData = () =>\r\n totalDebtAmountValue <= loanAmountMaxValue &&\r\n totalDebtAmountValue >= loanAmountMinValue &&\r\n debtPurposeValue !== '' &&\r\n pendingActionCount === 0;\r\n\r\n const onChangeDebtConsolidation = (name: string, value: string) => {\r\n dispatch(setDebtPurpose(value));\r\n const displayValue = debtModal.debtPurposeOptions.find((i: { key: string; }) => i.key === value)?.value;\r\n setSCDebtPurposeValue(formatAnalyticsValue(displayValue));\r\n validateDebtPurpose(value);\r\n };\r\n const onAddAnotherDebt = () => {\r\n setIsAddingAnotherDebt(true);\r\n dispatch(increasePendingActionCount());\r\n };\r\n const onAddFirstDebtModeCancel = () => {\r\n closeModal();\r\n };\r\n const closeModal = () => {\r\n if(!isAddFirstDebtMode && debtPurposeValue !== '' && pendingActionCount !== 0) {\r\n return null;\r\n }\r\n if(debtsArray.length < 1){\r\n onClose();\r\n setDebtDetailsKey(debtDetailsKey + 1);\r\n setIsValidDebtPurpose(true);\r\n }\r\n onOk();\r\n };\r\n const onOk = () => {\r\n if(!isAddFirstDebtMode && debtPurposeValue !== '' && pendingActionCount === 0){\r\n dispatch(setIsDebtConsolidation(true));\r\n dispatch(setLoanAmount(totalDebtAmountValue));\r\n setSCOptionalFieldsValue(generateOptionalFieldsSummary(debtsArray));\r\n onClose();\r\n }\r\n };\r\n const onAddDebt = () => {\r\n setIsAddingAnotherDebt(false);\r\n validateDebtPurpose(debtPurposeValue);\r\n };\r\n const cancelAddAnotherDebt = () => {\r\n setIsAddingAnotherDebt(false);\r\n dispatch(decreasePendingActionCount());\r\n };\r\n const validateDebtPurpose = (value: string) => {\r\n setIsValidDebtPurpose(value !== '');\r\n };\r\n return (\r\n
\r\n \r\n <>\r\n

{getStaticContent(debtModal.title)}

\r\n

\r\n {getStaticContent(debtModal.blurb)} \r\n \r\n

\r\n
\r\n ({\r\n label: String(getStaticContent(debtPurposeOption.value)),\r\n value: String(getStaticContent(debtPurposeOption.key)),\r\n }))}\r\n value={String(debtPurposeValue)}\r\n errormessage={String(getStaticContent(debtModal.debtPurposeValidation))}\r\n isValid={isValidDebtPurpose}\r\n />\r\n \r\n
\r\n {isAddFirstDebtMode ? (\r\n \r\n ) : (\r\n <>\r\n \r\n {isAddingAnotherDebt &&\r\n
\r\n \r\n
}\r\n \r\n {(!isAddingAnotherDebt && debtsArray.length < 5 && totalDebtAmountValue <= loanAmountMaxValue) &&\r\n \r\n {getStaticContent(debtModal.addAnotherDebt.btnDetail.displayText)}\r\n }\r\n
\r\n \r\n {getStaticContent(debtModal.okBtn.btnDetail.displayText)}\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 DebtModal;\r\n","// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport const updateAnalyticsField = (elementId: string, elementValue: string, event = 'change') => {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any\r\n const page = window as any;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\r\n if (page.SMT && !page.SMT.isLoadSuccess) {\r\n setTimeout(() => {\r\n updateAnalyticsField(elementId, elementValue, event);\r\n }, 500);\r\n return;\r\n }\r\n\r\n const elementBindToAnalytics = document.getElementById(elementId) ?? null;\r\n\r\n if (elementBindToAnalytics) {\r\n (elementBindToAnalytics as HTMLInputElement).value = elementValue;\r\n setTimeout(() => {\r\n if (elementBindToAnalytics && elementBindToAnalytics.dispatchEvent) {\r\n elementBindToAnalytics.dispatchEvent(new CustomEvent(event, {\r\n bubbles: true,\r\n composed: true,\r\n }));\r\n }\r\n }, 500);\r\n }\r\n\r\n return elementBindToAnalytics;\r\n};\r\n","/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access */\r\nimport { useState } from 'react';\r\nimport { TextField, Formatters } from '@honeycomb-npm/honeycomb-react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { getStaticContent, processTemplate, parseCurrency } from '../../utils';\r\nimport { selectCMS, selectLoanAmount, selectLoanAmountMax, setLoanAmount } from '../../store/calcSlice';\r\nimport { updateAnalyticsField } from '../../utils/analyticsutils';\r\nimport './LoanAmount.scss';\r\n\r\nexport type LoanAmountProps = {\r\n label: string;\r\n errorMessage: string;\r\n defaultLoanAmount: string;\r\n minLoanAmount: string;\r\n maxLoanAmount: string;\r\n maxLoanAmountSecured: string;\r\n};\r\n\r\nconst LoanAmount: React.VFC = () => {\r\n const invalidLoanAmountErrorId = 'calculate_validationLoanAmountInvalidData';\r\n const [scLoanAmountErrorValue, setSCLoanAmountErrorValue] = useState('');\r\n const dispatch = useDispatch();\r\n const { label, errorMessage, minLoanAmount } = useSelector(selectCMS)?.loanAmount;\r\n const maxLoanAmount = useSelector(selectLoanAmountMax);\r\n const errorMessageParsed = processTemplate(errorMessage, {\r\n minLoanAmount: Formatters.formatCurrency(Number(minLoanAmount), 'AUD', 'symbol', 0),\r\n maxLoanAmount: Formatters.formatCurrency(Number(maxLoanAmount), 'AUD', 'symbol', 0),\r\n });\r\n const loanAmountValue = useSelector(selectLoanAmount);\r\n const isValidLoanAmount = (loanAmount: number) => {\r\n return loanAmount >= Number(minLoanAmount) && loanAmount <= Number(maxLoanAmount);\r\n };\r\n const handleAmountChange = (name: string, value: string) => {\r\n dispatch(setLoanAmount(parseCurrency(value)));\r\n };\r\n const triggerAnalyticsEvent = (name: string, value: string) => {\r\n if (!isValidLoanAmount(loanAmountValue)) {\r\n setSCLoanAmountErrorValue(`error-${loanAmountValue > Number(maxLoanAmount) ? 'max':'min'}`);\r\n updateAnalyticsField(invalidLoanAmountErrorId, value);\r\n }\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LoanAmount;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport { useState } from 'react';\r\nimport { Dropdown } from '@honeycomb-npm/honeycomb-react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { getStaticContent, formatAnalyticsValue } from '../../utils';\r\nimport { selectCMS, selectLoanPurpose, setLoanPurpose, selectLoanType } from '../../store/calcSlice';\r\nimport { DropdownType } from '../../models/DropdownType';\r\nimport { LOAN_TYPES } from '../../constants/LoanTypes.constants';\r\nimport './LoanPurpose.scss';\r\n\r\n\r\nexport type LoanPurposeProps = {\r\n loanPurposeOptions: DropdownType[],\r\n title: string,\r\n blurb: string,\r\n defaultOption: string,\r\n}\r\n\r\nconst LoanPurpose: React.VFC = () => {\r\n const ddlLanPurposeId = 'calculate_ddlLoanPurpose';\r\n const [scLoanPurposeValue, setSCLoanPurposeValue] = useState('');\r\n const dispatch = useDispatch();\r\n let {\r\n loanPurposeOptions,\r\n } = useSelector(selectCMS)?.loanPurpose;\r\n const {\r\n blurb, splLoanPurposeOptions,\r\n } = useSelector(selectCMS)?.loanPurpose;\r\n const selectedLoanType = useSelector(selectLoanType);\r\n if (selectedLoanType === LOAN_TYPES.PERSONAL_LOAN_SECURED) {\r\n loanPurposeOptions = splLoanPurposeOptions;\r\n }\r\n const loanPurposeValue = useSelector(selectLoanPurpose);\r\n const onChangeHandler = (name: string, value: string) => {\r\n dispatch(setLoanPurpose(value));\r\n if (value !== loanPurposeValue) {\r\n const displayValue = loanPurposeOptions.find((i: { key: string; }) => i.key === value).value;\r\n setSCLoanPurposeValue(formatAnalyticsValue(displayValue));\r\n }\r\n };\r\n return (\r\n <>\r\n ({\r\n label: String(getStaticContent(loanPurposeOption.value)),\r\n value: String(getStaticContent(loanPurposeOption.key)),\r\n })\r\n )}\r\n value={String(loanPurposeValue)}\r\n hideDefaultOption={true}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default LoanPurpose;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport React, { useState } from 'react';\r\nimport ToggleButton from 'react-bootstrap/ToggleButton';\r\nimport { Tooltip } from '@honeycomb-npm/honeycomb-react';\r\nimport ToggleButtonGroup from 'react-bootstrap/ToggleButtonGroup';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { getStaticContent } from '../../utils';\r\nimport { selectCMS, selectLoanTerm, setLoanTerm } from '../../store/calcSlice';\r\nimport { updateAnalyticsField } from '../../utils/analyticsutils';\r\nimport './LoanTerm.scss';\r\n\r\nexport type LoanTermProps = {\r\n loanTermOptions: string[],\r\n title: string,\r\n}\r\n\r\nconst LoanTerm:React.VFC = () => {\r\n const btnGrpLoanTermId = 'calculate_btnGrpLoanTerm';\r\n const [scLoanTermValue, setSCLoanTermValue] = useState('');\r\n const dispatch = useDispatch();\r\n const { loanTermOptions, title, tooltipLabel, tooltipText } = useSelector(selectCMS)?.loanTerm;\r\n const loanTerm:number = useSelector(selectLoanTerm);\r\n const handleChange = (val:string) => {\r\n dispatch(setLoanTerm(parseInt(val)));\r\n setSCLoanTermValue(`loan-term-${val}`);\r\n updateAnalyticsField(btnGrpLoanTermId, '', 'click');\r\n } ;\r\n\r\n return (\r\n
\r\n

\r\n {getStaticContent(title)} \r\n \r\n

\r\n \r\n {loanTermOptions.map((loanTermOption: string[], index: number) => (\r\n \r\n {loanTermOption}\r\n \r\n ))}\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LoanTerm;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access */\r\nimport { Formatters, Tooltip } from '@honeycomb-npm/honeycomb-react';\r\nimport { useSelector } from 'react-redux';\r\nimport { LOAN_TYPES } from '../../constants/LoanTypes.constants';\r\nimport { getInterestRange, getInterestRepRate } from '../../services/interests.service';\r\nimport { selectCMS, selectFeesAndCharges, selectInterestRates } from '../../store/calcSlice';\r\nimport { getStaticContent, processTemplate, formatInterestRate, parseBool } from '../../utils';\r\nimport './LoanInfoSection.scss';\r\n\r\nconst LoanInfoSection = (props: { loanType: string }): JSX.Element => {\r\n const { loanTypeInfoModal } = useSelector(selectCMS)?.loanType;\r\n const loanTypesInfo = loanTypeInfoModal?.loanTypesInfo;\r\n const { loanType } = props;\r\n const interestRates = useSelector(selectInterestRates);\r\n const feesAndCharges = useSelector(selectFeesAndCharges);\r\n const CMS_offer = useSelector(selectCMS).offer;\r\n\r\n const repRateInterest = processTemplate(loanTypesInfo[loanType]?.representativeRateSection?.interestRate, {\r\n interestRate: formatInterestRate(String(getInterestRepRate(interestRates, loanType)?.interestRate)),\r\n });\r\n const repRateRange = processTemplate(loanTypesInfo[loanType]?.representativeRateSection?.rateRange, {\r\n minRange: formatInterestRate(String(getInterestRange(interestRates, loanType)?.min.interestRate)),\r\n maxRange: formatInterestRate(String(getInterestRange(interestRates, loanType)?.max.interestRate)),\r\n });\r\n const compRateInterest = processTemplate(loanTypesInfo[loanType]?.comparisonRateSection?.interestRate, {\r\n interestRate: formatInterestRate(String(getInterestRepRate(interestRates, loanType)?.comparisonRate)),\r\n });\r\n const compRateRange = processTemplate(loanTypesInfo[loanType]?.comparisonRateSection?.rateRange, {\r\n minRange: formatInterestRate(String(getInterestRange(interestRates, loanType)?.min.comparisonRate)),\r\n maxRange: formatInterestRate(String(getInterestRange(interestRates, loanType)?.max.comparisonRate)),\r\n });\r\n const establishmentFee = processTemplate(loanTypesInfo[loanType]?.establishmentFee?.value, {\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n establishmentFee: Formatters.formatCurrency(Number(feesAndCharges[loanType.toLowerCase()].establishmentFee)),\r\n });\r\n const monthlyFee = processTemplate(loanTypesInfo[loanType]?.monthlyFee?.value, {\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n monthlyServiceFee: Formatters.formatCurrency(Number(feesAndCharges[loanType.toLowerCase()].monthlyServiceFee)),\r\n });\r\n\r\n return (\r\n
\r\n
\r\n
{getStaticContent(loanTypesInfo[loanType].representativeRateSection.title)}
\r\n
\r\n {repRateRange} \r\n {getStaticContent(loanTypesInfo[loanType].representativeRateSection.usualRateRange)}\r\n
\r\n
\r\n {repRateInterest} \r\n {getStaticContent(loanTypesInfo[loanType].representativeRateSection.usualInterestRate)}\r\n
\r\n
\r\n
\r\n
{getStaticContent(loanTypesInfo[loanType].comparisonRateSection.title)}
\r\n
\r\n {compRateRange} \r\n {getStaticContent(loanTypesInfo[loanType].comparisonRateSection.usualRateRange)}\r\n
\r\n
\r\n {compRateInterest} \r\n {getStaticContent(loanTypesInfo[loanType].comparisonRateSection.usualInterestRate)}\r\n
\r\n
\r\n
\r\n
{getStaticContent(loanTypesInfo[loanType].blurb)}
\r\n {parseBool(CMS_offer.isOfferExists) &&
{getStaticContent(loanTypesInfo[loanType].offer)}
}\r\n
\r\n
\r\n
\r\n
\r\n
{getStaticContent(loanTypesInfo[loanType].extraRepayments.name)}
\r\n
{getStaticContent(loanTypesInfo[loanType].extraRepayments.value)}
\r\n
\r\n
\r\n
{getStaticContent(loanTypesInfo[loanType].establishmentFee.name)}
\r\n
{establishmentFee}
\r\n
\r\n
\r\n
{getStaticContent(loanTypesInfo[loanType].borrowFrom.name)}
\r\n {loanType === LOAN_TYPES.PERSONAL_LOAN_SECURED ? (\r\n <>\r\n \r\n \r\n \r\n \r\n ) : (\r\n
{getStaticContent(loanTypesInfo[loanType].borrowFrom.value)}
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
{getStaticContent(loanTypesInfo[loanType].loanTerm.name)}
\r\n
{getStaticContent(loanTypesInfo[loanType].loanTerm.value)}
\r\n
\r\n
\r\n
{getStaticContent(loanTypesInfo[loanType].monthlyFee.name)}
\r\n
{monthlyFee}
\r\n
\r\n
\r\n
{getStaticContent(loanTypesInfo[loanType].redrawOption.name)}
\r\n
{getStaticContent(loanTypesInfo[loanType].redrawOption.value)}
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default LoanInfoSection;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport { Accordion, AccordionContent, AccordionHeader, ButtonActionSubtle } from '@honeycomb-npm/honeycomb-react';\r\nimport { useState, VFC } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { CalcModalContentsType } from '../../models/CalcModalTypes';\r\nimport { selectCMS } from '../../store/calcSlice';\r\nimport { getStaticContent } from '../../utils';\r\nimport { CalcModal } from '../shared/CalcModal';\r\nimport LoanInfoSection from './LoanInfoSection';\r\nimport './LoanTypeInfo.scss';\r\n\r\nexport type LoanTypeInfoProps = {\r\n link: {\r\n displayText: string;\r\n };\r\n loanTypeInfoModal: CalcModalContentsType & LoanTypesInfoModel\r\n};\r\n\r\nexport type LoanTypeInfoModel = {\r\n title: string;\r\n blurb: string;\r\n}\r\n\r\nexport type LoanTypesInfoModel = {\r\n PLF : LoanTypeInfoModel;\r\n PLV : LoanTypeInfoModel;\r\n PLS : LoanTypeInfoModel;\r\n}\r\n\r\nconst LoanTypeInfo: VFC = () => {\r\n const { link, loanTypeInfoModal } = useSelector(selectCMS)?.loanType;\r\n const loanTypesInfo = loanTypeInfoModal?.loanTypesInfo;\r\n const [displayModal, setDisplayModal] = useState(false);\r\n const openLoanTypeInfo = () => setDisplayModal(true);\r\n const closeLoanTypeInfo = () => setDisplayModal(false);\r\n return (\r\n
\r\n \r\n \r\n
    \r\n { Object.keys(loanTypesInfo).map((key,index) => (\r\n
  • \r\n \r\n {getStaticContent(loanTypesInfo[key].title)}\r\n \r\n \r\n \r\n \r\n
  • \r\n ))}\r\n
\r\n
\r\n
\r\n \r\n {getStaticContent(link.displayText)}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LoanTypeInfo;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport React, { useState } from 'react';\r\nimport ToggleButton from 'react-bootstrap/ToggleButton';\r\nimport ToggleButtonGroup from 'react-bootstrap/ToggleButtonGroup';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { getStaticContent } from '../../utils';\r\nimport { selectCMS, selectLoanType, setLoanAmountMax, setLoanType } from '../../store/calcSlice';\r\nimport { LOAN_TYPES } from '../../constants/LoanTypes.constants';\r\nimport { updateAnalyticsField } from '../../utils/analyticsutils';\r\nimport LoanTypeInfo, { LoanTypeInfoProps } from './LoanTypeInfo';\r\nimport './LoanType.scss';\r\n\r\nexport type LoanTypeOption = {\r\n key: string;\r\n value: string;\r\n};\r\n\r\nexport type LoanTypeProps = {\r\n loanTypeOptions: LoanTypeOption[];\r\n title: string;\r\n defaultLoanType: string;\r\n loanTypeInfoProps: LoanTypeInfoProps;\r\n};\r\n\r\nconst LoanType: React.VFC = () => {\r\n const btnGrpLoanTypeId = 'calculate_btnGrpLoanType';\r\n const [scLoanTypeValue, setSCLoanTypeValue] = useState('');\r\n const dispatch = useDispatch();\r\n const { loanTypeOptions, title } = useSelector(selectCMS)?.loanType;\r\n const { maxLoanAmount, maxLoanAmountSecured } = useSelector(selectCMS)?.loanAmount;\r\n const selectedLoanType = useSelector(selectLoanType);\r\n const changeLoanType = (value: string) => {\r\n dispatch(setLoanType(value));\r\n setSCLoanTypeValue(value?.toLowerCase());\r\n updateAnalyticsField(btnGrpLoanTypeId, '', 'click');\r\n value === LOAN_TYPES.PERSONAL_LOAN_SECURED?\r\n dispatch(setLoanAmountMax(Number(maxLoanAmountSecured))):\r\n dispatch(setLoanAmountMax(Number(maxLoanAmount)));\r\n };\r\n const createToggleButton = (loanTypeOption: LoanTypeOption, index: number) => {\r\n const loanTypeAbbreviation = String(getStaticContent(loanTypeOption.key));\r\n return \r\n {loanTypeOption.value}\r\n ;\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n {loanTypeOptions.map((loanTypeOption: LoanTypeOption, index: number) => createToggleButton(loanTypeOption, index))}\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LoanType;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport { useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { ErrorMessage, Formatters, ButtonAction } from '@honeycomb-npm/honeycomb-react';\r\nimport { DropdownType } from '../../models/DropdownType';\r\nimport {\r\n deleteAllDebts,\r\n selectCMS,\r\n selectDebts,\r\n selectIsDebtConsolidation,\r\n selectLoanAmount,\r\n selectLoanAmountMax,\r\n selectLoanAmountMin,\r\n selectLoanPurpose,\r\n selectTotalDebtAmount,\r\n setLoanAmount,\r\n} from '../../store/calcSlice';\r\nimport LoanCard from '../shared/LoanCard';\r\nimport { getStaticContent, processTemplate } from '../../utils';\r\nimport DebtModal from './DebtConsolidation/DebtModal';\r\nimport LoanAmount, { LoanAmountProps } from './LoanAmount';\r\nimport LoanPurpose, { LoanPurposeProps } from './LoanPurpose';\r\nimport LoanTerm, { LoanTermProps } from './LoanTerm';\r\nimport LoanType, { LoanTypeProps } from './LoanType';\r\nimport './CalcInput.scss';\r\n\r\nexport type CalcInputProps = {\r\n loanPurpose: LoanPurposeProps;\r\n loanAmount: LoanAmountProps;\r\n loanTerm: LoanTermProps;\r\n loanType: LoanTypeProps;\r\n};\r\n\r\nconst CalcInput: React.VFC = () => {\r\n const dispatch = useDispatch();\r\n const CMS_output = useSelector(selectCMS);\r\n const CMS_totalDebtAmount = CMS_output?.totalDebtAmount;\r\n const CMS_enterDebtConsolidationDetails = CMS_output?.enterDebtConsolidationDetails;\r\n const CMS_debtModal = CMS_output?.debtModal;\r\n const CMS_loanAmount = CMS_output?.loanAmount;\r\n const loanAmount = useSelector(selectLoanAmount);\r\n const loanPurpose = useSelector(selectLoanPurpose);\r\n const debtsArray = useSelector(selectDebts);\r\n const isDebtConsolidationValue = useSelector(selectIsDebtConsolidation);\r\n const loanAmountMinValue = useSelector(selectLoanAmountMin);\r\n const loanAmountMaxValue = useSelector(selectLoanAmountMax);\r\n const totalDebtAmountValue = useSelector(selectTotalDebtAmount);\r\n const debtConsolidationLabel = useSelector(selectCMS)?.loanPurpose?.loanPurposeOptions?.find(\r\n (opt: DropdownType) => opt.key === 'debtConsolidation'\r\n );\r\n const debtSummaryTileId = Date.now();\r\n const errorMessageParsed = processTemplate(CMS_totalDebtAmount?.invalidDebtAmtErrorMsg, {\r\n minLoanAmount: Formatters.formatCurrency(Number(loanAmountMinValue), 'AUD', 'symbol', 0),\r\n maxLoanAmount: Formatters.formatCurrency(Number(loanAmountMaxValue), 'AUD', 'symbol', 0),\r\n });\r\n const [debtModalDisplay, setDebtModalDisplay] = useState(false);\r\n const deleteDebtConsolidation = () => {\r\n dispatch(deleteAllDebts());\r\n };\r\n const openDebtModal = () => {\r\n setDebtModalDisplay(true);\r\n };\r\n const onClose = () => {\r\n setDebtModalDisplay(false);\r\n if(debtsArray.length < 1){\r\n dispatch(setLoanAmount(Number(CMS_loanAmount?.defaultLoanAmount)));\r\n }\r\n };\r\n const triggerDebtModal = () => {\r\n dispatch(setLoanAmount(0));\r\n openDebtModal();\r\n };\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {isDebtConsolidationValue ? (\r\n <>\r\n \r\n {loanAmount > loanAmountMaxValue || loanAmount < loanAmountMinValue ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n \r\n ) : (\r\n <>\r\n \r\n {loanPurpose === CMS_debtModal?.modalTriggerValue ? (\r\n \r\n {getStaticContent(CMS_enterDebtConsolidationDetails?.enterDebtDetailsBtn?.btnDetail?.displayText)}\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 CalcInput;\r\n","import { configureStore } from '@reduxjs/toolkit';\r\nimport calcReducer from './calcSlice';\r\n\r\nexport const store = configureStore({\r\n reducer: {\r\n calc: calcReducer,\r\n },\r\n});\r\n\r\n// Infer the `RootState` and `AppDispatch` types from the store itself\r\nexport type RootState = ReturnType;\r\nexport type AppDispatch = typeof store.dispatch;\r\n","import { getInterestRange } from '../services/interests.service';\r\nimport { store } from '../store/store';\r\n\r\nexport const isValidLoanAmount = ():boolean => {\r\n const loanAmount = store.getState().calc.loanAmount;\r\n return loanAmount >= store.getState().calc.loanAmountMin\r\n && loanAmount <= store.getState().calc.loanAmountMax;\r\n};\r\n\r\nexport const isValidInterestRate = ():boolean => {\r\n const loanInterestRate = store.getState().calc.loanInterestRate?.interestRate;\r\n const interestRates = store.getState().calc.interestRates;\r\n const selectedLoanType = store.getState().calc.loanType;\r\n const minInterestRate = (getInterestRange(interestRates, selectedLoanType)?.min.interestRate);\r\n const maxInterestRate = (getInterestRange(interestRates, selectedLoanType)?.max.interestRate);\r\n if(loanInterestRate < minInterestRate || loanInterestRate > maxInterestRate){\r\n return false;\r\n } else{\r\n return true;\r\n }\r\n};\r\n","export default __webpack_public_path__ + \"static/media/offer.ed15c7a2.svg\";","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectCMS } from '../../store/calcSlice';\r\nimport { getStaticContent, parseBool } from '../../utils';\r\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n// @ts-ignore - no type def available\r\nimport OfferIcon from './offer.svg';\r\nimport './CalcOffer.scss';\r\n\r\nconst CalcOffer: React.VFC = () => {\r\n const { interest, repayment, link, isOfferExists } = useSelector(selectCMS)?.offer;\r\n\r\n return (\r\n
\r\n {\r\n parseBool(isOfferExists) &&
\r\n
\r\n \"Offer\"\r\n
\r\n
\r\n {getStaticContent(interest)}\r\n
\r\n
\r\n {getStaticContent(repayment)}\r\n
\r\n
\r\n {getStaticContent(link)}\r\n
\r\n
\r\n
\r\n
\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default CalcOffer;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport React from 'react';\r\nimport './RangeSlider.scss';\r\n\r\nexport type SliderPropsType = {\r\n id: string;\r\n value: number;\r\n min: number;\r\n max: number;\r\n step: number;\r\n onChange: (value: number) => void;\r\n};\r\n\r\nconst RangeSlider: React.VFC = (props) => {\r\n const { value, min, max } = props;\r\n\r\n const onChangeHandler = (e: React.ChangeEvent) => {\r\n props.onChange?.(Number(e.target.value));\r\n };\r\n\r\n const isValidValue = () => {\r\n return value >= min && value <= max;\r\n };\r\n\r\n const fillWidth = max ? ((value) > Number(max) ? Number(max) : Number(value) - min) / (max - min) * 100 : 0;\r\n return (\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default RangeSlider;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/* eslint-disable no-console */\r\nimport { ButtonActionEmphasis } from '@honeycomb-npm/honeycomb-react';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectCMS } from '../../store/calcSlice';\r\nimport './ApplyNow.scss';\r\n\r\nexport interface ApplyNowCardProps{\r\n id: string;\r\n name: string;\r\n headingText: string;\r\n message: string;\r\n buttonText: string;\r\n onButtonClick?: () => void;\r\n}\r\n\r\nconst Card = (props: ApplyNowCardProps):JSX.Element => {\r\n const { id, name, headingText, message, buttonText, onButtonClick } = props;\r\n return (\r\n
\r\n

{headingText}

\r\n

{message?.trim()}

\r\n \r\n {buttonText}\r\n \r\n
\r\n );\r\n};\r\n\r\nconst onEtbButtonClick = (etb_url: string) => {\r\n window.open(etb_url, '_blank');\r\n};\r\n\r\nconst onNtbButtonClick = (ntb_url: string) => {\r\n window.open(ntb_url, '_blank');\r\n};\r\n\r\nconst ApplyNow = (): JSX.Element => {\r\n const cmsContent = useSelector(selectCMS).applyNowModal;\r\n return (\r\n
\r\n onEtbButtonClick(cmsContent?.etb_url)}\r\n />\r\n
\r\n
\r\n \r\n {cmsContent.dividerText}\r\n \r\n
\r\n onNtbButtonClick(cmsContent?.ntb_url)}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default ApplyNow;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\nimport { Accordion, AccordionContent, AccordionHeader } from '@honeycomb-npm/honeycomb-react';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectCMS, selectDebtPurpose } from '../../../store/calcSlice';\r\nimport { getStaticContent } from '../../../utils';\r\nimport './AboutCalculation.scss';\r\n\r\nconst DEBT_PURPOSES = Object.freeze({\r\n LOWER_REPAYMENTS : 'lowerRepayments',\r\n SHORTER_TERM : 'shorterTerm',\r\n REDUCE_COST : 'reduceCosts',\r\n});\r\n\r\nconst AboutCalculation = (): JSX.Element => {\r\n const debtPurposeValue = useSelector(selectDebtPurpose);\r\n const CMS = useSelector(selectCMS)?.output?.aboutThisCalculation;\r\n const getMessageForDebtPurpose = (debtPurposeValue: string) => {\r\n switch(debtPurposeValue){\r\n case DEBT_PURPOSES.REDUCE_COST:\r\n return getStaticContent(CMS?.reduceCosts);\r\n case DEBT_PURPOSES.LOWER_REPAYMENTS:\r\n return getStaticContent(CMS?.lowerRepayments);\r\n case DEBT_PURPOSES.SHORTER_TERM:\r\n return getStaticContent(CMS?.shorterTerm);\r\n default:\r\n return getStaticContent(CMS?.default);\r\n }\r\n };\r\n return(\r\n
\r\n \r\n \r\n {getStaticContent(CMS?.headerText)}\r\n \r\n \r\n {getMessageForDebtPurpose(debtPurposeValue)}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default AboutCalculation;\r\n","export default __webpack_public_path__ + \"static/media/Edit-Icon.fcb0c88a.svg\";","export default __webpack_public_path__ + \"static/media/Swap-Icon.2360d4ff.svg\";","export default __webpack_public_path__ + \"static/media/Info-Icon.c4c8b38d.svg\";","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access */\r\nimport { useSelector } from 'react-redux';\r\nimport { Formatters } from '@honeycomb-npm/honeycomb-react';\r\nimport { DebtInfoType } from '../../../models/DebtInfoType';\r\nimport { getStaticContent, getFrequencyConversionFactor } from '../../../utils';\r\nimport { selectCMS, selectDebts, selectLoanFrequency, selectRepaymentAmount } from '../../../store/calcSlice';\r\nimport './RepaymentSavings.scss';\r\n\r\nexport const calculateRepayment = (debts:DebtInfoType[], loanFrequency: string):number => {\r\n let totalRepayment = 0;\r\n debts.forEach(debt => {\r\n totalRepayment += (debt.repaymentAmount * getFrequencyConversionFactor(debt.repaymentFrequency, loanFrequency));\r\n });\r\n return totalRepayment;\r\n};\r\n\r\nconst RepaymentSavings = ():JSX.Element => {\r\n const CMS_output = useSelector(selectCMS)?.output;\r\n const CMS_tabs = CMS_output?.tabs;\r\n const CMS_repayments = CMS_output?.repayments;\r\n const CMS_repaymentSavings = CMS_output?.repaymentSavings;\r\n const repaymentAmount = useSelector(selectRepaymentAmount);\r\n const loanFrequency = useSelector(selectLoanFrequency);\r\n const debts = useSelector(selectDebts);\r\n const repaymentSavings = Math.floor(calculateRepayment(debts, loanFrequency) - repaymentAmount);\r\n\r\n return (\r\n
\r\n {repaymentSavings > 0 ?\r\n
\r\n
{getStaticContent(CMS_repaymentSavings?.title)}
\r\n \r\n {Formatters.formatCurrency(repaymentSavings, 'AUD', 'symbol', 0)}\r\n  \r\n \r\n {getStaticContent(\r\n `${String(CMS_tabs?.[loanFrequency])}\r\n ${String(CMS_repayments?.caveat_sign)}`\r\n )}\r\n \r\n
:\r\n
\r\n

{getStaticContent(CMS_repaymentSavings?.noSavings)}

\r\n

{getStaticContent(CMS_repaymentSavings?.noSavingsTips)}

\r\n
\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default RepaymentSavings;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access */\r\nimport { useSelector } from 'react-redux';\r\nimport { Formatters, Accordion, AccordionContent, AccordionHeader } from '@honeycomb-npm/honeycomb-react';\r\nimport React from 'react';\r\nimport { DebtInfoType } from '../../../models/DebtInfoType';\r\nimport { getFrequencyConversionFactor, getStaticContent } from '../../../utils';\r\nimport {\r\n FeesAndChargesType,\r\n selectCMS,\r\n selectDebts,\r\n selectFeesAndCharges, selectLoanFrequency,\r\n selectLoanTerm,\r\n selectLoanType,\r\n selectRepayments,\r\n} from '../../../store/calcSlice';\r\nimport { DEBT_TYPES } from '../../../constants/DebtTypes.constants';\r\nimport { calculateRepayments } from '../../../services/calculate.service';\r\nimport RepaymentsType from '../../../models/RepaymentsType';\r\nimport './OverallSavings.scss';\r\n\r\ntype TotalCostsType = {\r\n totalRepayment : number;\r\n totalOngoingFee : number;\r\n totalInterest : number;\r\n totalExitFee: number;\r\n establishmentFee: number;\r\n anyLoan: boolean;\r\n allValidLoans: boolean;\r\n noAdditionalInfo: boolean;\r\n}\r\ntype TotalSavingsType = {\r\n interestSavings : number;\r\n // repaymentSavings : number;\r\n feeSavings : number;\r\n totalSavings : number;\r\n}\r\ntype TotalCostsAndSavingsType = {\r\n costs: TotalCostsType;\r\n savings: TotalSavingsType;\r\n}\r\n\r\nexport const calculateTotalCostsAndSavings = (\r\n debts:DebtInfoType[],\r\n repayments: RepaymentsType,\r\n feesAndCharges: FeesAndChargesType,\r\n loanType: string,\r\n loanTerm: number,\r\n loanFrequency: string\r\n ):TotalCostsAndSavingsType => {\r\n const costs : TotalCostsType = {\r\n totalRepayment : 0,\r\n totalOngoingFee : 0,\r\n totalInterest : 0,\r\n totalExitFee: 0,\r\n establishmentFee: 0,\r\n anyLoan: false,\r\n allValidLoans: true,\r\n noAdditionalInfo: true,\r\n };\r\n const savings : TotalSavingsType = {\r\n interestSavings : 0,\r\n // repaymentSavings : 0,\r\n feeSavings : 0,\r\n totalSavings: 0,\r\n };\r\n const totals:TotalCostsAndSavingsType = { costs, savings };\r\n\r\n // Calculate total costs\r\n debts.forEach(debt => {\r\n costs.totalRepayment += debt.repaymentAmount *\r\n getFrequencyConversionFactor(debt.repaymentFrequency, loanFrequency) *\r\n (loanTerm * 12);\r\n\r\n // Additional Fields\r\n if(debt.remainingLoanTermValue){\r\n costs.totalOngoingFee += (debt.ongoingFeeValue || 0) * (debt.remainingLoanTermValue || 0);\r\n }else{\r\n costs.totalOngoingFee += (debt.ongoingFeeValue || 0) * (loanTerm * 12);\r\n }\r\n costs.totalExitFee += debt.exitFeeValue || 0;\r\n\r\n costs.anyLoan = costs.anyLoan || (debt.debtType === DEBT_TYPES.LOAN);\r\n\r\n costs.allValidLoans = costs.allValidLoans &&\r\n (debt.debtType === DEBT_TYPES.LOAN) &&\r\n ((debt.interestRateValue!==undefined) && (debt.interestRateValue > 0)) &&\r\n ((debt.remainingLoanTermValue!==undefined) && (debt.remainingLoanTermValue > 0));\r\n\r\n costs.noAdditionalInfo = costs.noAdditionalInfo &&\r\n ((debt.interestRateValue===undefined) || (debt.interestRateValue === 0)) &&\r\n ((debt.remainingLoanTermValue===undefined) || (debt.remainingLoanTermValue === 0)) &&\r\n ((debt.ongoingFeeValue===undefined) || (debt.ongoingFeeValue === 0)) &&\r\n ((debt.exitFeeValue===undefined) || (debt.exitFeeValue === 0));\r\n });\r\n\r\n if(costs.allValidLoans){\r\n debts.forEach(debt => {\r\n const repayments = calculateRepayments(\r\n debt.debtAmount,\r\n loanFrequency,\r\n debt.interestRateValue || 0,\r\n (debt.remainingLoanTermValue || 0)/12 // convert months to years\r\n );\r\n costs.totalInterest += (repayments?.total?.interest);\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n costs.establishmentFee = Number(feesAndCharges[loanType.toLowerCase()].establishmentFee);\r\n\r\n // Calculate Savings\r\n if(costs.allValidLoans) {\r\n savings.interestSavings = costs.totalInterest - repayments?.total?.interest;\r\n }\r\n\r\n if(!costs.noAdditionalInfo) {\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n savings.feeSavings = costs.totalOngoingFee - (feesAndCharges[loanType.toLowerCase()].monthlyServiceFee * loanTerm * 12);\r\n // 28Jun22, User repayment includes fees and interest. Our repayment includes interest. So incorrect to show this as savings again!\r\n // savings.repaymentSavings = costs.totalRepayment - Math.ceil(repayments?.groups[0]?.repayments[0].amount) * loanTerm * 12;\r\n // savings.totalSavings = savings.interestSavings + savings.repaymentSavings + savings.feeSavings - costs.totalExitFee - costs.establishmentFee;\r\n savings.totalSavings = savings.interestSavings + savings.feeSavings - costs.totalExitFee - costs.establishmentFee;\r\n }\r\n return totals;\r\n};\r\n\r\nconst OverallSavings = ():JSX.Element => {\r\n const CMS = useSelector(selectCMS)?.output?.overallSavings;\r\n const repayments = useSelector(selectRepayments);\r\n const loanTerm = useSelector(selectLoanTerm);\r\n const debts = useSelector(selectDebts);\r\n const feesAndCharges = useSelector(selectFeesAndCharges);\r\n const loanType = useSelector(selectLoanType);\r\n const loanFrequency = useSelector(selectLoanFrequency);\r\n\r\n // const totalCosts = calculateTotalCosts(debts,loanTerm);\r\n const { costs, savings } = calculateTotalCostsAndSavings(debts, repayments, feesAndCharges, loanType, loanTerm, loanFrequency);\r\n const totalSavings = Math.round(savings.totalSavings);\r\n\r\nreturn (\r\n <>\r\n {!costs.noAdditionalInfo ?\r\n <>\r\n
\r\n {totalSavings > 0 ?\r\n
\r\n
{getStaticContent(CMS?.title)}
\r\n \r\n {Formatters.formatCurrency(totalSavings, 'AUD', 'symbol', 0)}\r\n  \r\n \r\n {getStaticContent(CMS?.frequency)}\r\n \r\n
:\r\n
\r\n

{getStaticContent(CMS?.noSavings)}

\r\n

{getStaticContent(CMS?.noSavingsTips)}

\r\n
\r\n }\r\n
\r\n {totalSavings > 0 ?\r\n
\r\n \r\n \r\n {getStaticContent(CMS?.overallSavingsBreakdown?.title)}\r\n \r\n \r\n {getStaticContent(CMS?.overallSavingsBreakdown?.blurb)}\r\n {Math.round(savings.feeSavings) ?\r\n
\r\n
{getStaticContent(CMS?.overallSavingsBreakdown?.feeChange)}
\r\n {Formatters.formatCurrency(savings.feeSavings, 'AUD', 'symbol', 0)}
\r\n
: null}\r\n {Math.round(savings.interestSavings) ?\r\n
\r\n
{getStaticContent(CMS?.overallSavingsBreakdown?.interestChange)}
\r\n {Formatters.formatCurrency(savings.interestSavings, 'AUD', 'symbol', 0)}
\r\n
: null}\r\n {Math.round(costs?.totalExitFee) ?\r\n
\r\n
{getStaticContent(CMS?.overallSavingsBreakdown?.exitFee)}
\r\n {Formatters.formatCurrency(costs?.totalExitFee * -1, 'AUD', 'symbol', 0)}
\r\n
: null}\r\n {Math.round(costs?.establishmentFee) ?\r\n
\r\n
{getStaticContent(CMS?.overallSavingsBreakdown?.establishmentFee)}
\r\n {Formatters.formatCurrency(costs?.establishmentFee * -1, 'AUD', 'symbol', 0)}
\r\n : null}\r\n {costs.anyLoan ?\r\n
{getStaticContent(CMS?.overallSavingsBreakdown?.exitFeeMessage)}
\r\n : null\r\n }\r\n \r\n \r\n : null\r\n }\r\n : null\r\n }\r\n \r\n);\r\n};\r\n\r\nexport default OverallSavings;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access */\r\nimport { Formatters, Tooltip } from '@honeycomb-npm/honeycomb-react';\r\nimport { useSelector } from 'react-redux';\r\nimport {\r\n selectCMS,\r\n selectFeesAndCharges,\r\n selectIsDebtConsolidation,\r\n selectLoanType,\r\n selectRepaymentAmount,\r\n selectRepayments,\r\n} from '../../store/calcSlice';\r\nimport { getStaticContent, processTemplate } from '../../utils';\r\nimport RepaymentSavings from './DebtConsolidation/RepaymentSavings';\r\nimport OverallSavings from './DebtConsolidation/OverallSavings';\r\nimport './OutputTab.scss';\r\n\r\nconst OutputTab = (props: { frequency : string }): JSX.Element => {\r\n const isDebtConsolidation = useSelector(selectIsDebtConsolidation);\r\n const repaymentAmount = useSelector(selectRepaymentAmount);\r\n const repayments = useSelector(selectRepayments);\r\n const CMS_output = useSelector(selectCMS)?.output;\r\n const selectedLoanType = useSelector(selectLoanType);\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n const feesAndCharges = useSelector(selectFeesAndCharges)[selectedLoanType.toLowerCase()];\r\n\r\n // TODO: change inline text to AEM when this component is developed\r\n return (\r\n <>\r\n
\r\n
{getStaticContent(CMS_output?.repayments?.title)}
\r\n
\r\n \r\n {Formatters.formatCurrency(repaymentAmount, 'AUD', 'symbol', 0)}\r\n  \r\n \r\n {getStaticContent(\r\n `${String(CMS_output?.tabs?.[props.frequency])}${String(CMS_output?.repayments?.caveat_sign)}`\r\n )}\r\n \r\n
\r\n
\r\n {isDebtConsolidation ? (\r\n <>\r\n \r\n \r\n \r\n ) : null}\r\n
\r\n
{getStaticContent(CMS_output?.totals?.title)}
\r\n
\r\n
{getStaticContent(CMS_output?.totals?.totalInterest)}
\r\n
\r\n {Formatters.formatCurrency(Math.ceil(repayments?.total?.interest), 'AUD', 'symbol', 0)}\r\n
\r\n
\r\n
\r\n
{getStaticContent(CMS_output?.totals?.totalAmount)}
\r\n
\r\n {Formatters.formatCurrency(Math.ceil(repayments?.total?.amount), 'AUD', 'symbol', 0)}\r\n {getStaticContent(CMS_output?.totals?.caveat_sign)}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default OutputTab;\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access */\r\nimport { ButtonActionEmphasis, ButtonAction, ButtonActionSubtle, Formatters, Tab, TabPanel, Tabs, TextField, Tooltip } from '@honeycomb-npm/honeycomb-react';\r\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { REPAYMENT_FREQUENCIES } from '../../constants/RepaymentFrequencies.constants';\r\nimport { getInterestRange, getInterestRepRate } from '../../services/interests.service';\r\nimport {\r\n calculateRepaymentsAction,\r\n selectCMS,\r\n selectDebts,\r\n selectInterestRates,\r\n selectIsDebtConsolidation,\r\n selectLoanAmount,\r\n selectLoanAmountMax,\r\n selectLoanAmountMin,\r\n selectLoanFrequency,\r\n selectLoanInterestRate,\r\n selectLoanPurpose,\r\n selectLoanTerm,\r\n selectLoanType,\r\n selectUserInterestRateMode,\r\n setLoanFrequency, setLoanInterestRate, setUserInterestRateMode,\r\n} from '../../store/calcSlice';\r\nimport { isValidInterestRate, isValidLoanAmount } from '../../utils/validation.util';\r\nimport { formatInterestRate, getStaticContent, processTemplate } from '../../utils';\r\nimport CalcOffer from '../CalcFooter/CalcOffer';\r\nimport { CalcModal } from '../shared/CalcModal';\r\nimport RangeSlider from '../shared/RangeSlider/RangeSlider';\r\nimport { DropdownType } from '../../models/DropdownType';\r\nimport ApplyNow from './ApplyNow';\r\nimport AboutCalculation from './DebtConsolidation/AboutCalculation';\r\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n// @ts-ignore - no type def available\r\nimport EditIcon from './Edit-Icon.svg';\r\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n// @ts-ignore - no type def available\r\nimport SwapIcon from './Swap-Icon.svg';\r\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n// @ts-ignore - no type def available\r\nimport InfoIcon from './Info-Icon.svg';\r\nimport OutputTab from './OutputTab';\r\nimport './CalcOutput.scss';\r\n\r\n// TODO: replace any with proper type definition\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type CalcOutputProps = any;\r\n\r\nconst CalcOutput = (): JSX.Element => {\r\n const dispatch = useDispatch();\r\n const isDebtConsolidation = useSelector(selectIsDebtConsolidation);\r\n const userInterestRateMode = useSelector(selectUserInterestRateMode);\r\n const loanInterestRate = useSelector(selectLoanInterestRate);\r\n const interestRates = useSelector(selectInterestRates);\r\n const selectedLoanType = useSelector(selectLoanType);\r\n const loanTerm = useSelector(selectLoanTerm);\r\n const loanAmount = useSelector(selectLoanAmount);\r\n const loanPurpose = useSelector(selectLoanPurpose);\r\n const loanFrequency = useSelector(selectLoanFrequency);\r\n const loanAmountMin = useSelector(selectLoanAmountMin);\r\n const loanAmountMax = useSelector(selectLoanAmountMax);\r\n const debtsArray = useSelector(selectDebts);\r\n const CMS = useSelector(selectCMS);\r\n const CMS_debtModal = CMS?.debtModal;\r\n const CMS_output = CMS?.output;\r\n const CMS_applyNow = CMS?.applyNow;\r\n const defaultSliderValue = getInterestRepRate(interestRates, selectedLoanType)?.interestRate;\r\n const [applyNowModalDisplay, setApplyNowModalDisplay] = useState(false);\r\n const [displayInterestInput, setDisplayInterestInput] = useState(false);\r\n const openApplyNow = () => setApplyNowModalDisplay(true);\r\n const closeApplyNow = () => setApplyNowModalDisplay(false);\r\n const minInterestRate = formatInterestRate(String(getInterestRange(interestRates, selectedLoanType)?.min.interestRate));\r\n const maxInterestRate = formatInterestRate(String(getInterestRange(interestRates, selectedLoanType)?.max.interestRate));\r\n const blurb2Parsed = processTemplate(CMS_output.invalidLoanAmountOutput.blurb2, {\r\n minLoanAmount: Formatters.formatCurrency(loanAmountMin, 'AUD', 'symbol', 0),\r\n maxLoanAmount: Formatters.formatCurrency(loanAmountMax, 'AUD', 'symbol', 0),\r\n });\r\n\r\n const compRateInfoMsgParsed = processTemplate(CMS_output.comparisonRate.compRateInfoMsg, {\r\n comparisonRate: formatInterestRate(String(getInterestRepRate(interestRates, selectedLoanType)?.comparisonRate)),\r\n });\r\n\r\n const compRateRangeParsed = processTemplate(CMS_output.comparisonRate.compRateRangeMsg, {\r\n minRate: formatInterestRate(String(getInterestRange(interestRates, selectedLoanType)?.min.comparisonRate)),\r\n maxRate: formatInterestRate(String(getInterestRange(interestRates, selectedLoanType)?.max.comparisonRate)),\r\n });\r\n\r\n const parsedBlurb = processTemplate(CMS_output?.invalidInterestRateOutput?.blurb, {\r\n minRate: formatInterestRate(String(getInterestRange(interestRates, selectedLoanType)?.min.interestRate)),\r\n maxRate: formatInterestRate(String(getInterestRange(interestRates, selectedLoanType)?.max.interestRate)),\r\n selectedLoanType: (CMS?.loanType?.loanTypeOptions?.find((opt: DropdownType) => opt.key === selectedLoanType)).value,\r\n });\r\n\r\n const infoMessage = processTemplate(CMS_output?.comparisonRate?.blurb, {\r\n repRate: defaultSliderValue,\r\n });\r\n\r\n const onTabChange = (event: React.MouseEvent | React.KeyboardEvent) => {\r\n const tab = event.target as HTMLButtonElement;\r\n if(event instanceof KeyboardEvent){\r\n const kbEvent = event as React.KeyboardEvent;\r\n if(kbEvent.code === 'Space' || kbEvent.code === 'Enter'){\r\n dispatch(setLoanFrequency(tab.id));\r\n }\r\n }else{\r\n dispatch(setLoanFrequency(tab.id));\r\n }\r\n };\r\n\r\n const onSliderChange = (value: number) => {\r\n dispatch(setLoanInterestRate({ interestRate: String(value) }));\r\n };\r\n\r\n const onChangeInterestRate = (name: string, value: string) => {\r\n dispatch(setLoanInterestRate({ interestRate: value }));\r\n };\r\n\r\n const onUseRepRate = () => {\r\n setDisplayInterestInput(false);\r\n dispatch(setLoanInterestRate({ interestRate: defaultSliderValue }));\r\n };\r\n\r\n const onBlurHandler = (e: React.ChangeEvent) => {\r\n if(Number(e.target.value) < Number(minInterestRate)){\r\n dispatch(setLoanInterestRate({ interestRate: minInterestRate }));\r\n } if(Number(e.target.value) > Number(maxInterestRate)){\r\n dispatch(setLoanInterestRate({ interestRate: maxInterestRate }));\r\n }\r\n };\r\n\r\n const isValidDebtConsolidation = () => {\r\n if(loanPurpose === CMS_debtModal?.modalTriggerValue){\r\n return debtsArray.length;\r\n }else{\r\n return true;\r\n }\r\n };\r\n\r\n const onClickEditBtn= () => {\r\n setDisplayInterestInput(true);\r\n };\r\n\r\n const firstRender = useRef(true);\r\n useEffect(() => {\r\n firstRender.current = false;\r\n },[]);\r\n\r\n const interestInputRef = useRef(null);\r\n const editBtnRef = useRef(null);\r\n useLayoutEffect(() => {\r\n if(displayInterestInput){\r\n interestInputRef?.current?.focus();\r\n }else if(!firstRender.current) {\r\n editBtnRef?.current?.focus();\r\n }\r\n }, [displayInterestInput]);\r\n\r\n useEffect(() => {\r\n dispatch(calculateRepaymentsAction());\r\n }, [loanInterestRate, loanAmount, loanTerm, loanFrequency]);\r\n\r\n useEffect(() => {\r\n Number(loanInterestRate?.interestRate) !== Number(defaultSliderValue) ? dispatch(setUserInterestRateMode(true)) : dispatch(setUserInterestRateMode(false));\r\n }, [loanInterestRate?.interestRate]);\r\n\r\n const renderOutput = () => {\r\n const outputComponents = [];\r\n if (!isValidDebtConsolidation()) {\r\n outputComponents.push(\r\n
\r\n

{getStaticContent(CMS_output.refinanceLoanPurposeOutput.blurb)}

\r\n
\r\n );\r\n } else if (!isValidLoanAmount()) {\r\n outputComponents.push(\r\n
\r\n

{getStaticContent(CMS_output.invalidLoanAmountOutput.blurb1)}

\r\n

{getStaticContent(blurb2Parsed)}

\r\n
\r\n );\r\n } else {\r\n if (!isValidInterestRate()) {\r\n outputComponents.push(\r\n
\r\n

{parsedBlurb}

\r\n
\r\n );\r\n } else {\r\n outputComponents.push(\r\n \r\n {CMS_output?.tabs?.weekly}\r\n ,\r\n \r\n {CMS_output?.tabs?.fortnightly}\r\n ,\r\n \r\n {CMS_output?.tabs?.monthly}\r\n ,\r\n ]}\r\n tabPanels={[\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 if(isValidLoanAmount() && isValidDebtConsolidation()) {\r\n outputComponents.push(\r\n
\r\n
\r\n
{isValidInterestRate() && getStaticContent(CMS_output?.interests?.title)}
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {!displayInterestInput ? (\r\n <>\r\n {formatInterestRate(String(loanInterestRate?.interestRate))}\r\n
{getStaticContent(CMS_output?.interests?.interestRateFrequency)}
\r\n \r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n \r\n {getStaticContent(CMS_output?.interests?.interestRateFrequency)}\r\n
\r\n \r\n )}\r\n
\r\n
\r\n {!displayInterestInput ? (\r\n !userInterestRateMode ? (\r\n
{compRateInfoMsgParsed}
\r\n ) : null\r\n ) : (\r\n <>\r\n
\r\n \"\"\r\n \r\n {getStaticContent(CMS_output?.interests?.useRepRate)}\r\n \r\n
\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n
\r\n {minInterestRate}\r\n {getStaticContent(CMS_output?.interests?.interestRateFrequency)}\r\n
\r\n
\r\n {maxInterestRate}\r\n {getStaticContent(CMS_output?.interests?.interestRateFrequency)}\r\n
\r\n
\r\n
\r\n \r\n \"Info\r\n \r\n \r\n {compRateRangeParsed}\r\n {!userInterestRateMode && !displayInterestInput ?
{infoMessage}
: null}\r\n
\r\n
\r\n
\r\n {isDebtConsolidation && isValidInterestRate() ? (\r\n <>\r\n \r\n
{getStaticContent(CMS_output.costSaving)}
\r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n return outputComponents;\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n
\r\n
{renderOutput()}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {getStaticContent(CMS_applyNow?.btnText)}\r\n \r\n
\r\n
\r\n
{getStaticContent(CMS_applyNow?.approvedMessage)}
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CalcOutput;\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call*/\r\nimport { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport CalcCompare from './components/CalcFooter/CalcCompare';\r\nimport CalcFooter from './components/CalcFooter/CalcFooter';\r\nimport CalcHeader from './components/CalcHeader/CalcHeader';\r\nimport CalcInput from './components/CalcInput/CalcInput';\r\nimport CalcOutput from './components/CalcOutput/CalcOutput';\r\nimport { CMS, fetchInterestRatesAction, setCMS, setFeesAndCharges } from './store/calcSlice';\r\nimport './App.scss';\r\n\r\ntype AppProps = {\r\n cms: {\r\n page: CMS;\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n feesAndCharges: any;\r\n}\r\n\r\nconst App = (props: AppProps):JSX.Element => {\r\n const dispatch = useDispatch();\r\n if(props?.cms?.page){\r\n dispatch(setCMS(props.cms.page));\r\n }\r\n if(props?.feesAndCharges){\r\n dispatch(setFeesAndCharges(props.feesAndCharges));\r\n }\r\n useEffect(() => {\r\n dispatch(fetchInterestRatesAction());\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
\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\nexport default App;\r\n","/* eslint-disable react/jsx-props-no-spreading */\r\n/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\r\n/** @jsxRuntime classic */\r\n\r\n// eslint-disable-next-line import/no-extraneous-dependencies\r\nimport 'react-app-polyfill/ie11';\r\n// eslint-disable-next-line import/no-extraneous-dependencies\r\nimport 'react-app-polyfill/stable';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport App from './App';\r\nimport { store } from './store/store';\r\nimport { CalcState } from './store/calcSlice';\r\nimport { applyTntVariants } from './utils';\r\n\r\n// import reportWebVitals from './reportWebVitals';\r\n// Load Honeycomb CSS\r\n/* eslint-disable import/no-extraneous-dependencies */\r\nimport '@honeycomb-npm/honeycomb/src/bundles/honeycomb.scss';\r\n\r\nlet hasCalculatorInitialized = false;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\r\n(window as any).RenderApp = (initialState: CalcState) => {\r\n const el = document.getElementById('root');\r\n const mboxName = el?.getAttribute('data-mboxName') || '';\r\n const mboxTimeout = 2000;\r\n\r\n const initApp = () => {\r\n if (hasCalculatorInitialized) {\r\n return;\r\n }\r\n hasCalculatorInitialized = true;\r\n ReactDOM.render(\r\n \r\n \r\n \r\n \r\n , el\r\n );\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore: jQuery listener to setup AEM variants\r\n // eslint-disable-next-line no-undef\r\n $(document).on('tntCallback_success', () => {\r\n applyTntVariants(initialState?.cms);\r\n initApp();\r\n });\r\n\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore: AEM MBOX variant setup (tntCallback_success)\r\n // eslint-disable-next-line no-undef\r\n CommBank.Online.Common.TestAndTarget.myAMmBox(mboxName, mboxTimeout);\r\n } catch {\r\n initApp();\r\n }\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":""}