Skip to content

Commit 11f2791

Browse files
committed
Persisterer søke-parametre med cookies
1 parent 69aa1c0 commit 11f2791

File tree

8 files changed

+75
-19
lines changed

8 files changed

+75
-19
lines changed

package-lock.json

+16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,17 @@
2424
"@navikt/ds-css": "5.17.4",
2525
"@navikt/ds-react": "5.17.4",
2626
"csp-header": "5.2.1",
27+
"js-cookie": "3.0.5",
2728
"lodash.debounce": "4.0.8",
2829
"react": "18.2.0",
2930
"react-dom": "18.2.0",
3031
"react-xml-viewer": "2.0.1",
3132
"swr": "2.2.4"
3233
},
3334
"devDependencies": {
34-
"@types/node": "20.11.9",
35+
"@types/js-cookie": "3.0.6",
3536
"@types/lodash": "4.14.202",
37+
"@types/node": "20.11.9",
3638
"@types/react": "18.2.48",
3739
"@types/react-dom": "18.2.18",
3840
"@typescript-eslint/eslint-plugin": "6.19.1",

src/components/left-section/AppLeftSection.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { CategoriesMenu } from './categories/CategoriesMenu';
33
import { ContentMenu } from './contents/ContentMenu';
44
import { useAppState } from '../../state/useAppState';
55
import { classNames } from '../../utils/classNames';
6-
import { SearchInput } from './search/SearchInput';
6+
import { SearchInput } from './search/search-input/SearchInput';
77
import { SearchResult } from './search/search-result/SearchResult';
88
import { ContentSearchResult } from '../../../common/contentSearch';
99
import { Alert, BodyLong, Heading } from '@navikt/ds-react';

src/components/left-section/search/SearchInput.tsx src/components/left-section/search/search-input/SearchInput.tsx

+14-11
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import React, { useRef, useState } from 'react';
22
import { Search } from '@navikt/ds-react';
3-
import { ContentSearchParams, ContentSearchResult } from '../../../../common/contentSearch';
4-
import { useApiFetch } from '../../../fetch/useApiFetch';
5-
import { classNames } from '../../../utils/classNames';
3+
import { ContentSearchParams, ContentSearchResult } from '../../../../../common/contentSearch';
4+
import { useApiFetch } from '../../../../fetch/useApiFetch';
5+
import { classNames } from '../../../../utils/classNames';
66
import { SearchSettings } from './search-settings/SearchSettings';
7+
import { getInitialSearchParams, persistSearchParams } from './params-initial-state';
8+
import { useAppState } from '../../../../state/useAppState';
79

810
import style from './SearchInput.module.css';
911

@@ -13,17 +15,18 @@ type Props = {
1315
};
1416

1517
export const SearchInput = ({ setSearchResult, className }: Props) => {
18+
const { appContext } = useAppState();
19+
const { basePath } = appContext;
20+
1621
const inputRef = useRef<HTMLInputElement>(null);
17-
const [searchParams, setSearchParams] = useState<ContentSearchParams>({
18-
from: 0,
19-
size: 50,
20-
sort: 'score',
21-
type: 'titles',
22-
withChildCategories: true,
23-
});
22+
const [searchParams, setSearchParams] = useState<ContentSearchParams>(
23+
getInitialSearchParams(basePath)
24+
);
2425

2526
const setSearchParamsPartial = (params: Partial<ContentSearchParams>) => {
26-
setSearchParams({ ...searchParams, ...params });
27+
const newParams = { ...searchParams, ...params };
28+
persistSearchParams(newParams, basePath);
29+
setSearchParams(newParams);
2730
};
2831

2932
const { fetchSearch } = useApiFetch();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { ContentSearchParams } from '../../../../../common/contentSearch';
2+
import Cookies from 'js-cookie';
3+
4+
const getCookieKey = (basePath: string) => `cms-archive-search-settings${basePath}`;
5+
6+
const initialParamsRequired: ContentSearchParams = {
7+
from: 0,
8+
size: 50,
9+
withChildCategories: true,
10+
} as const;
11+
12+
export const getInitialSearchParams = (basePath: string): ContentSearchParams => {
13+
const cookieValue = Cookies.get(getCookieKey(basePath));
14+
15+
if (cookieValue) {
16+
try {
17+
const parsed = JSON.parse(cookieValue);
18+
19+
return {
20+
...parsed,
21+
...initialParamsRequired,
22+
};
23+
} catch (e) {
24+
console.error(`Failed to parse search params from cookie - ${e}`);
25+
}
26+
}
27+
28+
return initialParamsRequired;
29+
};
30+
31+
export const persistSearchParams = (params: ContentSearchParams, basePath: string) => {
32+
Cookies.set(getCookieKey(basePath), JSON.stringify(params), {
33+
expires: 365,
34+
});
35+
};

src/components/left-section/search/search-settings/SearchSettings.tsx src/components/left-section/search/search-input/search-settings/SearchSettings.tsx

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import React, { useState } from 'react';
22
import { Button, HelpText, Label, Radio, RadioGroup, UNSAFE_Combobox } from '@navikt/ds-react';
33
import { ChevronDownIcon } from '@navikt/aksel-icons';
4-
import { ContentSearchParams } from '../../../../../common/contentSearch';
5-
import { classNames } from '../../../../utils/classNames';
6-
import { useAppState } from '../../../../state/useAppState';
7-
import { CmsCategoryListItem } from '../../../../../common/cms-documents/category';
4+
import { ContentSearchParams } from '../../../../../../common/contentSearch';
5+
import { classNames } from '../../../../../utils/classNames';
6+
import { useAppState } from '../../../../../state/useAppState';
7+
import { CmsCategoryListItem } from '../../../../../../common/cms-documents/category';
88

99
import style from './SearchSettings.module.css';
1010

@@ -43,7 +43,7 @@ export const SearchSettings = ({ searchParams, setSearchParams }: Props) => {
4343
<RadioGroup
4444
size={'small'}
4545
legend={'Søk etter...'}
46-
value={type}
46+
value={type || 'titles'}
4747
onChange={(value) => setSearchParams({ type: value })}
4848
>
4949
<Radio value={'titles'}>{'Tittel'}</Radio>
@@ -61,7 +61,7 @@ export const SearchSettings = ({ searchParams, setSearchParams }: Props) => {
6161
<RadioGroup
6262
size={'small'}
6363
legend={'Sortering'}
64-
value={sort}
64+
value={sort || 'score'}
6565
onChange={(value) => setSearchParams({ sort: value })}
6666
>
6767
<Radio value={'score'}>{'Beste treff'}</Radio>

0 commit comments

Comments
 (0)