1
1
import React , { useState } from 'react' ;
2
2
import { Button , HelpText , Label , Radio , RadioGroup , UNSAFE_Combobox } from '@navikt/ds-react' ;
3
- import { ChevronDownIcon } from '@navikt/aksel-icons' ;
3
+ import { ChevronDownIcon , XMarkIcon } from '@navikt/aksel-icons' ;
4
4
import { ContentSearchParams } from '../../../../../../common/contentSearch' ;
5
5
import { classNames } from '../../../../../utils/classNames' ;
6
6
import { useAppState } from '../../../../../state/useAppState' ;
7
7
import { CmsCategoryListItem } from '../../../../../../common/cms-documents/category' ;
8
+ import { persistSearchParams } from '../params-initial-state' ;
8
9
9
10
import style from './SearchSettings.module.css' ;
10
11
11
12
type Props = {
12
13
searchParams : ContentSearchParams ;
13
- setSearchParams : ( params : Partial < ContentSearchParams > ) => void ;
14
+ setSearchParams : ( params : ContentSearchParams ) => void ;
15
+ reset : ( ) => void ;
14
16
} ;
15
17
16
- export const SearchSettings = ( { searchParams, setSearchParams } : Props ) => {
18
+ export const SearchSettings = ( { searchParams, setSearchParams, reset } : Props ) => {
17
19
const [ isOpen , setIsOpen ] = useState ( false ) ;
18
20
19
21
const { appContext } = useAppState ( ) ;
22
+ const { rootCategories, basePath } = appContext ;
20
23
21
- const { sort, categoryKeys, type } = searchParams ;
24
+ const { sort, categoryKeys, type, isCustom } = searchParams ;
22
25
23
- const { titlesToKeys, keysToTitles } = createKeysTitlesMaps ( appContext . rootCategories ) ;
26
+ const { titlesToKeys, keysToTitles } = createKeysTitlesMaps ( rootCategories ) ;
24
27
const categoryKeysSelected = new Set < string > ( categoryKeys ) ;
25
28
const categoryTitlesSelected = [ ...categoryKeysSelected ] . map ( ( key ) => keysToTitles [ key ] ) ;
26
29
const categoryTitlesAll = Object . keys ( titlesToKeys ) ;
27
30
31
+ const updateSearchParams = ( params : Partial < ContentSearchParams > ) => {
32
+ const newParams : ContentSearchParams = { ...searchParams , ...params , isCustom : true } ;
33
+ persistSearchParams ( newParams , basePath ) ;
34
+ setSearchParams ( newParams ) ;
35
+ } ;
36
+
28
37
return (
29
38
< div className = { style . container } >
30
- < div className = { style . labels } >
39
+ < div className = { style . topRow } >
31
40
< Label size = { 'small' } > { 'Søk' } </ Label >
32
- < Button
33
- size = { 'xsmall' }
34
- variant = { 'tertiary' }
35
- className = { style . toggle }
36
- onClick = { ( ) => setIsOpen ( ! isOpen ) }
37
- >
38
- { 'Tilpass søket' }
39
- < ChevronDownIcon className = { classNames ( style . icon , isOpen && style . open ) } />
40
- </ Button >
41
+ < div >
42
+ { isCustom && (
43
+ < Button
44
+ size = { 'xsmall' }
45
+ variant = { 'tertiary' }
46
+ className = { style . toggle }
47
+ onClick = { reset }
48
+ >
49
+ { 'Nullstill' }
50
+ < XMarkIcon />
51
+ </ Button >
52
+ ) }
53
+ < Button
54
+ size = { 'xsmall' }
55
+ variant = { 'tertiary' }
56
+ className = { style . toggle }
57
+ onClick = { ( ) => setIsOpen ( ! isOpen ) }
58
+ >
59
+ { 'Tilpass søket' }
60
+ < ChevronDownIcon className = { classNames ( style . icon , isOpen && style . open ) } />
61
+ </ Button >
62
+ </ div >
41
63
</ div >
42
64
< div className = { classNames ( style . settings , isOpen && style . open ) } >
43
- < RadioGroup
44
- size = { 'small' }
45
- legend = { 'Søk etter...' }
46
- value = { type || 'titles' }
47
- onChange = { ( value ) => setSearchParams ( { type : value } ) }
48
- >
49
- < Radio value = { 'titles' } > { 'Tittel' } </ Radio >
50
- < span className = { style . withHelp } >
51
- < Radio value = { 'locations' } > { 'URL' } </ Radio >
52
- < HelpText wrapperClassName = { style . help } >
53
- { 'Prefix-søk på pathname. F.eks. vil ' }
54
- < code > { 'https://www.nav.no/no/person/arbeid' } </ code >
55
- { ' gi treff på alle sider med en path som starter med ' }
56
- < code > { '/no/person/arbeid' } </ code >
57
- </ HelpText >
58
- </ span >
59
- < Radio value = { 'all' } > { 'Alt innhold' } </ Radio >
60
- </ RadioGroup >
61
- < RadioGroup
62
- size = { 'small' }
63
- legend = { 'Sortering' }
64
- value = { sort || 'score' }
65
- onChange = { ( value ) => setSearchParams ( { sort : value } ) }
66
- >
67
- < Radio value = { 'score' } > { 'Beste treff' } </ Radio >
68
- < Radio value = { 'name' } > { 'Tittel' } </ Radio >
69
- < Radio value = { 'datetime' } > { 'Sist endret' } </ Radio >
70
- </ RadioGroup >
65
+ < div className = { style . radioGroups } >
66
+ < RadioGroup
67
+ size = { 'small' }
68
+ legend = { 'Søk etter...' }
69
+ value = { type || 'titles' }
70
+ onChange = { ( value ) => updateSearchParams ( { type : value } ) }
71
+ >
72
+ < Radio value = { 'titles' } > { 'Tittel' } </ Radio >
73
+ < span className = { style . withHelp } >
74
+ < Radio value = { 'locations' } > { 'URL' } </ Radio >
75
+ < HelpText wrapperClassName = { style . help } >
76
+ { 'Prefix-søk på pathname. F.eks. vil ' }
77
+ < code > { 'https://www.nav.no/no/person/arbeid' } </ code >
78
+ { ' gi treff på alle sider med en path som starter med ' }
79
+ < code > { '/no/person/arbeid' } </ code >
80
+ </ HelpText >
81
+ </ span >
82
+ < Radio value = { 'all' } > { 'Alt innhold' } </ Radio >
83
+ </ RadioGroup >
84
+ < RadioGroup
85
+ size = { 'small' }
86
+ legend = { 'Sortering' }
87
+ value = { sort || 'score' }
88
+ onChange = { ( value ) => updateSearchParams ( { sort : value } ) }
89
+ >
90
+ < Radio value = { 'score' } > { 'Beste treff' } </ Radio >
91
+ < Radio value = { 'name' } > { 'Tittel' } </ Radio >
92
+ < Radio value = { 'datetime' } > { 'Sist endret' } </ Radio >
93
+ </ RadioGroup >
94
+ </ div >
71
95
< UNSAFE_Combobox
72
96
label = { 'Avgrens til valgte kategorier' }
73
97
size = { 'small' }
@@ -85,7 +109,7 @@ export const SearchSettings = ({ searchParams, setSearchParams }: Props) => {
85
109
categoryKeysSelected . delete ( key ) ;
86
110
}
87
111
88
- setSearchParams ( { categoryKeys : [ ...categoryKeysSelected ] } ) ;
112
+ updateSearchParams ( { categoryKeys : [ ...categoryKeysSelected ] } ) ;
89
113
} }
90
114
/>
91
115
</ div >
0 commit comments