Skip to content

Commit

Permalink
kan laste opp en pdf som skal sendes fra sak
Browse files Browse the repository at this point in the history
  • Loading branch information
RamziAbuQassim committed Jun 13, 2024
1 parent bbd9e4e commit 359fe14
Show file tree
Hide file tree
Showing 5 changed files with 129 additions and 36 deletions.
42 changes: 29 additions & 13 deletions src/api/sakApi.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Behandlingssammendrag } from '~src/types/Behandlingssammendrag';
import { Dokument, OpprettDokumentBody } from '~src/types/dokument/Dokument';
import { Dokument, OpprettDokumentRequest } from '~src/types/dokument/Dokument';
import { Journalpost } from '~src/types/Journalpost';
import {
OppdaterRegistrertUtenlandsoppholdRequest,
Expand Down Expand Up @@ -101,20 +101,36 @@ export async function annullerRegistrertUtenlandsopphold(
});
}

export async function lagreOgSendFritekstDokument(arg: OpprettDokumentBody): Promise<ApiClientResult<Dokument>> {
return apiClient({
url: `/saker/${arg.sakId}/fritekstDokument/lagreOgSend`,
method: 'POST',
body: {
tittel: arg.tittel,
fritekst: arg.fritekst,
adresse: arg.adresse,
distribusjonstype: arg.distribusjonstype,
},
});
export async function lagreOgSendFritekstDokument(arg: OpprettDokumentRequest): Promise<ApiClientResult<Dokument>> {
if (arg.pdf === null) {
//vil sende fritekst
return apiClient({
url: `/saker/${arg.sakId}/fritekstDokument/lagreOgSend`,
method: 'POST',
body: {
tittel: arg.tittel,
fritekst: arg.fritekst,
adresse: arg.adresse,
distribusjonstype: arg.distribusjonstype,
},
});
} else {
//vil sende pdf
const formData = new FormData();
formData.append('tittel', arg.tittel);
formData.append('distribusjonstype', arg.distribusjonstype);
formData.append('pdf', arg.pdf!);
arg.adresse && formData.append('adresse', JSON.stringify(arg.adresse));

return apiClient({
url: `/saker/${arg.sakId}/fritekstDokument/lagreOgSend`,
method: 'POST',
body: formData,
});
}
}

export async function opprettFritekstDokument(arg: OpprettDokumentBody): Promise<ApiClientResult<Blob>> {
export async function opprettFritekstDokument(arg: OpprettDokumentRequest): Promise<ApiClientResult<Blob>> {
return apiClient({
url: `/saker/${arg.sakId}/fritekstDokument`,
method: 'POST',
Expand Down
1 change: 1 addition & 0 deletions src/pages/saksbehandling/brev/BrevPage.module.less
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
display: flex;
flex-direction: column;
gap: @spacing-s;
width: 35rem;

//tvinger frem hr til å vises i en flex-container
hr {
Expand Down
103 changes: 83 additions & 20 deletions src/pages/saksbehandling/brev/BrevPage.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
import * as RemoteData from '@devexperts/remote-data-ts';
import { yupResolver } from '@hookform/resolvers/yup';
import { Box, Button, Heading, Radio, RadioGroup, Select, TextField } from '@navikt/ds-react';
import {
Box,
Button,
Checkbox,
Heading,
Radio,
RadioGroup,
Select,
TextField,
UNSAFE_FileUpload,
VStack,
} from '@navikt/ds-react';
import { Controller, useForm } from 'react-hook-form';
import { useNavigate, useOutletContext } from 'react-router-dom';

Expand All @@ -27,6 +38,8 @@ const BrevPage = () => {
defaultValues: {
tittel: '',
fritekst: '',
vilHellerLasteOppPdf: false,
fileObject: null,
skalSendeTilAnnenAdresse: false,
adresse: {
adresser: [{ adresselinje: '' }],
Expand All @@ -46,7 +59,8 @@ const BrevPage = () => {
{
sakId: context.sak.id,
tittel: values.tittel!,
fritekst: values.fritekst!,
fritekst: values.vilHellerLasteOppPdf ? null : values.fritekst!,
pdf: values.vilHellerLasteOppPdf ? values.fileObject!.file : null,
adresse: values.skalSendeTilAnnenAdresse
? {
adresselinje1: values.adresse!.adresser[0]!.adresselinje,
Expand Down Expand Up @@ -114,28 +128,77 @@ const BrevPage = () => {
<TextField label={'Tittel'} onChange={field.onChange} error={fieldState.error?.message} />
)}
/>

<Controller
control={form.control}
name={'fritekst'}
render={({ field, fieldState }) => (
<BrevInput
tekst={field.value}
onVisBrevClick={() =>
SakApi.opprettFritekstDokument({
sakId: context.sak.id,
tittel: form.watch('tittel'),
fritekst: form.watch('fritekst'),
//adresse har ikke noe å si for visning av brevet
adresse: null,
//distibusjonstype har ikke noe å si for visning av brevet
distribusjonstype: Distribusjonstype.ANNET,
})
}
feil={fieldState.error}
onChange={field.onChange}
/>
name={'vilHellerLasteOppPdf'}
render={({ field }) => (
<Checkbox {...field} checked={field.value}>
Jeg vil heller laste opp en PDF-fil
</Checkbox>
)}
/>

{!form.watch('vilHellerLasteOppPdf') && (
<Controller
control={form.control}
name={'fritekst'}
render={({ field, fieldState }) => (
<BrevInput
tekst={field.value}
onVisBrevClick={() =>
SakApi.opprettFritekstDokument({
sakId: context.sak.id,
tittel: form.watch('tittel'),
fritekst: form.watch('fritekst'),
//her er det valgt at dem skal skrive fritekst - da vil vi gjøre genereringen
pdf: null,
//adresse har ikke noe å si for visning av brevet
adresse: null,
//distibusjonstype har ikke noe å si for visning av brevet
distribusjonstype: Distribusjonstype.ANNET,
})
}
feil={fieldState.error}
onChange={field.onChange}
/>
)}
/>
)}

{form.watch('vilHellerLasteOppPdf') && (
<VStack gap="5">
<Controller
control={form.control}
name={'fileObject'}
render={({ field, fieldState }) => (
<UNSAFE_FileUpload.Dropzone
label="Last opp brevet"
description={`Du kan laste opp PDF-filen. Maks 1 fil.`}
accept=".pdf"
fileLimit={{ max: 1, current: form.watch('fileObject') ? 1 : 0 }}
onSelect={(f) => field.onChange(f[0])}
error={fieldState.error?.message}
/>
)}
/>

{form.watch('fileObject') && (
<VStack gap="2">
<Heading level="3" size="xsmall">
Vedlegg (1)
</Heading>
<UNSAFE_FileUpload.Item
file={form.watch('fileObject')!.file}
button={{
action: 'delete',
onClick: () => form.setValue('fileObject', null),
}}
/>
</VStack>
)}
</VStack>
)}
</Box>

{RemoteData.isFailure(sendBrevStatus) && <ApiErrorAlert error={sendBrevStatus.error} />}
Expand Down
14 changes: 13 additions & 1 deletion src/pages/saksbehandling/brev/BrevPageUtils.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { FileObject } from '@navikt/ds-react';

import {
DokumentDistribusjonFormData,
dokumentDistribusjonFormSchema,
Expand All @@ -8,15 +10,25 @@ import { Distribusjonstype } from '~src/types/dokument/Dokument';

export interface DokumentFormData {
tittel: string;
vilHellerLasteOppPdf: boolean;
fritekst: string;
fileObject: Nullable<FileObject>;
skalSendeTilAnnenAdresse: boolean;
adresse: Nullable<DokumentDistribusjonFormData>;
distribusjonstype: Nullable<Distribusjonstype>;
}

export const dokumentSchema = yup.object<DokumentFormData>({
tittel: yup.string().required(),
fritekst: yup.string().required(),
vilHellerLasteOppPdf: yup.boolean().required(),
fritekst: yup.string().defined().when('vilHellerLasteOppPdf', {
is: false,
then: yup.string().required(),
}),
fileObject: yup.mixed<FileObject>().nullable().when('vilHellerLasteOppPdf', {
is: true,
then: yup.mixed<FileObject>().required(),
}),
skalSendeTilAnnenAdresse: yup.boolean().required(),
adresse: yup.object<DokumentDistribusjonFormData>().nullable().defined().when('skalSendeTilAnnenAdresse', {
is: true,
Expand Down
5 changes: 3 additions & 2 deletions src/types/dokument/Dokument.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@ export enum Distribusjonstype {
ANNET = 'ANNET',
}

export interface OpprettDokumentBody {
export interface OpprettDokumentRequest {
sakId: string;
tittel: string;
fritekst: string;
fritekst: Nullable<string>;
pdf: Nullable<File>;
adresse: Nullable<AdresseRequest>;
distribusjonstype: Distribusjonstype;
}
Expand Down

0 comments on commit 359fe14

Please sign in to comment.