@@ -2,45 +2,69 @@ import { Table } from "@navikt/ds-react";
2
2
import Menu from "../../components/Menu" ;
3
3
import Spacer from "../../components/Spacer" ;
4
4
import NavPanel from "../../components/NavPanel" ;
5
+ import CenteredLoader from "../../components/CenteredLoader" ;
5
6
import { format , getISOWeek , parseISO } from "date-fns" ;
6
7
import { useTranslation } from "react-i18next" ;
7
8
import { Meldeperiode } from "../../models/Meldeperiode" ;
9
+ import { useEffect , useState } from "react" ;
8
10
9
- type InitialState = {
10
- periods : Meldeperiode [ ] ;
11
- }
11
+ export default function Page ( ) {
12
12
13
- export async function getServerSideProps ( ) {
14
- let periods : Meldeperiode [ ] = [ ] ;
13
+ const { t } = useTranslation ( ) ;
15
14
16
- // Get saved values
17
- try {
18
- const response = await fetch ( process . env . DP_RAPP_API_URL + '/api/v1/meldeperiode/hente' ) ;
19
- if ( response . ok ) {
20
- periods = await response . json ( ) ;
21
- }
22
- } catch ( e ) {
23
- // Couldn't load period list
24
- }
15
+ const [ data , setData ] = useState < Meldeperiode [ ] | null > ( null ) ;
16
+ const [ isLoading , setLoading ] = useState ( false )
25
17
26
- // Data comes to page as props
27
- return {
28
- props : {
29
- periods
30
- } ,
31
- } ;
32
- }
18
+ useEffect ( ( ) => {
19
+ setLoading ( true )
20
+ fetch ( '/api/period/get' )
21
+ . then ( ( res ) => res . json ( ) )
22
+ . then ( ( data ) => {
23
+ const periods : Meldeperiode [ ] = data ;
24
+ setData ( periods . map ( period => ( {
25
+ meldeperiodeId : period . meldeperiodeId ,
26
+ fomDato : parseISO ( period . fomDato + "T12:00:00" ) ,
27
+ tomDato : parseISO ( period . tomDato + "T12:00:00" ) ,
28
+ frist : parseISO ( period . frist + "T12:00:00" )
29
+ } ) ) )
30
+ setLoading ( false )
31
+ } ) . catch ( ( error ) => {
32
+ console . log ( error )
33
+ } ) ;
34
+ } , [ ] )
33
35
34
- export default function Page ( props : InitialState ) {
36
+ const dataTable = data && < >
37
+ < Table zebraStripes >
38
+ < Table . Header >
39
+ < Table . Row >
40
+ < Table . HeaderCell scope = "col" > { t ( 'period' ) } </ Table . HeaderCell >
41
+ < Table . HeaderCell scope = "col" > { t ( 'date' ) } </ Table . HeaderCell >
42
+ < Table . HeaderCell scope = "col" > { t ( 'deadline' ) } </ Table . HeaderCell >
43
+ </ Table . Row >
44
+ </ Table . Header >
45
+ < Table . Body >
46
+ { data . map ( ( { fomDato, tomDato, frist } ) => {
47
+ return (
48
+ < Table . Row key = { fomDato . getTime ( ) } >
49
+ < Table . HeaderCell scope = "row" >
50
+ { t ( 'week' ) } { getISOWeek ( fomDato ) } - { getISOWeek ( tomDato ) }
51
+ </ Table . HeaderCell >
52
+ < Table . DataCell >
53
+ { format ( fomDato , "dd.MM.yyyy" ) } - { format ( tomDato , "dd.MM.yyyy" ) }
54
+ </ Table . DataCell >
55
+ < Table . DataCell >
56
+ { format ( frist , "dd.MM.yyyy" ) }
57
+ </ Table . DataCell >
58
+ </ Table . Row >
59
+ ) ;
60
+ } ) }
61
+ </ Table . Body >
62
+ </ Table >
35
63
36
- const { t } = useTranslation ( ) ;
64
+ < Spacer />
37
65
38
- const data = props . periods . map ( period => ( {
39
- meldeperiodeId : period . meldeperiodeId ,
40
- fomDato : parseISO ( period . fomDato + "T12:00:00" ) ,
41
- tomDato : parseISO ( period . tomDato + "T12:00:00" ) ,
42
- frist : parseISO ( period . frist + "T12:00:00" )
43
- } ) ) ;
66
+ < NavPanel nextHref = "/form" nextText = { t ( 'startFillingOut' ) } />
67
+ </ > ;
44
68
45
69
return (
46
70
< main >
@@ -49,36 +73,9 @@ export default function Page(props: InitialState) {
49
73
< h1 > { t ( 'indexTitle' ) } </ h1 >
50
74
< p > { t ( 'indexDescription' ) } </ p >
51
75
52
- < Table zebraStripes >
53
- < Table . Header >
54
- < Table . Row >
55
- < Table . HeaderCell scope = "col" > { t ( 'period' ) } </ Table . HeaderCell >
56
- < Table . HeaderCell scope = "col" > { t ( 'date' ) } </ Table . HeaderCell >
57
- < Table . HeaderCell scope = "col" > { t ( 'deadline' ) } </ Table . HeaderCell >
58
- </ Table . Row >
59
- </ Table . Header >
60
- < Table . Body >
61
- { data . map ( ( { fomDato, tomDato, frist } ) => {
62
- return (
63
- < Table . Row key = { fomDato . getTime ( ) } >
64
- < Table . HeaderCell scope = "row" >
65
- { t ( 'week' ) } { getISOWeek ( fomDato ) } - { getISOWeek ( tomDato ) }
66
- </ Table . HeaderCell >
67
- < Table . DataCell >
68
- { format ( fomDato , "dd.MM.yyyy" ) } - { format ( tomDato , "dd.MM.yyyy" ) }
69
- </ Table . DataCell >
70
- < Table . DataCell >
71
- { format ( frist , "dd.MM.yyyy" ) }
72
- </ Table . DataCell >
73
- </ Table . Row >
74
- ) ;
75
- } ) }
76
- </ Table . Body >
77
- </ Table >
76
+ { isLoading && < CenteredLoader /> }
77
+ { ! isLoading && dataTable }
78
78
79
- < Spacer />
80
-
81
- < NavPanel nextHref = "/form" nextText = { t ( 'startFillingOut' ) } />
82
79
</ main >
83
80
) ;
84
81
}
0 commit comments