From 8ee00c38ce2da4edecf4e9703d1797ac5a7d4f2e Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Thu, 28 May 2026 15:58:38 +0200 Subject: [PATCH 1/2] fix(DashboardSidebar): guard against null persisted storage in useResizable --- src/runtime/composables/useResizable.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/runtime/composables/useResizable.ts b/src/runtime/composables/useResizable.ts index c7b466a6e1..058cc563d4 100644 --- a/src/runtime/composables/useResizable.ts +++ b/src/runtime/composables/useResizable.ts @@ -116,8 +116,12 @@ export function useResizable(key: string, options: Ref | UseR : useStorage(key, defaultStorageValue, undefined, opts.value.storageOptions) : ref(defaultStorageValue) + if (storageData.value == null || typeof storageData.value !== 'object') { + storageData.value = { ...defaultStorageValue } + } + const isCollapsed = computed({ - get: () => storageData.value.collapsed, + get: () => storageData.value?.collapsed ?? defaultStorageValue.collapsed, set: (value: boolean) => { if (!opts.value.collapsible) { return @@ -133,7 +137,7 @@ export function useResizable(key: string, options: Ref | UseR const previousSize = ref(opts.value.defaultSize) const size = computed({ - get: () => storageData.value.size, + get: () => storageData.value?.size ?? defaultStorageValue.size, set: (value) => { storageData.value.size = value } }) @@ -328,7 +332,7 @@ export function useResizable(key: string, options: Ref | UseR } // Initial sync of storage value to external collapsed ref - if (isRef(collapsed) && storageData.value.collapsed) { + if (isRef(collapsed) && storageData.value?.collapsed) { collapsed.value = storageData.value.collapsed } @@ -339,8 +343,12 @@ export function useResizable(key: string, options: Ref | UseR return } - if (storageData.value.collapsed !== value) { - storageData.value.collapsed = value + if (storageData.value?.collapsed !== value) { + if (storageData.value == null || typeof storageData.value !== 'object') { + storageData.value = { ...defaultStorageValue, collapsed: value } + } else { + storageData.value.collapsed = value + } } }) } From 4fc0fe01909d390ae0909ffdfc01c675dadd4b2f Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Thu, 28 May 2026 21:39:03 +0200 Subject: [PATCH 2/2] fix(DashboardSidebar): sync persisted collapsed false to external ref --- src/runtime/composables/useResizable.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/composables/useResizable.ts b/src/runtime/composables/useResizable.ts index 058cc563d4..bf1eee4106 100644 --- a/src/runtime/composables/useResizable.ts +++ b/src/runtime/composables/useResizable.ts @@ -332,7 +332,7 @@ export function useResizable(key: string, options: Ref | UseR } // Initial sync of storage value to external collapsed ref - if (isRef(collapsed) && storageData.value?.collapsed) { + if (isRef(collapsed) && typeof storageData.value?.collapsed === 'boolean') { collapsed.value = storageData.value.collapsed }