diff --git a/README.md b/README.md index 1ed2e4ebf..9cafca7ae 100644 --- a/README.md +++ b/README.md @@ -57,20 +57,7 @@ Det skrives ut 3 ulike tekstbolker i "Utdata"-fanen under kodesnutten. Denne ska ## Sett opp Prettier lokalt on save (IntelliJ) -1. I IntelliJ, åpne `Preferences/Plugins` for så å søke opp og installere `File Watchers` og `Prettier` hvis dette ikke allerede er gjort. -2. Finn `File Watchers` under `Preferences/Tools/File Watchers`, og trykk på `+-ikonet nederst til venstre. for å legge til en ny Watcher. -3. Fyll deretter inn feltene slik som tabellen under, og fjern ellers avhuking på `Auto-Save edited files to trigger the watcher` og `Trigger the watcher on external changes`. Trykk ok. - - -| File Watcher | Second Header | -| -------- | ------------ | -| Name | Prettier | -| File type | any | -| Scope | Project Files | -| Program | $ProjectFileDir$/node_modules/.bin/prettier | -| Arguments | --write $FilePathRelativeToProjectRoot$ | -| Output paths to refresh | $FilePathRelativeToProjectRoot$ | -| Working Directory | $ProjectFileDir$ | - +1. I IntelliJ, åpne settings. Finn prettier. Ligger under Languages and Frameworks -> Javascript -> Prettier. +2. Sjekk av bokser for: 'On reformat code' og 'On save' Test om Prettier fungerer ved å gå inn i en tilfeldig tsx-fil, lag et par nye linjer, og `Ctrl`+ `S`. Hvis koden reformatteres (fjerner alle utenom en av de tomme linjene), så er Prettier på plass lokalt! :sparkles: diff --git "a/src/models/s\303\270knad/toggles.ts" "b/src/models/s\303\270knad/toggles.ts" index bdf0f8760..7159a3eb3 100644 --- "a/src/models/s\303\270knad/toggles.ts" +++ "b/src/models/s\303\270knad/toggles.ts" @@ -5,4 +5,6 @@ export interface Toggles { export enum ToggleName { feilsituasjon = 'familie.ef.soknad.feilsituasjon', leggTilNynorsk = 'familie.ef.soknad.nynorsk', + + validerBosituasjon = 'familie.ef.soknad.validerbosituasjon', } diff --git "a/src/overgangsst\303\270nad/steg/7-oppsummering/Oppsummering.tsx" "b/src/overgangsst\303\270nad/steg/7-oppsummering/Oppsummering.tsx" index d8c510fb7..9a45992f2 100644 --- "a/src/overgangsst\303\270nad/steg/7-oppsummering/Oppsummering.tsx" +++ "b/src/overgangsst\303\270nad/steg/7-oppsummering/Oppsummering.tsx" @@ -27,7 +27,9 @@ import { useNavigationType } from 'react-router-dom'; import { ESkjemanavn, skjemanavnIdMapping } from '../../../utils/skjemanavn'; import { aktivitetSchema, - bosituasjonSchema, + datoSkalGifteSegEllerBliSamboerSchema, + fødselsdatoSchema, + identSchema, listManglendeFelter, ManglendeFelter, manglendeFelterTilTekst, @@ -36,8 +38,11 @@ import { sivilstatusSchema, } from '../../../utils/validering/validering'; import { Accordion, Alert, BodyShort } from '@navikt/ds-react'; +import { ToggleName } from '../../../models/søknad/toggles'; +import { useToggles } from '../../../context/TogglesContext'; const Oppsummering: React.FC = () => { + const { toggles } = useToggles(); const intl = useLokalIntlContext(); const { mellomlagreOvergangsstønad, søknad } = useSøknad(); const skjemaId = skjemanavnIdMapping[ESkjemanavn.Overgangsstønad]; @@ -58,24 +63,52 @@ const Oppsummering: React.FC = () => { // eslint-disable-next-line }, []); - useEffect(() => { - bosituasjonSchema - .validate(søknad.bosituasjon) - .then() - .catch((e) => { - if ( - !manglendeFelter.includes( - manglendeFelterTilTekst[ManglendeFelter.BOSITUASJONEN_DIN] - ) - ) { - settManglendeFelter((prev: string[]): string[] => [ - ...prev, - manglendeFelterTilTekst[ManglendeFelter.BOSITUASJONEN_DIN], - ]); + const feilIkkeRegistrertFor = (felt: ManglendeFelter) => { + return !manglendeFelter.includes(manglendeFelterTilTekst[felt]); + }; + + const oppdaterManglendeFelter = (manglendeFelt: ManglendeFelter) => { + settManglendeFelter((prev: string[]): string[] => [ + ...prev, + manglendeFelterTilTekst[manglendeFelt], + ]); + }; + + const validerHvisSøkerSkalGifteSeg = () => { + if (søknad.bosituasjon.skalGifteSegEllerBliSamboer?.verdi) { + const harGyldigDatoForGiftemål = + datoSkalGifteSegEllerBliSamboerSchema.isValidSync( + søknad.bosituasjon.datoSkalGifteSegEllerBliSamboer + ); + const harGyldigIdent = + søknad.bosituasjon.vordendeSamboerEktefelle && + identSchema.isValidSync( + søknad.bosituasjon.vordendeSamboerEktefelle.ident + ); + const harGyldigFødselsdato = + søknad.bosituasjon.vordendeSamboerEktefelle && + fødselsdatoSchema.isValidSync( + søknad.bosituasjon.vordendeSamboerEktefelle.fødselsdato + ); + const harGyldigIdentEllerDatoPåVordende = + harGyldigFødselsdato || harGyldigIdent; + if (!harGyldigIdentEllerDatoPåVordende || !harGyldigDatoForGiftemål) { + if (feilIkkeRegistrertFor(ManglendeFelter.BOSITUASJONEN_DIN)) { + oppdaterManglendeFelter(ManglendeFelter.BOSITUASJONEN_DIN); } + logManglendeFelter( + ESkjemanavn.Overgangsstønad, + skjemaId, + 'ValidationError: vordendeSamboerEktefelle mangler gyldig ident eller fødselsdato' + ); + } + } + }; - logManglendeFelter(ESkjemanavn.Overgangsstønad, skjemaId, e); - }); + useEffect(() => { + { + toggles[ToggleName.validerBosituasjon] && validerHvisSøkerSkalGifteSeg(); + } aktivitetSchema .validate(søknad.aktivitet) @@ -86,12 +119,8 @@ const Oppsummering: React.FC = () => { manglendeFelterTilTekst[ManglendeFelter.AKTIVITET] ) ) { - settManglendeFelter((prev: string[]): string[] => [ - ...prev, - manglendeFelterTilTekst[ManglendeFelter.AKTIVITET], - ]); + oppdaterManglendeFelter(ManglendeFelter.AKTIVITET); } - logManglendeFelter(ESkjemanavn.Overgangsstønad, skjemaId, e); }); @@ -99,17 +128,9 @@ const Oppsummering: React.FC = () => { .validate(søknad.sivilstatus) .then() .catch((e) => { - if ( - !manglendeFelter.includes( - manglendeFelterTilTekst[ManglendeFelter.OM_DEG] - ) - ) { - settManglendeFelter((prev: string[]): string[] => [ - ...prev, - manglendeFelterTilTekst[ManglendeFelter.OM_DEG], - ]); + if (feilIkkeRegistrertFor(ManglendeFelter.OM_DEG)) { + oppdaterManglendeFelter(ManglendeFelter.OM_DEG); } - logManglendeFelter(ESkjemanavn.Overgangsstønad, skjemaId, e); }); @@ -117,17 +138,9 @@ const Oppsummering: React.FC = () => { .validate(søknad.merOmDinSituasjon) .then() .catch((e) => { - if ( - !manglendeFelter.includes( - manglendeFelterTilTekst[ManglendeFelter.MER_OM_DIN_SITUASJON] - ) - ) { - settManglendeFelter((prev: string[]): string[] => [ - ...prev, - manglendeFelterTilTekst[ManglendeFelter.MER_OM_DIN_SITUASJON], - ]); + if (feilIkkeRegistrertFor(ManglendeFelter.MER_OM_DIN_SITUASJON)) { + oppdaterManglendeFelter(ManglendeFelter.MER_OM_DIN_SITUASJON); } - logManglendeFelter(ESkjemanavn.Overgangsstønad, skjemaId, e); }); @@ -135,17 +148,9 @@ const Oppsummering: React.FC = () => { .validate(søknad.medlemskap) .then() .catch((e) => { - if ( - !manglendeFelter.includes( - manglendeFelterTilTekst[ManglendeFelter.OM_DEG] - ) - ) { - settManglendeFelter((prev: string[]): string[] => [ - ...prev, - manglendeFelterTilTekst[ManglendeFelter.OM_DEG], - ]); + if (feilIkkeRegistrertFor(ManglendeFelter.OM_DEG)) { + oppdaterManglendeFelter(ManglendeFelter.OM_DEG); } - logManglendeFelter(ESkjemanavn.Overgangsstønad, skjemaId, e); }); }, [søknad, manglendeFelter, skjemaId]); diff --git a/src/utils/validering/validering.ts b/src/utils/validering/validering.ts index ef013f61b..4cb8594a9 100644 --- a/src/utils/validering/validering.ts +++ b/src/utils/validering/validering.ts @@ -1,4 +1,5 @@ import { object, string, array } from 'yup'; +import { dnr as dnrValidator, fnr as fnrValidator } from '@navikt/fnrvalidator'; // eslint-disable-next-line const datoRegex = /^\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$/; @@ -113,13 +114,24 @@ export const sivilstatusSchema = object({ }).default(undefined), }); -export const bosituasjonSchema = object({ - datoSkalGifteSegEllerBliSamboer: object({ - verdi: string().required().matches(datoRegex, 'Ikke en gyldig dato'), - }).default(undefined), - vordendeSamboerEktefelle: object({ - fødselsdato: object({ - verdi: string().required().matches(datoRegex, 'Ikke en gyldig dato'), - }), - }).default(undefined), +const identErGyldig = (ident: string): boolean => + fnrValidator(ident).status === 'valid' || + dnrValidator(ident).status === 'valid'; + +export const datoSkalGifteSegEllerBliSamboerSchema = object({ + verdi: string().required().matches(datoRegex, 'Ikke en gyldig dato'), +}); + +export const identSchema = object({ + verdi: string() + .required() + .test('ident', 'Ikke gyldig ident', (ident: string) => + identErGyldig(ident) + ), +}); + +export const fødselsdatoSchema = object({ + verdi: string() + .required('Fødselsdato mangler') + .matches(datoRegex, 'Ikke en gyldig dato'), });