import { useCallback } from "react"; import { faCheck, faCopy, faEdit, faEllipsisV, faRightToBracket, faRotate, faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { formatDistance } from "date-fns"; import { FolderIcon, PackageOpenIcon } from "lucide-react"; import { twMerge } from "tailwind-merge"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, IconButton, Td, Tooltip, Tr } from "@app/components/v2"; import { HighlightText } from "@app/components/v2/HighlightText"; import { Badge } from "@app/components/v3"; import { ProjectPermissionSub } from "@app/context"; import { ProjectPermissionPamAccountActions } from "@app/context/ProjectPermissionContext/types"; import { useToggle } from "@app/hooks"; import { PAM_RESOURCE_TYPE_MAP, TPamAccount } from "@app/hooks/api/pam"; type Props = { account: TPamAccount; onAccess: (resource: TPamAccount) => void; onUpdate: (resource: TPamAccount) => void; onDelete: (resource: TPamAccount) => void; search: string; isFlatView: boolean; accountPath?: string; }; export const PamAccountRow = ({ account, search, onAccess, onUpdate, onDelete, isFlatView, accountPath }: Props) => { const { id, name } = account; const { image, name: resourceTypeName } = PAM_RESOURCE_TYPE_MAP[account.resource.resourceType]; const [isIdCopied, setIsIdCopied] = useToggle(false); const handleCopyId = useCallback( (idToCopy: string) => { setIsIdCopied.on(); navigator.clipboard.writeText(idToCopy); createNotification({ text: "Account ID copied to clipboard", type: "info" }); const timer = setTimeout(() => setIsIdCopied.off(), 2000); // eslint-disable-next-line consistent-return return () => clearTimeout(timer); }, [isIdCopied] ); return (