import React, { useState } from 'react' import { __ } from '@wordpress/i18n' import { createInterpolateElement } from '@wordpress/element' import { ConfirmDialog } from '../ConfirmDialog' import { useSnippetsAPI } from '../../../hooks/useSnippetsAPI' import type { Snippet } from '../../../types/Snippet' const TrashActiveConfirmMessage = () => <>

{createInterpolateElement( __('This snippet is currently active.', 'code-snippets'), { strong: } )}

{__('Moving it to the trash will also deactivate it.', 'code-snippets')}

const PermanentDeleteConfirmMessage = () => <>

{createInterpolateElement( __('The snippet will be permanently deleted.', 'code-snippets'), { strong: } )}

{__('This action cannot be undone.', 'code-snippets')}

export interface ConfirmDeleteDialogProps { snippet: Snippet isDialogOpen: boolean setIsDialogOpen: (isOpen: boolean) => void makeDeleteRequest: () => Promise } export const ConfirmDeleteDialog: React.FC = ({ snippet, isDialogOpen, setIsDialogOpen, makeDeleteRequest }) => setIsDialogOpen(false)} onConfirm={() => { setIsDialogOpen(false) void makeDeleteRequest() }} > {snippet.trashed ? : } export interface UseDeleteSnippetProps { snippet: Snippet setIsWorking?: (isWorking: boolean) => void onSuccess?: (() => Promise) | VoidFunction onError?: (error: unknown) => void } export interface ConfirmDeleteDialog { requestDelete: () => Promise deleteDialogProps: ConfirmDeleteDialogProps } export const useDeleteSnippet = ({ snippet, setIsWorking, onSuccess, onError }: UseDeleteSnippetProps): ConfirmDeleteDialog => { const snippetsAPI = useSnippetsAPI() const [isDialogOpen, setIsDialogOpen] = useState(false) const makeDeleteRequest = async () => { setIsWorking?.(true) try { await snippetsAPI.delete(snippet) await onSuccess?.() } catch (error) { onError?.(error) } finally { setIsWorking?.(false) } } const requestDelete = async () => { if (snippet.active || snippet.trashed) { setIsDialogOpen(true) } else { await makeDeleteRequest() } } return { requestDelete, deleteDialogProps: { snippet, isDialogOpen, setIsDialogOpen, makeDeleteRequest } } }