{"version":3,"sources":["services/apiHelper.js","store/actions/calculatorActions.js","store/actionTypes/calculatorActionTypes.js","services/helpers.js","services/calculationsApi.js","components/Header.js","components/steps/stepParts/StepHeader.js","services/gtm.js","components/core/Input.js","components/steps/stepParts/AgeThresholdQuestions.js","components/modals/incomeCalcParts/BusinessCalculator.js","components/modals/incomeCalcParts/DefaultCalculator.js","components/modals/incomeCalcParts/LastStepOfBusinessCalculator.js","components/modals/IncomeCalculatorModal.js","services/stepHelpers.js","components/steps/stepParts/NextButton.js","components/steps/Step1.js","components/steps/stepParts/StepSectionHeader.js","components/steps/stepParts/StepSection.js","components/steps/Step2.js","components/steps/stepParts/StepHouseOptions.js","components/steps/Step3.js","components/steps/stepParts/HomeMortgageStart.js","components/steps/Step4.js","components/steps/stepParts/HypoTypeBlock.js","components/steps/stepParts/CheckLine.js","components/steps/stepParts/StepSidebar.js","components/modals/LoadingModal.js","components/summary/BankCard.js","components/steps/Step5.js","components/steps/stepParts/StepsIndication.js","components/modals/ErrorModal.js","components/Steps.js","components/modals/OverviewModal.js","services/stateHelper.js","components/modals/SharePdfModal.js","services/shareHelper.js","components/summary/ToolInfoComp.js","components/Summary.js","components/Usp.js","components/App.js","serviceWorker.js","store/reducers/calculatorReducer.js","index.js"],"names":["calculateByIncome","data","isNhg","calculateMaximumMortgageByIncomeApi","then","response","maxMortgageAmount","Interest","SelectedMortgageProvider","rentestand","interest","calculateMonthlyCostsByMortgage","rewriteApiData","cleanData","calculatedData","energyLabel","EnergyLabel","value","getAdditionalEnergyLabelAmount","isHouseAffordable","totalNeededToBuyHouse","sustainabilityUplift","parseSearchQuery","searchString","clean","result","entries","URLSearchParams","key","checkValueForCurrency","hasOwnProperty","Object","keys","length","setField","field","type","getMortgageProviderAction","id","isnewbuilding","dispatch","a","getMortgageProvider","mortgageProvider","store","getState","calculator","initial","getMortgageProviders","hypotheekVorm","rentevastePeriode","mortgageProvidersNhg","nhgLookupId","producten","find","p","aanbiederId","lookupId","mortgageProviders100","nonNhgLookupId","mainBank","sort","b","nhglookupId","affordCalcAction","stepNumber","useBestDealInterest","getMonthlyCost","removeDotsComas","InterestBestDeal","riskClass","getNhg","nhg","parseInt","existingBuilding","Woning","providers","CanIAffordThisHouseApi","error","customerMaximumMortgageAmount","netMonthlyCostHouse","netMonthlyCost","grossMonthlyCostHouse","grossMonthlyCost","mortgageCalcAction","sharePdfAction","locale","language","sharePdfViaEmail","sharePdf","CALCULATOR_TYPES","mainMediaMobile","PATH_TO_TYPE_MAP","getCalculatorType","pathname","window","location","queryParams","search","path","includes","stepStates","defaultStepsState","state","hasShareParam","filter","v","i","getDefaultStepState","calculatorCopy","replace","rewriteRadioOptionsClasses","parent","classes","el","document","getElementsByClassName","children","classList","add","rewriteSelectIds","prefix","setTimeout","innerHTML","numberToCurrency","number","format","getLanguage","formatter","Intl","NumberFormat","maximumFractionDigits","minimumFractionDigits","currencyToNumber","mustBeNumber","log","replaceAll","parseFloat","Math","round","toFixed","setBodyDataForPdf","bodyData","yearlyIncome","ApplicantYearlyIncome","yearlyIncomePartner","PartnerYearlyIncome","creditsAndLoans","HasLoans","Loans","StudentDebtMonthlyPayment","Alimony","PrivateLeaseAmount","maximumMortgage","grossMonthlyCosts","netMonthlyCosts","applicableGrossMonthlyCosts","applicableNetMonthlyCosts","askingHousePrice","ownResources","OwnResources","homeEquity","HomeEquity","extraInsert","extraMoneyNeeded","mortgageType","MortgageType","fixedInterestPeriod","RentevastePeriode","hasHouse","HasHouse","mortgageHistory","calculatorType","WantsToSkipMortgageQuestions","houseSalePrice","houseSaleCosts","HomeEquityCosts","houseMortgageValue","HomeMortgageAmount","housePartMortgageValue","HomeMortgageOtherPartAmount","houseMortgageDateStart","HomeMortgageStart","isHouseMortageDateStartedBefore2013","HomeMortgageStartBefore2013","isHouseMortageCompletelyAnnuityOrLinear","HomeMortgageIsBeingPaidOff","createPostObject","calculateStudentDebt","StudentDebtAmount","ApplicantAge","ApplicantAOW","PartnerAge","PartnerAOW","object","applicant","age","statePensionIncome","oldAgePensionIncome","ApplicantAnnualPensionIncome","partner","PartnerAnnualPensionIncome","interestRate","loans","alimony","stepState","mortageAmount","isNewBuilding","IsNieuwbouw","purchasePrice","ownMoney","surplus","HasPartner","params","share","addOfficeIdParamToLink","link","officeid","isSustainabilityUplift","studentDebtAmount","currentInterestRate","multiplier","getApiUrl","version","hostname","api","indexOf","fetch","method","body","JSON","stringify","headers","Accept","redirect","status","json","RenteBasis","getParamEnergyLabel","getBanksApi","getShortUrl","url","addOn","Authorization","calculateYearlyIncome","getSummaryPdf","mode","xhrFields","responseType","blob","URL","createObjectURL","Blob","createElement","href","setAttribute","appendChild","click","parentNode","removeChild","success","message","calculateYearlyIncomeIndependentApi","postData","Number","ld1","lvu1","ov1","sfw1","bpga1","ld2","lvu2","ov2","sfw2","bpga2","ld3","lvu3","ov3","sfw3","bpga3","Header","mediaMatches","useMediaQuery","className","style","marginTop","height","src","alt","defaultMessage","stepTitles","StepHeader","backLink","title","openStep","stepSummary","onClose","useDispatch","referrer","onClick","gtm","tagManagerArgs","TagManager","initialize","Input","errorCondition","name","label","inputType","icon","iconText","onIconClick","placeholder","register","validationRules","isDisabled","errorTitle","valueType","intl","useIntl","viewValue","highAgeCondition","useEffect","gtmId","dataLayer","event","eventCategory","eventAction","eventLabel","setType","$event","action","target","errorInfo","autoComplete","onFocus","e","onBlur","onWheel","blur","getType","disabled","ref","dangerouslySetInnerHTML","__html","formatMessage","AgeThresholdQuestions","errors","form","annualPensionIncome","formName","aow","values","pensionLink","rel","required","BusinessCalculator","toggleLastStep","currentYear","Date","getFullYear","useState","selectedYear","setSelectedYear","PER","JVA","DMK","DefaultCalculator","toggleIncomeCalculator","useForm","defaultValues","INK","ORT","handleSubmit","formState","onSubmit","UIT","calculateYearlyIncomeAction","onChange","horizontal","rootColor","pointColor","iconInnerSize","iconSize","min","data-tip","place","effect","data-iscapture","clickable","html","isValid","LastStepOfBusinessCalculator","years","labels","calculateYearlyIncomeIndependentAction","map","item","fieldName","fieldNameIndex","inputs","numberIndex","IncomeCalculatorModal","defaultCalculator","setDefaultCalculator","lastStepOpened","setLastStepOpened","getStepParams","requestParams","stateStore","getStateFromStore","isStateSharedViaUrl","isStateSavedInSession","getStep1HeaderSummary","getStep2HeaderSummary","getStep3HeaderSummary","getStep4HeaderSummary","returnAsInteger","sum","getStep5HeaderSummary","req","localStorage","getItem","NextButton","isFormValid","loading","Step1","onStepSubmit","shouldReset","setResetForms","setShowResetBtn","useSelector","setHasPartner","stepHeaderSummary","setStepHeaderSummary","incomeCalculatorVisibilityViaParam","setIncomeCalculatorVisibilityViaParam","incomeCalculatorVisibility","setIncomeCalculatorVisibility","incomeCalculatorField","setIncomeCalculatorField","getDefaultValues","watch","triggerValidation","setValue","reset","watchAge","useCallback","virtualURL","virtualTitle","toString","calculate","shouldDirty","hasAPartner","floor","noValidate","ReactDOM","createPortal","getElementById","StepSectionHeader","sectionState","toggleSection","StepSection","firstSection","stepBodyEl","useRef","setSectionState","Step2","setHasLoans","PrivateLeaseFull","setPrivateLeaseFull","salutation","salutation2","linkInfo","linkCalc","StepHouseOptions","all","onRadioChange","partial","Step3","setCalculatorType","setIsNieuwbouw","SustainabilityUplift","setSustainabilityUplift","AmountAboveNhg","setAmountAboveNhg","setEnergyLabel","StateIsNieuwbouw","Nhg","options","watchWoning","handleMobileFocus","browserName","navigator","userAgent","vendor","opera","test","substr","activeElement","scrollIntoView","addEventListener","removeEventListener","housePrice","amountAboveNhg","onHouseOptionsChange","question","watchHomeMortgageStartNotKnown","control","paidOff","as","defaultValue","Step4","setHasHouse","HomeMortgageStartNotKnown","getValues","watchHomeMortgageIsBeingPaidOff","watchWantsToSkipMortgageQuestions","watchHomeMortgageOtherPartAmount","watchHomeEquity","watchValues","MortgageLessThenSurplus","appointmentLink","rules","HypoTypeBlock","text","active","handleHypoChange","CheckLine","StepSidebar","toggleSidebar","sidebarType","LoadingModal","BankCard","isMain","bankData","selector","selected","toggleBank","bank","logoUrl","rentevasteDropdownStyles","provided","minHeight","indicatorSeparator","display","scrollToRef","scrollTo","current","offsetTop","Step5","hypoType","setHypoType","handledHasShareParam","SetHandledHasShareParam","isLoading","setIsLoading","rentevastePeriod","setRentevastePeriod","sidebarVisibility","setSidebarVisibility","setSidebarType","myRef","yearLabel","onBestDealCLick","triggeredByShare","setMortgageType","setMortgagePeriod","bankIds","banksList","uniqueBanks","reduce","uniq","some","uniqueBank","otherBanks","allBanks","fetchData","role","isSearchable","onMenuOpen","classNamePrefix","styles","StepsIndication","bullets","stepsState","ErrorModal","Steps","onStateClear","resetForms","showResetBtn","summaryWithBanksOpened","steps","Component","components","undefined","OverviewModal","toggleOverview","componentRef","mortgageTypeLabel","plural","answer","mappingValuesState","stepFields","getInitialState","defaultState","MortgageParts","forEach","shareParam","getStateFromBase64","removeItem","setItem","storedState","paramsState","mapping","prop","remapObject","Klant_Jaarinkomen","Klant_Leeftijd","Partner_Jaarinkomen","Partner_Leeftijd","HeeftPartner","Onderpand_Koopsom","Onderpand_IsNieuwbouw","Heeft_Woning","Overslaan_Hypotheek","Huis_Prijs","Verkoop_Kosten","Hoogte_Hypotheek","Student_Debt_Amount","energylabel","saveStateToSession","getBase64FromState","getStateAsShareableLink","origin","domain","mappingValues","valuesArray","index","push","mortgageParts","mortgagePartsToString","mortgagePart","join","currentMortgageAmount","fixedInterestAmount","encodeMortgageParts","btoa","base64State","decodedStateValues","parse","atob","reconstructedState","mappingValuesMortgageParts","reconstructedMortgageParts","mortgagePartArray","split","mortgagePartObject","decodeMortgageParts","SharePdfModal","toolData","SenderName","RecipientName","RecipientEmail","shortUrl","pattern","getWhatsAppShareText","shareUrl","shareText","ToolInfoComponent","toggleMobileSummary","mobileSummaryOpened","changeStepState","showNotCompleted","lastActiveStepIndex","getTitle","mortgagePreferenceAddition","mortgagePreference","confetti","particleCount","spread","y","shapes","shapeOptions","image","replaceColor","width","colors","useMemo","fields","showMaxMortgage","sustainabilityBudget","titleGrossMonthlyCost","addition","titleNetMonthlyCost","ownMoneyInformation","extraMoneyNeededInformation","sustainabilityUpliftInformation","sustainabilityUpliftInformationNoLabel","maxMortgageInformationNoHouse","maxMortgageInformationNoLabel","toolTip","hide","addResultRedClass","iamNeverTheFirstItem","toggleSummary","Summary","setMobileSummaryOpened","isOverviewOpened","setIsOverviewOpened","isSharePdfOpened","setIsSharePdfOpened","showPdfSpinner","setShowPdfSpinner","fetchPdf","pdfData","handlePrint","useReactToPrint","content","openedCondition","toggleSharePdf","shareWhatsApp","open","console","ToolInfoComp","Usp","class","App","setStepsState","setLoading","productid","stepIndex","newState","nextStepUpdate","prevStepUpdate","newStepsState","isLastStepFilled","currentStepState","Boolean","match","initialState","calculatorReducer","yearlyIncomeIndependent","it","loadLocaleData","rootReducer","combineReducers","createStore","composeWithDevTools","applyMiddleware","ReduxThunk","lang","messages","render","StrictMode","init","serviceWorker","ready","registration","unregister","catch"],"mappings":"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","file":"static/js/main.9d12a1a1.chunk.js","sourcesContent":["import {calculateMaximumMortgageByIncomeApi, calculateMonthlyCostsByMortgage} from './calculationsApi'\nimport {\n getAdditionalEnergyLabelAmount\n} from \"./helpers\";\n\nexport const calculateByIncome = (data) => {\n\n let isNhg = false;\n\n return calculateMaximumMortgageByIncomeApi(data)\n .then((response) => {\n data.maxMortgageAmount = response.maxMortgageAmount;\n data.Interest = (data.SelectedMortgageProvider) ? data.SelectedMortgageProvider.rentestand : response.interest;\n if (typeof response.isNhg !== 'undefined') {\n isNhg = response.isNhg;\n }\n return calculateMonthlyCostsByMortgage(data);\n\n }).then(function _monthlyCosts(response) {\n response.maxMortgageAmount = data.maxMortgageAmount;\n response.interest = data.Interest;\n response.isNhg = isNhg;\n return response;\n });\n};\n\nconst sustainabilityUplift = (cleanData, calculatedData) => {\n //console.log('sustainabilityUplift', cleanData.EnergyLabel);\n const energyLabel = cleanData.EnergyLabel?.value;\n calculatedData.maxMortgageAmount += getAdditionalEnergyLabelAmount(energyLabel, false);\n if (!calculatedData.isHouseAffordable) {\n if (calculatedData.totalNeededToBuyHouse < calculatedData.maxMortgageAmount) {\n calculatedData.isHouseAffordable = true;\n }\n }\n return calculatedData;\n}\n\n\n\n\nexport const rewriteApiData = (cleanData, calculatedData) => {\n return sustainabilityUplift(cleanData, calculatedData);\n}\n\n","import {calculateByIncome, rewriteApiData} from '../../services/apiHelper'\nimport {\n calculateMonthlyCostsByMortgage,\n calculateYearlyIncome,\n calculateYearlyIncomeIndependentApi,\n CanIAffordThisHouseApi,\n getBanksApi,\n getMortgageProvider,\n getMortgageProviders,\n getNhg,\n getSummaryPdf,\n sharePdfViaEmail\n} from '../../services/calculationsApi'\nimport {store} from '../../index'\nimport {\n SET_FIELD,\n GET_BANK_BY_ID,\n CALCULATE,\n CALCULATE_INCOME,\n CALCULATE_YEARLY_INCOME,\n CALCULATE_YEARLY_INCOME_INDEPENDENT,\n GET_MORTGAGE_PROVIDER,\n GET_SUMMARY_PDF,\n SHARE_PDF\n} from '../actionTypes/calculatorActionTypes'\nimport {removeDotsComas} from \"../../services/helpers\";\n\nexport const parseSearchQuery = (searchString, clean) => {\n const result = {};\n const entries = new URLSearchParams(searchString).entries();\n\n for (const [key, value] of entries) {\n // each 'entry' is a [key, value] tupple\n result[key] = checkValueForCurrency(value, key);\n\n if(clean) {\n if (result.hasOwnProperty('share')) {\n delete result[`share`];\n }\n // remove debug type param\n if (result.hasOwnProperty('type')) {\n delete result[`type`];\n }\n }\n }\n\n return Object.keys(result).length === 0 ? null : result;\n};\n\nconst checkValueForCurrency = (value, key) => {\n return value;\n /*let tmp;\n switch (key) {\n case 'Klant_Jaarinkomen':\n case 'Onderpand_Koopsom':\n case 'Partner_Jaarinkomen':\n tmp = (value) ? '€ ' + value : value;\n break;\n default:\n tmp = value;\n break;\n }\n\n return tmp;*/\n}\n\nexport const setField = (field, value) => {\n return {\n type: SET_FIELD,\n field,\n value\n };\n};\n\nexport const getMortgageProviderAction = (id, isnewbuilding, energyLabel) => {\n return async (dispatch) => {\n\n const mortgageProvider = await getMortgageProvider(id, isnewbuilding, energyLabel.value);\n\n if(typeof store.getState().calculator?.SelectedMortgageProvider?.initial === \"undefined\") {\n const mortgageProvidersNhg = await getMortgageProviders(mortgageProvider.hypotheekVorm, isnewbuilding, 0, mortgageProvider.rentevastePeriode, energyLabel);\n const nhgLookupId = mortgageProvidersNhg.producten.find((p) => p.aanbiederId === mortgageProvider.aanbiederId)?.lookupId;\n const isNhg = nhgLookupId === mortgageProvider.lookupId\n\n // all producten ophalen voor renteBasis 100\n const mortgageProviders100 = await getMortgageProviders(mortgageProvider.hypotheekVorm, isnewbuilding, 100, mortgageProvider.rentevastePeriode, energyLabel);\n let nonNhgLookupId = mortgageProviders100.producten.find((p) => p.aanbiederId === mortgageProvider.aanbiederId)?.lookupId;\n if (typeof nonNhgLookupId === \"undefined\") {\n let mainBank = mortgageProviders100.producten.sort((a, b) => a.rentestand - b.rentestand)[0];\n nonNhgLookupId = mainBank?.lookupId;\n }\n\n mortgageProvider.initial = {\n isNhg: isNhg,\n nhglookupId: nhgLookupId,\n nonNhgLookupId: (nonNhgLookupId) ? nonNhgLookupId : nhgLookupId\n }\n }\n\n dispatch({\n type: GET_MORTGAGE_PROVIDER,\n response: mortgageProvider\n })\n }\n}\n\n\nexport const affordCalcAction = (stepNumber, useBestDealInterest, getMonthlyCost) => {\n return async (dispatch) => {\n const cleanData = removeDotsComas(store.getState().calculator);\n\n if (useBestDealInterest) {\n cleanData.Interest = cleanData.InterestBestDeal;\n }\n\n if (cleanData.Interest <= 0 || !cleanData.Interest) {\n let riskClass = 0;\n const nhg = await getNhg();\n if (parseInt(nhg.existingBuilding) <= parseInt(cleanData.Woning)) {\n riskClass = 101;\n }\n const providers = await getMortgageProviders('Annuïteitenhypotheek', false, riskClass, 10, cleanData.EnergyLabel);\n cleanData.Interest = providers.producten[0].rentestand;\n dispatch(setField('Interest', cleanData.Interest));\n }\n let calculatedData = await CanIAffordThisHouseApi(cleanData);\n if(calculatedData?.error) {\n dispatch(setField('error', calculatedData?.error));\n return;\n }\n calculatedData.maxMortgageAmount = calculatedData.customerMaximumMortgageAmount;\n calculatedData.netMonthlyCostHouse = calculatedData.netMonthlyCost;\n calculatedData.grossMonthlyCostHouse = calculatedData.grossMonthlyCost;\n\n // if we need the monthlyCost for the calculatedData.customerMaximumMortgageAmount\n // this is done when the mortgage history questions are filled in\n // only then does the maxMortgageAmount differ\n if(getMonthlyCost) {\n cleanData.maxMortgageAmount = calculatedData.maxMortgageAmount;\n await calculateMonthlyCostsByMortgage(cleanData).then((result) => {\n calculatedData.netMonthlyCost = result.netMonthlyCost;\n calculatedData.grossMonthlyCost = result.grossMonthlyCost;\n //console.log(result)\n });\n } else {\n // else we delete, since it is retrieved by\n delete calculatedData.customerMaximumMortgageAmount;\n delete calculatedData.netMonthlyCost;\n delete calculatedData.grossMonthlyCost;\n }\n\n calculatedData = rewriteApiData(cleanData, calculatedData);\n\n\n dispatch({\n type: CALCULATE,\n response: calculatedData,\n stepNumber,\n })\n }\n};\n\n\nexport const mortgageCalcAction = (useBestDealInterest) => {\n return async (dispatch) => {\n const cleanData = removeDotsComas(store.getState().calculator);\n if (useBestDealInterest) {\n cleanData.Interest = cleanData.InterestBestDeal;\n }\n let calculatedData = await calculateByIncome(cleanData);\n if(calculatedData?.error) {\n dispatch(setField('error', calculatedData?.error));\n return;\n }\n\n\n calculatedData = rewriteApiData(cleanData, calculatedData);\n\n dispatch({\n type: CALCULATE_INCOME,\n response: calculatedData\n })\n }\n};\n\n\n\n\nexport const calculateYearlyIncomeAction = (data, field) => {\n return async (dispatch) => {\n const calculatedData = await calculateYearlyIncome(data);\n if(calculatedData?.error) {\n dispatch(setField('error', calculatedData?.error));\n return;\n }\n dispatch({\n type: CALCULATE_YEARLY_INCOME,\n response: calculatedData,\n field\n })\n }\n};\n\nexport const getSummaryPdfAction = (data, locale) => {\n return async (dispatch) => {\n if (locale === \"en\") {\n data.language = locale\n }\n const pdfData = await getSummaryPdf(data);\n\n dispatch({\n type: GET_SUMMARY_PDF,\n response: pdfData\n })\n }\n};\n\nexport const sharePdfAction = (data, locale) => {\n if (locale === \"en\") {\n data.language = locale\n }\n return async (dispatch) => {\n const sharePdf = await sharePdfViaEmail(data);\n\n dispatch({\n type: SHARE_PDF,\n response: sharePdf\n })\n }\n};\n\n\nexport const calculateYearlyIncomeIndependentAction = (data, field) => {\n return async (dispatch) => {\n const calculatedData = await calculateYearlyIncomeIndependentApi(data);\n\n dispatch({\n type: CALCULATE_YEARLY_INCOME_INDEPENDENT,\n response: calculatedData,\n field\n })\n }\n};\n\n\nexport const getBankByIdAction = () => {\n return async (dispatch) => {\n const bankIds = [\"AA\", \"RB\", \"IN\"];\n const state = store.getState().calculator;\n const bankData = await getBanksApi(state, state.response);\n\n const banksList = bankData.producten.filter((item) => {\n return bankIds.includes(item.aanbiederId);\n });\n\n let mainBank = bankData.producten.sort((a, b) => a.rentestand - b.rentestand)[0];\n if (store.getState().calculator.SelectedMortgageProvider) {\n mainBank = store.getState().calculator.SelectedMortgageProvider;\n }\n\n const uniqueBanks = banksList.reduce((uniq, item) => uniq.some(({ aanbiederId }) => aanbiederId === item.aanbiederId) ? uniq : [...uniq, item], []);\n const { Woning } = store.getState().calculator;\n for (const uniqueBank of uniqueBanks) {\n if (Woning > 0) {\n uniqueBank.response = await CanIAffordThisHouseApi(removeDotsComas(store.getState().calculator), uniqueBank.rentestand);\n } else {\n uniqueBank.response = await calculateMonthlyCostsByMortgage(removeDotsComas(store.getState().calculator), uniqueBank.rentestand, (state.Woning > 0) ? state.Woning : state.response.maxMortgageAmount);\n }\n }\n\n dispatch({\n type: GET_BANK_BY_ID,\n bankData : {\n mainBank,\n otherBanks: uniqueBanks,\n allBanks: bankData.producten\n }\n });\n\n window.scrollTo(0, 0);\n }\n};\n","export const SET_FIELD = 'SET_FIELD';\n\nexport const CALCULATE = 'CALCULATE';\n\nexport const CALCULATE_INCOME = 'CALCULATE_INCOME';\n\nexport const CALCULATE_YEARLY_INCOME = 'CALCULATE_YEARLY_INCOME';\n\nexport const CALCULATE_YEARLY_INCOME_INDEPENDENT = 'CALCULATE_YEARLY_INCOME_INDEPENDENT';\n\nexport const GET_BANK_BY_ID = 'GET_BANK_BY_ID';\n\nexport const SET_OTHER_BANK = 'SET_OTHER_BANK';\n\nexport const GET_SUMMARY_PDF = 'GET_SUMMARY_PDF';\n\nexport const GET_MORTGAGE_PROVIDER = 'GET_MORTGAGE_PROVIDER';\n\nexport const SHARE_PDF = 'SHARE_PDF';\n\nexport const RESET_STEPS = \"RESET_STEPS\";\n","import {parseSearchQuery} from \"../store/actions/calculatorActions\";\nimport {store} from \"../index\";\n\nexport const CALCULATOR_TYPES = {\n hoeveelKanIkLenen: 'hoeveel-kan-ik-lenen',\n watWordenMijnMaandLasten: 'wat-worden-mijn-maandlasten',\n kanIkDitHuisBetalen: 'kan-ik-dit-huis-betalen'\n};\n\nexport const mainMediaMobile = \"(max-width: 1024px)\";\n\nconst PATH_TO_TYPE_MAP = {\n 'hoeveel-kan-ik-lenen': CALCULATOR_TYPES.hoeveelKanIkLenen,\n 'kan-ik-dit-huis-betalen': CALCULATOR_TYPES.kanIkDitHuisBetalen,\n 'wat-worden-mijn-maandlasten': CALCULATOR_TYPES.watWordenMijnMaandLasten,\n 'maximum-mortgage': CALCULATOR_TYPES.hoeveelKanIkLenen,\n 'mortgage-payment': CALCULATOR_TYPES.watWordenMijnMaandLasten,\n 'can-i-afford-this-house': CALCULATOR_TYPES.kanIkDitHuisBetalen\n};\n\nexport const getCalculatorType = () => {\n const { pathname } = window.location;\n const queryParams = parseSearchQuery(window.location.search);\n let type = CALCULATOR_TYPES.watWordenMijnMaandLasten; // Default type\n\n for (const path in PATH_TO_TYPE_MAP) {\n if (pathname.includes(path)) {\n type = PATH_TO_TYPE_MAP[path];\n break;\n }\n }\n\n if (queryParams && typeof queryParams.type !== 'undefined' && PATH_TO_TYPE_MAP[queryParams.type]) {\n type = PATH_TO_TYPE_MAP[queryParams.type];\n }\n\n return type;\n};\n\nexport const stepStates = {\n active: \"active\",\n filled: \"filled\",\n inactive: \"inactive\",\n closed: \"closed\",\n};\n\nconst getDefaultStepState = () => {\n let state = !hasShareParam() ? [\n stepStates.active,\n stepStates.inactive,\n stepStates.inactive,\n stepStates.inactive,\n stepStates.inactive,\n ] : [\n stepStates.filled,\n stepStates.filled,\n stepStates.filled,\n stepStates.filled,\n stepStates.filled,\n ];\n\n if (getCalculatorType() === CALCULATOR_TYPES.watWordenMijnMaandLasten) {\n state = state.filter((v, i) => i !== 2)\n }\n\n return state;\n}\n\nexport const defaultStepsState = getDefaultStepState();\n\nexport const removeDotsComas = (calculator) => {\n const calculatorCopy = { ...calculator };\n\n for (let field in calculator) {\n if (\n typeof calculator[field] === \"string\" &&\n calculator[field].search(/,|\\./gm) !== -1\n ) {\n calculatorCopy[field] = calculator[field].replace(/,|\\./g, \"\");\n }\n }\n\n return calculatorCopy;\n};\n\nexport const rewriteRadioOptionsClasses = (parent, classes) => {\n const el = document.getElementsByClassName(parent);\n\n if (typeof el[0] !== \"undefined\") {\n for (let i = 0; i < el[0].children.length; i++) {\n el[0].children[i].classList.add(`${parent}-${classes[i]}`);\n }\n }\n};\n\nexport const rewriteSelectIds = (parent, prefix) => {\n setTimeout(function () {\n const el = document.getElementsByClassName(parent);\n if (typeof el[0] !== \"undefined\") {\n for (var i = 0; i < el[0].children.length; i++) {\n el[0].children[i].id = `${prefix}-${parseInt(\n el[0].children[i].innerHTML\n )}`;\n }\n }\n });\n};\n\nexport const numberToCurrency = (number, format = true) => {\n if (number && !format) {\n return `€ ${number}`;\n } else if(number && format) {\n const language = getLanguage();\n const locale = (language === 'nl') ? 'nl-NL' : 'en-US';\n var formatter = new Intl.NumberFormat(locale, {\n //style: 'currency',\n //currency: 'EUR',\n maximumFractionDigits: 0,\n minimumFractionDigits: 0\n });\n return `€ ${formatter.format(number)}`;\n }\n}\n\nexport const currencyToNumber = (value, mustBeNumber, log) => {\n if (typeof value === 'number') return value;\n if (value) {\n value = value.replaceAll(\"€\", \"\");\n value = value.replaceAll(/[,.]/g,'');\n value = value.replaceAll(/\\s/g, '');\n } else {\n value = null;\n }\n //value = (value) ? value.replaceAll(\"€ \", \"\") : null;\n if (log) {\n //console.log(value)\n }\n if (value) {\n value = parseFloat(value);\n if(Math.round(value) !== value) {\n value = value.toFixed(2);\n }\n\n return Math.round(value);\n }\n return (!mustBeNumber) ? value : 0;\n};\n\nexport const remapObject = (object, mapping) => {\n const result = {};\n for (const prop in object) {\n for (const map in mapping) {\n if (map === prop) {\n result[mapping[map]] = object[prop];\n }\n }\n }\n return result;\n};\n\nexport const monthDiff = (dateFrom, dateTo) => {\n return dateTo.getMonth() - dateFrom.getMonth() +\n (12 * (dateTo.getFullYear() - dateFrom.getFullYear()))\n}\n\nexport const convertToDateObject = (dateString) => {\n const parts = dateString.split('-');\n return new Date(parts[0], parts[1] - 1, parts[2]);\n}\n\nexport const getPercentage = (amount, percentage) => {\n //console.log(Math.round((amount / 100) * percentage))\n return Math.round((amount / 100) * percentage);\n}\n\nexport const getLanguage = () => {\n return window.location.pathname.includes('/en/') ? 'en' : 'nl';\n}\n\nexport const setBodyDataForPdf = (state) => {\n let bodyData = {\n yearlyIncome: state.ApplicantYearlyIncome ? state.ApplicantYearlyIncome : 0,\n yearlyIncomePartner: state.PartnerYearlyIncome ? state.PartnerYearlyIncome : 0,\n creditsAndLoans: state.HasLoans ? (+state.Loans +state.StudentDebtMonthlyPayment +state.Alimony +state.PrivateLeaseAmount) : 0,\n maximumMortgage: state.response.maxMortgageAmount ? state.response.maxMortgageAmount : 0,\n grossMonthlyCosts: state.response.grossMonthlyCost ? state.response.grossMonthlyCost : 0,\n netMonthlyCosts: state.response.netMonthlyCost ? state.response.netMonthlyCost : 0,\n applicableGrossMonthlyCosts: state.response.grossMonthlyCostHouse ? state.response.grossMonthlyCostHouse : 0,\n applicableNetMonthlyCosts: state.response.netMonthlyCostHouse ? state.response.netMonthlyCostHouse : 0,\n askingHousePrice: (state.Woning) ? state.Woning : 0,\n //buyerCosts: state.response.buyerCosts ? state.response.buyerCosts : 0,\n //houseTotalCosts: state.response.totalNeededToBuyHouse ? state.response.totalNeededToBuyHouse: 0,\n ownResources: state.OwnResources ? state.OwnResources : 0,\n homeEquity: state.HomeEquity ? state.HomeEquity : 0,\n extraInsert: state.response.extraMoneyNeeded ? state.response.extraMoneyNeeded : 0,\n mortgageType: state.MortgageType === \"Annuïteitenhypotheek\" ? \"Annuïteiten\" : \"Lineair\",\n interest: state.Interest ? state.Interest : 0,\n fixedInterestPeriod: state.RentevastePeriode ? state.RentevastePeriode : 1,\n riskClass: state.response.riskClass ? state.response.riskClass : 0,\n isNhg: state.response.isNhg,\n hasHouse: state.HasHouse === \"true\",\n mortgageHistory: null,\n calculatorType: getCalculatorType()\n\n };\n\n if (state.HasHouse === \"true\" && !state.WantsToSkipMortgageQuestions) {\n bodyData = {...bodyData, mortgageHistory: {\n houseSalePrice: state.HomeEquity,\n houseSaleCosts: state.HomeEquityCosts,\n houseMortgageValue: state.HomeMortgageAmount,\n housePartMortgageValue: (state.HomeMortgageOtherPartAmount) ? state.HomeMortgageOtherPartAmount : 0,\n houseMortgageDateStart: (state.HomeMortgageStart) ? `${state.HomeMortgageStart}T00:00:00.299Z`: null, // \"2021-08-17T20:53:40.651Z\",\n isHouseMortageDateStartedBefore2013: state.HomeMortgageStartBefore2013,\n isHouseMortageCompletelyAnnuityOrLinear: state.HomeMortgageIsBeingPaidOff\n }\n }\n }\n\n return bodyData;\n}\n\n/*\nHomeMortgageAmount(pin):250000\nHomeMortgageIsBeingPaidOff(pin):true\nHomeMortgageStartNotKnown(pin):true\nHomeMortgageStartBefore2013(pin):false\nHomeMortgageOtherPartAmount(pin):null\n */\n\nexport const createPostObject = (data, type) => {\n\n data.StudentDebtMonthlyPayment = calculateStudentDebt(data.StudentDebtAmount, data.Interest);\n\n if (data.ApplicantAge > 67) {\n data.ApplicantAOW = data.ApplicantYearlyIncome;\n }\n\n if (data.PartnerAge > 67) {\n data.PartnerAOW = data.PartnerYearlyIncome;\n }\n let object = {\n mortgageType: (data.MortgageType === \"Annuïteitenhypotheek\" || data.MortgageType === \"Annuiteitenhypotheek\") ? 4 : 9,\n applicant: {\n age: (data.ApplicantAge === 0) ? 35 : data.ApplicantAge,\n yearlyIncome: data.ApplicantYearlyIncome || 0,\n statePensionIncome: data.ApplicantAOW,\n oldAgePensionIncome: data.ApplicantAnnualPensionIncome,\n },\n partner: {\n age: (data.PartnerAge === 0) ? 35 : data.PartnerAge,\n yearlyIncome: data.PartnerYearlyIncome || 0,\n statePensionIncome: data.PartnerAOW,\n oldAgePensionIncome: data.PartnerAnnualPensionIncome,\n },\n interestRate: data.Interest,\n fixedInterestPeriod: (data.RentevastePeriode > 1) ? data.RentevastePeriode : 1,\n loans: (data.Loans + data.StudentDebtMonthlyPayment + data.PrivateLeaseAmount),\n alimony: data.Alimony,\n\n };\n\n if (getCalculatorType() === CALCULATOR_TYPES.watWordenMijnMaandLasten) {\n const {stepState, stepNumber} = store.getState().calculator;\n if(stepState[1] === 'inactive' && stepNumber === 0) {\n object.applicant.yearlyIncome = 34000;\n object.applicant.age = 35;\n }\n }\n\n if (data.HasHouse === \"true\" && !data.WantsToSkipMortgageQuestions) {\n object = {\n ...object, ...{ mortgageHistory : {\n houseSalePrice: data.HomeEquity,\n houseSaleCosts: data.HomeEquityCosts,\n houseMortgageValue: data.HomeMortgageAmount,\n housePartMortgageValue: (data.HomeMortgageOtherPartAmount) ? data.HomeMortgageOtherPartAmount : 0,\n houseMortgageDateStart: (data.HomeMortgageStart) ? `${data.HomeMortgageStart}T20:55:57.299Z`: null, // \"2021-08-17T20:53:40.651Z\",\n isHouseMortageDateStartedBefore2013: data.HomeMortgageStartBefore2013,\n isHouseMortageCompletelyAnnuityOrLinear: data.HomeMortgageIsBeingPaidOff\n }\n }\n };\n\n }\n\n if (type === 'monthlycostsbymortgage') {\n\n object = {\n ...object, ...{\n mortageAmount: (data.maxMortgageAmount === 0) ? 1 : data.maxMortgageAmount\n }\n };\n\n }\n if (type === 'caniaffordthishouse') {\n object = {\n ...object, ...{\n isNewBuilding: parseInt(data.IsNieuwbouw) === 2,\n purchasePrice: parseInt(data.Woning),\n ownMoney: (data.OwnResources) ? parseInt(data.OwnResources) : 0,\n surplus: (data.HomeEquity)? parseInt(data.HomeEquity) : 0\n }\n };\n }\n\n if (typeof data.ApplicantAOW === 'undefined' || !data.ApplicantAOW) {\n delete object.applicant.statePensionIncome;\n }\n\n if (!data.ApplicantAnnualPensionIncome) {\n delete object.applicant.oldAgePensionIncome;\n }\n\n if (typeof data.PartnerAOW === 'undefined' || !data.PartnerAOW) {\n delete object.partner.statePensionIncome;\n }\n\n if (!data.PartnerAnnualPensionIncome) {\n delete object.partner.oldAgePensionIncome;\n }\n\n if (!data.HasPartner) {\n delete object.partner;\n }\n\n return object;\n}\n\nexport function hasShareParam() {\n const params = parseSearchQuery(window.location.search);\n if (params && typeof params.share !== 'undefined') {\n return params.share;\n }\n}\n\nexport function addOfficeIdParamToLink(link) {\n const params = parseSearchQuery(window.location.search);\n if (params && typeof params.officeid !== 'undefined') {\n return `${link}?officeid=${params.officeid}`;\n }\n return link;\n}\n\nexport const getAdditionalEnergyLabelAmount = (energyLabel, isSustainabilityUplift) => {\n switch (energyLabel) {\n case \"-\":\n return isSustainabilityUplift ? 10000 : 0;\n case \"G\":\n case \"F\":\n case \"E\":\n return isSustainabilityUplift ? 20000 : 0;\n case \"D\":\n case \"C\":\n return isSustainabilityUplift ? 15000 : 5000;\n case \"B\":\n case \"A\":\n return isSustainabilityUplift ? 10000 : 10000;\n case \"AP\":\n case \"APP\":\n return isSustainabilityUplift ? 10000 : 20000;\n case \"APPP\":\n return isSustainabilityUplift ? 10000 : 30000;\n case \"APPPP\":\n return isSustainabilityUplift ? 0 : 40000;\n case \"APPPPP\":\n return isSustainabilityUplift ? 0 : 50000;\n default:\n return 0;\n }\n}\n\n// create a function to calculate the student debt\nexport const calculateStudentDebt = (studentDebtAmount, currentInterestRate) => {\n // Determine the multiplier based on the current mortgage interest rate\n let multiplier;\n if (currentInterestRate < 2.00) {\n multiplier = 1.05;\n } else if (currentInterestRate < 2.50) {\n multiplier = 1.10;\n } else if (currentInterestRate < 3.00) {\n multiplier = 1.15;\n } else if (currentInterestRate < 3.50) {\n multiplier = 1.20;\n } else if (currentInterestRate < 4.00) {\n multiplier = 1.20;\n } else if (currentInterestRate < 4.50) {\n multiplier = 1.25;\n } else if (currentInterestRate < 5.00) {\n multiplier = 1.3;\n } else if (currentInterestRate < 5.50) {\n multiplier = 1.3;\n } else if (currentInterestRate < 6.00) {\n multiplier = 1.35;\n } else {\n multiplier = 1.40;\n }\n\n // Apply the multiplier to the cost\n const costWithMultiplier = Math.round(studentDebtAmount * multiplier);\n //console.log('studentLoanAmount', costWithMultiplier);\n //console.log('currentInterestRate', currentInterestRate);\n //console.log('multiplier', multiplier);\n return costWithMultiplier;\n};\n\n\nexport const checkMobileBrowser = (browserName) => {\n return (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\n browserName\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i.test(\n browserName.substr(0, 4)\n )\n );\n};\n","import {createPostObject} from \"./helpers\";\n\nexport const assetsBaseUrl =\nprocess.env.NODE_ENV === \"production\" ? \"/calculator\" : \"\";\n\nconst getApiUrl = (version) => {\n const {hostname} = window.location;\n let api = (version !== 2) ? 'https://api.hypotheker.nl' : 'https://api.hypotheker.nl/v2';\n\n if (hostname.indexOf('staging') !== -1) {\n api = (version !== 2) ? 'https://api.hypotheker.nl' : 'https://staging-api.hypotheker.nl/v2';\n }\n\n if (hostname.indexOf('test') !== -1) {\n api = (version !== 2) ? 'https://testapi.hypotheker.nl' : 'https://test-api.hypotheker.nl/v2';\n }\n\n if (hostname.indexOf('acc') !== -1) {\n api = (version !== 2) ? 'https://acpapi.hypotheker.nl' : 'https://acc-api.hypotheker.nl/v2';\n }\n\n if (hostname.indexOf('localhost') !== -1) {\n api = (version !== 2) ? 'https://api.hypotheker.nl' : 'https://acc-api.hypotheker.nl/v2';\n }\n\n return api;\n};\n\nexport const CanIAffordThisHouseApi = async (data, interest) => {\n\n if (interest) {\n data.Interest = interest;\n }\n let response = await fetch(\n `${getApiUrl(2)}/calculator/caniaffordthishouse`,\n {\n method: \"POST\",\n body: JSON.stringify(createPostObject(data, 'caniaffordthishouse')),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n redirect: \"follow\",\n }\n );\n\n if (response.status >= 500) {\n return {'error': true };\n }\n return response.json(); // error on 500\n};\n\nexport const calculateMaximumMortgageByIncomeApi = async (data) => {\n\n let response = await fetch(\n `${getApiUrl(2)}/calculator/maximummortgagebyincome`,\n {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(createPostObject(data)),\n redirect: \"follow\",\n }\n );\n\n if (response.status >= 500) {\n return {'error': true };\n }\n return response.json(); // error on 500\n};\n\nexport const getNhg = async () => {\n\n let response = await fetch(\n `${getApiUrl(2)}/nhg`,\n {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n return response.json();\n}\n\nexport const getMortgageProviders = async (MortgageType, IsNieuwbouw, RenteBasis, RentevastePeriode, EnergyLabel) => {\n\n const getParamEnergyLabel = EnergyLabel ? (EnergyLabel.value === 'APPPPP') ? 'APPPP' : EnergyLabel.value : '';\n let response = await fetch(\n `${getApiUrl(2)}/interestrates/hypotheekaanbieders?HypotheekVorm=${MortgageType}&IsNieuwbouw=${IsNieuwbouw}&RenteBasis=${RenteBasis}&RentevastePeriode=${RentevastePeriode}&EnergyLabel=${getParamEnergyLabel}`,\n {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n return response.json();\n}\n\nexport const getMortgageProvider = async (id, isnewbuilding, energyLabel) => {\n //console.log(isnewbuilding)\n let response = await fetch(\n `${getApiUrl(2)}/interestrates/hypotheekaanbieders/${id}?isNewBuilding=${isnewbuilding}&energyLabel=${energyLabel}`,\n {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n }\n }\n );\n\n return response.json();\n}\n\nexport const calculateMonthlyCostsByMortgage = async (data, interest, maxMortgageAmount) => {\n\n if (interest) {\n data.Interest = interest;\n }\n\n if (maxMortgageAmount) {\n data.maxMortgageAmount = maxMortgageAmount;\n }\n\n let response = await fetch(\n `${getApiUrl(2)}/calculator/monthlycostsbymortgage`,\n {\n method: \"POST\",\n body: JSON.stringify(createPostObject(data, 'monthlycostsbymortgage')),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n redirect: \"follow\"\n }\n );\n\n if (response.status >= 500) {\n return {'error': true };\n }\n return response.json(); // error on 500\n};\n\nexport const getBanksApi = async (\n{MortgageType, RentevastePeriode, IsNieuwbouw, Woning, EnergyLabel},\n{riskClass, isNhg}\n) => {\n let RenteBasis = 100;\n if (typeof Woning !== \"undefined\") {\n if (Woning > 0) {\n RenteBasis = riskClass;\n } else if (isNhg) {\n RenteBasis = 0;\n }\n }\n\n return await getMortgageProviders(MortgageType, parseInt(IsNieuwbouw) === 2, RenteBasis, RentevastePeriode, EnergyLabel);\n};\n\nexport const getShortUrl = async (url, addOn) => {\n\n if (!addOn) {\n addOn = '';\n }\n /*let data = {\n \"group_guid\": \"Bl64hUIxk07\",\n \"domain\": \"bit.ly\",\n \"long_url\": url\n }*/\n\n let data = {\n \"groupId\": \"Be33b2VNMyq\",\n \"domain\": \"berekenen.hypotheker.nl\",\n \"longUrl\": `${url}${addOn}`\n }\n\n let response = await fetch(\n `${getApiUrl(2)}/urlshortening`,\n {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n //Authorization: \"Bearer f8c2e48062804025e994e7d98d37e2ad0517812e\"\n Authorization: \"Bearer b4916c1b36fb25378359c58936862bfc3d1e3d15\"\n },\n body: JSON.stringify(data),\n }\n );\n\n return response.json();\n}\n\nexport const calculateYearlyIncome = async (data) => {\n let response = await fetch(\n `${getApiUrl(2)}/calculator/calculateyearlyincome`,\n {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n }\n );\n\n return response.json();\n};\nexport const getSummaryPdf = (data) => {\n return fetch(\n `${getApiUrl(2)}/calculator/pdf`,\n {\n method: \"POST\",\n mode: \"cors\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n xhrFields: {\n responseType: \"blob\",\n },\n body: JSON.stringify(data),\n })\n .then((response) => response.blob())\n .then((blob) => {\n // Create blob link to download\n const url = window.URL.createObjectURL(new Blob([blob]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", `berekening-De-Hypotheker.pdf`);\n\n // Append to html link element page\n document.body.appendChild(link);\n\n // Start download\n link.click();\n\n // Clean up and remove the link\n link.parentNode.removeChild(link);\n });\n};\n\nexport const sharePdfViaEmail = async (data) => {\n try {\n let response = await fetch(\n `${getApiUrl(2)}/calculator/email`,\n {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n });\n\n //console.log(response)\n if (response.status === 200) {\n return {\n state: 'mailed',\n success: true,\n message: 'Email is verstuurt'\n }\n } else {\n return {\n state: 'mailed',\n success: false,\n message: 'Email is niet verstuurt'\n }\n }\n } catch (e) {\n\n }\n\n};\n\n\n// copied\nexport const calculateYearlyIncomeIndependentApi = async (postData) => {\n const url =\n \"https://raadhuys.nodum.io/api/hypotheker-api?apiKey=91da9493217153354c8e954b3ecfb5dbc21f431f\" +\n \"&ld1=\" +\n (Number(postData.ld1) ? postData.ld1 : 0) +\n \"&lvu1=\" +\n (Number(postData.lvu1) ? postData.lvu1 : 0) +\n \"&ov1=\" +\n (Number(postData.ov1) ? postData.ov1 : 0) +\n \"&sfw1=\" +\n (Number(postData.sfw1) ? postData.sfw1 : 0) +\n \"&bpga1=\" +\n (Number(postData.bpga1) ? postData.bpga1 : 0) +\n \"&ld2=\" +\n (Number(postData.ld2) ? postData.ld2 : 0) +\n \"&lvu2=\" +\n (Number(postData.lvu2) ? postData.lvu2 : 0) +\n \"&ov2=\" +\n (Number(postData.ov2) ? postData.ov2 : 0) +\n \"&sfw2=\" +\n (Number(postData.sfw2) ? postData.sfw2 : 0) +\n \"&bpga2=\" +\n (Number(postData.bpga2) ? postData.bpga2 : 0) +\n \"&ld3=\" +\n (Number(postData.ld3) ? postData.ld3 : 0) +\n \"&lvu3=\" +\n (Number(postData.lvu3) ? postData.lvu3 : 0) +\n \"&ov3=\" +\n (Number(postData.ov3) ? postData.ov3 : 0) +\n \"&sfw3=\" +\n (Number(postData.sfw3) ? postData.sfw3 : 0) +\n \"&bpga3=\" +\n (Number(postData.bpga3) ? postData.bpga3 : 0);\n\n let response = await fetch(url, {\n method: \"GET\",\n });\n\n return response.json();\n};\n","import React from 'react';\nimport { useMediaQuery } from '@react-hook/media-query';\nimport { FormattedMessage } from 'react-intl';\n\nimport { assetsBaseUrl } from \"../services/calculationsApi\";\nimport {addOfficeIdParamToLink, mainMediaMobile} from \"../services/helpers\";\n\nfunction Header() {\n const mediaMatches = useMediaQuery(mainMediaMobile);\n\n return (\n
\n
\n
\n \n \"Jazeker.\n \n
\n\n
\n \n \n \n\n \n \n \n
\n
\n
\n );\n}\n\nexport default Header;\n","import React from 'react';\nimport {useDispatch,} from \"react-redux\";\nimport {stepStates} from '../../../services/helpers';\nimport {assetsBaseUrl} from \"../../../services/calculationsApi\";\nimport {useMediaQuery} from \"@react-hook/media-query\";\nimport {mainMediaMobile} from \"../../../services/helpers\";\nimport {setField} from \"../../../store/actions/calculatorActions\";\n\nexport const stepTitles = [\n 'Bruto jaarinkomen',\n \"Kredieten en leningen\",\n \"Woning\",\n \"Inleg eigen geld\",\n 'Hypotheekvorm'\n];\n\nfunction StepHeader({title, stepNumber, stepState, openStep, stepSummary, onClose}) {\n let backLink;\n const dispatch = useDispatch();\n const mediaMatches = useMediaQuery(mainMediaMobile);\n\n const openPrevStep = () => {\n dispatch(setField('lastActiveStepIndex', stepNumber - 1));\n\n openStep(stepNumber, false, true);\n };\n\n if (mediaMatches) {\n if (stepNumber === 0) {\n backLink = (\n \n \"\"/Terug\n \n );\n } else {\n backLink = (\n \n )\n }\n }\n\n const toggleStep = () => {\n if (stepState !== stepStates.inactive && !mediaMatches) {\n openStep(stepNumber);\n }\n if (stepState === stepStates.active && stepStates.filled && onClose) {\n onClose();\n }\n };\n\n return (\n
toggleStep()}>\n
\n {stepState === stepStates.filled && (\n
\n \"\"/\n
\n )}\n\n
\n {backLink}\n\n
\n {title}\n
\n
\n
\n\n {stepState !== stepStates.inactive ?\n
\n
\n {stepSummary}\n
\n\n {(stepState === stepStates.filled || stepState === stepStates.closed) ? (\n
\n \"\"/\n
\n ) : (\n
\n –\n
\n )}\n
\n : null}\n
\n );\n}\n\nexport default StepHeader;\n","import TagManager from \"react-gtm-module\";\n\nexport const gtm = (tagManagerArgs) => {\n\tif (window.location.hostname !== 'localhost') {\n\t\tTagManager.initialize(tagManagerArgs);\n\t}else {\n //console.log(\"tagManagerArgs\", tagManagerArgs);\n }\n}\n","import React, {useEffect} from 'react'\nimport { assetsBaseUrl } from \"../../services/calculationsApi\";\nimport {currencyToNumber, numberToCurrency} from \"../../services/helpers\";\nimport {gtm} from '../../services/gtm'\nimport {useIntl} from \"react-intl\";\n\nfunction errorInfo(error, value) {\n // console.log(validationRules[error.type], error.ref.value)\n switch (error.type) {\n case \"required\":\n return error;\n case \"min\":\n return value && value.length > 1;\n\n case \"max\":\n return error;\n default:\n return error;\n }\n}\n\nfunction Input({\n name,\n label,\n inputType,\n icon,\n iconText,\n onIconClick,\n className,\n placeholder,\n register,\n validationRules,\n type,\n error,\n isDisabled,\n value,\n errorTitle,\n valueType,\n}) {\n const intl = useIntl();\n let viewValue = value;\n const highAgeCondition =\n valueType === \"age\" &&\n value &&\n value.length > 1 &&\n value > 56 &&\n value < 67;\n\n useEffect(() => {\n if (!highAgeCondition) return;\n const tagManagerArgs = {\n gtmId: 'GTM-T78CX5',\n dataLayer: {\n event: 'gtm.calculators',\n eventCategory: \"Calculator\",\n eventAction: 'Bruto Jaarinkomen',\n eventLabel: 'pensioeninkomen en aow gevraagd'\n }\n };\n gtm(tagManagerArgs);\n\n }, [highAgeCondition])\n if (!register) {\n return null;\n }\n\n let errorCondition;\n\n if (error) {\n errorCondition = errorInfo(error, value);\n }\n\n function getType(type) {\n if (type === \"currency\") {\n return \"text\";\n }\n return type ? type : \"text\";\n }\n\n function setType($event, type, action) {\n if (type === \"currency\") {\n // if it is a int (even 0) on blur we return it and Math.round\n // if it is not an int we return null\n // always round up\n if (action === \"blur\") {\n //viewValue = ($event.target.value > 0) ? Math.ceil($event.target.value) : $event.target.value\n viewValue = $event.target.value\n } else {\n viewValue = currencyToNumber($event.target.value);\n }\n\n $event.target.type = action === \"focus\" ? \"number\" : \"text\";\n $event.target.value = action === \"blur\" ? (viewValue) ? numberToCurrency(viewValue) : null : viewValue;\n }\n }\n\n return (\n \n {label &&
{label}
}\n\n \n setType(e,type, 'focus')}\n onBlur={e => setType(e, type, 'blur')}\n onWheel={e => e.target.blur()}\n type={getType(type)}\n name={name}\n disabled={isDisabled}\n placeholder={placeholder}\n ref={register(validationRules)}\n />\n\n {icon && (\n
\n \"\"
\n
\n )}\n\n {inputType === \"secondary\" && (\n
\n {valueType === \"-\" ? valueType : null} €\n
\n )}\n
\n\n {errorCondition && (\n
\n {error.type === \"required\" &&\n intl.formatMessage(\n {\n id: \"general.validations.required\",\n defaultMessage: \"Je bent je {errorTitle} vergeten in te vullen.\",\n },\n {\n errorTitle,\n }\n )}\n\n\n {error.type === \"min\" && valueType === \"age\" && value?.length > 1 &&\n intl.formatMessage({ id: \"general.validations.minAge\", defaultMessage: \"Je kunt deze berekening alleen gebruiken als je 18 jaar of ouder bent.\" })\n }\n\n {/*error.type === \"max\" && (\n
\n Op dit moment werkt onze rekentool niet bij een\n leeftijd boven de 67 jaar. Onze excuses voor het\n ongemak. Op één van onze{\" \"}\n \n vestigingen\n {\" \"}\n vertellen we je in een (vrijblijvend) gesprek graag\n meer over de mogelijkheden.\n
\n )*/}\n
\n )}\n\n {highAgeCondition && (\n
\n {intl.formatMessage({ id: \"general.validations.highAge\", defaultMessage: \"Bij een leeftijd boven de 56 jaar houden hypotheekverstrekkers rekening met het pensioeninkomen. Vul hieronder de hoogte van je toekomstige AOW en pensioeninkomen in om uit te rekenen wat de hoogte van je maximale hypotheek is.\" })}\n
\n )}\n \n );\n}\n\nexport default Input;\n","import Input from \"../../core/Input\";\nimport React from \"react\";\nimport {useIntl, FormattedMessage} from 'react-intl';\n\nfunction AgeThresholdQuestions({register, errors, type}) {\n const intl = useIntl();\n const form = {\n annualPensionIncome: {\n formName: (type === \"applicant\") ? \"ApplicantAnnualPensionIncome\" : \"PartnerAnnualPensionIncome\",\n error: (type === \"applicant\") ? errors.ApplicantAnnualPensionIncome : errors.PartnerAnnualPensionIncome\n },\n aow: {\n formName: (type === \"applicant\") ? \"ApplicantAOW\" : \"PartnerAOW\",\n error: (type === \"applicant\") ? errors.ApplicantAOW : errors.PartnerAOW\n }\n }\n return (\n
\n
\n
\n \n
\n\n
\n \n {intl.formatMessage({\n id: \"step1.ageThreshold.pensionIncomeTip.pensionLink\",\n defaultMessage: \"Mijn Pensioenoverzicht\"\n })}\n \n )\n }}\n />\n
\n\n \n
\n\n
\n
\n \n
\n\n
\n \n {intl.formatMessage({\n id: \"step1.ageThreshold.pensionIncomeTip.pensionLink\",\n defaultMessage: \"Mijn Pensioenoverzicht\"\n })}\n \n )\n }}\n />\n
\n\n \n
\n
\n );\n};\n\nexport default AgeThresholdQuestions;\n","import React, {useState} from 'react';\nimport {FormattedMessage} from \"react-intl\";\n\nconst BusinessCalculator = ({toggleLastStep}) => {\n const currentYear = new Date().getFullYear();\n\n const [selectedYear, setSelectedYear] = useState();\n\n return (\n
\n
\n \n
\n\n
\n
\n setSelectedYear(currentYear)}\n >\n {currentYear}\n \n\n setSelectedYear(currentYear - 1)}\n >\n {currentYear - 1}\n \n\n setSelectedYear(currentYear - 2)}\n >\n {currentYear - 2}\n \n\n setSelectedYear(currentYear - 3)}\n >\n {currentYear - 3}\n \n\n setSelectedYear(currentYear - 4)}\n >\n \n {currentYear - 3}\n \n
\n
\n\n {selectedYear && (\n
\n
\n
\n i\n
\n\n
\n \n
\n
\n\n
\n \n\n {selectedYear === currentYear ? (\n \n ) : (\n \n )}\n\n
\n
\n )}\n\n \n \n \n\n
\n );\n};\n\nexport default BusinessCalculator;\n","import React from 'react';\nimport {useDispatch} from \"react-redux\";\nimport {useForm} from \"react-hook-form\";\nimport {RadioGroup, ReversedRadioButton} from \"react-radio-buttons\";\n\nimport Input from \"../../core/Input\";\nimport {calculateYearlyIncomeAction} from \"../../../store/actions/calculatorActions\";\nimport {gtm} from \"../../../services/gtm\";\nimport {assetsBaseUrl} from \"../../../services/calculationsApi\";\nimport ReactTooltip from \"react-tooltip\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nlet PER = \"12\";\nlet JVA = true;\nlet DMK = true;\n\nconst DefaultCalculator = ({toggleIncomeCalculator, field}) => {\n const intl = useIntl();\n const {register, handleSubmit, formState} = useForm({\n mode: 'onChange',\n defaultValues: {\n INK: null,\n ORT: null,\n }\n });\n\n const dispatch = useDispatch();\n\n\n const onSubmit = data => {\n data.JVA = JVA;\n data.DMK = DMK;\n data.PER = PER;\n data.INK = parseInt(data.INK);\n data.ORT = parseInt(data.ORT);\n\n data.UIT = 0;\n\n dispatch(calculateYearlyIncomeAction(data, field));\n\n const tagManagerArgs = {\n gtmId: 'GTM-T78CX5',\n dataLayer: {\n event: \"gtm.trackEvent\",\n eventCategory: \"Jaarinkomen berekenen\",\n eventAction: \"Berekening uitvoeren\",\n eventLabel: \"in loondienst\"\n }\n };\n\n gtm(tagManagerArgs);\n //TagManager.initialize(tagManagerArgs);\n\n toggleIncomeCalculator();\n };\n\n const onPERChange = (value) => {\n PER = value;\n };\n\n const onJVAChange = (value) => {\n JVA = parseInt(value) === 1;\n };\n\n const onDMKChange = (value) => {\n DMK = parseInt(value) === 1;\n };\n\n return (\n
\n
\n
\n\n
\n
\n \n
\n \n \n \n \n\n \n \n \n \n
\n
\n
\n \n
\n\n \n\n
\n \n \"\"/\n \n
\n\n \n
\n
\n\n\n
\n
\n \n
\n\n \n \n Ja\n \n\n \n Nee\n \n \n
\n\n
\n
\n \n\n
\n\n \n \n \n \n\n \n \n \n \n
\n\n \n\n \n \n \n
\n );\n};\n\nexport default DefaultCalculator;\n","import React from 'react';\nimport {useDispatch} from \"react-redux\";\nimport {useForm} from \"react-hook-form\";\nimport {useMediaQuery} from \"@react-hook/media-query\";\n\nimport Input from \"../../core/Input\";\nimport {assetsBaseUrl} from \"../../../services/calculationsApi\";\nimport {calculateYearlyIncomeIndependentAction} from \"../../../store/actions/calculatorActions\";\nimport {mainMediaMobile} from \"../../../services/helpers\";\nimport {gtm} from \"../../../services/gtm\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nconst LastStepOfBusinessCalculator = ({toggleIncomeCalculator, field, toggleLastStep}) => {\n const intl = useIntl();\n const fields = ['ld', 'lvu', 'ov', 'sfw', 'bpga'];\n const currentYear = new Date().getFullYear();\n const years = [\n currentYear - 1,\n currentYear - 2,\n currentYear - 3,\n ];\n const labels = [\n intl.formatMessage({ id: 'incomeCalculator.type.selfEmployed.lastStep.incomeLabels.saldoFiscaleWinst', defaultMessage: 'Saldo fiscale winst' }),\n intl.formatMessage({ id: 'incomeCalculator.type.selfEmployed.lastStep.incomeLabels.loonvervangendeUitkeringen', defaultMessage: 'Loonvervangende uitkeringen' }),\n intl.formatMessage({ id: 'incomeCalculator.type.selfEmployed.lastStep.incomeLabels.ontslagvergoeding', defaultMessage: 'Ontslagvergoeding' }),\n intl.formatMessage({ id: 'incomeCalculator.type.selfEmployed.lastStep.incomeLabels.loondienst', defaultMessage: 'Loondienst' }),\n intl.formatMessage({ id: 'incomeCalculator.type.selfEmployed.lastStep.incomeLabels.bijtellingPriveGebruikAuto', defaultMessage: 'Bijtelling prive gebruik auto' }),\n ];\n\n const mediaMatches = useMediaQuery(mainMediaMobile);\n const {register, handleSubmit} = useForm({\n mode: 'onChange',\n });\n const dispatch = useDispatch();\n\n const onSubmit = data => {\n dispatch(calculateYearlyIncomeIndependentAction(data, field));\n\n const tagManagerArgs = {\n gtmId: 'GTM-T78CX5',\n dataLayer: {\n event: \"gtm.trackEvent\",\n eventCategory: \"Jaarinkomen berekenen\",\n eventAction: \"Berekening uitvoeren\",\n eventLabel: \"Zelfstandige\"\n }\n };\n\n gtm(tagManagerArgs);\n //TagManager.initialize(tagManagerArgs);\n\n toggleIncomeCalculator();\n };\n\n return (\n
\n
\n
\n \n
\n\n
\n \"\"/\n
\n\n
\n \"\"/\n \n
\n\n
\n \n
\n
\n
\n {years.map((item) => {\n return (\n
\n {item}\n
\n )\n })}\n
\n\n
\n\n {fields.map((fieldName, fieldNameIndex) => {\n const inputs = [1, 2, 3].map((number, numberIndex) => {\n const name = fieldName + number;\n\n return (\n \n )\n });\n\n return (\n
\n
\n {labels[fieldNameIndex]}\n
\n\n
\n {inputs}\n
\n
\n )\n })}\n
\n
\n\n\n \n \n \n \n
\n );\n};\n\nexport default LastStepOfBusinessCalculator;\n","import React, {useState} from 'react';\n\nimport BusinessCalculator from \"./incomeCalcParts/BusinessCalculator\";\nimport DefaultCalculator from \"./incomeCalcParts/DefaultCalculator\";\nimport LastStepOfBusinessCalculator from \"./incomeCalcParts/LastStepOfBusinessCalculator\";\nimport {assetsBaseUrl} from \"../../services/calculationsApi\";\nimport {FormattedMessage} from \"react-intl\";\n\nconst IncomeCalculatorModal = ({toggleIncomeCalculator, field}) => {\n const [defaultCalculator, setDefaultCalculator] = useState(true);\n const [lastStepOpened, setLastStepOpened] = useState(false);\n\n const toggleLastStep = () => {\n setLastStepOpened(!lastStepOpened);\n };\n\n return (\n
\n
\n {!lastStepOpened ? (\n
\n
\n \n
\n\n \n \n
\n\n
\n
\n \n
\n\n
\n setDefaultCalculator(true)}\n >\n \n \n\n setDefaultCalculator(false)}\n >\n \n \n
\n
\n\n {defaultCalculator ? (\n \n ) : (\n \n )}\n
\n ) : (\n \n )}\n
\n \n );\n};\n\nexport default IncomeCalculatorModal;\n","import {getCalculatorType, numberToCurrency} from \"./helpers\";\nimport {parseSearchQuery} from \"../store/actions/calculatorActions\";\nimport {store} from \"../index\";\n\nexport const getStepParams = () => {\n\n const requestParams = parseSearchQuery(window.location.search, true);\n const stateStore = getStateFromStore();\n if (isStateSharedViaUrl() || isStateSavedInSession() || requestParams) {\n return stateStore;\n }\n}\n\nexport const getStep1HeaderSummary = (ApplicantYearlyIncome, HasPartner, PartnerYearlyIncome) => {\n if (typeof ApplicantYearlyIncome !== 'undefined' || ApplicantYearlyIncome > 0) {\n return numberToCurrency((typeof PartnerYearlyIncome !== \"undefined\" && HasPartner\n ? +PartnerYearlyIncome + +ApplicantYearlyIncome\n : +ApplicantYearlyIncome));\n }\n}\n\nexport const getStep2HeaderSummary = (HasLoans, Loans, Alimony, StudentDebtMonthlyPayment, PrivateLeaseAmount, intl) => {\n const sum = +Loans + +Alimony + +StudentDebtMonthlyPayment + +PrivateLeaseAmount;\n return HasLoans === \"1\" ? numberToCurrency(sum) : intl.formatMessage({\n id: 'step2.headerSummary.no',\n defaultMessage: 'Nee',\n });\n}\n\nexport const getStep3HeaderSummary = (Woning, intl) => {\n return Woning <= 0 ? intl.formatMessage({\n id: 'step3.headerSummary.no',\n defaultMessage: 'Nee',\n }) : numberToCurrency(Woning);\n}\n\nexport const getStep4HeaderSummary = (HomeEquity, OwnResources, HomeEquityCosts, HomeMortgageAmount, Woning, returnAsInteger, intl) => {\n let sum = HomeEquity ? HomeEquity : 0;\n //if (Woning > 0) {\n sum = HomeEquity ? (+OwnResources + (+HomeEquity - +HomeEquityCosts - +HomeMortgageAmount)) : +OwnResources;\n //}\n\n if (!returnAsInteger) {\n //The amount should be (selling price - costs to sell the house - remaining value of current mortgage) + eigen geld\n return (sum > 0 || sum < 0) ? numberToCurrency(sum) : intl.formatMessage({\n id: 'step4.headerSummary.no',\n defaultMessage: 'Nee',\n });\n } else {\n return sum;\n }\n}\n\nexport const getStep5HeaderSummary = (MortgageType, intl) => {\n return MortgageType === \"Annuïteitenhypotheek\" || MortgageType === \"Annuiteitenhypotheek\" ? intl.formatMessage({\n id: 'step5.headerSummary.annuïteiten',\n defaultMessage: 'Annuïteiten',\n }) : intl.formatMessage({\n id: 'step5.headerSummary.lineair',\n defaultMessage: 'Lineair',\n });\n}\n\n\nconst isStateSharedViaUrl = () => {\n const req = parseSearchQuery(window.location.search);\n if (req && req.share) {\n return true;\n }\n}\n\n\nconst isStateSavedInSession = () => {\n if (window.localStorage.getItem(`state.${getCalculatorType()}`)) {\n return true;\n }\n}\nconst getStateFromStore = () => {\n return store.getState().calculator;\n}\n\n\n","import React from 'react';\n\nimport {assetsBaseUrl} from \"../../../services/calculationsApi\";\nimport {FormattedMessage} from \"react-intl\";\n\n\nfunction NextButton({isFormValid, formState, loading}) {\n return (\n
\n
\n {formState.isValid &&\n
\n \n
\n }\n \n {loading ? (\n \n ) : (\n \n )}\n\n {formState.isValid}\n \n
\n
\n );\n}\n\nexport default NextButton;\n","import React, {useCallback, useEffect, useState} from \"react\";\nimport {RadioGroup, ReversedRadioButton} from \"react-radio-buttons\";\nimport {useForm} from \"react-hook-form\";\nimport StepHeader from \"./stepParts/StepHeader\";\nimport AgeThresholdQuestions from \"./stepParts/AgeThresholdQuestions\";\nimport {\n currencyToNumber,\n getCalculatorType,\n numberToCurrency,\n rewriteRadioOptionsClasses,\n stepStates\n} from \"../../services/helpers\";\nimport Input from \"../core/Input\";\nimport {parseSearchQuery, setField} from \"../../store/actions/calculatorActions\";\nimport {assetsBaseUrl} from \"../../services/calculationsApi\";\nimport ReactDOM from \"react-dom\";\nimport IncomeCalculatorModal from \"../modals/IncomeCalculatorModal\";\nimport {useSelector} from \"react-redux\";\nimport {gtm} from \"../../services/gtm\";\nimport ReactTooltip from \"react-tooltip\";\nimport {getStep1HeaderSummary, getStepParams} from \"../../services/stepHelpers\";\nimport NextButton from \"./stepParts/NextButton\";\nimport {useIntl, FormattedMessage} from 'react-intl';\n\nfunction Step1({\n stepNumber,\n state,\n loading,\n openStep,\n onStepSubmit,\n dispatch,\n shouldReset,\n setResetForms,\n setShowResetBtn,\n }) {\n const {ApplicantYearlyIncome, PartnerYearlyIncome} =\n useSelector((state) => state.calculator);\n\n const intl = useIntl();\n const [HasPartner, setHasPartner] = useState();\n const [stepHeaderSummary, setStepHeaderSummary] = useState();\n const [incomeCalculatorVisibilityViaParam, setIncomeCalculatorVisibilityViaParam] = useState(false);\n const [incomeCalculatorVisibility, setIncomeCalculatorVisibility] =\n useState(false);\n const [incomeCalculatorField, setIncomeCalculatorField] = useState(\n \"ApplicantYearlyIncome\"\n );\n const [params] = useState(() => getStepParams());\n\n const getDefaultValues = (params) => {\n return {\n ApplicantYearlyIncome: numberToCurrency(params?.ApplicantYearlyIncome, true),\n ApplicantAge: (params?.ApplicantAge === 0) ? '' : params?.ApplicantAge,\n ApplicantAnnualPensionIncome: numberToCurrency(\n params?.ApplicantAnnualPensionIncome, true\n ),\n ApplicantAOW: numberToCurrency(params?.ApplicantAOW, true),\n PartnerYearlyIncome: numberToCurrency(params?.PartnerYearlyIncome, true),\n PartnerAge: (params?.PartnerAge === 0) ? '' : params?.PartnerAge,\n PartnerAnnualPensionIncome: numberToCurrency(\n params?.PartnerAnnualPensionIncome, true\n ),\n PartnerAOW: numberToCurrency(params?.PartnerAOW, true),\n };\n }\n const {\n register,\n handleSubmit,\n formState,\n errors,\n watch,\n triggerValidation,\n setValue,\n reset,\n } = useForm({\n mode: \"onChange\",\n defaultValues: getDefaultValues(params),\n });\n const queryParams = parseSearchQuery(window.location.search)\n const isFormValid = formState.isValid && HasPartner;\n const watchAge = watch([\"ApplicantAge\", \"PartnerAge\"]); // target specific fields by their names\n rewriteRadioOptionsClasses(\"buy-house-partner\", [\"yes\", \"no\"]);\n\n const toggleIncomeCalculator = useCallback((field) => {\n setIncomeCalculatorField(field);\n setIncomeCalculatorVisibility(!incomeCalculatorVisibility);\n\n const tagManagerArgs = {\n gtmId: \"GTM-T78CX5\",\n dataLayer: {\n event: \"gtm.virtualPageview\",\n virtualURL: `zelf-berekenen/${getCalculatorType()}/jaarinkomen-berekenen`,\n virtualTitle: \"Jaarinkomen berekenen\",\n },\n };\n\n gtm(tagManagerArgs);\n //TagManager.initialize(tagManagerArgs);\n }, [incomeCalculatorVisibility]);\n\n\n useEffect(() => {\n if (!HasPartner) {\n params?.HasPartner\n ? setHasPartner(params.HasPartner.toString() === \"true\" ? \"1\" : \"0\")\n : setHasPartner(\"0\");\n }\n }, [params, setHasPartner, HasPartner]);\n\n useEffect(() => {\n if (queryParams?.calculate && !incomeCalculatorVisibilityViaParam) {\n toggleIncomeCalculator('ApplicantYearlyIncome');\n setIncomeCalculatorVisibilityViaParam(true); // we have processed the param\n }\n\n }, [queryParams, toggleIncomeCalculator, incomeCalculatorVisibilityViaParam, setIncomeCalculatorVisibilityViaParam]);\n\n useEffect(() => {\n if (shouldReset) {\n reset(getDefaultValues({}));\n setStepHeaderSummary(\"\");\n setResetForms(false);\n }\n }, [shouldReset, reset, setResetForms]);\n\n useEffect(() => {\n if (ApplicantYearlyIncome) {\n setValue(\n \"ApplicantYearlyIncome\",\n numberToCurrency(ApplicantYearlyIncome, true),\n {\n shouldDirty: true,\n }\n );\n setShowResetBtn(true);\n } else {\n setShowResetBtn(false);\n }\n\n PartnerYearlyIncome &&\n setValue(\n \"PartnerYearlyIncome\",\n numberToCurrency(PartnerYearlyIncome, true),\n {shouldDirty: true}\n );\n }, [ApplicantYearlyIncome, PartnerYearlyIncome, setValue, setShowResetBtn]);\n\n useEffect(() => {\n params &&\n setStepHeaderSummary(\n getStep1HeaderSummary(\n params?.ApplicantYearlyIncome,\n params?.HasPartner?.toString() === \"true\",\n params?.PartnerYearlyIncome\n )\n );\n\n }, [setStepHeaderSummary, params]);\n\n const onSubmit = (data) => {\n let tagManagerArgs;\n // true or false\n const hasAPartner = !!parseInt(HasPartner);\n tagManagerArgs = {\n gtmId: \"GTM-T78CX5\",\n dataLayer: {\n event: \"gtm.calculators\",\n eventCategory: \"Calculator\",\n eventAction: \"Bruto Jaarinkomen\",\n eventLabel: hasAPartner ? \"met partner\" : \"zonder partner\",\n },\n };\n\n gtm(tagManagerArgs);\n //console.log(data);\n data.ApplicantAge = Math.floor(data.ApplicantAge);\n data.PartnerAge = Math.floor(data.PartnerAge);\n dispatch(setField(\"HasPartner\", hasAPartner));\n data.ApplicantYearlyIncome = currencyToNumber(\n data.ApplicantYearlyIncome, true\n );\n data.ApplicantAnnualPensionIncome = currencyToNumber(\n data.ApplicantAnnualPensionIncome\n );\n data.ApplicantAOW = currencyToNumber(data.ApplicantAOW);\n data.PartnerYearlyIncome = currencyToNumber(data.PartnerYearlyIncome, true);\n data.PartnerAnnualPensionIncome = currencyToNumber(\n data.PartnerAnnualPensionIncome\n );\n data.PartnerAOW = currencyToNumber(data.PartnerAOW);\n\n //console.log(data);\n setStepHeaderSummary(\n getStep1HeaderSummary(\n data.ApplicantYearlyIncome,\n hasAPartner,\n data.PartnerYearlyIncome\n )\n );\n onStepSubmit(data, stepNumber);\n };\n\n const onRadioChange = (value) => {\n setHasPartner(value);\n };\n\n return (\n \n \n \n \n
\n
\n \n
\n\n berekenen\"\n })}\n onIconClick={() =>\n toggleIncomeCalculator(\"ApplicantYearlyIncome\")\n }\n />\n
\n\n
\n
\n \n \n \n
\n\n \n
\n\n {watchAge.ApplicantAge > 56 &&\n watchAge.ApplicantAge < 67 && (\n \n )}\n\n
\n
\n\n \n
\n\n \n \n \n \n\n \n \n \n \n
\n\n {HasPartner === \"1\" ? (\n
\n
\n
\n \n\n
\n\n berekenen\"\n })}\n onIconClick={() =>\n toggleIncomeCalculator(\"PartnerYearlyIncome\")\n }\n />\n
\n\n
\n\n
\n \n \n \n
\n\n \n
\n\n {watchAge.PartnerAge > 56 &&\n watchAge.PartnerAge < 67 && (\n \n )}\n
\n ) : null}\n\n \n \n \n {incomeCalculatorVisibility\n ? ReactDOM.createPortal(\n ,\n document.getElementById(\"income-calculator-modal-portal\")\n )\n : null}\n \n );\n}\n\nexport default Step1;\n","import React from 'react';\n\nfunction StepSectionHeader({title, sectionState, toggleSection}) {\n return (\n
\n
\n {title}\n
\n\n
\n {sectionState ? '-' : '+'}\n
\n
\n );\n}\n\nexport default StepSectionHeader;\n","import React, {useRef, useState, useEffect} from 'react';\n\nimport StepSectionHeader from \"./StepSectionHeader\";\n\n\nfunction StepSection({title, firstSection, children}) {\n const stepBodyEl = useRef(null);\n const [sectionState, setSectionState] = useState(false);\n const toggleSection = () => {\n setSectionState(!sectionState);\n };\n\n useEffect(() => {\n if (firstSection) {\n setSectionState(true);\n }\n }, [firstSection, setSectionState]);\n\n\n return (\n
\n \n
\n {children}\n
\n
\n );\n}\n\nexport default StepSection;\n","import React, {useEffect, useState} from \"react\";\nimport { RadioGroup, ReversedRadioButton } from \"react-radio-buttons\";\nimport { useForm } from \"react-hook-form\";\nimport StepHeader from \"./stepParts/StepHeader\";\nimport {\n currencyToNumber, numberToCurrency,\n rewriteRadioOptionsClasses,\n stepStates,\n} from \"../../services/helpers\";\nimport StepSection from \"./stepParts/StepSection\";\nimport Input from \"../core/Input\";\nimport { gtm } from \"../../services/gtm\";\nimport { useSelector } from \"react-redux\";\nimport {getStep2HeaderSummary, getStepParams} from \"../../services/stepHelpers\";\nimport NextButton from \"./stepParts/NextButton\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\nimport {assetsBaseUrl} from \"../../services/calculationsApi\";\nimport ReactTooltip from \"react-tooltip\";\n\nfunction Step2({\n stepNumber,\n state,\n loading,\n openStep,\n onStepSubmit,\n shouldReset,\n setResetForms,\n}) {\n const intl = useIntl();\n const [HasLoans, setHasLoans] = useState();\n const [stepHeaderSummary, setStepHeaderSummary] = useState();\n const [PrivateLeaseFull, setPrivateLeaseFull] = useState();\n const { HasPartner } = useSelector((state) => state.calculator);\n const [params] = useState(getStepParams());\n\n const getDefaultValues = (params) => {\n return {\n Loans: numberToCurrency(params?.Loans, true),\n Alimony: numberToCurrency(params?.Alimony, true),\n StudentDebtAmount: numberToCurrency(params?.StudentDebtAmount, true),\n PrivateLeaseAmount: numberToCurrency(params?.PrivateLeaseAmount, true),\n }\n }\n const { register, handleSubmit, formState, reset} = useForm({\n mode: \"onChange\",\n defaultValues: getDefaultValues(params),\n });\n\n const isFormValid = formState.isValid && HasLoans;\n\n useEffect(() => {\n setPrivateLeaseFull(params?.PrivateLeaseFull ? \"1\" : \"0\")\n setHasLoans(params?.HasLoans ? \"1\" : \"0\");\n }, [setHasLoans, params]);\n\n useEffect(() => {\n params &&\n setStepHeaderSummary(\n getStep2HeaderSummary(\n params?.HasLoans ? \"1\" : \"0\",\n params?.Loans,\n params?.Alimony,\n params?.StudentDebtAmount,\n params?.PrivateLeaseAmount,\n intl\n )\n );\n }, [setStepHeaderSummary, params, intl]);\n\n useEffect(() => {\n if (shouldReset) {\n reset( getDefaultValues({}));\n setStepHeaderSummary(\"\");\n setResetForms(false);\n }\n }, [shouldReset, reset, setResetForms]);\n\n rewriteRadioOptionsClasses(\"financial-obligations\", [\"yes\", \"no\"]);\n\n const onRadioChange = (value) => setHasLoans(value);\n\n const onSubmit = (data) => {\n //console.log('onSubmit', data);\n data.Loans = currencyToNumber(data.Loans, true);\n data.Alimony = currencyToNumber(data.Alimony, true);\n data.PrivateLeaseAmount = currencyToNumber(data.PrivateLeaseAmount, true);\n data.PrivateLeaseFull = PrivateLeaseFull === \"1\";\n data.StudentDebtAmount = currencyToNumber(data.StudentDebtAmount, true);\n data.HasLoans = !!parseInt(HasLoans);\n //data.StudentDebtMonthlyPayment = data.StudentDebtAmount;\n\n setStepHeaderSummary(\n getStep2HeaderSummary(\n HasLoans,\n data.Loans,\n data.Alimony,\n data.StudentDebtAmount,\n data.PrivateLeaseAmount,\n intl\n )\n );\n\n const tagManagerArgs = {\n gtmId: \"GTM-T78CX5\",\n dataLayer: {\n event: \"gtm.calculators\",\n eventCategory: \"Calculator\",\n eventAction: \"Kredieten en leningen\",\n eventLabel: !!parseInt(HasLoans)\n ? \"verplichtingen-ja\"\n : \"verplichtingen-nee\",\n },\n };\n\n gtm(tagManagerArgs);\n\n onStepSubmit(data, stepNumber);\n };\n\n return (\n \n \n\n \n
\n
\n \n
\n\n
\n \n
\n\n \n \n \n\n \n\n \n \n\n \n \n\n {HasLoans === \"1\" ? (\n
\n \n
\n \n
\n\n \n
\n\n \n
\n \n
\n \n
\n\n \n
\n
\n \n
\n
\n \n \n \n
\n
\n\n \n
\n Mijn DUO,\n linkCalc: duo.nl\n }}\n />\n\n
\n\n
\n\n \n
\n \n
\n\n \n
\n
\n ) : null}\n\n \n \n \n \n );\n}\n\nexport default Step2;\n","import {RadioGroup, ReversedRadioButton} from \"react-radio-buttons\";\nimport React from \"react\";\nimport {FormattedMessage} from \"react-intl\";\n\n\nconst StepHouseOptions = {\n all : (onRadioChange, IsNieuwbouw) => {\n return (\n \n \n \n \n\n \n \n\n \n\n \n\n \n\n \n \n );\n },\n partial : (onRadioChange, IsNieuwbouw) => {\n return (\n \n \n \n \n\n \n \n \n \n );\n }\n}\n\n\nexport default StepHouseOptions;\n","import React, { useEffect, useState} from \"react\";\nimport Select from \"react-select\";\nimport {useForm} from \"react-hook-form\";\nimport StepHeader from \"./stepParts/StepHeader\";\nimport {\n currencyToNumber,\n rewriteRadioOptionsClasses,\n stepStates,\n getCalculatorType,\n CALCULATOR_TYPES,\n numberToCurrency, checkMobileBrowser,\n} from \"../../services/helpers\";\nimport Input from \"../core/Input\";\nimport {gtm} from \"../../services/gtm\";\nimport {useSelector} from \"react-redux\";\nimport StepHouseOptions from \"./stepParts/StepHouseOptions\";\nimport {getStep3HeaderSummary, getStepParams} from \"../../services/stepHelpers\";\nimport NextButton from \"./stepParts/NextButton\";\nimport {getMortgageProviderAction} from \"../../store/actions/calculatorActions\";\nimport {assetsBaseUrl} from \"../../services/calculationsApi\";\nimport ReactTooltip from \"react-tooltip\";\nimport {RadioGroup, ReversedRadioButton} from \"react-radio-buttons\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nfunction Step3({\n stepNumber,\n state,\n loading,\n openStep,\n onStepSubmit,\n dispatch,\n shouldReset,\n setResetForms,\n }) {\n const intl = useIntl();\n const [params] = useState(getStepParams());\n const { EnergyLabel } = useSelector((state) => state.calculator);\n const [calculatorType, setCalculatorType] = useState();\n const [stepHeaderSummary, setStepHeaderSummary] = useState();\n const [IsNieuwbouw, setIsNieuwbouw] = useState();\n const [sustainabilityUplift, setSustainabilityUplift] = useState(params?.SustainabilityUplift ? params.SustainabilityUplift.toString() : `0`);\n const [AmountAboveNhg, setAmountAboveNhg] = useState(false);\n const [energyLabel, setEnergyLabel] = useState(EnergyLabel?.value ? EnergyLabel : {value: \"\", label: intl.formatMessage({ id: 'step3.whatIsEnergyLabel.NoLabel' , defaultMessage: 'Geen Label'})});\n\n const {\n HasPartner,\n IsNieuwbouw: StateIsNieuwbouw,\n SelectedMortgageProvider,\n Nhg\n } = useSelector((state) => state.calculator);\n const getDefaultValues = (params) => {\n return {\n Woning: numberToCurrency(params?.Woning, true),\n }\n }\n\n const options = [\n {value: \"APPPP\", label: intl.formatMessage({ id: 'step3.whatIsEnergyLabel.Egp' , defaultMessage: 'A++++ incl. energieprestatiegarantie'})},\n {value: \"APPPP\", label: \"A++++\"},\n {value: \"APPP\", label: \"A+++\"},\n {value: \"APP\", label: \"A++\"},\n {value: \"AP\", label: \"A+\"},\n {value: \"A\", label: \"A\"},\n {value: \"B\", label: \"B\"},\n {value: \"C\", label: \"C\"},\n {value: \"D\", label: \"D\"},\n {value: \"E\", label: \"E\"},\n {value: \"F\", label: \"F\"},\n {value: \"G\", label: \"G\"},\n {value: \"\", label: intl.formatMessage({ id: 'step3.whatIsEnergyLabel.NoLabel' , defaultMessage: 'Geen Label'})}\n ];\n\n const {register, handleSubmit, formState, errors, reset, watch} = useForm({\n mode: \"onChange\",\n defaultValues: getDefaultValues(params),\n });\n\n const watchWoning = watch(\"Woning\");\n\n useEffect(() => {\n const handleMobileFocus = () => {\n if (checkMobileBrowser(navigator.userAgent || navigator.vendor || window.opera)) {\n document.activeElement.scrollIntoView(true);\n }\n };\n\n document.addEventListener(\"focus\", handleMobileFocus, true);\n return document.removeEventListener(\"focus\", handleMobileFocus);\n }, []);\n\n\n useEffect(() => {\n if (params) {\n setStepHeaderSummary(\n getStep3HeaderSummary(currencyToNumber(params?.Woning), intl)\n );\n }\n }, [params, intl]);\n\n useEffect(() => {\n if (shouldReset) {\n reset(getDefaultValues({}));\n setStepHeaderSummary(\"\");\n setResetForms(false);\n }\n }, [shouldReset, reset, setResetForms]);\n\n useEffect(() => {\n const housePrice = currencyToNumber(watchWoning);\n if (typeof SelectedMortgageProvider === \"object\" && SelectedMortgageProvider?.initial?.isNhg) {\n\n const lookupId = housePrice > Nhg.existingBuilding ? SelectedMortgageProvider?.initial?.nonNhgLookupId : SelectedMortgageProvider?.initial?.nhglookupId;\n const amountAboveNhg = housePrice > Nhg.existingBuilding;\n\n if (lookupId !== SelectedMortgageProvider.lookupId) {\n dispatch(getMortgageProviderAction(lookupId, (params?.isnewbuilding) ? params?.isnewbuilding : false))\n setAmountAboveNhg(amountAboveNhg)\n }\n }\n }, [dispatch, watchWoning, SelectedMortgageProvider, setAmountAboveNhg, Nhg, params]);\n\n useEffect(() => {\n setCalculatorType(getCalculatorType());\n (StateIsNieuwbouw) ? setIsNieuwbouw(StateIsNieuwbouw.toString()) : setIsNieuwbouw(getCalculatorType() === CALCULATOR_TYPES.hoeveelKanIkLenen ? \"0\" : \"1\");\n }, [calculatorType, StateIsNieuwbouw]);\n\n rewriteRadioOptionsClasses(\"already-found-a-house\", [\n \"no\",\n \"yes-existing\",\n \"yes-new\",\n ]);\n\n const onHouseOptionsChange = (value) => {\n setIsNieuwbouw(value);\n };\n\n const onSustainabilityUpliftChange = (value) => {\n setSustainabilityUplift(value);\n }\n\n const onEnergyLabelChange = (value) => {\n setEnergyLabel(value)\n }\n\n const onSubmit = (data) => {\n data.Woning = currencyToNumber(data.Woning);\n data.IsNieuwbouw = parseInt(IsNieuwbouw);\n data.SustainabilityUplift = parseInt(sustainabilityUplift);\n data.EnergyLabel = energyLabel;\n setStepHeaderSummary(getStep3HeaderSummary(data.Woning, intl));\n\n if (IsNieuwbouw === \"0\" && calculatorType !==\n CALCULATOR_TYPES.watWordenMijnMaandLasten) {\n data.Woning = 0;\n }\n\n // general event\n const tagManagerArgs = {\n gtmId: \"GTM-T78CX5\",\n dataLayer: {\n event: \"gtm.calculators\",\n eventCategory: \"Calculator\",\n eventAction: \"Woning\",\n eventLabel:\n IsNieuwbouw === \"0\"\n ? \"nog niet\"\n : IsNieuwbouw === \"1\"\n ? \"huis-bestaande bouw\"\n : \"huis-nieuwbouw\",\n },\n };\n\n gtm(tagManagerArgs);\n\n onStepSubmit(data, stepNumber);\n };\n\n const isFormValid = formState.isValid && IsNieuwbouw;\n\n return (\n \n \n\n \n
\n
\n
\n\n {(calculatorType === CALCULATOR_TYPES.watWordenMijnMaandLasten || calculatorType === CALCULATOR_TYPES.kanIkDitHuisBetalen) && (\n \n )}\n\n {calculatorType === CALCULATOR_TYPES.hoeveelKanIkLenen && (\n <>\n \n\n \n \n \n )}\n
\n\n
\n
\n\n {calculatorType === CALCULATOR_TYPES.watWordenMijnMaandLasten &&\n
\n \n
\n }\n {calculatorType === CALCULATOR_TYPES.hoeveelKanIkLenen &&\n
\n \n\n {calculatorType === CALCULATOR_TYPES.hoeveelKanIkLenen &&\n StepHouseOptions.all(onHouseOptionsChange, IsNieuwbouw)\n }\n
\n }\n\n {IsNieuwbouw !== \"0\" &&\n <>\n {calculatorType !== CALCULATOR_TYPES.watWordenMijnMaandLasten ?\n \n :\n \n }\n\n \n \n }\n
\n
\n\n {calculatorType === CALCULATOR_TYPES.kanIkDitHuisBetalen &&\n <>\n
\n \n \n \n
\n {StepHouseOptions.partial(onHouseOptionsChange, IsNieuwbouw)}\n \n }\n\n\n {(calculatorType === CALCULATOR_TYPES.hoeveelKanIkLenen || calculatorType === CALCULATOR_TYPES.kanIkDitHuisBetalen) && IsNieuwbouw !== \"0\" &&\n
\n
\n \n
\n \n \n \n \n\n \n \n \n \n
\n \n\n
\n
\n \n
\n
\n }\n
\n\n\n {AmountAboveNhg && getCalculatorType() === CALCULATOR_TYPES.watWordenMijnMaandLasten && (\n
\n \n
\n )}\n \n \n \n \n );\n}\n\nexport default Step3;\n","import React from \"react\";\nimport {Controller} from \"react-hook-form\";\nimport {RadioGroup, ReversedRadioButton} from \"react-radio-buttons\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nfunction HomeMortgageStart({ register, watchHomeMortgageStartNotKnown, control, paidOff }) {\n const intl = useIntl();\n return (\n
\n {!watchHomeMortgageStartNotKnown &&\n
\n
\n \n
\n
\n \n
\n
\n }\n\n
\n\n \n\n
\n\n {watchHomeMortgageStartNotKnown &&\n
\n
\n\n \n
\n\n \n \n \n \n\n \n \n \n \n }\n defaultValue=\"false\"\n name=\"HomeMortgageStartBefore2013\"\n control={control}\n />\n\n
\n }\n\n
\n )};\n\nexport default HomeMortgageStart;\n","import React, {useEffect, useState} from \"react\";\nimport { RadioGroup, ReversedRadioButton } from \"react-radio-buttons\";\nimport {Controller, useForm} from \"react-hook-form\";\nimport StepHeader from \"./stepParts/StepHeader\";\nimport {\n addOfficeIdParamToLink,\n CALCULATOR_TYPES,\n currencyToNumber, getCalculatorType, numberToCurrency,\n rewriteRadioOptionsClasses,\n stepStates,\n} from \"../../services/helpers\";\nimport Input from \"../core/Input\";\nimport { gtm } from \"../../services/gtm\";\nimport { useSelector } from \"react-redux\";\nimport {getStep4HeaderSummary, getStepParams} from \"../../services/stepHelpers\";\nimport HomeMortgageStart from \"./stepParts/HomeMortgageStart\";\nimport NextButton from \"./stepParts/NextButton\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nfunction Step4({\n stepNumber,\n state,\n openStep,\n loading,\n onStepSubmit,\n shouldReset,\n setResetForms,\n}) {\n const intl = useIntl();\n const { HasPartner, Woning } = useSelector((state) => state.calculator);\n const [HasHouse, setHasHouse] = useState();\n const [stepHeaderSummary, setStepHeaderSummary] = useState();\n const [params] = useState(getStepParams());\n const getDefaultValues = (params) => {\n return {\n OwnResources: numberToCurrency(params?.OwnResources, true),\n HomeEquity: numberToCurrency(params?.HomeEquity, true),\n HomeEquityCosts: numberToCurrency(params?.HomeEquityCosts, true),\n HomeMortgageAmount: numberToCurrency(params?.HomeMortgageAmount, true),\n HomeMortgageStart: params?.HomeMortgageStart,\n HomeMortgageStartNotKnown: params?.HomeMortgageStartNotKnown?.toString(),\n HomeMortgageStartBefore2013: params?.HomeMortgageStartBefore2013?.toString(),\n HomeMortgageIsBeingPaidOff: params?.HomeMortgageIsBeingPaidOff?.toString(),\n HomeMortgageOtherPartAmount: numberToCurrency(params?.HomeMortgageOtherPartAmount, true),\n WantsToSkipMortgageQuestions: (params?.WantsToSkipMortgageQuestions) ? params?.WantsToSkipMortgageQuestions?.toString() : \"true\",\n };\n }\n const {\n register,\n handleSubmit,\n formState,\n errors,\n control,\n setValue,\n watch,\n getValues,\n reset,\n } = useForm({\n mode: \"onChange\",\n defaultValues: getDefaultValues(params),\n });\n\n const watchHomeMortgageIsBeingPaidOff = watch(\"HomeMortgageIsBeingPaidOff\");\n const watchWantsToSkipMortgageQuestions = watch(\"WantsToSkipMortgageQuestions\");\n const watchHomeMortgageOtherPartAmount = watch(\"HomeMortgageOtherPartAmount\");\n const watchHomeEquity = watch(\"HomeEquity\");\n\n const watchHomeMortgageStartNotKnown = watch(\"HomeMortgageStartNotKnown\");\n\n useEffect(() => {\n if (currencyToNumber(watchHomeEquity) > 0) {\n setValue(\n \"HomeEquityCosts\",\n numberToCurrency(Math.round(\n (currencyToNumber(watchHomeEquity) / 100) * 2\n ), true),\n { shouldDirty: true }\n );\n }\n }, [watchHomeEquity, setValue]);\n\n useEffect(() => {\n params &&\n setStepHeaderSummary(\n getStep4HeaderSummary(\n params?.HomeEquity,\n params?.OwnResources,\n params?.HomeEquityCosts,\n params?.HomeMortgageAmount,\n params.Woning,\n false,\n intl\n )\n );\n }, [setStepHeaderSummary, params, intl]);\n\n useEffect(() => {\n if (shouldReset) {\n reset(getDefaultValues({}));\n setStepHeaderSummary(\"\");\n setResetForms(false);\n }\n }, [shouldReset, setResetForms, reset]);\n\n const watchValues = watch([\"HomeEquity\", \"OwnResources\"]);\n // fix merge master with HAM-848!\n const MortgageLessThenSurplus =\n Woning > 0\n ? currencyToNumber(watchValues.HomeEquity) +\n currencyToNumber(watchValues.OwnResources) >\n Woning\n : false;\n const isFormValid =\n formState.isValid && HasHouse && !MortgageLessThenSurplus;\n\n useEffect(() => {\n setHasHouse(params?.HasHouse ? params?.HasHouse.toString() : \"false\");\n //setWantsToSkipMortgageQuestions(\"false\");\n }, [setHasHouse, params]);\n\n rewriteRadioOptionsClasses(\"already-own-a-house\", [\"yes\", \"no\"]);\n\n const onHasHouseChange = (value) => setHasHouse(value);\n\n const onSubmit = (data) => {\n data.HasHouse = HasHouse;\n data.HomeEquity = currencyToNumber(data.HomeEquity);\n data.HomeEquityCosts = currencyToNumber(data.HomeEquityCosts);\n data.HomeMortgageAmount = currencyToNumber(data.HomeMortgageAmount);\n data.HomeMortgageIsBeingPaidOff = data.HomeMortgageIsBeingPaidOff === \"true\";\n data.HomeMortgageStartNotKnown = data.HomeMortgageStartNotKnown === \"true\";\n data.HomeMortgageStartBefore2013 = data.HomeMortgageStartBefore2013 === \"true\";\n data.WantsToSkipMortgageQuestions = data.WantsToSkipMortgageQuestions === \"true\"\n data.HomeMortgageOtherPartAmount = currencyToNumber(\n data.HomeMortgageOtherPartAmount\n );\n data.OwnResources = currencyToNumber(data.OwnResources);\n\n setStepHeaderSummary(\n getStep4HeaderSummary(\n data.HomeEquity,\n data.OwnResources,\n data.HomeEquityCosts,\n data.HomeMortgageAmount,\n Woning,\n false,\n intl\n )\n );\n\n const tagManagerArgs = {\n gtmId: \"GTM-T78CX5\",\n dataLayer: {\n event: \"gtm.calculators\",\n eventCategory: \"Calculator\",\n eventAction: \"Inleg eigen geld\",\n eventLabel: \"koophuis-\" + HasHouse,\n },\n };\n\n gtm(tagManagerArgs);\n\n onStepSubmit(data, stepNumber);\n };\n\n return (\n \n \n\n \n
\n {Woning > 0 &&\n
\n
\n \n
\n\n
\n \n
\n\n \n
\n }\n
\n
\n \n
\n\n
\n \n
\n\n \n \n \n \n\n \n \n \n \n\n {HasHouse === \"true\" &&\n
\n {!MortgageLessThenSurplus && HasHouse === \"true\" && getCalculatorType() !== CALCULATOR_TYPES.watWordenMijnMaandLasten && (\n
\n \n {intl.formatMessage({ id: 'step4.mortgageLessThenSurplus.appointmentLink', defaultMessage: 'een vestiging' })}\n \n }}\n />\n
\n )\n }\n
\n \n
\n\n \n \n \n\n \n\n \n \n\n \n \n }\n rules={{ required: true }}\n name=\"WantsToSkipMortgageQuestions\"\n control={control}\n />\n
\n }\n
\n\n {HasHouse === \"true\" && watchWantsToSkipMortgageQuestions === \"false\" &&\n
\n
\n
\n
\n\n \n
\n\n
\n \n
\n\n \n
\n
\n
\n \n
\n\n
\n \n
\n\n \n
\n
\n
\n \n
\n\n \n
\n
\n
\n \n
\n\n \n \n\n \n \n\n \n\n \n \n \n }\n rules={{ required: true }}\n defaultValue={\"true\"}\n name=\"HomeMortgageIsBeingPaidOff\"\n control={control}\n />\n
\n\n {watchHomeMortgageIsBeingPaidOff === \"true\" && (\n \n )}\n {watchHomeMortgageIsBeingPaidOff ===\n \"false\" && (\n
\n
\n
\n \n
\n\n \n
\n\n {watchHomeMortgageOtherPartAmount &&\n currencyToNumber(\n watchHomeMortgageOtherPartAmount\n ) <\n currencyToNumber(\n getValues(\n \"HomeMortgageAmount\"\n )\n ) && (\n \n )}\n
\n )}\n
\n
\n }\n\n {MortgageLessThenSurplus &&\n getCalculatorType() !==\n CALCULATOR_TYPES.watWordenMijnMaandLasten && (\n
\n \n {intl.formatMessage({ id: 'step4.housePriceLessThenSurplus.appointmentLink', defaultMessage: 'een vestiging' })}\n \n }}\n />\n
\n )}\n\n \n \n \n \n );\n}\n\nexport default Step4;\n","import React from 'react';\n\n\nfunction HypoTypeBlock({title, text, active, handleHypoChange}) {\n\n return (\n handleHypoChange(title === 'Annuïteiten')}\n >\n
\n {title}\n
\n
\n {text}\n
\n \n );\n}\n\nexport default HypoTypeBlock;\n","import React from 'react';\n\nimport {assetsBaseUrl} from \"../../../services/calculationsApi\";\n\n\nfunction CheckLine({text}) {\n return (\n
\n
\n \"\"/\n
\n\n
\n {text}\n
\n
\n );\n}\n\nexport default CheckLine;\n","import React from 'react';\nimport {Tab, Tabs, TabList, TabPanel} from 'react-tabs';\n\nimport CheckLine from \"./CheckLine\";\nimport {assetsBaseUrl} from \"../../../services/calculationsApi\";\nimport {FormattedMessage} from \"react-intl\";\n\nfunction StepSidebar({toggleSidebar, sidebarType, intl}) {\n\n return (\n
\n
\n \"\"\n
\n\n
\n\n
\n {(sidebarType === 'mortgage-info') ? intl.formatMessage({ id: 'stepSidebar.mortgageInfo.title' , defaultMessage: 'Hypotheekvormen'})\n : intl.formatMessage({ id: 'stepSidebar.period.title' , defaultMessage: 'Rentevaste periode'})}\n
\n\n {(sidebarType === 'mortgage-info') ? (\n \n \n \n \n \n\n \n \n \n \n\n \n
\n \n
\n\n
\n \n
\n\n
\n \n\n \n\n \n
\n
\n\n \n
\n \n
\n\n
\n \n
\n\n
\n \n\n \n\n \n
\n
\n
\n ) : (\n
\n
\n \n
\n\n
\n \n

\n \n
\n
\n )}\n\n\n
\n\n
\n );\n}\n\nexport default StepSidebar;\n","import React from 'react';\nimport {assetsBaseUrl} from \"../../services/calculationsApi\";\nimport {FormattedMessage} from \"react-intl\";\n\n\nconst LoadingModal = () => {\n return (\n
\n
\n
\n \n
\n\n
\n \"\"/\n \n
\n\n \"\"/\n
\n
\n );\n};\n\nexport default LoadingModal;\n","import React from 'react';\nimport {useDispatch} from \"react-redux\";\nimport {SET_OTHER_BANK} from \"../../store/actionTypes/calculatorActionTypes\";\nimport {assetsBaseUrl} from \"../../services/calculationsApi\";\nimport {FormattedMessage} from \"react-intl\";\nimport {numberToCurrency} from \"../../services/helpers\";\n\nfunction BankCard({isMain, bankData, grossMonthlyCost, selector, selected}) {\n const dispatch = useDispatch();\n const toggleBank = (item, action) => {\n dispatch({\n type: SET_OTHER_BANK,\n action: action,\n bank: item\n })\n }\n\n\n return (\n
\n
\n \"\"/\n
\n\n
\n {isMain ? (\n <>\n
\n
\n \n
\n\n
\n {bankData.hypotheekVorm === 'Annuïteitenhypotheek' || bankData.hypotheekVorm === 'Annuiteitenhypotheek'? 'Annuïteiten' : 'Lineair'}\n
\n
\n\n
\n
\n \n
\n\n
\n {bankData.rentevastePeriode} Jaar\n
\n
\n \n ) : null}\n\n
\n
\n \n
\n\n
\n {bankData.rentestand?.toFixed(2)}%\n
\n
\n {grossMonthlyCost &&\n
\n
\n \n
\n\n
\n {numberToCurrency(grossMonthlyCost)}\n
\n
\n }\n
\n {selector &&\n
\n {selected &&\n \n }\n {!selected &&\n \n }\n
\n }\n
\n );\n}\n\nexport default BankCard;\n","import React, {useState, useRef, useEffect, useCallback} from \"react\";\nimport ReactDOM from \"react-dom\";\nimport Select from \"react-select\";\nimport { useMediaQuery } from \"@react-hook/media-query\";\n\nimport StepHeader from \"./stepParts/StepHeader\";\nimport {\n CALCULATOR_TYPES,\n getCalculatorType, hasShareParam,\n rewriteSelectIds,\n stepStates,\n} from \"../../services/helpers\";\nimport HypoTypeBlock from \"./stepParts/HypoTypeBlock\";\nimport StepSidebar from \"./stepParts/StepSidebar\";\nimport {\n setField,\n mortgageCalcAction,\n getBankByIdAction,\n affordCalcAction,\n} from \"../../store/actions/calculatorActions\";\nimport LoadingModal from \"../modals/LoadingModal\";\nimport { mainMediaMobile } from \"../../services/helpers\";\nimport { useSelector } from \"react-redux\";\nimport { gtm } from \"../../services/gtm\";\nimport BankCard from \"../summary/BankCard\";\nimport {getStep5HeaderSummary} from \"../../services/stepHelpers\";\nimport {getMortgageProvider} from \"../../services/calculationsApi\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nconst rentevasteDropdownStyles = {\n control: (provided) => ({\n ...provided,\n minHeight: \"50px\",\n }),\n\n indicatorSeparator: () => ({\n display: \"none\",\n }),\n};\n\nconst scrollToRef = (ref) => window.scrollTo(0, ref.current.offsetTop + 250);\n\nfunction Step5({ stepNumber, state, openStep, dispatch }) {\n const intl = useIntl();\n const [stepHeaderSummary, setStepHeaderSummary] = useState('');\n const [hypoType, setHypoType] = useState(true);\n const [handledHasShareParam, SetHandledHasShareParam] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const {Woning, SelectedMortgageProvider, MortgageType, IsNieuwbouw, RentevastePeriode} = useSelector((state) => state.calculator);\n const [rentevastePeriod, setRentevastePeriod] = useState();\n const [sidebarVisibility, setSidebarVisibility] = useState(false);\n const [sidebarType, setSidebarType] = useState();\n const mediaMatches = useMediaQuery(mainMediaMobile);\n const myRef = useRef(null);\n\n const yearLabel = intl.formatMessage({id: 'step5.year', defaultMessage: 'jaar'})\n\n const options = [\n { value: 5, label: `5 ${yearLabel}` },\n { value: 10, label: `10 ${yearLabel}`},\n { value: 15, label: `15 ${yearLabel}` },\n { value: 20, label: `20 ${yearLabel}` },\n { value: 30, label: `30 ${yearLabel}` },\n ];\n\n\n const onBestDealCLick = useCallback(async ($event, triggeredByShare) => {\n let setMortgageType = null;\n let setMortgagePeriod = null;\n setIsLoading(true);\n\n if (triggeredByShare) {\n if (SelectedMortgageProvider) {\n\n const response = await getMortgageProvider(SelectedMortgageProvider, IsNieuwbouw);\n setMortgageType = response.hypotheekVorm;\n setMortgagePeriod = response.rentevastePeriode;\n\n } else {\n setRentevastePeriod(options.find((options) => options.value === RentevastePeriode))\n setHypoType(MortgageType !== 'Lineaire_hypotheek')\n setMortgageType = MortgageType;\n setMortgagePeriod = RentevastePeriode;\n }\n } else {\n setMortgageType = hypoType ? \"Annuïteitenhypotheek\" : \"Lineaire_hypotheek\";\n setMortgagePeriod = rentevastePeriod?.value;\n\n if (SelectedMortgageProvider) {\n setMortgageType = SelectedMortgageProvider.hypotheekVorm;\n setMortgagePeriod = SelectedMortgageProvider.rentevastePeriode;\n }\n }\n\n setStepHeaderSummary(getStep5HeaderSummary(setMortgageType, intl));\n\n dispatch(setField(\"MortgageType\", setMortgageType));\n dispatch(setField(\"RentevastePeriode\", setMortgagePeriod));\n\n if (mediaMatches) {\n dispatch(setField(\"lastActiveStepIndex\", stepNumber));\n }\n\n await dispatch(getBankByIdAction());\n\n if (Woning > 0) {\n //await dispatch(mortgageCalcAction());\n await dispatch(affordCalcAction(stepNumber, true ,true));\n } else {\n await dispatch(mortgageCalcAction(true));\n }\n\n await dispatch(setField(\"summaryWithBanksOpened\", true));\n openStep(stepNumber, false, false, true);\n const tagManagerArgs = {\n gtmId: \"GTM-T78CX5\",\n dataLayer: {\n event: \"gtm.calculators\",\n eventCategory: \"Calculator\",\n eventAction: \"Hypotheekvorm\",\n eventLabel: `${(MortgageType === \"Annuïteitenhypotheek\" || MortgageType === \"Annuiteitenhypotheek\") ? 'Annuïteiten' : 'Lineair'}-${setMortgagePeriod}jaar`,\n },\n };\n\n\n gtm(tagManagerArgs);\n\n\n setTimeout(() => {\n setIsLoading(false);\n }, 1000);\n }, [RentevastePeriode, IsNieuwbouw, MortgageType, SelectedMortgageProvider, rentevastePeriod, setRentevastePeriod, Woning, dispatch, hypoType, mediaMatches, openStep, stepNumber, intl, options]);\n\n\n useEffect(() => {\n async function fetchData() {\n await onBestDealCLick(null,true);\n }\n if (hasShareParam() && !handledHasShareParam) {\n fetchData();\n SetHandledHasShareParam(true);\n }\n }, [onBestDealCLick, handledHasShareParam]);\n\n\n useEffect(() => {\n if (!SelectedMortgageProvider && state === \"active\") {\n scrollToRef(myRef);\n }\n }, [SelectedMortgageProvider, state]);\n\n\n const toggleSidebar = (type) => {\n setSidebarVisibility(!sidebarVisibility);\n setSidebarType(type);\n let tagManagerArgs;\n\n if (type === \"mortgage-info\") {\n const MortgageType = hypoType ? \"Annuïteiten\" : \"Lineair\";\n\n tagManagerArgs = {\n gtmId: \"GTM-T78CX5\",\n dataLayer: {\n event: \"gtm.virtualPageview\",\n virtualURL: `zelf-berekenen/${getCalculatorType()}/hypotheekvorm-meer-info/${MortgageType}`,\n virtualTitle: \"Hypotheekvorm - \" + MortgageType,\n },\n };\n } else {\n tagManagerArgs = {\n gtmId: \"GTM-T78CX5\",\n dataLayer: {\n event: \"gtm.virtualPageview\",\n virtualURL: `zelf-berekenen/${getCalculatorType()}/hypotheekvorm-meer-info/rentevaste-periode`,\n virtualTitle: \"Hypotheekvorm - Rentevase periode\",\n },\n };\n }\n\n gtm(tagManagerArgs);\n //TagManager.initialize(tagManagerArgs);\n };\n\n const handleYearChange = (rentevastePeriod) => {\n setRentevastePeriod(rentevastePeriod);\n rewriteSelectIds(\n \"interest-year-select__menu-list\",\n \"interest-year-select\"\n );\n };\n\n const rewriteClasses = () => rewriteSelectIds(\"interest-year-select__menu-list\",\"interest-year-select\");\n\n const handleHypoChange = (value) => {\n setHypoType(value);\n (mediaMatches) && scrollToRef(myRef);\n };\n\n return (\n \n \n\n \n
\n
\n {!SelectedMortgageProvider ? (\n \n ) : (\n \n )}\n\n
\n {SelectedMortgageProvider && (\n
\n \n
\n )}\n {!SelectedMortgageProvider && (\n toggleSidebar(\"mortgage-info\")}\n role=\"button\"\n >\n \n\n
\n )}\n \n {SelectedMortgageProvider && (\n \n )}\n\n {!SelectedMortgageProvider && (\n
\n
\n \n\n \n
\n\n
\n\n
\n
\n \n
\n\n
\n \n
\n\n toggleSidebar(\"period\")}\n >\n \n
\n
\n\n
\n \n
\n
\n )}\n
\n \n {getCalculatorType() !== CALCULATOR_TYPES.hoeveelKanIkLenen ?\n :\n \n }\n \n
\n\n {sidebarVisibility\n ? ReactDOM.createPortal(\n ,\n document.getElementById(\"sidebar-portal\")\n )\n : null}\n\n {isLoading\n ? ReactDOM.createPortal(\n ,\n document.getElementById(\"loading-modal-portal\")\n )\n : null}\n \n \n );\n}\n\nexport default Step5;\n","import React from 'react';\nimport {stepStates} from \"../../../services/helpers\";\n\nfunction StepsIndication({stepsState}) {\n\n const bullets = stepsState.map((item, i) => {\n return (\n
{ i + 1}
\n )\n });\n\n return (\n
\n {bullets}\n
\n );\n}\n\nexport default StepsIndication;\n","import React from 'react';\n\nconst ErrorModal = () => {\n return (\n
\n
\n
\n Er is een onverwacht probleem opgetreden\n
\n\n
\n Klik hier om de berekening opnieuw te starten. Onze excuses voor het ongemak.\n
\n\n
\n
\n );\n};\n\nexport default ErrorModal;\n","import React, { useState } from \"react\";\n\nimport Step1 from \"./steps/Step1\";\nimport Step2 from \"./steps/Step2\";\nimport Step3 from \"./steps/Step3\";\nimport Step4 from \"./steps/Step4\";\nimport Step5 from \"./steps/Step5\";\nimport StepsIndication from \"./steps/stepParts/StepsIndication\";\n\nimport {\n CALCULATOR_TYPES,\n getCalculatorType\n} from \"../services/helpers\";\nimport ErrorModal from \"./modals/ErrorModal\";\nimport {useSelector} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\n\n\n\nfunction Steps({\n openStep,\n loading,\n stepsState,\n onStepSubmit,\n dispatch,\n error,\n onStateClear\n}) {\n //kan-ik-dit-huis-betalen\n //wat-worden-mijn-maandlasten\n const components = () => {\n let steps = {\n //Step1: Step5,\n Step1: Step1,\n Step2: Step2,\n Step3: Step3,\n Step4: Step4,\n Step5: Step5,\n };\n\n const calculatorType = getCalculatorType();\n if (calculatorType === CALCULATOR_TYPES.kanIkDitHuisBetalen) {\n steps = {\n Step1: Step3,\n Step2: Step1,\n Step3: Step4,\n Step4: Step2,\n Step5: Step5,\n };\n }\n if (calculatorType === CALCULATOR_TYPES.watWordenMijnMaandLasten) {\n steps = {\n Step1: Step3,\n Step2: Step1,\n Step3: Step2,\n Step4: Step5,\n };\n }\n\n return steps;\n };\n\n\n const [resetForms, setResetForms] = useState(() => false);\n const [showResetBtn, setShowResetBtn] = useState(() => false);\n const { summaryWithBanksOpened } = useSelector((state) => state.calculator);\n const steps = stepsState.map((item, i) => {\n const Component = components()[`Step${i + 1}`];\n return (\n \n );\n });\n\n return (\n
\n \n\n
\n {showResetBtn ? {\n setResetForms(true);\n onStateClear();\n }}\n >\n\n \n : null}\n\n {steps}\n
\n\n {error && }\n
\n
\n
\n
\n
\n );\n}\n\nexport default Steps;\n","import React from 'react';\nimport {useSelector} from \"react-redux\";\nimport {assetsBaseUrl} from \"../../services/calculationsApi\";\nimport ReactTooltip from \"react-tooltip\";\nimport {useMediaQuery} from \"@react-hook/media-query\";\nimport {CALCULATOR_TYPES, getCalculatorType, mainMediaMobile, numberToCurrency} from \"../../services/helpers\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nconst OverviewModal = ({toggleOverview, componentRef}) => {\n const intl = useIntl();\n const mediaMatches = useMediaQuery(mainMediaMobile);\n const {\n RentevastePeriode,\n ApplicantYearlyIncome,\n PartnerYearlyIncome,\n IsNieuwbouw,\n OwnResources,\n bankData,\n Woning,\n Interest,\n HasLoans,\n PrivateLeaseAmount,\n Loans,\n Alimony,\n StudentDebtMonthlyPayment,\n response: {\n maxMortgageAmount,\n grossMonthlyCost,\n grossMonthlyCostHouse,\n netMonthlyCost,\n netMonthlyCostHouse,\n riskClass,\n isNhg\n }\n } = useSelector(state => state.calculator);\n\n const mortgageTypeLabel = (getCalculatorType() !== CALCULATOR_TYPES.watWordenMijnMaandLasten) ?\n intl.formatMessage({id: 'overviewModal.house.askingPrice', defaultMessage: 'Vraagprijs woning'}) :\n intl.formatMessage({id: 'overviewModal.house.desiredMortgage', defaultMessage: 'Gewenste hypotheek'});\n return (\n
\n
\n\n
\n \"\"/\n
\n\n
\n
\n
\n \n
\n\n {Woning > 0 &&\n
\n
\n \n
\n\n \n
\n { mortgageTypeLabel }\n
\n\n
\n {numberToCurrency(Woning ? Woning : 0)}\n
\n
\n\n
\n
\n \n
\n\n
\n {numberToCurrency(Woning > 0 ? grossMonthlyCostHouse : 0)}\n
\n
\n\n\n
\n
\n \n
\n\n
\n {numberToCurrency(Woning > 0 ? netMonthlyCostHouse : 0)}\n
\n
\n
\n }\n
\n \n
\n\n\n
\n
\n \n
\n\n
\n {numberToCurrency(ApplicantYearlyIncome ? ApplicantYearlyIncome : 0)}\n
\n
\n\n {PartnerYearlyIncome > 0 &&\n
\n
\n \n
\n\n
\n {numberToCurrency(PartnerYearlyIncome ? PartnerYearlyIncome : 0)}\n
\n
\n }\n {HasLoans &&\n
\n
\n \n
\n {HasLoans &&\n
\n {numberToCurrency((+Loans +StudentDebtMonthlyPayment +Alimony +PrivateLeaseAmount))}\n
\n }\n {!HasLoans &&\n
\n \n
\n }\n
\n }\n\n \n
\n \n
\n\n
\n {numberToCurrency(maxMortgageAmount ? maxMortgageAmount : 0)}\n
\n
\n\n
\n
\n \n
\n\n
\n {numberToCurrency(grossMonthlyCost > 0 ? grossMonthlyCost : 0)}\n
\n
\n\n\n
\n
\n \n
\n\n
\n {numberToCurrency(netMonthlyCost > 0 ? netMonthlyCost : 0)}\n
\n
\n
\n {parseInt(IsNieuwbouw) !== 2 &&\n \n \n \n }\n {parseInt(IsNieuwbouw) === 2 &&\n \n \n \n }\n
\n\n { parseInt(OwnResources) > 0 &&\n
\n
\n \n
\n\n
\n
\n \n \n \n \"\"/\n \n
\n\n
\n {numberToCurrency(OwnResources ? OwnResources : 0)}\n
\n
\n
\n }\n\n
\n\n
\n \n
\n\n
\n
\n \n
\n\n
\n {bankData.mainBank.hypotheekVorm === 'Annuïteitenhypotheek' ? 'Annuïteiten' : 'Lineair'}\n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n {Interest ? Interest : 0} %\n
\n
\n\n
\n
\n \n
\n\n
\n 1 && intl.locale === 'en' ? 's' : ''}\n }/>\n
\n
\n { riskClass > 0 &&\n
\n
\n \n
\n\n
\n {riskClass} %\n
\n
\n }\n
\n
\n \n
\n\n
\n \n
\n
\n
\n
\n
\n
\n
\n\n );\n};\n\nexport default OverviewModal;\n","import {CALCULATOR_TYPES, defaultStepsState, getCalculatorType, hasShareParam, remapObject} from \"./helpers\";\nimport {currencyToNumber} from \"./helpers\";\nimport {parseSearchQuery} from \"../store/actions/calculatorActions\";\n\n// update every time the state structure changes\nconst stateVersion = '16052024';\n\nconst mappingValuesState = [\n 'MortgageType',\n 'RentevastePeriode',\n 'Interest',\n 'MortgageParts', //[]\n 'response',\n 'SelectedMortgageProvider', // alleen product id opslaan\n 'ApplicantAge',\n 'ApplicantYearlyIncome',\n 'ApplicantAnnualPensionIncome',\n 'ApplicantAOW',\n 'HasPartner',\n 'PartnerAge',\n 'PartnerYearlyIncome',\n 'PartnerAnnualPensionIncome',\n 'PartnerAOW',\n 'HasLoans',\n 'Loans',\n 'RiskClass',\n 'Alimony',\n 'StudentDebtAmount',\n 'Woning',\n 'IsNieuwbouw',\n 'HasHouse',\n 'HomeEquity',\n 'HomeEquityCosts',\n 'HomeMortgageAmount',\n 'HomeMortgageStart',\n 'HomeMortgageStartNotKnown',\n 'HomeMortgageStartBefore2013',\n 'HomeMortgageIsBeingPaidOff',\n 'HomeMortgageOtherPartAmount',\n 'OwnResources',\n 'PrivateLeaseAmount',\n 'WantsToSkipMortgageQuestions',\n 'SustainabilityUplift',\n 'EnergyLabel',\n];\n\nconst stepFields = [\n // step 1\n \"ApplicantAge\",\n \"ApplicantYearlyIncome\",\n \"ApplicantAnnualPensionIncome\",\n \"ApplicantAOW\",\n \"HasPartner\",\n \"PartnerAge\",\n \"PartnerYearlyIncome\",\n \"PartnerAnnualPensionIncome\",\n \"PartnerAOW\",\n // step 2\n \"HasLoans\",\n \"Loans\",\n \"Alimony\",\n \"StudentDebtAmount\",\n \"PrivateLeaseAmount\",\n // step 3\n \"Woning\",\n \"IsNieuwbouw\",\n // step 4\n \"HomeEquity\",\n \"OwnResources\",\n\n];\n\n\nexport const getInitialState = () => {\n\n let defaultState = {};\n defaultState = {\n MortgageType: \"Annuïteitenhypotheek\",\n RentevastePeriode: 10,\n Interest: 0,\n MortgageParts: [],\n IsNieuwbouw: 0,\n response: {\n maxMortgageAmount: 0,\n interest: 0,\n grossMonthlyCostHouse: 0,\n netMonthlyCostHouse: 0,\n extraMoneyNeeded: 0\n },\n sharePdf: {\n state: 'not_mailed',\n success: null,\n message: false\n },\n stepState: defaultStepsState,\n SelectedMortgageProvider: false,\n stepNumber: 0\n };\n\n stepFields.forEach((item) => {\n defaultState[item] = 0;\n });\n\n const shareParam = hasShareParam()\n\n if (shareParam) {\n defaultState = {...defaultState, ...getStateFromBase64(shareParam, mappingValuesState)};\n } else {\n\n // check for stateVersion\n if (window.localStorage.getItem('state.version') !== stateVersion) {\n window.localStorage.removeItem(`state.${CALCULATOR_TYPES.hoeveelKanIkLenen}`)\n window.localStorage.removeItem(`state.${CALCULATOR_TYPES.watWordenMijnMaandLasten}`)\n window.localStorage.removeItem(`state.${CALCULATOR_TYPES.kanIkDitHuisBetalen}`)\n window.localStorage.setItem(`state.version`, stateVersion);\n }\n // and check for session state\n const storedState = window.localStorage.getItem(`state.${getCalculatorType()}`)\n if (storedState) {\n defaultState = {\n ...defaultState,\n ...getStateFromBase64(storedState, mappingValuesState)\n }\n };\n\n // check if there are any request params, if so we need to add them to the default state\n const requestParams = parseSearchQuery(window.location.search, true);\n const paramsState = remapObject(requestParams, {\n Klant_Jaarinkomen: \"ApplicantYearlyIncome\",\n Klant_Leeftijd: \"ApplicantAge\",\n Partner_Jaarinkomen: \"PartnerYearlyIncome\",\n Partner_Leeftijd: \"PartnerAge\",\n HeeftPartner: \"HasPartner\",\n Onderpand_Koopsom: \"Woning\",\n Onderpand_IsNieuwbouw: \"IsNieuwbouw\",\n Heeft_Woning: \"HasHouse\",\n Overslaan_Hypotheek: \"WantsToSkipMortgageQuestions\",\n Huis_Prijs: \"HomeEquity\",\n Verkoop_Kosten: \"HomeEquityCosts\",\n Hoogte_Hypotheek: \"HomeMortgageAmount\",\n Student_Debt_Amount: \"StudentDebtAmount\"\n })\n\n if (requestParams?.Onderpand_IsNieuwbouw || requestParams?.isnewbuilding) {\n paramsState.IsNieuwbouw = paramsState.IsNieuwbouw === 'true' || requestParams?.isnewbuilding === \"true\" ? 2 : 1;\n }\n\n if (requestParams?.energylabel) {\n paramsState.EnergyLabel = {value: requestParams.energylabel, label: requestParams.energylabel}\n }\n\n if (Object.keys(paramsState).length) {\n defaultState = {\n ...defaultState,\n ...paramsState\n }\n }\n\n }\n\n return defaultState;\n\n}\n\nexport function saveStateToSession(state, calculatorType) {\n window.localStorage.setItem(\n `state.${calculatorType}`,\n getBase64FromState(state, mappingValuesState)\n );\n}\n\n// create share link, to send to bitly\nexport function getStateAsShareableLink(state) {\n\n const { origin, pathname, hostname} = window.location;\n let domain = `${origin}${pathname}?share=${getBase64FromState(state, mappingValuesState)}`;\n if (hostname.indexOf('localhost') !== -1) {\n domain += `&type=${getCalculatorType()}`\n } else {\n //console.log(domain);\n }\n return domain;\n}\n\n// internal functions\nconst encodeMortgageParts = (mortgageParts) => {\n const mortgagePartsToString = [];\n if (mortgageParts.length) {\n mortgageParts.forEach((mortgagePart) => {\n mortgagePart.mortgageType = Object.values(mortgagePart.mortgageType).join('#');\n mortgagePart.currentMortgageAmount = currencyToNumber(mortgagePart.currentMortgageAmount)\n mortgagePart.fixedInterestAmount = currencyToNumber(mortgagePart.fixedInterestAmount);\n mortgagePartsToString.push(Object.values(mortgagePart).join('|'));\n });\n }\n\n return mortgagePartsToString;\n}\n\nconst decodeMortgageParts = (mortgageParts) => {\n const mappingValuesMortgageParts = [\n 'mortgageDate',\n 'currentMortgageInterest',\n 'fixedInterestYears',\n 'fixedInterestAmount',\n 'currentMortgageAmount',\n 'mortgageType',\n 'takeMortgage'\n ];\n\n const reconstructedMortgageParts = [];\n if (mortgageParts.length) {\n mortgageParts.forEach((mortgagePart) => {\n const mortgagePartArray = mortgagePart.split('|');\n let mortgagePartObject = {};\n mortgagePartArray.forEach((value, index) => {\n switch (mappingValuesMortgageParts[index]) {\n case \"mortgageType\":\n mortgagePartObject = {...mortgagePartObject, ...{[mappingValuesMortgageParts[index]] : {'value': mortgagePartArray[index].split('#')[0], 'label' : mortgagePartArray[index].split('#')[1]}}}\n break;\n default:\n mortgagePartObject = {...mortgagePartObject, ...{[mappingValuesMortgageParts[index]] : mortgagePartArray[index] }}\n break;\n }\n })\n reconstructedMortgageParts.push(mortgagePartObject);\n });\n }\n return reconstructedMortgageParts;\n}\n\nconst getBase64FromState = (state, mappingValues) => {\n\n let valuesArray = [];\n\n // foreach stateMapping array and pick values from state\n mappingValues.forEach((value, index) => {\n\n switch (value) {\n case \"MortgageType\":\n valuesArray.push((state.MortgageType === \"Annuïteitenhypotheek\" || state.MortgageType === \"Annuiteitenhypotheek\") ? 4 : 9)\n break;\n case \"MortgageParts\":\n valuesArray.push(encodeMortgageParts(state.MortgageParts))\n break;\n case \"response\":\n valuesArray.push({riskClass: state.response?.riskClass, isNhg: state.response?.isNhg, maxMortgageAmount: state.response?.maxMortgageAmount});\n break;\n case \"SelectedMortgageProvider\":\n valuesArray.push((state.SelectedMortgageProvider) ? state.SelectedMortgageProvider.lookupId : false)\n break;\n default:\n valuesArray.push(state[value])\n break\n }\n })\n\n //console.log(valuesArray);\n return btoa(JSON.stringify(valuesArray));\n}\n\nconst getStateFromBase64 = (base64State, mappingValues) => {\n const decodedStateValues = JSON.parse(atob(base64State));\n let reconstructedState = {};\n mappingValues.forEach((value, index) => {\n switch (value) {\n case \"MortgageType\":\n reconstructedState = {...reconstructedState, ...{[value]: (decodedStateValues[index] === 4) ? 'Annuïteitenhypotheek' : 'Lineaire_hypotheek' }};\n break;\n case \"MortgageParts\":\n reconstructedState = {...reconstructedState, ...{[value]: decodeMortgageParts(decodedStateValues[index]) }};\n break;\n default:\n reconstructedState = {...reconstructedState, ...{[value]: decodedStateValues[index]}};\n break;\n }\n });\n\n return reconstructedState;\n\n}\n","import React from 'react';\nimport Input from \"../core/Input\";\nimport {useForm} from \"react-hook-form\";\n\n\nimport {assetsBaseUrl, getShortUrl} from \"../../services/calculationsApi\";\nimport {mainMediaMobile, removeDotsComas, setBodyDataForPdf} from \"../../services/helpers\";\nimport {sharePdfAction} from \"../../store/actions/calculatorActions\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {useMediaQuery} from \"@react-hook/media-query\";\nimport {getStateAsShareableLink} from \"../../services/stateHelper\";\nimport {SHARE_PDF} from \"../../store/actionTypes/calculatorActionTypes\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\n\nconst SharePdfModal = ({ toggleOverview, toolData, componentRef }) => {\n const intl = useIntl();\n const { sharePdf } = useSelector((state) => state.calculator);\n const mediaMatches = useMediaQuery(mainMediaMobile);\n const {register, handleSubmit, formState, errors} = useForm({\n mode: 'onChange',\n defaultValues: {\n SenderName: '',\n RecipientName: '',\n RecipientEmail: '',\n }\n });\n const dispatch = useDispatch();\n const onSubmit = async (data) => {\n dispatch({\n type: SHARE_PDF,\n response: {\n state: 'mailing',\n success: true,\n message: intl.formatMessage({id: 'sharePdfModal.mailingDispatch', defaultMessage: 'Email is bezig met versturen'})\n }\n })\n const shortUrl = await getShortUrl(getStateAsShareableLink(removeDotsComas(toolData)), '&utm_source=berekening&utm_medium=email');\n const bodyData = {\n ...setBodyDataForPdf(toolData), ...{\n \"senderName\": data.SenderName,\n \"bitlyLink\" : shortUrl.link,\n \"recipientName\": data.RecipientName,\n \"recipientEmail\": data.RecipientEmail}\n }\n await dispatch(sharePdfAction(bodyData, intl.locale));\n };\n\n return (\n
\n
\n\n
\n \"\"/\n
\n\n
\n
\n
\n \n
\n {sharePdf.state === 'not_mailed' &&\n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n ()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/ }}\n errorTitle={intl.formatMessage({id: 'sharePdfModal.recipientEmail.errorTitle', defaultMessage: `e-mailadres`})}\n />\n
\n \n \n \n \n }\n\n {sharePdf.state === 'mailing' &&\n
\n
\n \"\"\n
\n }\n\n {sharePdf.state === 'mailed' &&\n
\n \n
\n }\n
\n
\n
\n
\n\n );\n};\n\nexport default SharePdfModal;\n","import {CALCULATOR_TYPES, getCalculatorType, numberToCurrency} from \"./helpers\";\n\nexport const getWhatsAppShareText = (state, shareUrl, intl) => {\n\n //console.log('getWhatsAppShareText', state, shareUrl, intl)\n let shareText = '';\n if (getCalculatorType() === CALCULATOR_TYPES.hoeveelKanIkLenen) {\n //console.log(state);\n if (!state.HasPartner && state.Woning === 0) {\n //Scenario 1: Hoeveel kan ik lenen – no partner – no new house\n //shareText = shareText + `Ik heb mijn maximale hypotheek berekend op hypotheker.nl. Ik mag maximaal ${numberToCurrency(state.response.maxMortgageAmount, true)} lenen. Dat kost bruto per maand ${numberToCurrency(state.response.grossMonthlyCost, true)}.`;\n shareText += intl.formatMessage({\n id: 'shareHelper.howMuchCanIBorrowNoPartnerNoNewHouse',\n defaultMessage: 'Ik heb mijn maximale hypotheek berekend op hypotheker.nl. Ik mag maximaal {maxMortgageAmount} lenen. Dat kost bruto per maand {grossMonthlyCost}.'\n },\n {\n maxMortgageAmount: numberToCurrency(state.response.maxMortgageAmount, true),\n grossMonthlyCost: numberToCurrency(state.response.grossMonthlyCost, true)\n });\n }\n\n if (!state.HasPartner && state.Woning > 0) {\n //Scenario 2: Hoeveel kan ik lenen – no partner - new house\n //shareText = shareText + `Ik heb mijn maximale hypotheek berekend op hypotheker.nl. Ik mag maximaal ${numberToCurrency(state.response.maxMortgageAmount, true)} lenen. Dat kost bruto per maand ${numberToCurrency(state.response.grossMonthlyCost, true)}. Voor de woning die ik op het oog heb, moet ik nog ${numberToCurrency(state.response.extraMoneyNeeded, true)} bijleggen. De maandlasten worden voor deze woning ${numberToCurrency(state.response.netMonthlyCostHouse, true)}.`\n shareText += intl.formatMessage({\n id: 'shareHelper.howMuchCanIBorrowNoPartnerNewHouse',\n defaultMessage: 'Ik heb mijn maximale hypotheek berekend op hypotheker.nl. Ik mag maximaal {maxMortgageAmount} lenen. Dat kost bruto per maand {grossMonthlyCost}. Voor de woning die ik op het oog heb, moet ik nog {extraMoneyNeeded} bijleggen. De maandlasten worden voor deze woning {netMonthlyCostHouse}.'\n },\n {\n maxMortgageAmount: numberToCurrency(state.response.maxMortgageAmount, true),\n grossMonthlyCost: numberToCurrency(state.response.grossMonthlyCost, true),\n extraMoneyNeeded: numberToCurrency(state.response.extraMoneyNeeded, true),\n netMonthlyCostHouse: numberToCurrency(state.response.netMonthlyCostHouse, true)\n });\n }\n\n if (state.HasPartner && state.Woning === 0) {\n // Scenario 3: Hoeveel kan ik lenen – with partner – no new house\n //shareText = shareText + `Ik heb onze maximale hypotheek berekend op hypotheker.nl. We mogen maximaal ${numberToCurrency(state.response.maxMortgageAmount, true)} lenen. Dat kost bruto per maand ${numberToCurrency(state.response.grossMonthlyCost, true)}.`\n shareText += intl.formatMessage({\n id: 'shareHelper.howMuchCanIBorrowWithPartnerNoNewHouse',\n defaultMessage: 'Ik heb onze maximale hypotheek berekend op hypotheker.nl. We mogen maximaal {maxMortgageAmount} lenen. Dat kost bruto per maand {grossMonthlyCost}.'\n },\n {\n maxMortgageAmount: numberToCurrency(state.response.maxMortgageAmount, true),\n grossMonthlyCost: numberToCurrency(state.response.grossMonthlyCost, true)\n }\n );\n }\n\n if (state.HasPartner && state.Woning > 0) {\n // Scenario 4: Hoeveel kan ik lenen – with partner – new house\n //shareText = shareText + `Ik heb onze maximale hypotheek berekend op hypotheker.nl. We mogen maximaal ${numberToCurrency(state.response.maxMortgageAmount, true)} lenen. Dat kost bruto per maand ${numberToCurrency(state.response.grossMonthlyCost, true)}. Voor de woning die we op het oog hebben, moeten we nog ${numberToCurrency(state.response.extraMoneyNeeded, true)} bijleggen. De maandlasten voor deze woning worden ${numberToCurrency(state.response.netMonthlyCostHouse, true)}.`\n shareText += intl.formatMessage({\n id: 'shareHelper.howMuchCanIBorrowWithPartnerNewHouse',\n defaultMessage: 'Ik heb onze maximale hypotheek berekend op hypotheker.nl. We mogen maximaal {maxMortgageAmount} lenen. Dat kost bruto per maand {grossMonthlyCost}. Voor de woning die we op het oog hebben, moeten we nog {extraMoneyNeeded} bijleggen. De maandlasten voor deze woning worden {netMonthlyCostHouse}.'\n },\n {\n maxMortgageAmount: numberToCurrency(state.response.maxMortgageAmount, true),\n grossMonthlyCost: numberToCurrency(state.response.grossMonthlyCost, true),\n extraMoneyNeeded: numberToCurrency(state.response.extraMoneyNeeded, true),\n netMonthlyCostHouse: numberToCurrency(state.response.netMonthlyCostHouse, true)\n }\n );\n }\n }\n\n if (getCalculatorType() === CALCULATOR_TYPES.watWordenMijnMaandLasten) {\n if (!state.HasPartner) {\n // Scenario 5: Wat worden mijn maandlasten – no partner\n //shareText = shareText + `Ik heb mijn maandlasten uitgerekend op hypotheker.nl. Voor een gewenste hypotheek van ${numberToCurrency(state.response.purchasePrice, true)} zijn de netto maandlasten ${numberToCurrency(state.response.netMonthlyCostHouse, true)}`\n shareText += intl.formatMessage({\n id: 'shareHelper.whatWillBeMyMonthlyCostsNoPartner',\n defaultMessage: 'Ik heb mijn maandlasten uitgerekend op hypotheker.nl. Voor een gewenste hypotheek van {purchasePrice} zijn de netto maandlasten {netMonthlyCostHouse}'\n },\n {\n purchasePrice: numberToCurrency(state.response.purchasePrice, true),\n netMonthlyCostHouse: numberToCurrency(state.response.netMonthlyCostHouse, true)\n }\n );\n }\n if (state.HasPartner) {\n // Scenario 6: Wat worden mijn maandlasten – with partner\n //shareText = shareText + `Ik heb onze maandlasten uitgerekend op hypotheker.nl. Voor een gewenste hypotheek van ${numberToCurrency(state.response.purchasePrice, true)} zijn de netto maandlasten ${numberToCurrency(state.response.netMonthlyCostHouse, true)}`\n shareText += intl.formatMessage({\n id: 'shareHelper.whatWillBeMyMonthlyCostsWithPartner',\n defaultMessage: 'Ik heb onze maandlasten uitgerekend op hypotheker.nl. Voor een gewenste hypotheek van {purchasePrice} zijn de netto maandlasten {netMonthlyCostHouse}'\n },\n {\n purchasePrice: numberToCurrency(state.response.purchasePrice, true),\n netMonthlyCostHouse: numberToCurrency(state.response.netMonthlyCostHouse, true) }\n );\n }\n }\n\n if (getCalculatorType() === CALCULATOR_TYPES.kanIkDitHuisBetalen) {\n\n if (!state.HasPartner && state.isHouseAffordable) {\n //Scenario 7: Kan ik dit huis betalen? – no partner – can afford the house\n //shareText = shareText + `Ik heb op hypotheker.nl berekend of ik de woning die ik op het oog heb, kan betalen. Ik mag maximaal ${numberToCurrency(state.response.maxMortgageAmount, true)} lenen en kan dus de woning van ${numberToCurrency(state.Woning, true)}. betalen. Dat kost ${numberToCurrency(state.response.netMonthlyCostHouse, true)} per maand en ik heb ${numberToCurrency(state.response.extraMoneyNeeded, true)} eigen geld nodig.`\n shareText += intl.formatMessage({\n id: 'shareHelper.canIAffordThisHouseNoPartnerCanAfford',\n defaultMessage: 'Ik heb op hypotheker.nl berekend of ik de woning die ik op het oog heb, kan betalen. Ik mag maximaal {maxMortgageAmount} lenen en kan dus de woning van {Woning}. betalen. Dat kost {netMonthlyCostHouse} per maand en ik heb {extraMoneyNeeded} eigen geld nodig.'\n },\n {\n maxMortgageAmount: numberToCurrency(state.response.maxMortgageAmount, true),\n Woning: numberToCurrency(state.Woning, true),\n netMonthlyCostHouse: numberToCurrency(state.response.netMonthlyCostHouse, true),\n extraMoneyNeeded: numberToCurrency(state.response.extraMoneyNeeded, true)\n }\n );\n }\n\n if (!state.HasPartner && !state.isHouseAffordable) {\n // Scenario 8: Kan ik dit huis betalen? – no partner – can’t afford the house\n //shareText = shareText + `Ik heb op hypotheker.nl berekend of ik de woning die ik op het oog heb, kan betalen. Ik mag maximaal ${numberToCurrency(state.response.maxMortgageAmount, true)} lenen en kan dus de woning van ${numberToCurrency(state.Woning, true)}. niet betalen.`\n shareText += intl.formatMessage({\n id: 'shareHelper.canIAffordThisHouseNoPartnerCantAfford',\n defaultMessage: 'Ik heb op hypotheker.nl berekend of ik de woning die ik op het oog heb, kan betalen. Ik mag maximaal {maxMortgageAmount} lenen en kan dus de woning van {Woning}. niet betalen.'\n },\n {\n maxMortgageAmount: numberToCurrency(state.response.maxMortgageAmount, true),\n Woning: numberToCurrency(state.Woning, true)\n }\n );\n }\n\n if (state.HasPartner && state.isHouseAffordable) {\n // Scenario 9: Kan ik dit huis betalen? – with partner – can afford the house\n //shareText = shareText + `Ik heb op hypotheker.nl berekend of wij de woning die we op het oog hebben, kunnen betalen. We mogen maximaal ${numberToCurrency(state.response.maxMortgageAmount, true)} lenen en kunnen dus de woning van ${numberToCurrency(state.Woning, true)}. betalen. Dat kost ${numberToCurrency(state.response.netMonthlyCostHouse, true)} maand en we hebben ${numberToCurrency(state.response.extraMoneyNeeded, true)} eigen geld nodig.`\n shareText += intl.formatMessage({\n id: 'shareHelper.canIAffordThisHouseWithPartnerCanAfford',\n defaultMessage: 'Ik heb op hypotheker.nl berekend of wij de woning die we op het oog hebben, kunnen betalen. We mogen maximaal {maxMortgageAmount} lenen en kunnen dus de woning van {Woning}. betalen. Dat kost {netMonthlyCostHouse} maand en we hebben {extraMoneyNeeded} eigen geld nodig.'\n },\n {\n maxMortgageAmount: numberToCurrency(state.response.maxMortgageAmount, true),\n Woning: numberToCurrency(state.Woning, true),\n netMonthlyCostHouse: numberToCurrency(state.response.netMonthlyCostHouse, true),\n extraMoneyNeeded: numberToCurrency(state.response.extraMoneyNeeded, true)\n }\n );\n }\n\n if (state.HasPartner && !state.isHouseAffordable) {\n //Scenario 10: Kan ik dit huis betalen? – with partner – can’t afford the house\n //shareText = shareText + `Ik heb op hypotheker.nl berekend of wij de woning die we op het oog hebben, kunnen betalen. We mogen maximaal ${numberToCurrency(state.response.maxMortgageAmount, true)} lenen en kunnen dus de woning van ${numberToCurrency(state.Woning, true)}. niet betalen.`\n shareText += intl.formatMessage({\n id: 'shareHelper.canIAffordThisHouseWithPartnerCantAfford',\n defaultMessage: 'Ik heb op hypotheker.nl berekend of wij de woning die we op het oog hebben, kunnen betalen. We mogen maximaal {maxMortgageAmount} lenen en kunnen dus de woning van {Woning}. niet betalen.'\n },\n {\n maxMortgageAmount: numberToCurrency(state.response.maxMortgageAmount, true),\n Woning: numberToCurrency(state.Woning, true)\n });\n }\n }\n\n shareText += ` Bekijk de berekening ${shareUrl}`;\n return shareText;\n}\n","import React, {useCallback, useEffect, useMemo} from 'react';\nimport ReactTooltip from 'react-tooltip';\nimport {\n CALCULATOR_TYPES,\n getAdditionalEnergyLabelAmount,\n getCalculatorType, numberToCurrency,\n stepStates\n} from '../../services/helpers';\nimport { getStep4HeaderSummary } from '../../services/stepHelpers';\nimport { setField } from '../../store/actions/calculatorActions';\nimport { assetsBaseUrl } from '../../services/calculationsApi';\nimport {FormattedMessage, useIntl} from \"react-intl\";\nimport {confetti} from \"@tsparticles/confetti\";\nconst ToolInfoComponent = ({\n toolData,\n mediaMatches,\n toggleMobileSummary,\n mobileSummaryOpened,\n dispatch,\n summaryWithBanksOpened,\n changeStepState,\n showNotCompleted,\n }) => {\n const intl = useIntl();\n const calculatorType = getCalculatorType();\n\n const {\n OwnResources,\n Woning,\n HomeEquity,\n lastActiveStepIndex,\n stepState,\n HomeEquityCosts,\n HomeMortgageAmount,\n SustainabilityUplift,\n EnergyLabel,\n response: {\n maxMortgageAmount,\n grossMonthlyCost,\n grossMonthlyCostHouse,\n netMonthlyCostHouse,\n totalNeededToBuyHouse,\n extraMoneyNeeded,\n isHouseAffordable\n }\n } = toolData;\n\n const getTitle = useCallback(() => {\n if (calculatorType === CALCULATOR_TYPES.kanIkDitHuisBetalen) {\n return intl.formatMessage({ id: 'summary.kanIkDitHuisBetalen.title', defaultMessage: 'Kan ik dit huis betalen?' });\n }\n if (calculatorType === CALCULATOR_TYPES.watWordenMijnMaandLasten) {\n return intl.formatMessage({ id: 'summary.watWordenMijnMaandLasten.title', defaultMessage: 'Wat worden mijn maandlasten' });\n }\n return intl.formatMessage({ id: 'summary.hoeveelKanIkLenen.title', defaultMessage: 'Hoeveel kan ik lenen?' });\n }, [calculatorType, intl]);\n\n const mortgagePreferenceAddition = useCallback(() => {\n const getMortgagePreference = () => {\n return (getCalculatorType() !== CALCULATOR_TYPES.watWordenMijnMaandLasten)\n ? intl.formatMessage({\n id: 'summary.titleMonthlyCost.mortgagePreference.maximum',\n defaultMessage: 'maximale'\n })\n : intl.formatMessage({\n id: 'summary.titleMonthlyCost.mortgagePreference.preferred',\n defaultMessage: 'gewenste'\n });\n }\n\n return Woning > 0\n ? \n : '';\n }, [Woning, intl]);\n\n useEffect(() => {\n if (getCalculatorType() === CALCULATOR_TYPES.kanIkDitHuisBetalen && isHouseAffordable !== false) {\n\n var defaults = {\n particleCount: 100,\n spread: 70,\n origin: { y: 0.6 },\n };\n\n confetti({\n ...defaults,\n shapes: [\"image\"],\n shapeOptions: {\n image: {\n src: `${assetsBaseUrl}/assets/svg/triangle.svg`,\n replaceColor: true,\n width: 32,\n height: 40,\n },\n },\n colors: [\"#0F916C\", \"#00325D\", \"#59b2fc\", \"#ce182d\", \"#F5B220\"],\n });\n }\n }, [isHouseAffordable]);\n\n const data = useMemo(() => {\n let fields = [];\n const ownMoney = getStep4HeaderSummary(HomeEquity, OwnResources, HomeEquityCosts, HomeMortgageAmount, Woning, true, intl);\n const title = getTitle();\n const showMaxMortgage = stepState[0] === \"filled\" && stepState[1] === \"filled\";\n const sustainabilityBudget = getAdditionalEnergyLabelAmount(EnergyLabel?.value, SustainabilityUplift === 1);\n\n const titleGrossMonthlyCost= \n const titleNetMonthlyCost = \n\n const ownMoneyInformation = intl.formatMessage({ id:'summary.ownMoneyInformation', defaultMessage : 'Dit is het bedrag dat je hebt aangegeven in te willen brengen bij de aankoop van je nieuwe woning.'});\n const extraMoneyNeededInformation = intl.formatMessage({ id:'summary.extraMoneyNeededInformation', defaultMessage : 'Dit is het extra bedrag aan eigen geld dat je nodig hebt om deze woning te kunnen betalen. Met dit bedrag worden o.a. de kosten voor de notaris, hypotheekakte, taxatie en hypotheekadvies betaald. Eventuele kosten om te overbieden zitten hier niet bij inbegrepen.'});\n const sustainabilityUpliftInformation = intl.formatMessage({ id:'summary.sustainabilityUpliftInformation', defaultMessage : 'Als je de woning die je op het oog hebt wilt verduurzamen, kan je mogelijk aanspraak maken op een verduurzamingsbudget bovenop je maximale leenbedrag. Let op: dit bedrag mag alleen besteed worden aan energiebesparende voorzieningen in en aan de woning en de uiteindelijke hoogte van het additionele verduurzamingsbudget hangt af van de taxatiewaarde van de woning.'});\n const sustainabilityUpliftInformationNoLabel = intl.formatMessage({ id:'summary.sustainabilityUpliftInformationNoLabel', defaultMessage : 'Als je de woning die je op het oog hebt wilt verduurzamen, kan je mogelijk aanspraak maken op een verduurzamingsbudget bovenop je maximale leenbedrag. Let op: dit bedrag mag alleen besteed worden aan energiebesparende voorzieningen in en aan de woning en de uiteindelijke hoogte van het additionele verduurzamingsbudget hangt af van de taxatiewaarde van de woning. Je geeft aan dat er je woning (nog) geen energielabel heeft. Bij de verkoop van een woning moet een energielabel overhandigd worden. Het daadwerkelijke energielabel kan van invloed zijn op de hoogte van het verduurzamingsbudget.'});\n const maxMortgageInformationNoHouse = intl.formatMessage({ id:'summary.maxMortgageInformationNoHouse', defaultMessage : 'Je geeft aan dat je nog geen woning op het oog hebt. Om je maximale hypotheekbedrag te berekenen zijn we uitgegaan van het laagste energielabel. Afhankelijk van het energielabel kan je maximale hypotheek € 5000-€ 50.000 hoger zijn dan het bedrag dat hier getoond wordt.'});\n const maxMortgageInformationNoLabel = intl.formatMessage({ id:'summary.maxMortgageInformationNoLabel', defaultMessage : 'Je geeft aan dat de woning die je op het oog hebt (nog) geen energielabel heeft. Bij de verkoop van een woning moet een energielabel overhandigd worden. Afhankelijk van het energielabel kan je maximale hypotheek € 5000-€ 50.000 hoger zijn dan het bedrag dat hier getoond wordt.'});\n\n\n if (calculatorType === CALCULATOR_TYPES.hoeveelKanIkLenen) {\n fields = [\n {\n title: ,\n value: maxMortgageAmount,\n toolTip: (Woning > 0) ? EnergyLabel?.value === \"-\" ? maxMortgageInformationNoLabel: false : maxMortgageInformationNoHouse\n },\n {\n title: titleGrossMonthlyCost,\n value: grossMonthlyCost,\n },\n {\n title: ,\n value: sustainabilityBudget,\n hide: SustainabilityUplift === 0 || sustainabilityBudget === 0 || Woning === 0,\n toolTip: EnergyLabel?.value === \"-\" ? sustainabilityUpliftInformationNoLabel : sustainabilityUpliftInformation\n },\n {\n title: ,\n value: Woning,\n hide: Woning === 0,\n },\n {\n title: ,\n value: grossMonthlyCostHouse,\n hide: grossMonthlyCostHouse === 0 || Woning === 0\n },\n {\n title: ,\n value: ownMoney,\n hide: ownMoney === 0 || Woning === 0,\n toolTip: ownMoneyInformation\n },\n\n ];\n }\n\n\n if (calculatorType === CALCULATOR_TYPES.kanIkDitHuisBetalen) {\n fields = [\n {\n title: ,\n value: totalNeededToBuyHouse,\n addResultRedClass: isHouseAffordable === false,\n hide: typeof totalNeededToBuyHouse === 'undefined'\n },\n {\n title: ,\n value: maxMortgageAmount,\n iamNeverTheFirstItem: true,\n toolTip: (Woning > 0) ? EnergyLabel?.value === \"-\" ? maxMortgageInformationNoLabel: false : maxMortgageInformationNoHouse\n },\n {\n title: ,\n value: sustainabilityBudget,\n hide: SustainabilityUplift === 0 || sustainabilityBudget === 0 || Woning === 0,\n toolTip: EnergyLabel?.value === \"-\" ? sustainabilityUpliftInformationNoLabel : sustainabilityUpliftInformation\n },\n {\n title: titleGrossMonthlyCost,\n value: grossMonthlyCost\n },\n {\n title: ,\n value: Woning,\n hide: Woning === 0,\n },\n {\n title: ,\n value: grossMonthlyCostHouse,\n hide: grossMonthlyCostHouse === 0 || Woning === 0\n },\n {\n title: ,\n value: extraMoneyNeeded,\n hide: extraMoneyNeeded === 0,\n toolTip: extraMoneyNeededInformation\n },\n {\n title: ,\n value: ownMoney,\n hide: ownMoney === 0 || Woning === 0,\n toolTip: ownMoneyInformation\n }\n ];\n\n }\n\n if (calculatorType === CALCULATOR_TYPES.watWordenMijnMaandLasten) {\n fields = [\n {\n title: titleGrossMonthlyCost,\n value: grossMonthlyCostHouse,\n },\n {\n title: titleNetMonthlyCost,\n value: netMonthlyCostHouse,\n },\n {\n title: ,\n value: Woning,\n hide: Woning === 0,\n },\n {\n title: ,\n value: ownMoney,\n hide: ownMoney === 0 || Woning === 0,\n toolTip: ownMoneyInformation,\n },\n {\n title: ,\n value: maxMortgageAmount,\n hide: maxMortgageAmount === 0 || !showMaxMortgage,\n toolTip: maxMortgageInformationNoHouse\n },\n ];\n }\n\n // Filter out hidden fields and return the result\n return { fields: fields.filter(field => !field.hide), title};\n\n }, [stepState, Woning, EnergyLabel, SustainabilityUplift, maxMortgageAmount, grossMonthlyCost, grossMonthlyCostHouse, totalNeededToBuyHouse, extraMoneyNeeded, isHouseAffordable, HomeEquity, HomeEquityCosts, HomeMortgageAmount, OwnResources, calculatorType, getTitle, intl, mortgagePreferenceAddition, netMonthlyCostHouse]);\n\n const toggleSummary = () => {\n if (typeof summaryWithBanksOpened !== \"boolean\") {\n toggleMobileSummary();\n } else {\n dispatch(setField(\"summaryWithBanksOpened\", !summaryWithBanksOpened));\n changeStepState(lastActiveStepIndex, stepStates.filled);\n }\n };\n\n return (\n <>\n
\n {data.title}\n
\n {showNotCompleted && (\n
\n \n
\n )}\n\n {getCalculatorType() === CALCULATOR_TYPES.kanIkDitHuisBetalen &&\n totalNeededToBuyHouse > 0 ? (\n \n\n
\n \"\"/\n
\n \n
\n
\n {isHouseAffordable !== false && (\n \"success\"\n )}\n\n
\n
\n ) : null}\n\n
\n {data.fields && data.fields.map((item, i) => (\n
\n
\n {item.title}\n {item.toolTip && (\n \n \"\"/\n \n \n )}\n
\n \n {numberToCurrency(item.value ? item.value : 0)}\n
\n {i === 0 && mediaMatches && summaryWithBanksOpened !== true && (\n \n )}\n
\n ))}\n
\n \n );\n};\n\nexport default ToolInfoComponent;\n","import React, {useRef, useState} from \"react\";\nimport {useReactToPrint} from \"react-to-print\";\nimport {useSelector} from \"react-redux\";\nimport ReactDOM from \"react-dom\";\nimport {useMediaQuery} from \"@react-hook/media-query\";\n\nimport BankCard from \"./summary/BankCard\";\nimport {\n addOfficeIdParamToLink,\n CALCULATOR_TYPES,\n getCalculatorType,\n mainMediaMobile,\n removeDotsComas,\n setBodyDataForPdf\n} from \"../services/helpers\";\nimport {assetsBaseUrl, getShortUrl} from \"../services/calculationsApi\";\nimport {stepTitles} from \"./steps/stepParts/StepHeader\";\nimport {setField, getSummaryPdfAction} from \"../store/actions/calculatorActions\";\nimport {stepStates} from \"../services/helpers\";\nimport OverviewModal from \"./modals/OverviewModal\";\nimport SharePdfModal from \"./modals/SharePdfModal\";\nimport {getStateAsShareableLink} from \"../services/stateHelper\";\nimport {getWhatsAppShareText} from \"../services/shareHelper\";\nimport {SHARE_PDF} from \"../store/actionTypes/calculatorActionTypes\";\nimport ToolInfoComponent from \"./summary/ToolInfoComp\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nfunction Summary({dispatch, changeStepState}) {\n const intl = useIntl();\n const toolData = useSelector((state) => state.calculator);\n const mediaMatches = useMediaQuery(mainMediaMobile);\n const [mobileSummaryOpened, setMobileSummaryOpened] = useState(false);\n const [isOverviewOpened, setIsOverviewOpened] = useState(false);\n const [isSharePdfOpened, setIsSharePdfOpened] = useState(false);\n const [showPdfSpinner, setShowPdfSpinner] = useState(false);\n\n const fetchPdf = () => {\n dispatch(\n getSummaryPdfAction(setBodyDataForPdf(toolData), intl.locale)\n ).then(() => setShowPdfSpinner(false))\n }\n\n const {\n stepState,\n lastActiveStepIndex,\n summaryWithBanksOpened,\n bankData,\n response: {\n totalNeededToBuyHouse\n },\n } = toolData;\n\n const showNotCompleted = (getCalculatorType() !== CALCULATOR_TYPES.hoeveelKanIkLenen) ? stepState[0] === \"filled\" && stepState[1] === \"filled\" && stepState[2] !== \"filled\" : stepState[0] === \"filled\" && stepState[1] !== \"filled\";\n\n\n const toggleMobileSummary = (value) => {\n setMobileSummaryOpened(\n typeof value === \"boolean\" ? value : !mobileSummaryOpened\n );\n };\n\n const closeSummary = () => {\n toggleMobileSummary(false);\n\n dispatch(setField(\"summaryWithBanksOpened\", false));\n\n changeStepState(lastActiveStepIndex, stepStates.active);\n };\n\n\n const componentRef = useRef();\n const handlePrint = useReactToPrint({\n content: () => componentRef.current,\n });\n\n const openedCondition = mediaMatches && mobileSummaryOpened;\n\n const toggleOverview = () => {\n setIsOverviewOpened(!isOverviewOpened);\n };\n\n const toggleSharePdf = () => {\n setIsSharePdfOpened(!isSharePdfOpened);\n dispatch({\n type: SHARE_PDF,\n response: {\n state: 'not_mailed',\n success: null,\n message: false\n }\n })\n };\n\n const print = () => {\n toggleOverview();\n\n setTimeout(() => {\n handlePrint();\n }, 200);\n };\n\n const shareWhatsApp = async () => {\n const url = getStateAsShareableLink(removeDotsComas(toolData));\n const {hostname} = window.location;\n\n if (hostname.indexOf('localhost') === -1) {\n const shortUrl = await getShortUrl(url, '&utm_source=berekening&utm_medium=whatsapp');\n const shareText = getWhatsAppShareText(toolData, shortUrl.link, intl)\n window.open(`https://api.whatsapp.com/send?text=${shareText}`)\n } else {\n console.log(url);\n console.log(getWhatsAppShareText(toolData, window.location, intl))\n }\n\n };\n\n return (\n 0\n ? \"ct-step__summary--kanIkDitHuisBetalen\"\n : \"\"\n }\n ${openedCondition ? \"ct-step__summary-opened\" : undefined}\n ${\n summaryWithBanksOpened\n ? \"ct-step__summary-opened-banks\"\n : undefined\n }`}\n id=\"summary\"\n >\n \n\n { /*
\n {toolInfo.title}
\n {showNotCompleted && (\n
\n {\" \"}\n Dit resultaat is gebaseerd op je leeftijd en inkomen. Maak\n de berekening af voor een compleet overzicht van hoeveel je\n kunt lenen.\n
\n )}\n\n {getCalculatorType() === CALCULATOR_TYPES.kanIkDitHuisBetalen &&\n totalNeededToBuyHouse > 0 ? (\n
\n Het lijkt erop dat je het huis{\" \"}\n {isHouseAffordable ? \"\" : \"niet\"} kunt betalen\n
\n ) : null}\n\n
\n {toolInfo.fields}\n
*/ }\n\n {summaryWithBanksOpened &&\n
\n
\n \n \n \n {showPdfSpinner}\n {\n setShowPdfSpinner(true);\n fetchPdf();\n }}\n >\n {showPdfSpinner ? (\n \"\"/\n ) : (\n \n )}\n \n \n \n \n\n \n \n \n
\n
\n\n {getCalculatorType() === CALCULATOR_TYPES.hoeveelKanIkLenen &&\n \n \n \n }\n\n \n \n \n
\n
\n }\n\n
\n {toolData.bankData ? (\n <>\n
\n \n
\n\n
\n \n
\n\n
\n 0\n ? toolData.response\n .grossMonthlyCostHouse\n : toolData.response.grossMonthlyCost\n }\n />\n
\n \n ) : null}\n\n
\n\n
\n
\n \n
\n\n
\n \n
\n\n \n \n \n\n
\n
\n\n {mediaMatches && summaryWithBanksOpened ? (\n
\n \n \n {stepTitles[lastActiveStepIndex]}\n \n
\n ) : null}\n\n {isOverviewOpened\n ? ReactDOM.createPortal(\n ,\n document.getElementById(\"overview-modal-portal\")\n )\n : null}\n {isSharePdfOpened\n ? ReactDOM.createPortal(\n ,\n document.getElementById(\"overview-modal-portal\")\n )\n : null}\n\n
\n );\n}\n\nexport default Summary;\n","import React from 'react';\nimport {assetsBaseUrl} from \"../services/calculationsApi\";\n\nfunction Usp() {\n\n\n return (\n <>\n
\n
\n

Waarom De Hypotheker

\n
    \n
  • \n \n \n \n Wij vergelijken meer dan 40 banken\n
  • \n
  • \n \n \n \n Met ruim 180 vestigingen zitten we altijd bij je in de buurt\n
  • \n
  • \n \n \n \n De eerste afspraak is altijd kosteloos\n
  • \n
\n
\n\n
\n
\n
9,7
\n
Wat onze klanten van ons vinden
\n
\n
\n
31.121 beoordelingen
\n
\n \n
\n
\n\n\n);\n}\n\nexport default Usp;\n","import React, {useEffect, useState} from 'react';\nimport {useMediaQuery} from \"@react-hook/media-query\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport Header from './Header';\nimport {assetsBaseUrl, getNhg} from \"../services/calculationsApi\";\nimport Steps from \"./Steps\";\nimport {getCalculatorType, stepStates, CALCULATOR_TYPES, removeDotsComas} from \"../services/helpers\";\nimport Summary from \"./Summary\";\nimport {\n affordCalcAction,\n getMortgageProviderAction,\n mortgageCalcAction,\n parseSearchQuery,\n setField\n} from \"../store/actions/calculatorActions\";\nimport {defaultStepsState, mainMediaMobile} from \"../services/helpers\";\nimport {saveStateToSession} from \"../services/stateHelper\";\nimport { RESET_STEPS } from \"../store/actionTypes/calculatorActionTypes\";\nimport {FormattedMessage} from \"react-intl\";\nimport Usp from \"./Usp\";\n\nfunction App() {\n const [stepsState, setStepsState] = useState(defaultStepsState);\n const [loading, setLoading] = useState(false);\n const {Woning, error, summaryWithBanksOpened } = useSelector((state) => state.calculator);\n const state = useSelector((state) => state.calculator);\n const dispatch = useDispatch();\n const mediaMatches = useMediaQuery(mainMediaMobile);\n\n useEffect(() => {\n const params = parseSearchQuery(window.location.search)\n\n if (typeof params?.productid !== 'undefined') {\n dispatch(getMortgageProviderAction(params.productid, (params?.isnewbuilding) ? params?.isnewbuilding : false , { value: params.energylabel }))\n }\n }, [dispatch]);\n\n useEffect(() => {\n saveStateToSession(removeDotsComas(state), getCalculatorType());\n }, [state]);\n\n useEffect(() => {\n const fetchData = async () => {\n const nhg = await getNhg();\n dispatch(setField('Nhg', nhg));\n };\n\n fetchData();\n }, [dispatch]);\n\n const onStepSubmit = async (data, stepNumber) => {\n setLoading(true);\n for (let field in data) {\n //console.log('field',field, data[field])\n dispatch(setField(field, data[field]));\n }\n\n const houseValue = (typeof data.Woning !== \"undefined\") ? data?.Woning : Woning;\n\n if (houseValue > 0) {\n if (getCalculatorType() === CALCULATOR_TYPES.kanIkDitHuisBetalen) {\n if (stepNumber >= 1 || stepsState[1] === 'filled') {\n //dispatch(mortgageCalcAction());\n await dispatch(affordCalcAction(stepNumber, false, true));\n } else {\n await dispatch(mortgageCalcAction());\n }\n }\n\n if(getCalculatorType() === CALCULATOR_TYPES.watWordenMijnMaandLasten) {\n // fix for not having the default interest\n if(stepsState[1] === 'inactive' && stepNumber === 0) {\n //await dispatch(mortgageCalcAction());\n }\n\n await dispatch(affordCalcAction(stepNumber, false, true));\n }\n\n if (getCalculatorType() === CALCULATOR_TYPES.hoeveelKanIkLenen) {\n await dispatch(affordCalcAction(stepNumber, false, true));\n }\n\n } else {\n await dispatch(mortgageCalcAction());\n }\n\n if (mediaMatches) {\n dispatch(setField('lastActiveStepIndex', stepNumber));\n }\n\n saveStateToSession(removeDotsComas(state), getCalculatorType());\n setLoading(false);\n openStep(stepNumber, true);\n };\n\n const changeStepState = (stepIndex, newState, nextStepUpdate, prevStepUpdate) => {\n\n\n const newStepsState = [...stepsState];\n newStepsState[stepIndex] = newState;\n\n if (nextStepUpdate) {\n newStepsState[stepIndex + 1] = stepStates.active;\n }\n\n if (prevStepUpdate) {\n newStepsState[stepIndex - 1] = stepStates.active;\n }\n\n setStepsState(newStepsState);\n dispatch(setField('stepState', newStepsState));\n };\n\n const openStep = (stepNumber, nextStepUpdate, prevStepUpdate, isLastStepFilled) => {\n const currentStepState = stepsState[stepNumber];\n let newState;\n\n //const isLastStepFilled = (stepNumber === 4) && summaryWithBanksOpened && currentStepState === stepStates.active;\n\n if (nextStepUpdate || currentStepState === stepStates.active || isLastStepFilled) {\n newState = stepStates.filled;\n } else if (currentStepState === stepStates.active) {\n newState = stepStates.closed;\n } else {\n newState = stepStates.active;\n }\n\n changeStepState(stepNumber, newState, nextStepUpdate, prevStepUpdate);\n };\n\n const clearState = () => {\n window.localStorage.removeItem(`state.${getCalculatorType()}`);\n setStepsState(defaultStepsState);\n dispatch({\n type: RESET_STEPS,\n stepState: [],\n });\n };\n\n return (\n
\n
\n\n \n \n \n \n\n
\n \n {summaryWithBanksOpened && (\n \n )}\n {!summaryWithBanksOpened && (\n \n\n \n )}\n
\n
\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import {\n SET_FIELD,\n CALCULATE,\n CALCULATE_INCOME,\n GET_BANK_BY_ID,\n CALCULATE_YEARLY_INCOME,\n CALCULATE_YEARLY_INCOME_INDEPENDENT,\n GET_MORTGAGE_PROVIDER,\n SHARE_PDF,\n RESET_STEPS,\n SET_OTHER_BANK,\n} from \"../actionTypes/calculatorActionTypes\";\nimport {getInitialState} from \"../../services/stateHelper\";\n\nexport const initialState = getInitialState();\n\nconst calculatorReducer = (state = initialState, action) => {\n switch (action.type) {\n case SET_FIELD:\n return {\n ...state,\n [action.field]: action.value,\n };\n\n case CALCULATE:\n return {\n ...state,\n response: {\n ...state.response,\n ...action.response\n }\n };\n\n case SHARE_PDF:\n return {\n ...state,\n sharePdf: {\n ...state.sharePdf,\n ...action.response\n },\n };\n\n case CALCULATE_YEARLY_INCOME:\n return {\n ...state,\n [action.field]: action.response.yearlyIncome,\n };\n\n case CALCULATE_YEARLY_INCOME_INDEPENDENT:\n const yearlyIncomeIndependent = parseFloat(action.response.it);\n\n return {\n ...state,\n [action.field]:\n yearlyIncomeIndependent % 1 !== 0\n ? yearlyIncomeIndependent.toFixed(2)\n : yearlyIncomeIndependent,\n };\n\n case CALCULATE_INCOME:\n return {\n ...state,\n Interest: (state.SelectedMortgageProvider) ? state.SelectedMortgageProvider.rentestand : action.response.interest,\n response: {\n ...state.response,\n ...action.response,\n //BrutoMaandlasten: action?.response?.MonthlyCosts?.GrossMonthlyCosts,\n },\n };\n\n case GET_MORTGAGE_PROVIDER:\n\n return {\n ...state,\n Interest: action.response.rentestand,\n RentevastePeriode: action.response.rentevastePeriode,\n MortgageType: action.response.hypotheekVorm,\n SelectedMortgageProvider: (typeof state.SelectedMortgageProvider === \"object\") ? {...state.SelectedMortgageProvider, ...action.response } : action.response\n };\n\n case GET_BANK_BY_ID:\n\n return {\n ...state,\n InterestBestDeal: action.bankData.mainBank.rentestand,\n bankData: action.bankData,\n };\n\n case RESET_STEPS:\n return {\n ...getInitialState()\n };\n case SET_OTHER_BANK:\n\n // remove or add check action.action\n if (action.action === \"add\") {\n state.bankData.otherBanks.push(action.bank);\n } else {\n state.bankData.otherBanks = state.bankData.otherBanks.filter((bank) => bank.lookupId !== action.bank.lookupId)\n }\n const bankData = state.bankData;\n\n return {\n ...state,\n bankData: bankData\n };\n\n\n\n default:\n return state;\n }\n};\n\nexport default calculatorReducer;\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport {createStore, combineReducers, applyMiddleware} from 'redux';\nimport {Provider} from 'react-redux';\nimport ReduxThunk from 'redux-thunk';\nimport { composeWithDevTools } from 'redux-devtools-extension';\n\nimport App from './components/App';\nimport * as serviceWorker from './serviceWorker';\nimport './scss/main.scss';\nimport calculatorReducer from './store/reducers/calculatorReducer';\nimport {IntlProvider} from 'react-intl'\nimport {parseSearchQuery} from \"./store/actions/calculatorActions\";\n\nfunction loadLocaleData(locale) {\n switch (locale) {\n case 'en':\n return import('./compiled-lang/en.json')\n case 'nl':\n return import('./compiled-lang/nl.json')\n default:\n return import('./compiled-lang/nl.json')\n }\n}\n\n// npm run extract -- 'src/**/*.js*' --ignore='**/*.d.js' --out-file lang/nl.json --id-interpolation-pattern '[sha512:contenthash:base64:6]'\n\n\nconst rootReducer = combineReducers({\n calculator: calculatorReducer\n});\n\nexport const store = createStore(rootReducer, composeWithDevTools(\n applyMiddleware(ReduxThunk),\n));\n\nasync function init() {\n\n const requestParams = parseSearchQuery(window.location.search, true);\n\n const locale = requestParams?.lang ? requestParams?.lang : window.location.pathname.includes('/en/') ? 'en' : 'nl';\n const messages = await loadLocaleData(locale)\n\n ReactDOM.render(\n \n \n \n \n \n \n ,\n document.getElementById('root')\n );\n\n}\n\ninit();\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}