Spaces:
Build error
Build error
| import React from "react"; | |
| import { useTranslation } from "react-i18next"; | |
| import { I18nKey } from "#/i18n/declaration"; | |
| import { BrandButton } from "#/components/features/settings/brand-button"; | |
| import { LoadingSpinner } from "#/components/shared/loading-spinner"; | |
| import { ApiKey } from "#/api/api-keys"; | |
| import { | |
| displayErrorToast, | |
| displaySuccessToast, | |
| } from "#/utils/custom-toast-handlers"; | |
| import { ApiKeyModalBase } from "./api-key-modal-base"; | |
| import { useDeleteApiKey } from "#/hooks/mutation/use-delete-api-key"; | |
| interface DeleteApiKeyModalProps { | |
| isOpen: boolean; | |
| keyToDelete: ApiKey | null; | |
| onClose: () => void; | |
| } | |
| export function DeleteApiKeyModal({ | |
| isOpen, | |
| keyToDelete, | |
| onClose, | |
| }: DeleteApiKeyModalProps) { | |
| const { t } = useTranslation(); | |
| const deleteApiKeyMutation = useDeleteApiKey(); | |
| const handleDeleteKey = async () => { | |
| if (!keyToDelete) return; | |
| try { | |
| await deleteApiKeyMutation.mutateAsync(keyToDelete.id); | |
| displaySuccessToast(t(I18nKey.SETTINGS$API_KEY_DELETED)); | |
| onClose(); | |
| } catch (error) { | |
| displayErrorToast(t(I18nKey.ERROR$GENERIC)); | |
| } | |
| }; | |
| if (!keyToDelete) return null; | |
| const modalFooter = ( | |
| <> | |
| <BrandButton | |
| type="button" | |
| variant="danger" | |
| className="grow" | |
| onClick={handleDeleteKey} | |
| isDisabled={deleteApiKeyMutation.isPending} | |
| > | |
| {deleteApiKeyMutation.isPending ? ( | |
| <LoadingSpinner size="small" /> | |
| ) : ( | |
| t(I18nKey.BUTTON$DELETE) | |
| )} | |
| </BrandButton> | |
| <BrandButton | |
| type="button" | |
| variant="secondary" | |
| className="grow" | |
| onClick={onClose} | |
| isDisabled={deleteApiKeyMutation.isPending} | |
| > | |
| {t(I18nKey.BUTTON$CANCEL)} | |
| </BrandButton> | |
| </> | |
| ); | |
| return ( | |
| <ApiKeyModalBase | |
| isOpen={isOpen && !!keyToDelete} | |
| title={t(I18nKey.SETTINGS$DELETE_API_KEY)} | |
| footer={modalFooter} | |
| > | |
| <div data-testid="delete-api-key-modal"> | |
| <p className="text-sm"> | |
| {t(I18nKey.SETTINGS$DELETE_API_KEY_CONFIRMATION, { | |
| name: keyToDelete.name, | |
| })} | |
| </p> | |
| </div> | |
| </ApiKeyModalBase> | |
| ); | |
| } | |