From f54b9041d0fa017b44d94b67074e023b908114db Mon Sep 17 00:00:00 2001 From: waleed Date: Sat, 23 May 2026 11:50:35 -0700 Subject: [PATCH 1/4] improvement(kb-connectors): align connector UI surfaces and strip redundant description suffix - Fix icon colors to use --text-icon token across connector cards and modal - Switch Reconnect/Update access buttons from active to primary variant - Lift search box surface from --surface-2 to --surface-3 so it's visible against modal bg - Replace raw + )} - + Connected Sources Manage connected data sources for this knowledge base @@ -1535,13 +1535,13 @@ function TagFilterSection({ tagDefinitions, entries, onChange }: TagFilterSectio >
- +
{step === 'select-type' ? (
-
+
- +
{config.name} diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/connector-selector-field/connector-selector-field.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/connector-selector-field/connector-selector-field.tsx index ea39d97cfac..4106c94d286 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/connector-selector-field/connector-selector-field.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/connector-selector-field/connector-selector-field.tsx @@ -72,7 +72,7 @@ export function ConnectorSelectorField({ if (isLoading && isEnabled) { return ( -
+
Loading…
diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/connectors-section/connectors-section.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/connectors-section/connectors-section.tsx index b388ff2b246..a70738c7cd4 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/connectors-section/connectors-section.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/connectors-section/connectors-section.tsx @@ -372,7 +372,7 @@ function ConnectorCard({
- {Icon && } + {Icon && } {connector.status === 'disabled' && ( )} @@ -532,7 +532,7 @@ function ConnectorCard({

{canEdit && serviceId && providerId && (
{canEdit && ( + ) })}
From f5d22b9f3ab523e88ea985acf53fd79f3f400f13 Mon Sep 17 00:00:00 2001 From: waleed Date: Sat, 23 May 2026 12:22:30 -0700 Subject: [PATCH 3/4] fix(resource): prevent permission-gated breadcrumb items from flashing on load --- .../workspace/[workspaceId]/files/files.tsx | 4 ++- .../[workspaceId]/knowledge/[id]/base.tsx | 28 +++++++++++++++---- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/files/files.tsx b/apps/sim/app/workspace/[workspaceId]/files/files.tsx index 1e715a8a373..6aa7d5a40b1 100644 --- a/apps/sim/app/workspace/[workspaceId]/files/files.tsx +++ b/apps/sim/app/workspace/[workspaceId]/files/files.tsx @@ -1585,10 +1585,11 @@ export function Files() { } : undefined, dropdownItems: - isCurrentFolder && canEdit + isCurrentFolder && (canEdit || userPermissions.isLoading) ? [ { label: 'Rename', + disabled: !canEdit, onClick: () => breadcrumbRenameRef.current.startRename(folder.id, folder.name), }, ] @@ -1605,6 +1606,7 @@ export function Files() { router, workspaceId, canEdit, + userPermissions.isLoading, breadcrumbRename.editingId, breadcrumbRename.editValue, ]) diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx index 7fe7130da14..43071af70a7 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx @@ -814,15 +814,26 @@ export function KnowledgeBase({ } : undefined, dropdownItems: [ - ...(userPermissions.canEdit + ...(userPermissions.canEdit || userPermissions.isLoading ? [ { label: 'Rename', icon: Pencil, + disabled: !userPermissions.canEdit, onClick: () => kbRename.startRename(id, knowledgeBaseName), }, - { label: 'Tags', icon: Tag, onClick: () => setShowTagsModal(true) }, - { label: 'Delete', icon: Trash, onClick: () => setShowDeleteDialog(true) }, + { + label: 'Tags', + icon: Tag, + disabled: !userPermissions.canEdit, + onClick: () => setShowTagsModal(true), + }, + { + label: 'Delete', + icon: Trash, + disabled: !userPermissions.canEdit, + onClick: () => setShowDeleteDialog(true), + }, ] : []), ], @@ -830,8 +841,15 @@ export function KnowledgeBase({ ] const headerActions: HeaderAction[] = [ - ...(userPermissions.canEdit - ? [{ label: 'New connector', icon: Plus, onClick: () => setShowAddConnectorModal(true) }] + ...(userPermissions.canEdit || userPermissions.isLoading + ? [ + { + label: 'New connector', + icon: Plus, + disabled: !userPermissions.canEdit, + onClick: () => setShowAddConnectorModal(true), + }, + ] : []), ] From b96b7e757707cecacb239ef00dfdc13a1366662a Mon Sep 17 00:00:00 2001 From: waleed Date: Sat, 23 May 2026 12:34:43 -0700 Subject: [PATCH 4/4] fix(resource): self-remove keydown listener on Escape and include session loading in isLoading guard --- .../[workspaceId]/components/resource/resource.tsx | 5 ++++- apps/sim/hooks/use-user-permissions.ts | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/components/resource/resource.tsx b/apps/sim/app/workspace/[workspaceId]/components/resource/resource.tsx index 51e4ef30e7b..93512d9467f 100644 --- a/apps/sim/app/workspace/[workspaceId]/components/resource/resource.tsx +++ b/apps/sim/app/workspace/[workspaceId]/components/resource/resource.tsx @@ -233,7 +233,10 @@ export const ResourceTable = memo(function ResourceTable({ if (!contextMenuRowId) return const clear = () => setContextMenuRowId(null) const handleKeyDown = (e: KeyboardEvent) => { - if (e.key === 'Escape') clear() + if (e.key === 'Escape') { + document.removeEventListener('keydown', handleKeyDown) + clear() + } } const timeoutId = setTimeout(() => { document.addEventListener('pointerdown', clear, { once: true }) diff --git a/apps/sim/hooks/use-user-permissions.ts b/apps/sim/hooks/use-user-permissions.ts index d17e4a5fd04..8b08e9d5999 100644 --- a/apps/sim/hooks/use-user-permissions.ts +++ b/apps/sim/hooks/use-user-permissions.ts @@ -33,17 +33,17 @@ export function useUserPermissions( permissionsLoading = false, permissionsError: string | null = null ): WorkspaceUserPermissions { - const { data: session } = useSession() + const { data: session, isPending: sessionLoading } = useSession() const userPermissions = useMemo((): WorkspaceUserPermissions => { const sessionEmail = session?.user?.email - if (permissionsLoading || !sessionEmail) { + if (permissionsLoading || sessionLoading || !sessionEmail) { return { canRead: false, canEdit: false, canAdmin: false, userPermissions: 'read', - isLoading: permissionsLoading, + isLoading: permissionsLoading || sessionLoading, error: permissionsError, } } @@ -99,7 +99,7 @@ export function useUserPermissions( isLoading: false, error: permissionsError, } - }, [session, workspacePermissions, permissionsLoading, permissionsError]) + }, [session, sessionLoading, workspacePermissions, permissionsLoading, permissionsError]) return userPermissions }