import { PencilSquare, SquareTwoStack, Trash, XCircle } from "@medusajs/icons" import { AdminApiKeyResponse } from "@medusajs/types" import { toast, usePrompt } from "@medusajs/ui" import { useTranslation } from "react-i18next" import { ActionMenu } from "../../../../../components/common/action-menu" import { useDeleteApiKey, useRevokeApiKey, } from "../../../../../hooks/api/api-keys" export const ApiKeyRowActions = ({ apiKey, }: { apiKey: AdminApiKeyResponse["api_key"] }) => { const { mutateAsync: revokeAsync } = useRevokeApiKey(apiKey.id) const { mutateAsync: deleteAsync } = useDeleteApiKey(apiKey.id) const { t } = useTranslation() const prompt = usePrompt() const handleDelete = async () => { const res = await prompt({ title: t("general.areYouSure"), description: t("apiKeyManagement.delete.warning", { title: apiKey.title, }), confirmText: t("actions.delete"), cancelText: t("actions.cancel"), }) if (!res) { return } await deleteAsync(undefined, { onSuccess: () => { toast.success( t("apiKeyManagement.delete.successToast", { title: apiKey.title, }) ) }, onError: (err) => { toast.error(err.message) }, }) } const handleRevoke = async () => { const res = await prompt({ title: t("general.areYouSure"), description: t("apiKeyManagement.revoke.warning", { title: apiKey.title, }), confirmText: t("apiKeyManagement.actions.revoke"), cancelText: t("actions.cancel"), }) if (!res) { return } await revokeAsync(undefined, { onSuccess: () => { toast.success( t("apiKeyManagement.revoke.successToast", { title: apiKey.title, }) ) }, onError: (err) => { toast.error(err.message) }, }) } const handleCopyToken = () => { navigator.clipboard.writeText(apiKey.token) toast.success(t("apiKeyManagement.actions.copySuccessToast")) } return ( , label: t("actions.edit"), to: `${apiKey.id}/edit`, }, ...(apiKey.type !== "secret" ? [ { label: t("apiKeyManagement.actions.copy"), onClick: handleCopyToken, icon: , }, ] : []), ], }, { actions: [ { icon: , label: t("apiKeyManagement.actions.revoke"), onClick: handleRevoke, disabled: !!apiKey.revoked_at, }, { icon: , label: t("actions.delete"), onClick: handleDelete, disabled: !apiKey.revoked_at, }, ], }, ]} /> ) }