Skip to content

Commit

Permalink
sak-totrinnskontroll: Skriver fra redux-form til react-hook-form (#6576)
Browse files Browse the repository at this point in the history
* Skriver fra redux-form til react-hook-form

* Validerer at minst en checkbox er valgt

* Bort med react-intl

* Fikser tester

* Forbedrer stories
  • Loading branch information
hallvardastark authored Oct 22, 2024
1 parent fbf3f26 commit bda5053
Show file tree
Hide file tree
Showing 23 changed files with 641 additions and 889 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import behandlingStatus from '@fpsak-frontend/kodeverk/src/behandlingStatus';
import fagsakYtelseType from '@fpsak-frontend/kodeverk/src/fagsakYtelseType';
import messages from '@fpsak-frontend/sak-totrinnskontroll/i18n/nb_NO.json';
import { renderWithIntl } from '@fpsak-frontend/utils-test/test-utils';
import { behandlingType } from '@k9-sak-web/backend/k9sak/kodeverk/behandling/BehandlingType.js';
import { Behandling } from '@k9-sak-web/types';
import { screen } from '@testing-library/react';
import React from 'react';
import { behandlingType } from '@k9-sak-web/backend/k9sak/kodeverk/behandling/BehandlingType.js';
import { K9sakApiKeys, requestApi } from '../../data/k9sakApi';
import BeslutterModalIndex from './BeslutterModalIndex';

Expand Down Expand Up @@ -44,7 +42,6 @@ describe('<BeslutterModalIndex>', () => {
allAksjonspunktApproved={false}
erKlageWithKA={false}
/>,
{ messages },
);

expect(
Expand Down
201 changes: 0 additions & 201 deletions packages/sak-totrinnskontroll/i18n/nb_NO.json

This file was deleted.

1 change: 1 addition & 0 deletions packages/sak-totrinnskontroll/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"@k9-sak-web/konstanter": "1.0.0",
"@k9-sak-web/types": "1.0.0",
"history": "5.3.0",
"object-hash": "3.0.0",
"react": "18.3.1",
"react-intl": "6.8.0",
"react-redux": "9.1.2",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import React from 'react';
import { createIntl, createIntlCache, RawIntlProvider } from 'react-intl';

import { BehandlingAppKontekst, Kodeverk } from '@k9-sak-web/types';
import FatterVedtakApprovalModal from './components/modal/FatterVedtakApprovalModal';
import messages from '../i18n/nb_NO.json';

const cache = createIntlCache();

const intl = createIntl(
{
locale: 'nb-NO',
messages,
},
cache,
);
Expand Down
163 changes: 132 additions & 31 deletions packages/sak-totrinnskontroll/src/TotrinnskontrollSakIndex.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import behandlingStatus from '@fpsak-frontend/kodeverk/src/behandlingStatus';
import { behandlingType } from '@k9-sak-web/backend/k9sak/kodeverk/behandling/BehandlingType.js';
import alleKodeverk from '@k9-sak-web/gui/storybook/mocks/alleKodeverk.json';
import { Behandling, KlageVurdering, TotrinnskontrollAksjonspunkt } from '@k9-sak-web/types';
import { action } from '@storybook/addon-actions';
import React from 'react';
import alleKodeverk from '@k9-sak-web/gui/storybook/mocks/alleKodeverk.json';
import { Meta, StoryObj } from '@storybook/react';
import { expect, fn, userEvent, waitFor } from '@storybook/test';
import TotrinnskontrollSakIndex from './TotrinnskontrollSakIndex';

const data = [
Expand Down Expand Up @@ -141,41 +142,141 @@ const behandling = {
toTrinnsBehandling: true,
} as Behandling;

export default {
const meta: Meta<typeof TotrinnskontrollSakIndex> = {
title: 'sak/sak-totrinnskontroll',
component: TotrinnskontrollSakIndex,
};

export const visTotrinnskontrollForBeslutter = props => (
<div
style={{
width: '600px',
margin: '50px',
padding: '20px',
backgroundColor: 'white',
}}
>
<TotrinnskontrollSakIndex
behandling={behandling}
totrinnskontrollSkjermlenkeContext={data}
location={location}
onSubmit={action('button-click')}
behandlingKlageVurdering={
{
klageVurderingResultatNFP: {
klageVurdering: 'STADFESTE_YTELSESVEDTAK',
export default meta;

type Story = StoryObj<typeof TotrinnskontrollSakIndex>;

export const SenderBehandlingTilbakeTilSaksbehandler: Story = {
args: {
behandling,
totrinnskontrollSkjermlenkeContext: data,
location,
onSubmit: fn(),
behandlingKlageVurdering: {
klageVurderingResultatNFP: {
klageVurdering: 'STADFESTE_YTELSESVEDTAK',
},
} as KlageVurdering,
alleKodeverk: alleKodeverk as any,
createLocationForSkjermlenke: () => location,
readOnly: false,
},
play: async ({ args, canvas }) => {
await userEvent.click(canvas.getAllByLabelText('Godkjent')[0]);
await userEvent.click(canvas.getAllByLabelText('Godkjent')[1]);
await userEvent.click(canvas.getAllByLabelText('Godkjent')[2]);
await userEvent.click(canvas.getAllByLabelText('Vurder på nytt')[3]);
await userEvent.click(canvas.getByLabelText('Feil fakta'));
await userEvent.click(canvas.getByLabelText('Feil lovanvendelse'));
await userEvent.click(canvas.getByLabelText('Feil regelforståelse'));
await userEvent.type(canvas.getByLabelText('Begrunnelse'), 'Dette er en begrunnelse');
expect(canvas.getByRole('button', { name: 'Godkjenn vedtaket' })).toBeDisabled();
expect(canvas.getByRole('button', { name: 'Send til saksbehandler' })).toBeEnabled();
await userEvent.click(canvas.getByRole('button', { name: 'Send til saksbehandler' }));
await waitFor(() => expect(args.onSubmit).toHaveBeenCalledTimes(1));
expect(args.onSubmit).toHaveBeenNthCalledWith(1, {
fatterVedtakAksjonspunktDto: {
'@type': '5016',
begrunnelse: null,
aksjonspunktGodkjenningDtos: [
{
aksjonspunktKode: '5082',
godkjent: true,
begrunnelse: null,
arsaker: [],
},
} as KlageVurdering
}
alleKodeverk={alleKodeverk as any}
createLocationForSkjermlenke={() => location}
{...props}
/>
</div>
);
{
aksjonspunktKode: '5038',
godkjent: true,
begrunnelse: null,
arsaker: [],
},
{
aksjonspunktKode: '5039',
godkjent: true,
begrunnelse: null,
arsaker: [],
},
{
aksjonspunktKode: '5058',
godkjent: false,
begrunnelse: 'Dette er en begrunnelse',
arsaker: ['FEIL_FAKTA', 'FEIL_LOV', 'FEIL_REGEL'],
},
],
},
erAlleAksjonspunktGodkjent: false,
});
},
};

visTotrinnskontrollForBeslutter.args = {
readOnly: false,
export const GodkjennerVedtak: Story = {
args: {
...SenderBehandlingTilbakeTilSaksbehandler.args,
},
play: async ({ canvas, args }) => {
await userEvent.click(canvas.getAllByLabelText('Godkjent')[0]);
await userEvent.click(canvas.getAllByLabelText('Godkjent')[1]);
await userEvent.click(canvas.getAllByLabelText('Godkjent')[2]);
await userEvent.click(canvas.getAllByLabelText('Godkjent')[3]);
expect(canvas.getByRole('button', { name: 'Godkjenn vedtaket' })).toBeEnabled();
expect(canvas.getByRole('button', { name: 'Send til saksbehandler' })).toBeDisabled();
await userEvent.click(canvas.getByRole('button', { name: 'Godkjenn vedtaket' }));
await waitFor(() => expect(args.onSubmit).toHaveBeenCalledTimes(1));
expect(args.onSubmit).toHaveBeenNthCalledWith(1, {
fatterVedtakAksjonspunktDto: {
'@type': '5016',
begrunnelse: null,
aksjonspunktGodkjenningDtos: [
{
aksjonspunktKode: '5082',
godkjent: true,
begrunnelse: null,
arsaker: [],
},
{
aksjonspunktKode: '5038',
godkjent: true,
begrunnelse: null,
arsaker: [],
},
{
aksjonspunktKode: '5039',
godkjent: true,
begrunnelse: null,
arsaker: [],
},
{
aksjonspunktKode: '5058',
godkjent: true,
begrunnelse: null,
arsaker: [],
},
],
},
erAlleAksjonspunktGodkjent: true,
});
},
};

export const ViserFeilmeldingDersomCheckboxMangler: Story = {
args: {
...SenderBehandlingTilbakeTilSaksbehandler.args,
},
play: async ({ canvas }) => {
await userEvent.click(canvas.getAllByLabelText('Godkjent')[0]);
await userEvent.click(canvas.getAllByLabelText('Godkjent')[1]);
await userEvent.click(canvas.getAllByLabelText('Godkjent')[2]);
await userEvent.click(canvas.getAllByLabelText('Vurder på nytt')[3]);
await userEvent.type(canvas.getByLabelText('Begrunnelse'), 'Dette er en begrunnelse');
await userEvent.click(canvas.getByRole('button', { name: 'Send til saksbehandler' }));
expect(canvas.getByText('Feltet må fylles ut')).toBeInTheDocument();
},
};

export const visTotrinnskontrollForSaksbehandler = () => (
Expand Down
25 changes: 11 additions & 14 deletions packages/sak-totrinnskontroll/src/TotrinnskontrollSakIndex.tsx
Original file line number Diff line number Diff line change
@@ -1,32 +1,31 @@
import React, { useCallback, useMemo } from 'react';
import { createIntl, createIntlCache, RawIntlProvider } from 'react-intl';
import { Location } from 'history';
import { useCallback, useMemo } from 'react';
import { createIntl, createIntlCache, RawIntlProvider } from 'react-intl';

import kodeverkTyper from '@fpsak-frontend/kodeverk/src/kodeverkTyper';
import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes';
import aksjonspunktCodesTilbakekreving from '@fpsak-frontend/kodeverk/src/aksjonspunktCodesTilbakekreving';
import BehandlingStatus from '@fpsak-frontend/kodeverk/src/behandlingStatus';
import { skjermlenkeCodes } from '@k9-sak-web/konstanter';
import BehandlingType from '@fpsak-frontend/kodeverk/src/behandlingType';
import kodeverkTyper from '@fpsak-frontend/kodeverk/src/kodeverkTyper';
import vurderPaNyttArsakType from '@fpsak-frontend/kodeverk/src/vurderPaNyttArsakType';
import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes';
import aksjonspunktCodesTilbakekreving from '@fpsak-frontend/kodeverk/src/aksjonspunktCodesTilbakekreving';
import { skjermlenkeCodes } from '@k9-sak-web/konstanter';
import {
BehandlingAppKontekst,
KodeverkMedNavn,
KlageVurdering,
KodeverkMedNavn,
TotrinnskontrollSkjermlenkeContext,
} from '@k9-sak-web/types';

import TotrinnskontrollBeslutterForm, { FormValues } from './components/TotrinnskontrollBeslutterForm';
import { AksjonspunktGodkjenningData } from './components/AksjonspunktGodkjenningFieldArray';
import { FormState } from './components/FormState';
import TotrinnskontrollBeslutterForm from './components/TotrinnskontrollBeslutterForm';
import TotrinnskontrollSaksbehandlerPanel from './components/TotrinnskontrollSaksbehandlerPanel';
import messages from '../i18n/nb_NO.json';

const cache = createIntlCache();

const intl = createIntl(
{
locale: 'nb-NO',
messages,
},
cache,
);
Expand Down Expand Up @@ -81,7 +80,7 @@ const TotrinnskontrollSakIndex = ({
BehandlingType.TILBAKEKREVING_REVURDERING === behandling.type.kode;

const submitHandler = useCallback(
(values: FormValues) => {
(values: FormState) => {
const aksjonspunktGodkjenningDtos = values.aksjonspunktGodkjenning.map(apData => ({
aksjonspunktKode: apData.aksjonspunktKode,
godkjent: apData.totrinnskontrollGodkjent,
Expand Down Expand Up @@ -130,11 +129,9 @@ const TotrinnskontrollSakIndex = ({
{erStatusFatterVedtak && (
<TotrinnskontrollBeslutterForm
behandling={behandling}
behandlingId={behandling.id}
behandlingVersjon={behandling.versjon}
totrinnskontrollSkjermlenkeContext={sorterteTotrinnskontrollSkjermlenkeContext}
readOnly={readOnly}
onSubmit={submitHandler}
handleSubmit={submitHandler}
behandlingKlageVurdering={behandlingKlageVurdering}
arbeidsforholdHandlingTyper={arbeidsforholdHandlingTyper}
skjermlenkeTyper={skjermlenkeTyper}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,27 @@
import faktaOmBeregningTilfelle from '@fpsak-frontend/kodeverk/src/faktaOmBeregningTilfelle';

const vurderFaktaOmBeregningTotrinnText = {
[faktaOmBeregningTilfelle.VURDER_TIDSBEGRENSET_ARBEIDSFORHOLD]:
'ToTrinnsForm.Beregning.VurderTidsbegrensetArbeidsforhold',
[faktaOmBeregningTilfelle.VURDER_NYOPPSTARTET_FL]: 'ToTrinnsForm.Beregning.NyoppstartetFrilanser',
[faktaOmBeregningTilfelle.VURDER_SN_NY_I_ARBEIDSLIVET]: 'ToTrinnsForm.Beregning.SNNyIArbeidslivet',
[faktaOmBeregningTilfelle.VURDER_LONNSENDRING]: 'ToTrinnsForm.Beregning.VurderLonnsendring',
[faktaOmBeregningTilfelle.FASTSETT_MAANEDSLONN_ARBEIDSTAKER_UTEN_INNTEKTSMELDING]:
'ToTrinnsForm.Beregning.FastsettLonnsendring',
[faktaOmBeregningTilfelle.VURDER_AT_OG_FL_I_SAMME_ORGANISASJON]: 'ToTrinnsForm.Beregning.VurderATFLISammeOrg',
[faktaOmBeregningTilfelle.FASTSETT_BG_KUN_YTELSE]: 'ToTrinnsForm.Beregning.FastsettBgKunYtelse',
[faktaOmBeregningTilfelle.VURDER_ETTERLONN_SLUTTPAKKE]: 'ToTrinnsForm.Beregning.VurderEtterlønnSluttpakke',
[faktaOmBeregningTilfelle.FASTSETT_ETTERLONN_SLUTTPAKKE]: 'ToTrinnsForm.Beregning.FastsettEtterlønnSluttpakke',
[faktaOmBeregningTilfelle.VURDER_MOTTAR_YTELSE]: 'ToTrinnsForm.Beregning.VurderMottarYtelse',
[faktaOmBeregningTilfelle.FASTSETT_MAANEDSINNTEKT_FL]: 'ToTrinnsForm.Beregning.FrilansinntektFastsatt',
[faktaOmBeregningTilfelle.VURDER_MILITÆR_SIVILTJENESTE]: 'ToTrinnsForm.Beregning.VurderMilitærSiviltjeneste',
[faktaOmBeregningTilfelle.VURDER_REFUSJONSKRAV_SOM_HAR_KOMMET_FOR_SENT]: 'ToTrinnsForm.Beregning.VurderRefusjonskrav',
[faktaOmBeregningTilfelle.VURDER_TIDSBEGRENSET_ARBEIDSFORHOLD]: 'Det er vurdert om arbeidsforhold er tidsbegrenset.',
[faktaOmBeregningTilfelle.VURDER_NYOPPSTARTET_FL]: 'Det er vurdert om søker er nyoppstartet frilanser.',
[faktaOmBeregningTilfelle.VURDER_SN_NY_I_ARBEIDSLIVET]:
'Det er vurdert om søker er selvstendig næringsdrivende som er ny i arbeidslivet.',
[faktaOmBeregningTilfelle.VURDER_LONNSENDRING]:
'Det er vurdert om søker har hatt lønnsendring i løpet av de siste tre månedene',
[faktaOmBeregningTilfelle.FASTSETT_MAANEDSLONN_ARBEIDSTAKER_UTEN_INNTEKTSMELDING]: 'Arbeidsinntekt er fastsatt',
[faktaOmBeregningTilfelle.VURDER_AT_OG_FL_I_SAMME_ORGANISASJON]:
'Inntekt er fastsatt for arbeidstaker/frilanser i samme organisajon.',
[faktaOmBeregningTilfelle.FASTSETT_BG_KUN_YTELSE]:
'Det er fastsatt fordeling av beregningsgrunnlaget ved direkte overgang fra ytelse.',
[faktaOmBeregningTilfelle.VURDER_ETTERLONN_SLUTTPAKKE]:
'Det er vurdert om søker har inntekt fra etterlønn eller sluttpakke.',
[faktaOmBeregningTilfelle.FASTSETT_ETTERLONN_SLUTTPAKKE]:
'Inntekt er fastsatt for arbeidstaker med etterlønn eller sluttpakke.',
[faktaOmBeregningTilfelle.VURDER_MOTTAR_YTELSE]: 'Det er vurdert om søker har mottatt ytelse',
[faktaOmBeregningTilfelle.FASTSETT_MAANEDSINNTEKT_FL]: 'Frilansinntekt er fastsatt',
[faktaOmBeregningTilfelle.VURDER_MILITÆR_SIVILTJENESTE]:
'Det er vurdert om søker har hatt militær -eller siviltjeneste i opptjeningsperioden',
[faktaOmBeregningTilfelle.VURDER_REFUSJONSKRAV_SOM_HAR_KOMMET_FOR_SENT]:
'Det er vurdert om refusjonskrav om er fremsatt etter fristen skal tas med i beregning.',
};

export default vurderFaktaOmBeregningTotrinnText;
Loading

0 comments on commit bda5053

Please sign in to comment.