Skip to content

Commit

Permalink
Returnerer data om nyoppstartet med begrunnelse fra aksjonspunkt (#7038)
Browse files Browse the repository at this point in the history
* Returnerer data om nyoppstartet med begrunnelse fra aksjonspunkt

* Endringer etter at dto fra backend er endret

* Kjører prettier for å fikse identering osv

* Endrer på story til å peke på ny index-fil
Legger på typings på respons fra backend
Skal bruke genererte typer etter backend er merget

* Legger på enkel feilhåndtering
Fikser path i story

---------

Co-authored-by: Hallvard Andreas Stark <[email protected]>
  • Loading branch information
helganyrud and hallvardastark authored Jan 31, 2025
1 parent bf462c7 commit b0540e2
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 56 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes';
import { FaktaPanelDef } from '@k9-sak-web/behandling-felles';
import { VurderNyoppstartet } from '@k9-sak-web/gui/fakta/vurder-nyoppstartet/VurderNyoppstartet.js';
import { VurderNyoppstartetIndex } from '@k9-sak-web/gui/fakta/vurder-nyoppstartet/VurderNyoppstartetIndex.js';
import { faktaPanelCodes } from '@k9-sak-web/konstanter';
import { konverterKodeverkTilKode } from '@k9-sak-web/lib/kodeverk/konverterKodeverkTilKode.js';

Expand All @@ -16,7 +16,7 @@ class VurderNyoppstartetFaktaPanelDef extends FaktaPanelDef {
getKomponent = props => {
const deepCopyProps = JSON.parse(JSON.stringify(props));
konverterKodeverkTilKode(deepCopyProps, false);
return <VurderNyoppstartet {...props} {...deepCopyProps} />;
return <VurderNyoppstartetIndex {...props} {...deepCopyProps} behandlingUUID={props.behandling.uuid} />;
};
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,52 +1,49 @@
import type { AksjonspunktDto } from '@k9-sak-web/backend/k9sak/generated';
import AksjonspunktCodes from '@k9-sak-web/lib/kodeverk/types/AksjonspunktCodes.js';
import { Alert, Box, Button, Heading, HStack, VStack } from '@navikt/ds-react';
import { Datepicker, Form, RadioGroupPanel, TextAreaField } from '@navikt/ft-form-hooks';
import { hasValidDate, minLength, required } from '@navikt/ft-form-validators';
import { useForm, useWatch } from 'react-hook-form';

interface FormValues {
begrunnelse: string;
erNyoppstartet: boolean;
fom: string;
begrunnelse: string | null;
erNyoppstartet: boolean | null;
fom: string | null;
}

interface SubmitValues extends FormValues {
export interface SubmitValues {
kode: string;
fortsettBehandling: boolean;
begrunnelse: string | null;
avklarNyoppstartet: { fom: string | null; erNyoppstartet: boolean };
}

interface VurderNyoppstartetProps {
submitCallback: (data: SubmitValues[]) => void;
harApneAksjonspunkter: boolean;
readOnly: boolean;
aksjonspunkter: AksjonspunktDto[];
formDefaultValues: FormValues;
}

export const VurderNyoppstartet = ({
submitCallback,
harApneAksjonspunkter,
readOnly,
aksjonspunkter,
formDefaultValues,
}: VurderNyoppstartetProps) => {
const aksjonspunkt = aksjonspunkter.find(ap => ap.definisjon === AksjonspunktCodes.VURDER_NYOPPSTARTET);
const formMethods = useForm<FormValues>({
defaultValues: {
begrunnelse: aksjonspunkt?.begrunnelse || undefined,
erNyoppstartet: undefined,
fom: undefined,
},
defaultValues: formDefaultValues,
});

const erNyoppstartet = useWatch({ control: formMethods.control, name: 'erNyoppstartet' });

const onSubmit = (values: FormValues) => {
submitCallback([
{
...values,
fom: values.erNyoppstartet ? values.fom : '',
begrunnelse: values.begrunnelse,
kode: AksjonspunktCodes.VURDER_NYOPPSTARTET,
fortsettBehandling: true, // skal mest sannsynlig bort
avklarNyoppstartet: {
fom: values.erNyoppstartet ? values.fom : null,
erNyoppstartet: !!values.erNyoppstartet,
},
},
]);
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import type { Meta, StoryObj } from '@storybook/react';
import { expect, fn, userEvent, waitFor } from '@storybook/test';
import { http, HttpResponse } from 'msw';
import { VurderNyoppstartetIndex } from './VurderNyoppstartetIndex';

const meta: Meta<typeof VurderNyoppstartetIndex> = {
title: 'gui/fakta/vurder-nyoppstartet/VurderNyoppstartetIndex',
component: VurderNyoppstartetIndex,
};

export default meta;

type Story = StoryObj<typeof meta>;

export const Default: Story = {
args: {
submitCallback: fn(),
harApneAksjonspunkter: true,
aksjonspunkter: [],
},
parameters: {
msw: {
handlers: [
http.get('/k9/sak/api/behandling/nyoppstartet', async () => {
return HttpResponse.json({}, { status: 200 });
}),
],
},
},
play: async ({ canvas, args, step }) => {
step('Skal sende inn nyoppstartet dato', async () => {
await waitFor(() => expect(canvas.getByText('Ja')).toBeInTheDocument());
await userEvent.click(canvas.getByLabelText('Ja'));
await userEvent.type(canvas.getByLabelText('Dato for nyoppstartet'), '2023-01-01');
await userEvent.type(canvas.getByLabelText('Begrunnelse'), 'Dette er en begrunnelse');
await userEvent.click(canvas.getByText('Bekreft'));
await waitFor(() => expect(args.submitCallback).toHaveBeenCalledTimes(1));
expect(args.submitCallback).toHaveBeenCalledWith([
{
begrunnelse: 'Dette er en begrunnelse',
kode: '9016',
avklarNyoppstartet: {
erNyoppstartet: true,
fom: '2023-01-01',
},
},
]);
});
},
render: props => <VurderNyoppstartetIndex {...props} />,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import AksjonspunktCodes from '@k9-sak-web/lib/kodeverk/types/AksjonspunktCodes.js';
import { Loader } from '@navikt/ds-react';
import type { AksjonspunktDto } from '@navikt/k9-sak-typescript-client';
import { useQuery } from '@tanstack/react-query';
import axios from 'axios';
import NetworkErrorPage from '../../sak/feilmeldinger/NetworkErrorPage.js';
import { type SubmitValues, VurderNyoppstartet } from './VurderNyoppstartet.js';

interface VurderNyoppstartetIndexProps {
behandlingUUID: string;
submitCallback: (data: SubmitValues[]) => void;
harApneAksjonspunkter: boolean;
readOnly: boolean;
aksjonspunkter: AksjonspunktDto[];
}

interface NyoppstartetData {
erNyoppstartet: boolean | null;
fom: string | null;
}

export const VurderNyoppstartetIndex = ({
behandlingUUID,
submitCallback,
harApneAksjonspunkter,
readOnly,
aksjonspunkter,
}: VurderNyoppstartetIndexProps) => {
const aksjonspunkt = aksjonspunkter.find(ap => ap.definisjon === AksjonspunktCodes.VURDER_NYOPPSTARTET);

const {
data: nyoppstartetData,
isFetching,
isError,
} = useQuery<NyoppstartetData>({
queryKey: ['nyoppstartet', behandlingUUID],
queryFn: () =>
axios
.get('/k9/sak/api/behandling/nyoppstartet', { params: { behandlingUuid: behandlingUUID } })
.then(({ data }) => data),
});

const formDefaultValues = {
begrunnelse: aksjonspunkt?.begrunnelse ?? null,
erNyoppstartet: nyoppstartetData?.erNyoppstartet ?? null,
fom: nyoppstartetData?.fom ?? null,
};

if (isFetching) {
return <Loader />;
}
if (isError) {
return <NetworkErrorPage />;
}
return (
<VurderNyoppstartet
submitCallback={submitCallback}
harApneAksjonspunkter={harApneAksjonspunkter}
readOnly={readOnly}
formDefaultValues={formDefaultValues}
/>
);
};

0 comments on commit b0540e2

Please sign in to comment.