From 614d156592239eab6bd3ab65854d57dad54f54b5 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Tue, 7 Apr 2026 17:49:47 -0700 Subject: [PATCH 1/3] improvement(secrets): parallelize save mutations and add admin visibility for workspace secrets --- .../credentials/credentials-manager.tsx | 73 ++++++++++++++----- apps/sim/hooks/queries/environment.ts | 31 +------- 2 files changed, 57 insertions(+), 47 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/settings/components/credentials/credentials-manager.tsx b/apps/sim/app/workspace/[workspaceId]/settings/components/credentials/credentials-manager.tsx index d3916265d7..04a31a0a56 100644 --- a/apps/sim/app/workspace/[workspaceId]/settings/components/credentials/credentials-manager.tsx +++ b/apps/sim/app/workspace/[workspaceId]/settings/components/credentials/credentials-manager.tsx @@ -2,6 +2,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { createLogger } from '@sim/logger' +import { useQueryClient } from '@tanstack/react-query' import { Check, Clipboard, Key, Search } from 'lucide-react' import { useParams, useRouter } from 'next/navigation' import { @@ -42,6 +43,7 @@ import { useWorkspaceCredentials, type WorkspaceCredential, type WorkspaceCredentialRole, + workspaceCredentialKeys, } from '@/hooks/queries/credentials' import { usePersonalEnvironment, @@ -125,6 +127,7 @@ interface WorkspaceVariableRowProps { renamingKey: string | null pendingKeyValue: string hasCredential: boolean + isAdmin: boolean onRenameStart: (key: string) => void onPendingKeyChange: (value: string) => void onRenameEnd: (key: string, value: string) => void @@ -138,12 +141,18 @@ function WorkspaceVariableRow({ renamingKey, pendingKeyValue, hasCredential, + isAdmin, onRenameStart, onPendingKeyChange, onRenameEnd, onDelete, onViewDetails, }: WorkspaceVariableRowProps) { + const [valueFocused, setValueFocused] = useState(false) + + const maskedValueStyle = + isAdmin && !valueFocused ? ({ WebkitTextSecurity: 'disc' } as React.CSSProperties) : undefined + return (
{ + if (isAdmin) setValueFocused(true) + }} + onBlur={() => { + if (isAdmin) setValueFocused(false) + }} autoComplete='off' autoCorrect='off' autoCapitalize='off' spellCheck='false' + style={maskedValueStyle} className='h-9' />