@@ -44,16 +44,16 @@ export const Content = () => {
44
44
versionId : selectedVersion ?? '' ,
45
45
} ) ;
46
46
47
- // Simplified version ID and URL handling
48
47
useEffect ( ( ) => {
49
- if ( ! selectedVersion && data ?. versions ?. [ 0 ] ) {
50
- setSelectedVersion ( data . versions [ 0 ] . versionId ) ;
51
- }
52
- if ( selectedContentId && selectedLocale && selectedVersion ) {
53
- const newUrl = `${ xpArchiveConfig . basePath } /${ selectedContentId } /${ selectedLocale } /${ selectedVersion } ` ;
48
+ const versionId = selectedVersion ?? data ?. versions ?. [ 0 ] ?. versionId ;
49
+ if ( versionId ) {
50
+ if ( ! selectedVersion ) {
51
+ setSelectedVersion ( versionId ) ;
52
+ }
53
+ const newUrl = `${ xpArchiveConfig . basePath } /${ selectedContentId } /${ selectedLocale } /${ versionId } ` ;
54
54
window . history . replaceState ( { } , '' , newUrl ) ;
55
55
}
56
- } , [ data ?. versions , selectedContentId , selectedLocale , selectedVersion ] ) ;
56
+ } , [ data , selectedContentId , selectedLocale , selectedVersion ] ) ;
57
57
58
58
const isWebpage = ! ! data ?. html && ! data . json . attachment ;
59
59
const hasAttachment = ! ! data ?. json . attachment ;
@@ -71,7 +71,7 @@ export const Content = () => {
71
71
} ;
72
72
} ) ;
73
73
74
- // Single effect for cache management
74
+ // Update cache when content ID changes or new versions arrive
75
75
useEffect ( ( ) => {
76
76
if ( prevContentIdRef . current && prevContentIdRef . current !== selectedContentId ) {
77
77
clearCachedVersionSelector ( prevContentIdRef . current ) ;
@@ -81,7 +81,7 @@ export const Content = () => {
81
81
setVersionSelectorCache ( ( prev ) => ( {
82
82
component : null ,
83
83
versions : data . versions ,
84
- isOpen : prev . isOpen ,
84
+ isOpen : prev . isOpen , // Always preserve open state
85
85
} ) ) ;
86
86
}
87
87
@@ -130,11 +130,16 @@ export const Content = () => {
130
130
{ getVersionDisplay ( ) }
131
131
</ Button >
132
132
133
+ { /* Render either the cached component or a new VersionSelector */ }
133
134
{ versionSelectorCache . component ? (
134
135
versionSelectorCache . component
135
136
) : (
136
137
< VersionSelector
137
- versions = { data ?. versions || [ ] }
138
+ versions = {
139
+ versionSelectorCache . versions . length > 0
140
+ ? versionSelectorCache . versions
141
+ : data ?. versions || [ ]
142
+ }
138
143
isOpen = { versionSelectorCache . isOpen }
139
144
onClose = { ( ) => {
140
145
setVersionSelectorCache ( ( prev ) => ( {
@@ -143,10 +148,13 @@ export const Content = () => {
143
148
} ) ) ;
144
149
} }
145
150
onMount = { ( component ) => {
151
+ // Cache the rendered component with the content ID
146
152
setCachedVersionSelector (
147
153
selectedContentId || '' ,
148
154
component ,
149
- data ?. versions || [ ] ,
155
+ versionSelectorCache . versions . length > 0
156
+ ? versionSelectorCache . versions
157
+ : data ?. versions || [ ] ,
150
158
versionSelectorCache . isOpen
151
159
) ;
152
160
} }
0 commit comments