diff --git a/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.tsx b/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.tsx index f219019da..1b86770b9 100644 --- a/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.tsx +++ b/src/frontend/components/Felleskomponenter/Datovelger/Datovelger.tsx @@ -109,6 +109,7 @@ const Datovelger: React.FC = ({ =
felt.validerOgSettFelt(event.target.checked ? ESvar.JA : ESvar.NEI) diff --git a/src/frontend/components/Felleskomponenter/SkjemaFieldset.tsx b/src/frontend/components/Felleskomponenter/SkjemaFieldset.tsx index 2b1998fd9..b6d31d242 100644 --- a/src/frontend/components/Felleskomponenter/SkjemaFieldset.tsx +++ b/src/frontend/components/Felleskomponenter/SkjemaFieldset.tsx @@ -5,15 +5,16 @@ import { Fieldset, VStack } from '@navikt/ds-react'; import SpråkTekst from './SpråkTekst/SpråkTekst'; const SkjemaFieldset: React.FC<{ + legend?: ReactNode; legendSpråkId: string; språkValues?: { [key: string]: ReactNode }; dynamisk?: boolean; children?: ReactNode; -}> = ({ legendSpråkId, språkValues, dynamisk = false, children }) => { +}> = ({ legend, legendSpråkId, språkValues, dynamisk = false, children }) => { return (
} + legend={legend ? legend : } > {children}
diff --git "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/AndreForelder.tsx" "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/AndreForelder.tsx" index f3264391b..45504aa2b 100644 --- "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/AndreForelder.tsx" +++ "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/AndreForelder.tsx" @@ -14,14 +14,13 @@ import { dagensDato } from '../../../utils/dato'; import { Arbeidsperiode } from '../../Felleskomponenter/Arbeidsperiode/Arbeidsperiode'; import Datovelger from '../../Felleskomponenter/Datovelger/Datovelger'; import { Pensjonsperiode } from '../../Felleskomponenter/Pensjonsmodal/Pensjonsperiode'; -import { SkjemaCheckbox } from '../../Felleskomponenter/SkjemaCheckbox/SkjemaCheckbox'; -import { SkjemaFeltInput } from '../../Felleskomponenter/SkjemaFeltInput/SkjemaFeltInput'; +import TekstBlock from '../../Felleskomponenter/Sanity/TekstBlock'; +import { SkjemaCheckboxForSanity } from '../../Felleskomponenter/SkjemaCheckbox/SkjemaCheckboxForSanity'; +import { SkjemaFeltInputForSanity } from '../../Felleskomponenter/SkjemaFeltInput/SkjemaFeltInputForSanity'; import SkjemaFieldset from '../../Felleskomponenter/SkjemaFieldset'; -import SpråkTekst from '../../Felleskomponenter/SpråkTekst/SpråkTekst'; import AndreForelderOppsummering from '../Oppsummering/OppsummeringSteg/OmBarnet/AndreForelderOppsummering'; import SammeSomAnnetBarnRadio from './SammeSomAnnetBarnRadio'; -import { OmBarnetSpørsmålsId, omBarnetSpørsmålSpråkId } from './spørsmål'; const AndreForelder: React.FC<{ barn: IBarnMedISøknad; @@ -46,10 +45,18 @@ const AndreForelder: React.FC<{ annetBarn => annetBarn.id === skjema.felter.sammeForelderSomAnnetBarn.verdi ); - const { barnetsAndreForelder } = tekster().OM_BARNET; + const { + barnetsAndreForelder, + navnAndreForelder, + foedselsnummerDnummerAndreForelder, + foedselsdatoAndreForelder, + } = tekster().OM_BARNET; return ( - + {skjema.felter.sammeForelderSomAnnetBarn.erSynlig && (
- } disabled={ skjema.felter.andreForelderKanIkkeGiOpplysninger.verdi === ESvar.JA } /> - } />
{skjema.felter.andreForelderFnr.erSynlig && (
- } disabled={skjema.felter.andreForelderFnrUkjent.verdi === ESvar.JA} /> - + } />
)} @@ -106,28 +109,18 @@ const AndreForelder: React.FC<{ - } + label={} avgrensMaxDato={dagensDato()} disabled={ skjema.felter.andreForelderFødselsdatoUkjent.verdi === ESvar.JA } strategy={'absolute'} /> - + } />
)} diff --git "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/OmBarnet.test.tsx" "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/OmBarnet.test.tsx" index 82f0fcc18..0405198f9 100644 --- "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/OmBarnet.test.tsx" +++ "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/OmBarnet.test.tsx" @@ -19,7 +19,6 @@ import { silenceConsoleErrors, spyOnUseApp, TestProvidere, - TestProvidereMedEkteTekster, } from '../../../utils/testing'; import { EøsBarnSpørsmålId } from '../EøsSteg/Barn/spørsmål'; import { OmBarnaDineSpørsmålId } from '../OmBarnaDine/spørsmål'; @@ -289,23 +288,6 @@ describe('OmBarnet', () => { silenceConsoleErrors(); }); - test(`Kan rendre Om Barnet og alle tekster finnes i språkfil`, async () => { - spyOnUseApp({ - barnInkludertISøknaden: [jens], - sisteUtfylteStegIndex: 4, - }); - - await act(async () => { - render( - - - - ); - }); - - expect(console.error).toHaveBeenCalledTimes(0); - }); - test(`Kan navigere mellom to barn`, async () => { spyOnUseApp({ barnInkludertISøknaden: [jens, line], @@ -313,7 +295,7 @@ describe('OmBarnet', () => { dokumentasjon: [], }); - const { findByText, findByTestId } = render( + const { findByTestId, getByTestId } = render( { const location = await findByTestId('location'); expect(JSON.parse(location.innerHTML).pathname).toEqual('/om-barnet/barn/1'); - const jensTittel = await findByText('Om Jens'); - expect(jensTittel).toBeInTheDocument(); + const stegTittel = await getByTestId('steg-tittel'); + expect(stegTittel).toBeInTheDocument(); const gåVidere = await findByTestId('neste-steg'); await act(() => gåVidere.click()); @@ -343,7 +325,7 @@ describe('OmBarnet', () => { dokumentasjon: [], }); - const { findByText, findByTestId } = render( + const { findByTestId, getByTestId } = render( { const location = await findByTestId('location'); expect(JSON.parse(location.innerHTML).pathname).toEqual('/om-barnet/barn/1'); - const jensTittel = await findByText('Om Jens'); - expect(jensTittel).toBeInTheDocument(); + const stegTittel = await getByTestId('steg-tittel'); + expect(stegTittel).toBeInTheDocument(); const gåVidere = await findByTestId('neste-steg'); await act(() => gåVidere.click()); @@ -382,7 +364,7 @@ describe('OmBarnet', () => { dokumentasjon: [], }); - const { findByLabelText, findByText, queryByText } = render( + const { getByTestId, queryByTestId } = render( { ); - const ikkeOppgiOpplysninger = await findByLabelText( - /ombarnet.andre-forelder.navn-ukjent.spm/ - ); - const andreForelderFnrLabel = await findByText(/felles.fødsels-eller-dnummer.label/); + const ikkeOppgiOpplysninger = await getByTestId('andre-forelder-kan-ikke-gi-opplysninger'); + const andreForelderFnrLabel = await queryByTestId('andre-forelder-fødsels-/dnummer-ukjent'); + const andreForelderFødselsdato = await queryByTestId('andreForelderFødselsdato'); - expect(queryByText(/felles.fødselsdato.label/)).not.toBeInTheDocument(); + expect(andreForelderFødselsdato).not.toBeInTheDocument(); expect(andreForelderFnrLabel).toBeInTheDocument(); + await act(() => ikkeOppgiOpplysninger.click()); + expect(andreForelderFnrLabel).not.toBeInTheDocument(); - expect(queryByText(/felles.fødselsdato.label/)).not.toBeInTheDocument(); + expect(andreForelderFødselsdato).not.toBeInTheDocument(); }); test('Får opp feilmelding ved feil postnummer', async () => { @@ -425,20 +408,19 @@ describe('OmBarnet', () => { const { erStegUtfyltFrafør } = spyOnUseApp(oppdatertSøknad); erStegUtfyltFrafør.mockReturnValue(false); - const { queryByText, findAllByText, findByTestId } = render( + const { findByTestId, getByTestId } = render( ); const gåVidere = await findByTestId('neste-steg'); - expect( - queryByText(/ombarnet.institusjon.postnummer.format.feilmelding/) - ).not.toBeInTheDocument(); act(() => gåVidere.click()); - const feilmelding = await findAllByText( - /ombarnet.institusjon.postnummer.format.feilmelding/ - ); - expect(feilmelding).toHaveLength(2); + + const feiloppsummering = getByTestId('skjema-feiloppsummering'); + expect(feiloppsummering).toBeInTheDocument(); + + const feilmeldingInstitusjon = getByTestId('feilmelding-institusjonspostnummer'); + expect(feilmeldingInstitusjon).toBeInTheDocument(); }); }); diff --git "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/OmBarnet.tsx" "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/OmBarnet.tsx" index 1fcfb59d7..02a8ae394 100644 --- "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/OmBarnet.tsx" +++ "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/OmBarnet.tsx" @@ -1,30 +1,26 @@ import React from 'react'; -import { BodyLong } from '@navikt/ds-react'; import { ESvar } from '@navikt/familie-form-elements'; import { useApp } from '../../../context/AppContext'; import { barnDataKeySpørsmål } from '../../../typer/barn'; import { BarnetsId } from '../../../typer/common'; import { Dokumentasjonsbehov } from '../../../typer/kontrakt/dokumentasjon'; -import { ESanitySteg } from '../../../typer/sanity/sanity'; +import { ESanitySteg, Typografi } from '../../../typer/sanity/sanity'; import Datovelger from '../../Felleskomponenter/Datovelger/Datovelger'; -import EksternLenke from '../../Felleskomponenter/EksternLenke/EksternLenke'; -import JaNeiSpm from '../../Felleskomponenter/JaNeiSpm/JaNeiSpm'; -import KomponentGruppe from '../../Felleskomponenter/KomponentGruppe/KomponentGruppe'; -import { SkjemaCheckbox } from '../../Felleskomponenter/SkjemaCheckbox/SkjemaCheckbox'; +import JaNeiSpmForSanity from '../../Felleskomponenter/JaNeiSpm/JaNeiSpmForSanity'; +import TekstBlock from '../../Felleskomponenter/Sanity/TekstBlock'; +import { SkjemaCheckboxForSanity } from '../../Felleskomponenter/SkjemaCheckbox/SkjemaCheckboxForSanity'; import SkjemaFieldset from '../../Felleskomponenter/SkjemaFieldset'; -import SpråkTekst from '../../Felleskomponenter/SpråkTekst/SpråkTekst'; import Steg from '../../Felleskomponenter/Steg/Steg'; import AndreForelder from './AndreForelder'; import { OmBarnetHeader } from './OmBarnetHeader'; import Oppfølgningsspørsmål from './Oppfølgningsspørsmål'; -import { OmBarnetSpørsmålsId, omBarnetSpørsmålSpråkId } from './spørsmål'; import { barnErUnder16År, useOmBarnet } from './useOmBarnet'; const OmBarnet: React.FC<{ barnetsId: BarnetsId }> = ({ barnetsId }) => { - const { tekster } = useApp(); + const { tekster, plainTekst } = useApp(); const { skjema, @@ -45,11 +41,20 @@ const OmBarnet: React.FC<{ barnetsId: BarnetsId }> = ({ barnetsId }) => { } = useOmBarnet(barnetsId); const stegTekster = tekster()[ESanitySteg.OM_BARNET]; - const { omBarnetGuide } = stegTekster; + const { + omBarnetTittel, + omBarnetGuide, + bosted, + bostedInfo, + borBarnFastSammenMedDeg, + deltBosted, + boddSammenMedAndreForelder, + naarFlyttetFraAndreForelder, + } = stegTekster; return barn ? ( } + tittel={} guide={omBarnetGuide} skjema={{ validerFelterOgVisFeilmelding, @@ -102,52 +107,39 @@ const OmBarnet: React.FC<{ barnetsId: BarnetsId }> = ({ barnetsId }) => { /> )} {skjema.felter.borFastMedSøker.erSynlig && ( - + {barn.andreForelderErDød?.svar !== ESvar.JA && ( - - - - - - +
+ +
)} - {skjema.felter.skriftligAvtaleOmDeltBosted.erSynlig && ( - )}
)} {skjema.felter.søkerHarBoddMedAndreForelder.erSynlig && ( <> - {skjema.felter.søkerFlyttetFraAndreForelderDato.erSynlig && ( @@ -155,28 +147,20 @@ const OmBarnet: React.FC<{ barnetsId: BarnetsId }> = ({ barnetsId }) => { - } + label={} disabled={ skjema.felter.borMedAndreForelderCheckbox.verdi === ESvar.JA } avgrensDatoFremITid={true} /> {skjema.felter.borMedAndreForelderCheckbox.erSynlig && ( - } /> )} diff --git "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/Oppf\303\270lgningssp\303\270rsm\303\245l.tsx" "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/Oppf\303\270lgningssp\303\270rsm\303\245l.tsx" index 37453262b..c1d89f8d5 100644 --- "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/Oppf\303\270lgningssp\303\270rsm\303\245l.tsx" +++ "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/Oppf\303\270lgningssp\303\270rsm\303\245l.tsx" @@ -1,6 +1,6 @@ import React from 'react'; -import { Label } from '@navikt/ds-react'; +import { Heading, Label } from '@navikt/ds-react'; import { ESvar } from '@navikt/familie-form-elements'; import type { Felt, ISkjema } from '@navikt/familie-skjema'; @@ -21,12 +21,12 @@ import { uppercaseFørsteBokstav } from '../../../utils/visning'; import { Barnetrygdperiode } from '../../Felleskomponenter/Barnetrygdperiode/Barnetrygdperiode'; import Datovelger from '../../Felleskomponenter/Datovelger/Datovelger'; import { LandDropdown } from '../../Felleskomponenter/Dropdowns/LandDropdown'; -import Informasjonsbolk from '../../Felleskomponenter/Informasjonsbolk/Informasjonsbolk'; -import JaNeiSpm from '../../Felleskomponenter/JaNeiSpm/JaNeiSpm'; +import JaNeiSpmForSanity from '../../Felleskomponenter/JaNeiSpm/JaNeiSpmForSanity'; import { LeggTilKnapp } from '../../Felleskomponenter/LeggTilKnapp/LeggTilKnapp'; import PerioderContainer from '../../Felleskomponenter/PerioderContainer'; -import { SkjemaCheckbox } from '../../Felleskomponenter/SkjemaCheckbox/SkjemaCheckbox'; -import { SkjemaFeltInput } from '../../Felleskomponenter/SkjemaFeltInput/SkjemaFeltInput'; +import TekstBlock from '../../Felleskomponenter/Sanity/TekstBlock'; +import { SkjemaCheckboxForSanity } from '../../Felleskomponenter/SkjemaCheckbox/SkjemaCheckboxForSanity'; +import { SkjemaFeltInputForSanity } from '../../Felleskomponenter/SkjemaFeltInput/SkjemaFeltInputForSanity'; import SkjemaFieldset from '../../Felleskomponenter/SkjemaFieldset'; import useModal from '../../Felleskomponenter/SkjemaModal/useModal'; import SpråkTekst from '../../Felleskomponenter/SpråkTekst/SpråkTekst'; @@ -34,7 +34,7 @@ import { UtenlandsoppholdSpørsmålId } from '../../Felleskomponenter/Utenlandso import { UtenlandsoppholdModal } from '../../Felleskomponenter/UtenlandsoppholdModal/UtenlandsoppholdModal'; import { UtenlandsperiodeOppsummering } from '../../Felleskomponenter/UtenlandsoppholdModal/UtenlandsperiodeOppsummering'; -import { OmBarnetSpørsmålsId, omBarnetSpørsmålSpråkId } from './spørsmål'; +import { IOmBarnetTekstinnhold } from './innholdTyper'; const Oppfølgningsspørsmål: React.FC<{ barn: IBarnMedISøknad; @@ -78,6 +78,24 @@ const Oppfølgningsspørsmål: React.FC<{ pågåendeSøknadFraAnnetEøsLand, } = skjema.felter; + const teksterForSteg: IOmBarnetTekstinnhold = tekster().OM_BARNET; + const { + opplystFosterbarn, + opplystInstitusjon, + institusjonIUtlandetCheckbox, + institusjonNavn, + institusjonAdresse, + institusjonPostnummer, + institusjonStartdato, + institusjonSluttdato, + institusjonUkjentSluttCheckbox, + opplystBarnOppholdUtenforNorge, + planlagtBoSammenhengendeINorge, + opplystFaarHarFaattEllerSoektYtelse, + paagaaendeSoeknadYtelse, + hvilketLandYtelse, + } = teksterForSteg; + const teksterForModal: IUtenlandsoppholdTekstinnhold = tekster().FELLES.modaler.utenlandsopphold.barn; const { flerePerioder, leggTilPeriodeForklaring } = teksterForModal; @@ -87,58 +105,49 @@ const Oppfølgningsspørsmål: React.FC<{ return ( <> {barn[barnDataKeySpørsmål.erFosterbarn].svar === ESvar.JA && ( - + + + )} {barn[barnDataKeySpørsmål.oppholderSegIInstitusjon].svar === ESvar.JA && ( + } legendSpråkId={'ombarnet.institusjon'} språkValues={{ navn: barn.navn }} > - } /> - } /> - } /> - } fullbredde={false} /> - } + label={} />
- } + label={} disabled={institusjonOppholdSluttVetIkke.verdi === ESvar.JA} /> - } />
)} {barn[barnDataKeySpørsmål.boddMindreEnn12MndINorge].svar === ESvar.JA && ( + } legendSpråkId={'ombarnet.opplystatbarnutlandopphold.info'} språkValues={{ navn: barn.navn }} > @@ -217,32 +220,30 @@ const Oppfølgningsspørsmål: React.FC<{ /> {planleggerÅBoINorge12Mnd.erSynlig && ( - )} )} {barn[barnDataKeySpørsmål.barnetrygdFraAnnetEøsland].svar === ESvar.JA && ( + } legendSpråkId={'ombarnet.barnetrygd-eøs'} språkValues={{ navn: barn.navn }} > - {pågåendeSøknadHvilketLand.erSynlig && ( - } + label={} /> )} ; barnetsNavn: string; }> = ({ andreBarnSomErFyltUt, skjema, barnetsNavn }) => { + const { tekster } = useApp(); const felt = skjema.felter.sammeForelderSomAnnetBarn; + const omBarnetTekster = tekster().OM_BARNET; + const { + svaralternativSammeSomAnnenForelder, + svaralternativAnnenForelder, + hvemErBarnSinAndreForelder, + } = omBarnetTekster; const radios = andreBarnSomErFyltUt .map(barn => ({ label: ( - ), value: barn.id, })) .concat({ - label: , + label: , value: AlternativtSvarForInput.ANNEN_FORELDER, }); @@ -44,9 +52,9 @@ const SammeSomAnnetBarnRadio: React.FC<{ } name={OmBarnetSpørsmålsId.sammeForelderSomAnnetBarn} diff --git "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/innholdTyper.ts" "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/innholdTyper.ts" index 57ecbb3c6..2224af5dd 100644 --- "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/innholdTyper.ts" +++ "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/innholdTyper.ts" @@ -1,8 +1,41 @@ -import { LocaleRecordBlock, LocaleRecordString } from '../../../typer/sanity/sanity'; +import { + ISanitySpørsmålDokument, + LocaleRecordBlock, + LocaleRecordString, +} from '../../../typer/sanity/sanity'; export interface IOmBarnetTekstinnhold { omBarnetTittel: LocaleRecordBlock; omBarnetTittelUtenFlettefelt: LocaleRecordBlock; omBarnetGuide: LocaleRecordBlock; barnetsAndreForelder: LocaleRecordString; + opplystFosterbarn: LocaleRecordBlock; + opplystInstitusjon: LocaleRecordBlock; + institusjonIUtlandetCheckbox: LocaleRecordBlock; + institusjonNavn: ISanitySpørsmålDokument; + institusjonAdresse: ISanitySpørsmålDokument; + institusjonPostnummer: ISanitySpørsmålDokument; + institusjonStartdato: ISanitySpørsmålDokument; + institusjonSluttdato: ISanitySpørsmålDokument; + institusjonUkjentSluttCheckbox: LocaleRecordBlock; + opplystBarnOppholdUtenforNorge: LocaleRecordBlock; + planlagtBoSammenhengendeINorge: ISanitySpørsmålDokument; + opplystFaarHarFaattEllerSoektYtelse: LocaleRecordBlock; + paagaaendeSoeknadYtelse: ISanitySpørsmålDokument; + hvilketLandYtelse: ISanitySpørsmålDokument; + svaralternativSammeSomAnnenForelder: LocaleRecordBlock; + svaralternativAnnenForelder: LocaleRecordBlock; + hvemErBarnSinAndreForelder: ISanitySpørsmålDokument; + navnAndreForelder: ISanitySpørsmålDokument; + foedselsnummerDnummerAndreForelder: ISanitySpørsmålDokument; + foedselsdatoAndreForelder: ISanitySpørsmålDokument; + arbeidUtenforNorgeAndreForelder: ISanitySpørsmålDokument; + pensjonUtlandAndreForelder: ISanitySpørsmålDokument; + boddSammenMedAndreForelder: ISanitySpørsmålDokument; + naarFlyttetFraAndreForelder: ISanitySpørsmålDokument; + bosted: LocaleRecordString; + bostedInfo: LocaleRecordBlock; + borBarnFastSammenMedDeg: ISanitySpørsmålDokument; + deltBosted: ISanitySpørsmålDokument; + faarEllerHarFaattYtelseFraAnnetLand: ISanitySpørsmålDokument; } diff --git "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/useOmBarnet.tsx" "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/useOmBarnet.tsx" index 67bdcf028..c56bc2ddc 100644 --- "a/src/frontend/components/S\303\270knadsSteg/OmBarnet/useOmBarnet.tsx" +++ "b/src/frontend/components/S\303\270knadsSteg/OmBarnet/useOmBarnet.tsx" @@ -5,13 +5,13 @@ import { feil, type FeltState, type ISkjema, ok, useFelt, useSkjema } from '@nav import { useApp } from '../../../context/AppContext'; import { useEøs } from '../../../context/EøsContext'; -import useDatovelgerFelt from '../../../hooks/useDatovelgerFelt'; -import useDatovelgerFeltMedUkjent from '../../../hooks/useDatovelgerFeltMedUkjent'; +import useDatovelgerFeltMedUkjentForSanity from '../../../hooks/useDatovelgerFeltMedUkjentForSanity'; import useInputFelt from '../../../hooks/useInputFelt'; import useInputFeltMedUkjent from '../../../hooks/useInputFeltMedUkjent'; import useJaNeiSpmFelt from '../../../hooks/useJaNeiSpmFelt'; import useLanddropdownFeltMedJaNeiAvhengighet from '../../../hooks/useLanddropdownFeltMedJaNeiAvhengighet'; import { usePerioder } from '../../../hooks/usePerioder'; +import useDatovelgerFeltForSanity from '../../../hooks/useSendInnSkjemaTest/useDatovelgerForSanity'; import { andreForelderDataKeySpørsmål, barnDataKeySpørsmål, @@ -35,6 +35,7 @@ import { IBarnetrygdsperiodeTekstinnhold } from '../../../typer/sanity/modaler/b import { IPensjonsperiodeTekstinnhold } from '../../../typer/sanity/modaler/pensjonsperiode'; import { IUtenlandsoppholdTekstinnhold } from '../../../typer/sanity/modaler/utenlandsopphold'; import { ESanitySteg } from '../../../typer/sanity/sanity'; +import { IFormateringsfeilmeldingerTekstinnhold } from '../../../typer/sanity/tekstInnhold'; import { IOmBarnetFeltTyper } from '../../../typer/skjema'; import { Årsak } from '../../../typer/utvidet'; import { erNorskPostnummer, valideringAdresse } from '../../../utils/adresse'; @@ -58,10 +59,11 @@ import { flyttetPermanentFraNorge } from '../../../utils/utenlandsopphold'; import { ArbeidsperiodeSpørsmålsId } from '../../Felleskomponenter/Arbeidsperiode/spørsmål'; import { BarnetrygdperiodeSpørsmålId } from '../../Felleskomponenter/Barnetrygdperiode/spørsmål'; import { PensjonsperiodeSpørsmålId } from '../../Felleskomponenter/Pensjonsmodal/spørsmål'; -import SpråkTekst from '../../Felleskomponenter/SpråkTekst/SpråkTekst'; +import TekstBlock from '../../Felleskomponenter/Sanity/TekstBlock'; import { UtenlandsoppholdSpørsmålId } from '../../Felleskomponenter/UtenlandsoppholdModal/spørsmål'; import { idNummerLand } from '../EøsSteg/idnummerUtils'; +import { IOmBarnetTekstinnhold } from './innholdTyper'; import { OmBarnetSpørsmålsId } from './spørsmål'; export const barnErUnder16År = (barnet: IBarnMedISøknad): boolean => Number(barnet.alder) < 16; @@ -88,6 +90,7 @@ export const useOmBarnet = ( } => { const { søknad, settSøknad, erUtvidet, tekster, plainTekst } = useApp(); const { skalTriggeEøsForBarn, barnSomTriggerEøs, settBarnSomTriggerEøs, erEøsLand } = useEøs(); + const stegTekster: IOmBarnetTekstinnhold = tekster()[ESanitySteg.OM_BARNET]; const teksterForArbeidsperiode: IArbeidsperiodeTekstinnhold = tekster()[ESanitySteg.FELLES].modaler.arbeidsperiode.søker; const teksterForBarnetrygdsperiode: IBarnetrygdsperiodeTekstinnhold = @@ -96,6 +99,8 @@ export const useOmBarnet = ( tekster()[ESanitySteg.FELLES].modaler.pensjonsperiode.andreForelder; const teksterForUtenlandsopphold: IUtenlandsoppholdTekstinnhold = tekster()[ESanitySteg.FELLES].modaler.utenlandsopphold.søker; + const teksterForFormateringsfeilmeldinger: IFormateringsfeilmeldingerTekstinnhold = + tekster()[ESanitySteg.FELLES].formateringsfeilmeldinger; const søker = søknad.søker; const gjeldendeBarn = søknad.barnInkludertISøknaden.find(barn => barn.id === barnetsUuid); @@ -137,6 +142,7 @@ export const useOmBarnet = ( const institusjonsnavn = useInputFelt({ søknadsfelt: gjeldendeBarn[barnDataKeySpørsmål.institusjonsnavn], + feilmelding: stegTekster.institusjonNavn.feilmelding, feilmeldingSpråkId: 'ombarnet.institusjon.navn.feilmelding', skalVises: skalFeltetVises(barnDataKeySpørsmål.oppholderSegIInstitusjon) && @@ -145,6 +151,7 @@ export const useOmBarnet = ( const institusjonsadresse = useInputFelt({ søknadsfelt: gjeldendeBarn[barnDataKeySpørsmål.institusjonsadresse], + feilmelding: stegTekster.institusjonAdresse.feilmelding, feilmeldingSpråkId: 'ombarnet.institusjon.adresse.feilmelding', skalVises: skalFeltetVises(barnDataKeySpørsmål.oppholderSegIInstitusjon) && @@ -160,13 +167,11 @@ export const useOmBarnet = ( ? ok(felt) : feil( felt, - + trimWhiteSpace(felt.verdi) === '' ? ( + + ) : ( + plainTekst(teksterForFormateringsfeilmeldinger.ugyldigPostnummer) + ) ), skalFeltetVises: avhengigheter => skalFeltetVises(barnDataKeySpørsmål.oppholderSegIInstitusjon) && @@ -174,10 +179,10 @@ export const useOmBarnet = ( avhengigheter: { institusjonIUtlandCheckbox }, }); - const institusjonOppholdStartdato = useDatovelgerFelt({ + const institusjonOppholdStartdato = useDatovelgerFeltForSanity({ søknadsfelt: gjeldendeBarn[barnDataKeySpørsmål.institusjonOppholdStartdato], skalFeltetVises: skalFeltetVises(barnDataKeySpørsmål.oppholderSegIInstitusjon), - feilmeldingSpråkId: 'ombarnet.institusjon.startdato.feilmelding', + feilmelding: stegTekster.institusjonStartdato.feilmelding, sluttdatoAvgrensning: dagensDato(), }); @@ -190,13 +195,13 @@ export const useOmBarnet = ( feltId: OmBarnetSpørsmålsId.institusjonOppholdVetIkke, }); - const institusjonOppholdSluttdato = useDatovelgerFeltMedUkjent({ + const institusjonOppholdSluttdato = useDatovelgerFeltMedUkjentForSanity({ feltId: gjeldendeBarn[barnDataKeySpørsmål.institusjonOppholdSluttdato].id, initiellVerdi: formaterInitVerdiForInputMedUkjent( gjeldendeBarn[barnDataKeySpørsmål.institusjonOppholdSluttdato].svar ), vetIkkeCheckbox: institusjonOppholdSluttVetIkke, - feilmeldingSpråkId: 'ombarnet.institusjon.sluttdato.feilmelding', + feilmelding: stegTekster.institusjonSluttdato.feilmelding, skalFeltetVises: skalFeltetVises(barnDataKeySpørsmål.oppholderSegIInstitusjon), startdatoAvgrensning: erSammeDatoSomDagensDato( stringTilDate(institusjonOppholdStartdato.verdi) @@ -207,7 +212,7 @@ export const useOmBarnet = ( stringTilDate(institusjonOppholdStartdato.verdi) ) ? undefined - : 'felles.dato.tilbake-i-tid.feilmelding', + : plainTekst(teksterForFormateringsfeilmeldinger.datoKanIkkeVaereTilbakeITid), avhengigheter: { institusjonOppholdStartdato }, nullstillVedAvhengighetEndring: false, }); @@ -230,8 +235,10 @@ export const useOmBarnet = ( const planleggerÅBoINorge12Mnd = useJaNeiSpmFelt({ søknadsfelt: gjeldendeBarn[barnDataKeySpørsmål.planleggerÅBoINorge12Mnd], + feilmelding: stegTekster.planlagtBoSammenhengendeINorge.feilmelding, feilmeldingSpråkId: 'ombarnet.oppholdtsammenhengende.feilmelding', feilmeldingSpråkVerdier: { barn: gjeldendeBarn.navn }, + flettefelter: { barnetsNavn: gjeldendeBarn.navn }, skalSkjules: !skalFeltetVises(barnDataKeySpørsmål.boddMindreEnn12MndINorge) || flyttetPermanentFraNorge(utenlandsperioder) || @@ -251,21 +258,23 @@ export const useOmBarnet = ( /*--- PÅGÅENDE SØKNAD BARNETRYGD FRA ANNET EØSLAND ---*/ const pågåendeSøknadFraAnnetEøsLand = useJaNeiSpmFelt({ søknadsfelt: gjeldendeBarn[barnDataKeySpørsmål.pågåendeSøknadFraAnnetEøsLand], + feilmelding: stegTekster.paagaaendeSoeknadYtelse.feilmelding, feilmeldingSpråkId: 'ombarnet.pågåendesøknad.feilmelding', skalSkjules: !skalFeltetVises(barnDataKeySpørsmål.barnetrygdFraAnnetEøsland), }); const pågåendeSøknadHvilketLand = useLanddropdownFeltMedJaNeiAvhengighet({ søknadsfelt: gjeldendeBarn[barnDataKeySpørsmål.pågåendeSøknadHvilketLand], + feilmelding: stegTekster.hvilketLandYtelse.feilmelding, feilmeldingSpråkId: 'ombarnet.hvilketlandsøkt.feilmelding', avhengigSvarCondition: ESvar.JA, avhengighet: pågåendeSøknadFraAnnetEøsLand, }); /*--- EØS SPØRSMÅL MOTTAR BARNETRYGD ---*/ - const mottarEllerMottokEøsBarnetrygd = useJaNeiSpmFelt({ søknadsfelt: gjeldendeBarn[barnDataKeySpørsmål.mottarEllerMottokEøsBarnetrygd], + feilmelding: stegTekster.faarEllerHarFaattYtelseFraAnnetLand.feilmelding, feilmeldingSpråkId: 'ombarnet.fårellerharsøktbarnetrygdeøs.feilmelding', skalSkjules: !skalFeltetVises(barnDataKeySpørsmål.barnetrygdFraAnnetEøsland), }); @@ -302,9 +311,9 @@ export const useOmBarnet = ( ? ok(felt) : feil( felt, - ); }, @@ -360,6 +369,7 @@ export const useOmBarnet = ( const andreForelderFnr = useInputFeltMedUkjent({ søknadsfelt: andreForelder?.[andreForelderDataKeySpørsmål.fnr] ?? null, avhengighet: andreForelderFnrUkjent, + feilmelding: teksterForFormateringsfeilmeldinger.ugyldigFoedselsnummer, feilmeldingSpråkId: 'ombarnet.andre-forelder.fnr.feilmelding', erFnrInput: true, skalVises: @@ -389,13 +399,14 @@ export const useOmBarnet = ( }, nullstillVedAvhengighetEndring: false, }); - const andreForelderFødselsdato = useDatovelgerFeltMedUkjent({ + + const andreForelderFødselsdato = useDatovelgerFeltMedUkjentForSanity({ feltId: andreForelder?.[andreForelderDataKeySpørsmål.fødselsdato].id, initiellVerdi: formaterInitVerdiForInputMedUkjent( andreForelder?.[andreForelderDataKeySpørsmål.fødselsdato].svar ), vetIkkeCheckbox: andreForelderFødselsdatoUkjent, - feilmeldingSpråkId: 'ombarnet.andre-forelder.fødselsdato.feilmelding', + feilmelding: stegTekster.foedselsdatoAndreForelder.feilmelding, skalFeltetVises: andreForelderFnrUkjent.erSynlig && andreForelderFnrUkjent.verdi === ESvar.JA && @@ -494,16 +505,20 @@ export const useOmBarnet = ( /*--- BOSTED ---*/ const borFastMedSøker = useJaNeiSpmFelt({ søknadsfelt: gjeldendeBarn[barnDataKeySpørsmål.borFastMedSøker], + feilmelding: stegTekster.borBarnFastSammenMedDeg.feilmelding, feilmeldingSpråkId: 'ombarnet.bor-fast.feilmelding', + flettefelter: { barnetsNavn: gjeldendeBarn.navn }, feilmeldingSpråkVerdier: { navn: gjeldendeBarn.navn }, }); const skriftligAvtaleOmDeltBosted = useJaNeiSpmFelt({ søknadsfelt: andreForelder?.[andreForelderDataKeySpørsmål.skriftligAvtaleOmDeltBosted], + feilmelding: stegTekster.deltBosted.feilmelding, feilmeldingSpråkId: 'ombarnet.delt-bosted.feilmelding', skalSkjules: !andreForelder || gjeldendeBarn[barnDataKeySpørsmål.andreForelderErDød].svar === ESvar.JA, + flettefelter: { barnetsNavn: gjeldendeBarn.navn }, feilmeldingSpråkVerdier: { navn: gjeldendeBarn.navn }, }); @@ -512,6 +527,7 @@ export const useOmBarnet = ( const søkerHarBoddMedAndreForelder = useJaNeiSpmFelt({ søknadsfelt: andreForelder?.utvidet[andreForelderDataKeySpørsmål.søkerHarBoddMedAndreForelder], + feilmelding: stegTekster.boddSammenMedAndreForelder.feilmelding, feilmeldingSpråkId: 'ombarnet.boddsammenmedandreforelder.feilmelding', avhengigheter: { borFastMedSøker: { @@ -524,6 +540,7 @@ export const useOmBarnet = ( : undefined, }, skalSkjules: !erUtvidet || !andreForelder, + flettefelter: { barnetsNavn: gjeldendeBarn.navn }, feilmeldingSpråkVerdier: { navn: gjeldendeBarn.navn }, }); @@ -545,7 +562,7 @@ export const useOmBarnet = ( avhengigheter: { søkerHarBoddMedAndreForelder }, }); - const søkerFlyttetFraAndreForelderDato = useDatovelgerFeltMedUkjent({ + const søkerFlyttetFraAndreForelderDato = useDatovelgerFeltMedUkjentForSanity({ feltId: andreForelder?.utvidet[ andreForelderDataKeySpørsmål.søkerFlyttetFraAndreForelderDato ].id, @@ -554,7 +571,7 @@ export const useOmBarnet = ( .svar ), vetIkkeCheckbox: borMedAndreForelderCheckbox, - feilmeldingSpråkId: 'ombarnet.nårflyttetfra.feilmelding', + feilmelding: stegTekster.naarFlyttetFraAndreForelder.feilmelding, skalFeltetVises: søkerHarBoddMedAndreForelder.verdi === ESvar.JA && gjeldendeBarn[barnDataKeySpørsmål.andreForelderErDød].svar === ESvar.NEI, diff --git "a/src/frontend/components/S\303\270knadsSteg/Oppsummering/OppsummeringSteg/OmBarnet/AndreForelderOppsummering.tsx" "b/src/frontend/components/S\303\270knadsSteg/Oppsummering/OppsummeringSteg/OmBarnet/AndreForelderOppsummering.tsx" index 1c888f4dc..ac320e615 100644 --- "a/src/frontend/components/S\303\270knadsSteg/Oppsummering/OppsummeringSteg/OmBarnet/AndreForelderOppsummering.tsx" +++ "b/src/frontend/components/S\303\270knadsSteg/Oppsummering/OppsummeringSteg/OmBarnet/AndreForelderOppsummering.tsx" @@ -1,10 +1,9 @@ import React from 'react'; -import { useIntl } from 'react-intl'; - import { BodyShort, FormSummary } from '@navikt/ds-react'; import { ESvar } from '@navikt/familie-form-elements'; +import { useApp } from '../../../../../context/AppContext'; import { andreForelderDataKeySpørsmål, barnDataKeySpørsmål, @@ -17,16 +16,25 @@ import { formaterDato } from '../../../../../utils/dato'; import { formaterDatoMedUkjent } from '../../../../../utils/visning'; import { ArbeidsperiodeOppsummering } from '../../../../Felleskomponenter/Arbeidsperiode/ArbeidsperiodeOppsummering'; import { PensjonsperiodeOppsummering } from '../../../../Felleskomponenter/Pensjonsmodal/PensjonsperiodeOppsummering'; -import SpråkTekst from '../../../../Felleskomponenter/SpråkTekst/SpråkTekst'; -import { OmBarnetSpørsmålsId, omBarnetSpørsmålSpråkId } from '../../../OmBarnet/spørsmål'; +import TekstBlock from '../../../../Felleskomponenter/Sanity/TekstBlock'; import { OppsummeringFelt } from '../../OppsummeringFelt'; const AndreForelderOppsummering: React.FC<{ barn: IBarnMedISøknad; andreForelder: IAndreForelder; }> = ({ barn, andreForelder }) => { - const intl = useIntl(); - const { formatMessage } = intl; + const { tekster, plainTekst } = useApp(); + + const omBarnetTekster = tekster().OM_BARNET; + const { + navnAndreForelder, + foedselsnummerDnummerAndreForelder, + foedselsdatoAndreForelder, + arbeidUtenforNorgeAndreForelder, + pensjonUtlandAndreForelder, + boddSammenMedAndreForelder, + naarFlyttetFraAndreForelder, + } = omBarnetTekster; return ( @@ -35,83 +43,43 @@ const AndreForelderOppsummering: React.FC<{ <> {andreForelder[andreForelderDataKeySpørsmål.navn].svar && ( - } + tittel={} søknadsvar={ andreForelder[andreForelderDataKeySpørsmål.navn].svar !== AlternativtSvarForInput.UKJENT ? andreForelder[andreForelderDataKeySpørsmål.navn].svar - : formatMessage({ - id: omBarnetSpørsmålSpråkId[ - OmBarnetSpørsmålsId.andreForelderKanIkkeGiOpplysninger - ], - }) + : plainTekst(navnAndreForelder.checkboxLabel) } /> )} {andreForelder[andreForelderDataKeySpørsmål.fnr].svar && ( + } søknadsvar={ andreForelder[andreForelderDataKeySpørsmål.fnr].svar !== AlternativtSvarForInput.UKJENT ? andreForelder[andreForelderDataKeySpørsmål.fnr].svar - : formatMessage({ - id: omBarnetSpørsmålSpråkId[ - OmBarnetSpørsmålsId.andreForelderFnrUkjent - ], - }) + : plainTekst(foedselsnummerDnummerAndreForelder.checkboxLabel) } /> )} {andreForelder[andreForelderDataKeySpørsmål.fødselsdato].svar && ( - } + tittel={} søknadsvar={formaterDatoMedUkjent( andreForelder[andreForelderDataKeySpørsmål.fødselsdato].svar, - formatMessage({ - id: omBarnetSpørsmålSpråkId[ - OmBarnetSpørsmålsId.andreForelderFødselsdatoUkjent - ], - }) + plainTekst(foedselsdatoAndreForelder.checkboxLabel) )} /> )} {andreForelder[andreForelderDataKeySpørsmål.arbeidUtlandet].svar && ( } søknadsvar={ @@ -135,15 +103,9 @@ const AndreForelderOppsummering: React.FC<{ {andreForelder[andreForelderDataKeySpørsmål.pensjonUtland].svar && ( } søknadsvar={ @@ -169,13 +131,9 @@ const AndreForelderOppsummering: React.FC<{ ].svar && ( } søknadsvar={ @@ -189,15 +147,7 @@ const AndreForelderOppsummering: React.FC<{ andreForelderDataKeySpørsmål.søkerFlyttetFraAndreForelderDato ].svar && ( - } + tittel={} søknadsvar={(() => { const svar = andreForelder.utvidet[ @@ -205,28 +155,16 @@ const AndreForelderOppsummering: React.FC<{ .søkerFlyttetFraAndreForelderDato ].svar; return svar === AlternativtSvarForInput.UKJENT - ? formatMessage({ - id: omBarnetSpørsmålSpråkId[ - OmBarnetSpørsmålsId.søkerBorMedAndreForelder - ], - }) + ? plainTekst(naarFlyttetFraAndreForelder.checkboxLabel) : formaterDato(svar); })()} /> )} ) : ( - <> - - - - + + + )} ); diff --git a/src/frontend/hooks/useDatovelgerFeltMedUkjentForSanity.ts b/src/frontend/hooks/useDatovelgerFeltMedUkjentForSanity.ts new file mode 100644 index 000000000..186b389d1 --- /dev/null +++ b/src/frontend/hooks/useDatovelgerFeltMedUkjentForSanity.ts @@ -0,0 +1,84 @@ +import { useEffect } from 'react'; + +import { ESvar } from '@navikt/familie-form-elements'; +import { type Avhengigheter, type Felt, type FeltState, ok, useFelt } from '@navikt/familie-skjema'; + +import { useApp } from '../context/AppContext'; +import { ISODateString } from '../typer/common'; +import { LocaleRecordBlock } from '../typer/sanity/sanity'; +import { validerDatoForSanity } from '../utils/dato'; + +const useDatovelgerFeltMedUkjentForSanity = ({ + feltId, + initiellVerdi, + vetIkkeCheckbox, + feilmelding, + skalFeltetVises, + nullstillVedAvhengighetEndring = true, + sluttdatoAvgrensning = undefined, + startdatoAvgrensning = undefined, + customStartdatoFeilmelding = '', + avhengigheter, +}: { + feltId; + initiellVerdi: ISODateString; + vetIkkeCheckbox: Felt; + feilmelding: LocaleRecordBlock; + skalFeltetVises: boolean; + nullstillVedAvhengighetEndring?: boolean; + sluttdatoAvgrensning?: Date; + startdatoAvgrensning?: Date; + customStartdatoFeilmelding?: string; + avhengigheter?: Avhengigheter; +}) => { + const { plainTekst, tekster } = useApp(); + const datoFelt = useFelt({ + feltId: feltId, + verdi: initiellVerdi, + valideringsfunksjon: (felt: FeltState, avhengigheter) => { + if (avhengigheter?.vetIkkeCheckbox?.verdi === ESvar.JA) { + return ok(felt); + } + + const customStartdatoFeilmelding = avhengigheter?.customStartdatoFeilmelding; + + return validerDatoForSanity( + tekster().FELLES.formateringsfeilmeldinger, + plainTekst, + felt, + feilmelding, + startdatoAvgrensning, + sluttdatoAvgrensning, + customStartdatoFeilmelding + ); + }, + avhengigheter: { + vetIkkeCheckbox, + skalFeltetVises, + customStartdatoFeilmelding, + ...avhengigheter, + }, + nullstillVedAvhengighetEndring, + skalFeltetVises: avhengigheter => avhengigheter?.skalFeltetVises, + }); + + useEffect(() => { + if (vetIkkeCheckbox.verdi === ESvar.JA) { + datoFelt.validerOgSettFelt(datoFelt.verdi, vetIkkeCheckbox); + } + }, [vetIkkeCheckbox]); + + useEffect(() => { + if (skalFeltetVises && datoFelt.verdi !== '') { + datoFelt.validerOgSettFelt(datoFelt.verdi, vetIkkeCheckbox); + } + + return () => { + if (!skalFeltetVises) datoFelt.validerOgSettFelt('', vetIkkeCheckbox); + }; + }, [skalFeltetVises, vetIkkeCheckbox]); + + return datoFelt; +}; + +export default useDatovelgerFeltMedUkjentForSanity; diff --git a/src/frontend/hooks/useInputFeltMedUkjent.tsx b/src/frontend/hooks/useInputFeltMedUkjent.tsx index cc81ba0f9..16bcb46f7 100644 --- a/src/frontend/hooks/useInputFeltMedUkjent.tsx +++ b/src/frontend/hooks/useInputFeltMedUkjent.tsx @@ -7,7 +7,9 @@ import { feil, type Felt, type FeltState, ok, useFelt } from '@navikt/familie-sk import { idnr } from '@navikt/fnrvalidator'; import SpråkTekst from '../components/Felleskomponenter/SpråkTekst/SpråkTekst'; +import { useApp } from '../context/AppContext'; import { DatoMedUkjent } from '../typer/common'; +import { FlettefeltVerdier, LocaleRecordBlock, LocaleRecordString } from '../typer/sanity/sanity'; import { IdNummerKey } from '../typer/skjema'; import { ISøknadSpørsmål } from '../typer/spørsmål'; import { trimWhiteSpace } from '../utils/hjelpefunksjoner'; @@ -16,22 +18,29 @@ import { formaterInitVerdiForInputMedUkjent } from '../utils/input'; const useInputFeltMedUkjent = ({ søknadsfelt, avhengighet, + feilmelding, feilmeldingSpråkId, erFnrInput = false, skalVises = true, customValidering = undefined, språkVerdier = {}, + flettefelter, nullstillVedAvhengighetEndring = true, }: { søknadsfelt: ISøknadSpørsmål | { id: IdNummerKey; svar: string } | null; + feilmelding?: LocaleRecordBlock | LocaleRecordString; avhengighet: Felt; feilmeldingSpråkId: string; erFnrInput?: boolean; skalVises?: boolean; customValidering?: ((felt: FeltState) => FeltState) | undefined; + flettefelter?: FlettefeltVerdier; språkVerdier?: Record; nullstillVedAvhengighetEndring?: boolean; }) => { + const { tekster, plainTekst } = useApp(); + const formateringsfeilmeldinger = tekster().FELLES.formateringsfeilmeldinger; + const inputFelt = useFelt({ feltId: søknadsfelt ? søknadsfelt.id : uuidv4(), verdi: søknadsfelt @@ -45,9 +54,16 @@ const useInputFeltMedUkjent = ({ if (erFnrInput) { if (feltVerdi === '') { - return feil(felt, ); + return feil( + felt, + feilmelding ? ( + plainTekst(feilmelding, flettefelter) + ) : ( + + ) + ); } else if (idnr(feltVerdi).status !== 'valid') { - return feil(felt, ); + return feil(felt, plainTekst(formateringsfeilmeldinger.ugyldigFoedselsnummer)); } else { return customValidering ? customValidering(felt) : ok(felt); } @@ -56,7 +72,14 @@ const useInputFeltMedUkjent = ({ ? customValidering ? customValidering(felt) : ok(felt) - : feil(felt, ); + : feil( + felt, + feilmelding ? ( + plainTekst(feilmelding, flettefelter) + ) : ( + + ) + ); } }, avhengigheter: { vetIkkeCheckbox: avhengighet, skalVises }, diff --git a/src/frontend/hooks/useLanddropdownFeltMedJaNeiAvhengighet.tsx b/src/frontend/hooks/useLanddropdownFeltMedJaNeiAvhengighet.tsx index 572336d95..c781acadd 100644 --- a/src/frontend/hooks/useLanddropdownFeltMedJaNeiAvhengighet.tsx +++ b/src/frontend/hooks/useLanddropdownFeltMedJaNeiAvhengighet.tsx @@ -14,26 +14,33 @@ import { } from '@navikt/familie-skjema'; import SpråkTekst from '../components/Felleskomponenter/SpråkTekst/SpråkTekst'; +import { useApp } from '../context/AppContext'; +import { FlettefeltVerdier, LocaleRecordBlock } from '../typer/sanity/sanity'; import { ISøknadSpørsmål } from '../typer/spørsmål'; const useLanddropdownFeltMedJaNeiAvhengighet = ({ søknadsfelt, + feilmelding, feilmeldingSpråkId, avhengigSvarCondition, avhengighet, nullstillVedAvhengighetEndring = true, skalFeltetVises = true, + flettefelter, feilmeldingSpråkVerdier, }: { søknadsfelt?: ISøknadSpørsmål; + feilmelding?: LocaleRecordBlock; feilmeldingSpråkId: string; avhengigSvarCondition: ESvar; avhengighet: Felt; nullstillVedAvhengighetEndring?: boolean; skalFeltetVises?: boolean; + flettefelter?: FlettefeltVerdier; feilmeldingSpråkVerdier?: { [key: string]: ReactNode }; }) => { const skalViseFelt = jaNeiSpmVerdi => jaNeiSpmVerdi === avhengigSvarCondition; + const { plainTekst } = useApp(); const landDropdown = useFelt({ feltId: søknadsfelt ? søknadsfelt.id : uuidv4(), @@ -51,7 +58,11 @@ const useLanddropdownFeltMedJaNeiAvhengighet = ({ ? ok(felt) : feil( felt, - + feilmelding ? ( + plainTekst(feilmelding, { ...flettefelter }) + ) : ( + + ) ); }, nullstillVedAvhengighetEndring, diff --git a/src/frontend/hooks/useSendInnSkjemaTest/useDatovelgerForSanity.ts b/src/frontend/hooks/useSendInnSkjemaTest/useDatovelgerForSanity.ts new file mode 100644 index 000000000..99cafc1a0 --- /dev/null +++ b/src/frontend/hooks/useSendInnSkjemaTest/useDatovelgerForSanity.ts @@ -0,0 +1,55 @@ +import { type Avhengigheter, useFelt } from '@navikt/familie-skjema'; + +import { useApp } from '../../context/AppContext'; +import { ISODateString } from '../../typer/common'; +import { LocaleRecordBlock } from '../../typer/sanity/sanity'; +import { ISøknadSpørsmål } from '../../typer/spørsmål'; +import { validerDatoForSanity } from '../../utils/dato'; + +const useDatovelgerFeltForSanity = ({ + søknadsfelt, + skalFeltetVises, + feilmelding, + sluttdatoAvgrensning = undefined, + startdatoAvgrensning = undefined, + avhengigheter, + customStartdatoFeilmelding = '', + nullstillVedAvhengighetEndring = true, +}: { + søknadsfelt: ISøknadSpørsmål; + skalFeltetVises: boolean; + feilmelding: LocaleRecordBlock; + sluttdatoAvgrensning?: Date; + startdatoAvgrensning?: Date; + avhengigheter?: Avhengigheter; + nullstillVedAvhengighetEndring?: boolean; + customStartdatoFeilmelding?: string; +}) => { + const { plainTekst, tekster } = useApp(); + return useFelt({ + feltId: søknadsfelt.id, + verdi: søknadsfelt.svar, + valideringsfunksjon: (felt, avhengigheter) => { + const feilmelding = avhengigheter?.feilmelding as LocaleRecordBlock; + + return validerDatoForSanity( + tekster().FELLES.formateringsfeilmeldinger, + plainTekst, + felt, + feilmelding, + startdatoAvgrensning, + sluttdatoAvgrensning, + customStartdatoFeilmelding + ); + }, + skalFeltetVises: avhengigheter => avhengigheter?.skalFeltetVises, + avhengigheter: { + skalFeltetVises, + feilmelding, + ...avhengigheter, + }, + nullstillVedAvhengighetEndring, + }); +}; + +export default useDatovelgerFeltForSanity; diff --git a/src/frontend/typer/sanity/sanity.ts b/src/frontend/typer/sanity/sanity.ts index a3f796a9d..0d2f17c5e 100644 --- a/src/frontend/typer/sanity/sanity.ts +++ b/src/frontend/typer/sanity/sanity.ts @@ -53,6 +53,7 @@ export enum Typografi { export const frittståendeOrdPrefix = 'FRITTSTAENDEORD'; export const modalPrefix = 'MODAL'; export const navigasjonPrefix = 'NAVIGASJON'; +export const formateringsfeilmeldingerPrefix = 'FORMATERINGSFEILMELDINGER'; export const kanIkkeBrukeSoeknadPrefix = 'KAN_IKKE_BRUKE_SOKNAD'; export interface ISanitySpørsmålDokument extends SanityDokument { diff --git a/src/frontend/typer/sanity/tekstInnhold.ts b/src/frontend/typer/sanity/tekstInnhold.ts index 2ca90f7b8..1a6f49084 100644 --- a/src/frontend/typer/sanity/tekstInnhold.ts +++ b/src/frontend/typer/sanity/tekstInnhold.ts @@ -61,6 +61,7 @@ export interface IFellesTekstInnhold { frittståendeOrd: IFrittståendeOrdTekstinnhold; modaler: IModalerTekstinnhold; navigasjon: INavigasjonTekstinnhold; + formateringsfeilmeldinger: IFormateringsfeilmeldingerTekstinnhold; kanIkkeBrukeSoeknad: IKanIkkeBrukeSoeknadTekstinnhold; } @@ -102,6 +103,16 @@ export interface INavigasjonTekstinnhold { fortsettSenereKnapp: LocaleRecordString; } +export interface IFormateringsfeilmeldingerTekstinnhold { + ugyldigFoedselsnummer: LocaleRecordString; + ugyldigPostnummer: LocaleRecordString; + ugyldigDato: LocaleRecordString; + datoKanIkkeVaereFremITid: LocaleRecordString; + datoKanIkkeVaereDagensDatoEllerFremITid: LocaleRecordString; + periodeAvsluttesForTidlig: LocaleRecordString; + datoKanIkkeVaereTilbakeITid: LocaleRecordString; +} + export interface IModalerTekstinnhold { arbeidsperiode: { søker: IArbeidsperiodeTekstinnhold; diff --git a/src/frontend/utils/dato.tsx b/src/frontend/utils/dato.tsx index dcd1498f1..27c5dc426 100644 --- a/src/frontend/utils/dato.tsx +++ b/src/frontend/utils/dato.tsx @@ -18,6 +18,8 @@ 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 { LocaleRecordBlock, PlainTekst } from '../typer/sanity/sanity'; +import { IFormateringsfeilmeldingerTekstinnhold } from '../typer/sanity/tekstInnhold'; export const erDatoFormatGodkjent = (dato: Date) => isValid(dato); @@ -98,6 +100,46 @@ export const validerDato = ( return ok(feltState); }; +export const validerDatoForSanity = ( + tekster: IFormateringsfeilmeldingerTekstinnhold, + plainTekst: PlainTekst, + feltState: FeltState, + feilmelding: LocaleRecordBlock | undefined, + startdatoAvgrensning: Date | undefined = undefined, + sluttdatoAvgrensning: Date | undefined = undefined, + customStartdatoFeilmelding = '' +): FeltState => { + if (feltState.verdi === '') { + return feil(feltState, plainTekst(feilmelding) ?? ''); + } + + const dato = parseTilGyldigDato(feltState.verdi, 'yyyy-MM-dd'); + + if (!dato) { + return feil(feltState, plainTekst(tekster.ugyldigDato)); + } + if (!!sluttdatoAvgrensning && erDatoEtterSluttdatoAvgresning(dato, sluttdatoAvgrensning)) { + return feil( + feltState, + plainTekst( + sluttdatoAvgrensning === dagensDato() + ? tekster.datoKanIkkeVaereFremITid + : tekster.datoKanIkkeVaereDagensDatoEllerFremITid + ) + ); + } + + if (!!startdatoAvgrensning && erDatoFørStartDatoAvgrensning(dato, startdatoAvgrensning)) { + return feil( + feltState, + customStartdatoFeilmelding + ? customStartdatoFeilmelding + : plainTekst(tekster.periodeAvsluttesForTidlig) + ); + } + return ok(feltState); +}; + export const formaterDato = (datoString: ISODateString) => format(new Date(datoString), 'dd.MM.yyyy'); diff --git a/src/frontend/utils/sanity.ts b/src/frontend/utils/sanity.ts index 131ae05bf..175535810 100644 --- a/src/frontend/utils/sanity.ts +++ b/src/frontend/utils/sanity.ts @@ -20,6 +20,7 @@ import { ESanityFlettefeltverdi, ESanitySteg, FlettefeltVerdier, + formateringsfeilmeldingerPrefix, frittståendeOrdPrefix, kanIkkeBrukeSoeknadPrefix, LocaleRecordBlock, @@ -30,6 +31,7 @@ import { } from '../typer/sanity/sanity'; import { IFellesTekstInnhold, + IFormateringsfeilmeldingerTekstinnhold, IFrittståendeOrdTekstinnhold, IKanIkkeBrukeSoeknadTekstinnhold, IModalerTekstinnhold, @@ -166,6 +168,9 @@ export const transformerTilTekstinnhold = (alleDokumenter: SanityDokument[]): IT navigasjon: struktrerInnholdForFelles( dokumenterFiltrertPåPrefix(fellesDokumenter, navigasjonPrefix) ) as INavigasjonTekstinnhold, + formateringsfeilmeldinger: struktrerInnholdForFelles( + dokumenterFiltrertPåPrefix(fellesDokumenter, formateringsfeilmeldingerPrefix) + ) as IFormateringsfeilmeldingerTekstinnhold, kanIkkeBrukeSoeknad: struktrerInnholdForFelles( dokumenterFiltrertPåPrefix(fellesDokumenter, kanIkkeBrukeSoeknadPrefix) ) as IKanIkkeBrukeSoeknadTekstinnhold,