Skip to content

Commit 213d5c2

Browse files
committed
kan sende med adresse for fritekstbrev på sak
1 parent addc962 commit 213d5c2

File tree

7 files changed

+173
-111
lines changed

7 files changed

+173
-111
lines changed

src/api/sakApi.ts

+2
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ export async function lagreOgSendFritekstDokument(arg: OpprettDokumentBody): Pro
108108
body: {
109109
tittel: arg.tittel,
110110
fritekst: arg.fritekst,
111+
adresse: arg.adresse,
111112
},
112113
});
113114
}
@@ -120,6 +121,7 @@ export async function opprettFritekstDokument(arg: OpprettDokumentBody): Promise
120121
body: {
121122
tittel: arg.tittel,
122123
fritekst: arg.fritekst,
124+
adresse: arg.adresse,
123125
},
124126
bodyTransformer: (res) => res.blob(),
125127
});

src/components/forms/dokument/dokumentForm/DokumentForm-nb.ts

-6
This file was deleted.

src/components/forms/dokument/dokumentForm/DokumentForm.tsx

-103
This file was deleted.

src/components/forms/dokument/dokumentForm/DokumentForm.module.less src/pages/saksbehandling/brev/BrevPage.module.less

+12
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,18 @@
88
margin-top: @spacing;
99
}
1010

11+
.box {
12+
display: flex;
13+
flex-direction: column;
14+
gap: @spacing-s;
15+
16+
//tvinger frem hr til å vises i en flex-container
17+
hr {
18+
margin-left: 0;
19+
margin-right: 0;
20+
}
21+
}
22+
1123
.buttonContainer {
1224
display: flex;
1325
gap: @spacing;
+125-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,130 @@
1-
import DokumentForm from '../../../components/forms/dokument/dokumentForm/DokumentForm';
1+
import * as RemoteData from '@devexperts/remote-data-ts';
2+
import { yupResolver } from '@hookform/resolvers/yup';
3+
import { Box, Button, Heading, Radio, RadioGroup, TextField } from '@navikt/ds-react';
4+
import { Controller, useForm } from 'react-hook-form';
5+
import { useNavigate, useOutletContext } from 'react-router-dom';
6+
7+
import * as SakApi from '~src/api/sakApi';
8+
import ApiErrorAlert from '~src/components/apiErrorAlert/ApiErrorAlert';
9+
import DokumentDistribusjonForm from '~src/components/forms/dokument/distribusjon/DokumentDistribusjonForm';
10+
import { BrevInput } from '~src/components/inputs/brevInput/BrevInput';
11+
import LinkAsButton from '~src/components/linkAsButton/LinkAsButton';
12+
import { SaksoversiktContext } from '~src/context/SaksoversiktContext';
13+
import { useApiCall } from '~src/lib/hooks';
14+
import * as Routes from '~src/lib/routes';
15+
16+
import styles from './BrevPage.module.less';
17+
import { DokumentFormData, dokumentSchema } from './BrevPageUtils';
218

319
const BrevPage = () => {
4-
return <DokumentForm />;
20+
const navigate = useNavigate();
21+
22+
const context = useOutletContext<SaksoversiktContext>();
23+
const [sendBrevStatus, sendBrev] = useApiCall(SakApi.lagreOgSendFritekstDokument);
24+
25+
const form = useForm<DokumentFormData>({
26+
defaultValues: {
27+
tittel: '',
28+
fritekst: '',
29+
skalSendeTilAnnenAdresse: false,
30+
adresse: {
31+
adresser: [{ adresselinje: '' }],
32+
postnummer: '',
33+
poststed: '',
34+
},
35+
},
36+
resolver: yupResolver(dokumentSchema),
37+
});
38+
39+
return (
40+
<form
41+
className={styles.pageContainer}
42+
onSubmit={form.handleSubmit((values) =>
43+
sendBrev(
44+
{
45+
sakId: context.sak.id,
46+
tittel: values.tittel!,
47+
fritekst: values.fritekst!,
48+
adresse: values.skalSendeTilAnnenAdresse
49+
? {
50+
adresselinje1: values.adresse!.adresser[0]!.adresselinje,
51+
adresselinje2: values.adresse?.adresser[1]?.adresselinje
52+
? values.adresse.adresser[1].adresselinje
53+
: null,
54+
adresselinje3: values.adresse?.adresser[2]?.adresselinje
55+
? values.adresse.adresser[2].adresselinje
56+
: null,
57+
postnummer: values.adresse!.postnummer,
58+
poststed: values.adresse!.poststed,
59+
}
60+
: null,
61+
},
62+
() => {
63+
navigate(Routes.alleDokumenterForSak.createURL({ sakId: context.sak.id }));
64+
},
65+
),
66+
)}
67+
>
68+
<Heading level="2" size={'large'}>
69+
Opprett og send nytt fritekst brev
70+
</Heading>
71+
<Box className={styles.box} background="bg-default" padding="6">
72+
<Controller
73+
control={form.control}
74+
name={'skalSendeTilAnnenAdresse'}
75+
render={({ field }) => (
76+
<RadioGroup legend="Skal brevet sendes til en annen adresse?" {...field}>
77+
<Radio value={true}>Ja</Radio>
78+
<Radio value={false}>Nei</Radio>
79+
</RadioGroup>
80+
)}
81+
/>
82+
{form.watch('skalSendeTilAnnenAdresse') && (
83+
<DokumentDistribusjonForm prependNames="adresse" control={form.control} />
84+
)}
85+
<hr />
86+
87+
<Controller
88+
control={form.control}
89+
name={'tittel'}
90+
render={({ field, fieldState }) => (
91+
<TextField label={'Tittel'} onChange={field.onChange} error={fieldState.error?.message} />
92+
)}
93+
/>
94+
<Controller
95+
control={form.control}
96+
name={'fritekst'}
97+
render={({ field, fieldState }) => (
98+
<BrevInput
99+
tekst={field.value}
100+
onVisBrevClick={() =>
101+
SakApi.opprettFritekstDokument({
102+
sakId: context.sak.id,
103+
tittel: form.watch('tittel'),
104+
fritekst: form.watch('fritekst'),
105+
//adresse har ikke noe å si for visning av brevet
106+
adresse: null,
107+
})
108+
}
109+
feil={fieldState.error}
110+
onChange={field.onChange}
111+
/>
112+
)}
113+
/>
114+
</Box>
115+
116+
{RemoteData.isFailure(sendBrevStatus) && <ApiErrorAlert error={sendBrevStatus.error} />}
117+
<div className={styles.buttonContainer}>
118+
<LinkAsButton
119+
variant="secondary"
120+
href={Routes.saksoversiktValgtSak.createURL({ sakId: context.sak.id })}
121+
>
122+
Tilbake
123+
</LinkAsButton>
124+
<Button loading={RemoteData.isPending(sendBrevStatus)}>Lagre og send brev</Button>
125+
</div>
126+
</form>
127+
);
5128
};
6129

7130
export default BrevPage;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import {
2+
DokumentDistribusjonFormData,
3+
dokumentDistribusjonFormSchema,
4+
} from '~src/components/forms/dokument/distribusjon/DokumentDistribusjonFormUtils';
5+
import { Nullable } from '~src/lib/types';
6+
import yup from '~src/lib/validering';
7+
8+
export interface DokumentFormData {
9+
tittel: string;
10+
fritekst: string;
11+
skalSendeTilAnnenAdresse: boolean;
12+
adresse: Nullable<DokumentDistribusjonFormData>;
13+
}
14+
15+
export const dokumentSchema = yup.object<DokumentFormData>({
16+
tittel: yup.string().required(),
17+
fritekst: yup.string().required(),
18+
skalSendeTilAnnenAdresse: yup.boolean().required(),
19+
adresse: yup.object<DokumentDistribusjonFormData>().nullable().defined().when('skalSendeTilAnnenAdresse', {
20+
is: true,
21+
then: dokumentDistribusjonFormSchema,
22+
}),
23+
});

src/types/dokument/Dokument.ts

+11
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { Nullable } from '~src/lib/types';
2+
13
export interface Dokument {
24
id: string;
35
tittel: string;
@@ -19,4 +21,13 @@ export interface OpprettDokumentBody {
1921
sakId: string;
2022
tittel: string;
2123
fritekst: string;
24+
adresse: Nullable<AdresseRequest>;
25+
}
26+
27+
interface AdresseRequest {
28+
adresselinje1: string;
29+
adresselinje2: Nullable<string>;
30+
adresselinje3: Nullable<string>;
31+
postnummer: string;
32+
poststed: string;
2233
}

0 commit comments

Comments
 (0)