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

Forsøke å forenkle logikk på forsiden #4812

Open
wants to merge 17 commits into
base: master
Choose a base branch
from
Open
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { ContextDataType, useContextSaveAnyData } from './FpDataContext';
export const useSetSøknadsdata = () => {
const oppdaterData = useContextSaveAnyData();

const oppdaterSøknadIState = (søknad: Søknad, eksisterendeSak?: EksisterendeSak) => {
const oppdaterSøknadIState = (søknad: Partial<Søknad>, eksisterendeSak?: EksisterendeSak) => {
oppdaterData(ContextDataType.SØKERSITUASJON, søknad.søkersituasjon);
oppdaterData(ContextDataType.OM_BARNET, søknad.barn);
oppdaterData(ContextDataType.ANNEN_FORELDER, søknad.annenForelder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { DDMMMMYYY_DATE_FORMAT } from '@navikt/fp-constants';
import { RhfRadioGroup } from '@navikt/fp-form-hooks';
import { isRequired } from '@navikt/fp-validation';

export enum SelectableBarnOptions {
enum SelectableBarnOptions {
SØKNAD_GJELDER_NYTT_BARN = 'søknad_gjeder_nytt_barn',
}

Expand Down
139 changes: 53 additions & 86 deletions apps/foreldrepengesoknad/src/pages/forside/Forside.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,14 @@ import { ContextDataType, useContextSaveAnyData } from 'appData/FpDataContext';
import { SøknadRoutes } from 'appData/routes';
import { useFpNavigator } from 'appData/useFpNavigator';
import { useSetSøknadsdata } from 'appData/useSetSøknadsdata';
import { useMemo, useState } from 'react';
import { useMemo } from 'react';
import { useForm } from 'react-hook-form';
import { FormattedMessage, useIntl } from 'react-intl';
import { Søknad } from 'types/Søknad';
import {
lagEndringsSøknad,
lagNySøknadForRegistrerteBarn,
lagSøknadFraValgteBarnMedSak,
mapSøkerensEksisterendeSakFromDTO,
opprettSøknadFraEksisterendeSak,
opprettSøknadFraValgteBarn,
opprettSøknadFraValgteBarnMedSak,
} from 'utils/eksisterendeSakUtils';

import { Alert, BodyShort, Button, GuidePanel, HStack, Heading, VStack } from '@navikt/ds-react';
Expand All @@ -21,7 +20,7 @@ import { RhfConfirmationPanel, RhfForm } from '@navikt/fp-form-hooks';
import { LocaleNo, Søkerinfo } from '@navikt/fp-types';
import { ContentWrapper, LanguageToggle } from '@navikt/fp-ui';

import { BarnVelger, SelectableBarnOptions } from './BarnVelger';
import { BarnVelger } from './BarnVelger';
import { DinePlikter } from './dine-plikter/DinePlikter';
import { getBarnFraNesteSak, getSelectableBarnOptions, sorterSelectableBarnEtterYngst } from './forsideUtils';
import { DinePersonopplysningerModal } from './modaler/DinePersonopplysningerModal';
Expand Down Expand Up @@ -57,91 +56,82 @@ export const Forside = ({
const intl = useIntl();

const navigator = useFpNavigator(søkerInfo.arbeidsforhold, mellomlagreSøknadOgNaviger);
const [isSubmitting, setIsSubmitting] = useState(false);
const oppdaterDataIState = useContextSaveAnyData();
const { oppdaterSøknadIState } = useSetSøknadsdata();

const [isDinePersonopplysningerModalOpen, setIsDinePersonopplysningerModalOpen] = useState(false);

// Denne må memoriserast, ellers får barna ulik id for kvar render => trøbbel
const selectableBarn = useMemo(
() => getSelectableBarnOptions(saker, søkerInfo.søker.barn),
() => [...getSelectableBarnOptions(saker, søkerInfo.søker.barn)].sort(sorterSelectableBarnEtterYngst),
[saker, søkerInfo.søker.barn],
);
const sortedSelectableBarn = [...selectableBarn].sort(sorterSelectableBarnEtterYngst);

const onSubmit = (values: VelkommenFormData) => {
if (values.harForståttRettigheterOgPlikter !== true) {
// Skal i utgangspunktet ikke få submitte hvis denne ikke er true
if (!values.harForståttRettigheterOgPlikter) {
return;
}
setIsSubmitting(true);

const valgteBarn =
values.valgteBarn === SelectableBarnOptions.SØKNAD_GJELDER_NYTT_BARN
? undefined
: selectableBarn.find((sb) => sb.id === values.valgteBarn);
const vilSøkeOmEndring = valgteBarn !== undefined && !!valgteBarn.kanSøkeOmEndring;

let barnFraNesteSak = undefined;
if (valgteBarn !== undefined) {
barnFraNesteSak = getBarnFraNesteSak(valgteBarn, sortedSelectableBarn);
oppdaterDataIState(ContextDataType.BARN_FRA_NESTE_SAK, barnFraNesteSak);
}
setHarGodkjentVilkår(true);

const valgtEksisterendeSak =
vilSøkeOmEndring && valgteBarn.sak !== undefined
? saker.find((sak) => sak.saksnummer === valgteBarn.sak?.saksnummer)
: undefined;
const valgteBarn = selectableBarn.find((sb) => sb.id === values.valgteBarn);

const førsteUttaksdagNesteBarnsSak =
barnFraNesteSak !== undefined ? barnFraNesteSak.startdatoFørsteStønadsperiode : undefined;
// Har valgt å opprette en helt ny sak
if (valgteBarn === undefined) {
setErEndringssøknad(false);
setSøknadGjelderNyttBarn(true);
return navigator.goToNextStep(SøknadRoutes.SØKERSITUASJON);
}

const endringssøknad = vilSøkeOmEndring && valgtEksisterendeSak;
const nySøknadPåAlleredeSøktBarn =
valgteBarn !== undefined && valgteBarn.sak !== undefined && valgteBarn.kanSøkeOmEndring === false;
const nySøknadPåValgteRegistrerteBarn =
!endringssøknad && !nySøknadPåAlleredeSøktBarn && valgteBarn !== undefined;
const barnFraNesteSak = getBarnFraNesteSak(valgteBarn, selectableBarn);
oppdaterDataIState(ContextDataType.BARN_FRA_NESTE_SAK, barnFraNesteSak);
const vilSøkeOmEndring = !!valgteBarn.kanSøkeOmEndring;

let nextRoute = SøknadRoutes.SØKERSITUASJON;
let søknadGjelderNyttBarn = false;
// TODO: hvorfor lete etter sak her. Er ikke sak allerede satt på "valgteBarn"
const valgtEksisterendeSak = vilSøkeOmEndring
? saker.find((sak) => sak.saksnummer === valgteBarn.sak?.saksnummer)
: undefined;

if (endringssøknad) {
if (valgtEksisterendeSak) {
const eksisterendeSak = mapSøkerensEksisterendeSakFromDTO(
valgtEksisterendeSak,
førsteUttaksdagNesteBarnsSak,
barnFraNesteSak?.startdatoFørsteStønadsperiode,
valgteBarn.fødselsdatoer,
);

nextRoute = SøknadRoutes.UTTAKSPLAN;

const søknad = opprettSøknadFraEksisterendeSak(
const søknad = lagEndringsSøknad(
søkerInfo.søker,
eksisterendeSak!,
eksisterendeSak,
intl,
valgtEksisterendeSak.annenPart,
valgteBarn,
) as Søknad;
);
oppdaterSøknadIState(søknad, eksisterendeSak);
} else if (nySøknadPåAlleredeSøktBarn) {
const søknad = opprettSøknadFraValgteBarnMedSak(
valgteBarn,

setErEndringssøknad(true);
setSøknadGjelderNyttBarn(false);
return navigator.goToNextStep(SøknadRoutes.UTTAKSPLAN);
}

// Det finnes en sak som ikke kan endres. Lag derfor ny søknad fra eksisterende sak
if (valgteBarn.sak !== undefined && valgteBarn.kanSøkeOmEndring === false) {
const søknad = lagSøknadFraValgteBarnMedSak(
{ ...valgteBarn, sak: valgteBarn.sak }, //TODO: usikker om dette blir peneere TS eller hacky
intl,
søkerInfo.søker.barn,
søkerInfo.søker.fnr,
) as Søknad;
oppdaterSøknadIState(søknad);
} else if (nySøknadPåValgteRegistrerteBarn) {
const søknad = opprettSøknadFraValgteBarn(valgteBarn) as Søknad;
);
oppdaterSøknadIState(søknad);
} else {
søknadGjelderNyttBarn = true;
}

setHarGodkjentVilkår(values.harForståttRettigheterOgPlikter!);
setErEndringssøknad(vilSøkeOmEndring);
setSøknadGjelderNyttBarn(søknadGjelderNyttBarn);
// Barn er registrert, men det finnes ingen sak
if (!valgtEksisterendeSak) {
const søknad = lagNySøknadForRegistrerteBarn(valgteBarn);
oppdaterSøknadIState(søknad);
}

return navigator.goToNextStep(nextRoute);
// TODO: vurder om disse skal ligge som default, eller om vi vil ha de inn i "if" og kaste en error hvis ingen av casene slår inn.
setErEndringssøknad(false);
setSøknadGjelderNyttBarn(false);
return navigator.goToNextStep(SøknadRoutes.SØKERSITUASJON);
};

const formMethods = useForm<VelkommenFormData>({
Expand All @@ -151,14 +141,9 @@ export const Forside = ({
});

const valgtBarnId = formMethods.watch('valgteBarn');

const valgtBarn =
valgtBarnId === SelectableBarnOptions.SØKNAD_GJELDER_NYTT_BARN
? undefined
: selectableBarn.find((barn) => barn.id === valgtBarnId);

const valgtBarn = selectableBarn.find((barn) => barn.id === valgtBarnId);
const knapptekst =
valgtBarn !== undefined && valgtBarn.kanSøkeOmEndring === true
valgtBarn?.kanSøkeOmEndring === true
? intl.formatMessage({ id: 'velkommen.endreSøknad' })
: intl.formatMessage({ id: 'velkommen.begynnMedSøknad' });

Expand Down Expand Up @@ -188,7 +173,7 @@ export const Forside = ({
/>
</VStack>
</GuidePanel>
<BarnVelger selectableBarn={sortedSelectableBarn} />
<BarnVelger selectableBarn={selectableBarn} />
<Alert variant="info">
<FormattedMessage id="velkommen.lagring.info" />
</Alert>
Expand All @@ -214,29 +199,11 @@ export const Forside = ({
</VStack>
</RhfConfirmationPanel>
<HStack justify="center">
<Button type="submit" variant="primary" disabled={isSubmitting} loading={isSubmitting}>
<Button type="submit" variant="primary">
{knapptekst}
</Button>
</HStack>
<HStack justify="center">
<BodyShort>
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
<a
className="lenke"
href="#"
onClick={(e) => {
e.preventDefault();
setIsDinePersonopplysningerModalOpen(true);
}}
>
<FormattedMessage id="velkommen.lesMerOmPersonopplysninger" />
</a>
</BodyShort>
</HStack>
<DinePersonopplysningerModal
isOpen={isDinePersonopplysningerModalOpen}
onRequestClose={() => setIsDinePersonopplysningerModalOpen(false)}
/>
<DinePersonopplysningerModal />
</VStack>
</ContentWrapper>
</VStack>
Expand Down
Loading
Loading