From 9afc2eaaa70423f09310a2d68b9a019b9b7d9887 Mon Sep 17 00:00:00 2001 From: Bryan Frimin Date: Wed, 22 Apr 2026 18:12:00 +0200 Subject: [PATCH] Track copied config ID per row instead of globally The useCopy hook returns a single boolean, so copying one row's configuration ID would flip every row to "Copied!". Track the specific copied ID in state so only the clicked row shows feedback. Signed-off-by: Bryan Frimin --- .../settings/_components/SAMLConfigurationList.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/console/src/pages/iam/organizations/settings/_components/SAMLConfigurationList.tsx b/apps/console/src/pages/iam/organizations/settings/_components/SAMLConfigurationList.tsx index 5034aed05..5c3096d5b 100644 --- a/apps/console/src/pages/iam/organizations/settings/_components/SAMLConfigurationList.tsx +++ b/apps/console/src/pages/iam/organizations/settings/_components/SAMLConfigurationList.tsx @@ -14,6 +14,7 @@ import { useCopy } from "@probo/hooks"; import { useTranslate } from "@probo/i18n"; +import { useCallback, useRef, useState } from "react"; import { Button, Card, @@ -80,7 +81,14 @@ export function SAMLConfigurationList(props: { const { __ } = useTranslate(); const confirm = useConfirm(); - const [isIdCopied, copyId] = useCopy(); + const [copiedId, setCopiedId] = useState(null); + const copiedIdTimer = useRef>(); + const copyId = useCallback((id: string) => { + navigator.clipboard.writeText(id); + setCopiedId(id); + clearTimeout(copiedIdTimer.current); + copiedIdTimer.current = setTimeout(() => setCopiedId(null), 2000); + }, []); const [isCopied, copy] = useCopy(); const { @@ -168,7 +176,7 @@ export function SAMLConfigurationList(props: { className="font-mono text-xs text-gray-600 hover:text-gray-900" title={__("Click to copy")} > - {isIdCopied ? __("Copied!") : config.id} + {copiedId === config.id ? __("Copied!") : config.id}