import { t } from "@lingui/core/macro"; import { useModal } from "~/providers/modal"; import { usePopup } from "~/providers/popup"; import { api } from "~/utils/api"; import { invalidateCard } from "~/utils/cardInvalidation"; export function CardContextMoveListModal() { const { entityId: cardPublicId, closeModal } = useModal(); const { showPopup } = usePopup(); const utils = api.useUtils(); const { data: card, isLoading } = api.card.byId.useQuery( { cardPublicId: cardPublicId ?? "" }, { enabled: !!cardPublicId && cardPublicId.length >= 12 }, ); const updateCardList = api.card.update.useMutation({ onMutate: async (vars) => { if (!cardPublicId) return undefined; await utils.card.byId.cancel(); const previous = utils.card.byId.getData({ cardPublicId }); utils.card.byId.setData({ cardPublicId }, (old) => { if (!old) return old; const list = old.list.board?.lists?.find( (l) => l.publicId === vars.listPublicId, ); if (!list) return old; return { ...old, list: { ...old.list, publicId: list.publicId, name: list.name }, }; }); return { previous }; }, onError: (_err, _vars, ctx) => { if (cardPublicId && ctx?.previous) { utils.card.byId.setData({ cardPublicId }, ctx.previous); } showPopup({ header: t`Unable to move card`, message: t`Please try again.`, icon: "error", }); }, onSettled: async () => { if (cardPublicId) { await invalidateCard(utils, cardPublicId); await utils.board.byId.invalidate(); } }, }); const lists = card?.list?.board?.lists ?? []; const currentListPublicId = card?.list?.publicId; const handleSelectList = (listPublicId: string) => { if (listPublicId === currentListPublicId || !cardPublicId) return; updateCardList.mutate( { cardPublicId, listPublicId, index: 0 }, { onSuccess: closeModal }, ); }; if (!cardPublicId) return null; return (

{t`Move to list`}

{isLoading ? (
{[1, 2, 3].map((i) => (
))}
) : (
    {lists.map((list) => (
  • ))}
)}
); }