diff --git a/apps/fp-frontend/src/behandling/fellesPaneler/fakta/FodselvilkaretFaktaInitPanel.tsx b/apps/fp-frontend/src/behandling/fellesPaneler/fakta/FodselvilkaretFaktaInitPanel.tsx
index 46eb793460c..f890e3e1679 100644
--- a/apps/fp-frontend/src/behandling/fellesPaneler/fakta/FodselvilkaretFaktaInitPanel.tsx
+++ b/apps/fp-frontend/src/behandling/fellesPaneler/fakta/FodselvilkaretFaktaInitPanel.tsx
@@ -5,50 +5,66 @@ import { LoadingPanel } from '@navikt/ft-ui-komponenter';
import { useQuery } from '@tanstack/react-query';
import { FodselFaktaIndex } from '@navikt/fp-fakta-fodsel';
-import { AksjonspunktKode, fodselsvilkarene } from '@navikt/fp-kodeverk';
+import { AksjonspunktKode } from '@navikt/fp-kodeverk';
import { FaktaPanelCode } from '@navikt/fp-konstanter';
import type { Dokument } from '@navikt/fp-types';
+import { PanelOverstyringProvider } from '@navikt/fp-utils';
-import { useBehandlingApi } from '../../../data/behandlingApi';
+import { harLenke, useBehandlingApi } from '../../../data/behandlingApi';
import { useFagsakApi } from '../../../data/fagsakApi';
import { BehandlingDataContext } from '../../felles/context/BehandlingDataContext';
import { FaktaDefaultInitPanel } from '../../felles/fakta/FaktaDefaultInitPanel';
import { useStandardFaktaPanelProps } from '../../felles/fakta/useStandardFaktaPanelProps';
-const AKSJONSPUNKT_KODER = [AksjonspunktKode.SJEKK_TERMINBEKREFTELSE, AksjonspunktKode.SJEKK_MANGLENDE_FØDSEL];
+const OVERSTYRING_KODER = [AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL];
+const AKSJONSPUNKT_KODER = [
+ AksjonspunktKode.SJEKK_TERMINBEKREFTELSE,
+ AksjonspunktKode.SJEKK_MANGLENDE_FØDSEL,
+ AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
+];
export const FodselvilkaretFaktaInitPanel = () => {
const intl = useIntl();
- const { behandling, fagsak } = use(BehandlingDataContext);
+ const { behandling, fagsak, rettigheter } = use(BehandlingDataContext);
- const skalPanelVisesIMeny = (behandling.vilkår ?? []).some(v => fodselsvilkarene.some(fv => fv === v.vilkarType));
-
- const standardPanelProps = useStandardFaktaPanelProps(AKSJONSPUNKT_KODER);
+ const standardPanelProps = useStandardFaktaPanelProps(AKSJONSPUNKT_KODER, OVERSTYRING_KODER);
const api = useBehandlingApi(behandling);
const fagsakApi = useFagsakApi();
- const { data: faktafødsel } = useQuery(api.faktaFødselOptions(behandling, skalPanelVisesIMeny));
+ const harOverstyrigAP = standardPanelProps.aksjonspunkterForPanel.some(
+ a => a.definisjon === AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
+ );
+ const { data: faktafødsel } = useQuery(api.faktaFødselOptions(behandling));
const { data: alleDokumenter = [] } = useQuery(
fagsakApi.hentDokumenter(fagsak.saksnummer, behandling.uuid, behandling.versjon),
);
const terminbekreftelseDokument = finnTerminBekreftelse(alleDokumenter, fagsak.saksnummer);
-
return (
-
- {faktafødsel ? (
-
- ) : (
-
- )}
-
+
+ {faktafødsel ? (
+
+ ) : (
+
+ )}
+
+
);
};
diff --git a/apps/fp-frontend/src/data/behandlingApi.ts b/apps/fp-frontend/src/data/behandlingApi.ts
index c29c3b24ec0..ab89114d17c 100644
--- a/apps/fp-frontend/src/data/behandlingApi.ts
+++ b/apps/fp-frontend/src/data/behandlingApi.ts
@@ -307,11 +307,11 @@ const getBeregningsresultatDagytelseOptions =
staleTime: Infinity,
});
-const getFaktaFødselOptions = (links: ApiLink[]) => (behandling: Behandling, isEnabled: boolean) => {
+const getFaktaFødselOptions = (links: ApiLink[]) => (behandling: Behandling) => {
return queryOptions({
queryKey: [BehandlingRel.FAKTA_FØDSEL, behandling.uuid, behandling.versjon],
queryFn: () => kyExtended.get(getUrlFromRel('FAKTA_FØDSEL', links)).json(),
- enabled: harLenke(behandling, 'FAKTA_FØDSEL') && isEnabled,
+ enabled: harLenke(behandling, 'FAKTA_FØDSEL'),
staleTime: Infinity,
});
};
diff --git a/packages/fakta/fodsel/i18n/nb_NO.json b/packages/fakta/fodsel/i18n/nb_NO.json
index 2dfa2440fcc..4827ef4ec05 100644
--- a/packages/fakta/fodsel/i18n/nb_NO.json
+++ b/packages/fakta/fodsel/i18n/nb_NO.json
@@ -1,6 +1,10 @@
{
"FodselInfoPanel.SjekkTerminbekreftelse": "Kontroller terminbekreftelse",
"FodselInfoPanel.SjekkManglendeFødsel": "Kontroller opplysninger om fødsel",
+ "OverstyringPanel.Tittel": "Fakta om fødsel",
+ "OverstyringForm.Tittel": "Overstyring av fødselsdetaljer",
+ "OverstyringForm.Bekreft": "Bekreft",
+ "OverstyringForm.Avbryt": "Avbryt",
"SjekkTerminbekreftelseForm.Tittel": "Kontroller opplysninger om termin",
"SjekkTerminbekreftelseForm.AdvarselForTidligUtstedtdato": "Terminbekreftelsen er utstedt før 22. svangerskapsuke. Kontakt bruker for en nyere terminbekreftelse og oppdater utstedt dato med ny dato når den mottas. Fortsetter du behandlingen uten ny utstedt dato blir behandlingen avslått på grunn av manglende dokumentasjon",
"BarnFieldArray.LeggTilBarn": "Legg til barn",
@@ -17,6 +21,8 @@
"FaktaFraSøknad.Terminbekreftelse": "Terminbekreftelse",
"FaktaFraSøknad.VisTerminbekreftelse": "Vis terminbekreftelse",
"Situasjon.OpplysningerGjeldende": "Gjeldende opplysninger",
+ "Termindato.EndreTermindato": "Åpne redigering av termindato",
+ "Termindato.AvbrytRedigering": "Avbryt redigering av termindato",
"Label.NummerertBarn": "Barn {nummer}",
"Label.Barn": "Barn",
"Label.Fødselsdato": "Fødselsdato",
diff --git a/packages/fakta/fodsel/src/FodselFaktaIndex.spec.tsx b/packages/fakta/fodsel/src/FodselFaktaIndex.spec.tsx
index c4d9d047031..dcff9671ac0 100644
--- a/packages/fakta/fodsel/src/FodselFaktaIndex.spec.tsx
+++ b/packages/fakta/fodsel/src/FodselFaktaIndex.spec.tsx
@@ -5,66 +5,16 @@ import { expect } from 'vitest';
import * as stories from './FodselFaktaIndex.stories';
-const { Default, APTerminbekreftelse, APSjekkManglendeFødselPåEngangstønad, APSjekkManglendeFødselPåForeldrepenger } =
- composeStories(stories);
+const {
+ Default,
+ APTerminbekreftelse,
+ APSjekkManglendeFødselPåEngangstønad,
+ APSjekkManglendeFødselPåForeldrepenger,
+ OverstyringSomOverstyrer,
+} = composeStories(stories);
describe('FodselFaktaIndex', () => {
- it('skal bekrefte aksjonspunkt for termin', async () => {
- const lagre = vi.fn(() => Promise.resolve());
-
- render();
-
- expect(await screen.findByText('Kontroller terminbekreftelse')).toBeInTheDocument();
-
- const søknadsBoks = within(screen.getByLabelText('Opplysninger oppgitt i søknaden'));
- expect(søknadsBoks.getByText('Termindato')).toBeInTheDocument();
- expect(søknadsBoks.getByText('24.06.2025')).toBeInTheDocument();
- expect(søknadsBoks.getByText('Utstedtdato')).toBeInTheDocument();
- expect(søknadsBoks.getByText('20.05.2025')).toBeInTheDocument();
- expect(søknadsBoks.getByText('Antall barn')).toBeInTheDocument();
- expect(søknadsBoks.getByText('1')).toBeInTheDocument();
- expect(søknadsBoks.getByText('Vis terminbekreftelse')).toBeInTheDocument();
-
- const fregBoks = within(screen.getByLabelText('Opplysninger fra Folkeregisteret'));
- expect(fregBoks.getByText('Det er ikke registrert noen fødselshendelse i Folkeregisteret')).toBeInTheDocument();
-
- const apBoks = within(screen.getByLabelText('Kontroller opplysninger om termin'));
-
- const apBoksTermindato = apBoks.getByLabelText('Termindato');
- const apBoksUtstedtdato = apBoks.getByLabelText('Utstedtdato');
- const apBoksAntallBarn = apBoks.getByLabelText('Antall barn');
-
- expect(screen.getByText('Bekreft og fortsett').closest('button')).toBeDisabled();
-
- expect(apBoksTermindato).toHaveValue('24.06.2025');
- await userEvent.clear(apBoksTermindato);
- await userEvent.type(apBoksTermindato, '25.06.2025');
-
- expect(apBoksUtstedtdato).toHaveValue('20.05.2025');
- await userEvent.clear(apBoksUtstedtdato);
- await userEvent.type(apBoksUtstedtdato, '21.05.2025');
-
- expect(apBoksAntallBarn).toHaveValue('1');
- await userEvent.clear(apBoksAntallBarn);
- await userEvent.type(apBoksAntallBarn, '2');
-
- await userEvent.type(screen.getByLabelText('Vurdering'), 'Dette er en begrunnelse');
-
- expect(await screen.findByText('Bekreft og fortsett')).toBeEnabled();
-
- await userEvent.click(screen.getByText('Bekreft og fortsett'));
-
- await waitFor(() => expect(lagre).toHaveBeenCalledTimes(1));
- expect(lagre).toHaveBeenNthCalledWith(1, {
- begrunnelse: 'Dette er en begrunnelse',
- kode: '5001',
- termindato: '2025-06-25',
- utstedtdato: '2025-05-21',
- antallBarn: 2,
- });
- });
-
- it('skal vise fakta i revurdering ved fødselshendlese', async () => {
+ it('skal vise fakta i revurdering ved fødselshendelse', async () => {
const lagre = vi.fn(() => Promise.resolve());
render();
@@ -98,74 +48,196 @@ describe('FodselFaktaIndex', () => {
expect(fregBoks.getByText('03.06.2025')).toBeInTheDocument();
});
- it('skal bekrefte aksjonspunkt for manglende fødsel ved å velge at dokumentasjon foreligger', async () => {
- const lagre = vi.fn(() => Promise.resolve());
+ describe('terminbekreftelse', () => {
+ it('skal bekrefte aksjonspunkt for termin', async () => {
+ const lagre = vi.fn(() => Promise.resolve());
+
+ render();
- render();
+ expect(await screen.findByText('Kontroller terminbekreftelse')).toBeInTheDocument();
- const apBoks = within(screen.getByLabelText('Kontroller opplysninger om fødsel'));
- expect(apBoks.getByText('Er barnet født?')).toBeInTheDocument();
+ const søknadsBoks = within(screen.getByLabelText('Opplysninger oppgitt i søknaden'));
+ expect(søknadsBoks.getByText('Termindato')).toBeInTheDocument();
+ expect(søknadsBoks.getByText('24.06.2025')).toBeInTheDocument();
+ expect(søknadsBoks.getByText('Utstedtdato')).toBeInTheDocument();
+ expect(søknadsBoks.getByText('20.05.2025')).toBeInTheDocument();
+ expect(søknadsBoks.getByText('Antall barn')).toBeInTheDocument();
+ expect(søknadsBoks.getByText('1')).toBeInTheDocument();
+ expect(søknadsBoks.getByText('Vis terminbekreftelse')).toBeInTheDocument();
- expect(apBoks.getByText('Bekreft og fortsett').closest('button')).toBeDisabled();
+ const fregBoks = within(screen.getByLabelText('Opplysninger fra Folkeregisteret'));
+ expect(fregBoks.getByText('Det er ikke registrert noen fødselshendelse i Folkeregisteret')).toBeInTheDocument();
- await userEvent.click(apBoks.getByText('Ja'));
+ const apBoks = within(screen.getByLabelText('Kontroller opplysninger om termin'));
- await userEvent.click(apBoks.getByText('Legg til barn'));
+ const apBoksTermindato = apBoks.getByLabelText('Termindato');
+ const apBoksUtstedtdato = apBoks.getByLabelText('Utstedtdato');
+ const apBoksAntallBarn = apBoks.getByLabelText('Antall barn');
- const alleDatofelt = apBoks.getAllByRole('textbox', { hidden: true });
+ expect(screen.getByText('Bekreft og fortsett').closest('button')).toBeDisabled();
- const fødselsdatoFelt2 = alleDatofelt[2];
- await userEvent.type(fødselsdatoFelt2, '05.05.2025');
- fireEvent.blur(fødselsdatoFelt2);
+ expect(apBoksTermindato).toHaveValue('24.06.2025');
+ await userEvent.clear(apBoksTermindato);
+ await userEvent.type(apBoksTermindato, '25.06.2025');
- const dødsdatoFelt = alleDatofelt[3];
- await userEvent.type(dødsdatoFelt, '05.05.2025');
- fireEvent.blur(dødsdatoFelt);
+ expect(apBoksUtstedtdato).toHaveValue('20.05.2025');
+ await userEvent.clear(apBoksUtstedtdato);
+ await userEvent.type(apBoksUtstedtdato, '21.05.2025');
- await userEvent.type(apBoks.getByLabelText('Vurdering'), 'Dette er en begrunnelse');
+ expect(apBoksAntallBarn).toHaveValue('1');
+ await userEvent.clear(apBoksAntallBarn);
+ await userEvent.type(apBoksAntallBarn, '2');
- expect(await apBoks.findByText('Bekreft og fortsett')).toBeEnabled();
+ await userEvent.type(screen.getByLabelText('Vurdering'), 'Dette er en begrunnelse');
- await userEvent.click(apBoks.getByText('Bekreft og fortsett'));
+ expect(await screen.findByText('Bekreft og fortsett')).toBeEnabled();
- await waitFor(() => expect(lagre).toHaveBeenCalledTimes(1));
- expect(lagre).toHaveBeenNthCalledWith(1, {
- kode: '5027',
- erBarnFødt: true,
- barn: [
- {
- fødselsdato: '2025-05-04',
- dødsdato: undefined,
- },
- {
- fødselsdato: '2025-05-05',
- dødsdato: '2025-05-05',
- },
- ],
- begrunnelse: 'Dette er en begrunnelse',
+ await userEvent.click(screen.getByText('Bekreft og fortsett'));
+
+ await waitFor(() => expect(lagre).toHaveBeenCalledTimes(1));
+ expect(lagre).toHaveBeenNthCalledWith(1, {
+ begrunnelse: 'Dette er en begrunnelse',
+ kode: '5001',
+ termindato: '2025-06-25',
+ utstedtdato: '2025-05-21',
+ antallBarn: 2,
+ });
});
});
- it('skal bekrefte aksjonspunkt for manglende fødsel ved å velge at dokumentasjon ikke foreligger', async () => {
- const lagre = vi.fn(() => Promise.resolve());
- render();
+ describe('sjekk manglende fødsel', () => {
+ it('skal bekrefte aksjonspunkt for manglende fødsel ved å velge at dokumentasjon foreligger', async () => {
+ const lagre = vi.fn(() => Promise.resolve());
+
+ render();
- const apBoks = within(screen.getByLabelText('Kontroller opplysninger om fødsel'));
- expect(apBoks.getByText('Bekreft og fortsett').closest('button')).toBeDisabled();
+ const apBoks = within(screen.getByLabelText('Kontroller opplysninger om fødsel'));
+ expect(apBoks.getByText('Er barnet født?')).toBeInTheDocument();
- expect(apBoks.getByText('Er barnet født?')).toBeInTheDocument();
- await userEvent.click(apBoks.getByLabelText('Nei'));
- await userEvent.type(apBoks.getByLabelText('Vurdering'), 'Dette er en begrunnelse');
+ expect(apBoks.getByText('Bekreft og fortsett').closest('button')).toBeDisabled();
- expect(await apBoks.findByText('Bekreft og fortsett')).toBeEnabled();
+ await userEvent.click(apBoks.getByText('Ja'));
- await userEvent.click(apBoks.getByText('Bekreft og fortsett'));
+ await userEvent.click(apBoks.getByText('Legg til barn'));
+
+ const alleDatofelt = apBoks.getAllByRole('textbox', { hidden: true });
+
+ const fødselsdatoFelt2 = alleDatofelt[2];
+ await userEvent.type(fødselsdatoFelt2, '05.05.2025');
+ fireEvent.blur(fødselsdatoFelt2);
+
+ const dødsdatoFelt = alleDatofelt[3];
+ await userEvent.type(dødsdatoFelt, '05.05.2025');
+ fireEvent.blur(dødsdatoFelt);
+
+ await userEvent.type(apBoks.getByLabelText('Vurdering'), 'Dette er en begrunnelse');
+
+ expect(await apBoks.findByText('Bekreft og fortsett')).toBeEnabled();
+
+ await userEvent.click(apBoks.getByText('Bekreft og fortsett'));
+
+ await waitFor(() => expect(lagre).toHaveBeenCalledTimes(1));
+ expect(lagre).toHaveBeenNthCalledWith(1, {
+ kode: '5027',
+ barn: [
+ {
+ fødselsdato: '2025-05-04',
+ dødsdato: undefined,
+ },
+ {
+ fødselsdato: '2025-05-05',
+ dødsdato: '2025-05-05',
+ },
+ ],
+ termindato: '2025-04-14',
+ begrunnelse: 'Dette er en begrunnelse',
+ });
+ });
+
+ it('skal bekrefte aksjonspunkt for manglende fødsel ved å velge at dokumentasjon ikke foreligger', async () => {
+ const lagre = vi.fn(() => Promise.resolve());
+ render();
+
+ const apBoks = within(screen.getByLabelText('Kontroller opplysninger om fødsel'));
+ expect(apBoks.getByText('Bekreft og fortsett').closest('button')).toBeDisabled();
+
+ expect(apBoks.getByText('Er barnet født?')).toBeInTheDocument();
+ await userEvent.click(apBoks.getByLabelText('Nei'));
+ await userEvent.type(apBoks.getByLabelText('Vurdering'), 'Dette er en begrunnelse');
+
+ expect(await apBoks.findByText('Bekreft og fortsett')).toBeEnabled();
+
+ await userEvent.click(apBoks.getByText('Bekreft og fortsett'));
+
+ await waitFor(() => expect(lagre).toHaveBeenCalledTimes(1));
+ expect(lagre).toHaveBeenNthCalledWith(1, {
+ kode: '5027',
+ barn: null,
+ termindato: '2025-05-06',
+ begrunnelse: 'Dette er en begrunnelse',
+ });
+ });
+ });
+ describe('overstyring', () => {
+ it('skal overstyre termindato og legge til et barn', async () => {
+ const lagre = vi.fn(() => Promise.resolve());
+ render();
+
+ expect(screen.getByText('Fakta om fødsel')).toBeInTheDocument();
+ await userEvent.click(screen.getByText('Overstyr'));
+
+ expect(screen.getByText('Overstyring av fødselsdetaljer')).toBeInTheDocument();
+
+ const overstyringBoks = within(screen.getByLabelText('Overstyring av fødselsdetaljer'));
+
+ await userEvent.click(overstyringBoks.getByRole('button', { name: 'Åpne redigering av termindato' }));
+ const terminInput = overstyringBoks.getByLabelText('Termindato');
+ expect(terminInput).toHaveValue('10.06.2025');
+ await userEvent.clear(terminInput);
+ await userEvent.type(terminInput, '11.06.2025');
+
+ expect(overstyringBoks.getByText('Er barnet født?')).toBeInTheDocument();
+ expect(overstyringBoks.getByLabelText('Ja')).toBeChecked();
+
+ expect(overstyringBoks.getByLabelText('Fødselsdato')).toBeDisabled();
+
+ await userEvent.click(overstyringBoks.getByText('Legg til barn'));
+
+ await userEvent.type(overstyringBoks.getAllByLabelText('Fødselsdato')[1], '04.06.2025');
+
+ await userEvent.type(overstyringBoks.getByLabelText('Begrunn endringene'), 'Dette er en begrunnelse');
+
+ await userEvent.click(overstyringBoks.getByText('Bekreft'));
+
+ await waitFor(() => expect(lagre).toHaveBeenCalledTimes(1));
+ expect(lagre).toHaveBeenNthCalledWith(1, {
+ kode: '6019',
+ termindato: '2025-06-11',
+ barn: [
+ {
+ fødselsdato: '2025-06-03',
+ dødsdato: undefined,
+ },
+ {
+ fødselsdato: '2025-06-04',
+ dødsdato: undefined,
+ },
+ ],
+ begrunnelse: 'Dette er en begrunnelse',
+ });
+ });
- await waitFor(() => expect(lagre).toHaveBeenCalledTimes(1));
- expect(lagre).toHaveBeenNthCalledWith(1, {
- kode: '5027',
- erBarnFødt: false,
- begrunnelse: 'Dette er en begrunnelse',
+ it('skal ikke kunne overstyre når det finnes fødselaksjonspunkt', async () => {
+ const lagre = vi.fn(() => Promise.resolve());
+ render(
+ ,
+ );
+
+ expect(screen.queryByText('Fakta om fødsel')).not.toBeInTheDocument();
+ expect(screen.queryByText('Overstyr')).not.toBeInTheDocument();
});
});
});
diff --git a/packages/fakta/fodsel/src/FodselFaktaIndex.stories.tsx b/packages/fakta/fodsel/src/FodselFaktaIndex.stories.tsx
index a452ccbd7bb..1ebf5a13294 100644
--- a/packages/fakta/fodsel/src/FodselFaktaIndex.stories.tsx
+++ b/packages/fakta/fodsel/src/FodselFaktaIndex.stories.tsx
@@ -3,13 +3,19 @@ import type { ComponentProps } from 'react';
import type { Meta, StoryObj } from '@storybook/react';
import { AksjonspunktKode, AksjonspunktStatus, AksjonspunktType, VilkarType } from '@navikt/fp-kodeverk';
-import { type PanelDataArgs, withMellomlagretFormData, withPanelData } from '@navikt/fp-storybook-utils';
+import {
+ type PanelDataArgs,
+ type PanelOverstyringContextArgs,
+ withMellomlagretFormData,
+ withPanelData,
+ withPanelOverstyring,
+} from '@navikt/fp-storybook-utils';
import type { Aksjonspunkt } from '@navikt/fp-types';
import { FodselFaktaIndex } from './FodselFaktaIndex';
const aksjonspunktDefault = {
- definisjon: AksjonspunktKode.VURDER_INNSYN,
+ definisjon: AksjonspunktKode.SJEKK_TERMINBEKREFTELSE,
status: AksjonspunktStatus.OPPRETTET,
begrunnelse: null,
kanLoses: true,
@@ -41,8 +47,10 @@ const merknaderFraBeslutter = {
const meta = {
title: 'fakta/fakta-fodsel',
component: FodselFaktaIndex,
- decorators: [withMellomlagretFormData, withPanelData],
+ decorators: [withMellomlagretFormData, withPanelData, withPanelOverstyring],
args: {
+ kanOverstyreAccess: { isEnabled: false, employeeHasAccess: false },
+ overstyringApKode: AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
isReadOnly: false,
aksjonspunkterForPanel: [],
alleMerknaderFraBeslutter: {},
@@ -94,11 +102,14 @@ const meta = {
},
},
render: args => ,
-} satisfies Meta>;
+} satisfies Meta>;
+
export default meta;
type Story = StoryObj;
+export const Default: Story = {};
+
export const APTerminbekreftelse: Story = {
args: {
aksjonspunkterForPanel: [apTerminbekreftelse],
@@ -270,7 +281,50 @@ export const APSjekkManglendeFødselDifferanseIAntallBarn: Story = {
},
};
-export const ReadonlyPanelMedUtførtSjekkManglendeFødselAP: Story = {
+export const APSjekkManglendeFødselUtenTermindatoFraSøknad = {
+ args: {
+ aksjonspunkterForPanel: [apSjekkManglendeFødsel],
+ fødsel: {
+ søknad: {
+ barn: [
+ {
+ fødselsdato: '2025-06-04',
+ dødsdato: null,
+ barnNummer: 1,
+ },
+ ],
+ termindato: null,
+ utstedtdato: null,
+ antallBarn: 1,
+ },
+ register: {
+ barn: [],
+ },
+ gjeldende: {
+ termin: null,
+ utstedtdato: null,
+ antallBarn: {
+ kilde: 'SØKNAD',
+ antall: 1,
+ },
+ barn: [
+ {
+ kilde: 'SØKNAD',
+ barn: {
+ fødselsdato: '2025-06-04',
+ dødsdato: null,
+ barnNummer: 1,
+ },
+ kanOverstyres: true,
+ },
+ ],
+ fødselDokumetasjonStatus: 'IKKE_VURDERT',
+ },
+ },
+ },
+};
+
+export const APSjekkManglendeFødselUtførtOgUtført: Story = {
args: {
isReadOnly: true,
aksjonspunkterForPanel: [
@@ -283,9 +337,7 @@ export const ReadonlyPanelMedUtførtSjekkManglendeFødselAP: Story = {
},
};
-export const Default: Story = {};
-
-export const SjekkManglendeFødselVedDødfødselForEnTvilling: Story = {
+export const APSjekkManglendeFødselVedDødfødselForEnTvilling: Story = {
args: {
terminbekreftelseDokument: undefined,
fødsel: {
@@ -343,3 +395,43 @@ export const SjekkManglendeFødselVedDødfødselForEnTvilling: Story = {
},
},
};
+
+export const OverstyringSomOverstyrer: Story = {
+ args: {
+ kanOverstyreAccess: { isEnabled: true, employeeHasAccess: true },
+ },
+};
+
+export const OverstyrtSettSomOverstyrer: Story = {
+ args: {
+ kanOverstyreAccess: { isEnabled: true, employeeHasAccess: true },
+ initialToggleState: true,
+ isReadOnly: false,
+ aksjonspunkterForPanel: [
+ {
+ ...aksjonspunktDefault,
+ definisjon: AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
+ status: AksjonspunktStatus.UTFORT,
+ begrunnelse: 'Denne saken har blitt overstyrt',
+ kanLoses: false,
+ },
+ ],
+ },
+};
+
+export const OverstyrtSettSomSBH: Story = {
+ args: {
+ kanOverstyreAccess: { isEnabled: false, employeeHasAccess: false },
+ initialToggleState: true,
+ isReadOnly: false,
+ aksjonspunkterForPanel: [
+ {
+ ...aksjonspunktDefault,
+ definisjon: AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
+ status: AksjonspunktStatus.UTFORT,
+ begrunnelse: 'Denne saken har blitt overstyrt',
+ kanLoses: false,
+ },
+ ],
+ },
+};
diff --git a/packages/fakta/fodsel/src/components/FodselInfoPanel.tsx b/packages/fakta/fodsel/src/components/FodselInfoPanel.tsx
index 7e5954e6ba0..281e38c2930 100644
--- a/packages/fakta/fodsel/src/components/FodselInfoPanel.tsx
+++ b/packages/fakta/fodsel/src/components/FodselInfoPanel.tsx
@@ -3,7 +3,7 @@ import { FormattedMessage } from 'react-intl';
import { HGrid, VStack } from '@navikt/ds-react';
import { AksjonspunktHelpTextHTML } from '@navikt/ft-ui-komponenter';
-import { AksjonspunktKode } from '@navikt/fp-kodeverk';
+import { AksjonspunktKode, AksjonspunktStatus } from '@navikt/fp-kodeverk';
import type { Fødsel } from '@navikt/fp-types';
import type { DokumentLinkReferanse } from '@navikt/fp-ui-komponenter';
import { usePanelDataContext } from '@navikt/fp-utils';
@@ -13,8 +13,9 @@ import { SjekkTerminbekreftelseForm } from './aksjonspunkt/SjekkTerminbekreftels
import { FaktaFraFReg } from './fakta/FaktaFraFReg';
import { FaktaFraSøknad } from './fakta/FaktaFraSøknad';
import { Situasjon } from './fakta/Situasjon';
+import { OverstyringPanel } from './overstyring/OverstyringPanel';
-const { SJEKK_TERMINBEKREFTELSE, SJEKK_MANGLENDE_FØDSEL } = AksjonspunktKode;
+const { SJEKK_TERMINBEKREFTELSE, SJEKK_MANGLENDE_FØDSEL, OVERSTYRING_AV_FAKTA_OM_FØDSEL } = AksjonspunktKode;
interface Props {
fødsel: Fødsel;
@@ -27,20 +28,27 @@ interface Props {
* Har ansvar for å sette opp formen for faktapenelet til Fødselsvilkåret.
*/
export const FodselInfoPanel = ({ fødsel, terminbekreftelseDokument }: Props) => {
- const { aksjonspunkterForPanel, harÅpentAksjonspunkt } = usePanelDataContext();
+ const { aksjonspunkterForPanel } = usePanelDataContext();
const terminbekreftelseAp = aksjonspunkterForPanel.find(ap => ap.definisjon === SJEKK_TERMINBEKREFTELSE);
const manglendeFødselAp = aksjonspunkterForPanel.find(ap => ap.definisjon === SJEKK_MANGLENDE_FØDSEL);
+ const overstyringAP = aksjonspunkterForPanel.find(ap => ap.definisjon === OVERSTYRING_AV_FAKTA_OM_FØDSEL);
return (
- {harÅpentAksjonspunkt && (
-
- {terminbekreftelseAp && }
- {manglendeFødselAp && }
-
+ {(!(terminbekreftelseAp || manglendeFødselAp) || overstyringAP) && (
+
)}
+
+ {terminbekreftelseAp?.status === AksjonspunktStatus.OPPRETTET && (
+
+ )}
+ {manglendeFødselAp?.status === AksjonspunktStatus.OPPRETTET && (
+
+ )}
+
+
diff --git "a/packages/fakta/fodsel/src/components/aksjonspunkt/SjekkManglendeF\303\270dselForm.tsx" "b/packages/fakta/fodsel/src/components/aksjonspunkt/SjekkManglendeF\303\270dselForm.tsx"
index 2c2d232fc7e..3196409ba9e 100644
--- "a/packages/fakta/fodsel/src/components/aksjonspunkt/SjekkManglendeF\303\270dselForm.tsx"
+++ "b/packages/fakta/fodsel/src/components/aksjonspunkt/SjekkManglendeF\303\270dselForm.tsx"
@@ -12,8 +12,10 @@ import { FaktaKort } from '@navikt/fp-ui-komponenter';
import { useMellomlagretFormData, usePanelDataContext } from '@navikt/fp-utils';
import { ErBarnFødt, type ErBarnFødtFormValues } from '../form/ErBarnFødt';
+import { Termindato, type TermindatoFormValues } from '../form/Termindato';
+import { TermindatoMedReadonlyToggle } from '../form/TermindatoMedReadonlyToggle.tsx';
-type FormValues = ErBarnFødtFormValues & FaktaBegrunnelseFormValues;
+type FormValues = ErBarnFødtFormValues & TermindatoFormValues & FaktaBegrunnelseFormValues;
interface Props {
fødsel: Fødsel;
@@ -27,7 +29,6 @@ export const SjekkManglendeFødselForm = ({ aksjonspunkt, fødsel: { gjeldende,
usePanelDataContext();
const { mellomlagretFormData, setMellomlagretFormData } = useMellomlagretFormData();
- const dokumentasjonForeliggerIsEdited = gjeldende.barn.some(b => b.kilde === 'SAKSBEHANDLER');
const formMethods = useForm({
defaultValues: mellomlagretFormData ?? initialValues(gjeldende, aksjonspunkt),
@@ -61,12 +62,11 @@ export const SjekkManglendeFødselForm = ({ aksjonspunkt, fødsel: { gjeldende,
/>
)}
-
+
+
+
+
+
({
+ ...Termindato.initialValues(gjeldende),
...ErBarnFødt.initialValues(gjeldende),
...FaktaBegrunnelseTextField.initialValues(aksjonspunkt),
});
const transformValues = (values: FormValues): SjekkManglendeFødselAp => ({
kode: AksjonspunktKode.SJEKK_MANGLENDE_FØDSEL,
+ ...Termindato.transformValues(values),
...ErBarnFødt.transformValues(values),
...FaktaBegrunnelseTextField.transformValues(values),
});
diff --git a/packages/fakta/fodsel/src/components/aksjonspunkt/SjekkTerminbekreftelseForm.tsx b/packages/fakta/fodsel/src/components/aksjonspunkt/SjekkTerminbekreftelseForm.tsx
index 354acd697c9..cd137e8405a 100644
--- a/packages/fakta/fodsel/src/components/aksjonspunkt/SjekkTerminbekreftelseForm.tsx
+++ b/packages/fakta/fodsel/src/components/aksjonspunkt/SjekkTerminbekreftelseForm.tsx
@@ -6,12 +6,7 @@ import { RhfDatepicker, RhfForm, RhfTextField } from '@navikt/ft-form-hooks';
import { hasValidDate, hasValidInteger, required } from '@navikt/ft-form-validators';
import dayjs from 'dayjs';
-import {
- type FaktaBegrunnelseFormValues,
- FaktaBegrunnelseTextField,
- FaktaSubmitButton,
- isNotEqual,
-} from '@navikt/fp-fakta-felles';
+import { type FaktaBegrunnelseFormValues, FaktaBegrunnelseTextField, FaktaSubmitButton } from '@navikt/fp-fakta-felles';
import { AksjonspunktKode } from '@navikt/fp-kodeverk';
import type { Aksjonspunkt, Fødsel, FødselGjeldende } from '@navikt/fp-types';
import type { SjekkTerminbekreftelseAp } from '@navikt/fp-types-avklar-aksjonspunkter';
@@ -41,7 +36,7 @@ interface Props {
fødsel: Fødsel;
}
-export const SjekkTerminbekreftelseForm = ({ fødsel: { gjeldende, søknad }, aksjonspunkt }: Props) => {
+export const SjekkTerminbekreftelseForm = ({ fødsel: { gjeldende }, aksjonspunkt }: Props) => {
const intl = useIntl();
const { submitCallback, isSubmittable, alleMerknaderFraBeslutter, isReadOnly } =
@@ -71,10 +66,8 @@ export const SjekkTerminbekreftelseForm = ({ fødsel: { gjeldende, søknad }, ak
>
-
+
+
+
@@ -134,16 +127,16 @@ export const SjekkTerminbekreftelseForm = ({ fødsel: { gjeldende, søknad }, ak
const initialValues = (gjeldende: FødselGjeldende, aksjonspunkt: Aksjonspunkt): FormValues => ({
utstedtdato: gjeldende.utstedtdato?.utstedtdato,
- termindato: gjeldende.termin?.termindato,
antallBarn: gjeldende.antallBarn.antall,
+ ...Termindato.initialValues(gjeldende),
...FaktaBegrunnelseTextField.initialValues(aksjonspunkt),
});
const transformValues = (values: FormValues): SjekkTerminbekreftelseAp => ({
kode: AksjonspunktKode.SJEKK_TERMINBEKREFTELSE,
utstedtdato: values.utstedtdato!,
- termindato: values.termindato!,
antallBarn: values.antallBarn!,
+ ...Termindato.transformValues(values),
...FaktaBegrunnelseTextField.transformValues(values),
});
diff --git a/packages/fakta/fodsel/src/components/aksjonspunkt/sjekkTerminbekreftelseForm.module.css b/packages/fakta/fodsel/src/components/aksjonspunkt/sjekkTerminbekreftelseForm.module.css
index 3393cea4302..dc90f44060a 100644
--- a/packages/fakta/fodsel/src/components/aksjonspunkt/sjekkTerminbekreftelseForm.module.css
+++ b/packages/fakta/fodsel/src/components/aksjonspunkt/sjekkTerminbekreftelseForm.module.css
@@ -1,8 +1,5 @@
-.bredde {
- height: fit-content;
- width: fit-content;
+.rightAlign {
input {
text-align: right;
- width: 90px;
}
}
diff --git a/packages/fakta/fodsel/src/components/fakta/Situasjon.tsx b/packages/fakta/fodsel/src/components/fakta/Situasjon.tsx
index 435572048ba..85219038e8c 100644
--- a/packages/fakta/fodsel/src/components/fakta/Situasjon.tsx
+++ b/packages/fakta/fodsel/src/components/fakta/Situasjon.tsx
@@ -28,7 +28,7 @@ export const Situasjon = ({ gjeldende: { barn, termin, utstedtdato, antallBarn }
/>
{barn[0].barn.dødsdato && (
}
label={intl.formatMessage({ id: 'Label.Dødsdato' })}
diff --git a/packages/fakta/fodsel/src/components/form/BarnFieldArray.tsx b/packages/fakta/fodsel/src/components/form/BarnFieldArray.tsx
index 42ff2a3c327..f65524abc75 100644
--- a/packages/fakta/fodsel/src/components/form/BarnFieldArray.tsx
+++ b/packages/fakta/fodsel/src/components/form/BarnFieldArray.tsx
@@ -198,7 +198,7 @@ BarnFieldArray.initialValues = ({ barn, antallBarn }: FødselGjeldende): BarnFor
BarnFieldArray.transformValues = (
values: BarnFormValues,
erBarnFødt: boolean,
-): { barn?: { fødselsdato: string; dødsdato: string | undefined }[] } =>
+): { barn: { fødselsdato: string; dødsdato: string | undefined }[] | null } =>
erBarnFødt
? {
barn: values.barn.map(({ fødselsdato, dødsdato }) => ({
@@ -206,7 +206,7 @@ BarnFieldArray.transformValues = (
dødsdato: dødsdato || undefined,
})),
}
- : {};
+ : { barn: null };
const lagBarn = (antallBarnFraSoknad: number): FieldArrayRow[] => {
const antallBarn = antallBarnFraSoknad > 0 ? antallBarnFraSoknad : 1;
diff --git "a/packages/fakta/fodsel/src/components/form/ErBarnF\303\270dt.tsx" "b/packages/fakta/fodsel/src/components/form/ErBarnF\303\270dt.tsx"
index 2e4b1109a78..92e04663358 100644
--- "a/packages/fakta/fodsel/src/components/form/ErBarnF\303\270dt.tsx"
+++ "b/packages/fakta/fodsel/src/components/form/ErBarnF\303\270dt.tsx"
@@ -6,13 +6,11 @@ import { RhfRadioGroup } from '@navikt/ft-form-hooks';
import { required } from '@navikt/ft-form-validators';
import type { FødselGjeldende } from '@navikt/fp-types';
-import { notEmpty } from '@navikt/fp-utils';
import { BarnFieldArray, type BarnFormValues } from './BarnFieldArray';
interface Props {
isReadOnly: boolean;
- isEdited?: boolean;
finnesBarnIFReg: boolean;
antallBarnISøknad: number;
}
@@ -21,7 +19,7 @@ export type ErBarnFødtFormValues = {
erBarnFødt: boolean | undefined;
} & BarnFormValues;
-export const ErBarnFødt = ({ isReadOnly, isEdited, finnesBarnIFReg, antallBarnISøknad }: Props) => {
+export const ErBarnFødt = ({ isReadOnly, finnesBarnIFReg, antallBarnISøknad }: Props) => {
const intl = useIntl();
const { control, watch } = useFormContext();
@@ -33,17 +31,16 @@ export const ErBarnFødt = ({ isReadOnly, isEdited, finnesBarnIFReg, antallBarnI
-
+
-
+
@@ -59,7 +56,6 @@ ErBarnFødt.initialValues = (gjeldende: FødselGjeldende): ErBarnFødtFormValues
});
ErBarnFødt.transformValues = (values: ErBarnFødtFormValues) => ({
- erBarnFødt: notEmpty(values.erBarnFødt),
...BarnFieldArray.transformValues(values, !!values.erBarnFødt),
});
diff --git a/packages/fakta/fodsel/src/components/form/Termindato.tsx b/packages/fakta/fodsel/src/components/form/Termindato.tsx
index 57e6eb9c00f..322f79011e6 100644
--- a/packages/fakta/fodsel/src/components/form/Termindato.tsx
+++ b/packages/fakta/fodsel/src/components/form/Termindato.tsx
@@ -1,21 +1,31 @@
+import { type ComponentProps } from 'react';
import { useFormContext } from 'react-hook-form';
import { useIntl } from 'react-intl';
import { RhfDatepicker } from '@navikt/ft-form-hooks';
import { dateAfterOrEqual, dateBeforeOrEqual, hasValidDate, required } from '@navikt/ft-form-validators';
+import { type FaktaKilde } from '@navikt/fp-fakta-felles';
+import type { FødselGjeldende } from '@navikt/fp-types';
import { maxTermindato, minTermindato } from '@navikt/fp-utils';
+const notRequiredValidation: ComponentProps['validate'] = [
+ hasValidDate,
+ dateAfterOrEqual(minTermindato()),
+ dateBeforeOrEqual(maxTermindato()),
+];
+
export type TermindatoFormValues = {
termindato?: string;
+ termindatoKilde: FaktaKilde;
};
-interface Props {
+interface TermindatoProps {
isReadOnly: boolean;
- isEdited?: boolean;
+ isRequired?: boolean;
}
-export const Termindato = ({ isReadOnly, isEdited }: Props) => {
+export const Termindato = ({ isReadOnly, isRequired = true }: TermindatoProps) => {
const intl = useIntl();
const { control } = useFormContext();
@@ -25,12 +35,20 @@ export const Termindato = ({ isReadOnly, isEdited }: Props) => {
name="termindato"
size="medium"
label={intl.formatMessage({ id: 'Label.Termindato' })}
- validate={[required, hasValidDate, dateAfterOrEqual(minTermindato()), dateBeforeOrEqual(maxTermindato())]}
+ validate={isRequired ? [required, ...notRequiredValidation] : notRequiredValidation}
fromDate={minTermindato().toDate()}
toDate={maxTermindato().toDate()}
defaultMonth={new Date()}
isReadOnly={isReadOnly}
- isEdited={isEdited}
/>
);
};
+
+Termindato.initialValues = (gjeldende: FødselGjeldende) => ({
+ termindato: gjeldende.termin?.termindato ?? '',
+ termindatoKilde: gjeldende.termin?.kilde ?? 'SØKNAD',
+});
+
+Termindato.transformValues = (values: TermindatoFormValues) => ({
+ termindato: values.termindato || null,
+});
diff --git a/packages/fakta/fodsel/src/components/form/TermindatoMedReadonlyToggle.tsx b/packages/fakta/fodsel/src/components/form/TermindatoMedReadonlyToggle.tsx
new file mode 100644
index 00000000000..feb2fb8c4b1
--- /dev/null
+++ b/packages/fakta/fodsel/src/components/form/TermindatoMedReadonlyToggle.tsx
@@ -0,0 +1,71 @@
+import { useState } from 'react';
+import { useFormContext } from 'react-hook-form';
+import { useIntl } from 'react-intl';
+
+import { PencilIcon, XMarkIcon } from '@navikt/aksel-icons';
+import { Box, Button, Detail, HStack } from '@navikt/ds-react';
+
+import { getLabelForFaktaKilde } from '@navikt/fp-fakta-felles';
+
+import type { ErBarnFødtFormValues } from './ErBarnFødt';
+import { Termindato, type TermindatoFormValues } from './Termindato';
+
+interface TermindatoMedReadonlyToggleProps {
+ isReadOnly: boolean;
+}
+
+export const TermindatoMedReadonlyToggle = ({ isReadOnly }: TermindatoMedReadonlyToggleProps) => {
+ const intl = useIntl();
+ const { getValues, getFieldState } = useFormContext();
+
+ const { skalViseKnapp, isInputReadonly, toggleTermindato } = useReadonlyToggle(isReadOnly);
+
+ const { isDirty } = getFieldState('termindato');
+ const kilde = getValues('termindatoKilde');
+ const erBarnFødt = getValues('erBarnFødt');
+
+ const formatertKilde = getLabelForFaktaKilde(isDirty ? 'SAKSBEHANDLER' : kilde);
+ return (
+
+
+
+ {skalViseKnapp && (
+
+ : }
+ variant={isInputReadonly ? 'tertiary' : 'tertiary-neutral'}
+ title={intl.formatMessage({
+ id: isInputReadonly ? 'Termindato.EndreTermindato' : 'Termindato.AvbrytRedigering',
+ })}
+ />
+
+ )}
+
+ {formatertKilde}
+
+
+ );
+};
+
+const useReadonlyToggle = (isReadOnly: boolean) => {
+ const { getValues, resetField } = useFormContext();
+
+ const harDefaultValue = getValues('termindato');
+ const erRedigerbarInit = isReadOnly || !harDefaultValue;
+ const [erRedigerbar, setErRedigerbar] = useState(erRedigerbarInit);
+
+ const toggleTermindato = () => {
+ if (erRedigerbar) {
+ resetField('termindato');
+ }
+ setErRedigerbar(!erRedigerbar);
+ };
+ return {
+ skalViseKnapp: !erRedigerbarInit,
+ isInputReadonly: isReadOnly || !erRedigerbar,
+ toggleTermindato,
+ };
+};
diff --git a/packages/fakta/fodsel/src/components/overstyring/OverstyringForm.tsx b/packages/fakta/fodsel/src/components/overstyring/OverstyringForm.tsx
new file mode 100644
index 00000000000..aa17c273d27
--- /dev/null
+++ b/packages/fakta/fodsel/src/components/overstyring/OverstyringForm.tsx
@@ -0,0 +1,86 @@
+import { useForm } from 'react-hook-form';
+import { FormattedMessage, useIntl } from 'react-intl';
+
+import { Button, HStack, VStack } from '@navikt/ds-react';
+import { RhfForm } from '@navikt/ft-form-hooks';
+
+import { type FaktaBegrunnelseFormValues, FaktaBegrunnelseTextField, FaktaSubmitButton } from '@navikt/fp-fakta-felles';
+import { AksjonspunktKode } from '@navikt/fp-kodeverk';
+import type { Aksjonspunkt, FødselGjeldende } from '@navikt/fp-types';
+import type { OverstyringFaktaFødselAp } from '@navikt/fp-types-avklar-aksjonspunkter';
+import { usePanelDataContext } from '@navikt/fp-utils';
+
+import { ErBarnFødt, type ErBarnFødtFormValues } from '../form/ErBarnFødt';
+import { Termindato, type TermindatoFormValues } from '../form/Termindato';
+import { TermindatoMedReadonlyToggle } from '../form/TermindatoMedReadonlyToggle';
+
+interface Props {
+ gjeldende: FødselGjeldende;
+ isReadOnly: boolean;
+ avbrytOverstyring: () => void;
+}
+
+type FormValues = ErBarnFødtFormValues & TermindatoFormValues & FaktaBegrunnelseFormValues;
+
+// TODO(siri): legg til mellomlagring når den støtter lagring av flere forms i samme panel
+export const OverstyringForm = ({ gjeldende, isReadOnly, avbrytOverstyring }: Props) => {
+ const intl = useIntl();
+ const { aksjonspunkterForPanel, submitCallback, isSubmittable } = usePanelDataContext();
+
+ const overstyringsAP = aksjonspunkterForPanel.find(
+ a => a.definisjon === AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
+ );
+ const formMethods = useForm({
+ defaultValues: initialValues(gjeldende, overstyringsAP),
+ });
+ const finnesBarnIFReg = gjeldende.barn.some(b => b.kilde === 'FOLKEREGISTER');
+ return (
+ submitCallback(transformValues(values))}>
+
+
+
+
+
+
+
+ {!isReadOnly && (
+
+
+
+
+ )}
+
+
+ );
+};
+
+const initialValues = (gjeldende: FødselGjeldende, overstyringsAP?: Aksjonspunkt) => ({
+ ...Termindato.initialValues(gjeldende),
+ ...ErBarnFødt.initialValues(gjeldende),
+ ...FaktaBegrunnelseTextField.initialValues(overstyringsAP),
+});
+
+const transformValues = (values: FormValues): OverstyringFaktaFødselAp => ({
+ kode: AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
+ ...Termindato.transformValues(values),
+ ...ErBarnFødt.transformValues(values),
+ ...FaktaBegrunnelseTextField.transformValues(values),
+});
diff --git a/packages/fakta/fodsel/src/components/overstyring/OverstyringPanel.tsx b/packages/fakta/fodsel/src/components/overstyring/OverstyringPanel.tsx
new file mode 100644
index 00000000000..e1920fefdde
--- /dev/null
+++ b/packages/fakta/fodsel/src/components/overstyring/OverstyringPanel.tsx
@@ -0,0 +1,46 @@
+import { FormattedMessage, useIntl } from 'react-intl';
+
+import { Heading, HStack } from '@navikt/ds-react';
+import { OverstyringKnapp } from '@navikt/ft-ui-komponenter';
+
+import { AksjonspunktKode } from '@navikt/fp-kodeverk';
+import type { FødselGjeldende } from '@navikt/fp-types';
+import { FaktaKort } from '@navikt/fp-ui-komponenter';
+import { usePanelDataContext, usePanelOverstyring } from '@navikt/fp-utils';
+
+import { OverstyringForm } from './OverstyringForm';
+
+interface Props {
+ gjeldende: FødselGjeldende;
+}
+
+export const OverstyringPanel = ({ gjeldende }: Props) => {
+ const intl = useIntl();
+
+ const { erOverstyrt, toggleOverstyring, kanOverstyreAccess, overrideReadOnly } = usePanelOverstyring();
+ const { alleMerknaderFraBeslutter } = usePanelDataContext();
+
+ const readOnly = !erOverstyrt || overrideReadOnly || !kanOverstyreAccess.isEnabled;
+
+ return (
+ <>
+ {kanOverstyreAccess.isEnabled && (
+
+
+
+
+
+
+ )}
+
+ {erOverstyrt && (
+
+
+
+ )}
+ >
+ );
+};
diff --git a/packages/kodeverk/index.ts b/packages/kodeverk/index.ts
index 715c76b0759..9f5b8ed1080 100644
--- a/packages/kodeverk/index.ts
+++ b/packages/kodeverk/index.ts
@@ -4,7 +4,7 @@ export {
isUttakAksjonspunkt,
isFaktaUttakAksjonspunkt,
} from './src/aksjonspunktCodes';
-export type { OverstyringAksjonspunkter } from './src/aksjonspunktCodes';
+export type { OverstyringAksjonspunkter, VilkårOverstyringAksjonspunkter } from './src/aksjonspunktCodes';
export { AksjonspunktKodeTilbakekreving } from './src/aksjonspunktCodesTilbakekreving';
export { AksjonspunktStatus, erAksjonspunktÅpent } from './src/aksjonspunktStatus';
export { AksjonspunktType } from './src/aksjonspunktType';
diff --git a/packages/kodeverk/src/aksjonspunktCodes.ts b/packages/kodeverk/src/aksjonspunktCodes.ts
index 0bdcbcd8157..72cd8508e18 100644
--- a/packages/kodeverk/src/aksjonspunktCodes.ts
+++ b/packages/kodeverk/src/aksjonspunktCodes.ts
@@ -1,16 +1,5 @@
// TODO Fjern denne fila og heller legg aksjonspunkta på pakkene dei blir brukt i
-export type OverstyringAksjonspunkter =
- | AksjonspunktKode.OVERSTYR_SOKNADSFRISTVILKAR
- | AksjonspunktKode.OVERSTYR_ADOPSJONSVILKAR
- | AksjonspunktKode.OVERSTYR_FODSELSVILKAR
- | AksjonspunktKode.OVERSTYR_MEDLEMSKAPSVILKAR
- | AksjonspunktKode.OVERSTYR_MEDLEMSKAPSVILKAR_FORUTGAENDE
- | AksjonspunktKode.OVERSTYR_LØPENDE_MEDLEMSKAPSVILKAR
- | AksjonspunktKode.OVERSTYRING_AV_ADOPSJONSVILKÅRET_FP
- | AksjonspunktKode.OVERSTYR_FODSELSVILKAR_FAR_MEDMOR
- | AksjonspunktKode.OVERSTYRING_AV_OPPTJENINGSVILKARET;
-
export enum AksjonspunktKode {
SJEKK_TERMINBEKREFTELSE = '5001',
AVKLAR_DEKNINGSGRAD = '5002',
@@ -35,6 +24,7 @@ export enum AksjonspunktKode {
VARSEL_REVURDERING_ETTERKONTROLL = '5025', // Utgått, brukes i historikk
VARSEL_REVURDERING_MANUELL = '5026',
SJEKK_MANGLENDE_FØDSEL = '5027',
+ OVERSTYRING_AV_FAKTA_OM_FØDSEL = '6019',
FORESLA_VEDTAK_MANUELT = '5028',
KONTROLLER_STOR_ETTERBETALING_SØKER = '5029',
AVKLAR_VERGE = '5030',
@@ -122,6 +112,21 @@ export enum AksjonspunktKode {
VURDER_TILBAKETREKK = '5090', // Utgått, brukes kun til å vise tidligere løst aksjonspunkt
}
+export type VilkårOverstyringAksjonspunkter =
+ | AksjonspunktKode.OVERSTYR_SOKNADSFRISTVILKAR
+ | AksjonspunktKode.OVERSTYR_ADOPSJONSVILKAR
+ | AksjonspunktKode.OVERSTYR_FODSELSVILKAR
+ | AksjonspunktKode.OVERSTYR_MEDLEMSKAPSVILKAR
+ | AksjonspunktKode.OVERSTYR_MEDLEMSKAPSVILKAR_FORUTGAENDE
+ | AksjonspunktKode.OVERSTYR_LØPENDE_MEDLEMSKAPSVILKAR
+ | AksjonspunktKode.OVERSTYRING_AV_ADOPSJONSVILKÅRET_FP
+ | AksjonspunktKode.OVERSTYR_FODSELSVILKAR_FAR_MEDMOR
+ | AksjonspunktKode.OVERSTYRING_AV_OPPTJENINGSVILKARET;
+
+export type OverstyringAksjonspunkter =
+ | VilkårOverstyringAksjonspunkter
+ | AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL;
+
const uttakAksjonspunkter = [
AksjonspunktKode.OVERSTYRING_AV_UTTAKPERIODER,
AksjonspunktKode.FASTSETT_UTTAKPERIODER,
@@ -144,11 +149,6 @@ const faktaUttakAksjonspunkter = [
AksjonspunktKode.FAKTA_UTTAK_GRADERING_AKTIVITET_UTEN_BEREGNINGSGRUNNLAG_KODE,
];
-const aksjonspunktIsOfType =
- (validAksjonspunktCodes: string[]) =>
- (aksjonspunktCode: string): boolean =>
- validAksjonspunktCodes.includes(aksjonspunktCode);
-
type Aksjonspunkt = Readonly<{
definisjon: string;
status: string;
@@ -167,6 +167,11 @@ type Aksjonspunkt = Readonly<{
export const hasAksjonspunkt = (aksjonspunktKode: string, aksjonspunkter: Aksjonspunkt[]): boolean =>
aksjonspunkter.some(ap => ap.definisjon === aksjonspunktKode);
+const aksjonspunktIsOfType =
+ (validAksjonspunktCodes: string[]) =>
+ (aksjonspunktCode: string): boolean =>
+ validAksjonspunktCodes.includes(aksjonspunktCode);
+
export const isUttakAksjonspunkt = aksjonspunktIsOfType(uttakAksjonspunkter);
export const isFaktaUttakAksjonspunkt = aksjonspunktIsOfType(faktaUttakAksjonspunkter);
diff --git a/packages/prosess/vilkar-overstyring/src/components/VilkarresultatMedOverstyringForm.tsx b/packages/prosess/vilkar-overstyring/src/components/VilkarresultatMedOverstyringForm.tsx
index a0defd7ab7d..218fd9a3b44 100644
--- a/packages/prosess/vilkar-overstyring/src/components/VilkarresultatMedOverstyringForm.tsx
+++ b/packages/prosess/vilkar-overstyring/src/components/VilkarresultatMedOverstyringForm.tsx
@@ -12,7 +12,7 @@ import {
AksjonspunktKode,
BehandlingTypeEnum,
erAksjonspunktÅpent,
- type OverstyringAksjonspunkter,
+ type VilkårOverstyringAksjonspunkter,
VilkarUtfallType,
} from '@navikt/fp-kodeverk';
import { OverstyringPanel, VilkarResultPicker } from '@navikt/fp-prosess-felles';
@@ -53,7 +53,7 @@ function erOverstyringAvMedlemskap(overstyringApKode: AksjonspunktKode) {
const createInitialValues = (
aksjonspunkter: Aksjonspunkt[],
status: string,
- overstyringApKode: OverstyringAksjonspunkter,
+ overstyringApKode: VilkårOverstyringAksjonspunkter,
behandlingsresultat: Behandling['behandlingsresultat'] | undefined,
medlemskapManuellBehandlingResultat: ManuellBehandlingResultat | undefined,
): FormValues => {
@@ -85,13 +85,14 @@ type OverstyringVilkår =
| OverstyringMedlemskapsvilkaretAp
| OverstyringMedlemskapvilkaretForutgaendeAp;
-const transformValues = (values: FormValues, overstyringApKode: OverstyringAksjonspunkter): OverstyringVilkår => {
+const transformValues = (values: FormValues, overstyringApKode: VilkårOverstyringAksjonspunkter): OverstyringVilkår => {
const { vurdering, avslagskode, begrunnelse, medlemFom, opphørFom } = values;
const felles = {
kode: overstyringApKode,
begrunnelse: begrunnelse,
};
+
switch (overstyringApKode) {
case AksjonspunktKode.OVERSTYR_MEDLEMSKAPSVILKAR:
return {
@@ -138,7 +139,7 @@ export const VilkarresultatMedOverstyringForm = ({
const { behandling, fagsak, submitCallback, alleMerknaderFraBeslutter } = usePanelDataContext();
const { erOverstyrt, toggleOverstyring, overstyringApKode, overrideReadOnly, kanOverstyreAccess } =
- usePanelOverstyring();
+ usePanelOverstyring();
const initialValues = createInitialValues(
behandling.aksjonspunkt,
diff --git a/packages/sak/totrinnskontroll/i18n/nb_NO.json b/packages/sak/totrinnskontroll/i18n/nb_NO.json
index b475c3100df..a8822a03bc2 100644
--- a/packages/sak/totrinnskontroll/i18n/nb_NO.json
+++ b/packages/sak/totrinnskontroll/i18n/nb_NO.json
@@ -50,6 +50,7 @@
"ToTrinnsForm.Fødsel.VurderSokersRelasjon": "Søkers relasjon til barnet er vurdert.",
"ToTrinnsForm.Fødsel.SjekkTerminbekreftelse": "Opplysninger om termin er endret",
"ToTrinnsForm.Fødsel.SjekkManglendeFødsel": "Manglende opplysninger om fødsel er endret",
+ "ToTrinnsForm.Fødsel.OverstyrFaktaFødsel": "Opplysninger om fødsel er overstyrt",
"ToTrinnsForm.Fødsel.VilkarOverstyrt": "Fødselsvilkåret er overstyrt.",
"ToTrinnsForm.Omsorg.VurderOmsorg": "Opplysninger om omsorg er endret.",
"ToTrinnsForm.Aleneomsorg.VurderAleneomsorg": "Opplysninger om aleneomsorg er endret.",
diff --git a/packages/sak/totrinnskontroll/src/totrinnskontrollaksjonspunktTextCodes.ts b/packages/sak/totrinnskontroll/src/totrinnskontrollaksjonspunktTextCodes.ts
index 81b908c206f..f319f9504c6 100644
--- a/packages/sak/totrinnskontroll/src/totrinnskontrollaksjonspunktTextCodes.ts
+++ b/packages/sak/totrinnskontroll/src/totrinnskontrollaksjonspunktTextCodes.ts
@@ -14,6 +14,7 @@ export const totrinnskontrollaksjonspunktTextCodes = {
[AksjonspunktKode.AUTO_VENT_PÅ_FODSELREGISTRERING]: 'ToTrinnsForm.Fødsel.VurderSokersRelasjon',
[AksjonspunktKode.SJEKK_TERMINBEKREFTELSE]: 'ToTrinnsForm.Fødsel.SjekkTerminbekreftelse',
[AksjonspunktKode.SJEKK_MANGLENDE_FØDSEL]: 'ToTrinnsForm.Fødsel.SjekkManglendeFødsel',
+ [AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL]: 'ToTrinnsForm.Fødsel.OverstyrFaktaFødsel',
[AksjonspunktKode.OVERSTYR_FODSELSVILKAR]: 'ToTrinnsForm.Fødsel.VilkarOverstyrt',
[AksjonspunktKode.OVERSTYR_FODSELSVILKAR_FAR_MEDMOR]: 'ToTrinnsForm.Fødsel.VilkarOverstyrt',
diff --git a/packages/storybook-utils/decorators/withPanelOverstyring.tsx b/packages/storybook-utils/decorators/withPanelOverstyring.tsx
index 1377585adbd..e8bc990ef67 100644
--- a/packages/storybook-utils/decorators/withPanelOverstyring.tsx
+++ b/packages/storybook-utils/decorators/withPanelOverstyring.tsx
@@ -9,11 +9,12 @@ export type PanelOverstyringContextArgs = {
overstyringApKode: OverstyringAksjonspunkter;
overrideReadOnly?: boolean;
kanOverstyreAccess?: { isEnabled: boolean; employeeHasAccess: boolean };
+ initialToggleState?: boolean;
toggleOverstyring?: (erOverstyrt: boolean) => void;
};
export const withPanelOverstyring: DecoratorFunction = (Story, context) => {
- const { kanOverstyreAccess, overrideReadOnly, overstyringApKode, toggleOverstyring } =
+ const { kanOverstyreAccess, overrideReadOnly, overstyringApKode, initialToggleState, toggleOverstyring } =
context.args as PanelOverstyringContextArgs;
return (
@@ -21,6 +22,7 @@ export const withPanelOverstyring: DecoratorFunction = (Story, co
overstyringApKode={overstyringApKode}
kanOverstyreAccess={kanOverstyreAccess ?? { isEnabled: false, employeeHasAccess: false }}
overrideReadOnly={overrideReadOnly ?? false}
+ initialToggleState={initialToggleState}
toggleOverstyring={toggleOverstyring ?? action('button-click')}
>
diff --git a/packages/types-avklar-aksjonspunkter/index.ts b/packages/types-avklar-aksjonspunkter/index.ts
index 476f2aa4dda..7553657fec1 100644
--- a/packages/types-avklar-aksjonspunkter/index.ts
+++ b/packages/types-avklar-aksjonspunkter/index.ts
@@ -13,8 +13,9 @@ export type { BekreftErMedlemVurderingAp } from './src/fakta/BekreftErMedlemVurd
export type { BekreftOppholdsrettVurderingAp } from './src/fakta/BekreftOppholdsrettVurderingAp';
export type { BekreftLovligOppholdVurderingAp } from './src/fakta/BekreftLovligOppholdVurderingAp';
export type { AvklarFortsattMedlemskapAp } from './src/fakta/AvklarFortsattMedlemskapAp';
-export type { SjekkTerminbekreftelseAp } from './src/fakta/SjekkTerminbekreftelseAp';
-export type { SjekkManglendeFødselAp } from './src/fakta/SjekkManglendeFødselAp';
+export type { SjekkTerminbekreftelseAp } from './src/fakta/fødsel/SjekkTerminbekreftelseAp';
+export type { SjekkManglendeFødselAp } from './src/fakta/fødsel/SjekkManglendeFødselAp';
+export type { OverstyringFaktaFødselAp } from './src/fakta/fødsel/OverstyringFaktaFødselAp';
export type { AvklarAnnenforelderHarRettAp } from './src/fakta/AvklarAnnenforelderHarRettAp';
export type { BekreftUttaksperioderAp } from './src/fakta/BekreftUttaksperioderAp';
export type { VurderArbeidsforholdPermisjonAp } from './src/fakta/VurderArbeidsforholdPermisjonAp';
diff --git a/packages/types-avklar-aksjonspunkter/src/FaktaAksjonspunkt.ts b/packages/types-avklar-aksjonspunkter/src/FaktaAksjonspunkt.ts
index cdd643e50c2..ffce682797b 100644
--- a/packages/types-avklar-aksjonspunkter/src/FaktaAksjonspunkt.ts
+++ b/packages/types-avklar-aksjonspunkter/src/FaktaAksjonspunkt.ts
@@ -27,13 +27,14 @@ import type { BekreftOmsorgVurderingAp } from './fakta/BekreftOmsorgVurderingAp'
import type { BekreftOppholdsrettVurderingAp } from './fakta/BekreftOppholdsrettVurderingAp';
import type { BekreftSvangerskapspengerAp } from './fakta/BekreftSvangerskapspengerAp';
import type { BekreftUttaksperioderAp } from './fakta/BekreftUttaksperioderAp';
+import type { OverstyringFaktaFødselAp } from './fakta/fødsel/OverstyringFaktaFødselAp';
+import type { SjekkManglendeFødselAp } from './fakta/fødsel/SjekkManglendeFødselAp';
+import type { SjekkTerminbekreftelseAp } from './fakta/fødsel/SjekkTerminbekreftelseAp';
import type { KontrollerBesteberegningAP } from './fakta/KontrollerBesteberegningAP';
import type { MerkOpptjeningUtlandAp } from './fakta/MerkOpptjeningUtlandAp';
import type { OverstyringAvklarStartdatoForPeriodenAp } from './fakta/OverstyringAvklarStartdatoForPeriodenAp';
import type { OverstyringDekningsgradAp } from './fakta/OverstyringDekningsgradAp';
import type { OverstyringRettigheterAp } from './fakta/OverstyringRettigheterAp';
-import type { SjekkManglendeFødselAp } from './fakta/SjekkManglendeFødselAp';
-import type { SjekkTerminbekreftelseAp } from './fakta/SjekkTerminbekreftelseAp';
import type { VurderArbeidsforholdInntektsmeldingAp } from './fakta/VurderArbeidsforholdInntektsmeldingAp';
import type { VurderArbeidsforholdPermisjonAp } from './fakta/VurderArbeidsforholdPermisjonAp';
import type { VurderDokumentasjonAp } from './fakta/VurderDokumentasjonAp';
@@ -55,6 +56,7 @@ export type FaktaAksjonspunkt =
| AvklarFortsattMedlemskapAp
| SjekkTerminbekreftelseAp
| SjekkManglendeFødselAp
+ | OverstyringFaktaFødselAp
| AvklarAnnenforelderHarRettAp
| BekreftUttaksperioderAp
| OverstyringAvklarStartdatoForPeriodenAp
diff --git "a/packages/types-avklar-aksjonspunkter/src/fakta/SjekkManglendeF\303\270dselAp.ts" "b/packages/types-avklar-aksjonspunkter/src/fakta/SjekkManglendeF\303\270dselAp.ts"
deleted file mode 100644
index 4214da0f0d8..00000000000
--- "a/packages/types-avklar-aksjonspunkter/src/fakta/SjekkManglendeF\303\270dselAp.ts"
+++ /dev/null
@@ -1,11 +0,0 @@
-import { AksjonspunktKode } from '@navikt/fp-kodeverk';
-
-import type { AksjonspunktTilBekreftelse } from '../AksjonspunktTilBekreftelse';
-
-export type SjekkManglendeFødselAp = {
- erBarnFødt: boolean;
- barn?: {
- fødselsdato: string;
- dødsdato?: string;
- }[];
-} & AksjonspunktTilBekreftelse;
diff --git "a/packages/types-avklar-aksjonspunkter/src/fakta/f\303\270dsel/OverstyringFaktaF\303\270dselAp.ts" "b/packages/types-avklar-aksjonspunkter/src/fakta/f\303\270dsel/OverstyringFaktaF\303\270dselAp.ts"
new file mode 100644
index 00000000000..08e3abcd7db
--- /dev/null
+++ "b/packages/types-avklar-aksjonspunkter/src/fakta/f\303\270dsel/OverstyringFaktaF\303\270dselAp.ts"
@@ -0,0 +1,13 @@
+import { AksjonspunktKode } from '@navikt/fp-kodeverk';
+
+import type { AksjonspunktTilBekreftelse } from '../../AksjonspunktTilBekreftelse';
+
+export type OverstyringFaktaFødselAp = {
+ termindato: string | null;
+ barn:
+ | {
+ fødselsdato: string;
+ dødsdato?: string;
+ }[]
+ | null;
+} & AksjonspunktTilBekreftelse;
diff --git "a/packages/types-avklar-aksjonspunkter/src/fakta/f\303\270dsel/SjekkManglendeF\303\270dselAp.ts" "b/packages/types-avklar-aksjonspunkter/src/fakta/f\303\270dsel/SjekkManglendeF\303\270dselAp.ts"
new file mode 100644
index 00000000000..b935f545bce
--- /dev/null
+++ "b/packages/types-avklar-aksjonspunkter/src/fakta/f\303\270dsel/SjekkManglendeF\303\270dselAp.ts"
@@ -0,0 +1,13 @@
+import { AksjonspunktKode } from '@navikt/fp-kodeverk';
+
+import type { AksjonspunktTilBekreftelse } from '../../AksjonspunktTilBekreftelse';
+
+export type SjekkManglendeFødselAp = {
+ termindato: string | null;
+ barn:
+ | {
+ fødselsdato: string;
+ dødsdato?: string;
+ }[]
+ | null;
+} & AksjonspunktTilBekreftelse;
diff --git a/packages/types-avklar-aksjonspunkter/src/fakta/SjekkTerminbekreftelseAp.ts "b/packages/types-avklar-aksjonspunkter/src/fakta/f\303\270dsel/SjekkTerminbekreftelseAp.ts"
similarity index 65%
rename from packages/types-avklar-aksjonspunkter/src/fakta/SjekkTerminbekreftelseAp.ts
rename to "packages/types-avklar-aksjonspunkter/src/fakta/f\303\270dsel/SjekkTerminbekreftelseAp.ts"
index 089f4611e7a..39fc3fa9b9c 100644
--- a/packages/types-avklar-aksjonspunkter/src/fakta/SjekkTerminbekreftelseAp.ts
+++ "b/packages/types-avklar-aksjonspunkter/src/fakta/f\303\270dsel/SjekkTerminbekreftelseAp.ts"
@@ -1,9 +1,9 @@
import { AksjonspunktKode } from '@navikt/fp-kodeverk';
-import type { AksjonspunktTilBekreftelse } from '../AksjonspunktTilBekreftelse';
+import type { AksjonspunktTilBekreftelse } from '../../AksjonspunktTilBekreftelse';
export type SjekkTerminbekreftelseAp = {
utstedtdato: string;
- termindato: string;
+ termindato: string | null;
antallBarn: number;
} & AksjonspunktTilBekreftelse;
diff --git a/packages/types/src/apiDtoGenerert.ts b/packages/types/src/apiDtoGenerert.ts
index 43f2bda201f..dd8de78ad5a 100644
--- a/packages/types/src/apiDtoGenerert.ts
+++ b/packages/types/src/apiDtoGenerert.ts
@@ -511,6 +511,7 @@ export type foreldrepenger_behandlingslager_behandling_aksjonspunkt_Aksjonspunkt
| '6016'
| '6018'
| '6017'
+ | '6019'
| '6103'
| '7001'
| '7002'
@@ -564,6 +565,7 @@ export type foreldrepenger_behandlingslager_behandling_aksjonspunkt_Aksjonspunkt
| '6007'
| '6012'
| '6013'
+ | '6019'
| '6068'
| '6070'
| '7004'
diff --git a/packages/utils/src/context/PanelOverstyringContext.tsx b/packages/utils/src/context/PanelOverstyringContext.tsx
index dc3921b97fe..5b634d57ac1 100644
--- a/packages/utils/src/context/PanelOverstyringContext.tsx
+++ b/packages/utils/src/context/PanelOverstyringContext.tsx
@@ -1,23 +1,31 @@
import { createContext, type ReactElement, useContext, useMemo, useState } from 'react';
-import { type OverstyringAksjonspunkter } from '@navikt/fp-kodeverk';
+import { AksjonspunktKode } from '@navikt/fp-kodeverk';
-type Props = {
+interface ContextProps {
overrideReadOnly: boolean;
kanOverstyreAccess: { isEnabled: boolean; employeeHasAccess: boolean };
- overstyringApKode: OverstyringAksjonspunkter;
-};
-
-type InputProps = {
+ overstyringApKode: AksjonspunktKode;
+ initialToggleState?: boolean;
toggleOverstyring?: (erOverstyrt: boolean) => void;
-};
+}
-type InternalProps = { erOverstyrt: boolean; toggleOverstyring: () => void };
+interface ContextValues {
+ overrideReadOnly: boolean;
+ kanOverstyreAccess: { isEnabled: boolean; employeeHasAccess: boolean };
+ overstyringApKode: T;
+ erOverstyrt: boolean;
+ toggleOverstyring: () => void;
+}
-const PanelOverstyringContext = createContext<(Props & InternalProps) | null>(null);
+const PanelOverstyringContext = createContext | null>(null);
-export const PanelOverstyringProvider = (props: Props & InputProps & { children: ReactElement | null }) => {
- const [erOverstyrt, setErOverstyrt] = useState(false);
+export const PanelOverstyringProvider = (
+ props: {
+ children: ReactElement | null;
+ } & ContextProps,
+) => {
+ const [erOverstyrt, setErOverstyrt] = useState(props.initialToggleState ?? false);
const { children, toggleOverstyring: toggle, ...otherProps } = props;
@@ -35,11 +43,11 @@ export const PanelOverstyringProvider = (props: Props & InputProps & { children:
[erOverstyrt, toggleOverstyring, otherProps],
);
- return {children};
+ return {children};
};
-export const usePanelOverstyring = () => {
- const context = useContext<(Props & InternalProps) | null>(PanelOverstyringContext);
+export const usePanelOverstyring = () => {
+ const context = useContext(PanelOverstyringContext) as ContextValues | null;
if (!context) {
throw new Error('PanelOverstyringContext.Provider er ikke satt opp');
}