1
1
import styles from './Dokumentoversikt.module.css' ;
2
2
import { BodyShort , Checkbox , Detail , Link , Pagination , ReadMore , Select } from '@navikt/ds-react' ;
3
- import { format } from 'date-fns' ;
4
- import { nb } from 'date-fns/locale' ;
5
- import { useFeatureToggleIntl } from 'lib/hooks/useFeatureToggleIntl' ;
6
3
import { Dokument } from 'lib/types/types' ;
7
4
import { logDokumentoversiktEvent } from 'lib/utils/amplitude' ;
8
5
import { formatDate } from 'lib/utils/date' ;
9
6
import { useEffect , useMemo , useState } from 'react' ;
7
+ import { FormattedMessage , useIntl } from 'react-intl' ;
8
+
9
+ const MELDEKORT_TITTEL = 'Meldekort for uke' ;
10
+
11
+ type SortType = 'datoAsc' | 'datoDesc' ;
10
12
11
13
const getAvsender = ( type : string ) => {
12
14
switch ( type ) {
@@ -27,24 +29,20 @@ const getNumberOfPages = (dokumenter: Dokument[], pageSize: number) => {
27
29
28
30
export const Dokumentoversikt = ( { dokumenter } : { dokumenter : Dokument [ ] } ) => {
29
31
const [ sorterteDokumenter , setSorterteDokumenter ] = useState ( dokumenter ) ;
30
- const [ sortType , setSortType ] = useState ( 'datoAsc' ) ;
32
+ const [ sortType , setSortType ] = useState < SortType > ( 'datoAsc' ) ;
31
33
const [ pageNumber , setPageNumber ] = useState ( 1 ) ;
32
- const [ searchFilter , setSearchFilter ] = useState ( '' ) ;
33
- const [ visMeldekort , setVisMeldekort ] = useState ( true ) ;
34
+ const [ visMeldekort , setVisMeldekort ] = useState ( false ) ;
34
35
35
- const { formatMessage } = useFeatureToggleIntl ( ) ;
36
+ const intl = useIntl ( ) ;
36
37
37
38
const filtrerteDokumenter = useMemo ( ( ) => {
38
39
return sorterteDokumenter . filter ( ( dokument ) => {
39
- if ( searchFilter ) {
40
- return (
41
- ! dokument . tittel . toLowerCase ( ) . includes ( searchFilter . toLowerCase ( ) ) ||
42
- getAvsender ( dokument . type ) . toLowerCase ( ) . includes ( searchFilter . toLowerCase ( ) )
43
- ) ;
40
+ if ( dokument . tittel . includes ( MELDEKORT_TITTEL ) ) {
41
+ return visMeldekort ;
44
42
}
45
43
return true ;
46
44
} ) ;
47
- } , [ sorterteDokumenter , searchFilter ] ) ;
45
+ } , [ sorterteDokumenter , visMeldekort ] ) ;
48
46
49
47
const sortedPaginatedDocuments = useMemo ( ( ) => {
50
48
const startIndex = ( pageNumber - 1 ) * PAGE_SIZE ;
@@ -57,25 +55,21 @@ export const Dokumentoversikt = ({ dokumenter }: { dokumenter: Dokument[] }) =>
57
55
return getNumberOfPages ( filtrerteDokumenter , PAGE_SIZE ) ;
58
56
} , [ filtrerteDokumenter ] ) ;
59
57
58
+ const inneholderMeldekort = useMemo ( ( ) => {
59
+ return sorterteDokumenter . some ( ( dokument ) => dokument . tittel . includes ( MELDEKORT_TITTEL ) ) ;
60
+ } , [ sorterteDokumenter ] ) ;
61
+
60
62
useEffect ( ( ) => {
61
63
const numberOfPages = getNumberOfPages ( filtrerteDokumenter , PAGE_SIZE ) ;
62
64
if ( pageNumber > numberOfPages ) {
63
65
setPageNumber ( numberOfPages ) ;
64
66
}
65
67
} , [ filtrerteDokumenter , pageNumber ] ) ;
66
68
67
- useEffect ( ( ) => {
68
- if ( visMeldekort ) {
69
- setSearchFilter ( 'Meldekort for uke' ) ;
70
- } else {
71
- setSearchFilter ( '' ) ;
72
- }
73
- } , [ visMeldekort ] ) ;
74
-
75
69
const onSortChange = ( e : React . ChangeEvent < HTMLSelectElement > ) => {
76
70
const value = e . target . value ;
77
71
logDokumentoversiktEvent ( antallSider , `sorter etter ${ value } ` ) ;
78
- setSortType ( value ) ;
72
+ setSortType ( value as SortType ) ;
79
73
} ;
80
74
81
75
useEffect ( ( ) => {
@@ -93,26 +87,26 @@ export const Dokumentoversikt = ({ dokumenter }: { dokumenter: Dokument[] }) =>
93
87
94
88
return (
95
89
< div className = { styles . container } >
96
- < div style = { { display : 'flex' , flexDirection : 'column' , gap : '0.75rem' } } >
97
- < Select label = "Sorter etter" onChange = { onSortChange } >
98
- < option value = "datoAsc" > Nyeste først</ option >
99
- < option value = "datoDesc" > Eldste først</ option >
100
- </ Select >
101
- { /*<Search
102
- label="Søk i dokumentoversikten"
103
- onChange={(value) => setSearchFilter(value)}
104
- onClear={() => setSearchFilter('')}
105
- hideLabel={false}
106
- />*/ }
107
- < Checkbox
108
- value = { visMeldekort }
109
- checked = { ! visMeldekort }
110
- onChange = { ( ) => setVisMeldekort ( ! visMeldekort ) }
90
+ < div className = { styles . inputWrapper } >
91
+ < Select
92
+ label = { intl . formatMessage ( { id : 'dokumentOversikt.sorter.label' } ) }
93
+ onChange = { onSortChange }
94
+ className = { `${ styles . select } ${ ! inneholderMeldekort && styles . noCheckbox } ` }
111
95
>
112
- Vis meldekort
113
- </ Checkbox >
96
+ < option value = "datoAsc" >
97
+ < FormattedMessage id = "dokumentOversikt.sorter.datoAsc" />
98
+ </ option >
99
+ < option value = "datoDesc" >
100
+ < FormattedMessage id = "dokumentOversikt.sorter.datoDesc" />
101
+ </ option >
102
+ </ Select >
103
+ { inneholderMeldekort && (
104
+ < Checkbox value = { visMeldekort } onChange = { ( ) => setVisMeldekort ( ! visMeldekort ) } >
105
+ < FormattedMessage id = "dokumentOversikt.visMeldekort" />
106
+ </ Checkbox >
107
+ ) }
114
108
</ div >
115
- < ul style = { { listStyle : 'none' , margin : '0' , padding : '0' } } >
109
+ < ul className = { styles . documentList } >
116
110
{ sortedPaginatedDocuments . map ( ( document ) => {
117
111
return (
118
112
< li
@@ -125,12 +119,16 @@ export const Dokumentoversikt = ({ dokumenter }: { dokumenter: Dokument[] }) =>
125
119
href = { `/aap/mine-aap/api/dokument/?journalpostId=${ document . journalpostId } &dokumentId=${ document . dokumentId } ` }
126
120
target = "_blank"
127
121
onClick = { ( ) => logDokumentoversiktEvent ( antallSider , 'klikk lenke' ) }
122
+ lang = "no"
128
123
>
129
124
{ document . tittel }
130
125
</ Link >
131
126
</ span >
132
127
< Detail style = { { color : 'var(--a-text-default' } } >
133
- Sendt av { getAvsender ( document . type ) } den { formatDate ( document . dato ) }
128
+ < FormattedMessage
129
+ id = "dokumentOversikt.avsender"
130
+ values = { { name : getAvsender ( document . type ) , date : formatDate ( document . dato ) } }
131
+ />
134
132
</ Detail >
135
133
</ div >
136
134
</ li >
0 commit comments