Skip to content

Commit 2923d38

Browse files
authored
Merge pull request #42 from navikt/layers-selector
Layers selector
2 parents d58d7e4 + 4b42f05 commit 2923d38

File tree

7 files changed

+79
-19
lines changed

7 files changed

+79
-19
lines changed

xp-archive/client/contentTree/NavigationBar.tsx

+29-12
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,39 @@
11
import React from 'react';
2-
import { Alert, Heading, Loader } from '@navikt/ds-react';
3-
import { useContentTree } from '../hooks/useContentTree';
4-
import { NavigationItem } from './contentTreeEntry/NavigationItem';
5-
import { SimpleTreeView } from '@mui/x-tree-view';
2+
import { Alert, Heading, Tabs } from '@navikt/ds-react';
3+
import { LayerPanel } from './layerPanel/LayerPanel';
4+
import { useAppState } from 'client/context/appState/useAppState';
5+
6+
const locales = ['no', 'en', 'nn', 'se'] as const;
7+
export type Locale = (typeof locales)[number];
8+
9+
const getLabel = (locale: Locale) => {
10+
const translations: Record<Locale, string> = {
11+
no: 'Norsk',
12+
en: 'Engelsk',
13+
nn: 'Nynorsk',
14+
se: 'Samisk',
15+
};
16+
return translations[locale];
17+
};
618

719
export const NavigationBar = () => {
8-
const { data, isLoading } = useContentTree('/', 'no');
20+
const { setSelectedLocale } = useAppState();
921

1022
return (
1123
<div>
1224
<Heading size={'small'}>{'Innhold'}</Heading>
13-
{isLoading ? (
14-
<Loader />
15-
) : (
16-
<SimpleTreeView>
17-
{data?.children.map((entry) => <NavigationItem entry={entry} key={entry.id} />)}
18-
</SimpleTreeView>
19-
)}
25+
<Tabs defaultValue="no" onChange={(locale) => setSelectedLocale(locale as Locale)}>
26+
<Tabs.List>
27+
{locales.map((locale) => (
28+
<Tabs.Tab key={locale} value={locale} label={getLabel(locale)} />
29+
))}
30+
</Tabs.List>
31+
{locales.map((locale) => (
32+
<Tabs.Panel key={locale} value={locale}>
33+
<LayerPanel locale={locale} />
34+
</Tabs.Panel>
35+
))}
36+
</Tabs>
2037
<Alert variant={'warning'} size={'small'} inline={true} style={{ marginTop: '1.5rem' }}>
2138
{'Obs: dette arkivet er under utvikling og er ikke klart til bruk!'}
2239
</Alert>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import React from 'react';
2+
import { Loader } from '@navikt/ds-react';
3+
import { useContentTree } from 'client/hooks/useContentTree';
4+
import { SimpleTreeView } from '@mui/x-tree-view';
5+
import { NavigationItem } from '../contentTreeEntry/NavigationItem';
6+
import { Locale } from '../NavigationBar';
7+
8+
export const LayerPanel = ({ locale }: { locale: Locale }) => {
9+
const { data, isLoading } = useContentTree('/', locale);
10+
11+
return (
12+
<>
13+
{isLoading ? (
14+
<Loader />
15+
) : (
16+
<SimpleTreeView>
17+
{data?.children.map((entry) => <NavigationItem entry={entry} key={entry.id} />)}
18+
</SimpleTreeView>
19+
)}
20+
</>
21+
);
22+
};

xp-archive/client/contentView/ContentView.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@ const getDisplayComponent = (viewVariant: ViewVariant, data: ContentServiceRespo
2626
};
2727

2828
export const ContentView = () => {
29-
const { selectedContentId, selectedVersion } = useAppState();
29+
const { selectedContentId, selectedLocale, selectedVersion } = useAppState();
3030

3131
const fetchId = selectedVersion?.nodeId ?? selectedContentId;
3232

3333
const { data, isLoading } = useFetchContent({
3434
id: fetchId || '',
35+
locale: selectedLocale,
3536
versionId: selectedVersion?.versionId ?? undefined,
3637
});
3738

Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
import { createContext } from 'react';
22
import { SelectedVersion } from './AppStateProvider';
3+
import { Locale } from 'client/contentTree/NavigationBar';
34

45
export type AppState = {
56
selectedContentId?: string;
67
setSelectedContentId: (contentId: string) => void;
8+
selectedLocale: Locale;
9+
setSelectedLocale: (locale: Locale) => void;
710
selectedVersion?: SelectedVersion;
811
setSelectedVersion: (selectedVersion: SelectedVersion | undefined) => void;
912
};
1013

1114
export const AppStateContext = createContext<AppState>({
1215
setSelectedContentId: () => ({}),
16+
selectedLocale: 'no',
17+
setSelectedLocale: () => ({}),
1318
setSelectedVersion: () => ({}),
1419
});

xp-archive/client/context/appState/AppStateProvider.tsx

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, { useCallback, useMemo, useState } from 'react';
22
import { AppStateContext } from './AppStateContext';
3+
import { Locale } from 'client/contentTree/NavigationBar';
34

45
type Props = {
56
children: React.ReactNode;
@@ -12,9 +13,13 @@ export type SelectedVersion = {
1213

1314
export const AppStateProvider = ({ children }: Props) => {
1415
const [selectedContentId, setSelectedContentId] = useState<string>();
16+
const [selectedLocale, setSelectedLocale] = useState<Locale>('no');
1517
const [selectedVersion, setSelectedVersion] = useState<SelectedVersion>();
1618

1719
const setSelectedContentIdMemoized = useCallback(setSelectedContentId, [setSelectedContentId]);
20+
21+
const setSelectedLocaleMemoized = useCallback(setSelectedLocale, [setSelectedLocale]);
22+
1823
const setSelectedVersionMemoized = useCallback(setSelectedVersion, [setSelectedVersion]);
1924
const selectedVersionMemoized = useMemo(() => selectedVersion, [selectedVersion]);
2025

@@ -25,6 +30,8 @@ export const AppStateProvider = ({ children }: Props) => {
2530
setSelectedContentId: setSelectedContentIdMemoized,
2631
selectedVersion: selectedVersionMemoized,
2732
setSelectedVersion: setSelectedVersionMemoized,
33+
selectedLocale,
34+
setSelectedLocale: setSelectedLocaleMemoized,
2835
}}
2936
>
3037
{children}

xp-archive/client/context/appState/useAppState.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,20 @@ import { useContext } from 'react';
22
import { AppStateContext } from './AppStateContext';
33

44
export const useAppState = () => {
5-
const { selectedContentId, selectedVersion, setSelectedContentId, setSelectedVersion } =
6-
useContext(AppStateContext);
5+
const {
6+
selectedContentId,
7+
selectedVersion,
8+
selectedLocale,
9+
setSelectedLocale,
10+
setSelectedContentId,
11+
setSelectedVersion,
12+
} = useContext(AppStateContext);
713

814
return {
915
selectedContentId,
1016
selectedVersion,
17+
selectedLocale,
18+
setSelectedLocale,
1119
setSelectedContentId,
1220
setSelectedVersion,
1321
};

xp-archive/client/hooks/useFetchContent.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ import { ContentServiceResponse } from '../../shared/types';
44

55
const CONTENT_API = `${import.meta.env.VITE_APP_ORIGIN}/xp/api/content`;
66

7-
type FetchContentParams = { id: string; versionId?: string };
7+
type FetchContentParams = { id: string; locale: string; versionId?: string };
88

99
const fetchContent = async (params: FetchContentParams) => {
1010
if (!params.id) return;
1111
return fetchJson<ContentServiceResponse>(CONTENT_API, {
12-
params: { ...params, locale: 'no' },
12+
params,
1313
});
1414
};
1515

16-
export const useFetchContent = ({ id, versionId }: FetchContentParams) => {
17-
return useSWRImmutable({ id, versionId }, fetchContent);
16+
export const useFetchContent = ({ id, locale, versionId }: FetchContentParams) => {
17+
return useSWRImmutable({ id, locale, versionId }, fetchContent);
1818
};

0 commit comments

Comments
 (0)