From dd419ade94a992073dfd1a979bfeb8a5fadfb051 Mon Sep 17 00:00:00 2001 From: Guilhem Date: Thu, 12 Feb 2026 09:50:01 +0000 Subject: [PATCH] fix(frontend): redesign instance settings (#7916) * handle dirty config * Move instance update in drawer actions * Put windmill version in drawer header * Use sidebar instead of tabs * Rework user section * improve user table * Handle EE * Add settings section header * test-1 * option 2 * create new settings group * harmonize all settings inputs * improve members/users table styling * refactor instance setup * show user count * nit * Create setting card component * harmonize instance settings and workspace settings * fix python version loader * nit * clean code * nit * add email validation * fix reactivity issue on default value * fix dirty config check * fix object storage dirty config check * Fix object storage settings reactivity * fix indexer dirty reactivity * Add validation for indexer * fix sso dirty issues * clean * nit --- .../src/lib/components/Auth0Setting.svelte | 8 +- .../src/lib/components/AuthSettings.svelte | 75 +-- .../src/lib/components/AutheliaSetting.svelte | 5 +- .../lib/components/AuthentikSetting.svelte | 5 +- .../src/lib/components/CenteredModal.svelte | 18 +- .../lib/components/ConnectionSection.svelte | 142 ++-- frontend/src/lib/components/CustomSso.svelte | 14 +- .../src/lib/components/DeployToSetting.svelte | 220 ++++--- .../src/lib/components/Description.svelte | 4 +- .../components/ErrorOrRecoveryHandler.svelte | 2 +- frontend/src/lib/components/InputError.svelte | 15 + .../lib/components/InstanceNameEditor.svelte | 4 +- .../src/lib/components/InstanceSetting.svelte | 472 +++----------- .../lib/components/InstanceSettings.svelte | 613 +++++++++++------- .../src/lib/components/IntegerInput.svelte | 86 +++ .../lib/components/InviteGlobalUser.svelte | 51 +- .../src/lib/components/KanidmSetting.svelte | 5 +- .../src/lib/components/KeycloakSetting.svelte | 5 +- .../lib/components/NextcloudSetting.svelte | 5 +- .../src/lib/components/OAuthSetting.svelte | 5 +- .../ObjectStoreConfigSettings.svelte | 224 +++++-- .../src/lib/components/OktaSetting.svelte | 5 +- .../src/lib/components/PocketIdSetting.svelte | 5 +- .../lib/components/SuperadminSettings.svelte | 58 +- .../components/SuperadminSettingsInner.svelte | 487 ++++++++------ frontend/src/lib/components/Uptodate.svelte | 5 +- .../src/lib/components/ZitadelSetting.svelte | 5 +- .../common/breadcrumb/Breadcrumb.svelte | 36 +- .../common/drawer/DrawerContent.svelte | 2 +- .../lib/components/copilot/TestAIKey.svelte | 2 +- .../git_sync/GitSyncRepositoryCard.svelte | 6 +- .../components/git_sync/GitSyncSection.svelte | 29 +- .../src/lib/components/instanceSettings.ts | 331 ++++++++-- .../IndexerJobIndexSettings.svelte | 103 +++ .../IndexerLogIndexSettings.svelte | 76 +++ .../IndexerMemorySettings.svelte | 119 ++++ .../SecretBackendConfig.svelte | 30 +- .../instanceSettings/SettingCard.svelte | 71 ++ .../settings/WorkspaceUserSettings.svelte | 6 +- .../sidebar/CriticalAlertModalInner.svelte | 2 +- .../workspaceSettings/AISettings.svelte | 31 +- .../DataTableSettings.svelte | 2 +- .../workspaceSettings/DucklakeSettings.svelte | 2 +- .../workspaceSettings/ModelTokenLimits.svelte | 16 +- .../workspaceSettings/SettingsFooter.svelte | 7 +- .../workspaceSettings/StorageSettings.svelte | 2 +- .../WorkspaceIntegrations.svelte | 6 +- .../WorkspaceRulesets.svelte | 7 +- frontend/src/lib/stores.ts | 2 +- .../user/(user)/first-time/+page.svelte | 17 +- .../(user)/instance_settings/+page.svelte | 225 ++++++- .../(logged)/workspace_settings/+page.svelte | 95 ++- 52 files changed, 2411 insertions(+), 1357 deletions(-) create mode 100644 frontend/src/lib/components/InputError.svelte create mode 100644 frontend/src/lib/components/IntegerInput.svelte create mode 100644 frontend/src/lib/components/instanceSettings/IndexerJobIndexSettings.svelte create mode 100644 frontend/src/lib/components/instanceSettings/IndexerLogIndexSettings.svelte create mode 100644 frontend/src/lib/components/instanceSettings/IndexerMemorySettings.svelte create mode 100644 frontend/src/lib/components/instanceSettings/SettingCard.svelte diff --git a/frontend/src/lib/components/Auth0Setting.svelte b/frontend/src/lib/components/Auth0Setting.svelte index 8ad744f286..beb9ec03f9 100644 --- a/frontend/src/lib/components/Auth0Setting.svelte +++ b/frontend/src/lib/components/Auth0Setting.svelte @@ -7,6 +7,7 @@ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte' import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte' import TextInput from './text_input/TextInput.svelte' + import SettingCard from './instanceSettings/SettingCard.svelte' interface Props { value: any @@ -58,7 +59,7 @@ /> {#if enabled} -
+
+ {/if} diff --git a/frontend/src/lib/components/AuthSettings.svelte b/frontend/src/lib/components/AuthSettings.svelte index 8d9d90ff2b..c157808017 100644 --- a/frontend/src/lib/components/AuthSettings.svelte +++ b/frontend/src/lib/components/AuthSettings.svelte @@ -23,6 +23,7 @@ import Tooltip from './Tooltip.svelte' import { tick } from 'svelte' import { Popover } from './meltComponents' + import SettingsPageHeader from './settings/SettingsPageHeader.svelte' interface Props { snowflakeAccountIdentifier?: string @@ -30,6 +31,8 @@ requirePreexistingUserForOauth?: boolean baseUrl?: string scim?: import('svelte').Snippet + tab?: 'sso' | 'oauth' | 'scim' + hideTabs?: boolean } let { @@ -37,7 +40,9 @@ oauths = $bindable(), requirePreexistingUserForOauth = $bindable(), baseUrl, - scim + scim, + tab = $bindable('sso'), + hideTabs = false }: Props = $props() $effect(() => { @@ -87,8 +92,6 @@ let ssoClientName = $state('') let ssoNameInput = $state() - let tab: 'sso' | 'oauth' | 'scim' = $state('sso') - function createOAuthClient(name: string) { if (oauths && name) { // Create a new object to ensure the new item is added at the end @@ -212,34 +215,30 @@ } -
- - - - - -
+{#if !hideTabs} +
+ + + + + +
+{/if}
{#if oauths} {#if tab === 'sso'} + {#if !$enterpriseLicense || $enterpriseLicense.endsWith('_pro')} - + Without EE, the number of SSO users is limited to 10. SCIM/SAML is available on EE
{/if} - -
-
When at least one of the below options is set, users will be able to login to Windmill - via their third-party account. -
To test SSO, the recommended workflow is to to save the settings and try to login - in an incognito window. - Learn more -
-
-
-
{/if} {:else if tab == 'scim'} + {@render scim?.()} {/if} {/if} diff --git a/frontend/src/lib/components/AutheliaSetting.svelte b/frontend/src/lib/components/AutheliaSetting.svelte index ece8cb7d58..bd32b632a9 100644 --- a/frontend/src/lib/components/AutheliaSetting.svelte +++ b/frontend/src/lib/components/AutheliaSetting.svelte @@ -2,6 +2,7 @@ import IconedResourceType from './IconedResourceType.svelte' import TextInput from './text_input/TextInput.svelte' import Toggle from './Toggle.svelte' + import SettingCard from './instanceSettings/SettingCard.svelte' export let value: any @@ -46,7 +47,7 @@ /> {#if enabled} -
+ -
+ {/if}
diff --git a/frontend/src/lib/components/AuthentikSetting.svelte b/frontend/src/lib/components/AuthentikSetting.svelte index 70d56c5abf..6aa6a76d57 100644 --- a/frontend/src/lib/components/AuthentikSetting.svelte +++ b/frontend/src/lib/components/AuthentikSetting.svelte @@ -1,6 +1,7 @@
-
1080 ? 'pt-28' : 'pt-12')} > +
1080 ? 'pt-28' : 'pt-12' + )} + > {#if (!disableLogo && !$enterpriseLicense) || !$whitelabelNameStore}