import { useRouter } from "next/navigation"; import Button from "~/components/Button"; import { useModal } from "~/providers/modal"; import { usePopup } from "~/providers/popup"; import { api } from "~/utils/api"; interface DeleteCardConfirmationProps { cardPublicId: string; boardPublicId: string; } export function DeleteCardConfirmation({ cardPublicId, boardPublicId, }: DeleteCardConfirmationProps) { const { closeModal } = useModal(); const utils = api.useUtils(); const router = useRouter(); const { showPopup } = usePopup(); const queryParams = { boardPublicId, }; const deleteCardMutation = api.card.delete.useMutation({ onMutate: async (args) => { await utils.board.byId.cancel(); const currentState = utils.board.byId.getData(queryParams); utils.board.byId.setData(queryParams, (oldBoard) => { if (!oldBoard) return oldBoard; const updatedLists = oldBoard.lists.map((list) => { const updatedCards = list.cards.filter( (card) => card.publicId !== args.cardPublicId, ); return { ...list, cards: updatedCards }; }); return { ...oldBoard, lists: updatedLists }; }); return { previousState: currentState }; }, onError: (_error, _newList, context) => { utils.board.byId.setData(queryParams, context?.previousState); showPopup({ header: "Unable to delete card", message: "Please try again later, or contact customer support.", icon: "error", }); }, onSuccess: () => { router.push(`/boards/${boardPublicId}`); }, onSettled: async () => { closeModal(); await utils.board.byId.invalidate(queryParams); }, }); const handleDeleteCard = () => { deleteCardMutation.mutate({ cardPublicId, }); }; return (

Are you sure you want to delete this card?

{"This action can't be undone."}

); }