1
- import React , { useState } from 'react' ;
1
+ import React , { useMemo , useState } from 'react' ;
2
2
import VersjonModal from '@/komponenter/modal/VersjonModal' ;
3
3
import { innholdTypeTekst } from '@/messages' ;
4
4
import { AvtaleVersjon , TiltaksType } from '@/types/avtale' ;
@@ -9,57 +9,59 @@ import { formaterDato, NORSK_DATO_FORMAT } from '@/utils/datoUtils';
9
9
10
10
const cls = BEMHelper ( 'tidligereVersjoner' ) ;
11
11
12
- const TidligereVersjoner : React . FunctionComponent < { versjoner : AvtaleVersjon [ ] ; tiltakstype : TiltaksType } > = (
13
- props ,
14
- ) => {
12
+ interface Props {
13
+ versjoner : AvtaleVersjon [ ] ;
14
+ tiltakstype : TiltaksType ;
15
+ }
16
+
17
+ const TidligereVersjoner = ( props : Props ) => {
18
+ const { versjoner } = props ;
19
+
15
20
const [ isOpen , setOpen ] = useState < boolean > ( false ) ;
16
21
const [ currentVersjon , setCurrentVersjon ] = useState < number > ( 0 ) ;
17
22
18
- const sorterteVersjoner = Array . from ( props . versjoner ) ;
19
- sorterteVersjoner . sort ( ( a , b ) => a . versjon - b . versjon ) ;
20
- const versjonLenker = sorterteVersjoner . map ( ( avtaleVersjon : AvtaleVersjon , index : number ) => {
21
- return (
22
- < LinkPanel
23
- className = { cls . className }
24
- key = { index }
25
- href = { '#' }
26
- onClick = { ( ) => {
27
- setCurrentVersjon ( avtaleVersjon . versjon ) ;
28
- setOpen ( true ) ;
29
- } }
30
- border = { true }
31
- >
32
- < LinkPanel . Title className = { cls . element ( 'linke-container' ) } >
33
- < div className = { cls . element ( 'rad' ) } >
34
- < Label >
35
- Versjon { avtaleVersjon . versjon }
36
- { avtaleVersjon . innholdType && < > - { innholdTypeTekst ( avtaleVersjon ) } </ > }
37
- </ Label >
38
- < BodyShort size = "small" >
39
- { avtaleVersjon . ikrafttredelsestidspunkt &&
40
- formaterDato ( avtaleVersjon . ikrafttredelsestidspunkt , NORSK_DATO_FORMAT ) }
41
- </ BodyShort >
42
- </ div >
43
- </ LinkPanel . Title >
44
- </ LinkPanel >
45
- ) ;
46
- } ) ;
23
+ const sorterteVersjoner = useMemo ( ( ) => Array . from ( versjoner ) . sort ( ( a , b ) => a . versjon - b . versjon ) , [ versjoner ] ) ;
24
+
47
25
return (
48
26
< >
49
- { versjonLenker . length > 0 && (
50
- < >
51
- < Heading size = "small" className = { cls . element ( 'alle_versjoner_tittel' ) } >
52
- Alle versjoner av avtalen
53
- </ Heading >
54
- < div > { versjonLenker } </ div >
55
- < VersjonModal
56
- isOpen = { isOpen }
57
- lukkModal = { ( ) => setOpen ( false ) }
58
- avtaleInnhold = { sorterteVersjoner [ currentVersjon > 0 ? currentVersjon - 1 : 0 ] }
59
- tiltakstype = { props . tiltakstype }
60
- />
61
- </ >
62
- ) }
27
+ < Heading size = "small" className = { cls . element ( 'alle_versjoner_tittel' ) } >
28
+ Alle versjoner av avtalen
29
+ </ Heading >
30
+ < div >
31
+ { sorterteVersjoner . map ( ( avtaleVersjon : AvtaleVersjon , index : number ) => {
32
+ return (
33
+ < LinkPanel
34
+ className = { cls . className }
35
+ key = { index }
36
+ href = { '#' }
37
+ onClick = { ( ) => {
38
+ setCurrentVersjon ( avtaleVersjon . versjon ) ;
39
+ setOpen ( true ) ;
40
+ } }
41
+ border = { true }
42
+ >
43
+ < LinkPanel . Title className = { cls . element ( 'linke-container' ) } >
44
+ < div className = { cls . element ( 'rad' ) } >
45
+ < Label >
46
+ Versjon { avtaleVersjon . versjon }
47
+ { avtaleVersjon . innholdType && < > - { innholdTypeTekst ( avtaleVersjon ) } </ > }
48
+ </ Label >
49
+ < BodyShort size = "small" >
50
+ { avtaleVersjon . ikrafttredelsestidspunkt &&
51
+ formaterDato ( avtaleVersjon . ikrafttredelsestidspunkt , NORSK_DATO_FORMAT ) }
52
+ </ BodyShort >
53
+ </ div >
54
+ </ LinkPanel . Title >
55
+ </ LinkPanel >
56
+ ) ;
57
+ } ) }
58
+ </ div >
59
+ < VersjonModal
60
+ isOpen = { isOpen }
61
+ lukkModal = { ( ) => setOpen ( false ) }
62
+ avtaleInnhold = { sorterteVersjoner [ currentVersjon > 0 ? currentVersjon - 1 : 0 ] }
63
+ tiltakstype = { props . tiltakstype }
64
+ />
63
65
</ >
64
66
) ;
65
67
} ;
0 commit comments