@@ -10,7 +10,6 @@ import NavFrontendSpinner from 'nav-frontend-spinner';
10
10
import {
11
11
CenteredContainer ,
12
12
FlexCenteredContainer ,
13
- InlineMargin48Container ,
14
13
Margin40Container ,
15
14
Margin48TopContainer ,
16
15
MarginContainer ,
@@ -29,6 +28,7 @@ import { ApiError, NotLoggedInError } from '../../../api/errors';
29
28
import klageStore from '../../../klage/klage-store' ;
30
29
import { login } from '../../../auth/login' ;
31
30
import { LoginButton } from '../../../styled-components/login-button' ;
31
+ import AutosaveProgressIndicator , { AutosaveStatus } from './autosave-progress' ;
32
32
33
33
interface UploadError {
34
34
timestamp : ISODateTime ;
@@ -55,6 +55,7 @@ const Begrunnelse = ({ klage }: Props) => {
55
55
const [ attachmentsLoading , setAttachmentsLoading ] = useState < boolean > ( false ) ;
56
56
const [ attachmentError , setAttachmentError ] = useState < string | null > ( null ) ;
57
57
const [ submitted , setSubmitted ] = useState < boolean > ( false ) ;
58
+ const [ autosaveStatus , setAutosaveStatus ] = useState < AutosaveStatus > ( AutosaveStatus . NONE ) ;
58
59
59
60
useEffect ( ( ) => {
60
61
if ( klage . status !== KlageStatus . DRAFT ) {
@@ -64,31 +65,34 @@ const Begrunnelse = ({ klage }: Props) => {
64
65
65
66
useEffect ( ( ) => window . scrollTo ( 0 , 0 ) , [ ] ) ;
66
67
67
- const performKlageUpdate = useCallback ( ( ) => {
68
+ const performKlageUpdate = useCallback ( async ( ) => {
68
69
const klageUpdate = createKlageUpdate ( klage , fritekst , vedtakType , vedtakDate ) ;
69
- return updateKlage ( klageUpdate )
70
- . then ( ( ) => {
71
- setKlage ( {
72
- ...klage ,
73
- ...klageUpdate ,
74
- vedlegg : attachments
75
- } ) ;
76
- klageStore . clear ( ) ;
77
- return true ;
78
- } )
79
- . catch ( ( error : Error ) => {
80
- klageStore . store ( fritekst , vedtakType , vedtakDate ) ;
81
- setError ( error ) ;
82
- return false ;
70
+ try {
71
+ await updateKlage ( klageUpdate ) ;
72
+ setKlage ( {
73
+ ...klage ,
74
+ ...klageUpdate ,
75
+ vedlegg : attachments
83
76
} ) ;
77
+ klageStore . clear ( ) ;
78
+ setAutosaveStatus ( AutosaveStatus . SAVED ) ;
79
+ return true ;
80
+ } catch ( error ) {
81
+ setAutosaveStatus ( AutosaveStatus . FAILED ) ;
82
+ klageStore . store ( fritekst , vedtakType , vedtakDate ) ;
83
+ setError ( error ) ;
84
+ return false ;
85
+ }
84
86
} , [ fritekst , vedtakDate , vedtakType , attachments , klage , setKlage ] ) ;
85
87
86
88
useEffect ( ( ) => {
87
89
if ( klage . vedtakType === vedtakType && klage . vedtakDate === vedtakDate && klage . fritekst === fritekst ) {
90
+ setAutosaveStatus ( AutosaveStatus . SAVED ) ;
88
91
return ;
89
92
}
90
- const timeout = setTimeout ( performKlageUpdate , 1000 ) ; // 1s - timeout til å kjøre funksjon om timeouten ikke blir nullstillt
91
- return ( ) => clearTimeout ( timeout ) ; // Nullstill og ikke kjør funksjon
93
+ setAutosaveStatus ( AutosaveStatus . SAVING ) ;
94
+ const timeout = setTimeout ( performKlageUpdate , 1000 ) ;
95
+ return ( ) => clearTimeout ( timeout ) ; // Clear existing timer every time it runs.
92
96
} , [ fritekst , vedtakDate , vedtakType , klage , performKlageUpdate ] ) ;
93
97
94
98
const fileInput = useRef < HTMLInputElement > ( null ) ;
@@ -223,7 +227,7 @@ const Begrunnelse = ({ klage }: Props) => {
223
227
/>
224
228
</ MarginContainer >
225
229
) }
226
- < InlineMargin48Container >
230
+ < InlineMargin48TopContainer >
227
231
< Undertittel > Begrunn klagen din</ Undertittel >
228
232
< Textarea
229
233
name = "begrunnelse"
@@ -237,7 +241,9 @@ const Begrunnelse = ({ klage }: Props) => {
237
241
} }
238
242
feil = { submitted && ! validBegrunnelse ( ) && 'Du må skrive en begrunnelse før du går videre.' }
239
243
/>
240
- </ InlineMargin48Container >
244
+ </ InlineMargin48TopContainer >
245
+
246
+ < AutosaveProgressIndicator autosaveStatus = { autosaveStatus } />
241
247
242
248
< MarginContainer >
243
249
< Undertittel > Vedlegg ({ attachments . length } )</ Undertittel >
0 commit comments