Skip to content
This repository was archived by the owner on Sep 18, 2024. It is now read-only.

Commit 922dad2

Browse files
authored
Merge pull request #1529 from navikt/fix-kb-nav
Fikser piltastnavigering for søk, og logger bruk av piltastnavigering til amplitude
2 parents c1ad74a + ec5fefd commit 922dad2

File tree

3 files changed

+38
-24
lines changed

3 files changed

+38
-24
lines changed

Diff for: src/komponenter/header/header-regular/common/sok/Sok.tsx

+14-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import cls from 'classnames';
88
import { Locale } from 'store/reducers/language-duck';
99
import { SokInput } from './sok-innhold/SokInput';
1010
import Spinner from '../spinner/Spinner';
11-
import { Sokeresultat } from './utils';
11+
import { Sokeresultat, Soketreff } from './utils';
1212
import SokResultater from './sok-innhold/SokResultater';
1313
import { Environment } from 'store/reducers/environment-duck';
1414
import Cookies from 'js-cookie';
@@ -18,11 +18,13 @@ interface Props {
1818
id: string;
1919
isOpen: boolean;
2020
dropdownTransitionMs?: number;
21-
numResultsCallback?: (numResults: number) => void;
21+
searchHitsCallback?: (result: Soketreff[]) => void;
2222
searchInput: string;
2323
setSearchInput: (searchInput: string) => void;
2424
}
2525

26+
const MAX_HITS_TO_DISPLAY = 5;
27+
2628
const stateSelector = (state: AppState) => ({
2729
environment: state.environment,
2830
language: state.language.language,
@@ -37,8 +39,7 @@ const Sok = (props: Props) => {
3739
const [loading, setLoading] = useState<boolean>(false);
3840
const [result, setResult] = useState<Sokeresultat | undefined>();
3941
const [error, setError] = useState<string | undefined>();
40-
const { searchInput, setSearchInput } = props;
41-
const numberOfResults = 5;
42+
const { searchInput, setSearchInput, searchHitsCallback } = props;
4243
const klassenavn = cls('sok-input', {
4344
engelsk: language === Locale.ENGELSK,
4445
});
@@ -50,8 +51,14 @@ const Sok = (props: Props) => {
5051
}, [props.isOpen]);
5152

5253
useEffect(() => {
53-
if (result && props.numResultsCallback) {
54-
props.numResultsCallback(Math.min(result.hits.length, numberOfResults));
54+
if (!searchHitsCallback) {
55+
return;
56+
}
57+
58+
if (result?.hits) {
59+
searchHitsCallback(result.hits.slice(0, MAX_HITS_TO_DISPLAY));
60+
} else {
61+
searchHitsCallback([]);
5562
}
5663
}, [result]);
5764

@@ -122,7 +129,7 @@ const Sok = (props: Props) => {
122129
<SokResultater
123130
writtenInput={searchInput}
124131
result={result}
125-
numberOfResults={numberOfResults}
132+
numberOfResults={MAX_HITS_TO_DISPLAY}
126133
language={language}
127134
fetchError={error}
128135
/>

Diff for: src/komponenter/header/header-regular/desktop/sok-dropdown/SokDropdown.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { useKbNavSub } from 'utils/keyboard-navigation/useKbNavSub';
1010
import { configForNodeGroup } from 'utils/keyboard-navigation/kb-navigation-setup';
1111
import { KbNavGroup } from 'utils/keyboard-navigation/kb-navigation';
1212
import { SokKnapp } from 'komponenter/header/header-regular/desktop/sok-dropdown/sok-knapp/SokKnapp';
13+
import { Soketreff } from '../../common/sok/utils';
14+
1315
import 'komponenter/header/header-regular/desktop/sok-dropdown/SokDropdown.scss';
1416

1517
export const sokDropdownClassname = 'desktop-sok-dropdown';
@@ -27,8 +29,9 @@ type Props = {
2729
export const SokKnappDesktop = ({ kbNavMainState }: Props) => {
2830
const { isOpen } = useSelector(stateSelector);
2931
const [searchInput, setSearchInput] = useState<string>('');
30-
const [numResults, setNumResults] = useState(0);
31-
useKbNavSub(configForNodeGroup[KbNavGroup.Sok], kbNavMainState, isOpen, numResults);
32+
const [searchHits, setSearchHits] = useState<Soketreff[]>([]);
33+
34+
useKbNavSub(configForNodeGroup[KbNavGroup.Sok], kbNavMainState, isOpen, searchHits);
3235

3336
useEffect(() => {
3437
const dropdownElement = document.getElementById(sokDropdownClassname) as HTMLElement;
@@ -52,7 +55,7 @@ export const SokKnappDesktop = ({ kbNavMainState }: Props) => {
5255
isOpen={isOpen}
5356
id={desktopSokInputId}
5457
dropdownTransitionMs={dropdownTransitionMs}
55-
numResultsCallback={setNumResults}
58+
searchHitsCallback={setSearchHits}
5659
searchInput={searchInput}
5760
setSearchInput={setSearchInput}
5861
/>

Diff for: src/utils/keyboard-navigation/kb-navigation.ts

+18-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { buildGraphAndGetRootNode } from './kb-graph-builder';
2+
import { logAmplitudeEvent } from '../analytics/amplitude';
23

34
export enum KbNavGroup {
45
HeaderMenylinje = 'desktop-header-menylinje',
@@ -118,6 +119,7 @@ export const selectNode = (node: KbNavNode, callback: NodeSetterCallback = () =>
118119
if (!element) {
119120
return;
120121
}
122+
logAmplitudeEvent('piltast-navigasjon', { linkId: node.id, linkGroup: node.group });
121123
callback(node);
122124
if (focus) {
123125
element.focus();
@@ -155,20 +157,22 @@ const arrowkeysHandler = (currentNode: KbNavNode, setCurrentNode: NodeSetterCall
155157
event.preventDefault();
156158
};
157159

158-
const focusHandler = (
159-
currentNode: KbNavNode,
160-
nodeMap: KbNavNodeMap,
161-
setCurrentNode: NodeSetterCallback,
162-
kbNavHandler: (e: KeyboardEvent) => void
163-
) => (event: FocusEvent) => {
164-
const id = (event.target as HTMLElement).id;
165-
const focusedNode = nodeMap[id];
166-
if (focusedNode) {
167-
selectNode(focusedNode, setCurrentNode, false);
168-
} else {
169-
document.removeEventListener('keydown', kbNavHandler);
170-
}
171-
};
160+
const focusHandler =
161+
(
162+
currentNode: KbNavNode,
163+
nodeMap: KbNavNodeMap,
164+
setCurrentNode: NodeSetterCallback,
165+
kbNavHandler: (e: KeyboardEvent) => void
166+
) =>
167+
(event: FocusEvent) => {
168+
const id = (event.target as HTMLElement).id;
169+
const focusedNode = nodeMap[id];
170+
if (focusedNode) {
171+
selectNode(focusedNode, setCurrentNode, false);
172+
} else {
173+
document.removeEventListener('keydown', kbNavHandler);
174+
}
175+
};
172176

173177
export const createKbNavGraph = (
174178
group: KbNavGroup,

0 commit comments

Comments
 (0)