import type { AccessCode } from '@seamapi/types/connect' import { CopyIcon } from 'lib/icons/Copy.js' import { useDeleteAccessCode } from 'lib/seam/access-codes/use-delete-access-code.js' import { Button } from 'lib/ui/Button.js' import { copyToClipboard } from 'lib/ui/clipboard.js' import { MenuItem } from 'lib/ui/Menu/MenuItem.js' import { MoreActionsMenu } from 'lib/ui/Menu/MoreActionsMenu.js' import { useToggle } from 'lib/ui/use-toggle.js' export interface AccessCodeMenuProps { accessCode: AccessCode onEdit: () => void onDeleteSuccess: () => void onViewDetails: () => void disableEditAccessCode: boolean disableDeleteAccessCode: boolean } export function AccessCodeMenu(props: AccessCodeMenuProps): JSX.Element { const [deleteConfirmationVisible, toggleDeleteConfirmation] = useToggle() return ( { if (deleteConfirmationVisible) { toggleDeleteConfirmation() } }, }} > ) } interface ContentProps extends AccessCodeMenuProps { deleteConfirmationVisible: boolean toggleDeleteConfirmation: () => void } function Content({ accessCode, onViewDetails, disableEditAccessCode, disableDeleteAccessCode, onEdit, onDeleteSuccess, deleteConfirmationVisible, toggleDeleteConfirmation, }: ContentProps): JSX.Element { const deleteAccessCode = useDeleteAccessCode() const isAccessCodeBeingRemoved = accessCode.status === 'removing' if (deleteConfirmationVisible) { return (
{t.deleteCodeConfirmation}
) } return ( <> { void copyToClipboard(accessCode.code ?? '') }} >
{t.copyCode} - {accessCode.code}
{t.viewCodeDetails} {!disableEditAccessCode && !isAccessCodeBeingRemoved && ( {t.editCode} )} {!disableDeleteAccessCode && !isAccessCodeBeingRemoved && ( <>
{ event.stopPropagation() // Prevent hiding menu on outside click toggleDeleteConfirmation() }} preventDefaultOnClick className='seam-text-danger' > {t.deleteCode} )} ) } const t = { copyCode: 'Copy code', codeIssue: 'code issue', codeIssues: 'code issues', editCode: 'Edit code', viewCodeDetails: 'View code details', deleteCode: 'Delete code', deleteCodeConfirmation: 'Delete this code and data?', cancelDelete: 'Cancel', confirmDelete: 'Delete', }