1
1
import React , { useState , useEffect } from 'react' ;
2
2
import { ExternalLinkIcon , SidebarRightIcon } from '@navikt/aksel-icons' ;
3
- import { Button , Detail , Heading , Label } from '@navikt/ds-react' ;
4
3
import { xpArchiveConfig } from '@common/shared/siteConfigs' ;
4
+ import { Button , Detail , Heading , Label } from '@navikt/ds-react' ;
5
5
import { useFetchContent } from '../hooks/useFetchContent' ;
6
6
import { useAppState } from '../context/appState/useAppState' ;
7
7
import { ViewSelector , ViewVariant } from 'client/viewSelector/ViewSelector' ;
@@ -18,6 +18,11 @@ const getDefaultView = (isWebpage: boolean, hasAttachment: boolean): ViewVariant
18
18
return undefined ;
19
19
} ;
20
20
21
+ const updateContentUrl = ( nodeId : string , locale : string , versionId ?: string ) => {
22
+ const newUrl = `${ xpArchiveConfig . basePath } /${ nodeId } /${ locale } /${ versionId ?? '' } ` ;
23
+ window . history . pushState ( { } , '' , newUrl ) ;
24
+ } ;
25
+
21
26
export const Content = ( ) => {
22
27
const { selectedContentId, selectedLocale, selectedVersion, setSelectedVersion } =
23
28
useAppState ( ) ;
@@ -37,6 +42,16 @@ export const Content = () => {
37
42
versionId : selectedVersion ?? '' ,
38
43
} ) ;
39
44
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
+
40
55
const isWebpage = ! ! data ?. html && ! data . json . attachment ;
41
56
const hasAttachment = ! ! data ?. json . attachment ;
42
57
const [ selectedView , setSelectedView ] = useState < ViewVariant | undefined > (
@@ -52,6 +67,15 @@ export const Content = () => {
52
67
data ?. json . _versionKey
53
68
} `;
54
69
70
+ const getVersionDisplay = ( ) => {
71
+ if ( selectedVersion && data ?. versions ) {
72
+ return formatTimestamp (
73
+ data . versions . find ( ( v ) => v . versionId === selectedVersion ) ?. timestamp ?? ''
74
+ ) ;
75
+ }
76
+ return 'Laster...' ;
77
+ } ;
78
+
55
79
if ( ! selectedContentId ) {
56
80
return < EmptyState /> ;
57
81
}
@@ -95,14 +119,7 @@ export const Content = () => {
95
119
iconPosition = { 'right' }
96
120
onClick = { ( ) => setIsVersionPanelOpen ( true ) }
97
121
>
98
- { selectedVersion && data ?. versions
99
- ? formatTimestamp (
100
- data . versions . find ( ( v ) => v . versionId === selectedVersion )
101
- ?. timestamp ?? ''
102
- )
103
- : data ?. versions ?. [ 0 ]
104
- ? `${ formatTimestamp ( data . versions [ 0 ] . timestamp , true ) } (Siste versjon)`
105
- : 'Laster...' }
122
+ { getVersionDisplay ( ) }
106
123
</ Button >
107
124
< VersionSelector
108
125
versions = { data ?. versions || [ ] }
@@ -112,7 +129,7 @@ export const Content = () => {
112
129
</ div >
113
130
</ div >
114
131
< ContentView
115
- selectedView = { selectedView || getDefaultView ( isWebpage , hasAttachment ) || 'html' }
132
+ selectedView = { selectedView || getDefaultView ( isWebpage , hasAttachment ) }
116
133
isLoading = { isLoading }
117
134
data = { data }
118
135
/>
0 commit comments