Skip to content

Commit 86eae8e

Browse files
committed
cache "Visning" og prøv å forenkle det hele
1 parent e7df092 commit 86eae8e

File tree

1 file changed

+51
-57
lines changed

1 file changed

+51
-57
lines changed

xp-archive/client/content/Content.tsx

+51-57
Original file line numberDiff line numberDiff line change
@@ -55,88 +55,77 @@ export const Content = () => {
5555
}
5656
}, [data, selectedContentId, selectedLocale, selectedVersion]);
5757

58-
const isWebpage = !!data?.html && !data.json.attachment;
59-
const hasAttachment = !!data?.json.attachment;
60-
const [selectedView, setSelectedView] = useState<ViewVariant | undefined>(
58+
// Calculate derived properties
59+
const isWebpage = !!data?.html && !data?.json?.attachment;
60+
const hasAttachment = !!data?.json?.attachment;
61+
62+
// State for view selector
63+
const [selectedView, setSelectedView] = useState<ViewVariant | undefined>(() =>
6164
getDefaultView(isWebpage, hasAttachment)
6265
);
6366

64-
const [versionSelectorCache, setVersionSelectorCache] = useState(() => {
65-
const cache = getCachedVersionSelector(selectedContentId ?? '');
66-
return {
67-
component: cache.component,
68-
versions: cache.versions,
69-
isOpen: cache.isOpen,
70-
};
71-
});
67+
// Update view when content type changes
68+
useEffect(() => {
69+
setSelectedView(getDefaultView(isWebpage, hasAttachment));
70+
}, [isWebpage, hasAttachment, selectedContentId]);
71+
72+
// Single cache for content-related data
73+
const [contentCache, setContentCache] = useState(() => ({
74+
// Version selector
75+
versions: getCachedVersionSelector(selectedContentId ?? '').versions,
76+
versionComponent: getCachedVersionSelector(selectedContentId ?? '').component,
77+
isVersionPanelOpen: getCachedVersionSelector(selectedContentId ?? '').isOpen,
7278

73-
// Add this new state to cache display values
74-
const [cachedDisplayData, setCachedDisplayData] = useState({
79+
// Display data
7580
displayName: '',
7681
path: '',
77-
});
82+
}));
7883

79-
// Update this useEffect to also cache display data when data loads
84+
// Update cache when content changes
8085
useEffect(() => {
8186
if (prevContentIdRef.current && prevContentIdRef.current !== selectedContentId) {
8287
clearCachedVersionSelector(prevContentIdRef.current);
8388
}
8489

8590
if (data?.versions && selectedContentId) {
86-
setVersionSelectorCache((prev) => ({
87-
component: null,
91+
setContentCache((prev) => ({
92+
...prev,
8893
versions: data.versions,
89-
isOpen: prev.isOpen,
94+
versionComponent: null,
95+
displayName: data.json?.displayName || prev.displayName,
96+
path: data.json?._path || prev.path,
9097
}));
91-
92-
// Cache display data when it's available
93-
if (data.json?.displayName || data.json?._path) {
94-
setCachedDisplayData({
95-
displayName: data.json.displayName || '',
96-
path: data.json._path || '',
97-
});
98-
}
9998
}
10099

101100
prevContentIdRef.current = selectedContentId;
102101
}, [selectedContentId, data?.versions, data?.json]);
103102

104-
useEffect(() => {
105-
setSelectedView(getDefaultView(isWebpage, hasAttachment));
106-
}, [isWebpage, hasAttachment, selectedContentId]);
107-
108-
const htmlPath = `${xpArchiveConfig.basePath}/html/${selectedContentId}/${selectedLocale}/${
109-
data?.json._versionKey
110-
}`;
111-
103+
// Helper functions to get data with fallbacks
112104
const getVersionDisplay = () => {
113-
// First check if we have the version in our cache
114-
if (selectedVersion && versionSelectorCache.versions.length > 0) {
115-
const cachedVersion = versionSelectorCache.versions.find(
105+
if (selectedVersion && contentCache.versions.length > 0) {
106+
const cachedVersion = contentCache.versions.find(
116107
(v) => v.versionId === selectedVersion
117108
);
118109
if (cachedVersion?.timestamp) {
119110
return formatTimestamp(cachedVersion.timestamp);
120111
}
121112
}
122113

123-
// Fall back to data if cache doesn't have it
124114
if (selectedVersion && data?.versions) {
125115
return formatTimestamp(
126116
data.versions.find((v) => v.versionId === selectedVersion)?.timestamp ?? ''
127117
);
128118
}
119+
129120
return 'Laster...';
130121
};
131122

132-
// Add helper functions to get title and URL with fallbacks
133-
const getDisplayName = () => {
134-
return data?.json.displayName || cachedDisplayData.displayName || 'Laster...';
135-
};
123+
const getDisplayName = () => data?.json?.displayName || contentCache.displayName || 'Laster...';
124+
const getPath = () => data?.json?._path || contentCache.path || '';
136125

137-
const getPath = () => {
138-
return data?.json._path || cachedDisplayData.path || '';
139-
};
126+
const htmlPath = `${xpArchiveConfig.basePath}/html/${selectedContentId}/${selectedLocale}/${
127+
data?.json._versionKey
128+
}`;
140129

141130
if (!selectedContentId) {
142131
return <EmptyState />;
@@ -154,40 +143,45 @@ export const Content = () => {
154143
icon={<SidebarRightIcon />}
155144
iconPosition={'right'}
156145
onClick={() => {
157-
setVersionSelectorCache((prev) => ({
146+
setContentCache((prev) => ({
158147
...prev,
159-
isOpen: true,
148+
isVersionPanelOpen: true,
160149
}));
161150
}}
162151
>
163152
{getVersionDisplay()}
164153
</Button>
165154

166-
{versionSelectorCache.component ? (
167-
versionSelectorCache.component
155+
{contentCache.versionComponent ? (
156+
contentCache.versionComponent
168157
) : (
169158
<VersionSelector
170159
versions={
171-
versionSelectorCache.versions.length > 0
172-
? versionSelectorCache.versions
160+
contentCache.versions.length > 0
161+
? contentCache.versions
173162
: data?.versions || []
174163
}
175-
isOpen={versionSelectorCache.isOpen}
164+
isOpen={contentCache.isVersionPanelOpen}
176165
onClose={() => {
177-
setVersionSelectorCache((prev) => ({
166+
setContentCache((prev) => ({
178167
...prev,
179-
isOpen: false,
168+
isVersionPanelOpen: false,
180169
}));
181170
}}
182171
onMount={(component) => {
183172
setCachedVersionSelector(
184173
selectedContentId ?? '',
185174
component,
186-
versionSelectorCache.versions.length > 0
187-
? versionSelectorCache.versions
175+
contentCache.versions.length > 0
176+
? contentCache.versions
188177
: data?.versions || [],
189-
versionSelectorCache.isOpen
178+
contentCache.isVersionPanelOpen
190179
);
180+
181+
setContentCache((prev) => ({
182+
...prev,
183+
versionComponent: component,
184+
}));
191185
}}
192186
/>
193187
)}

0 commit comments

Comments
 (0)