From b25404786587e7b87033a52546e55840d3a410c7 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Thu, 18 Dec 2025 11:14:15 +0100 Subject: [PATCH 1/4] fixes #5106 --- src/pages/tenant/manage/applied-standards.js | 3 ++- src/pages/tenant/manage/configuration-backup.js | 8 +++++--- src/pages/tenant/manage/drift.js | 3 ++- src/pages/tenant/manage/edit.js | 3 ++- src/pages/tenant/manage/history.js | 4 +++- src/pages/tenant/manage/recover-policies.js | 4 +++- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/pages/tenant/manage/applied-standards.js b/src/pages/tenant/manage/applied-standards.js index 359f8cbe59f7..2647ac4651f4 100644 --- a/src/pages/tenant/manage/applied-standards.js +++ b/src/pages/tenant/manage/applied-standards.js @@ -58,7 +58,8 @@ const Page = () => { const { templateId } = router.query; const [comparisonData, setComparisonData] = useState(null); const settings = useSettings(); - const currentTenant = settings?.currentTenant; + // Prioritize URL query parameter, then fall back to settings + const currentTenant = router.query.tenantFilter || settings?.currentTenant; const formControl = useForm({ mode: "onBlur", defaultValues: { diff --git a/src/pages/tenant/manage/configuration-backup.js b/src/pages/tenant/manage/configuration-backup.js index 8969f31ca4e4..b4443b6f2305 100644 --- a/src/pages/tenant/manage/configuration-backup.js +++ b/src/pages/tenant/manage/configuration-backup.js @@ -42,16 +42,18 @@ const Page = () => { const { templateId } = router.query; const settings = useSettings(); const removeDialog = useDialog(); + // Prioritize URL query parameter, then fall back to settings + const currentTenant = router.query.tenantFilter || settings.currentTenant; // API call to get backup files const backupList = ApiGetCall({ url: "/api/ExecListBackup", data: { - tenantFilter: settings.currentTenant, + tenantFilter: currentTenant, Type: "Scheduled", NameOnly: true, }, - queryKey: `BackupList-${settings.currentTenant}`, + queryKey: `BackupList-${currentTenant}`, }); // API call to get existing backup configuration/schedule @@ -61,7 +63,7 @@ const Page = () => { showHidden: true, Type: "New-CIPPBackup", }, - queryKey: `BackupTasks-${settings.currentTenant}`, + queryKey: `BackupTasks-${currentTenant}`, }); // Use the actual backup files as the backup data diff --git a/src/pages/tenant/manage/drift.js b/src/pages/tenant/manage/drift.js index 6e0ee47da4d3..8287c6c18cb3 100644 --- a/src/pages/tenant/manage/drift.js +++ b/src/pages/tenant/manage/drift.js @@ -34,7 +34,8 @@ const ManageDriftPage = () => { const router = useRouter(); const { templateId } = router.query; const userSettingsDefaults = useSettings(); - const tenantFilter = userSettingsDefaults.currentTenant || ""; + // Prioritize URL query parameter, then fall back to settings + const tenantFilter = router.query.tenantFilter || userSettingsDefaults.currentTenant || ""; const [anchorEl, setAnchorEl] = useState({}); const [bulkActionsAnchorEl, setBulkActionsAnchorEl] = useState(null); const createDialog = useDialog(); diff --git a/src/pages/tenant/manage/edit.js b/src/pages/tenant/manage/edit.js index 7d7bfb11fae1..8d66042e30e3 100644 --- a/src/pages/tenant/manage/edit.js +++ b/src/pages/tenant/manage/edit.js @@ -22,7 +22,8 @@ const Page = () => { const router = useRouter(); const { templateId } = router.query; const settings = useSettings(); - const currentTenant = settings.currentTenant; + // Prioritize URL query parameter, then fall back to settings + const currentTenant = router.query.tenantFilter || settings.currentTenant; const formControl = useForm({ mode: "onChange", diff --git a/src/pages/tenant/manage/history.js b/src/pages/tenant/manage/history.js index beb998fe2b75..d0e37ec3a077 100644 --- a/src/pages/tenant/manage/history.js +++ b/src/pages/tenant/manage/history.js @@ -40,7 +40,9 @@ const Page = () => { const router = useRouter(); const { templateId } = router.query; const [daysToLoad, setDaysToLoad] = useState(5); - const tenant = useSettings().currentTenant; + const userSettings = useSettings(); + // Prioritize URL query parameter, then fall back to settings + const tenant = router.query.tenantFilter || userSettings.currentTenant; const [expandedMessages, setExpandedMessages] = useState(new Set()); // Toggle message expansion diff --git a/src/pages/tenant/manage/recover-policies.js b/src/pages/tenant/manage/recover-policies.js index 3c4ed4e64376..98d10ec5208a 100644 --- a/src/pages/tenant/manage/recover-policies.js +++ b/src/pages/tenant/manage/recover-policies.js @@ -28,7 +28,9 @@ const RecoverPoliciesPage = () => { const router = useRouter(); const { templateId } = router.query; const [selectedPolicies, setSelectedPolicies] = useState([]); - const currentTenant = useSettings().currentTenant; + const userSettings = useSettings(); + // Prioritize URL query parameter, then fall back to settings + const currentTenant = router.query.tenantFilter || userSettings.currentTenant; const formControl = useForm({ mode: "onChange" }); From 1df2416a56fda91f4ed5b80e5c8b984d08a871b7 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Thu, 18 Dec 2025 14:18:11 +0100 Subject: [PATCH 2/4] auto tenant fix --- src/pages/tenant/manage/configuration-backup.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/tenant/manage/configuration-backup.js b/src/pages/tenant/manage/configuration-backup.js index b4443b6f2305..5421a3314e79 100644 --- a/src/pages/tenant/manage/configuration-backup.js +++ b/src/pages/tenant/manage/configuration-backup.js @@ -382,7 +382,10 @@ const Page = () => { confirmText: "Are you sure you want to remove this backup schedule? This will stop automatic backups but won't delete existing backup files.", }} - relatedQueryKeys={[`BackupTasks-${settings.currentTenant}`, `BackupList-${settings.currentTenant}`]} + relatedQueryKeys={[ + `BackupTasks-${settings.currentTenant}`, + `BackupList-${settings.currentTenant}`, + ]} onSuccess={() => { // Refresh both queries when a backup schedule is removed setTimeout(() => { From 29fe585c487639d65b5140e307b46940465cc84c Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 18 Dec 2025 17:12:31 -0500 Subject: [PATCH 3/4] 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. --- src/components/CippComponents/CippTenantSelector.jsx | 8 ++++---- src/contexts/settings-context.js | 12 ++++++++++-- src/pages/_app.js | 1 + 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/components/CippComponents/CippTenantSelector.jsx b/src/components/CippComponents/CippTenantSelector.jsx index 0e16a5f88920..735ecfe82d40 100644 --- a/src/components/CippComponents/CippTenantSelector.jsx +++ b/src/components/CippComponents/CippTenantSelector.jsx @@ -205,7 +205,7 @@ export const CippTenantSelector = (props) => { // This effect handles when the URL parameter changes externally useEffect(() => { - if (!router.isReady || !tenantList.isSuccess) return; + if (!router.isReady || !tenantList.isSuccess || !settings.isInitialized) return; // Get the current tenant from URL or settings const urlTenant = router.query.tenantFilter || settings.currentTenant; @@ -230,11 +230,11 @@ export const CippTenantSelector = (props) => { }); } } - }, [router.isReady, router.query.tenantFilter, tenantList.isSuccess, settings.currentTenant]); + }, [router.isReady, router.query.tenantFilter, tenantList.isSuccess, settings.currentTenant, settings.isInitialized]); // This effect ensures the tenant filter parameter is included in the URL when missing useEffect(() => { - if (!router.isReady || !settings.currentTenant) return; + if (!router.isReady || !settings.isInitialized || !settings.currentTenant) return; // If the tenant parameter is missing from the URL but we have it in settings if (!router.query.tenantFilter && settings.currentTenant) { @@ -248,7 +248,7 @@ export const CippTenantSelector = (props) => { { shallow: true } ); } - }, [router.isReady, router.query, settings.currentTenant]); + }, [router.isReady, router.query, settings.currentTenant, settings.isInitialized]); useEffect(() => { if (tenant && currentTenant?.value && currentTenant?.value !== "AllTenants") { diff --git a/src/contexts/settings-context.js b/src/contexts/settings-context.js index bc2e177d73cc..37bb7a1cfdd6 100644 --- a/src/contexts/settings-context.js +++ b/src/contexts/settings-context.js @@ -132,14 +132,22 @@ export const SettingsProvider = (props) => { const handleUpdate = useCallback((settings) => { setState((prevState) => { + // Filter out null and undefined values to prevent resetting settings + const filteredSettings = Object.entries(settings).reduce((acc, [key, value]) => { + if (value !== null && value !== undefined) { + acc[key] = value; + } + return acc; + }, {}); + storeSettings({ ...prevState, - ...settings, + ...filteredSettings, }); return { ...prevState, - ...settings, + ...filteredSettings, }; }); }, []); diff --git a/src/pages/_app.js b/src/pages/_app.js index a1218d67d46a..a26f46d7f701 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -367,6 +367,7 @@ const App = (props) => { {(settings) => { if (!settings.isInitialized) { + return null; // Don't render until settings are loaded } const theme = createTheme({ colorPreset: "orange", From ca896e20a09b23f99655cd174d5195b10b01a551 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 18 Dec 2025 18:58:40 -0500 Subject: [PATCH 4/4] version up --- package.json | 4 ++-- public/version.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index cc2c1911e40f..bfce16283445 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cipp", - "version": "8.8.0", + "version": "8.8.1", "author": "CIPP Contributors", "homepage": "https://cipp.app/", "bugs": { @@ -118,4 +118,4 @@ "eslint": "9.35.0", "eslint-config-next": "15.5.2" } -} +} \ No newline at end of file diff --git a/public/version.json b/public/version.json index 1e3a630a8132..e38593790096 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "8.8.0" -} + "version": "8.8.1" +} \ No newline at end of file