import { useDeleteBookmark } from "~/bookmark/api" import { Button } from "~/components/button" import { Dialog, DialogTitle, DialogBody, DialogActionRow } from "~/components/dialog" import { LoadingSpinner } from "~/components/loading-spinner" import { useMnemonics } from "~/hooks/use-mnemonics" import { useBookmarkPageStore, ActiveDialog } from "../-store" function DeleteBookmarkDialog() { // biome-ignore lint/style/noNonNullAssertion: this cannot be null when delete bookmark dialog is visible const bookmark = useBookmarkPageStore((state) => state.bookmarkToBeDeleted!) const setActiveDialog = useBookmarkPageStore((state) => state.setActiveDialog) const deleteBookmarkMutation = useDeleteBookmark() useMnemonics( { y: proceed, n: cancel, }, { ignore: () => false }, ) async function proceed() { try { await deleteBookmarkMutation.mutateAsync({ bookmark }) setActiveDialog(ActiveDialog.None) } catch (error) { console.error(error) } } function cancel() { setActiveDialog(ActiveDialog.None) } function body() { switch (deleteBookmarkMutation.status) { case "pending": return (

Deleting

) case "idle": return (

The bookmark titled:

"{bookmark.title}"

will be deleted. Proceed?

) case "error": return

Failed to delete the bookmark!

} } function title() { switch (deleteBookmarkMutation.status) { case "pending": return "PLEASE WAIT" case "idle": return "CONFIRM" case "error": return "ERROR OCCURRED" } } return ( {title()} {body()} ) } export { DeleteBookmarkDialog }