From a296c084e12d8fa3b3eea2516ec5aee8441a48ba Mon Sep 17 00:00:00 2001 From: Alexander Petric Date: Wed, 16 Apr 2025 11:32:30 -0400 Subject: [PATCH] fix: show workspace color if superadmin and not in workspace + change workspace name when switching workspace (#5625) * fix: show workspace color if superadmin and not in workspace * svelte 5 * move local workspace color to store * fix: changing name not reactive when swtiching workspace --- .../src/lib/components/ApiConnectForm.svelte | 16 +++--- .../settings/ChangeWorkspaceColor.svelte | 51 +++++++++---------- .../settings/ChangeWorkspaceName.svelte | 20 ++++---- .../components/sidebar/WorkspaceMenu.svelte | 9 ++-- frontend/src/lib/stores.ts | 32 +++++++++++- 5 files changed, 79 insertions(+), 49 deletions(-) diff --git a/frontend/src/lib/components/ApiConnectForm.svelte b/frontend/src/lib/components/ApiConnectForm.svelte index 877a5aef08..9009899aec 100644 --- a/frontend/src/lib/components/ApiConnectForm.svelte +++ b/frontend/src/lib/components/ApiConnectForm.svelte @@ -5,7 +5,13 @@ type ResourceType, type GetGlobalConnectedRepositoriesResponse } from '$lib/gen' - import { workspaceStore, enterpriseLicense, userWorkspaces, userStore } from '$lib/stores' + import { + workspaceStore, + enterpriseLicense, + userWorkspaces, + userStore, + workspaceColor + } from '$lib/stores' import { base } from '$lib/base' import { emptySchema, emptyString } from '$lib/utils' import SchemaForm from './SchemaForm.svelte' @@ -516,14 +522,10 @@ {installation.account_id} - {#if $userWorkspaces.find((w) => w.id === installation.workspace_id)?.color} + {#if $workspaceColor} {installation.workspace_id} diff --git a/frontend/src/lib/components/settings/ChangeWorkspaceColor.svelte b/frontend/src/lib/components/settings/ChangeWorkspaceColor.svelte index 1527ccc3fe..3753051eaf 100644 --- a/frontend/src/lib/components/settings/ChangeWorkspaceColor.svelte +++ b/frontend/src/lib/components/settings/ChangeWorkspaceColor.svelte @@ -1,5 +1,5 @@ @@ -55,10 +54,10 @@

Workspace color

- {#if savedWorkspaceColor} + {#if $workspaceColor}
{:else} No color set @@ -76,9 +75,7 @@ }} />
-

- Color to identify the current workspace in the list of workspaces -

+

Color to identify the current workspace in the list of workspaces

@@ -88,12 +85,12 @@
{#if colorEnabled} - + {/if} diff --git a/frontend/src/lib/components/settings/ChangeWorkspaceName.svelte b/frontend/src/lib/components/settings/ChangeWorkspaceName.svelte index 52b9dfb2de..1fabd3b231 100644 --- a/frontend/src/lib/components/settings/ChangeWorkspaceName.svelte +++ b/frontend/src/lib/components/settings/ChangeWorkspaceName.svelte @@ -6,15 +6,21 @@ import Modal from '../common/modal/Modal.svelte' import { Pen } from 'lucide-svelte' - let newName = '' - let currentName = '' + let { open = false } = $props<{ open?: boolean }>() + + let newName = $state('') + let currentName = $state('') + + $effect(() => { + if ($workspaceStore) { + getWorkspaceName() + } + }) async function getWorkspaceName() { currentName = await WorkspaceService.getWorkspaceName({ workspace: $workspaceStore! }) } - getWorkspaceName() - async function renameWorkspace() { open = false await WorkspaceService.changeWorkspaceName({ @@ -28,8 +34,6 @@ newName = '' getWorkspaceName() } - - export let open = false
@@ -50,9 +54,7 @@ />
-

- Displayable name -

+

Displayable name

diff --git a/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte b/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte index c110f5df4f..f7e481b7cb 100644 --- a/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte +++ b/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte @@ -5,7 +5,8 @@ userStore, userWorkspaces, workspaceStore, - workspaceUsageStore + workspaceUsageStore, + workspaceColor } from '$lib/stores' import { Building, Plus, Settings } from 'lucide-svelte' import MenuButton from '$lib/components/sidebar/MenuButton.svelte' @@ -61,7 +62,7 @@ icon={Building} label={$workspaceStore ?? ''} {isCollapsed} - color={$userWorkspaces.find((w) => w.id === $workspaceStore)?.color} + color={$workspaceColor} {trigger} /> @@ -153,9 +154,7 @@ >{$workspaceUsageStore}/1000 free workspace execs
-
{/if} diff --git a/frontend/src/lib/stores.ts b/frontend/src/lib/stores.ts index 5168b184c4..20e48d235c 100644 --- a/frontend/src/lib/stores.ts +++ b/frontend/src/lib/stores.ts @@ -9,7 +9,8 @@ import { type OperatorSettings, type TokenResponse, type UserWorkspaceList, - type WorkspaceDefaultScripts + type WorkspaceDefaultScripts, + WorkspaceService } from './gen' import { getLocalSetting } from './utils' @@ -202,3 +203,32 @@ export const dbSchemas = writable({}) export const instanceSettingsSelectedTab = writable('Core') export const isCriticalAlertsUIOpen = writable(false) + +export const workspaceColor: Readable = derived( + [workspaceStore, usersWorkspaceStore, superadmin], + ([workspaceStore, usersWorkspaceStore, superadmin], set: (value: string | undefined) => void) => { + if (!workspaceStore) { + set(undefined) + return + } + + // First try to get the color from usersWorkspaceStore + const color = usersWorkspaceStore?.workspaces.find((w) => w.id === workspaceStore)?.color + + if (color) { + set(color) + return + } + + // If not found and user is superadmin, try to get it from superadmin list + if (!superadmin) { + set(undefined) + return + } + + WorkspaceService.listWorkspacesAsSuperAdmin().then((workspaces) => { + const superadminColor = workspaces.find((w) => w.id === workspaceStore)?.color + set(superadminColor) + }) + } +)