1
- import React , { useEffect , useState } from 'react'
1
+ import React , { useCallback , useEffect , useMemo , useState } from 'react'
2
2
import useBoolean from '@/utils/hooks/useBoolean'
3
3
import NavButton from '@/components/ui/button/NavButton/NavButton'
4
4
import Icon from '@/components/ui/icon/Icon'
5
5
import Liste from './Liste'
6
6
import { useCurrentBruker } from '@/utils/hooks/useBruker'
7
7
import { useGrupper } from '@/utils/hooks/useGruppe'
8
- import { useDispatch } from 'react-redux'
8
+ import { useDispatch , useSelector } from 'react-redux'
9
9
import { setSidetall , setVisning } from '@/ducks/finnPerson'
10
10
import { Hjelpetekst } from '@/components/hjelpetekst/Hjelpetekst'
11
11
import { bottom } from '@popperjs/core'
@@ -15,15 +15,15 @@ import { TestComponentSelectors } from '#/mocks/Selectors'
15
15
import FinnPersonBestilling from '@/pages/gruppeOversikt/FinnPersonBestilling'
16
16
import { RedigerGruppe } from '@/components/redigerGruppe/RedigerGruppe'
17
17
18
- type GruppeOversiktProps = {
19
- importerteZIdenter : any
20
- sidetall : number
21
- sideStoerrelse : number
22
- gruppeInfo : any
23
- searchActive : boolean
18
+ type RootState = {
19
+ search : any
20
+ finnPerson : {
21
+ sidetall : number
22
+ sideStoerrelse : number
23
+ }
24
24
}
25
25
26
- export enum VisningType {
26
+ export const enum VisningType {
27
27
MINE = 'mine' ,
28
28
ALLE = 'alle' ,
29
29
FAVORITTER = 'favoritter' ,
@@ -47,29 +47,57 @@ const StyledDiv = styled.div`
47
47
}
48
48
`
49
49
50
- const GruppeOversikt = ( { searchActive, sideStoerrelse, sidetall } : GruppeOversiktProps ) => {
51
- const {
52
- currentBruker : { brukerId, brukertype } ,
53
- } = useCurrentBruker ( )
54
- const [ visningType , setVisningType ] = useState ( VisningType . MINE )
50
+ const GruppeOversikt : React . FC = ( ) => {
51
+ const searchActive = useSelector ( ( state : RootState ) => Boolean ( state . search ) )
52
+ const sidetall = useSelector ( ( state : RootState ) => state . finnPerson . sidetall )
53
+ const sideStoerrelse = useSelector ( ( state : RootState ) => state . finnPerson . sideStoerrelse )
54
+
55
+ const dispatch = useDispatch ( )
56
+ const { currentBruker } = useCurrentBruker ( )
57
+ const { brukerId, brukertype } = currentBruker
58
+
59
+ const [ visningType , setVisningType ] = useState < VisningType > ( VisningType . MINE )
55
60
const [ visNyGruppeState , visNyGruppe , skjulNyGruppe ] = useBoolean ( false )
61
+
56
62
const { grupper, loading } = useGrupper (
57
63
sidetall ,
58
64
sideStoerrelse ,
59
65
visningType === VisningType . ALLE ? null : brukerId ,
60
66
)
61
- const dispatch = useDispatch ( )
62
67
63
68
useEffect ( ( ) => {
64
69
dispatch ( setVisning ( 'personer' ) )
65
- } , [ ] )
70
+ } , [ dispatch ] )
66
71
67
- const byttVisning = ( value : VisningType ) => {
68
- setVisningType ( value )
69
- dispatch ( setSidetall ( 0 ) )
70
- }
72
+ const isBankIdBruker = useMemo ( ( ) => brukertype === 'BANKID' , [ brukertype ] )
71
73
72
- const bankIdBruker = brukertype === 'BANKID'
74
+ const gruppeDetaljer = useMemo (
75
+ ( ) => ( {
76
+ pageSize : sideStoerrelse ,
77
+ antallPages :
78
+ visningType === VisningType . FAVORITTER
79
+ ? Math . ceil ( ( grupper ?. favoritter ?. length || 0 ) / sideStoerrelse )
80
+ : grupper ?. antallPages ,
81
+ antallElementer :
82
+ visningType === VisningType . FAVORITTER
83
+ ? grupper ?. favoritter ?. length
84
+ : grupper ?. antallElementer ,
85
+ } ) ,
86
+ [ grupper , sideStoerrelse , visningType ] ,
87
+ )
88
+
89
+ const items = useMemo (
90
+ ( ) => ( visningType === VisningType . FAVORITTER ? grupper ?. favoritter : grupper ?. contents ) ,
91
+ [ grupper , visningType ] ,
92
+ )
93
+
94
+ const handleVisningChange = useCallback (
95
+ ( value : VisningType ) => {
96
+ setVisningType ( value )
97
+ dispatch ( setSidetall ( 0 ) )
98
+ } ,
99
+ [ dispatch ] ,
100
+ )
73
101
74
102
return (
75
103
< div className = "oversikt-container" >
@@ -79,11 +107,10 @@ const GruppeOversikt = ({ searchActive, sideStoerrelse, sidetall }: GruppeOversi
79
107
className = "page-header flexbox--align-center--justify-start"
80
108
>
81
109
< h1 > Grupper</ h1 >
82
- < Hjelpetekst placement = { bottom } >
83
- Gruppene inneholder alle personene dine (FNR/DNR/NPID).
84
- </ Hjelpetekst >
110
+ < Hjelpetekst placement = { bottom } > temp</ Hjelpetekst >
85
111
</ div >
86
112
</ div >
113
+
87
114
< div className = "toolbar gruppe--full" >
88
115
< StyledNavButton
89
116
data-testid = { TestComponentSelectors . BUTTON_NY_GRUPPE }
@@ -92,55 +119,45 @@ const GruppeOversikt = ({ searchActive, sideStoerrelse, sidetall }: GruppeOversi
92
119
>
93
120
Ny gruppe
94
121
</ StyledNavButton >
95
- { ! bankIdBruker && < FinnPersonBestilling /> }
122
+ { ! isBankIdBruker && < FinnPersonBestilling /> }
96
123
</ div >
97
124
98
125
{ visNyGruppeState && < RedigerGruppe onCancel = { skjulNyGruppe } /> }
99
126
100
127
< StyledDiv className = "gruppe--flex-column-center" >
101
128
< ToggleGroup
102
129
value = { visningType }
103
- onChange = { byttVisning }
104
- size = { ' small' }
130
+ onChange = { handleVisningChange }
131
+ size = " small"
105
132
style = { { backgroundColor : '#ffffff' } }
106
133
>
107
134
< StyledToggleItem
108
135
data-testid = { TestComponentSelectors . TOGGLE_MINE }
109
136
value = { VisningType . MINE }
110
137
>
111
- < Icon kind = { ' man-silhouette' } />
138
+ < Icon kind = " man-silhouette" />
112
139
Mine
113
140
</ StyledToggleItem >
114
141
< StyledToggleItem
115
142
data-testid = { TestComponentSelectors . TOGGLE_FAVORITTER }
116
143
value = { VisningType . FAVORITTER }
117
144
>
118
- < Icon kind = { ' star-light' } />
145
+ < Icon kind = " star-light" />
119
146
Favoritter
120
147
</ StyledToggleItem >
121
148
< StyledToggleItem
122
149
data-testid = { TestComponentSelectors . TOGGLE_ALLE }
123
150
value = { VisningType . ALLE }
124
151
>
125
- < Icon kind = { ' group-light' } />
152
+ < Icon kind = " group-light" />
126
153
Alle
127
154
</ StyledToggleItem >
128
155
</ ToggleGroup >
129
156
</ StyledDiv >
130
157
131
158
< Liste
132
- gruppeDetaljer = { {
133
- pageSize : sideStoerrelse ,
134
- antallPages :
135
- visningType === VisningType . FAVORITTER
136
- ? grupper ?. favoritter ?. length / sideStoerrelse
137
- : grupper ?. antallPages ,
138
- antallElementer :
139
- visningType === VisningType . FAVORITTER
140
- ? grupper ?. favoritter ?. length
141
- : grupper ?. antallElementer ,
142
- } }
143
- items = { visningType === VisningType . FAVORITTER ? grupper ?. favoritter : grupper ?. contents }
159
+ gruppeDetaljer = { gruppeDetaljer }
160
+ items = { items }
144
161
isFetching = { loading }
145
162
searchActive = { searchActive }
146
163
visSide = { sidetall }
@@ -149,4 +166,5 @@ const GruppeOversikt = ({ searchActive, sideStoerrelse, sidetall }: GruppeOversi
149
166
</ div >
150
167
)
151
168
}
169
+
152
170
export default GruppeOversikt
0 commit comments