Skip to content

Commit a6c6b9a

Browse files
authored
Merge pull request #110 from navikt/fiks-url-versionid
Fiks URL-håndtering (alltid versjonsID)
2 parents f32395f + 3159a2c commit a6c6b9a

File tree

5 files changed

+33
-40
lines changed

5 files changed

+33
-40
lines changed

xp-archive/client/content/Content.tsx

+26-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, { useState, useEffect } from 'react';
22
import { SidebarRightIcon } from '@navikt/aksel-icons';
3+
import { xpArchiveConfig } from '@common/shared/siteConfigs';
34
import { Button, Detail, Heading, Label } from '@navikt/ds-react';
45
import { useFetchContent } from '../hooks/useFetchContent';
56
import { useAppState } from '../context/appState/useAppState';
@@ -17,6 +18,11 @@ const getDefaultView = (isWebpage: boolean, hasAttachment: boolean): ViewVariant
1718
return undefined;
1819
};
1920

21+
const updateContentUrl = (nodeId: string, locale: string, versionId?: string) => {
22+
const newUrl = `${xpArchiveConfig.basePath}/${nodeId}/${locale}/${versionId ?? ''}`;
23+
window.history.pushState({}, '', newUrl);
24+
};
25+
2026
export const Content = () => {
2127
const { selectedContentId, selectedLocale, selectedVersion, setSelectedVersion } =
2228
useAppState();
@@ -36,6 +42,16 @@ export const Content = () => {
3642
versionId: selectedVersion ?? '',
3743
});
3844

45+
useEffect(() => {
46+
if (selectedVersion) {
47+
updateContentUrl(selectedContentId ?? '', selectedLocale, selectedVersion);
48+
} else if (data?.versions?.[0]) {
49+
const latestVersionId = data.versions[0].versionId;
50+
setSelectedVersion(latestVersionId);
51+
updateContentUrl(selectedContentId ?? '', selectedLocale, latestVersionId);
52+
}
53+
}, [data, selectedContentId, selectedLocale, selectedVersion]);
54+
3955
const isWebpage = !!data?.html && !data.json.attachment;
4056
const hasAttachment = !!data?.json.attachment;
4157
const [selectedView, setSelectedView] = useState<ViewVariant | undefined>(
@@ -47,6 +63,15 @@ export const Content = () => {
4763
setSelectedView(getDefaultView(isWebpage, hasAttachment));
4864
}, [isWebpage, hasAttachment, selectedContentId]);
4965

66+
const getVersionDisplay = () => {
67+
if (selectedVersion && data?.versions) {
68+
return formatTimestamp(
69+
data.versions.find((v) => v.versionId === selectedVersion)?.timestamp ?? ''
70+
);
71+
}
72+
return 'Laster...';
73+
};
74+
5075
if (!selectedContentId) {
5176
return <EmptyState />;
5277
}
@@ -75,14 +100,7 @@ export const Content = () => {
75100
iconPosition={'right'}
76101
onClick={() => setIsVersionPanelOpen(true)}
77102
>
78-
{selectedVersion && data?.versions
79-
? formatTimestamp(
80-
data.versions.find((v) => v.versionId === selectedVersion)
81-
?.timestamp ?? ''
82-
)
83-
: data?.versions?.[0]
84-
? `${formatTimestamp(data.versions[0].timestamp, true)} (Siste versjon)`
85-
: 'Laster...'}
103+
{getVersionDisplay()}
86104
</Button>
87105
<VersionSelector
88106
versions={data?.versions || []}

xp-archive/client/contentTree/contentTreeEntry/NavigationItem.tsx

-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import React from 'react';
22
import { ContentTreeEntryData } from '../../../shared/types';
3-
import { xpArchiveConfig } from '@common/shared/siteConfigs';
43
import { useAppState } from '../../context/appState/useAppState';
54
import { TreeItem } from '@mui/x-tree-view';
65
import { useContentTree } from 'client/hooks/useContentTree';
@@ -13,11 +12,6 @@ type Props = {
1312
export const getContentIconUrl = (type: string) =>
1413
`${import.meta.env.VITE_APP_ORIGIN}/xp/api/contentIcon?type=${type}`;
1514

16-
export const updateContentUrl = (nodeId: string, locale: string, versionId?: string) => {
17-
const newUrl = `${xpArchiveConfig.basePath}/${nodeId}/${locale}/${versionId ?? ''}`;
18-
window.history.pushState({}, '', newUrl);
19-
};
20-
2115
export const NavigationItem = ({ entry }: Props) => {
2216
const { setSelectedContentId } = useAppState();
2317

@@ -39,7 +33,6 @@ export const NavigationItem = ({ entry }: Props) => {
3933
const onClick = () => {
4034
if (!entry.isEmpty) {
4135
setSelectedContentId(entry.id);
42-
updateContentUrl(entry.id, entry.locale);
4336
}
4437
};
4538

xp-archive/client/contentTree/search/SearchResultItem/SearchResultItem.tsx

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import { BodyShort, Detail } from '@navikt/ds-react';
22
import { classNames } from '@common/client/utils/classNames';
3-
import {
4-
updateContentUrl,
5-
getContentIconUrl,
6-
} from 'client/contentTree/contentTreeEntry/NavigationItem';
3+
import { getContentIconUrl } from 'client/contentTree/contentTreeEntry/NavigationItem';
74
import { useAppState } from 'client/context/appState/useAppState';
85
import { SearchResponse } from 'shared/types';
96

@@ -31,7 +28,6 @@ export const SearchResultItem = ({
3128
onClick={() => {
3229
setSelectedContentId(hit._id);
3330
setSelectedLocale(hit.layerLocale);
34-
updateContentUrl(hit._id, hit.layerLocale);
3531
}}
3632
>
3733
<img

xp-archive/client/versionSelector/VersionSelector.module.css

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
:global(.navds-label) {
1313
font-weight: var(--a-font-weight-regular);
14+
text-align: left;
1415
}
1516

1617
:global(.navds-button__icon) {

xp-archive/client/versionSelector/VersionSelector.tsx

+5-20
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { Heading, Button, Search } from '@navikt/ds-react';
33
import { VersionReference } from 'shared/types';
44
import { formatTimestamp } from '@common/shared/timestamp';
55
import { useAppState } from 'client/context/appState/useAppState';
6-
import { updateContentUrl } from 'client/contentTree/contentTreeEntry/NavigationItem';
76
import { SlidePanel } from './SlidePanel/SlidePanel';
87
import { classNames } from '@common/client/utils/classNames';
98
import style from './VersionSelector.module.css';
@@ -35,13 +34,7 @@ const VersionButton = ({ isSelected, onClick, children }: VersionButtonProps) =>
3534

3635
export const VersionSelector = ({ versions, isOpen, onClose }: Props) => {
3736
const [searchQuery, setSearchQuery] = useState('');
38-
const {
39-
selectedContentId,
40-
setSelectedContentId,
41-
selectedVersion,
42-
setSelectedVersion,
43-
selectedLocale,
44-
} = useAppState();
37+
const { setSelectedContentId, selectedVersion, setSelectedVersion } = useAppState();
4538

4639
const handleClose = () => {
4740
setSearchQuery('');
@@ -51,7 +44,6 @@ export const VersionSelector = ({ versions, isOpen, onClose }: Props) => {
5144
const selectVersion = (versionId: string) => {
5245
const nodeId = versions.find((v) => v.versionId === versionId)?.nodeId;
5346
if (nodeId) setSelectedContentId(nodeId);
54-
updateContentUrl(selectedContentId ?? '', selectedLocale, versionId);
5547
setSelectedVersion(versionId);
5648
handleClose();
5749
};
@@ -73,23 +65,16 @@ export const VersionSelector = ({ versions, isOpen, onClose }: Props) => {
7365
className={style.search}
7466
/>
7567
<div className={style.versionList}>
76-
<VersionButton isSelected={!selectedVersion} onClick={() => selectVersion('')}>
77-
{versions[0] ? (
78-
<>
79-
{formatTimestamp(versions[0].timestamp, true)}
80-
<span style={{ fontWeight: 'normal' }}> (Siste versjon)</span>
81-
</>
82-
) : (
83-
'Laster...'
84-
)}
85-
</VersionButton>
86-
{filteredVersions.map((version) => (
68+
{filteredVersions.map((version, index) => (
8769
<VersionButton
8870
key={version.versionId}
8971
isSelected={version.versionId === selectedVersion}
9072
onClick={() => selectVersion(version.versionId)}
9173
>
9274
{formatTimestamp(version.timestamp)}
75+
{index === 0 && (
76+
<span style={{ fontWeight: 'normal' }}> (Siste versjon)</span>
77+
)}
9378
</VersionButton>
9479
))}
9580
</div>

0 commit comments

Comments
 (0)