import { useState } from "react"; import dayjs from "@calcom/dayjs"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import type { RouterOutputs } from "@calcom/trpc/react"; import { trpc } from "@calcom/trpc/react"; import classNames from "@calcom/ui/classNames"; import { Badge } from "@calcom/ui/components/badge"; import { Button } from "@calcom/ui/components/button"; import { Dialog } from "@calcom/ui/components/dialog"; import { ConfirmationDialogContent } from "@calcom/ui/components/dialog"; import { Dropdown, DropdownItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@calcom/ui/components/dropdown"; import { showToast } from "@calcom/ui/components/toast"; import { revalidateApiKeysList } from "@calcom/web/app/(use-page-wrapper)/settings/(settings-layout)/developer/api-keys/actions"; export type TApiKeys = RouterOutputs["viewer"]["apiKeys"]["list"][number]; const ApiKeyListItem = ({ apiKey, lastItem, onEditClick, }: { apiKey: TApiKeys; lastItem: boolean; onEditClick: () => void; }) => { const { t } = useLocale(); const utils = trpc.useUtils(); const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const isExpired = apiKey?.expiresAt ? apiKey.expiresAt < new Date() : null; const neverExpires = apiKey?.expiresAt === null; const deleteApiKey = trpc.viewer.apiKeys.delete.useMutation({ async onSuccess() { await utils.viewer.apiKeys.list.invalidate(); revalidateApiKeysList(); showToast(t("api_key_deleted"), "success"); }, onError(err) { console.error(err); showToast(t("something_went_wrong"), "error"); }, }); return (

{apiKey?.note ? apiKey.note : t("api_key_no_note")}

{!neverExpires && isExpired && {t("expired")}} {!isExpired && {t("active")}}

{neverExpires ? (

{t("api_key_never_expires")}
) : ( `${isExpired ? t("expired") : t("expires")} ${dayjs(apiKey?.expiresAt?.toString()).fromNow()}` )}

{ deleteApiKey.mutate({ id: apiKey.id, }); setDeleteDialogOpen(false); }}>

{t("delete_api_key_warning")}

); }; export default ApiKeyListItem;