@@ -18,10 +18,8 @@ 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
- } ;
21
+ // Storage key for persisting version selector state
22
+ const STORAGE_KEY = 'versionSelector_state' ;
25
23
26
24
export const Content = ( ) => {
27
25
const { selectedContentId, selectedLocale, selectedVersion, setSelectedVersion } =
@@ -44,11 +42,13 @@ export const Content = () => {
44
42
45
43
useEffect ( ( ) => {
46
44
if ( selectedVersion ) {
47
- updateContentUrl ( selectedContentId ?? '' , selectedLocale , selectedVersion ) ;
45
+ const newUrl = `${ xpArchiveConfig . basePath } /${ selectedContentId } /${ selectedLocale } /${ selectedVersion } ` ;
46
+ window . history . replaceState ( { } , '' , newUrl ) ;
48
47
} else if ( data ?. versions ?. [ 0 ] ) {
49
48
const latestVersionId = data . versions [ 0 ] . versionId ;
50
49
setSelectedVersion ( latestVersionId ) ;
51
- updateContentUrl ( selectedContentId ?? '' , selectedLocale , latestVersionId ) ;
50
+ const newUrl = `${ xpArchiveConfig . basePath } /${ selectedContentId } /${ selectedLocale } /${ latestVersionId } ` ;
51
+ window . history . replaceState ( { } , '' , newUrl ) ;
52
52
}
53
53
} , [ data , selectedContentId , selectedLocale , selectedVersion ] ) ;
54
54
@@ -57,7 +57,41 @@ export const Content = () => {
57
57
const [ selectedView , setSelectedView ] = useState < ViewVariant | undefined > (
58
58
getDefaultView ( isWebpage , hasAttachment )
59
59
) ;
60
- const [ isVersionPanelOpen , setIsVersionPanelOpen ] = useState ( false ) ;
60
+
61
+ // Initialize version panel state from localStorage
62
+ const [ isVersionPanelOpen , setIsVersionPanelOpen ] = useState ( ( ) => {
63
+ try {
64
+ const savedState = localStorage . getItem ( STORAGE_KEY ) ;
65
+ if ( savedState ) {
66
+ const { keepOpen } = JSON . parse ( savedState ) ;
67
+ return ! ! keepOpen ;
68
+ }
69
+ } catch ( e ) {
70
+ console . error ( 'Failed to load version selector state' , e ) ;
71
+ }
72
+ return false ;
73
+ } ) ;
74
+
75
+ // Check localStorage when data changes to see if we should keep panel open
76
+ useEffect ( ( ) => {
77
+ if ( data ) {
78
+ try {
79
+ const savedState = localStorage . getItem ( STORAGE_KEY ) ;
80
+ if ( savedState ) {
81
+ const { keepOpen } = JSON . parse ( savedState ) ;
82
+ if ( keepOpen ) {
83
+ setIsVersionPanelOpen ( true ) ;
84
+ // Clear the keepOpen flag after opening
85
+ const updatedState = JSON . parse ( savedState ) ;
86
+ updatedState . keepOpen = false ;
87
+ localStorage . setItem ( STORAGE_KEY , JSON . stringify ( updatedState ) ) ;
88
+ }
89
+ }
90
+ } catch ( e ) {
91
+ console . error ( 'Failed to load version selector state' , e ) ;
92
+ }
93
+ }
94
+ } , [ data ] ) ;
61
95
62
96
useEffect ( ( ) => {
63
97
setSelectedView ( getDefaultView ( isWebpage , hasAttachment ) ) ;
0 commit comments