From 82fdd4f5a42ed08bc4dff917f12e4d61f42c61bb Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Thu, 13 Mar 2025 10:35:23 +0100 Subject: [PATCH 01/16] =?UTF-8?q?Legger=20til=20M=C3=A5ned=C3=85rVelger=20?= =?UTF-8?q?komponent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../M\303\245ned\303\205rVelger.tsx" | 121 ++++++++++++++++++ src/frontend/typer/sanity/tekstInnhold.ts | 5 + 2 files changed, 126 insertions(+) create mode 100644 "src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" diff --git "a/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" "b/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" new file mode 100644 index 000000000..0713da9a9 --- /dev/null +++ "b/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" @@ -0,0 +1,121 @@ +import React, { useState } from 'react'; + +import { formatISO, lastDayOfMonth } from 'date-fns'; + +import { MonthPicker, useMonthpicker } from '@navikt/ds-react'; +import type { Felt } from '@navikt/familie-skjema'; + +import { useApp } from '../../../context/AppContext'; +import { useSpråk } from '../../../context/SpråkContext'; +import { ISODateString } from '../../../typer/common'; +import { ESanitySteg } from '../../../typer/sanity/sanity'; + +interface MånedÅrVelgerProps { + tidligsteValgbareMåned?: Date; + senesteValgbareMåned?: Date; + label: React.ReactNode; + felt: Felt; + visFeilmeldinger?: boolean; + disabled?: boolean; + dagIMåneden: DagIMåneden; + kanIkkeVæreFortid?: boolean; + kanIkkeVæreFremtid?: boolean; +} + +/* TODO +- vurder å lagre som Date og gjøre parsing/format mot mellomlagring og innsending - i neste runde +*/ + +export enum Feilmelding { + FØR_MIN_DATO = 'FØR_MIN_DATO', + ETTER_MAKS_DATO = 'ETTER_MAKS_DATO', + UGYLDIG_DATO = 'UGYLDIG_DATO', + DATO_IKKE_I_FORTID = 'DATO_IKKE_I_FORTID', + DATO_IKKE_I_FREMTID = 'DATO_IKKE_I_FREMTID', +} + +export enum DagIMåneden { + FØRSTE_DAG = 'FØRSTE_DAG', + SISTE_DAG = 'SISTE_DAG', +} + +export const MånedÅrVelger: React.FC = ({ + tidligsteValgbareMåned, + senesteValgbareMåned, + label, + felt, + visFeilmeldinger = false, + disabled = false, + dagIMåneden = DagIMåneden.FØRSTE_DAG, + kanIkkeVæreFortid, + kanIkkeVæreFremtid, +}) => { + const { valgtLocale } = useSpråk(); + const { tekster, plainTekst } = useApp(); + const [error, setError] = useState(undefined); + const formateringsfeilmeldinger = tekster()[ESanitySteg.FELLES].formateringsfeilmeldinger; + + const nullstillOgSettFeilmelding = (feilmelding: Feilmelding) => { + if (error !== feilmelding) { + setError(feilmelding); + felt.nullstill(); + } + }; + + const feilmeldinger: Record = { + UGYLDIG_DATO: plainTekst(formateringsfeilmeldinger.ugyldigManed), + FØR_MIN_DATO: plainTekst(formateringsfeilmeldinger.datoErForForsteGyldigeTidspunkt), + ETTER_MAKS_DATO: plainTekst(formateringsfeilmeldinger.datoErEtterSisteGyldigeTidspunkt), + DATO_IKKE_I_FORTID: plainTekst(formateringsfeilmeldinger.datoKanIkkeVareIFortid), + DATO_IKKE_I_FREMTID: plainTekst(formateringsfeilmeldinger.datoKanIkkeVareIFremtid), + }; + + const { monthpickerProps, inputProps } = useMonthpicker({ + fromDate: tidligsteValgbareMåned, + toDate: senesteValgbareMåned, + locale: valgtLocale, + onMonthChange: (dato: Date | undefined): void => { + if (dato === undefined) { + felt.nullstill(); + } else { + if (dagIMåneden === DagIMåneden.FØRSTE_DAG) { + felt.validerOgSettFelt(formatISO(dato, { representation: 'date' })); + } else { + felt.validerOgSettFelt( + formatISO(lastDayOfMonth(dato), { representation: 'date' }) + ); + } + } + }, + onValidate: val => { + if (val.isBefore && kanIkkeVæreFortid) { + nullstillOgSettFeilmelding(Feilmelding.DATO_IKKE_I_FORTID); + } else if (val.isAfter && kanIkkeVæreFremtid) { + nullstillOgSettFeilmelding(Feilmelding.DATO_IKKE_I_FREMTID); + } else if (val.isBefore) { + nullstillOgSettFeilmelding(Feilmelding.FØR_MIN_DATO); + } else if (val.isAfter) { + nullstillOgSettFeilmelding(Feilmelding.ETTER_MAKS_DATO); + } else if (val.isEmpty || val.isDisabled || !val.isValidMonth) { + nullstillOgSettFeilmelding(Feilmelding.UGYLDIG_DATO); + } else { + setError(undefined); + } + }, + }); + + return ( + + + + ); +}; diff --git a/src/frontend/typer/sanity/tekstInnhold.ts b/src/frontend/typer/sanity/tekstInnhold.ts index 70b43e772..e93fbf79f 100644 --- a/src/frontend/typer/sanity/tekstInnhold.ts +++ b/src/frontend/typer/sanity/tekstInnhold.ts @@ -115,6 +115,11 @@ export interface IFormateringsfeilmeldingerTekstinnhold { periodeAvsluttesForTidlig: LocaleRecordString; datoKanIkkeVaereTilbakeITid: LocaleRecordString; datoKanIkkeVaere12MndTilbake: LocaleRecordString; + ugyldigManed: LocaleRecordString; + datoErForForsteGyldigeTidspunkt: LocaleRecordString; + datoErEtterSisteGyldigeTidspunkt: LocaleRecordString; + datoKanIkkeVareIFortid: LocaleRecordString; + datoKanIkkeVareIFremtid: LocaleRecordString; } export interface IModalerTekstinnhold { From 098a63e3f1956f6bbe1e424183bc28025089a53c Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Thu, 13 Mar 2025 13:41:32 +0100 Subject: [PATCH 02/16] =?UTF-8?q?Legger=20til=20bruk=20av=20M=C3=A5ned?= =?UTF-8?q?=C3=85rVelger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Arbeidsperiode/ArbeidsperiodeModal.tsx | 44 ++++++++++++++++--- src/frontend/utils/dato.tsx | 24 +++++++++- src/frontend/utils/visning.ts | 19 +++++++- 3 files changed, 78 insertions(+), 9 deletions(-) diff --git a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx index a8259e75f..a871128e4 100644 --- a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx +++ b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx @@ -6,15 +6,14 @@ import { useApp } from '../../../context/AppContext'; import { IArbeidsperiode } from '../../../typer/perioder'; import { PersonType } from '../../../typer/personType'; import { IArbeidsperiodeTekstinnhold } from '../../../typer/sanity/modaler/arbeidsperiode'; -import { dagensDato, gårsdagensDato } from '../../../utils/dato'; +import { dagensDato, gårsdagensDato, sisteDagDenneMåneden } from '../../../utils/dato'; import { trimWhiteSpace, visFeiloppsummering } from '../../../utils/hjelpefunksjoner'; import { minTilDatoForUtbetalingEllerArbeidsperiode } from '../../../utils/perioder'; import { svarForSpørsmålMedUkjent } from '../../../utils/spørsmål'; -import Datovelger from '../Datovelger/Datovelger'; import { LandDropdown } from '../Dropdowns/LandDropdown'; import JaNeiSpmForSanity from '../JaNeiSpm/JaNeiSpmForSanity'; +import { DagIMåneden, MånedÅrVelger } from '../MånedÅrVelger/MånedÅrVelger'; import TekstBlock from '../Sanity/TekstBlock'; -import { SkjemaCheckboxForSanity } from '../SkjemaCheckbox/SkjemaCheckboxForSanity'; import { SkjemaFeiloppsummering } from '../SkjemaFeiloppsummering/SkjemaFeiloppsummering'; import { SkjemaFeltInputForSanity } from '../SkjemaFeltInput/SkjemaFeltInputForSanity'; import SkjemaModal from '../SkjemaModal/SkjemaModal'; @@ -39,7 +38,7 @@ export const ArbeidsperiodeModal: React.FC = ({ erDød = false, forklaring = undefined, }) => { - const { tekster, plainTekst } = useApp(); + const { tekster } = useApp(); const { skjema, valideringErOk, nullstillSkjema, validerFelterOgVisFeilmelding } = useArbeidsperiodeSkjema(gjelderUtlandet, personType, erDød); @@ -137,15 +136,25 @@ export const ArbeidsperiodeModal: React.FC = ({ label={} /> )} - {fraDatoArbeidsperiode.erSynlig && ( + {/* {fraDatoArbeidsperiode.erSynlig && ( } avgrensMaxDato={periodenErAvsluttet ? gårsdagensDato() : dagensDato()} /> + )} */} + {fraDatoArbeidsperiode.erSynlig && ( + } + senesteValgbareMåned={periodenErAvsluttet ? gårsdagensDato() : dagensDato()} + felt={skjema.felter.fraDatoArbeidsperiode} + visFeilmeldinger={skjema.visFeilmeldinger} + dagIMåneden={DagIMåneden.FØRSTE_DAG} + kanIkkeVæreFremtid={true} + /> )} - {tilDatoArbeidsperiode.erSynlig && ( + {/* {tilDatoArbeidsperiode.erSynlig && (
= ({ label={plainTekst(teksterForModal.sluttdatoFremtid.checkboxLabel)} />
+ )} */} + {tilDatoArbeidsperiode.erSynlig && ( + + } + tidligsteValgbareMåned={minTilDatoForUtbetalingEllerArbeidsperiode( + periodenErAvsluttet, + skjema.felter.fraDatoArbeidsperiode.verdi + )} + senesteValgbareMåned={periodenErAvsluttet ? sisteDagDenneMåneden() : undefined} + felt={skjema.felter.tilDatoArbeidsperiode} + visFeilmeldinger={skjema.visFeilmeldinger} + dagIMåneden={DagIMåneden.SISTE_DAG} + kanIkkeVæreFremtid={periodenErAvsluttet} + kanIkkeVæreFortid={!periodenErAvsluttet} + /> )} {visFeiloppsummering(skjema) && } diff --git a/src/frontend/utils/dato.tsx b/src/frontend/utils/dato.tsx index 27c5dc426..9054837d1 100644 --- a/src/frontend/utils/dato.tsx +++ b/src/frontend/utils/dato.tsx @@ -2,6 +2,7 @@ import React from 'react'; import { add, + endOfMonth, format, isAfter, isBefore, @@ -13,11 +14,13 @@ import { startOfToday, sub, } from 'date-fns'; +import type { Locale } from 'date-fns/locale'; +import { enGB, nb, nn } from 'date-fns/locale'; import { feil, type FeltState, ok } from '@navikt/familie-skjema'; import SpråkTekst from '../components/Felleskomponenter/SpråkTekst/SpråkTekst'; -import { AlternativtSvarForInput, DatoMedUkjent, ISODateString } from '../typer/common'; +import { AlternativtSvarForInput, DatoMedUkjent, ISODateString, LocaleType } from '../typer/common'; import { LocaleRecordBlock, PlainTekst } from '../typer/sanity/sanity'; import { IFormateringsfeilmeldingerTekstinnhold } from '../typer/sanity/tekstInnhold'; @@ -47,6 +50,8 @@ export const tidenesMorgen = () => startOfDay(new Date(1000, 0)); export const tidenesEnde = () => startOfDay(new Date(3000, 0)); +export const sisteDagDenneMåneden = () => endOfMonth(new Date()); + export const stringTilDate = (dato: string) => startOfDay(new Date(dato)); export const parseTilGyldigDato = (dateString: string, format: string): Date | undefined => { @@ -140,11 +145,28 @@ export const validerDatoForSanity = ( return ok(feltState); }; +export const formaterDatostringKunMåned = (datoString: ISODateString, språk: LocaleType) => + format(new Date(datoString), 'MMMM yyyy', { locale: mapSpråkvalgTilDateFnsLocale(språk) }); + export const formaterDato = (datoString: ISODateString) => format(new Date(datoString), 'dd.MM.yyyy'); +export const formaterDatoKunMåned = (dato: Date, språk: LocaleType) => + format(dato, 'MMMM yyyy', { locale: mapSpråkvalgTilDateFnsLocale(språk) }); + export const formaterDatoMedUkjent = (datoMedUkjent: DatoMedUkjent, tekstForUkjent): string => { return datoMedUkjent === AlternativtSvarForInput.UKJENT ? tekstForUkjent : format(new Date(datoMedUkjent), 'dd.MM.yyyy'); }; + +const mapSpråkvalgTilDateFnsLocale = (språkvalg: LocaleType): Locale => { + switch (språkvalg) { + case LocaleType.nb: + return nb; + case LocaleType.nn: + return nn; + case LocaleType.en: + return enGB; + } +}; diff --git a/src/frontend/utils/visning.ts b/src/frontend/utils/visning.ts index b1eb42561..2c06f7631 100644 --- a/src/frontend/utils/visning.ts +++ b/src/frontend/utils/visning.ts @@ -1,6 +1,6 @@ -import { AlternativtSvarForInput, DatoMedUkjent } from '../typer/common'; +import { AlternativtSvarForInput, DatoMedUkjent, LocaleType } from '../typer/common'; -import { formaterDato } from './dato'; +import { formaterDato, formaterDatostringKunMåned } from './dato'; export const formaterFnr = (fødselsnummer: string) => { return fødselsnummer.substring(0, 6) + ' ' + fødselsnummer.substring(6, 11); @@ -12,6 +12,21 @@ export const formaterDatoMedUkjent = (datoMedUkjent: DatoMedUkjent, tekstForUkje : formaterDato(datoMedUkjent); }; +export const formaterMånedMedUkjent = ( + svar: string, + vetIkkeTekst, + toggle: boolean, + valgtLocale: LocaleType +) => { + if (svar === AlternativtSvarForInput.UKJENT) { + return vetIkkeTekst; + } else if (toggle) { + return uppercaseFørsteBokstav(formaterDatostringKunMåned(svar, valgtLocale)); + } else { + return formaterDato(svar); + } +}; + export const uppercaseFørsteBokstav = text => { if (typeof text !== 'string') return ''; return text.charAt(0).toUpperCase() + text.slice(1); From 2e5bb949ea67805c7e68499a8a49826511ca6681 Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Thu, 13 Mar 2025 14:26:36 +0100 Subject: [PATCH 03/16] =?UTF-8?q?Bytter=20til=20formattering=20av=20m?= =?UTF-8?q?=C3=A5ned=20for=20fraDatoArbeidsperiode=20og=20tilDatoArbeidspe?= =?UTF-8?q?riode=20i=20ArbeidsperiodeOppsummering.tsx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArbeidsperiodeOppsummering.tsx | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx index c19df7a62..4417ceea7 100644 --- a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx +++ b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx @@ -7,9 +7,9 @@ import { useSpråk } from '../../../context/SpråkContext'; import { IArbeidsperiode } from '../../../typer/perioder'; import { PeriodePersonTypeMedBarnProps, PersonType } from '../../../typer/personType'; import { IArbeidsperiodeTekstinnhold } from '../../../typer/sanity/modaler/arbeidsperiode'; -import { formaterDato } from '../../../utils/dato'; +import { formaterDatostringKunMåned } from '../../../utils/dato'; import { landkodeTilSpråk } from '../../../utils/språk'; -import { formaterDatoMedUkjent } from '../../../utils/visning'; +import { formaterMånedMedUkjent, uppercaseFørsteBokstav } from '../../../utils/visning'; import { OppsummeringFelt } from '../../SøknadsSteg/Oppsummering/OppsummeringFelt'; import PeriodeOppsummering from '../PeriodeOppsummering/PeriodeOppsummering'; import TekstBlock from '../Sanity/TekstBlock'; @@ -94,13 +94,21 @@ export const ArbeidsperiodeOppsummering: React.FC )} - {fraDatoArbeidsperiode.svar && ( + {/* {fraDatoArbeidsperiode.svar && ( } søknadsvar={formaterDato(fraDatoArbeidsperiode.svar)} /> + )} */} + {fraDatoArbeidsperiode.svar && ( + } + søknadsvar={uppercaseFørsteBokstav( + formaterDatostringKunMåned(fraDatoArbeidsperiode.svar, valgtLocale) + )} + /> )} - {tilDatoArbeidsperiode.svar && ( + {/* {tilDatoArbeidsperiode.svar && ( + )} */} + {tilDatoArbeidsperiode.svar && ( + + } + søknadsvar={formaterMånedMedUkjent( + tilDatoArbeidsperiode.svar, + plainTekst(teksterForModal.sluttdatoFremtid.checkboxLabel), + true, + valgtLocale + )} + /> )} ); From 5428bba68b359b32da0789689fbfd02aa018392d Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Thu, 13 Mar 2025 15:03:50 +0100 Subject: [PATCH 04/16] =?UTF-8?q?Legger=20til=20feature-toggle=20for=20?= =?UTF-8?q?=C3=A5=20bytte=20mellom=20Datovelger=20(av)=20og=20M=C3=A5ned?= =?UTF-8?q?=C3=85rVelger=20(p=C3=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Arbeidsperiode/ArbeidsperiodeModal.tsx | 144 ++++++++++-------- src/frontend/typer/feature-toggles.ts | 2 + src/frontend/utils/testing.tsx | 1 + 3 files changed, 82 insertions(+), 65 deletions(-) diff --git a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx index a871128e4..ff1a02255 100644 --- a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx +++ b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx @@ -3,6 +3,8 @@ import React from 'react'; import { ESvar } from '@navikt/familie-form-elements'; import { useApp } from '../../../context/AppContext'; +import { useFeatureToggles } from '../../../context/FeatureToggleContext'; +import { EFeatureToggle } from '../../../typer/feature-toggles'; import { IArbeidsperiode } from '../../../typer/perioder'; import { PersonType } from '../../../typer/personType'; import { IArbeidsperiodeTekstinnhold } from '../../../typer/sanity/modaler/arbeidsperiode'; @@ -10,10 +12,12 @@ import { dagensDato, gårsdagensDato, sisteDagDenneMåneden } from '../../../uti import { trimWhiteSpace, visFeiloppsummering } from '../../../utils/hjelpefunksjoner'; import { minTilDatoForUtbetalingEllerArbeidsperiode } from '../../../utils/perioder'; import { svarForSpørsmålMedUkjent } from '../../../utils/spørsmål'; +import Datovelger from '../Datovelger/Datovelger'; import { LandDropdown } from '../Dropdowns/LandDropdown'; import JaNeiSpmForSanity from '../JaNeiSpm/JaNeiSpmForSanity'; import { DagIMåneden, MånedÅrVelger } from '../MånedÅrVelger/MånedÅrVelger'; import TekstBlock from '../Sanity/TekstBlock'; +import { SkjemaCheckboxForSanity } from '../SkjemaCheckbox/SkjemaCheckboxForSanity'; import { SkjemaFeiloppsummering } from '../SkjemaFeiloppsummering/SkjemaFeiloppsummering'; import { SkjemaFeltInputForSanity } from '../SkjemaFeltInput/SkjemaFeltInputForSanity'; import SkjemaModal from '../SkjemaModal/SkjemaModal'; @@ -38,7 +42,8 @@ export const ArbeidsperiodeModal: React.FC = ({ erDød = false, forklaring = undefined, }) => { - const { tekster } = useApp(); + const { toggles } = useFeatureToggles(); + const { tekster, plainTekst } = useApp(); const { skjema, valideringErOk, nullstillSkjema, validerFelterOgVisFeilmelding } = useArbeidsperiodeSkjema(gjelderUtlandet, personType, erDød); @@ -136,74 +141,83 @@ export const ArbeidsperiodeModal: React.FC = ({ label={} /> )} - {/* {fraDatoArbeidsperiode.erSynlig && ( - } - avgrensMaxDato={periodenErAvsluttet ? gårsdagensDato() : dagensDato()} - /> - )} */} - {fraDatoArbeidsperiode.erSynlig && ( - } - senesteValgbareMåned={periodenErAvsluttet ? gårsdagensDato() : dagensDato()} - felt={skjema.felter.fraDatoArbeidsperiode} - visFeilmeldinger={skjema.visFeilmeldinger} - dagIMåneden={DagIMåneden.FØRSTE_DAG} - kanIkkeVæreFremtid={true} - /> - )} - {/* {tilDatoArbeidsperiode.erSynlig && ( -
- - } - avgrensMinDato={minTilDatoForUtbetalingEllerArbeidsperiode( - periodenErAvsluttet, - skjema.felter.fraDatoArbeidsperiode.verdi - )} - avgrensMaxDato={periodenErAvsluttet ? dagensDato() : undefined} - disabled={skjema.felter.tilDatoArbeidsperiodeUkjent.verdi === ESvar.JA} - /> - -
- )} */} - {tilDatoArbeidsperiode.erSynlig && ( - + {fraDatoArbeidsperiode.erSynlig && ( + } + senesteValgbareMåned={ + periodenErAvsluttet ? gårsdagensDato() : dagensDato() } + felt={skjema.felter.fraDatoArbeidsperiode} + visFeilmeldinger={skjema.visFeilmeldinger} + dagIMåneden={DagIMåneden.FØRSTE_DAG} + kanIkkeVæreFremtid={true} /> - } - tidligsteValgbareMåned={minTilDatoForUtbetalingEllerArbeidsperiode( - periodenErAvsluttet, - skjema.felter.fraDatoArbeidsperiode.verdi )} - senesteValgbareMåned={periodenErAvsluttet ? sisteDagDenneMåneden() : undefined} - felt={skjema.felter.tilDatoArbeidsperiode} - visFeilmeldinger={skjema.visFeilmeldinger} - dagIMåneden={DagIMåneden.SISTE_DAG} - kanIkkeVæreFremtid={periodenErAvsluttet} - kanIkkeVæreFortid={!periodenErAvsluttet} - /> + {tilDatoArbeidsperiode.erSynlig && ( + + } + tidligsteValgbareMåned={minTilDatoForUtbetalingEllerArbeidsperiode( + periodenErAvsluttet, + skjema.felter.fraDatoArbeidsperiode.verdi + )} + senesteValgbareMåned={ + periodenErAvsluttet ? sisteDagDenneMåneden() : undefined + } + felt={skjema.felter.tilDatoArbeidsperiode} + visFeilmeldinger={skjema.visFeilmeldinger} + dagIMåneden={DagIMåneden.SISTE_DAG} + kanIkkeVæreFremtid={periodenErAvsluttet} + kanIkkeVæreFortid={!periodenErAvsluttet} + /> + )} + + ) : ( + <> + {fraDatoArbeidsperiode.erSynlig && ( + } + avgrensMaxDato={periodenErAvsluttet ? gårsdagensDato() : dagensDato()} + /> + )} + {tilDatoArbeidsperiode.erSynlig && ( + + } + avgrensMinDato={minTilDatoForUtbetalingEllerArbeidsperiode( + periodenErAvsluttet, + skjema.felter.fraDatoArbeidsperiode.verdi + )} + avgrensMaxDato={periodenErAvsluttet ? dagensDato() : undefined} + disabled={skjema.felter.tilDatoArbeidsperiodeUkjent.verdi === ESvar.JA} + /> + )} + )} + {visFeiloppsummering(skjema) && } ); diff --git a/src/frontend/typer/feature-toggles.ts b/src/frontend/typer/feature-toggles.ts index 69d9881bc..8e071e04a 100644 --- a/src/frontend/typer/feature-toggles.ts +++ b/src/frontend/typer/feature-toggles.ts @@ -6,6 +6,7 @@ export enum EFeatureToggle { // EKSEMPEL = 'EKSEMPEL', NYE_MODAL_TEKSTER = 'NYE_MODAL_TEKSTER', BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD = 'BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD', + SPOR_OM_MANED_IKKE_DATO = 'SPOR_OM_MANED_IKKE_DATO', } export const ToggleKeys: Record = { @@ -13,6 +14,7 @@ export const ToggleKeys: Record = { [EFeatureToggle.NYE_MODAL_TEKSTER]: 'familie-ba-soknad.nye-modal-tekster', [EFeatureToggle.BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD]: 'familie-ba-soknad.bruk_nytt_endepunkt_for_innsending_av_soknad', + [EFeatureToggle.SPOR_OM_MANED_IKKE_DATO]: 'familie-ba-soknad.spor-om-maned-ikke-dato', }; export type EAllFeatureToggles = Record; diff --git a/src/frontend/utils/testing.tsx b/src/frontend/utils/testing.tsx index fdfdf147c..2bac611e4 100644 --- a/src/frontend/utils/testing.tsx +++ b/src/frontend/utils/testing.tsx @@ -160,6 +160,7 @@ export const mockFeatureToggle = () => { toggles: { [EFeatureToggle.NYE_MODAL_TEKSTER]: false, [EFeatureToggle.BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD]: true, + [EFeatureToggle.SPOR_OM_MANED_IKKE_DATO]: false, }, }) ); From 794e6e8edc9337df85b02834000f7b4367c2fbbc Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Thu, 13 Mar 2025 16:16:10 +0100 Subject: [PATCH 05/16] =?UTF-8?q?Legger=20til=20M=C3=A5ned=C3=85rVelger=20?= =?UTF-8?q?i=20pensjonsmodal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Arbeidsperiode/ArbeidsperiodeModal.tsx | 10 +- .../ArbeidsperiodeOppsummering.tsx | 34 +++--- .../useArbeidsperiodeSkjema.tsx | 12 ++- .../Pensjonsmodal/Pensjonsmodal.tsx | 100 +++++++++++++++++- .../PensjonsperiodeOppsummering.tsx | 22 +++- 5 files changed, 155 insertions(+), 23 deletions(-) diff --git a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx index ff1a02255..45f4ce407 100644 --- a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx +++ b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx @@ -214,10 +214,12 @@ export const ArbeidsperiodeModal: React.FC = ({ )} )} - + {tilDatoArbeidsperiode.erSynlig && ( + + )} {visFeiloppsummering(skjema) && } ); diff --git a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx index 4417ceea7..12e96665f 100644 --- a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx +++ b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx @@ -3,11 +3,13 @@ import React from 'react'; import { ESvar } from '@navikt/familie-form-elements'; import { useApp } from '../../../context/AppContext'; +import { useFeatureToggles } from '../../../context/FeatureToggleContext'; import { useSpråk } from '../../../context/SpråkContext'; +import { EFeatureToggle } from '../../../typer/feature-toggles'; import { IArbeidsperiode } from '../../../typer/perioder'; import { PeriodePersonTypeMedBarnProps, PersonType } from '../../../typer/personType'; import { IArbeidsperiodeTekstinnhold } from '../../../typer/sanity/modaler/arbeidsperiode'; -import { formaterDatostringKunMåned } from '../../../utils/dato'; +import { formaterDato, formaterDatostringKunMåned } from '../../../utils/dato'; import { landkodeTilSpråk } from '../../../utils/språk'; import { formaterMånedMedUkjent, uppercaseFørsteBokstav } from '../../../utils/visning'; import { OppsummeringFelt } from '../../SøknadsSteg/Oppsummering/OppsummeringFelt'; @@ -33,6 +35,7 @@ export const ArbeidsperiodeOppsummering: React.FC { + const { toggles } = useFeatureToggles(); const { tekster, plainTekst } = useApp(); const { valgtLocale } = useSpråk(); const { @@ -94,21 +97,22 @@ export const ArbeidsperiodeOppsummering: React.FC )} - {/* {fraDatoArbeidsperiode.svar && ( - } - søknadsvar={formaterDato(fraDatoArbeidsperiode.svar)} - /> - )} */} {fraDatoArbeidsperiode.svar && ( } - søknadsvar={uppercaseFørsteBokstav( - formaterDatostringKunMåned(fraDatoArbeidsperiode.svar, valgtLocale) - )} + søknadsvar={ + toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO] + ? uppercaseFørsteBokstav( + formaterDatostringKunMåned( + fraDatoArbeidsperiode.svar, + valgtLocale + ) + ) + : formaterDato(fraDatoArbeidsperiode.svar) + } /> )} - {/* {tilDatoArbeidsperiode.svar && ( + {tilDatoArbeidsperiode.svar && ( } - søknadsvar={formaterDatoMedUkjent( + søknadsvar={formaterMånedMedUkjent( tilDatoArbeidsperiode.svar, - plainTekst(teksterForModal.sluttdatoFremtid.checkboxLabel) + plainTekst(teksterForModal.sluttdatoFremtid.checkboxLabel), + toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO], + valgtLocale )} /> - )} */} + )} {tilDatoArbeidsperiode.svar && ( { + const { toggles } = useFeatureToggles(); const { tekster, plainTekst } = useApp(); const { erEøsLand } = useEøs(); @@ -93,6 +97,10 @@ export const useArbeidsperiodeSkjema = ( avhengigheter: { arbeidsperiodeAvsluttet, arbeidsperiodeLand }, }); + const tilArbeidsperiodeSluttdatoAvgrensning = toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO] + ? sisteDagDenneMåneden() + : dagensDato(); + const tilDatoArbeidsperiode = useDatovelgerFeltMedUkjentForSanity({ feltId: ArbeidsperiodeSpørsmålsId.tilDatoArbeidsperiode, initiellVerdi: '', @@ -104,7 +112,9 @@ export const useArbeidsperiodeSkjema = ( ? !!erEøsLand(arbeidsperiodeLand.verdi) : arbeidsperiodeAvsluttet.valideringsstatus === Valideringsstatus.OK || andreForelderErDød, - sluttdatoAvgrensning: periodenErAvsluttet ? dagensDato() : undefined, + sluttdatoAvgrensning: periodenErAvsluttet + ? tilArbeidsperiodeSluttdatoAvgrensning + : undefined, startdatoAvgrensning: minTilDatoForUtbetalingEllerArbeidsperiode( periodenErAvsluttet, fraDatoArbeidsperiode.verdi diff --git a/src/frontend/components/Felleskomponenter/Pensjonsmodal/Pensjonsmodal.tsx b/src/frontend/components/Felleskomponenter/Pensjonsmodal/Pensjonsmodal.tsx index 689aff2c3..26d92d009 100644 --- a/src/frontend/components/Felleskomponenter/Pensjonsmodal/Pensjonsmodal.tsx +++ b/src/frontend/components/Felleskomponenter/Pensjonsmodal/Pensjonsmodal.tsx @@ -1,16 +1,21 @@ import React from 'react'; +import { parseISO } from 'date-fns'; + import { ESvar } from '@navikt/familie-form-elements'; import { useApp } from '../../../context/AppContext'; +import { useFeatureToggles } from '../../../context/FeatureToggleContext'; +import { EFeatureToggle } from '../../../typer/feature-toggles'; import { IPensjonsperiode } from '../../../typer/perioder'; import { PersonType } from '../../../typer/personType'; import { IPensjonsperiodeTekstinnhold } from '../../../typer/sanity/modaler/pensjonsperiode'; -import { dagensDato, gårsdagensDato } from '../../../utils/dato'; +import { dagensDato, gårsdagensDato, sisteDagDenneMåneden } from '../../../utils/dato'; import { visFeiloppsummering } from '../../../utils/hjelpefunksjoner'; import Datovelger from '../Datovelger/Datovelger'; import { LandDropdown } from '../Dropdowns/LandDropdown'; import JaNeiSpmForSanity from '../JaNeiSpm/JaNeiSpmForSanity'; +import { DagIMåneden, MånedÅrVelger } from '../MånedÅrVelger/MånedÅrVelger'; import TekstBlock from '../Sanity/TekstBlock'; import { SkjemaFeiloppsummering } from '../SkjemaFeiloppsummering/SkjemaFeiloppsummering'; import SkjemaModal from '../SkjemaModal/SkjemaModal'; @@ -36,6 +41,7 @@ export const PensjonModal: React.FC = ({ erDød, forklaring = undefined, }) => { + const { toggles } = useFeatureToggles(); const { tekster } = useApp(); const { skjema, valideringErOk, nullstillSkjema, validerFelterOgVisFeilmelding } = usePensjonSkjema({ @@ -118,6 +124,98 @@ export const PensjonModal: React.FC = ({ ekskluderNorge /> )} + {toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO] ? ( + <> + {pensjonFraDato.erSynlig && ( + + } + senesteValgbareMåned={ + periodenErAvsluttet ? gårsdagensDato() : dagensDato() + } + felt={pensjonFraDato} + visFeilmeldinger={skjema.visFeilmeldinger} + dagIMåneden={DagIMåneden.FØRSTE_DAG} + kanIkkeVæreFremtid={true} + /> + )} + + {pensjonTilDato.erSynlig && ( + + } + tidligsteValgbareMåned={ + pensjonFraDato.verdi !== '' + ? parseISO(pensjonFraDato.verdi) + : undefined + } + senesteValgbareMåned={sisteDagDenneMåneden()} + felt={pensjonTilDato} + visFeilmeldinger={skjema.visFeilmeldinger} + dagIMåneden={DagIMåneden.SISTE_DAG} + kanIkkeVæreFremtid={periodenErAvsluttet} + kanIkkeVæreFortid={!periodenErAvsluttet} + /> + )} + + ) : ( + <> + {pensjonFraDato.erSynlig && ( + + } + skjema={skjema} + avgrensMaxDato={periodenErAvsluttet ? gårsdagensDato() : dagensDato()} + /> + )} + {pensjonTilDato.erSynlig && ( + + } + skjema={skjema} + avgrensMaxDato={dagensDato()} + tilhørendeFraOgMedFelt={pensjonFraDato} + dynamisk + /> + )} + + )} {pensjonFraDato.erSynlig && ( { + const { toggles } = useFeatureToggles(); const { valgtLocale } = useSpråk(); const { tekster } = useApp(); const teksterForModal = tekster().FELLES.modaler.pensjonsperiode[personType]; @@ -97,7 +101,13 @@ export const PensjonsperiodeOppsummering: React.FC } - søknadsvar={formaterDato(pensjonFra.svar)} + søknadsvar={ + toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO] + ? uppercaseFørsteBokstav( + formaterDatostringKunMåned(pensjonFra.svar, valgtLocale) + ) + : formaterDato(pensjonFra.svar) + } /> )} {pensjonTil.svar && ( @@ -111,7 +121,13 @@ export const PensjonsperiodeOppsummering: React.FC } - søknadsvar={formaterDato(pensjonTil.svar)} + søknadsvar={ + toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO] + ? uppercaseFørsteBokstav( + formaterDatostringKunMåned(pensjonTil.svar, valgtLocale) + ) + : formaterDato(pensjonTil.svar) + } /> )} From befebfcfe50ca4892d274781e96bb3ebfc38118b Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Mon, 17 Mar 2025 14:15:19 +0100 Subject: [PATCH 06/16] =?UTF-8?q?Legger=20til=20M=C3=A5ned=C3=85rVelger=20?= =?UTF-8?q?i=20usePensjonsSkjema=20og=20ubetalinger-komponenter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pensjonsmodal/usePensjonSkjema.tsx | 14 +- .../UtbetalingerModal/UtbetalingerModal.tsx | 121 +++++++++++++----- .../UtbetalingsperiodeOppsummering.tsx | 21 ++- .../useUtbetalingerSkjema.tsx | 12 +- 4 files changed, 130 insertions(+), 38 deletions(-) diff --git a/src/frontend/components/Felleskomponenter/Pensjonsmodal/usePensjonSkjema.tsx b/src/frontend/components/Felleskomponenter/Pensjonsmodal/usePensjonSkjema.tsx index d80ed27f4..c6ed7be39 100644 --- a/src/frontend/components/Felleskomponenter/Pensjonsmodal/usePensjonSkjema.tsx +++ b/src/frontend/components/Felleskomponenter/Pensjonsmodal/usePensjonSkjema.tsx @@ -5,15 +5,22 @@ import { useSkjema, Valideringsstatus } from '@navikt/familie-skjema'; import { useApp } from '../../../context/AppContext'; import { useEøs } from '../../../context/EøsContext'; +import { useFeatureToggles } from '../../../context/FeatureToggleContext'; import useJaNeiSpmFelt from '../../../hooks/useJaNeiSpmFelt'; import useLanddropdownFelt from '../../../hooks/useLanddropdownFelt'; import useDatovelgerFeltForSanity from '../../../hooks/useSendInnSkjemaTest/useDatovelgerForSanity'; import { IBarnMedISøknad } from '../../../typer/barn'; +import { EFeatureToggle } from '../../../typer/feature-toggles'; import { PersonType } from '../../../typer/personType'; import { IPensjonsperiodeTekstinnhold } from '../../../typer/sanity/modaler/pensjonsperiode'; import { ESanitySteg } from '../../../typer/sanity/sanity'; import { IPensjonsperiodeFeltTyper } from '../../../typer/skjema'; -import { dagenEtterDato, dagensDato, gårsdagensDato, stringTilDate } from '../../../utils/dato'; +import { + dagenEtterDato, + dagensDato, + sisteDagDenneMåneden, + stringTilDate, +} from '../../../utils/dato'; import { mottarPensjonNåFeilmeldingSpråkId, pensjonslandFeilmeldingSpråkId } from './språkUtils'; import { PensjonsperiodeSpørsmålId } from './spørsmål'; @@ -31,6 +38,7 @@ export const usePensjonSkjema = ({ erDød, barn, }: IUsePensjonSkjemaParams) => { + const { toggles } = useFeatureToggles(); const { tekster } = useApp(); const { erEøsLand } = useEøs(); const teksterForPersonType: IPensjonsperiodeTekstinnhold = @@ -75,7 +83,9 @@ export const usePensjonSkjema = ({ feilmelding: periodenErAvsluttet ? teksterForPersonType.startdatoFortid.feilmelding : teksterForPersonType.startdatoNaatid.feilmelding, - sluttdatoAvgrensning: periodenErAvsluttet ? gårsdagensDato() : dagensDato(), + sluttdatoAvgrensning: toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO] + ? sisteDagDenneMåneden() + : dagensDato(), avhengigheter: { mottarPensjonNå }, }); diff --git a/src/frontend/components/Felleskomponenter/UtbetalingerModal/UtbetalingerModal.tsx b/src/frontend/components/Felleskomponenter/UtbetalingerModal/UtbetalingerModal.tsx index 2a0baa8f4..f4cb4e045 100644 --- a/src/frontend/components/Felleskomponenter/UtbetalingerModal/UtbetalingerModal.tsx +++ b/src/frontend/components/Felleskomponenter/UtbetalingerModal/UtbetalingerModal.tsx @@ -4,16 +4,19 @@ import { ESvar } from '@navikt/familie-form-elements'; import { Valideringsstatus } from '@navikt/familie-skjema'; import { useApp } from '../../../context/AppContext'; +import { useFeatureToggles } from '../../../context/FeatureToggleContext'; +import { EFeatureToggle } from '../../../typer/feature-toggles'; import { IUtbetalingsperiode } from '../../../typer/perioder'; import { PersonType } from '../../../typer/personType'; import { IAndreUtbetalingerTekstinnhold } from '../../../typer/sanity/modaler/andreUtbetalinger'; -import { dagensDato, gårsdagensDato } from '../../../utils/dato'; +import { dagensDato, gårsdagensDato, sisteDagDenneMåneden } from '../../../utils/dato'; import { visFeiloppsummering } from '../../../utils/hjelpefunksjoner'; import { minTilDatoForUtbetalingEllerArbeidsperiode } from '../../../utils/perioder'; import { svarForSpørsmålMedUkjent } from '../../../utils/spørsmål'; import Datovelger from '../Datovelger/Datovelger'; import { LandDropdown } from '../Dropdowns/LandDropdown'; import JaNeiSpmForSanity from '../JaNeiSpm/JaNeiSpmForSanity'; +import { DagIMåneden, MånedÅrVelger } from '../MånedÅrVelger/MånedÅrVelger'; import TekstBlock from '../Sanity/TekstBlock'; import { SkjemaCheckboxForSanity } from '../SkjemaCheckbox/SkjemaCheckboxForSanity'; import { SkjemaFeiloppsummering } from '../SkjemaFeiloppsummering/SkjemaFeiloppsummering'; @@ -38,6 +41,7 @@ export const UtbetalingerModal: React.FC = ({ erDød, forklaring = undefined, }) => { + const { toggles } = useFeatureToggles(); const { tekster, plainTekst } = useApp(); const { skjema, valideringErOk, nullstillSkjema, validerFelterOgVisFeilmelding } = useUtbetalingerSkjema(personType, barn, erDød); @@ -118,37 +122,94 @@ export const UtbetalingerModal: React.FC = ({ } dynamisk /> - } - avgrensMaxDato={periodenErAvsluttet ? gårsdagensDato() : dagensDato()} - /> -
- + + } + senesteValgbareMåned={ + periodenErAvsluttet ? gårsdagensDato() : dagensDato() + } + felt={utbetalingFraDato} + visFeilmeldinger={skjema.visFeilmeldinger} + dagIMåneden={DagIMåneden.FØRSTE_DAG} + kanIkkeVæreFremtid={true} + /> +
+ + } + tidligsteValgbareMåned={minTilDatoForUtbetalingEllerArbeidsperiode( + periodenErAvsluttet, + utbetalingFraDato.verdi + )} + senesteValgbareMåned={ + periodenErAvsluttet ? sisteDagDenneMåneden() : undefined } + felt={utbetalingTilDato} + visFeilmeldinger={skjema.visFeilmeldinger} + dagIMåneden={DagIMåneden.SISTE_DAG} + kanIkkeVæreFremtid={periodenErAvsluttet} + kanIkkeVæreFortid={!periodenErAvsluttet} + disabled={utbetalingTilDatoUkjent.verdi === ESvar.JA} + /> + +
+ + ) : ( + <> + + } + avgrensMaxDato={ + periodenErAvsluttet ? gårsdagensDato() : dagensDato() + } + /> +
+ + } + avgrensMaxDato={periodenErAvsluttet ? dagensDato() : undefined} + avgrensMinDato={minTilDatoForUtbetalingEllerArbeidsperiode( + periodenErAvsluttet, + utbetalingFraDato.verdi + )} + disabled={utbetalingTilDatoUkjent.verdi === ESvar.JA} + /> + - } - avgrensMaxDato={periodenErAvsluttet ? dagensDato() : undefined} - avgrensMinDato={minTilDatoForUtbetalingEllerArbeidsperiode( - periodenErAvsluttet, - utbetalingFraDato.verdi - )} - disabled={utbetalingTilDatoUkjent.verdi === ESvar.JA} - /> - -
+
+ + )} )} {visFeiloppsummering(skjema) && } diff --git a/src/frontend/components/Felleskomponenter/UtbetalingerModal/UtbetalingsperiodeOppsummering.tsx b/src/frontend/components/Felleskomponenter/UtbetalingerModal/UtbetalingsperiodeOppsummering.tsx index 24c5e6ec0..55beb23f7 100644 --- a/src/frontend/components/Felleskomponenter/UtbetalingerModal/UtbetalingsperiodeOppsummering.tsx +++ b/src/frontend/components/Felleskomponenter/UtbetalingerModal/UtbetalingsperiodeOppsummering.tsx @@ -3,13 +3,15 @@ import React from 'react'; import { ESvar } from '@navikt/familie-form-elements'; import { useApp } from '../../../context/AppContext'; +import { useFeatureToggles } from '../../../context/FeatureToggleContext'; import { useSpråk } from '../../../context/SpråkContext'; +import { EFeatureToggle } from '../../../typer/feature-toggles'; import { IUtbetalingsperiode } from '../../../typer/perioder'; import { PeriodePersonTypeMedBarnProps, PersonType } from '../../../typer/personType'; import { IAndreUtbetalingerTekstinnhold } from '../../../typer/sanity/modaler/andreUtbetalinger'; -import { formaterDato } from '../../../utils/dato'; +import { formaterDato, formaterDatostringKunMåned } from '../../../utils/dato'; import { landkodeTilSpråk } from '../../../utils/språk'; -import { formaterDatoMedUkjent } from '../../../utils/visning'; +import { formaterMånedMedUkjent, uppercaseFørsteBokstav } from '../../../utils/visning'; import { OppsummeringFelt } from '../../SøknadsSteg/Oppsummering/OppsummeringFelt'; import PeriodeOppsummering from '../PeriodeOppsummering/PeriodeOppsummering'; import TekstBlock from '../Sanity/TekstBlock'; @@ -30,6 +32,7 @@ export const UtbetalingsperiodeOppsummering: React.FC { + const { toggles } = useFeatureToggles(); const { tekster, plainTekst } = useApp(); const { valgtLocale } = useSpråk(); const { fårUtbetalingNå, utbetalingLand, utbetalingFraDato, utbetalingTilDato } = @@ -83,7 +86,13 @@ export const UtbetalingsperiodeOppsummering: React.FC } - søknadsvar={formaterDato(utbetalingFraDato.svar)} + søknadsvar={ + toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO] + ? uppercaseFørsteBokstav( + formaterDatostringKunMåned(utbetalingFraDato.svar, valgtLocale) + ) + : formaterDato(utbetalingFraDato.svar) + } /> } - søknadsvar={formaterDatoMedUkjent( + søknadsvar={formaterMånedMedUkjent( utbetalingTilDato.svar, - plainTekst(teksterForPersontype.sluttdatoFremtid.checkboxLabel) + plainTekst(teksterForPersontype.sluttdatoFremtid.checkboxLabel), + toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO], + valgtLocale )} /> diff --git a/src/frontend/components/Felleskomponenter/UtbetalingerModal/useUtbetalingerSkjema.tsx b/src/frontend/components/Felleskomponenter/UtbetalingerModal/useUtbetalingerSkjema.tsx index 10b313013..7cea32244 100644 --- a/src/frontend/components/Felleskomponenter/UtbetalingerModal/useUtbetalingerSkjema.tsx +++ b/src/frontend/components/Felleskomponenter/UtbetalingerModal/useUtbetalingerSkjema.tsx @@ -2,11 +2,13 @@ import { ESvar } from '@navikt/familie-form-elements'; import { useFelt, useSkjema, Valideringsstatus } from '@navikt/familie-skjema'; import { useApp } from '../../../context/AppContext'; +import { useFeatureToggles } from '../../../context/FeatureToggleContext'; import useDatovelgerFeltMedUkjentForSanity from '../../../hooks/useDatovelgerFeltMedUkjentForSanity'; import useJaNeiSpmFelt from '../../../hooks/useJaNeiSpmFelt'; import useLanddropdownFelt from '../../../hooks/useLanddropdownFelt'; import useDatovelgerFeltForSanity from '../../../hooks/useSendInnSkjemaTest/useDatovelgerForSanity'; import { IBarnMedISøknad } from '../../../typer/barn'; +import { EFeatureToggle } from '../../../typer/feature-toggles'; import { PersonType } from '../../../typer/personType'; import { IAndreUtbetalingerTekstinnhold } from '../../../typer/sanity/modaler/andreUtbetalinger'; import { ESanitySteg } from '../../../typer/sanity/sanity'; @@ -15,6 +17,7 @@ import { dagensDato, erSammeDatoSomDagensDato, gårsdagensDato, + sisteDagDenneMåneden, stringTilDate, } from '../../../utils/dato'; import { minTilDatoForUtbetalingEllerArbeidsperiode } from '../../../utils/perioder'; @@ -29,6 +32,7 @@ export interface IUseUtbetalingerSkjemaParams { } export const useUtbetalingerSkjema = (personType, barn, erDød) => { + const { toggles } = useFeatureToggles(); const { tekster, plainTekst } = useApp(); const teksterForPersontype: IAndreUtbetalingerTekstinnhold = tekster()[ESanitySteg.FELLES].modaler.andreUtbetalinger[personType]; @@ -75,6 +79,10 @@ export const useUtbetalingerSkjema = (personType, barn, erDød) => { avhengigheter: { fårUtbetalingNå }, }); + const utbetalingTilDatoSluttdatoAvgrensning = toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO] + ? sisteDagDenneMåneden() + : dagensDato(); + const utbetalingTilDato = useDatovelgerFeltMedUkjentForSanity({ feltId: UtbetalingerSpørsmålId.utbetalingTilDato, initiellVerdi: '', @@ -84,7 +92,9 @@ export const useUtbetalingerSkjema = (personType, barn, erDød) => { : teksterForPersontype.sluttdatoFremtid.feilmelding, skalFeltetVises: andreForelderErDød || fårUtbetalingNå.valideringsstatus === Valideringsstatus.OK, - sluttdatoAvgrensning: periodenErAvsluttet ? dagensDato() : undefined, + sluttdatoAvgrensning: periodenErAvsluttet + ? utbetalingTilDatoSluttdatoAvgrensning + : undefined, startdatoAvgrensning: minTilDatoForUtbetalingEllerArbeidsperiode( periodenErAvsluttet, utbetalingFraDato.verdi From af266bd5ceb7e00d420bd8023d16caf3228cf82c Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Mon, 17 Mar 2025 15:23:33 +0100 Subject: [PATCH 07/16] =?UTF-8?q?Legger=20til=20M=C3=A5ned=C3=85rVelger-re?= =?UTF-8?q?laterte=20verdier=20i=20mapping=20til=20kontrakt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/frontend/hooks/useSendInnSkjema.tsx | 4 +- .../utils/mappingTilKontrakt/andreForelder.ts | 8 +++- .../andreUtbetalingsperioder.ts | 32 ++++++++++----- .../mappingTilKontrakt/arbeidsperioder.ts | 39 ++++++++++++++----- src/frontend/utils/mappingTilKontrakt/barn.ts | 14 +++++-- .../utils/mappingTilKontrakt/omsorgsperson.ts | 8 +++- .../mappingTilKontrakt/pensjonsperioder.ts | 20 +++++++++- .../mappingTilKontrakt/s\303\270knad.ts" | 17 +++++++- 8 files changed, 112 insertions(+), 30 deletions(-) diff --git a/src/frontend/hooks/useSendInnSkjema.tsx b/src/frontend/hooks/useSendInnSkjema.tsx index 86e7a00b1..087a0ae05 100644 --- a/src/frontend/hooks/useSendInnSkjema.tsx +++ b/src/frontend/hooks/useSendInnSkjema.tsx @@ -8,6 +8,7 @@ import { erModellMismatchResponsRessurs } from '../../shared-utils/modellversjon import { useApp } from '../context/AppContext'; import { useFeatureToggles } from '../context/FeatureToggleContext'; import { useSpråk } from '../context/SpråkContext'; +import { EFeatureToggle } from '../typer/feature-toggles'; import { ISøknadKontrakt } from '../typer/kontrakt/kontrakt'; import { dataISøknadKontraktFormat } from '../utils/mappingTilKontrakt/søknad'; import { sendInn } from '../utils/sendInnSkjema'; @@ -37,7 +38,8 @@ export const useSendInnSkjema = (): { søknad, tekster(), tilRestLocaleRecord, - kontraktVersjon + kontraktVersjon, + toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO] === true ); const res = await sendInn( diff --git a/src/frontend/utils/mappingTilKontrakt/andreForelder.ts b/src/frontend/utils/mappingTilKontrakt/andreForelder.ts index 682734bbd..ba0fbec96 100644 --- a/src/frontend/utils/mappingTilKontrakt/andreForelder.ts +++ b/src/frontend/utils/mappingTilKontrakt/andreForelder.ts @@ -34,7 +34,8 @@ export const andreForelderTilISøknadsfelt = ( barn: IBarnMedISøknad, valgtSpråk: LocaleType, tilRestLocaleRecord: TilRestLocaleRecord, - tekster: ITekstinnhold + tekster: ITekstinnhold, + toggleSpørOmMånedIkkeDato: boolean ): IAndreForelderIKontraktFormat => { const { navn, @@ -208,6 +209,7 @@ export const andreForelderTilISøknadsfelt = ( barn, personType: PersonType.AndreForelder, erDød: forelderErDød, + toggleSpørOmMånedIkkeDato, }) ), pensjonsperioderUtland: pensjonsperioderUtland.map((periode, index) => @@ -220,6 +222,7 @@ export const andreForelderTilISøknadsfelt = ( barn, personType: PersonType.AndreForelder, erDød: forelderErDød, + toggleSpørOmMånedIkkeDato, }) ), arbeidsperioderNorge: arbeidsperioderNorge.map((periode, index) => @@ -232,6 +235,7 @@ export const andreForelderTilISøknadsfelt = ( barn, personType: PersonType.AndreForelder, erDød: forelderErDød, + toggleSpørOmMånedIkkeDato, }) ), pensjonsperioderNorge: pensjonsperioderNorge.map((periode, index) => @@ -244,6 +248,7 @@ export const andreForelderTilISøknadsfelt = ( barn, personType: PersonType.AndreForelder, erDød: forelderErDød, + toggleSpørOmMånedIkkeDato, }) ), andreUtbetalingsperioder: andreUtbetalingsperioder.map((periode, index) => @@ -255,6 +260,7 @@ export const andreForelderTilISøknadsfelt = ( personType: PersonType.AndreForelder, erDød: forelderErDød, barn, + toggleSpørOmMånedIkkeDato, }) ), eøsBarnetrygdsperioder: eøsBarnetrygdsperioder.map((periode, index) => diff --git a/src/frontend/utils/mappingTilKontrakt/andreUtbetalingsperioder.ts b/src/frontend/utils/mappingTilKontrakt/andreUtbetalingsperioder.ts index ee17c3333..25a7e2ca3 100644 --- a/src/frontend/utils/mappingTilKontrakt/andreUtbetalingsperioder.ts +++ b/src/frontend/utils/mappingTilKontrakt/andreUtbetalingsperioder.ts @@ -1,18 +1,18 @@ import { ESvar } from '@navikt/familie-form-elements'; import { IBarnMedISøknad } from '../../typer/barn'; +import { AlternativtSvarForInput, ISODateString } from '../../typer/common'; import { ISøknadsfelt, TilRestLocaleRecord } from '../../typer/kontrakt/generelle'; import { IUtbetalingsperiodeIKontraktFormat } from '../../typer/kontrakt/kontrakt'; import { IUtbetalingsperiode } from '../../typer/perioder'; import { PeriodePersonTypeMedBarnProps, PersonType } from '../../typer/personType'; import { IAndreUtbetalingerTekstinnhold } from '../../typer/sanity/modaler/andreUtbetalinger'; +import { ISøknadSpørsmål } from '../../typer/spørsmål'; +import { formaterDatostringKunMåned } from '../dato'; import { landkodeTilSpråk } from '../språk'; +import { uppercaseFørsteBokstav } from '../visning'; -import { - sammeVerdiAlleSpråk, - sammeVerdiAlleSpråkEllerUkjent, - verdiCallbackAlleSpråk, -} from './hjelpefunksjoner'; +import { sammeVerdiAlleSpråk, verdiCallbackAlleSpråk } from './hjelpefunksjoner'; interface UtbetalingsperiodeIKontraktFormatParams { periode: IUtbetalingsperiode; @@ -20,6 +20,7 @@ interface UtbetalingsperiodeIKontraktFormatParams { tilRestLocaleRecord: TilRestLocaleRecord; tekster: IAndreUtbetalingerTekstinnhold; barn?: IBarnMedISøknad; + toggleSpørOmMånedIkkeDato: boolean; } export const tilIAndreUtbetalingsperioderIKontraktFormat = ({ @@ -29,6 +30,7 @@ export const tilIAndreUtbetalingsperioderIKontraktFormat = ({ tilRestLocaleRecord, tekster, barn, + toggleSpørOmMånedIkkeDato, personType, }: UtbetalingsperiodeIKontraktFormatParams & PeriodePersonTypeMedBarnProps): ISøknadsfelt => { @@ -65,7 +67,7 @@ export const tilIAndreUtbetalingsperioderIKontraktFormat = ({ }, utbetalingFraDato: { label: tilRestLocaleRecord(tekster.startdato.sporsmal), - verdi: sammeVerdiAlleSpråk(utbetalingFraDato.svar), + verdi: datoTilVerdiForKontrakt(utbetalingFraDato), }, utbetalingTilDato: { label: tilRestLocaleRecord( @@ -73,12 +75,22 @@ export const tilIAndreUtbetalingsperioderIKontraktFormat = ({ ? tekster.sluttdatoFortid.sporsmal : tekster.sluttdatoFremtid.sporsmal ), - verdi: sammeVerdiAlleSpråkEllerUkjent( - tilRestLocaleRecord, - utbetalingTilDato.svar, + verdi: + utbetalingTilDato.svar === AlternativtSvarForInput.UKJENT && tekster.sluttdatoFremtid.checkboxLabel - ), + ? tilRestLocaleRecord(tekster.sluttdatoFremtid.checkboxLabel) + : datoTilVerdiForKontrakt(utbetalingTilDato), }, }), }; + + function datoTilVerdiForKontrakt(fraDatoArbeidsperiode: ISøknadSpørsmål) { + return toggleSpørOmMånedIkkeDato + ? verdiCallbackAlleSpråk(locale => + uppercaseFørsteBokstav( + formaterDatostringKunMåned(fraDatoArbeidsperiode.svar, locale) + ) + ) + : sammeVerdiAlleSpråk(fraDatoArbeidsperiode.svar); + } }; diff --git a/src/frontend/utils/mappingTilKontrakt/arbeidsperioder.ts b/src/frontend/utils/mappingTilKontrakt/arbeidsperioder.ts index e56e40d22..e35345f3a 100644 --- a/src/frontend/utils/mappingTilKontrakt/arbeidsperioder.ts +++ b/src/frontend/utils/mappingTilKontrakt/arbeidsperioder.ts @@ -1,18 +1,18 @@ import { ESvar } from '@navikt/familie-form-elements'; import { IBarnMedISøknad } from '../../typer/barn'; +import { AlternativtSvarForInput, ISODateString } from '../../typer/common'; import { ISøknadsfelt, TilRestLocaleRecord } from '../../typer/kontrakt/generelle'; import { IArbeidsperiodeIKontraktFormat } from '../../typer/kontrakt/kontrakt'; import { IArbeidsperiode } from '../../typer/perioder'; import { PeriodePersonTypeProps, PersonType } from '../../typer/personType'; import { IArbeidsperiodeTekstinnhold } from '../../typer/sanity/modaler/arbeidsperiode'; +import { ISøknadSpørsmål } from '../../typer/spørsmål'; +import { formaterDatostringKunMåned } from '../dato'; import { landkodeTilSpråk } from '../språk'; +import { uppercaseFørsteBokstav } from '../visning'; -import { - sammeVerdiAlleSpråk, - sammeVerdiAlleSpråkEllerUkjent, - verdiCallbackAlleSpråk, -} from './hjelpefunksjoner'; +import { sammeVerdiAlleSpråk, verdiCallbackAlleSpråk } from './hjelpefunksjoner'; interface ArbeidsperiodeIKontraktFormatParams { periode: IArbeidsperiode; @@ -21,6 +21,7 @@ interface ArbeidsperiodeIKontraktFormatParams { tilRestLocaleRecord: TilRestLocaleRecord; tekster: IArbeidsperiodeTekstinnhold; barn?: IBarnMedISøknad; + toggleSpørOmMånedIkkeDato: boolean; } export const tilIArbeidsperiodeIKontraktFormat = ({ @@ -30,6 +31,7 @@ export const tilIArbeidsperiodeIKontraktFormat = ({ tilRestLocaleRecord, tekster, barn, + toggleSpørOmMånedIkkeDato, personType, erDød, }: ArbeidsperiodeIKontraktFormatParams & @@ -78,19 +80,36 @@ export const tilIArbeidsperiodeIKontraktFormat = ({ fraDatoArbeidsperiode: fraDatoArbeidsperiode.svar ? { label: tilRestLocaleRecord(tekster.startdato.sporsmal), - verdi: sammeVerdiAlleSpråk(fraDatoArbeidsperiode.svar), + verdi: datoTilVerdiForKontrakt( + toggleSpørOmMånedIkkeDato, + fraDatoArbeidsperiode + ), } : null, tilDatoArbeidsperiode: tilDatoArbeidsperiode.svar ? { label: tilRestLocaleRecord(sluttdatoTekst.sporsmal), - verdi: sammeVerdiAlleSpråkEllerUkjent( - tilRestLocaleRecord, - tilDatoArbeidsperiode.svar, + verdi: + tilDatoArbeidsperiode.svar === AlternativtSvarForInput.UKJENT && tekster.sluttdatoFremtid.checkboxLabel - ), + ? tilRestLocaleRecord(tekster.sluttdatoFremtid.checkboxLabel) + : datoTilVerdiForKontrakt( + toggleSpørOmMånedIkkeDato, + tilDatoArbeidsperiode + ), } : null, }), }; }; + +function datoTilVerdiForKontrakt( + toggleSpørOmMånedIkkeDato: boolean, + fraDatoArbeidsperiode: ISøknadSpørsmål +) { + return toggleSpørOmMånedIkkeDato + ? verdiCallbackAlleSpråk(locale => + uppercaseFørsteBokstav(formaterDatostringKunMåned(fraDatoArbeidsperiode.svar, locale)) + ) + : sammeVerdiAlleSpråk(fraDatoArbeidsperiode.svar); +} diff --git a/src/frontend/utils/mappingTilKontrakt/barn.ts b/src/frontend/utils/mappingTilKontrakt/barn.ts index 03d6aac86..5729ea13b 100644 --- a/src/frontend/utils/mappingTilKontrakt/barn.ts +++ b/src/frontend/utils/mappingTilKontrakt/barn.ts @@ -34,7 +34,8 @@ export const barnISøknadsFormat = ( søker: ISøker, valgtSpråk: LocaleType, tekster: ITekstinnhold, - tilRestLocaleRecord: TilRestLocaleRecord + tilRestLocaleRecord: TilRestLocaleRecord, + toggleSpørOmMånedIkkeDato: boolean ): ISøknadIKontraktBarn => { /* eslint-disable @typescript-eslint/no-unused-vars */ const { @@ -135,12 +136,19 @@ export const barnISøknadsFormat = ( barn, valgtSpråk, tilRestLocaleRecord, - tekster + tekster, + toggleSpørOmMånedIkkeDato ) : null, omsorgsperson: omsorgsperson - ? omsorgspersonTilISøknadsfelt(omsorgsperson, barn, tilRestLocaleRecord, tekster) + ? omsorgspersonTilISøknadsfelt( + omsorgsperson, + barn, + tilRestLocaleRecord, + tekster, + toggleSpørOmMånedIkkeDato + ) : null, spørsmål: { ...spørmålISøknadsFormat( diff --git a/src/frontend/utils/mappingTilKontrakt/omsorgsperson.ts b/src/frontend/utils/mappingTilKontrakt/omsorgsperson.ts index 90ca2e27c..f523e5fb8 100644 --- a/src/frontend/utils/mappingTilKontrakt/omsorgsperson.ts +++ b/src/frontend/utils/mappingTilKontrakt/omsorgsperson.ts @@ -26,7 +26,8 @@ export const omsorgspersonTilISøknadsfelt = ( omsorgsperson: IOmsorgsperson, barn: IBarnMedISøknad, tilRestLocaleRecord: TilRestLocaleRecord, - tekster: ITekstinnhold + tekster: ITekstinnhold, + toggleSpørOmMånedIkkeDato: boolean ): IOmsorgspersonIKontraktFormat => { const { navn, @@ -104,6 +105,7 @@ export const omsorgspersonTilISøknadsfelt = ( tilRestLocaleRecord, tekster: tekster.FELLES.modaler.arbeidsperiode.omsorgsperson, personType: PersonType.Omsorgsperson, + toggleSpørOmMånedIkkeDato, }) ), arbeidNorge: søknadsfeltBarn( @@ -119,6 +121,7 @@ export const omsorgspersonTilISøknadsfelt = ( tilRestLocaleRecord, tekster: tekster.FELLES.modaler.arbeidsperiode.omsorgsperson, personType: PersonType.Omsorgsperson, + toggleSpørOmMånedIkkeDato, }) ), pensjonUtland: søknadsfeltBarn( @@ -135,6 +138,7 @@ export const omsorgspersonTilISøknadsfelt = ( tekster: tekster.FELLES.modaler.pensjonsperiode.omsorgsperson, barn: barn, personType: PersonType.Omsorgsperson, + toggleSpørOmMånedIkkeDato, }) ), pensjonNorge: søknadsfeltBarn( @@ -151,6 +155,7 @@ export const omsorgspersonTilISøknadsfelt = ( tekster: tekster.FELLES.modaler.pensjonsperiode.omsorgsperson, barn: barn, personType: PersonType.Omsorgsperson, + toggleSpørOmMånedIkkeDato, }) ), andreUtbetalinger: søknadsfeltBarn( @@ -166,6 +171,7 @@ export const omsorgspersonTilISøknadsfelt = ( tilRestLocaleRecord, tekster: tekster.FELLES.modaler.andreUtbetalinger.omsorgsperson, barn, + toggleSpørOmMånedIkkeDato, }) ), pågåendeSøknadFraAnnetEøsLand: søknadsfeltBarn( diff --git a/src/frontend/utils/mappingTilKontrakt/pensjonsperioder.ts b/src/frontend/utils/mappingTilKontrakt/pensjonsperioder.ts index b4fde55f8..9ea38f5a6 100644 --- a/src/frontend/utils/mappingTilKontrakt/pensjonsperioder.ts +++ b/src/frontend/utils/mappingTilKontrakt/pensjonsperioder.ts @@ -6,7 +6,9 @@ import { IPensjonsperiodeIKontraktFormat } from '../../typer/kontrakt/kontrakt'; import { IPensjonsperiode } from '../../typer/perioder'; import { PeriodePersonTypeMedBarnProps, PersonType } from '../../typer/personType'; import { IPensjonsperiodeTekstinnhold } from '../../typer/sanity/modaler/pensjonsperiode'; +import { formaterDatostringKunMåned } from '../dato'; import { landkodeTilSpråk } from '../språk'; +import { uppercaseFørsteBokstav } from '../visning'; import { sammeVerdiAlleSpråk, verdiCallbackAlleSpråk } from './hjelpefunksjoner'; @@ -17,6 +19,7 @@ interface PensjonsperiodeIKontraktFormatParams { tilRestLocaleRecord: TilRestLocaleRecord; tekster: IPensjonsperiodeTekstinnhold; barn?: IBarnMedISøknad; + toggleSpørOmMånedIkkeDato: boolean; } export const tilIPensjonsperiodeIKontraktFormat = ({ @@ -26,6 +29,7 @@ export const tilIPensjonsperiodeIKontraktFormat = ({ tilRestLocaleRecord, tekster, barn, + toggleSpørOmMånedIkkeDato, personType, erDød, }: PensjonsperiodeIKontraktFormatParams & @@ -74,7 +78,13 @@ export const tilIPensjonsperiodeIKontraktFormat = ({ barnetsNavn: barn?.navn, } ), - verdi: sammeVerdiAlleSpråk(pensjonFra.svar), + verdi: toggleSpørOmMånedIkkeDato + ? verdiCallbackAlleSpråk(locale => + uppercaseFørsteBokstav( + formaterDatostringKunMåned(pensjonFra.svar, locale) + ) + ) + : sammeVerdiAlleSpråk(pensjonFra.svar), } : null, pensjonTil: pensjonTil.svar @@ -84,7 +94,13 @@ export const tilIPensjonsperiodeIKontraktFormat = ({ ? tekster.sluttdatoFortid.sporsmal : tekster.sluttdatoFremtid.sporsmal ), - verdi: sammeVerdiAlleSpråk(pensjonTil.svar), + verdi: toggleSpørOmMånedIkkeDato + ? verdiCallbackAlleSpråk(locale => + uppercaseFørsteBokstav( + formaterDatostringKunMåned(pensjonTil.svar, locale) + ) + ) + : sammeVerdiAlleSpråk(pensjonTil.svar), } : null, }), diff --git "a/src/frontend/utils/mappingTilKontrakt/s\303\270knad.ts" "b/src/frontend/utils/mappingTilKontrakt/s\303\270knad.ts" index b1718d6cf..155706a5c 100644 --- "a/src/frontend/utils/mappingTilKontrakt/s\303\270knad.ts" +++ "b/src/frontend/utils/mappingTilKontrakt/s\303\270knad.ts" @@ -57,7 +57,8 @@ export const dataISøknadKontraktFormat = ( søknad: ISøknad, tekster: ITekstinnhold, tilRestLocaleRecord: TilRestLocaleRecord, - kontraktVersjon: number + kontraktVersjon: number, + toggleSpørOmMånedIkkeDato: boolean ): ISøknadKontrakt => { const { søker } = søknad; @@ -153,6 +154,7 @@ export const dataISøknadKontraktFormat = ( tilRestLocaleRecord, tekster: tekster.FELLES.modaler.arbeidsperiode.søker, personType: PersonType.Søker, + toggleSpørOmMånedIkkeDato, }) ), arbeidsperioderNorge: arbeidsperioderNorge.map((periode, index) => @@ -163,6 +165,7 @@ export const dataISøknadKontraktFormat = ( tilRestLocaleRecord, tekster: tekster.FELLES.modaler.arbeidsperiode.søker, personType: PersonType.Søker, + toggleSpørOmMånedIkkeDato, }) ), pensjonsperioderUtland: pensjonsperioderUtland.map((periode, index) => @@ -173,6 +176,7 @@ export const dataISøknadKontraktFormat = ( tilRestLocaleRecord, tekster: tekster.FELLES.modaler.pensjonsperiode.søker, personType: PersonType.Søker, + toggleSpørOmMånedIkkeDato, }) ), pensjonsperioderNorge: pensjonsperioderNorge.map((periode, index) => @@ -183,6 +187,7 @@ export const dataISøknadKontraktFormat = ( tilRestLocaleRecord, tekster: tekster.FELLES.modaler.pensjonsperiode.søker, personType: PersonType.Søker, + toggleSpørOmMånedIkkeDato, }) ), andreUtbetalingsperioder: andreUtbetalingsperioder.map((periode, index) => @@ -192,11 +197,19 @@ export const dataISøknadKontraktFormat = ( tilRestLocaleRecord, tekster: tekster.FELLES.modaler.andreUtbetalinger.søker, personType: PersonType.Søker, + toggleSpørOmMånedIkkeDato, }) ), }, barn: barnInkludertISøknaden.map(barn => - barnISøknadsFormat(barn, søker, valgtSpråk, tekster, tilRestLocaleRecord) + barnISøknadsFormat( + barn, + søker, + valgtSpråk, + tekster, + tilRestLocaleRecord, + toggleSpørOmMånedIkkeDato + ) ), spørsmål: { erNoenAvBarnaFosterbarn: søknadsfelt( From 3d5f94057eb8211615bd323b67258830762e2748 Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Tue, 18 Mar 2025 12:35:27 +0100 Subject: [PATCH 08/16] =?UTF-8?q?Endrer=20fra=20true=20prop=20til=20=C3=A5?= =?UTF-8?q?=20bruke=20toggle=20verdien=20i=20ArbeidsperiodeOppsummering.ts?= =?UTF-8?q?x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Arbeidsperiode/ArbeidsperiodeOppsummering.tsx | 2 +- src/frontend/utils/dato.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx index 12e96665f..c34b3c3cf 100644 --- a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx +++ b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx @@ -145,7 +145,7 @@ export const ArbeidsperiodeOppsummering: React.FC diff --git a/src/frontend/utils/dato.tsx b/src/frontend/utils/dato.tsx index 9054837d1..ff6e8f53f 100644 --- a/src/frontend/utils/dato.tsx +++ b/src/frontend/utils/dato.tsx @@ -9,12 +9,12 @@ import { isFuture, isToday, isValid, + type Locale, parse, startOfDay, startOfToday, sub, } from 'date-fns'; -import type { Locale } from 'date-fns/locale'; import { enGB, nb, nn } from 'date-fns/locale'; import { feil, type FeltState, ok } from '@navikt/familie-skjema'; From 94a2ca1d61b91f8828e930e1f378042c9a5406a0 Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Tue, 18 Mar 2025 13:40:04 +0100 Subject: [PATCH 09/16] Fjerner duplikat tilDatoArbeidsperiode oppsummeringfelt --- .../ArbeidsperiodeOppsummering.tsx | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx index c34b3c3cf..573282d8a 100644 --- a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx +++ b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering.tsx @@ -131,25 +131,6 @@ export const ArbeidsperiodeOppsummering: React.FC )} - {tilDatoArbeidsperiode.svar && ( - - } - søknadsvar={formaterMånedMedUkjent( - tilDatoArbeidsperiode.svar, - plainTekst(teksterForModal.sluttdatoFremtid.checkboxLabel), - toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO], - valgtLocale - )} - /> - )} ); }; From 847238ffc266940206513d808f573087783384bc Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Tue, 18 Mar 2025 15:07:33 +0100 Subject: [PATCH 10/16] Fjerner duplikat pensjon fra og til datovelger --- .../Pensjonsmodal/Pensjonsmodal.tsx | 37 ------------------- 1 file changed, 37 deletions(-) diff --git a/src/frontend/components/Felleskomponenter/Pensjonsmodal/Pensjonsmodal.tsx b/src/frontend/components/Felleskomponenter/Pensjonsmodal/Pensjonsmodal.tsx index 26d92d009..ec89a2f2f 100644 --- a/src/frontend/components/Felleskomponenter/Pensjonsmodal/Pensjonsmodal.tsx +++ b/src/frontend/components/Felleskomponenter/Pensjonsmodal/Pensjonsmodal.tsx @@ -216,43 +216,6 @@ export const PensjonModal: React.FC = ({ )} )} - {pensjonFraDato.erSynlig && ( - - } - skjema={skjema} - avgrensMaxDato={periodenErAvsluttet ? gårsdagensDato() : dagensDato()} - /> - )} - {pensjonTilDato.erSynlig && ( - - } - skjema={skjema} - avgrensMaxDato={dagensDato()} - tilhørendeFraOgMedFelt={pensjonFraDato} - dynamisk - /> - )} {visFeiloppsummering(skjema) && } ); From 66f569ee220e8c6c004add7f667e0edf45635622 Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Tue, 18 Mar 2025 15:11:41 +0100 Subject: [PATCH 11/16] Flytter SkjemaCheckboxForSanity inn i toggle conditional slik at den kan ligge i samme div som tilDatoArbeidsperiode --- .../Arbeidsperiode/ArbeidsperiodeModal.tsx | 108 ++++++++++-------- 1 file changed, 60 insertions(+), 48 deletions(-) diff --git a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx index 45f4ce407..c7ace5b3d 100644 --- a/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx +++ b/src/frontend/components/Felleskomponenter/Arbeidsperiode/ArbeidsperiodeModal.tsx @@ -156,29 +156,38 @@ export const ArbeidsperiodeModal: React.FC = ({ /> )} {tilDatoArbeidsperiode.erSynlig && ( - - } - tidligsteValgbareMåned={minTilDatoForUtbetalingEllerArbeidsperiode( - periodenErAvsluttet, - skjema.felter.fraDatoArbeidsperiode.verdi - )} - senesteValgbareMåned={ - periodenErAvsluttet ? sisteDagDenneMåneden() : undefined - } - felt={skjema.felter.tilDatoArbeidsperiode} - visFeilmeldinger={skjema.visFeilmeldinger} - dagIMåneden={DagIMåneden.SISTE_DAG} - kanIkkeVæreFremtid={periodenErAvsluttet} - kanIkkeVæreFortid={!periodenErAvsluttet} - /> +
+ + } + tidligsteValgbareMåned={minTilDatoForUtbetalingEllerArbeidsperiode( + periodenErAvsluttet, + skjema.felter.fraDatoArbeidsperiode.verdi + )} + senesteValgbareMåned={ + periodenErAvsluttet ? sisteDagDenneMåneden() : undefined + } + felt={skjema.felter.tilDatoArbeidsperiode} + visFeilmeldinger={skjema.visFeilmeldinger} + dagIMåneden={DagIMåneden.SISTE_DAG} + kanIkkeVæreFremtid={periodenErAvsluttet} + kanIkkeVæreFortid={!periodenErAvsluttet} + disabled={ + skjema.felter.tilDatoArbeidsperiodeUkjent.verdi === ESvar.JA + } + /> + +
)} ) : ( @@ -192,34 +201,37 @@ export const ArbeidsperiodeModal: React.FC = ({ /> )} {tilDatoArbeidsperiode.erSynlig && ( - - } - avgrensMinDato={minTilDatoForUtbetalingEllerArbeidsperiode( - periodenErAvsluttet, - skjema.felter.fraDatoArbeidsperiode.verdi - )} - avgrensMaxDato={periodenErAvsluttet ? dagensDato() : undefined} - disabled={skjema.felter.tilDatoArbeidsperiodeUkjent.verdi === ESvar.JA} - /> +
+ + } + avgrensMinDato={minTilDatoForUtbetalingEllerArbeidsperiode( + periodenErAvsluttet, + skjema.felter.fraDatoArbeidsperiode.verdi + )} + avgrensMaxDato={periodenErAvsluttet ? dagensDato() : undefined} + disabled={ + skjema.felter.tilDatoArbeidsperiodeUkjent.verdi === ESvar.JA + } + /> + +
)} )} - {tilDatoArbeidsperiode.erSynlig && ( - - )} + {visFeiloppsummering(skjema) && } ); From 8ee33d211493d2e2f90be20e176b35a10591180b Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Tue, 18 Mar 2025 15:23:39 +0100 Subject: [PATCH 12/16] =?UTF-8?q?Legger=20til=20tilPensjonperiodeSluttdato?= =?UTF-8?q?Avgrensning=20slik=20at=20det=20er=20mulig=20=C3=A5=20velge=20s?= =?UTF-8?q?luttdato-m=C3=A5ned=20i=20pensjonmodal=20uten=20feilmelding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Felleskomponenter/Pensjonsmodal/usePensjonSkjema.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/frontend/components/Felleskomponenter/Pensjonsmodal/usePensjonSkjema.tsx b/src/frontend/components/Felleskomponenter/Pensjonsmodal/usePensjonSkjema.tsx index c6ed7be39..a379a44fa 100644 --- a/src/frontend/components/Felleskomponenter/Pensjonsmodal/usePensjonSkjema.tsx +++ b/src/frontend/components/Felleskomponenter/Pensjonsmodal/usePensjonSkjema.tsx @@ -89,6 +89,10 @@ export const usePensjonSkjema = ({ avhengigheter: { mottarPensjonNå }, }); + const tilPensjonperiodeSluttdatoAvgrensning = toggles[EFeatureToggle.SPOR_OM_MANED_IKKE_DATO] + ? sisteDagDenneMåneden() + : dagensDato(); + const pensjonTilDato = useDatovelgerFeltForSanity({ søknadsfelt: { id: PensjonsperiodeSpørsmålId.tilDatoPensjon, @@ -100,7 +104,7 @@ export const usePensjonSkjema = ({ feilmelding: periodenErAvsluttet ? teksterForPersonType.sluttdatoFortid.feilmelding : teksterForPersonType.sluttdatoFremtid.feilmelding, - sluttdatoAvgrensning: dagensDato(), + sluttdatoAvgrensning: tilPensjonperiodeSluttdatoAvgrensning, startdatoAvgrensning: dagenEtterDato(stringTilDate(pensjonFraDato.verdi)), avhengigheter: { mottarPensjonNå, pensjonFraDato }, nullstillVedAvhengighetEndring: false, From cabc38168a2a3bee1186ce884131bda23322eb92 Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Thu, 20 Mar 2025 10:35:27 +0100 Subject: [PATCH 13/16] =?UTF-8?q?Legger=20til=20Sanity=20tekster=20for=20d?= =?UTF-8?q?ato/m=C3=A5ned=20placeholder=20og=20format?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Felleskomponenter/Datovelger/Datovelger.tsx | 14 +++++--------- .../M\303\245ned\303\205rVelger.tsx" | 4 ++++ src/frontend/typer/sanity/sanity.ts | 1 + src/frontend/typer/sanity/tekstInnhold.ts | 8 ++++++++ src/frontend/utils/sanity.ts | 5 +++++ 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.tsx b/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.tsx index 1b86770b9..7457528f6 100644 --- a/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.tsx +++ b/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.tsx @@ -1,11 +1,11 @@ import React, { ReactNode, useEffect } from 'react'; import { formatISO, isAfter, startOfDay } from 'date-fns'; -import { useIntl } from 'react-intl'; import { BodyShort, ErrorMessage, DatePicker, useDatepicker } from '@navikt/ds-react'; import type { Felt, ISkjema } from '@navikt/familie-skjema'; +import { useApp } from '../../../context/AppContext'; import { useSpråk } from '../../../context/SpråkContext'; import { ISODateString } from '../../../typer/common'; import { SkjemaFeltTyper } from '../../../typer/skjema'; @@ -17,7 +17,6 @@ import { tidenesEnde, tidenesMorgen, } from '../../../utils/dato'; -import SpråkTekst from '../SpråkTekst/SpråkTekst'; interface DatoVelgerProps { felt: Felt; @@ -44,8 +43,9 @@ const Datovelger: React.FC = ({ dynamisk = false, strategy = 'fixed', }) => { - const { formatMessage } = useIntl(); const { valgtLocale } = useSpråk(); + const { tekster, plainTekst } = useApp(); + const { datoformatHjelpetekst, datoformatPlaceholder } = tekster().FELLES.hjelpeteksterForInput; const minDatoErIFremtiden = () => tilhørendeFraOgMedFelt?.verdi && @@ -113,12 +113,8 @@ const Datovelger: React.FC = ({ disabled={disabled} size={'medium'} label={label} - description={ - - - - } - placeholder={formatMessage({ id: 'felles.velg-dato.placeholder' })} + description={{plainTekst(datoformatHjelpetekst)}} + placeholder={plainTekst(datoformatPlaceholder)} error={!!(felt.feilmelding && skjema.visFeilmeldinger)} /> diff --git "a/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" "b/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" index 0713da9a9..0cfd4fcd7 100644 --- "a/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" +++ "b/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" @@ -53,6 +53,9 @@ export const MånedÅrVelger: React.FC = ({ const { valgtLocale } = useSpråk(); const { tekster, plainTekst } = useApp(); const [error, setError] = useState(undefined); + + const { manedformatPlaceholder } = tekster().FELLES.hjelpeteksterForInput; + const formateringsfeilmeldinger = tekster()[ESanitySteg.FELLES].formateringsfeilmeldinger; const nullstillOgSettFeilmelding = (feilmelding: Feilmelding) => { @@ -109,6 +112,7 @@ export const MånedÅrVelger: React.FC = ({ Date: Fri, 21 Mar 2025 10:42:07 +0100 Subject: [PATCH 14/16] =?UTF-8?q?Fikser=20'S=C3=B8knaden=20har=20lastet=20?= =?UTF-8?q?uten=20tekster'=20feil=20i=20Datovelger.test.tsx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Felleskomponenter/Datovelger/Datovelger.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.test.tsx b/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.test.tsx index 505fe3040..89be656b2 100644 --- a/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.test.tsx +++ b/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.test.tsx @@ -11,7 +11,7 @@ import { ISODateString } from '../../../typer/common'; import { SkjemaFeltTyper } from '../../../typer/skjema'; import * as datoUtils from '../../../utils/dato'; import { dagensDato } from '../../../utils/dato'; -import { silenceConsoleErrors, TestProvidere } from '../../../utils/testing'; +import { silenceConsoleErrors, spyOnUseApp, TestProvidere } from '../../../utils/testing'; import Datovelger from './Datovelger'; @@ -31,6 +31,7 @@ const IntlProviderMedLocale = ({ children }) => {child describe('Datovelger', () => { beforeEach(() => { + spyOnUseApp({}); silenceConsoleErrors(); window.ResizeObserver = ResizeObserver; }); From 3a2dddc6daef43a94587f9e460cdd153884d3167 Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Mon, 24 Mar 2025 14:49:14 +0100 Subject: [PATCH 15/16] =?UTF-8?q?Fjerner=20un=C3=B8dvendig=20export=20for?= =?UTF-8?q?=20Feilmelding=20enum=20i=20M=C3=A5ned=C3=85rVelger.tsx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../M\303\245ned\303\205rVelger.tsx" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" "b/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" index 0cfd4fcd7..4cc3dd1ae 100644 --- "a/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" +++ "b/src/frontend/components/Felleskomponenter/M\303\245ned\303\205rVelger/M\303\245ned\303\205rVelger.tsx" @@ -26,7 +26,7 @@ interface MånedÅrVelgerProps { - vurder å lagre som Date og gjøre parsing/format mot mellomlagring og innsending - i neste runde */ -export enum Feilmelding { +enum Feilmelding { FØR_MIN_DATO = 'FØR_MIN_DATO', ETTER_MAKS_DATO = 'ETTER_MAKS_DATO', UGYLDIG_DATO = 'UGYLDIG_DATO', From 36cc99b5ad3b661f51b152338e1d19e97afb801c Mon Sep 17 00:00:00 2001 From: ole-kristian-rudjord Date: Tue, 25 Mar 2025 10:17:34 +0100 Subject: [PATCH 16/16] Endrer argument navn i datoTilVerdiForKontrakt --- .../utils/mappingTilKontrakt/andreUtbetalingsperioder.ts | 8 +++----- src/frontend/utils/mappingTilKontrakt/arbeidsperioder.ts | 6 +++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/frontend/utils/mappingTilKontrakt/andreUtbetalingsperioder.ts b/src/frontend/utils/mappingTilKontrakt/andreUtbetalingsperioder.ts index 25a7e2ca3..e1726f62a 100644 --- a/src/frontend/utils/mappingTilKontrakt/andreUtbetalingsperioder.ts +++ b/src/frontend/utils/mappingTilKontrakt/andreUtbetalingsperioder.ts @@ -84,13 +84,11 @@ export const tilIAndreUtbetalingsperioderIKontraktFormat = ({ }), }; - function datoTilVerdiForKontrakt(fraDatoArbeidsperiode: ISøknadSpørsmål) { + function datoTilVerdiForKontrakt(skjemaSpørsmål: ISøknadSpørsmål) { return toggleSpørOmMånedIkkeDato ? verdiCallbackAlleSpråk(locale => - uppercaseFørsteBokstav( - formaterDatostringKunMåned(fraDatoArbeidsperiode.svar, locale) - ) + uppercaseFørsteBokstav(formaterDatostringKunMåned(skjemaSpørsmål.svar, locale)) ) - : sammeVerdiAlleSpråk(fraDatoArbeidsperiode.svar); + : sammeVerdiAlleSpråk(skjemaSpørsmål.svar); } }; diff --git a/src/frontend/utils/mappingTilKontrakt/arbeidsperioder.ts b/src/frontend/utils/mappingTilKontrakt/arbeidsperioder.ts index e35345f3a..2f1b2bc90 100644 --- a/src/frontend/utils/mappingTilKontrakt/arbeidsperioder.ts +++ b/src/frontend/utils/mappingTilKontrakt/arbeidsperioder.ts @@ -105,11 +105,11 @@ export const tilIArbeidsperiodeIKontraktFormat = ({ function datoTilVerdiForKontrakt( toggleSpørOmMånedIkkeDato: boolean, - fraDatoArbeidsperiode: ISøknadSpørsmål + skjemaSpørsmål: ISøknadSpørsmål ) { return toggleSpørOmMånedIkkeDato ? verdiCallbackAlleSpråk(locale => - uppercaseFørsteBokstav(formaterDatostringKunMåned(fraDatoArbeidsperiode.svar, locale)) + uppercaseFørsteBokstav(formaterDatostringKunMåned(skjemaSpørsmål.svar, locale)) ) - : sammeVerdiAlleSpråk(fraDatoArbeidsperiode.svar); + : sammeVerdiAlleSpråk(skjemaSpørsmål.svar); }