fix(workspace): reveal shared access tokens reliably

This commit is contained in:
Benjamin Shafii
2026-03-31 11:22:40 -07:00
parent b292e0f942
commit 73fabb1650
2 changed files with 13 additions and 13 deletions

View File

@@ -30,8 +30,8 @@ export default function ShareWorkspaceAccessPanel(props: {
fields: ShareField[];
copiedKey: string | null;
onCopy: (value: string, key: string) => void;
revealedByIndex: Record<number, boolean>;
onToggleReveal: (index: number) => void;
revealedByKey: Record<string, boolean>;
onToggleReveal: (key: string) => void;
collaboratorExpanded: boolean;
onToggleCollaboratorExpanded: () => void;
remoteAccess?: {
@@ -52,14 +52,14 @@ export default function ShareWorkspaceAccessPanel(props: {
const renderCredentialField = (field: ShareField, index: number, keyPrefix: string) => {
const key = `${keyPrefix}:${field.label}:${index}`;
const isSecret = Boolean(field.secret);
const revealed = Boolean(props.revealedByIndex[index]);
const revealed = () => Boolean(props.revealedByKey[key]);
return (
<div>
<label class="mb-1.5 block text-[13px] font-medium text-dls-text">{displayFieldLabel(field)}</label>
<div class="relative flex items-center gap-2">
<input
type={isSecret && !revealed ? "password" : "text"}
type={isSecret && !revealed() ? "password" : "text"}
readonly
value={field.value || field.placeholder || ""}
class={`${inputClass} font-mono text-[12px]`}
@@ -67,12 +67,12 @@ export default function ShareWorkspaceAccessPanel(props: {
<Show when={isSecret}>
<button
type="button"
onClick={() => props.onToggleReveal(index)}
onClick={() => props.onToggleReveal(key)}
disabled={!field.value}
class={pillSecondaryClass}
title={revealed ? "Hide password" : "Reveal password"}
title={revealed() ? "Hide password" : "Reveal password"}
>
<Show when={revealed} fallback={<Eye size={14} />}>
<Show when={revealed()} fallback={<Eye size={14} />}>
<EyeOff size={14} />
</Show>
</button>

View File

@@ -17,7 +17,7 @@ import type { ShareView, ShareWorkspaceModalProps } from "./types";
export default function ShareWorkspaceModal(props: ShareWorkspaceModalProps) {
const [activeView, setActiveView] = createSignal<ShareView>("chooser");
const [revealedByIndex, setRevealedByIndex] = createSignal<Record<number, boolean>>({});
const [revealedByKey, setRevealedByKey] = createSignal<Record<string, boolean>>({});
const [copiedKey, setCopiedKey] = createSignal<string | null>(null);
const [collaboratorExpanded, setCollaboratorExpanded] = createSignal(false);
const [remoteAccessEnabled, setRemoteAccessEnabled] = createSignal(false);
@@ -36,7 +36,7 @@ export default function ShareWorkspaceModal(props: ShareWorkspaceModalProps) {
(open) => {
if (!open) return;
setActiveView("chooser");
setRevealedByIndex({});
setRevealedByKey({});
setCopiedKey(null);
setCollaboratorExpanded(false);
setRemoteAccessEnabled(props.remoteAccess?.enabled === true);
@@ -213,11 +213,11 @@ export default function ShareWorkspaceModal(props: ShareWorkspaceModalProps) {
fields={props.fields}
copiedKey={copiedKey()}
onCopy={(value, key) => void handleCopy(value, key)}
revealedByIndex={revealedByIndex()}
onToggleReveal={(index) =>
setRevealedByIndex((prev) => ({
revealedByKey={revealedByKey()}
onToggleReveal={(key) =>
setRevealedByKey((prev) => ({
...prev,
[index]: !prev[index],
[key]: !prev[key],
}))
}
collaboratorExpanded={collaboratorExpanded()}