Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Be kun om måned der vi ikke trenger nøyaktig dato #1172

Open
wants to merge 33 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
8069d4a
Start på månedårvelger
kristeine Apr 2, 2024
8c21db0
Be kun om måned, ikke nøyaktig dato, for pensjonsperioder utland
kristeine Apr 3, 2024
b992c5a
Fjern funksjon som ikke er i bruk
kristeine Apr 3, 2024
9278a15
Ordne stor forbokstav på månedsnavn i oppsummering
kristeine Apr 3, 2024
2d1b51c
Legg feature toggle foran
kristeine Apr 3, 2024
004dd1e
Nullstill månedsvelger dersom avgrensende verdier krysser valgt verdi
kristeine Apr 3, 2024
c05a453
Endre navn på avgrensende verdier
kristeine Apr 3, 2024
d4e8607
Bruk kun måned som verdi når vi sender inn søknaden
kristeine Apr 3, 2024
0f89e49
Merge branch 'main' into feat/be-kun-om-måned-ikke-dato
kristeine Apr 3, 2024
1b6079b
Støtt formatering både fra isostring og date
kristeine Apr 8, 2024
277eadb
Begynn på feilhåndtering og validering
kristeine Apr 8, 2024
6cf275b
Unngå å parse tom streng til dato
kristeine Apr 9, 2024
a3fe899
Oppdater todos
kristeine Apr 9, 2024
44351b3
Oppdater todos
kristeine Apr 19, 2024
388731b
Merge branch 'main' into feat/be-kun-om-måned-ikke-dato
hanneolsen May 13, 2024
1a2f879
Begynner å legge til Sanity-tekster for feilmeldingene
hanneolsen May 13, 2024
10f32c9
Flytt concurrently fra dependencies til devDependencies
halvorbmundal May 13, 2024
c3d3f5c
Rename dokumenterFiltrertPåPrefix -> dokumenterFiltrertPåType
halvorbmundal May 13, 2024
22576b4
Forenkle santiy transformasjonen
halvorbmundal May 13, 2024
1e88f10
Legg til feilmeldinger for månedvelger
halvorbmundal May 13, 2024
4e55827
Bruk produksjonsdatasett for sanity i localhost
halvorbmundal May 14, 2024
053be5b
Legger til månedsvelger på arbeidsperiode
hanneolsen May 14, 2024
0bce5d9
Endre til månedformat i arbeidsperiode i kontrakten mot backend
halvorbmundal May 14, 2024
3a6d3b7
Legg til månedsformat i ArbeidsperiodeOppsummering
halvorbmundal May 14, 2024
2ec5973
Merge branch 'main' into feat/be-kun-om-måned-ikke-dato
halvorbmundal May 15, 2024
7084b47
Legg til tidligsteValgbareMåned på tom-dato for arbeidsperioder
halvorbmundal May 15, 2024
05d4b1a
Legger til månedsvisning på utbetalingsperiode, fikser måned med ukje…
hanneolsen May 15, 2024
cafa352
Hente toggle fra parameter i hovedfunksjonen i stedet
hanneolsen May 16, 2024
864b7e8
Merge branch 'main' into feat/be-kun-om-måned-ikke-dato
hanneolsen May 16, 2024
524ecad
Legger til logikk for å velge samme fra og til måned, legger til feil…
hanneolsen May 28, 2024
b31038c
Omstrukturerer unleash toggle-sjekk for MånedÅrVelger
hanneolsen Jun 24, 2024
75125f7
Omstrukturerer unleash toggle for UtbetalingerModal
hanneolsen Jun 24, 2024
c9c800b
Fikser typo
hanneolsen Jun 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import React, { useEffect } from 'react';

import { MonthPicker, useMonthpicker } from '@navikt/ds-react';
import { useSprakContext } from '@navikt/familie-sprakvelger';

interface IProps {
tidligsteValgbareMåned?: Date;
senesteValgbareMåned?: Date;
label: React.ReactNode;
onChange: (date: Date) => void;
}

export const MånedÅrVelger: React.FC<IProps> = ({
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jeg liker navnet Månedvelger bedre så det stemmer overens med ba-sak-frontend og ks-sak-frontend 😊

tidligsteValgbareMåned,
senesteValgbareMåned,
label,
onChange,
}) => {
const [valgtLocale] = useSprakContext();

const { monthpickerProps, inputProps, reset, selectedMonth } = useMonthpicker({
fromDate: tidligsteValgbareMåned,
toDate: senesteValgbareMåned,
locale: valgtLocale,
onMonthChange: (date?: Date) => date && onChange(date),
});

useEffect(() => {
if (selectedMonth) {
if (
(!!tidligsteValgbareMåned && tidligsteValgbareMåned > selectedMonth) ||
(!!senesteValgbareMåned && senesteValgbareMåned < selectedMonth)
) {
reset();
}
}
}, [tidligsteValgbareMåned, senesteValgbareMåned]);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Logikken for å resette et felt basert på et annet felt funker kun hvis man velger datoer ved å klikke i månedsvelgeren. Jeg får lov til å skrive inn en ugyldig dato manuelt, og det kan virke som det underliggende skjemafeltet som holder på verdien ikke blir satt, noe som gjør at feilmeldingen bruker får er litt rar 🙃

Lurer på om vi kan få en del gratis her hvis vi lager en implementasjon av Månedvelgeren som kombinerer sånn det er gjort for Månedvelger i ba-sak-frontend og for Datovelgeren her i ba-soknad. Syns eeegentlig det smudeste hadde vært å skrive om sånn at skjemafeltet ikke holdt på en ISOString, men heller et Date-objekt (sånn som vi har skrevet om i ba-sak og ks-sak) - men da må man i så fall også sørge for at det blir gjort om til isostring før man sender det til backend (og her også kanskje noe greier med mellomlagring, men er ikke så kjent med koblingen mellom skjemafeltene og det som mellomlagres)

Mye greier å skrive, så kanskje like greit å ta en muntlig prat i morgen i stedet 😆

image


return (
<MonthPicker {...monthpickerProps}>
<MonthPicker.Input {...inputProps} label={label} />
</MonthPicker>
);
};
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import React from 'react';

import { formatISO, parseISO } from 'date-fns';

import { ESvar } from '@navikt/familie-form-elements';

import { useFeatureToggles } from '../../../context/FeatureToggleContext';
import { EFeatureToggle } from '../../../typer/feature-toggles';
import { IPensjonsperiode } from '../../../typer/perioder';
import { PersonType } from '../../../typer/personType';
import { dagensDato, gårsdagensDato } from '../../../utils/dato';
Expand All @@ -10,6 +14,7 @@ import Datovelger from '../Datovelger/Datovelger';
import { LandDropdown } from '../Dropdowns/LandDropdown';
import JaNeiSpm from '../JaNeiSpm/JaNeiSpm';
import KomponentGruppe from '../KomponentGruppe/KomponentGruppe';
import { MånedÅrVelger } from '../MånedÅrVelger/MånedÅrVelger';
import { SkjemaFeiloppsummering } from '../SkjemaFeiloppsummering/SkjemaFeiloppsummering';
import SkjemaModal from '../SkjemaModal/SkjemaModal';
import SpråkTekst from '../SpråkTekst/SpråkTekst';
Expand Down Expand Up @@ -42,6 +47,8 @@ export const PensjonModal: React.FC<Props> = ({
erDød,
});

const { toggles } = useFeatureToggles();

const { mottarPensjonNå, pensjonTilDato, pensjonFraDato, pensjonsland } = skjema.felter;

const onLeggTil = () => {
Expand Down Expand Up @@ -119,34 +126,77 @@ export const PensjonModal: React.FC<Props> = ({
/>
)}

{pensjonFraDato.erSynlig && (
<Datovelger
felt={pensjonFraDato}
label={
<SpråkTekst
id={hentSpørsmålTekstId(PensjonsperiodeSpørsmålId.fraDatoPensjon)}
values={{ ...(barn && { barn: barn.navn }) }}
/>
}
skjema={skjema}
avgrensMaxDato={periodenErAvsluttet ? gårsdagensDato() : dagensDato()}
/>
)}
{pensjonTilDato.erSynlig && (
<Datovelger
felt={pensjonTilDato}
label={
<SpråkTekst
id={hentSpørsmålTekstId(PensjonsperiodeSpørsmålId.tilDatoPensjon)}
values={{ ...(barn && { barn: barn.navn }) }}
/>
}
skjema={skjema}
avgrensMaxDato={dagensDato()}
tilhørendeFraOgMedFelt={pensjonFraDato}
dynamisk
/>
)}
{pensjonFraDato.erSynlig &&
(toggles[EFeatureToggle.BE_OM_MÅNED_IKKE_DATO] ? (
<MånedÅrVelger
label={
<SpråkTekst
id={hentSpørsmålTekstId(
PensjonsperiodeSpørsmålId.fraDatoPensjon
)}
values={{ ...(barn && { barn: barn.navn }) }}
/>
}
senesteValgbareMåned={
periodenErAvsluttet ? gårsdagensDato() : dagensDato()
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blir dette fortsatt riktig nå med månedvelger?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja, det tror jeg. Men det kan hende det er noe jeg overser?
Datoen som vi sender inn til månedsvelgeren brukes kun til å bestemme hvilken måned som skal settes.

Det enkle caset:
Hvis dagens dato er 15. juni 2024 og perioden ikke er avsluttet, sender vi med dagens dato. Da er det juni 2024 som kommer frem som sist valgbare måned. I det tilfellet kunne denne logikken kanskje endres på.

Caset rundt månedsskifter:
Hvis dagens dato er 1. juni 2024 og perioden er avsluttet, skal man etter den eksisterende logikken kun få velge frem til gårsdagen, 31. mai. Da vil mai 2024 være sist valgbare måned.

Er det noe annet jeg ikke har tenkt på her? 🤔

onChange={dato =>
pensjonFraDato.validerOgSettFelt(
formatISO(dato, { representation: 'date' })
)
}
/>
) : (
<Datovelger
felt={pensjonFraDato}
label={
<SpråkTekst
id={hentSpørsmålTekstId(
PensjonsperiodeSpørsmålId.fraDatoPensjon
)}
values={{ ...(barn && { barn: barn.navn }) }}
/>
}
skjema={skjema}
avgrensMaxDato={periodenErAvsluttet ? gårsdagensDato() : dagensDato()}
/>
))}
{pensjonTilDato.erSynlig &&
(toggles[EFeatureToggle.BE_OM_MÅNED_IKKE_DATO] ? (
<MånedÅrVelger
label={
<SpråkTekst
id={hentSpørsmålTekstId(
PensjonsperiodeSpørsmålId.tilDatoPensjon
)}
values={{ ...(barn && { barn: barn.navn }) }}
/>
}
tidligsteValgbareMåned={parseISO(pensjonFraDato.verdi)}
senesteValgbareMåned={dagensDato()}
onChange={dato =>
pensjonTilDato.validerOgSettFelt(
formatISO(dato, { representation: 'date' })
)
}
/>
) : (
<Datovelger
felt={pensjonTilDato}
label={
<SpråkTekst
id={hentSpørsmålTekstId(
PensjonsperiodeSpørsmålId.tilDatoPensjon
)}
values={{ ...(barn && { barn: barn.navn }) }}
/>
}
skjema={skjema}
avgrensMaxDato={dagensDato()}
tilhørendeFraOgMedFelt={pensjonFraDato}
dynamisk
/>
))}
</KomponentGruppe>
{visFeiloppsummering(skjema) && <SkjemaFeiloppsummering skjema={skjema} />}
</SkjemaModal>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@ import React from 'react';
import { ESvar } from '@navikt/familie-form-elements';
import { useSprakContext } from '@navikt/familie-sprakvelger';

import { useFeatureToggles } from '../../../context/FeatureToggleContext';
import { IBarnMedISøknad } from '../../../typer/barn';
import { EFeatureToggle } from '../../../typer/feature-toggles';
import { IPensjonsperiode } from '../../../typer/perioder';
import { PersonType } from '../../../typer/personType';
import { formaterDato } from '../../../utils/dato';
import { formaterDato, formaterDatoKunMåned } from '../../../utils/dato';
import { landkodeTilSpråk } from '../../../utils/språk';
import { uppercaseFørsteBokstav } from '../../../utils/visning';
import { OppsummeringFelt } from '../../SøknadsSteg/Oppsummering/OppsummeringFelt';
import PeriodeOppsummering from '../PeriodeOppsummering/PeriodeOppsummering';
import SpråkTekst from '../SpråkTekst/SpråkTekst';
Expand Down Expand Up @@ -42,6 +45,7 @@ export const PensjonsperiodeOppsummering: React.FC<PensjonsperiodeOppsummeringPr
barn = undefined,
}) => {
const [valgtLocale] = useSprakContext();
const { toggles } = useFeatureToggles();
const { mottarPensjonNå, pensjonsland, pensjonFra, pensjonTil } = pensjonsperiode;

const periodenErAvsluttet =
Expand Down Expand Up @@ -85,13 +89,25 @@ export const PensjonsperiodeOppsummering: React.FC<PensjonsperiodeOppsummeringPr
{pensjonFra.svar && (
<OppsummeringFelt
tittel={spørsmålSpråkTekst(PensjonsperiodeSpørsmålId.fraDatoPensjon)}
søknadsvar={formaterDato(pensjonFra.svar)}
søknadsvar={
toggles[EFeatureToggle.BE_OM_MÅNED_IKKE_DATO]
? uppercaseFørsteBokstav(
formaterDatoKunMåned(pensjonFra.svar, valgtLocale)
)
: formaterDato(pensjonFra.svar)
}
/>
)}
{pensjonTil.svar && (
<OppsummeringFelt
tittel={spørsmålSpråkTekst(PensjonsperiodeSpørsmålId.tilDatoPensjon)}
søknadsvar={formaterDato(pensjonTil.svar)}
søknadsvar={
toggles[EFeatureToggle.BE_OM_MÅNED_IKKE_DATO]
? uppercaseFørsteBokstav(
formaterDatoKunMåned(pensjonTil.svar, valgtLocale)
)
: formaterDato(pensjonTil.svar)
}
/>
)}
</PeriodeOppsummering>
Expand Down
9 changes: 8 additions & 1 deletion src/frontend/hooks/useSendInnSkjema.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import { RessursStatus } from '@navikt/familie-typer';
import Miljø from '../../shared-utils/Miljø';
import { erModellMismatchResponsRessurs } from '../../shared-utils/modellversjon';
import { useApp } from '../context/AppContext';
import { useFeatureToggles } from '../context/FeatureToggleContext';
import { EFeatureToggle } from '../typer/feature-toggles';
import { ISøknadKontraktV8 } from '../typer/kontrakt/v8';
import { dataISøknadKontraktFormatV8 } from '../utils/mappingTilKontrakt/søknadV8';
import { sendInn } from '../utils/sendInnSkjema';
Expand All @@ -16,10 +18,15 @@ export const useSendInnSkjema = (): {
const { axiosRequest, søknad, settInnsendingStatus, settSisteModellVersjon } = useApp();
const { soknadApiProxyUrl } = Miljø();
const [valgtSpråk] = useSprakContext();
const { toggles } = useFeatureToggles();
const sendInnSkjemaV8 = async (): Promise<[boolean, ISøknadKontraktV8]> => {
settInnsendingStatus({ status: RessursStatus.HENTER });

const formatert: ISøknadKontraktV8 = dataISøknadKontraktFormatV8(valgtSpråk, søknad);
const formatert: ISøknadKontraktV8 = dataISøknadKontraktFormatV8(
valgtSpråk,
søknad,
toggles[EFeatureToggle.BE_OM_MÅNED_IKKE_DATO] === true
);

const res = await sendInn<ISøknadKontraktV8>(
formatert,
Expand Down
2 changes: 2 additions & 0 deletions src/frontend/typer/feature-toggles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ export enum EKillSwitchToggle {

export enum EFeatureToggle {
KOMBINER_SOKNADER = 'KOMBINER_SOKNADER',
BE_OM_MÅNED_IKKE_DATO = 'BE_OM_MÅNED_IKKE_DATO',
}

export const ToggleKeys: Record<EFeatureToggle, string> = {
[EFeatureToggle.KOMBINER_SOKNADER]: 'familie-ba-soknad.kombiner-soknader',
[EFeatureToggle.BE_OM_MÅNED_IKKE_DATO]: 'familie-ba-soknad.be-om-mnd-ikke-dato',
};

export type EAllFeatureToggles = Record<EFeatureToggle, boolean>;
Expand Down
21 changes: 16 additions & 5 deletions src/frontend/utils/dato.tsx
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hadde egentlig vært litt nice å gjøre om funksjonene i denne filen til å ligne på hvordan vi gjør det i ks- og ba-sak og i familie-tilbake så blir det enklere forvaltning

Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,19 @@ import {
isFuture,
isToday,
isValid,
Locale,
parse,
startOfDay,
startOfToday,
sub,
} from 'date-fns';
import { enGB, nb, nn } from 'date-fns/locale';

import { feil, FeltState, ok } from '@navikt/familie-skjema';
import { LocaleType } from '@navikt/familie-sprakvelger';

import SpråkTekst from '../components/Felleskomponenter/SpråkTekst/SpråkTekst';
import { AlternativtSvarForInput, DatoMedUkjent, ISODateString } from '../typer/common';
import { ISODateString } from '../typer/common';

export const erDatoFormatGodkjent = (dato: Date) => isValid(dato);

Expand Down Expand Up @@ -101,8 +104,16 @@ export const validerDato = (
export const formaterDato = (datoString: ISODateString) =>
format(new Date(datoString), 'dd.MM.yyyy');

export const formaterDatoMedUkjent = (datoMedUkjent: DatoMedUkjent, tekstForUkjent): string => {
return datoMedUkjent === AlternativtSvarForInput.UKJENT
? tekstForUkjent
: format(new Date(datoMedUkjent), 'dd.MM.yyyy');
export const formaterDatoKunMåned = (datoString: ISODateString, språk: LocaleType) =>
format(new Date(datoString), 'MMMM yyyy', { locale: mapSpråkvalgTilDateFnsLocale(språk) });

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;
}
};
5 changes: 4 additions & 1 deletion src/frontend/utils/mappingTilKontrakt/andreForelderV8.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ import { tilIPensjonsperiodeIKontraktFormat } from './pensjonsperioder';
export const andreForelderTilISøknadsfeltV8 = (
andreForelder: IAndreForelder,
barn: IBarnMedISøknad,
valgtSpråk: LocaleType
valgtSpråk: LocaleType,
toggleBeOmMånedIkkeDato: boolean
): IAndreForelderIKontraktFormatV8 => {
const {
navn,
Expand Down Expand Up @@ -211,6 +212,7 @@ export const andreForelderTilISøknadsfeltV8 = (
personType: PersonType.AndreForelder,
erDød: forelderErDød,
barn,
toggleBeOmMånedIkkeDato,
})
),
arbeidsperioderNorge: arbeidsperioderNorge.map((periode, index) =>
Expand All @@ -230,6 +232,7 @@ export const andreForelderTilISøknadsfeltV8 = (
personType: PersonType.AndreForelder,
erDød: forelderErDød,
barn,
toggleBeOmMånedIkkeDato,
})
),
andreUtbetalingsperioder: andreUtbetalingsperioder.map((periode, index) =>
Expand Down
14 changes: 11 additions & 3 deletions src/frontend/utils/mappingTilKontrakt/barnV8.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ import { utenlandsperiodeTilISøknadsfelt } from './utenlandsperiode';
export const barnISøknadsFormatV8 = (
barn: IBarnMedISøknad,
søker: ISøker,
valgtSpråk: LocaleType
valgtSpråk: LocaleType,
toggleBeOmMånedIkkeDato: boolean
): ISøknadIKontraktBarnV8 => {
/* eslint-disable @typescript-eslint/no-unused-vars */
const {
Expand Down Expand Up @@ -119,10 +120,17 @@ export const barnISøknadsFormatV8 = (
)
),
andreForelder: andreForelder
? andreForelderTilISøknadsfeltV8(andreForelder, barn, valgtSpråk)
? andreForelderTilISøknadsfeltV8(
andreForelder,
barn,
valgtSpråk,
toggleBeOmMånedIkkeDato
)
: null,

omsorgsperson: omsorgsperson ? omsorgspersonTilISøknadsfeltV8(omsorgsperson, barn) : null,
omsorgsperson: omsorgsperson
? omsorgspersonTilISøknadsfeltV8(omsorgsperson, barn, toggleBeOmMånedIkkeDato)
: null,
spørsmål: {
...spørmålISøknadsFormat(typetBarnSpørsmål, {
navn: navn,
Expand Down
5 changes: 4 additions & 1 deletion src/frontend/utils/mappingTilKontrakt/omsorgspersonV8.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ import { tilIPensjonsperiodeIKontraktFormat } from './pensjonsperioder';

export const omsorgspersonTilISøknadsfeltV8 = (
omsorgsperson: IOmsorgsperson,
barn: IBarnMedISøknad
barn: IBarnMedISøknad,
toggleBeOmMånedIkkeDato: boolean
): IOmsorgspersonIKontraktFormatV8 => {
const {
navn,
Expand Down Expand Up @@ -126,6 +127,7 @@ export const omsorgspersonTilISøknadsfeltV8 = (
gjelderUtlandet: true,
personType: PersonType.Omsorgsperson,
barn: barn,
toggleBeOmMånedIkkeDato,
})
),
pensjonNorge: søknadsfeltBarn(
Expand All @@ -140,6 +142,7 @@ export const omsorgspersonTilISøknadsfeltV8 = (
gjelderUtlandet: false,
personType: PersonType.Omsorgsperson,
barn: barn,
toggleBeOmMånedIkkeDato,
})
),
andreUtbetalinger: søknadsfeltBarn(
Expand Down
Loading
Loading