{"version":3,"file":"veilederBetalingskalkulator-FLgrtMxt.js","sources":["../../../Features/VeilederBetalingskalkulator/Components/SliderComponent.tsx","../../../Features/VeilederBetalingskalkulator/Models/Ids.ts","../../../Features/VeilederBetalingskalkulator/Store/Valg/Types.ts","../../../Features/VeilederBetalingskalkulator/Store/Resultat/Types.ts","../../../Features/VeilederBetalingskalkulator/Store/Resultat/Actions.ts","../../../Features/VeilederBetalingskalkulator/Store/Valg/Actions.ts","../../../Features/VeilederBetalingskalkulator/Components/ResultatComponent.tsx","../../../Features/VeilederBetalingskalkulator/Components/NedbetalingstidComponent.tsx","../../../Features/VeilederBetalingskalkulator/App.tsx","../../../Features/VeilederBetalingskalkulator/Store/Resultat/Reducers.ts","../../../Features/VeilederBetalingskalkulator/Store/Valg/Reducers.ts","../../../Features/VeilederBetalingskalkulator/Store/index.ts","../../../Features/VeilederBetalingskalkulator/index.tsx"],"sourcesContent":["import React, {useState} from 'react';\r\nimport Valg from '../../Shared/Scripts/Models/Valg';\r\n\r\ninterface SliderOwnProps {\r\n id: string,\r\n collapsed: boolean,\r\n valg: Valg | undefined,\r\n label: JSX.Element | null,\r\n locale: string,\r\n value: string | undefined,\r\n maxInput: number,\r\n minSlider: number,\r\n minAllowInput: string,\r\n posibleToSetZero: boolean,\r\n formatNumber: boolean,\r\n maxSlider: number,\r\n sliderStep: number,\r\n valuta?: string | null,\r\n onChangeHandler: any,\r\n useDecimal: boolean\r\n}\r\n\r\nexport function SliderComponent (props: SliderOwnProps): JSX.Element {\r\n const [belop, setBelop] = useState(props.value);\r\n\r\n function dispatch(value: string): void {\r\n let valg: Valg = { id: '', displayValue: value, value: value }\r\n props.onChangeHandler(valg);\r\n }\r\n\r\n function inputHandler(e: React.SyntheticEvent): void {\r\n\r\n if(props.useDecimal) {\r\n\r\n //kun tall, komma og punktum som er lov.\r\n let tmpParsed: string = e.currentTarget.value.replace(/[^0-9.,]/g, ''); \r\n //bytter ut alle komma med punktum. \r\n let stringVal: string = tmpParsed.replace(/,/g, '.'); \r\n\r\n if(stringVal === \"\") {\r\n setBelop(\"\");\r\n dispatch(\"\");\r\n return;\r\n }\r\n\r\n //sjekker om siste bokstav er en punktum og sjekker om det er eneste punktumen i stringen.\r\n if(stringVal.slice(-1) === \".\" && stringVal.split(\".\").length - 1 === 1) {\r\n setBelop(stringVal);\r\n dispatch(stringVal);\r\n return;\r\n }\r\n\r\n //omgjør stringen til en float med maks 3 desimaler.\r\n let val: number = parseFloat( parseFloat(stringVal).toFixed(3));\r\n if(val <= props.maxInput) {\r\n setBelop(val.toString());\r\n dispatch(val.toString());\r\n }\r\n } else {\r\n let stringVal: string = e.currentTarget.value.replace(/[^0-9]/g,''); \r\n let val: number = 0;\r\n \r\n if(stringVal === \"\") {\r\n setBelop(\"\");\r\n dispatch(\"\");\r\n return;\r\n }\r\n \r\n val = parseInt(stringVal.replace(/\\s/g,''));\r\n \r\n if(val <= props.maxInput) {\r\n if(val === 0 && !props.posibleToSetZero) {\r\n setBelop(props.minAllowInput);\r\n dispatch(props.minAllowInput);\r\n } else {\r\n setBelop(stringVal.replace(/\\s/g,''));\r\n dispatch(stringVal.replace(/\\s/g,''));\r\n }\r\n }\r\n }\r\n }\r\n\r\n function formatNumber(tall: any): string {\r\n if(!props.formatNumber)\r\n return tall;\r\n\r\n let tallSomString: string = tall.toString();\r\n\r\n if(props.locale === 'en-US') {\r\n tallSomString = tallSomString.replace(/(?!^)(?=(?:\\d{3})+(?:\\.|$))/gm, ',');\r\n } else {\r\n tallSomString = tallSomString.replace(/(?!^)(?=(?:\\d{3})+(?:\\.|$))/gm, ' ');\r\n }\r\n return tallSomString;\r\n }\r\n\r\n \r\n function rangeHandler(e: React.SyntheticEvent) {\r\n if(e.currentTarget.value === \"0\" && !props.posibleToSetZero) {\r\n setBelop(props.minAllowInput);\r\n dispatch(props.minAllowInput);\r\n } else {\r\n setBelop(e.currentTarget.value);\r\n dispatch(e.currentTarget.value);\r\n }\r\n }\r\n\r\n return (\r\n\r\n
\r\n \r\n
\r\n
\r\n {}} className={\"c-number-input__input \"} type=\"text\" />\r\n
\r\n {props.valuta}\r\n
\r\n
\r\n
\r\n \r\n
\r\n    \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","export const AppContainerId = 'veilederBetalingskalkulator';","import Valg from '../../../Shared/Scripts/Models/Valg';\r\n\r\nexport interface ValgState {\r\n lanebelop?: Valg;\r\n rente?: Valg;\r\n nedbetalingstidAar?: number;\r\n nedbetalingstidMaaneder?: number;\r\n visHeleKalkulator: boolean;\r\n}\r\n\r\nexport const UPDATE_VALG = 'UPDATE_VALG';\r\n\r\ninterface UpdateValgAction {\r\n type: typeof UPDATE_VALG;\r\n payload: Partial;\r\n}\r\n\r\nexport type ValgStateActionTypes = UpdateValgAction;\r\n","export type ResultatValg = ResultatValgVisning;\r\n\r\nexport interface ResultatValgVisning {\r\n visBoksB: boolean;\r\n}\r\n\r\nexport const SET_VISNING = 'SET_VISNING';\r\n\r\nexport interface SetVisningAction {\r\n type: typeof SET_VISNING;\r\n payload: Partial;\r\n}\r\n\r\nexport type ResultatActionTypes = SetVisningAction;\r\n","import { SetVisningAction, SET_VISNING, ResultatValgVisning } from './Types';\r\n\r\nexport function setVisning(stegVisning: Partial): SetVisningAction {\r\n return {\r\n type: SET_VISNING,\r\n payload: stegVisning,\r\n };\r\n}\r\n","import {\r\n ValgStateActionTypes,\r\n ValgState,\r\n UPDATE_VALG,\r\n} from './Types';\r\n\r\nimport { ThunkAction, ThunkDispatch } from 'redux-thunk';\r\nimport { VeilederBetalingskalkulatorAppState } from '..';\r\nimport { AnyAction } from 'redux';\r\nimport { setVisning } from '../Resultat/Actions';\r\n\r\nexport function updateValg(newValg: Partial): ValgStateActionTypes {\r\n return {\r\n type: UPDATE_VALG,\r\n payload: newValg,\r\n };\r\n}\r\n\r\nexport const updateVisning = (): ThunkAction => {\r\n return (dispatch: ThunkDispatch, getState: () => VeilederBetalingskalkulatorAppState): void => {\r\n const currentState = getState();\r\n const visBoksB = visB(currentState);\r\n \r\n dispatch(\r\n setVisning({\r\n visBoksB,\r\n }),\r\n );\r\n };\r\n};\r\n\r\nconst visB = (state: VeilederBetalingskalkulatorAppState): boolean => {\r\n return false;\r\n};\r\n\r\n","import React, {useState, useEffect} from 'react';\r\nimport { EpiContext } from '../../Shared/Scripts/Store/EpiContext/Types';\r\nimport VeilederBetalingskalkulatorDto from '../Models/VeilederBetalingskalkulatorDto';\r\nimport contentResolver, { resolveRawText } from '../../Shared/Scripts/Utilities/EpiContentResolver';\r\nimport { updateLiveMessage } from '../../Shared/Scripts/Utilities/LiveMessage';\r\nimport { VeilederBetalingskalkulatorAppState } from '../Store';\r\nimport { connect } from 'react-redux';\r\nimport * as ValgTypes from '../Store/Valg/Types';\r\nimport { ArticleContentComponent } from '../../Shared/Scripts/Components/ArticleContentComponent';\r\nimport { ModalCompontent } from '../../Shared/Scripts/Components/ModalComponent';\r\n\r\ninterface SliderOwnProps {\r\n valg: ValgTypes.ValgState,\r\n locale: string,\r\n valuta?: string | null,\r\n}\r\n\r\ntype SliderProps = SliderOwnProps & MapStateToProps & {};\r\n\r\nconst ResultatComponent = (props: SliderProps): JSX.Element => {\r\n const { epiContext } = props;\r\n const [visModal, setVisModal] = useState(false);\r\n \r\n function hentRenterIProsent(renter: string | undefined): number {\r\n if(renter === undefined)\r\n return 0;\r\n\r\n let renterParsed: number = parseFloat(renter);\r\n return renterParsed / 100;\r\n }\r\n\r\n useEffect(() => {\r\n updateLiveMessage();\r\n }, []);\r\n\r\n function regnUtTotalKostnad(lanebelop: string | undefined, renter: string | undefined, antallMaaneder: number | undefined): number {\r\n if(antallMaaneder === undefined)\r\n return 0;\r\n\r\n let terminBelop: number = regnUtTerminBelop(lanebelop, renter, antallMaaneder);\r\n let nedbetalingstid: number = Math.floor(antallMaaneder); \r\n\r\n return terminBelop * nedbetalingstid;\r\n }\r\n\r\n function regnUtRenterIBetalingsPause(lanebelop: string | undefined, renter: string | undefined): number {\r\n if(lanebelop === undefined || renter === undefined)\r\n return 0;\r\n\r\n let lanebelopParsed: number = parseInt(lanebelop)\r\n let renterParsed: number = hentRenterIProsent(renter);\r\n\r\n if(renterParsed === 0)\r\n renterParsed = 0.0001;\r\n\r\n return (lanebelopParsed*Math.pow((1+(renterParsed/12)), 7))-lanebelopParsed;\r\n }\r\n\r\n function regnUtTerminBelop(lanebelop: string | undefined, renter: string | undefined, antallMaaneder: number): number {\r\n if(lanebelop === undefined || renter === undefined)\r\n return 0;\r\n\r\n let lanebelopParsed: number = parseInt(lanebelop);\r\n let renterParsed: number = hentRenterIProsent(renter);\r\n let nedbetalingstid: number = Math.floor(antallMaaneder); \r\n \r\n if(nedbetalingstid === 0)\r\n nedbetalingstid = 1;\r\n\r\n if(renterParsed === 0) \r\n renterParsed = 0.0001;\r\n\r\n let utregning: number = (((renterParsed/12)*(Math.pow(1+(renterParsed/12),nedbetalingstid))) / ((Math.pow(1+(renterParsed/12),nedbetalingstid))-1)) * (lanebelopParsed + regnUtRenterIBetalingsPause(lanebelop, renter));\r\n\r\n if(isNaN(utregning) || utregning === Infinity)\r\n return 0;\r\n\r\n return utregning;\r\n }\r\n\r\n function formatNumber(tall: any, locale: string): string {\r\n let tallSomString: string = tall.toString();\r\n\r\n if(locale === 'en-US') {\r\n tallSomString = tallSomString.replace(/(?!^)(?=(?:\\d{3})+(?:\\.|$))/gm, ',');\r\n } else {\r\n tallSomString = tallSomString.replace(/(?!^)(?=(?:\\d{3})+(?:\\.|$))/gm, ' ');\r\n }\r\n return tallSomString;\r\n }\r\n\r\n function hentTerminBelop(): number {\r\n if(props.valg.nedbetalingstidMaaneder === undefined)\r\n return 0;\r\n\r\n return Math.round(regnUtTerminBelop(props.valg.lanebelop?.value, props.valg.rente?.value, props.valg.nedbetalingstidMaaneder));\r\n }\r\n\r\n function erTerminBelop0(): boolean {\r\n if(hentTerminBelop() === 0)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n function antallTerminerErUnderEttAar(): boolean {\r\n if(props.valg.nedbetalingstidMaaneder === undefined)\r\n return false;\r\n\r\n let antallTerminer = Math.round(props.valg.nedbetalingstidMaaneder) + 7;\r\n \r\n if(antallTerminer < 12)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n function hentHjelpetekst(): keyof VeilederBetalingskalkulatorDto {\r\n if(erTerminBelop0()) {\r\n return 'tekstForResultat0'\r\n } else if(antallTerminerErUnderEttAar()) {\r\n return 'tekstForAntallTerminer'\r\n } else {\r\n return 'resultatTerminOverskrift'\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

{contentResolver(epiContext, 'resultatOverskrift')}

\r\n
\r\n
\r\n
\r\n {formatNumber(hentTerminBelop(), props.locale)} \r\n  {props.valuta}\r\n
\r\n

{contentResolver(epiContext, hentHjelpetekst())}

\r\n
\r\n {contentResolver(epiContext, 'resultatTotalOverskrift')} \r\n {formatNumber(Math.round(regnUtTotalKostnad(props.valg.lanebelop?.value, props.valg.rente?.value, props.valg.nedbetalingstidMaaneder)), props.locale)} {props.valuta}\r\n
\r\n
\r\n \r\n setVisModal(false)}\r\n ariaCloseText={resolveRawText(epiContext, 'modalLukkTekst')}\r\n >\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\ninterface MapStateToProps {\r\n epiContext: EpiContext;\r\n}\r\n\r\nexport default connect(\r\n (state: VeilederBetalingskalkulatorAppState): MapStateToProps => {\r\n return {\r\n epiContext: state.epiContext,\r\n };\r\n },\r\n)(ResultatComponent);\r\n","import React, { useState, useEffect } from 'react';\r\nimport Valg from '../../Shared/Scripts/Models/Valg';\r\nimport { updateLiveMessage } from '../../Shared/Scripts/Utilities/LiveMessage';\r\n\r\ninterface NedbetalingstidOwnProps {\r\n id: string,\r\n collapsed: boolean,\r\n label: JSX.Element | null,\r\n locale: string,\r\n value: string | undefined,\r\n maxInput: number,\r\n minSlider: number,\r\n minAllowInput: string,\r\n posibleToSetZero: boolean,\r\n formatNumber: boolean,\r\n maxSlider: number,\r\n sliderStep: number,\r\n valuta?: string | null,\r\n onChangeHandler: any,\r\n aarUnder1Melding: JSX.Element | null\r\n}\r\n\r\nexport function NedbetalingstidComponent (props: NedbetalingstidOwnProps): JSX.Element {\r\n const [belop, setBelop] = useState(props.value);\r\n \r\n useEffect(() => {\r\n updateLiveMessage();\r\n }, []);\r\n\r\n if(props.value !== undefined && belop !== undefined) {\r\n if(belop !== \"\" && parseInt(belop) !== parseInt(props.value)) {\r\n setBelop(props.value);\r\n }\r\n }\r\n\r\n function dispatch(value: string): void {\r\n let valg: number = parseInt(value);\r\n props.onChangeHandler(valg);\r\n }\r\n\r\n function inputHandler(e: React.SyntheticEvent): void {\r\n\r\n //kun tall er lov, fjerner alt annet. \r\n let stringVal: string = e.currentTarget.value.replace(/[^0-9]/g,''); \r\n let val: number = 0;\r\n\r\n if(stringVal === \"\") {\r\n setBelop(\"\");\r\n return;\r\n }\r\n\r\n val = parseInt(stringVal.replace(/\\s/g,''));\r\n\r\n if(val <= props.maxInput) {\r\n if(val === 0 && !props.posibleToSetZero) {\r\n setBelop(props.minAllowInput);\r\n dispatch(props.minAllowInput);\r\n } else {\r\n setBelop(stringVal.replace(/\\s/g,''));\r\n dispatch(stringVal.replace(/\\s/g,''));\r\n }\r\n }\r\n }\r\n\r\n function rangeHandler(e: React.SyntheticEvent) {\r\n if(e.currentTarget.value === \"0\" && !props.posibleToSetZero) {\r\n setBelop(props.minAllowInput);\r\n dispatch(props.minAllowInput);\r\n } else {\r\n setBelop(e.currentTarget.value);\r\n dispatch(e.currentTarget.value);\r\n }\r\n }\r\n\r\n function hentMeldingOmNedbetalingUnder1Aar(): JSX.Element | null {\r\n if(props.maxSlider === 0) {\r\n return
{props.aarUnder1Melding}
\r\n }\r\n return null;\r\n }\r\n\r\n return (\r\n\r\n
\r\n \r\n
\r\n
\r\n {}} className={\"c-number-input__input \"} type=\"text\" />\r\n
\r\n {props.valuta}\r\n
\r\n
\r\n
\r\n \r\n
\r\n    \r\n
\r\n
\r\n {hentMeldingOmNedbetalingUnder1Aar()}\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport ReactModal from 'react-modal';\r\nimport { connect } from 'react-redux';\r\nimport { ThunkDispatch } from 'redux-thunk';\r\nimport { AnyAction } from 'redux';\r\n\r\nimport { EpiContext } from '../Shared/Scripts/Store/EpiContext/Types';\r\nimport { FeilmeldingComponent } from '../Shared/Scripts/Components/FeilmeldingComponent';\r\nimport contentResolver from '../Shared/Scripts/Utilities/EpiContentResolver';\r\nimport Valg from '../Shared/Scripts/Models/Valg';\r\nimport {SliderComponent} from './Components/SliderComponent';\r\n\r\nimport VeilederBetalingskalkulatorDto from './Models/VeilederBetalingskalkulatorDto';\r\nimport { VeilederBetalingskalkulatorAppState } from './Store';\r\nimport * as Ids from './Models/Ids';\r\nimport * as ValgTypes from './Store/Valg/Types';\r\nimport { updateValg, updateVisning } from './Store/Valg/Actions';\r\nimport { ResultatValg } from './Store/Resultat/Types';\r\nimport ResultatComponent from './Components/ResultatComponent';\r\nimport {NedbetalingstidComponent} from './Components/NedbetalingstidComponent';\r\nimport SiteImproveHandler, { SiteImproveState, SiteImproveEvents, SiteImproveKategorier } from '../Shared/Scripts/Utilities/SiteImproveEventsHandler';\r\n\r\ninterface AppOwnProps {}\r\n\r\ntype AppProps = AppOwnProps & MapStateToProps & MapDispatchToProps;\r\n\r\nReactModal.setAppElement(document.getElementById(Ids.AppContainerId) as HTMLElement);\r\n\r\ninterface AppState {\r\n collapsed: boolean\r\n}\r\n\r\nexport class App extends React.Component {\r\n constructor(props: AppProps) {\r\n super(props);\r\n this.state = {collapsed: true}\r\n }\r\n\r\n render(): JSX.Element {\r\n const { valg, dispatchUpdateValg, epiContext } = this.props;\r\n const { epiModel, locale, valuta } = this.props.epiContext;\r\n let self = this;\r\n\r\n if (epiContext.epiModelFeilet) {\r\n return ;\r\n }\r\n\r\n function hentBreddeKlasse(): string {\r\n if(epiModel?.bredde === undefined || epiModel.bredde.value === \"\") {\r\n return \"c-veileder c-veileder--mini\";\r\n }\r\n return \"c-veileder \" + epiModel.bredde.value;\r\n }\r\n\r\n function visKalkulator(e: React.SyntheticEvent): void {\r\n e.preventDefault();\r\n document.getElementById(\"c-veileder-betkalk-boks1-input\")?.focus();\r\n\r\n if(valg.visHeleKalkulator) {\r\n dispatchUpdateValg({visHeleKalkulator: false});\r\n setDefaultValues();\r\n self.setState({collapsed: true});\r\n }\r\n else {\r\n dispatchUpdateValg({visHeleKalkulator: true});\r\n setDefaultValues();\r\n self.setState({collapsed: false});\r\n } \r\n }\r\n\r\n function setDefaultValues() {\r\n if(valg.lanebelop === undefined) {\r\n if(epiModel?.defaultLaneBelop !== undefined) {\r\n let value: string = epiModel?.defaultLaneBelop?.value;\r\n let belop: Valg = { id: '', displayValue: value, value: value } \r\n dispatchUpdateValg({lanebelop: belop});\r\n }\r\n }\r\n\r\n if(valg.rente === undefined) {\r\n if(epiModel?.satsFlytendeRente !== undefined) {\r\n let value: string = epiModel?.satsFlytendeRente?.value;\r\n let rente: Valg = { id: '', displayValue: value, value: value } \r\n dispatchUpdateValg({rente: rente});\r\n }\r\n }\r\n\r\n if(valg.nedbetalingstidAar === undefined) {\r\n if(epiModel?.defaultAntallAar !== undefined) {\r\n let value: number = parseInt(epiModel?.defaultAntallAar?.value);\r\n let nedbetalingstid: number = value;\r\n dispatchUpdateValg({nedbetalingstidAar: nedbetalingstid});\r\n }\r\n }\r\n\r\n if(valg.nedbetalingstidMaaneder === undefined) {\r\n if(epiModel?.defaultAntallAar !== undefined) {\r\n let value: number = parseInt(epiModel?.defaultAntallAar?.value);\r\n let nedbetalingstid: number = (value * 12) - 7;\r\n dispatchUpdateValg({nedbetalingstidMaaneder: nedbetalingstid});\r\n }\r\n }\r\n }\r\n\r\n function hentEkspandertCss() {\r\n if(valg.visHeleKalkulator)\r\n return \"c-veileder--mini-ekspandert\";\r\n else \r\n return \"\";\r\n }\r\n\r\n function hentLenker() {\r\n let lenker: JSX.Element[] = [];\r\n if(epiModel?.lenker !== undefined)\r\n {\r\n for(let i = 0;i\r\n \r\n {epiModel?.lenker.value[i].text}\r\n \r\n \r\n\r\n lenker.push(lenke);\r\n }\r\n }\r\n return lenker;\r\n }\r\n\r\n function hentBunnPanel(): JSX.Element | null {\r\n \r\n if(epiModel?.lenker !== undefined && epiModel?.lenker?.value?.length > 0 ) {\r\n return
\r\n
\r\n

{contentResolver(epiContext, 'lenkerOverskrift')}

\r\n
    \r\n {hentLenker()}\r\n
\r\n
\r\n
\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function hentGulSirkel(): JSX.Element | null {\r\n if(epiModel?.boks1GulSirkel === undefined || epiModel?.boks1GulSirkel.value === undefined || epiModel?.boks1GulSirkel.value === \"\")\r\n return null;\r\n\r\n return
{contentResolver(epiContext, 'boks1GulSirkel')}
;\r\n }\r\n\r\n function hentMaksNedtbetlingstid(tmpLanebelop: string | null = null): number {\r\n\r\n let lanebelop: number | undefined = undefined;\r\n\r\n if(valg.lanebelop !== undefined) {\r\n lanebelop = parseInt(valg.lanebelop.value);\r\n }\r\n\r\n if(tmpLanebelop !== null)\r\n lanebelop = parseInt(tmpLanebelop);\r\n\r\n if(lanebelop !== undefined) {\r\n\r\n let avdragsFrihet: number = 7;//fallback\r\n if(epiModel?.defaultAvdragsfrihet !== undefined && epiModel?.defaultAvdragsfrihet.value !== \"\") {\r\n avdragsFrihet = parseInt(epiModel?.defaultAvdragsfrihet.value);\r\n }\r\n\r\n let terskelverdi: number = 261000;//fallback\r\n if(epiModel?.terskelverdi20ar !== undefined && epiModel?.terskelverdi20ar.value !== \"\") {\r\n terskelverdi = parseInt(epiModel?.terskelverdi20ar.value);\r\n }\r\n\r\n let nedbetAntallAar: number = 20;//fallback\r\n if(epiModel?.defaultAntallAar !== undefined && epiModel?.defaultAntallAar.value !== \"\") {\r\n nedbetAntallAar = parseInt(epiModel?.defaultAntallAar.value);\r\n }\r\n\r\n if(isNaN(lanebelop)) {\r\n return (nedbetAntallAar * 12) - 7;\r\n }\r\n \r\n\r\n if(lanebelop >= terskelverdi) { \r\n return (nedbetAntallAar * 12) - 7;\r\n } else {\r\n let antallManeder: number = (lanebelop/terskelverdi)*((nedbetAntallAar*12)-avdragsFrihet) \r\n return antallManeder;\r\n }\r\n }\r\n\r\n return 233;\r\n }\r\n\r\n function hentMaksNedtbetlingstidAar(antallMaaneder: number): number {\r\n\r\n let antallAar: number = (antallMaaneder + 7) / 12;\r\n if(antallAar < 1) {\r\n return 1;\r\n }\r\n \r\n return Math.round(antallAar);\r\n }\r\n\r\n function registerSiteImproveEvents(): void {\r\n if(!SiteImproveState.Startet) {\r\n if(valg.visHeleKalkulator) {\r\n //veileder påstartet\r\n SiteImproveState.Startet = true;\r\n SiteImproveHandler.registerSiteImproveEvent(SiteImproveKategorier.Veileder, SiteImproveEvents.Klikk, \"Vis betalingskalkulator\");\r\n }\r\n }\r\n }\r\n\r\n if (epiModel != null) {\r\n registerSiteImproveEvents();\r\n return (\r\n
\r\n
\r\n {hentGulSirkel()}\r\n
\r\n

{contentResolver(epiContext, 'boks1Overskrift')}

\r\n
\r\n
\r\n ): void => {\r\n //vi sender med beløpet til utretningen for tid siden beløpet ikke er satt i valg enda. det gjøres nedenfor.\r\n let nedbetMaaneder: number = hentMaksNedtbetlingstid(belop.value);\r\n if (nedbetMaaneder === 0 || isNaN(nedbetMaaneder)) {\r\n nedbetMaaneder = 1;\r\n }\r\n\r\n let nedbetAar: number = hentMaksNedtbetlingstidAar(nedbetMaaneder);\r\n dispatchUpdateValg({\r\n lanebelop: belop,\r\n nedbetalingstidAar: nedbetAar,\r\n nedbetalingstidMaaneder: nedbetMaaneder,\r\n });\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n ): void => {\r\n dispatchUpdateValg({ rente: rente });\r\n }}\r\n />\r\n
\r\n
\r\n {\r\n dispatchUpdateValg({\r\n nedbetalingstidAar: nedbetalingstid,\r\n nedbetalingstidMaaneder: nedbetalingstid * 12 - 7,\r\n });\r\n }}\r\n aarUnder1Melding={contentResolver(epiContext, 'boks1AarUnder1')}\r\n />\r\n
\r\n
\r\n
\r\n {valg.visHeleKalkulator && (\r\n
\r\n \r\n {hentBunnPanel()}\r\n
\r\n )}\r\n
\r\n \r\n {contentResolver(\r\n epiContext,\r\n this.state.collapsed ? 'visKalkulatorTekst' : 'skjulKalkulatorTekst',\r\n )}\r\n \r\n
\r\n
\r\n );\r\n } else {\r\n return
Laster...
;\r\n }\r\n }\r\n}\r\n\r\ninterface MapStateToProps {\r\n valg: ValgTypes.ValgState;\r\n epiContext: EpiContext;\r\n resultat: ResultatValg;\r\n}\r\n\r\ninterface MapDispatchToProps {\r\n dispatchUpdateValg: (newValg: Partial) => void;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch): MapDispatchToProps => ({\r\n dispatchUpdateValg: (newValg: Partial): void => {\r\n dispatch(updateValg(newValg));\r\n dispatch(updateVisning());\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state: VeilederBetalingskalkulatorAppState): MapStateToProps => ({\r\n valg: state.valg,\r\n epiContext: state.epiContext,\r\n resultat: state.resultat,\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(App);\r\n","import { ResultatValg, SET_VISNING, ResultatActionTypes } from './Types';\r\nimport { ValgStateActionTypes } from '../Valg/Types';\r\n\r\nconst initialState: ResultatValg = {\r\n visBoksB: false,\r\n};\r\n\r\nexport function resultatReducer(\r\n state: ResultatValg = initialState,\r\n action: ValgStateActionTypes | ResultatActionTypes,\r\n): ResultatValg {\r\n switch (action.type) {\r\n case SET_VISNING: {\r\n return {\r\n ...state,\r\n ...action.payload,\r\n };\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { ValgStateActionTypes, ValgState, UPDATE_VALG } from './Types';\r\n\r\nexport const initialState: ValgState = {\r\n lanebelop: undefined,\r\n rente: undefined,\r\n nedbetalingstidAar: undefined,\r\n nedbetalingstidMaaneder: undefined,\r\n visHeleKalkulator: false,\r\n};\r\n\r\nexport function valgReducer(state: ValgState = initialState, action: ValgStateActionTypes): ValgState {\r\n const newState = getNewState();\r\n return newState;\r\n\r\n function getNewState(): ValgState {\r\n switch (action.type) {\r\n case UPDATE_VALG: {\r\n \r\n return {\r\n ...state,\r\n ...action.payload,\r\n };\r\n }\r\n default:\r\n return state;\r\n }\r\n }\r\n}\r\n","import ReduxThunk from 'redux-thunk';\r\nimport { createStore, combineReducers, Store, applyMiddleware } from 'redux';\r\nimport VeilederBetalingskalkulatorDto from '../Models/VeilederBetalingskalkulatorDto';\r\nimport { epiContextReducer } from '../../Shared/Scripts/Store/EpiContext/Reducers';\r\nimport { resultatReducer } from './Resultat/Reducers';\r\nimport { EpiContext, UpdateEpiContextActionTypes } from '../../Shared/Scripts/Store/EpiContext/Types';\r\nimport { stegVisningReducer } from '../../Shared/Scripts/Store/StegVisning/Reducers';\r\nimport { EpiAppStateMedSteg } from '../../Shared/Scripts/Store/Types';\r\nimport { valgReducer } from './Valg/Reducers';\r\n\r\nconst rootReducer = combineReducers({\r\n valg: valgReducer,\r\n resultat: resultatReducer,\r\n epiContext: (\r\n state: EpiContext | undefined,\r\n action: UpdateEpiContextActionTypes,\r\n ): EpiContext => epiContextReducer(state, action),\r\n stegVisning: stegVisningReducer,\r\n});\r\n\r\nexport type VeilederBetalingskalkulatorAppState = EpiAppStateMedSteg & {\r\n valg: ReturnType;\r\n resultat: ReturnType;\r\n};\r\n\r\nexport default function configureStore(): Store {\r\n return createStore(rootReducer, applyMiddleware(ReduxThunk));\r\n}\r\n","import React from 'react';\r\nimport { createRoot } from 'react-dom/client';\r\nimport { Provider } from 'react-redux';\r\nimport App from './App';\r\nimport configureStore from './Store';\r\nimport InitEpiMessages from '../Shared/Scripts/Utilities/EpiMessages';\r\nimport { updateLanguage } from '../Shared/Scripts/Store/EpiContext/Actions';\r\nimport { epiResolveLanguage } from '../Shared/Scripts/Utilities/EpiResolveLanguage';\r\nimport { AppContainerId } from './Models/Ids';\r\n\r\nconst store = configureStore();\r\nstore.dispatch(updateLanguage(epiResolveLanguage()));\r\n\r\nconst container = document.getElementById(AppContainerId);\r\n\r\nif (container != null) {\r\n const root = createRoot(container!);\r\n const contentLink = container.attributes['data-content'].value as string;\r\n InitEpiMessages(store, contentLink);\r\n\r\n const AppRoot = (): JSX.Element => (\r\n \r\n \r\n \r\n );\r\n\r\n root.render();\r\n}\r\n"],"names":["useState","jsxs","jsx","useEffect","contentResolver","Ids.AppContainerId","ResultatComponent","initialState","ReduxThunk","createRoot","App"],"mappings":"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"}