Skip to content

Commit 29fe585

Browse files
committed
Improve settings initialization and update handling
Added checks for settings.isInitialized before rendering and in effects to prevent premature execution. Updated settings update logic to filter out null and undefined values, avoiding unintended resets. Ensures components wait for settings to load before rendering or reacting to changes.
1 parent 1df2416 commit 29fe585

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

src/components/CippComponents/CippTenantSelector.jsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ export const CippTenantSelector = (props) => {
205205

206206
// This effect handles when the URL parameter changes externally
207207
useEffect(() => {
208-
if (!router.isReady || !tenantList.isSuccess) return;
208+
if (!router.isReady || !tenantList.isSuccess || !settings.isInitialized) return;
209209

210210
// Get the current tenant from URL or settings
211211
const urlTenant = router.query.tenantFilter || settings.currentTenant;
@@ -230,11 +230,11 @@ export const CippTenantSelector = (props) => {
230230
});
231231
}
232232
}
233-
}, [router.isReady, router.query.tenantFilter, tenantList.isSuccess, settings.currentTenant]);
233+
}, [router.isReady, router.query.tenantFilter, tenantList.isSuccess, settings.currentTenant, settings.isInitialized]);
234234

235235
// This effect ensures the tenant filter parameter is included in the URL when missing
236236
useEffect(() => {
237-
if (!router.isReady || !settings.currentTenant) return;
237+
if (!router.isReady || !settings.isInitialized || !settings.currentTenant) return;
238238

239239
// If the tenant parameter is missing from the URL but we have it in settings
240240
if (!router.query.tenantFilter && settings.currentTenant) {
@@ -248,7 +248,7 @@ export const CippTenantSelector = (props) => {
248248
{ shallow: true }
249249
);
250250
}
251-
}, [router.isReady, router.query, settings.currentTenant]);
251+
}, [router.isReady, router.query, settings.currentTenant, settings.isInitialized]);
252252

253253
useEffect(() => {
254254
if (tenant && currentTenant?.value && currentTenant?.value !== "AllTenants") {

src/contexts/settings-context.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,22 @@ export const SettingsProvider = (props) => {
132132

133133
const handleUpdate = useCallback((settings) => {
134134
setState((prevState) => {
135+
// Filter out null and undefined values to prevent resetting settings
136+
const filteredSettings = Object.entries(settings).reduce((acc, [key, value]) => {
137+
if (value !== null && value !== undefined) {
138+
acc[key] = value;
139+
}
140+
return acc;
141+
}, {});
142+
135143
storeSettings({
136144
...prevState,
137-
...settings,
145+
...filteredSettings,
138146
});
139147

140148
return {
141149
...prevState,
142-
...settings,
150+
...filteredSettings,
143151
};
144152
});
145153
}, []);

src/pages/_app.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ const App = (props) => {
367367
<SettingsConsumer>
368368
{(settings) => {
369369
if (!settings.isInitialized) {
370+
return null; // Don't render until settings are loaded
370371
}
371372
const theme = createTheme({
372373
colorPreset: "orange",

0 commit comments

Comments
 (0)