From 1eda69ffb93a7219ab649987ba41adfd28c9e1ed Mon Sep 17 00:00:00 2001 From: Diego Imbert Date: Fri, 9 Jan 2026 14:56:26 +0100 Subject: [PATCH 1/2] nit --- .../components/workspaceSettings/StorageSettings.svelte | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/components/workspaceSettings/StorageSettings.svelte b/frontend/src/lib/components/workspaceSettings/StorageSettings.svelte index 75f5da9ddb..e3330b3f02 100644 --- a/frontend/src/lib/components/workspaceSettings/StorageSettings.svelte +++ b/frontend/src/lib/components/workspaceSettings/StorageSettings.svelte @@ -188,7 +188,13 @@ - Please save settings first + + {#if emptyString(tableRow[1].resourcePath)} + Please select a storage resource + {:else if isDirty(tableRow[0])} + Please save your changes + {/if} + {:else} Date: Fri, 9 Jan 2026 15:00:48 +0100 Subject: [PATCH 2/2] super nit --- .../workspaceSettings/StorageSettings.svelte | 26 +++++++------------ frontend/src/lib/utils.ts | 2 +- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/frontend/src/lib/components/workspaceSettings/StorageSettings.svelte b/frontend/src/lib/components/workspaceSettings/StorageSettings.svelte index e3330b3f02..82d1763bdc 100644 --- a/frontend/src/lib/components/workspaceSettings/StorageSettings.svelte +++ b/frontend/src/lib/components/workspaceSettings/StorageSettings.svelte @@ -72,22 +72,16 @@ }) ?? [] ) ) - let primaryStorageIsDirty: boolean = $derived( - !deepEqual( - pick(s3ResourceSavedSettings, [ - 'resourcePath', - 'resourceType', - 'publicResource', - 'advancedPermissions' - ]), - pick(s3ResourceSettings, [ - 'resourcePath', - 'resourceType', - 'publicResource', - 'advancedPermissions' - ]) - ) - ) + + let primaryStorageIsDirty: boolean = $derived.by(() => { + const fields = [ + 'resourcePath', + 'resourceType', + 'publicResource', + 'advancedPermissions' + ] as const + return !deepEqual(pick(s3ResourceSavedSettings, fields), pick(s3ResourceSettings, fields)) + }) function isDirty(name: string | null): boolean { return name === null ? primaryStorageIsDirty : secondaryStorageIsDirty[name] } diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts index 0ae0475a92..d548772fd0 100644 --- a/frontend/src/lib/utils.ts +++ b/frontend/src/lib/utils.ts @@ -1972,7 +1972,7 @@ export function buildReactiveObj(fields: { return obj } -export function pick(obj: T, keys: K[]): Pick { +export function pick(obj: T, keys: readonly K[]): Pick { const result = {} as Pick for (const key of keys) { if (key in obj) {