@@ -2,6 +2,7 @@ import React, { useState } from 'react';
2
2
3
3
import {
4
4
Checkbox ,
5
+ FileAccepted ,
5
6
FileObject ,
6
7
FileRejected ,
7
8
FileRejectionReason ,
@@ -23,6 +24,14 @@ import { Dokumentasjonsbehov } from '../../../typer/kontrakt/dokumentasjon';
23
24
import { Typografi } from '../../../typer/sanity/sanity' ;
24
25
import { slåSammen } from '../../../utils/slåSammen' ;
25
26
import TekstBlock from '../../Felleskomponenter/Sanity/TekstBlock' ;
27
+ import { useLastRessurserContext } from '../../../context/LastRessurserContext' ;
28
+ import axios from 'axios' ;
29
+ import Miljø from '../../../../shared-utils/Miljø' ;
30
+
31
+ interface OpplastetVedlegg {
32
+ dokumentId : string ;
33
+ filnavn : string ;
34
+ }
26
35
27
36
interface Props {
28
37
dokumentasjon : IDokumentasjon ;
@@ -35,6 +44,7 @@ interface Props {
35
44
36
45
const LastOppVedlegg2 : React . FC < Props > = ( { dokumentasjon, oppdaterDokumentasjon } ) => {
37
46
const { søknad, tekster, plainTekst } = useApp ( ) ;
47
+ const { wrapMedSystemetLaster } = useLastRessurserContext ( ) ;
38
48
39
49
const dokumentasjonstekster = tekster ( ) . DOKUMENTASJON ;
40
50
const frittståendeOrdTekster = tekster ( ) . FELLES . frittståendeOrd ;
@@ -61,19 +71,20 @@ const LastOppVedlegg2: React.FC<Props> = ({ dokumentasjon, oppdaterDokumentasjon
61
71
62
72
const filePdf = new File ( [ 'abc' . repeat ( 100000 ) ] , 'document.pdf' ) ;
63
73
const fileJpg = new File ( [ 'abc' . repeat ( 500000 ) ] , 'picture.jpg' ) ;
64
- const exampleFiles : FileObject [ ] = [
74
+
75
+ const [ acceptedFiles , setAcceptedFiles ] = useState < FileAccepted [ ] > ( [
65
76
{ file : filePdf , error : false } ,
77
+ ] ) ;
78
+ const [ rejectedFiles , setRejectedFiles ] = useState < FileRejected [ ] > ( [
66
79
{ file : fileJpg , error : true , reasons : [ 'fileType' ] } ,
67
- ] ;
80
+ ] ) ;
68
81
69
- const [ files , setFiles ] = useState < FileObject [ ] > ( exampleFiles ) ;
70
-
71
- function removeFile ( fileToRemove : FileObject ) {
72
- setFiles ( files . filter ( file => file !== fileToRemove ) ) ;
82
+ function removeAcceptedFile ( fileToRemove : FileAccepted ) {
83
+ setAcceptedFiles ( acceptedFiles . filter ( file => file !== fileToRemove ) ) ;
84
+ }
85
+ function removeRejectedFile ( fileToRemove : FileRejected ) {
86
+ setRejectedFiles ( rejectedFiles . filter ( file => file !== fileToRemove ) ) ;
73
87
}
74
-
75
- const acceptedFiles = files . filter ( file => ! file . error ) ;
76
- const rejectedFiles = files . filter ( ( f ) : f is FileRejected => f . error ) ;
77
88
78
89
const MAKS_FILSTØRRELSE_MB = 10 ;
79
90
const MAKS_FILSTØRRELSE = MAKS_FILSTØRRELSE_MB * 1024 * 1024 ;
@@ -84,8 +95,44 @@ const LastOppVedlegg2: React.FC<Props> = ({ dokumentasjon, oppdaterDokumentasjon
84
95
fileSize : `Filen er større enn ${ MAKS_FILSTØRRELSE_MB } MB` ,
85
96
} ;
86
97
98
+ const datoTilStreng = ( date : Date ) : string => {
99
+ return date . toISOString ( ) ;
100
+ } ;
101
+ const dagensDatoStreng = datoTilStreng ( new Date ( ) ) ;
102
+
87
103
const addFile = async ( newFiles : FileObject [ ] ) => {
88
- setFiles ( [ ...files , ...newFiles ] ) ;
104
+ const nyeVedlegg : IVedlegg [ ] = [ ] ;
105
+
106
+ await Promise . all (
107
+ newFiles . map ( ( newFile : FileObject ) => {
108
+ wrapMedSystemetLaster ( async ( ) => {
109
+ const requestData = new FormData ( ) ;
110
+ requestData . append ( 'file' , newFile . file ) ;
111
+
112
+ await axios
113
+ . post < OpplastetVedlegg > (
114
+ `${ Miljø ( ) . dokumentProxyUrl } /mapper/familievedlegg` ,
115
+ requestData ,
116
+ {
117
+ withCredentials : true ,
118
+ headers : {
119
+ 'content-type' : 'multipart/form-data' ,
120
+ accept : 'application/json' ,
121
+ } ,
122
+ }
123
+ )
124
+ . then ( ( response : { data : OpplastetVedlegg } ) => {
125
+ const { data } = response ;
126
+ nyeVedlegg . push ( {
127
+ dokumentId : data . dokumentId ,
128
+ navn : newFile . file . name ,
129
+ størrelse : newFile . file . size ,
130
+ tidspunkt : dagensDatoStreng ,
131
+ } ) ;
132
+ } ) ;
133
+ } ) ;
134
+ } )
135
+ ) ;
89
136
} ;
90
137
91
138
return (
@@ -151,7 +198,7 @@ const LastOppVedlegg2: React.FC<Props> = ({ dokumentasjon, oppdaterDokumentasjon
151
198
file = { file . file }
152
199
button = { {
153
200
action : 'delete' ,
154
- onClick : ( ) => removeFile ( file ) ,
201
+ onClick : ( ) => removeAcceptedFile ( file ) ,
155
202
} }
156
203
/>
157
204
) ) }
@@ -173,7 +220,7 @@ const LastOppVedlegg2: React.FC<Props> = ({ dokumentasjon, oppdaterDokumentasjon
173
220
error = { errors [ rejected . reasons [ 0 ] ] }
174
221
button = { {
175
222
action : 'delete' ,
176
- onClick : ( ) => removeFile ( rejected ) ,
223
+ onClick : ( ) => removeRejectedFile ( rejected ) ,
177
224
} }
178
225
/>
179
226
) ) }
@@ -182,46 +229,6 @@ const LastOppVedlegg2: React.FC<Props> = ({ dokumentasjon, oppdaterDokumentasjon
182
229
) }
183
230
</ >
184
231
) }
185
-
186
- { /* {!dokumentasjon.harSendtInn && (
187
- <FileUpload.Dropzone
188
- label={'Last opp filer'}
189
- accept={[EFiltyper.PNG, EFiltyper.JPG, EFiltyper.JPEG, EFiltyper.PDF].join(
190
- ','
191
- )}
192
- maxSizeInBytes={MAKS_FILSTØRRELSE}
193
- fileLimit={{
194
- max: MAKS_ANTALL_FILER,
195
- current: dokumentasjon.opplastedeVedlegg.length,
196
- }}
197
- onSelect={nyeFiler => console.log(nyeFiler)}
198
- />
199
- )}
200
-
201
- {dokumentasjon.opplastedeVedlegg.length > 0 && (
202
- <VStack gap="2" marginBlock={'8 0'}>
203
- <Heading level="3" size="xsmall">
204
- {`${plainTekst(frittståendeOrdTekster.vedlegg)} (${dokumentasjon.opplastedeVedlegg.length})` }
205
- </Heading>
206
- <VStack as="ul" gap="3">
207
- {dokumentasjon.opplastedeVedlegg.map(vedlegg => (
208
- <FileUpload.Item
209
- as="li"
210
- key={vedlegg.dokumentId}
211
- file={{
212
- name: vedlegg.navn,
213
- size: vedlegg.størrelse,
214
- lastModified: new Date(vedlegg.tidspunkt).getTime(),
215
- }}
216
- button={{
217
- action: 'delete',
218
- onClick: () => console.log(vedlegg),
219
- }}
220
- />
221
- ))}
222
- </VStack>
223
- </VStack>
224
- )} */ }
225
232
</ VStack >
226
233
</ FormSummary >
227
234
) ;
0 commit comments