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 } }
}