diff --git a/loosely-type-checked-files.json b/loosely-type-checked-files.json index a38fd2f009..2b834c7857 100644 --- a/loosely-type-checked-files.json +++ b/loosely-type-checked-files.json @@ -125,19 +125,6 @@ "packages/fakta-bosted-soker/src/components/BostedSokerView.tsx", "packages/fakta-direkte-overgang/src/DirekteOvergangFaktaIndex.stories.tsx", "packages/fakta-direkte-overgang/src/components/ManglerSøknadForm.tsx", - "packages/fakta-etablert-tilsyn/src/ui/EtablertTilsyn.stories.tsx", - "packages/fakta-etablert-tilsyn/src/ui/EtablertTilsynContainer.tsx", - "packages/fakta-etablert-tilsyn/src/ui/components/beredskap/beredskapsperioderoversikt/Beredskapsperiodeoversikt.tsx", - "packages/fakta-etablert-tilsyn/src/ui/components/beredskap/vurdering-av-beredskapsperioder-form/VurderingAvBeredskapsperioderForm.tsx", - "packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynMedSmoring.tsx", - "packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynRowContent.tsx", - "packages/fakta-etablert-tilsyn/src/ui/components/nattevåk/nattevåksperiodeoversikt/Nattevåksperiodeoversikt.tsx", - "packages/fakta-etablert-tilsyn/src/ui/components/nattevåk/vurdering-av-nattevåksperioder-form/VurderingAvNattevåksperioderForm.tsx", - "packages/fakta-etablert-tilsyn/src/ui/components/periodenavigasjon/Periodenavigasjon.tsx", - "packages/fakta-etablert-tilsyn/src/ui/components/write-access-bound-content/WriteAccessBoundContent.tsx", - "packages/fakta-etablert-tilsyn/src/ui/mainReducer.ts", - "packages/fakta-etablert-tilsyn/src/util/dateUtils.ts", - "packages/fakta-etablert-tilsyn/src/util/periodUtils.ts", "packages/fakta-feilutbetaling/src/components/FeilutbetalingPerioderForm.spec.tsx", "packages/fakta-inntektsmelding/src/stories/Inntektsmelding.stories.tsx", "packages/fakta-inntektsmelding/src/ui/InntektsmeldingContainer.tsx", @@ -545,8 +532,6 @@ "packages/utils/src/http-utils/__tests__/httpUtils.spec.ts", "packages/utils/src/http-utils/responseHelpers.ts", "packages/utils/src/objectUtils.ts", - "packages/utils/src/period-utils/Period.ts", - "packages/utils/src/period-utils/getPeriodDifference.ts", "packages/utils/src/stringUtils.spec.tsx", "packages/utils/src/urlUtils.spec.ts", "packages/utils/src/urlUtils.ts", diff --git a/packages/fakta-etablert-tilsyn/src/ui/EtablertTilsyn.stories.tsx b/packages/fakta-etablert-tilsyn/src/ui/EtablertTilsyn.stories.tsx index e6d3805d3a..20d3c5fe7b 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/EtablertTilsyn.stories.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/EtablertTilsyn.stories.tsx @@ -1,11 +1,11 @@ /* eslint-disable no-console */ import type { Meta, StoryObj } from '@storybook/react'; -import { expect, userEvent, waitFor, within } from '@storybook/test'; +import { expect, fn, userEvent, waitFor } from '@storybook/test'; import { handlers } from '../../mock/api-mock'; import { mockUrlPrepend } from '../../mock/constants'; import EtablertTilsynContainer from './EtablertTilsynContainer'; -const meta: Meta = { +const meta = { title: 'fakta/fakta-etablert-tilsyn', component: EtablertTilsynContainer, args: { @@ -16,9 +16,9 @@ const meta: Meta = { sykdom: `${mockUrlPrepend}/mock/sykdom`, sykdomInnleggelse: `${mockUrlPrepend}/mock/sykdomInnleggelse`, }, - httpErrorHandler: undefined, - lagreBeredskapvurdering: undefined, - lagreNattevåkvurdering: undefined, + httpErrorHandler: fn(), + lagreBeredskapvurdering: fn(), + lagreNattevåkvurdering: fn(), harAksjonspunktForBeredskap: true, harAksjonspunktForNattevåk: true, }, @@ -28,15 +28,18 @@ const meta: Meta = { dangerouslyIgnoreUnhandledErrors: true, }, }, -}; +} satisfies Meta; export default meta; -type Story = StoryObj; +type Story = StoryObj; export const EtablertTilsyn: Story = { - play: async ({ canvasElement, step }) => { - const canvas = within(canvasElement); - + parameters: { + msw: { + handlers, + }, + }, + play: async ({ canvas, step, args }) => { await step('skal ha skjema for håndtering av beredskap', async () => { await userEvent.click(canvas.getByRole('tab', { name: 'Beredskap' })); await waitFor(async () => { @@ -53,6 +56,22 @@ export const EtablertTilsyn: Story = { await userEvent.click(canvas.getByText('Ja, i deler av perioden')); await expect(canvas.getByLabelText('Fra')).toBeInTheDocument(); await expect(canvas.getByLabelText('Til')).toBeInTheDocument(); + await userEvent.click(canvas.getByText('Bekreft og fortsett')); + await waitFor(() => + expect(args.data.lagreBeredskapvurdering).toHaveBeenCalledWith({ + vurderinger: [ + { + begrunnelse: 'test', + kilde: '', + periode: { + fom: '2021-07-11', + tom: '2021-07-12', + }, + resultat: 'OPPFYLT', + }, + ], + }), + ); }); await step('skal ha skjema for håndtering av nattevåk', async () => { @@ -71,12 +90,22 @@ export const EtablertTilsyn: Story = { await userEvent.click(canvas.getByText('Ja, i deler av perioden')); await expect(canvas.getByLabelText('Fra')).toBeInTheDocument(); await expect(canvas.getByLabelText('Til')).toBeInTheDocument(); + await userEvent.click(canvas.getByText('Bekreft og fortsett')); + await waitFor(() => + expect(args.data.lagreNattevåkvurdering).toHaveBeenCalledWith({ + vurderinger: [ + { + begrunnelse: 'test', + kilde: '', + periode: { + fom: '2021-07-11', + tom: '2021-07-12', + }, + resultat: 'OPPFYLT', + }, + ], + }), + ); }); }, }; - -EtablertTilsyn.parameters = { - msw: { - handlers, - }, -}; diff --git a/packages/fakta-etablert-tilsyn/src/ui/EtablertTilsynContainer.tsx b/packages/fakta-etablert-tilsyn/src/ui/EtablertTilsynContainer.tsx index 6367b811ad..1649d94d7b 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/EtablertTilsynContainer.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/EtablertTilsynContainer.tsx @@ -1,17 +1,20 @@ import { get, Period } from '@fpsak-frontend/utils'; import { Alert, Tabs } from '@navikt/ds-react'; import { ChildIcon, Infostripe, PageContainer, WarningIcon } from '@navikt/ft-plattform-komponenter'; +import { VurderingDtoResultat } from '@navikt/k9-sak-typescript-client'; +import { useQuery } from '@tanstack/react-query'; import classnames from 'classnames'; -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; +import BeredskapType from '../types/BeredskapType'; import ContainerContract from '../types/ContainerContract'; +import EtablertTilsynType from '../types/EtablertTilsynType'; +import NattevåkType from '../types/NattevåkType'; import { InnleggelsesperiodeResponse, SykdomResponse, TilsynResponse } from '../types/TilsynResponse'; import Beredskapsperiodeoversikt from './components/beredskap/beredskapsperioderoversikt/Beredskapsperiodeoversikt'; import EtablertTilsynMedSmoring from './components/etablertTilsyn/EtablertTilsynMedSmoring'; import Nattevåksperiodeoversikt from './components/nattevåk/nattevåksperiodeoversikt/Nattevåksperiodeoversikt'; import ContainerContext from './context/ContainerContext'; -import ActionType from './mainActionTypes'; import styles from './mainComponent.module.css'; -import mainComponentReducer from './mainReducer'; interface MainComponentProps { data: ContainerContract; @@ -46,84 +49,93 @@ const getDefaultActiveTab = ({ harAksjonspunktForBeredskap, harAksjonspunktForNa return tabs[0]; }; -const EtablertTilsynContainer = ({ data }: MainComponentProps) => { - const [state, dispatch] = React.useReducer(mainComponentReducer, { - isLoading: true, - etablertTilsyn: null, - beredskap: null, - nattevåk: null, - sykdomsperioderSomIkkeErOppfylt: [], - }); - const { - isLoading, +const transformEtablertTilsynResponse = (response: TilsynResponse) => { + const etablertTilsyn = response.etablertTilsynPerioder.map( + etablertTilsynPeriode => new EtablertTilsynType(etablertTilsynPeriode), + ); + const beredskap = new BeredskapType(response.beredskap); + const nattevåk = new NattevåkType(response.nattevåk); + const smurtEtablertTilsynPerioder = response.smortEtablertTilsynPerioder.map( + etablertTilsynPeriode => new EtablertTilsynType(etablertTilsynPeriode), + ); + return { etablertTilsyn, - smurtEtablertTilsynPerioder, beredskap, nattevåk, - sykdomsperioderSomIkkeErOppfylt, - tilsynHarFeilet, - sykdomHarFeilet, - } = state; + smurtEtablertTilsynPerioder, + }; +}; + +const transformSykdomResponse = (response: SykdomResponse) => { + const resterendeVurderingsperioder = response?.resterendeVurderingsperioder?.map(v => new Period(v.fom, v.tom)); + const sykdomsperioderSomIkkeErOppfylt = response.vurderingselementer + .filter(v => v.resultat !== VurderingDtoResultat.OPPFYLT) + .map(v => new Period(v.periode.fom, v.periode.tom)); + return [...sykdomsperioderSomIkkeErOppfylt, ...resterendeVurderingsperioder]; +}; + +const EtablertTilsynContainer = ({ data }: MainComponentProps) => { const { endpoints, httpErrorHandler, harAksjonspunktForBeredskap, harAksjonspunktForNattevåk } = data; - const [innleggelsesperioder, setInnleggelsesperioder] = React.useState([]); - const [innleggelserFeilet, setInnleggelserFeilet] = React.useState(false); - const controller = useMemo(() => new AbortController(), []); - const getTilsyn = () => + + const getTilsyn = (signal: AbortSignal) => get(endpoints.tilsyn, httpErrorHandler, { - signal: controller.signal, + signal: signal, }); - const getSykdom = () => + const getSykdom = (signal: AbortSignal) => get(endpoints.sykdom, httpErrorHandler, { - signal: controller.signal, + signal: signal, }); - const getInnleggelser = () => + const getInnleggelser = (signal: AbortSignal) => get(endpoints.sykdomInnleggelse, httpErrorHandler, { - signal: controller.signal, + signal: signal, }); - React.useEffect(() => { - let isMounted = true; - getTilsyn() - .then(tilsynResponse => { - if (isMounted) { - dispatch({ type: ActionType.OK, tilsynResponse }); - } - }) - .catch(() => { - dispatch({ type: ActionType.FAILED }); - }); - getSykdom() - .then(sykdomResponse => { - if (isMounted) { - dispatch({ type: ActionType.SYKDOM_OK, sykdomResponse }); - } - }) - .catch(() => { - dispatch({ type: ActionType.SYKDOM_FAILED }); - }); - - getInnleggelser() - .then(innleggelserResponse => { - if (isMounted) { - setInnleggelsesperioder(innleggelserResponse.perioder.map(v => new Period(v.fom, v.tom))); - } - }) - .catch(() => { - setInnleggelserFeilet(true); - }); - return () => { - isMounted = false; - controller.abort(); - }; - }, []); - - const bedredskapVurderinger = beredskap?.vurderinger || []; - const nattevåkVurderinger = nattevåk?.vurderinger || []; - const perioderSomOverstyrerTilsyn = [ - ...bedredskapVurderinger.filter(v => v.resultat === 'OPPFYLT').map(v => new Period(v.periode.fom, v.periode.tom)), - ...nattevåkVurderinger.filter(v => v.resultat === 'OPPFYLT').map(v => new Period(v.periode.fom, v.periode.tom)), - ...innleggelsesperioder, - ]; + const { + data: innleggelsesperioder = [], + isError: innleggelserFeilet, + isLoading: innleggelserLoading, + } = useQuery({ + queryKey: ['innleggelsesperioder', endpoints.sykdomInnleggelse], + queryFn: ({ signal }) => + getInnleggelser(signal).then(response => response.perioder.map(v => new Period(v.fom, v.tom))), + }); + + const { + data: tilsyn, + isError: tilsynHarFeilet, + isLoading: tilsynLoading, + } = useQuery({ + queryKey: ['etablertTilsyn', endpoints.tilsyn], + queryFn: ({ signal }) => getTilsyn(signal), + select: transformEtablertTilsynResponse, + }); + + const { + data: sykdomsperioderSomIkkeErOppfylt = [], + isError: sykdomHarFeilet, + isLoading: sykdomIsLoading, + } = useQuery({ + queryKey: ['sykdomsperioderIkkeOppfylt', endpoints.sykdom], + queryFn: ({ signal }) => getSykdom(signal), + select: transformSykdomResponse, + }); + + const { etablertTilsyn = [], smurtEtablertTilsynPerioder = [], beredskap, nattevåk } = tilsyn || {}; + const isLoading = tilsynLoading || innleggelserLoading || sykdomIsLoading; + + const perioderSomOverstyrerTilsyn = useMemo(() => { + const bedredskapVurderinger = beredskap?.vurderinger || []; + const nattevåkVurderinger = nattevåk?.vurderinger || []; + return [ + ...bedredskapVurderinger + .filter(v => v.resultat === VurderingDtoResultat.OPPFYLT) + .map(v => new Period(v.periode.fom, v.periode.tom)), + ...nattevåkVurderinger + .filter(v => v.resultat === VurderingDtoResultat.OPPFYLT) + .map(v => new Period(v.periode.fom, v.periode.tom)), + ...innleggelsesperioder, + ]; + }, [beredskap?.vurderinger, innleggelsesperioder, nattevåk?.vurderinger]); if (tilsynHarFeilet || sykdomHarFeilet || innleggelserFeilet) { return ( @@ -169,10 +181,10 @@ const EtablertTilsynContainer = ({ data }: MainComponentProps) => { /> - + {beredskap && } - + {nattevåk && } diff --git a/packages/fakta-etablert-tilsyn/src/ui/components/beredskap/beredskapsperioderoversikt/Beredskapsperiodeoversikt.tsx b/packages/fakta-etablert-tilsyn/src/ui/components/beredskap/beredskapsperioderoversikt/Beredskapsperiodeoversikt.tsx index 8d1dc673cf..9d7867d6c7 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/components/beredskap/beredskapsperioderoversikt/Beredskapsperiodeoversikt.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/components/beredskap/beredskapsperioderoversikt/Beredskapsperiodeoversikt.tsx @@ -1,6 +1,6 @@ +import { NavigationWithDetailView } from '@navikt/ft-plattform-komponenter'; import * as React from 'react'; import { useEffect } from 'react'; -import { NavigationWithDetailView } from '@navikt/ft-plattform-komponenter'; import BeredskapType from '../../../../types/BeredskapType'; import Vurderingsperiode from '../../../../types/Vurderingsperiode'; import Periodenavigasjon from '../../periodenavigasjon/Periodenavigasjon'; @@ -12,14 +12,14 @@ interface BeredskapsperiodeoversiktProps { } const Beredskapsperiodeoversikt = ({ beredskapData }: BeredskapsperiodeoversiktProps) => { - const [valgtPeriode, setValgtPeriode] = React.useState(null); + const [valgtPeriode, setValgtPeriode] = React.useState(null); const [editMode, setEditMode] = React.useState(false); const { beskrivelser } = beredskapData; const perioderTilVurdering = beredskapData.finnPerioderTilVurdering(); const vurderteBeredskapsperioder = beredskapData.finnVurdertePerioder(); - const velgPeriode = (periode: Vurderingsperiode) => { + const velgPeriode = (periode: Vurderingsperiode | null) => { setValgtPeriode(periode); setEditMode(false); }; @@ -43,15 +43,17 @@ const Beredskapsperiodeoversikt = ({ beredskapData }: BeredskapsperiodeoversiktP /> )} showDetailSection={!!valgtPeriode} - detailSection={() => ( - setEditMode(true)} - onCancelClick={() => velgPeriode(null)} - beskrivelser={beskrivelser} - /> - )} + detailSection={() => + valgtPeriode && ( + setEditMode(true)} + onCancelClick={() => velgPeriode(null)} + beskrivelser={beskrivelser} + /> + ) + } /> ); diff --git a/packages/fakta-etablert-tilsyn/src/ui/components/beredskap/vurdering-av-beredskapsperioder-form/VurderingAvBeredskapsperioderForm.tsx b/packages/fakta-etablert-tilsyn/src/ui/components/beredskap/vurdering-av-beredskapsperioder-form/VurderingAvBeredskapsperioderForm.tsx index 9f8232686f..421c3ed9e4 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/components/beredskap/vurdering-av-beredskapsperioder-form/VurderingAvBeredskapsperioderForm.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/components/beredskap/vurdering-av-beredskapsperioder-form/VurderingAvBeredskapsperioderForm.tsx @@ -1,10 +1,12 @@ import { PeriodpickerListRHF, RadioGroupPanelRHF, TextAreaRHF } from '@fpsak-frontend/form'; import { Period } from '@fpsak-frontend/utils'; +import { Periode } from '@k9-sak-web/types'; import { Alert } from '@navikt/ds-react'; import { Box, DetailView, Form, LabelledContent, Margin } from '@navikt/ft-plattform-komponenter'; import React, { type JSX } from 'react'; import { FormProvider, useForm, useWatch } from 'react-hook-form'; import Beskrivelse from '../../../../types/Beskrivelse'; +import Kilde from '../../../../types/Kilde'; import Vurderingsperiode from '../../../../types/Vurderingsperiode'; import Vurderingsresultat from '../../../../types/Vurderingsresultat'; import { finnResterendePerioder } from '../../../../util/periodUtils'; @@ -26,6 +28,13 @@ enum RadioOptions { NEI = 'nei', } +interface PeriodeUtenBeredskap { + periode: Periode; + resultat: Vurderingsresultat; + begrunnelse: string; + kilde: Kilde; +} + interface VurderingAvBeredskapsperioderFormProps { beredskapsperiode: Vurderingsperiode; onCancelClick: () => void; @@ -43,7 +52,7 @@ const VurderingAvBeredskapsperioderForm = ({ onCancelClick, beskrivelser, }: VurderingAvBeredskapsperioderFormProps): JSX.Element => { - const { lagreBeredskapvurdering, readOnly } = React.useContext(ContainerContext); + const { lagreBeredskapvurdering, readOnly } = React.useContext(ContainerContext) || {}; const [isSubmitting, setIsSubmitting] = React.useState(false); const defaultBehovForBeredeskap = () => { if (beredskapsperiode.resultat === Vurderingsresultat.OPPFYLT) { @@ -74,12 +83,13 @@ const VurderingAvBeredskapsperioderForm = ({ const { kilde } = beredskapsperiode; let perioderMedEllerUtenBeredskap; - let perioderUtenBeredskap = []; + + let perioderUtenBeredskap: PeriodeUtenBeredskap[] = []; if (harBehovForBeredskap === RadioOptions.JA_DELER) { perioderMedEllerUtenBeredskap = perioder .map((periode: any) => (periode.period ? periode.period : periode)) .map(periode => ({ - periode, + periode: { fom: periode.fom, tom: periode.tom }, resultat: Vurderingsresultat.OPPFYLT, begrunnelse, kilde, @@ -87,7 +97,7 @@ const VurderingAvBeredskapsperioderForm = ({ const resterendePerioder = finnResterendePerioder(perioder, beredskapsperiode.periode); perioderUtenBeredskap = resterendePerioder.map(periode => ({ - periode, + periode: { fom: periode.fom, tom: periode.tom }, resultat: Vurderingsresultat.IKKE_OPPFYLT, begrunnelse, kilde, @@ -95,7 +105,7 @@ const VurderingAvBeredskapsperioderForm = ({ } else { perioderMedEllerUtenBeredskap = [ { - periode: beredskapsperiode.periode, + periode: { fom: beredskapsperiode.periode.fom, tom: beredskapsperiode.periode.tom }, resultat: harBehovForBeredskap === RadioOptions.JA ? Vurderingsresultat.OPPFYLT : Vurderingsresultat.IKKE_OPPFYLT, begrunnelse, @@ -105,7 +115,7 @@ const VurderingAvBeredskapsperioderForm = ({ } const kombinertePerioder = perioderMedEllerUtenBeredskap.concat(perioderUtenBeredskap); - lagreBeredskapvurdering({ vurderinger: kombinertePerioder }); + lagreBeredskapvurdering?.({ vurderinger: kombinertePerioder }); }; const valgtePerioder = useWatch({ control: formMethods.control, name: FieldName.PERIODER }); @@ -161,13 +171,13 @@ const VurderingAvBeredskapsperioderForm = ({ disabled={readOnly} defaultValues={[new Period(beredskapsperiode.periode.fom, beredskapsperiode.periode.tom)]} renderContentAfterElement={(index, numberOfItems, fieldArrayMethods) => - numberOfItems > 1 && ( + numberOfItems > 1 ? ( { fieldArrayMethods.remove(index); }} /> - ) + ) : null } renderAfterFieldArray={fieldArrayMethods => ( @@ -190,7 +200,7 @@ const VurderingAvBeredskapsperioderForm = ({ if (valgtPeriodePeriod.overlapsWithSomePeriodInList(andreValgtePerioder)) { return 'Beredskapsperiodene kan ikke overlappe'; } - return null; + return undefined; }, }} /> diff --git a/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynDag.tsx b/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynDag.tsx index d8c34cc616..994b8cf524 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynDag.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynDag.tsx @@ -1,6 +1,5 @@ import { Detail, Tag } from '@navikt/ds-react'; import classNames from 'classnames'; -import React from 'react'; import Kilde from '../../../types/Kilde'; import styles from './etablertTilsynRowContent.module.css'; @@ -8,8 +7,8 @@ import PartIkon from './PartIkon'; interface OwnProps { tittel: string; - timer: number; - kilde: Kilde; + timer?: number; + kilde?: Kilde; disabled: boolean; visIkon?: boolean; } @@ -20,7 +19,7 @@ const EtablertTilsynDag = ({ tittel, timer, kilde, disabled, visIkon = true }: O className={classNames(styles.etablertTilsyn__tag, disabled && styles.etablertTilsyn__tag__disabled)} variant="info" > - {visIkon && } + {visIkon && kilde && } {timer} diff --git a/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynMedSmoring.tsx b/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynMedSmoring.tsx index 6d1a0ed606..df0bbf39bf 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynMedSmoring.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynMedSmoring.tsx @@ -1,8 +1,7 @@ import { isDayAfter, Period } from '@fpsak-frontend/utils'; import { Table } from '@navikt/ds-react'; import dayjs from 'dayjs'; -import uniq from 'lodash/uniq'; -import React, { type JSX } from 'react'; +import { type JSX } from 'react'; import EtablertTilsynType from '../../../types/EtablertTilsynType'; import EtablertTilsynRowContent from './EtablertTilsynRowContent'; import PartIkon from './PartIkon'; @@ -22,16 +21,16 @@ interface EtablertTilsynMappet { delAvUke?: number; } -const erHelg = (dag: Date) => [6, 0].includes(dayjs(dag).day()); +const erHelg = (dag: string) => [6, 0].includes(dayjs(dag).day()); -const ukeVisning = (uke, delAvUke) => { +const ukeVisning = (uke: number, delAvUke?: number) => { if (delAvUke) { return `Uke ${uke} - ${String.fromCharCode(64 + delAvUke)}`; } return `Uke ${uke}`; }; -const periodeVisning = (usmurtePerioder, smurtePerioder) => { +const periodeVisning = (usmurtePerioder: EtablertTilsynType[], smurtePerioder: EtablertTilsynType[]) => { if (smurtePerioder.length) { return new Period( smurtePerioder[0].periode.fom, @@ -76,13 +75,14 @@ const EtablertTilsyn = ({ .map(date => ({ ...v, periode: new Period(date, date) })), ); - const uker = uniq(etablertTilsynEnkeltdager.map(data => dayjs(data.periode.fom).week())); + const uker = [...new Set(etablertTilsynEnkeltdager.map(data => dayjs(data.periode.fom).week()))]; const tilsynPerUke = uker.map(uke => ({ etablertTilsyn: etablertTilsynEnkeltdager.filter(v => dayjs(v.periode.fom).week() === uke), etablertTilsynSmurt: smurtEtablertTilsynEnkeltdager.filter(v => dayjs(v.periode.fom).week() === uke), uke, })); - const tilsynPerUkeOppdeltSmoering = []; + const tilsynPerUkeOppdeltSmoering: Array = []; + const tilsynPerUkeUtenOppdeltSmoering = tilsynPerUke .map(v => ({ ...v, @@ -117,8 +117,11 @@ const EtablertTilsyn = ({ ); return smurtePerioder.length ? null : v; }) - .filter(Boolean); - const etablertTilsynMappet = [...tilsynPerUkeUtenOppdeltSmoering, ...tilsynPerUkeOppdeltSmoering].sort( + .filter(x => x !== null); + const etablertTilsynMappet: EtablertTilsynMappet[] = [ + ...tilsynPerUkeUtenOppdeltSmoering, + ...tilsynPerUkeOppdeltSmoering, + ].sort( (a: EtablertTilsynMappet, b: EtablertTilsynMappet) => new Date(a.etablertTilsynSmurt[0]?.periode?.fom).getTime() - new Date(b.etablertTilsynSmurt[0]?.periode?.fom).getTime(), @@ -153,7 +156,6 @@ const EtablertTilsyn = ({ diff --git a/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynRowContent.tsx b/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynRowContent.tsx index 06bcd58e43..46813b30fb 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynRowContent.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynRowContent.tsx @@ -1,12 +1,10 @@ import { BodyShort, Detail, HelpText, Label } from '@navikt/ds-react'; -import { Period } from '@fpsak-frontend/utils'; import dayjs from 'dayjs'; -import React from 'react'; import EtablertTilsynType from '../../../types/EtablertTilsynType'; +import Kilde from '../../../types/Kilde'; +import EtablertTilsynDag from './EtablertTilsynDag'; import PartIkon from './PartIkon'; import styles from './etablertTilsynRowContent.module.css'; -import EtablertTilsynDag from './EtablertTilsynDag'; -import Kilde from '../../../types/Kilde'; interface TilsynMappet { date: string; @@ -15,18 +13,11 @@ interface TilsynMappet { interface OwnProps { etablertTilsyn: EtablertTilsynType[]; etablertTilsynSmurt: EtablertTilsynType[]; - dagerSomOverstyrerTilsyn: Period[]; tilsynProsent: number; visIkon: boolean; } -const EtablertTilsynRowContent = ({ - etablertTilsyn, - etablertTilsynSmurt, - dagerSomOverstyrerTilsyn, - tilsynProsent, - visIkon, -}: OwnProps) => { +const EtablertTilsynRowContent = ({ etablertTilsyn, etablertTilsynSmurt, tilsynProsent, visIkon }: OwnProps) => { const etablertTilsynDager = etablertTilsyn.flatMap(v => v.periode.asListOfDays().map(date => ({ date, tidPerDag: v.tidPerDag, kilde: v.kilde })), ); @@ -47,20 +38,9 @@ const EtablertTilsynRowContent = ({ const torsdagSmurt = etablertTilsynSmurtDager.find(v => dayjs(v.date).day() === 4); const fredagSmurt = etablertTilsynSmurtDager.find(v => dayjs(v.date).day() === 5); - const dagOverstyres = (tilsyn: TilsynMappet) => dagerSomOverstyrerTilsyn.some(dag => dag.fom === tilsyn?.date); - const timerSmurt = etablertTilsynSmurtDager.find(v => v.tidPerDag)?.tidPerDag; - const skalDisables = (tilsynSmurt: TilsynMappet) => { - if (tilsynSmurt) { - return false; - } - - if (dagOverstyres(tilsynSmurt)) { - return true; - } - return true; - }; + const skalDisables = (tilsynSmurt?: TilsynMappet) => !tilsynSmurt; return ( <>
diff --git a/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/PartIkon.tsx b/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/PartIkon.tsx index d4ffaac9c9..8595d604db 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/PartIkon.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/PartIkon.tsx @@ -1,6 +1,5 @@ +import { CoApplicantFilled, People, PeopleFilled } from '@navikt/ds-icons'; import { ContentWithTooltip } from '@navikt/ft-plattform-komponenter'; -import React from 'react'; -import { CoApplicantFilled, PeopleFilled, People } from '@navikt/ds-icons'; import Kilde from '../../../types/Kilde'; const PartIkon = ({ parter, fontSize = '24px' }: { parter: Kilde[]; fontSize?: string }) => { diff --git "a/packages/fakta-etablert-tilsyn/src/ui/components/nattev\303\245k/nattev\303\245ksperiodeoversikt/Nattev\303\245ksperiodeoversikt.tsx" "b/packages/fakta-etablert-tilsyn/src/ui/components/nattev\303\245k/nattev\303\245ksperiodeoversikt/Nattev\303\245ksperiodeoversikt.tsx" index 5c11f1751e..87ccd8cb27 100644 --- "a/packages/fakta-etablert-tilsyn/src/ui/components/nattev\303\245k/nattev\303\245ksperiodeoversikt/Nattev\303\245ksperiodeoversikt.tsx" +++ "b/packages/fakta-etablert-tilsyn/src/ui/components/nattev\303\245k/nattev\303\245ksperiodeoversikt/Nattev\303\245ksperiodeoversikt.tsx" @@ -1,6 +1,6 @@ +import { NavigationWithDetailView } from '@navikt/ft-plattform-komponenter'; import * as React from 'react'; import { useEffect } from 'react'; -import { NavigationWithDetailView } from '@navikt/ft-plattform-komponenter'; import NattevåkType from '../../../../types/NattevåkType'; import Vurderingsperiode from '../../../../types/Vurderingsperiode'; import Periodenavigasjon from '../../periodenavigasjon/Periodenavigasjon'; @@ -12,14 +12,14 @@ interface NattevåksperiodeoversiktProps { } const Nattevåksperiodeoversikt = ({ nattevåkData }: NattevåksperiodeoversiktProps) => { - const [valgtPeriode, setValgtPeriode] = React.useState(null); + const [valgtPeriode, setValgtPeriode] = React.useState(null); const [editMode, setEditMode] = React.useState(false); const { beskrivelser } = nattevåkData; const perioderTilVurdering = nattevåkData.finnPerioderTilVurdering(); const vurderteNattevåksperioder = nattevåkData.finnVurdertePerioder(); - const velgPeriode = (periode: Vurderingsperiode) => { + const velgPeriode = (periode: Vurderingsperiode | null) => { setValgtPeriode(periode); setEditMode(false); }; @@ -43,15 +43,17 @@ const Nattevåksperiodeoversikt = ({ nattevåkData }: NattevåksperiodeoversiktP /> )} showDetailSection={!!valgtPeriode} - detailSection={() => ( - setEditMode(true)} - onCancelClick={() => velgPeriode(null)} - beskrivelser={beskrivelser} - /> - )} + detailSection={() => + valgtPeriode && ( + setEditMode(true)} + onCancelClick={() => velgPeriode(null)} + beskrivelser={beskrivelser} + /> + ) + } /> ); diff --git "a/packages/fakta-etablert-tilsyn/src/ui/components/nattev\303\245k/vurdering-av-nattev\303\245ksperioder-form/VurderingAvNattev\303\245ksperioderForm.tsx" "b/packages/fakta-etablert-tilsyn/src/ui/components/nattev\303\245k/vurdering-av-nattev\303\245ksperioder-form/VurderingAvNattev\303\245ksperioderForm.tsx" index d16bc072c6..1867377e66 100644 --- "a/packages/fakta-etablert-tilsyn/src/ui/components/nattev\303\245k/vurdering-av-nattev\303\245ksperioder-form/VurderingAvNattev\303\245ksperioderForm.tsx" +++ "b/packages/fakta-etablert-tilsyn/src/ui/components/nattev\303\245k/vurdering-av-nattev\303\245ksperioder-form/VurderingAvNattev\303\245ksperioderForm.tsx" @@ -1,10 +1,12 @@ import { PeriodpickerListRHF, RadioGroupPanelRHF, TextAreaRHF } from '@fpsak-frontend/form'; import { Period } from '@fpsak-frontend/utils'; +import { Periode } from '@k9-sak-web/types'; import { Alert } from '@navikt/ds-react'; import { Box, DetailView, Form, LabelledContent, Margin } from '@navikt/ft-plattform-komponenter'; import React, { type JSX } from 'react'; import { FormProvider, useForm, useWatch } from 'react-hook-form'; import Beskrivelse from '../../../../types/Beskrivelse'; +import Kilde from '../../../../types/Kilde'; import Vurderingsperiode from '../../../../types/Vurderingsperiode'; import Vurderingsresultat from '../../../../types/Vurderingsresultat'; import { finnResterendePerioder } from '../../../../util/periodUtils'; @@ -25,6 +27,13 @@ enum RadioOptions { NEI = 'nei', } +interface PeriodeUtenNattevåk { + periode: Periode; + resultat: Vurderingsresultat; + begrunnelse: string; + kilde: Kilde; +} + interface VurderingAvNattevåksperioderFormProps { nattevåksperiode: Vurderingsperiode; onCancelClick: () => void; @@ -42,7 +51,7 @@ const VurderingAvNattevåksperioderForm = ({ onCancelClick, beskrivelser, }: VurderingAvNattevåksperioderFormProps): JSX.Element => { - const { lagreNattevåkvurdering, readOnly } = React.useContext(ContainerContext); + const { lagreNattevåkvurdering, readOnly } = React.useContext(ContainerContext) || {}; const [isSubmitting, setIsSubmitting] = React.useState(false); const defaultBehovForNattevåk = () => { if (nattevåksperiode.resultat === Vurderingsresultat.OPPFYLT) { @@ -72,12 +81,12 @@ const VurderingAvNattevåksperioderForm = ({ const { kilde } = nattevåksperiode; let perioderMedEllerUtenNattevåk; - let perioderUtenNattevåk = []; + let perioderUtenNattevåk: PeriodeUtenNattevåk[] = []; if (harBehovForNattevåk === RadioOptions.JA_DELER) { perioderMedEllerUtenNattevåk = perioder .map((periode: any) => (periode.period ? periode.period : periode)) .map(periode => ({ - periode, + periode: { fom: periode.fom, tom: periode.tom }, resultat: Vurderingsresultat.OPPFYLT, begrunnelse, kilde, @@ -85,7 +94,7 @@ const VurderingAvNattevåksperioderForm = ({ const resterendePerioder = finnResterendePerioder(perioder, nattevåksperiode.periode); perioderUtenNattevåk = resterendePerioder.map(periode => ({ - periode, + periode: { fom: periode.fom, tom: periode.tom }, resultat: Vurderingsresultat.IKKE_OPPFYLT, begrunnelse, kilde, @@ -93,7 +102,7 @@ const VurderingAvNattevåksperioderForm = ({ } else { perioderMedEllerUtenNattevåk = [ { - periode: nattevåksperiode.periode, + periode: { fom: nattevåksperiode.periode.fom, tom: nattevåksperiode.periode.tom }, resultat: harBehovForNattevåk === RadioOptions.JA ? Vurderingsresultat.OPPFYLT : Vurderingsresultat.IKKE_OPPFYLT, begrunnelse, @@ -103,7 +112,7 @@ const VurderingAvNattevåksperioderForm = ({ } const kombinertePerioder = perioderMedEllerUtenNattevåk.concat(perioderUtenNattevåk); - lagreNattevåkvurdering({ vurderinger: kombinertePerioder }); + lagreNattevåkvurdering?.({ vurderinger: kombinertePerioder }); }; const valgtePerioder = useWatch({ control: formMethods.control, name: FieldName.PERIODER }); @@ -153,13 +162,13 @@ const VurderingAvNattevåksperioderForm = ({ defaultValues={[new Period(nattevåksperiode.periode.fom, nattevåksperiode.periode.tom)]} disabled={readOnly} renderContentAfterElement={(index, numberOfItems, fieldArrayMethods) => - numberOfItems > 1 && ( + numberOfItems > 1 ? ( { fieldArrayMethods.remove(index); }} /> - ) + ) : null } renderAfterFieldArray={fieldArrayMethods => ( diff --git a/packages/fakta-etablert-tilsyn/src/ui/components/periodenavigasjon/Periodenavigasjon.tsx b/packages/fakta-etablert-tilsyn/src/ui/components/periodenavigasjon/Periodenavigasjon.tsx index 6e2dd16c03..eddbe0b123 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/components/periodenavigasjon/Periodenavigasjon.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/components/periodenavigasjon/Periodenavigasjon.tsx @@ -28,7 +28,7 @@ const Periodenavigasjon = ({ if (harValgtPeriode === false && previousHarValgtPeriode === true) { setActiveIndex(-1); } - }, [harValgtPeriode]); + }, [harValgtPeriode, previousHarValgtPeriode]); const vurdertePerioderElements = vurdertePerioder.map(({ periode, resultat, kilde }) => ( diff --git a/packages/fakta-etablert-tilsyn/src/ui/components/vurderingsperiode/VurderingsperiodeElement.tsx b/packages/fakta-etablert-tilsyn/src/ui/components/vurderingsperiode/VurderingsperiodeElement.tsx index 22edc67868..9978787d1e 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/components/vurderingsperiode/VurderingsperiodeElement.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/components/vurderingsperiode/VurderingsperiodeElement.tsx @@ -1,5 +1,4 @@ import { Period } from '@fpsak-frontend/utils'; -import React, { type JSX } from 'react'; import { ContentWithTooltip, GreenCheckIconFilled, @@ -7,18 +6,19 @@ import { OnePersonOutlineGray, RedCrossIconFilled, } from '@navikt/ft-plattform-komponenter'; +import React, { type JSX } from 'react'; import Kilde from '../../../types/Kilde'; import Vurderingsresultat from '../../../types/Vurderingsresultat'; import styles from './vurderingsperiodeElement.module.css'; interface VurderingsperiodeElementProps { periode: Period; - resultat: Vurderingsresultat; + resultat: Vurderingsresultat | null; kilde: Kilde; renderAfterElement?: () => React.ReactNode; } -const renderStatusIcon = (resultat: Vurderingsresultat) => { +const renderStatusIcon = (resultat: Vurderingsresultat | null) => { if (resultat === Vurderingsresultat.OPPFYLT) { return ( diff --git a/packages/fakta-etablert-tilsyn/src/ui/components/write-access-bound-content/WriteAccessBoundContent.tsx b/packages/fakta-etablert-tilsyn/src/ui/components/write-access-bound-content/WriteAccessBoundContent.tsx index 22e6b2b70d..ecd23c8936 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/components/write-access-bound-content/WriteAccessBoundContent.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/components/write-access-bound-content/WriteAccessBoundContent.tsx @@ -9,8 +9,8 @@ interface WriteAccessBoundContentProps { const WriteAccessBoundContent = ({ contentRenderer, otherRequirementsAreMet, -}: WriteAccessBoundContentProps): JSX.Element => { - const { readOnly } = React.useContext(ContainerContext); +}: WriteAccessBoundContentProps): JSX.Element | null => { + const { readOnly } = React.useContext(ContainerContext) || {}; if (readOnly === false && (otherRequirementsAreMet === true || otherRequirementsAreMet === undefined)) { return contentRenderer(); } diff --git a/packages/fakta-etablert-tilsyn/src/ui/form/validators/index.ts b/packages/fakta-etablert-tilsyn/src/ui/form/validators/index.ts index 4b57123b06..33cb86df29 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/form/validators/index.ts +++ b/packages/fakta-etablert-tilsyn/src/ui/form/validators/index.ts @@ -1,73 +1,6 @@ -import { Dayjs } from 'dayjs'; -import { Period } from '@fpsak-frontend/utils'; -import { dateFromString } from '../../../util/dateUtils'; -import { tomorrow } from '../../../constants/dateConstants'; - export function required(v: any) { if (v === null || v === undefined || v === '') { return 'Du må oppgi en verdi'; } return true; } - -export function dateIsNotInTheFuture(dateString: string): string | boolean { - const date: Dayjs = dateFromString(dateString); - if (date.isSame(tomorrow) || date.isAfter(tomorrow)) { - return 'Datoen kan ikke settes senere enn dagens dato'; - } - return true; -} - -export const detErTilsynsbehovPåDatoen = (dato: any, perioderMedTilsynsbehov: Period[]): string | boolean => { - const detErTilsynsbehovPåDato = perioderMedTilsynsbehov.some(periode => - new Period(periode.fom, periode.tom).includesDate(dato), - ); - if (detErTilsynsbehovPåDato) { - return true; - } - return 'Dato må være innenfor en periode med tilsynsbehov'; -}; - -export const datoenInngårISøknadsperioden = (dato: any, søknadsperiode: Period): string | boolean => { - if (søknadsperiode.includesDate(dato)) { - return true; - } - - return 'Dato må være innenfor søknadsperioden'; -}; - -export const detErIngenInnleggelsePåDato = (dato: any, innleggelsesperioder: Period[]): string | boolean => { - const detErInnleggelsePåDato = innleggelsesperioder.some(periode => - new Period(periode.fom, periode.tom).includesDate(dato), - ); - if (detErInnleggelsePåDato) { - return 'Dato må være utenfor innleggelsesperioden(e)'; - } - return true; -}; - -export const datoErInnenforResterendeVurderingsperioder = ( - dato: any, - resterendeVurderingsperioder: Period[], -): string | true => { - const datoErInnenfor = resterendeVurderingsperioder.some(period => - new Period(period.fom, period.tom).includesDate(dato), - ); - - if (datoErInnenfor) { - return true; - } - - return 'Dato må være innenfor periodene som vurderes'; -}; - -export const fomDatoErFørTomDato = (periode: Period): string | true => { - const fom = dateFromString(periode.fom); - const tom = dateFromString(periode.tom); - - if (fom.isAfter(tom)) { - return 'Fra-dato må være før til-dato'; - } - - return true; -}; diff --git a/packages/fakta-etablert-tilsyn/src/ui/mainActionTypes.ts b/packages/fakta-etablert-tilsyn/src/ui/mainActionTypes.ts deleted file mode 100644 index 84554d8cc9..0000000000 --- a/packages/fakta-etablert-tilsyn/src/ui/mainActionTypes.ts +++ /dev/null @@ -1,10 +0,0 @@ -enum MainActionType { - OK = 'OK', - FAILED = 'FAILED', - PENDING = 'PENDING', - SYKDOM_OK = 'SYKDOM_OK', - SYKDOM_FAILED = 'SYKDOM_FAILED', - SYKDOM_PENDING = 'SYKDOM_PENDING', -} - -export default MainActionType; diff --git a/packages/fakta-etablert-tilsyn/src/ui/mainReducer.ts b/packages/fakta-etablert-tilsyn/src/ui/mainReducer.ts deleted file mode 100644 index 3ac8e57ec5..0000000000 --- a/packages/fakta-etablert-tilsyn/src/ui/mainReducer.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Period } from '@fpsak-frontend/utils'; -import BeredskapType from '../types/BeredskapType'; -import EtablertTilsynType from '../types/EtablertTilsynType'; -import NattevåkType from '../types/NattevåkType'; -import { SykdomResponse, TilsynResponse } from '../types/TilsynResponse'; -import ActionType from './mainActionTypes'; - -interface MainComponentState { - etablertTilsyn: EtablertTilsynType[]; - beredskap: BeredskapType; - nattevåk: NattevåkType; - smurtEtablertTilsynPerioder: EtablertTilsynType[]; - sykdomsperioderSomIkkeErOppfylt: Period[]; - tilsynHarFeilet: boolean; - sykdomHarFeilet: boolean; - isLoading: boolean; -} - -interface Action { - type: ActionType; - tilsynResponse?: TilsynResponse; - sykdomResponse?: SykdomResponse; -} - -const mainComponentReducer = (state: MainComponentState, action: Action): Partial => { - switch (action.type) { - case ActionType.OK: { - const { tilsynResponse } = action; - const etablertTilsyn = tilsynResponse.etablertTilsynPerioder.map( - etablertTilsynPeriode => new EtablertTilsynType(etablertTilsynPeriode), - ); - const beredskap = new BeredskapType(tilsynResponse.beredskap); - const nattevåk = new NattevåkType(tilsynResponse.nattevåk); - const smurtEtablertTilsynPerioder = tilsynResponse.smortEtablertTilsynPerioder.map( - etablertTilsynPeriode => new EtablertTilsynType(etablertTilsynPeriode), - ); - return { - ...state, - etablertTilsyn, - beredskap, - nattevåk, - smurtEtablertTilsynPerioder, - tilsynHarFeilet: false, - isLoading: false, - }; - } - case ActionType.FAILED: - return { - ...state, - tilsynHarFeilet: true, - isLoading: false, - }; - case ActionType.PENDING: - return { - ...state, - tilsynHarFeilet: false, - isLoading: true, - }; - case ActionType.SYKDOM_OK: { - const { sykdomResponse } = action; - const resterendeVurderingsperioder = sykdomResponse?.resterendeVurderingsperioder?.map( - v => new Period(v.fom, v.tom), - ); - const sykdomsperioderSomIkkeErOppfylt = sykdomResponse.vurderingselementer - .filter(v => v.resultat !== 'OPPFYLT') - .map(v => new Period(v.periode.fom, v.periode.tom)); - return { - ...state, - sykdomsperioderSomIkkeErOppfylt: [...sykdomsperioderSomIkkeErOppfylt, ...resterendeVurderingsperioder], - sykdomHarFeilet: false, - }; - } - case ActionType.SYKDOM_FAILED: - return { - ...state, - sykdomHarFeilet: true, - }; - default: - return { ...state }; - } -}; - -export default mainComponentReducer; diff --git a/packages/fakta-etablert-tilsyn/src/util/dateUtils.ts b/packages/fakta-etablert-tilsyn/src/util/dateUtils.ts index f57febd0af..98e414b2e3 100644 --- a/packages/fakta-etablert-tilsyn/src/util/dateUtils.ts +++ b/packages/fakta-etablert-tilsyn/src/util/dateUtils.ts @@ -1,9 +1,9 @@ +import { Period } from '@fpsak-frontend/utils'; import dayjs from 'dayjs'; -import utc from 'dayjs/plugin/utc'; +import customParseFormat from 'dayjs/plugin/customParseFormat'; import duration from 'dayjs/plugin/duration'; +import utc from 'dayjs/plugin/utc'; import weekOfYear from 'dayjs/plugin/weekOfYear'; -import customParseFormat from 'dayjs/plugin/customParseFormat'; -import { Period } from '@fpsak-frontend/utils'; const dateFormats = ['YYYY-MM-DD', 'DD.MM.YYYY']; @@ -26,7 +26,7 @@ export function getPeriodAsListOfDays(period: Period) { const fom = dayjs(period.fom).utc(true); const tom = dayjs(period.tom).utc(true); - const list = []; + const list: string[] = []; for (let currentDate = fom; isSameOrBefore(currentDate, tom); currentDate = currentDate.add(1, 'day')) { list.push(currentDate.format('YYYY-MM-DD')); } @@ -47,7 +47,7 @@ export function getPeriodDifference(basePeriod: Period, periods: Period[]) { const listOfDaysToExclude = periods.map(period => getPeriodAsListOfDays(period)).flat(); - const daysToInclude = []; + const daysToInclude: string[][] = []; let index = 0; baseListOfDays.forEach(currentDay => { diff --git a/packages/fakta-etablert-tilsyn/src/util/periodUtils.ts b/packages/fakta-etablert-tilsyn/src/util/periodUtils.ts index c5833d16e7..0fb74ae6f7 100644 --- a/packages/fakta-etablert-tilsyn/src/util/periodUtils.ts +++ b/packages/fakta-etablert-tilsyn/src/util/periodUtils.ts @@ -29,8 +29,9 @@ export const finnResterendePerioder = (perioderFraForm: Period[], periodeTilVurd return periode; }); const resterendePerioder = - formatertePerioderFraForm.length > 0 && - getPeriodDifference(periodeTilVurdering, formatertePerioderFraForm as Period[]); + formatertePerioderFraForm.length > 0 + ? getPeriodDifference(periodeTilVurdering, formatertePerioderFraForm as Period[]) + : []; return resterendePerioder; }; diff --git a/packages/form/src/hook-form/PeriodpickerList.tsx b/packages/form/src/hook-form/PeriodpickerList.tsx index c53a6d2045..6feac0d68c 100644 --- a/packages/form/src/hook-form/PeriodpickerList.tsx +++ b/packages/form/src/hook-form/PeriodpickerList.tsx @@ -2,7 +2,7 @@ import { Period } from '@fpsak-frontend/utils'; import { ErrorMessage } from '@navikt/ds-react'; import { Box, Margin } from '@navikt/ft-plattform-komponenter'; -import React, { type JSX } from 'react'; +import { type JSX } from 'react'; import { Controller, useFieldArray, useFormContext } from 'react-hook-form'; import { DatepickerLimitations } from '../DatepickerLimitations'; import PureDatepicker from '../PureDatepicker'; @@ -31,7 +31,7 @@ interface PeriodpickerListProps { defaultValues?: Period[]; fromDatepickerProps: DatepickerProps; toDatepickerProps: DatepickerProps; - renderContentAfterElement?: (index: number, numberOfItems: number, fieldArrayMethods) => JSX.Element; + renderContentAfterElement?: (index: number, numberOfItems: number, fieldArrayMethods) => JSX.Element | null; renderBeforeFieldArray?: (fieldArrayMethods) => JSX.Element; renderAfterFieldArray?: (fieldArrayMethods) => JSX.Element; afterOnChange?: () => Promise; diff --git a/packages/utils/src/period-utils/Period.ts b/packages/utils/src/period-utils/Period.ts index 18db031466..bffba62aae 100644 --- a/packages/utils/src/period-utils/Period.ts +++ b/packages/utils/src/period-utils/Period.ts @@ -79,7 +79,7 @@ class Period { const fomDayjs = initializeDate(this.fom); const tomDayjs = initializeDate(this.tom); - const list = []; + const list: string[] = []; for (let currentDate = fomDayjs; isSameOrBefore(currentDate, tomDayjs); currentDate = currentDate.add(1, 'day')) { list.push(currentDate.format('YYYY-MM-DD')); } @@ -91,7 +91,7 @@ class Period { return isValid(this.fom) && isValid(this.tom); } - asInternationalPeriod() { + asInternationalPeriod(): { from: string; to: string } { return { from: this.fom, to: this.tom, diff --git a/packages/utils/src/period-utils/getPeriodDifference.ts b/packages/utils/src/period-utils/getPeriodDifference.ts index cfc13bb9e4..263a092fe4 100644 --- a/packages/utils/src/period-utils/getPeriodDifference.ts +++ b/packages/utils/src/period-utils/getPeriodDifference.ts @@ -23,8 +23,8 @@ export function convertListOfDaysToPeriods(days: string[]): Period[] { return []; } - const daySplit = []; - let currentSplit = []; + const daySplit: string[][] = []; + let currentSplit: string[] = []; for (let i = 0; i < days.length; i += 1) { const currentSplitCount = currentSplit.length; if (currentSplitCount === 0) {