diff --git a/src/AvtaleSide/steg/BeregningTilskudd/visningTilskuddsperioder/VisningTilskuddsperioderTabellVtao.tsx b/src/AvtaleSide/steg/BeregningTilskudd/visningTilskuddsperioder/VisningTilskuddsperioderTabellVtao.tsx index cedb5fb7..a37320e2 100644 --- a/src/AvtaleSide/steg/BeregningTilskudd/visningTilskuddsperioder/VisningTilskuddsperioderTabellVtao.tsx +++ b/src/AvtaleSide/steg/BeregningTilskudd/visningTilskuddsperioder/VisningTilskuddsperioderTabellVtao.tsx @@ -1,14 +1,14 @@ -import React, { useContext, useEffect, useState } from 'react'; +import React, { useContext, useState } from 'react'; import { BodyShort, Label } from '@navikt/ds-react'; import { TilskuddsPeriode } from '@/types/avtale'; -import { formatterDato, NORSK_DATO_FORMAT } from '@/utils/datoUtils'; +import { formaterDatoNy, formaterPeriodeNy, NORSK_DATO_FORMAT_NY } from '@/utils/datoUtils'; import EtikettStatus from '@/BeslutterSide/EtikettStatus'; import { formaterPenger } from '@/utils/PengeUtils'; import InfoRundtTilskuddsperioder from '@/AvtaleSide/steg/BeregningTilskudd/visningTilskuddsperioder/InfoRundtTilskuddsperioder'; import BEMHelper from '@/utils/bem'; import { InnloggetBrukerContext } from '@/InnloggingBoundary/InnloggingBoundary'; import { AvtaleContext } from '@/AvtaleProvider'; -import moment from 'moment'; +import { getYear, addDays } from 'date-fns'; import { antallAktiveTilskuddsperioder, getIndexVisningForTilskuddsperiode, @@ -18,17 +18,62 @@ interface Properties { className: string; } +const tilskuddsperiodeRad = ({ + key, + cls, + avtaleOpprettet, + erNavAnsatt, + periode, +}: { + key?: number; + cls: any; + avtaleOpprettet: Date; + erNavAnsatt: boolean; + periode: TilskuddsPeriode; +}) => { + const periodeAar = getYear(new Date(periode.startDato)); + // Hvis tilskuddsperioden gjelder for et tidligere år enn når avtalen er opprettet, + // så vil vi vise en liten notis om at VTAO-satsen er basert på et lavere beløp + const erITidligereAar = periodeAar < getYear(avtaleOpprettet); + return ( +
+
+ + {formaterPeriodeNy(periode.startDato, periode.sluttDato, NORSK_DATO_FORMAT_NY)} + + {erITidligereAar && ( + + Sats for {periodeAar} + + )} +
+ {erNavAnsatt && ( + + + + )} + + {periode.beløp !== null ? formaterPenger(periode.beløp) : '-'} + + + {formaterDatoNy(addDays(new Date(periode.sluttDato), 3).toString(), 'dd MMM yyyy')} + +
+ ); +}; + const VisningTilskuddsperioderTabellVtao: React.FC = ({ className }: Properties) => { const [visAllePerioder, setVisAllePerioder] = useState(false); const innloggetBruker = useContext(InnloggetBrukerContext); const { avtale } = useContext(AvtaleContext); const { startIndexVisning, sluttIndexVisning } = getIndexVisningForTilskuddsperiode(avtale, visAllePerioder); const cls = BEMHelper(className); - const sistePeriode = avtale.tilskuddPeriode.at(antallAktiveTilskuddsperioder(avtale) - 1); - const sistePeriodeAar = sistePeriode ? moment(sistePeriode?.startDato).year() : undefined; - const sistePeriodeErITidligereAar = sistePeriodeAar - ? sistePeriodeAar < moment(avtale.opprettetTidspunkt).year() - : false; + const sistePeriode = + antallAktiveTilskuddsperioder(avtale) - 1 > sluttIndexVisning + ? avtale.tilskuddPeriode.at(antallAktiveTilskuddsperioder(avtale) - 1) + : undefined; + const avtaleOpprettet = new Date(avtale.opprettetTidspunkt); + const erNavAnsatt = innloggetBruker.erNavAnsatt; return (
@@ -41,67 +86,21 @@ const VisningTilskuddsperioderTabellVtao: React.FC = ({ className }: {avtale.tilskuddPeriode .filter((p: TilskuddsPeriode) => p.aktiv) .slice(startIndexVisning, sluttIndexVisning) - .map((periode: TilskuddsPeriode, index: number) => { - const periodeAar = moment(periode.startDato).year(); - const erITidligereAar = periodeAar < moment(avtale.opprettetTidspunkt).year(); - return ( -
-
-
- - {formatterDato(periode.startDato, NORSK_DATO_FORMAT)} -{' '} - {formatterDato(periode.sluttDato, NORSK_DATO_FORMAT)} - - {erITidligereAar && ( - - Sats for {periodeAar} - - )} -
- {innloggetBruker.erNavAnsatt && ( - - - - )} - - {periode.beløp !== null ? formaterPenger(periode.beløp) : '-'} - - - {formatterDato(moment(periode.sluttDato).add(3, 'days').toString(), 'DD MMM YYYY')} - -
-
- ); + .map((periode: TilskuddsPeriode, key: number) => { + return tilskuddsperiodeRad({ + key, + periode, + avtaleOpprettet, + cls, + erNavAnsatt, + }); })} {!visAllePerioder && sistePeriode && (
...
-
-
- - {formatterDato(sistePeriode.startDato, NORSK_DATO_FORMAT)} -{' '} - {formatterDato(sistePeriode.sluttDato, NORSK_DATO_FORMAT)} - - {sistePeriodeErITidligereAar && ( - - Sats for {sistePeriodeAar} - - )} -
- {innloggetBruker.erNavAnsatt && ( - - - - )} - - {sistePeriode.beløp !== null ? formaterPenger(sistePeriode.beløp) : '-'} - - - {formatterDato(moment(sistePeriode.sluttDato).add(3, 'days').toString(), 'DD MMM YYYY')} - -
+ {tilskuddsperiodeRad({ cls, erNavAnsatt, avtaleOpprettet, periode: sistePeriode })}
)} { return moment().isSameOrBefore(dato, 'date'); @@ -31,9 +33,26 @@ export const accurateHumanize = (duration: moment.Duration, accuracy: number = 2 .join(', '); }; +/** + * @deprecated + */ export const NORSK_DATO_OG_TID_FORMAT = 'DD.MM.YYYY HH:mm'; +/** + * @deprecated + */ export const NORSK_DATO_FORMAT = 'DD.MM.YYYY'; +/** + * For bruk når man formaterer med date-fns (ikke moment) + */ +export const NORSK_DATO_FORMAT_NY = 'dd.MM.yyyy'; +/** + * Formater en dato gitt en formateringsstring. + * + * Bør fases ut til fordel for `formaterDatoNy` + * + * @deprecated + */ export const formatterDato = (dato: string, format: string = NORSK_DATO_OG_TID_FORMAT) => { try { if (dato === '-999999999-01-01') return ''; @@ -44,6 +63,37 @@ export const formatterDato = (dato: string, format: string = NORSK_DATO_OG_TID_F } }; +/** + * Formater en dato gitt en formateringsstring. + * + * Bruker date-fns, og ikke moment. + */ +export const formaterDatoNy = (dato: string, formatString: string = NORSK_DATO_OG_TID_FORMAT) => { + try { + if (dato === '-999999999-01-01') return ''; + const formatertDato = format(dato, formatString, { locale: nb }); + return !formatertDato.includes('NaN') ? formatertDato : dato; + } catch (e) { + return dato; + } +}; + +/** + * Formater en (tilskudds)periode gitt en formateringsstring. + * + * Bruker date-fns, og ikke moment. + */ +export const formaterPeriodeNy = (fra: string, til: string, format: string = NORSK_DATO_FORMAT) => { + return formaterDatoNy(fra, format) + ' – ' + formaterDatoNy(til, format); +}; + +/** + * Formater en (tilskudds)periode gitt en formateringsstring. + * + * Bør fases ut til fordel for `formaterPeriodeNy`. + * + * @deprecated + */ export const formatterPeriode = (fra: string, til: string, format: string = NORSK_DATO_FORMAT) => { return formatterDato(fra, format) + ' – ' + formatterDato(til, format); };