From 3a44957662c288cc9916fc11a930c554e6fe3b42 Mon Sep 17 00:00:00 2001 From: Charity <81490612+charitea@users.noreply.github.com> Date: Wed, 1 Apr 2026 09:32:56 -0400 Subject: [PATCH] feat: add card context menu and duplication functionality (#381) * feat: add card context menu and duplication functionality * Implemented a context menu for cards allowing actions such as copying links, duplicating cards, and managing members, labels, and due dates * Added modals for card duplication and context actions. * Updated API with a new endpoint for duplicating cards, including options for copying labels, members, and checklists * refactor: remove cardPublicId from context menu and related components * Removed cardPublicId prop from CardContextMenu and CardContextMembersModal for cleaner context handling * Updated scrollbar styling * feat: add delete card functionality to context menu --- .../components/CardContextDueDateModal.tsx | 41 +++ .../components/CardContextDuplicateModal.tsx | 284 ++++++++++++++++++ .../components/CardContextLabelsModal.tsx | 53 ++++ .../components/CardContextMembersModal.tsx | 73 +++++ .../board/components/CardContextMenu.tsx | 130 ++++++++ .../components/CardContextMoveListModal.tsx | 101 +++++++ apps/web/src/views/board/index.tsx | 160 +++++++++- .../views/card/components/LabelSelector.tsx | 1 + .../views/card/components/ListSelector.tsx | 1 + .../views/card/components/MemberSelector.tsx | 1 + packages/api/src/routers/card.ts | 173 +++++++++++ 11 files changed, 1008 insertions(+), 10 deletions(-) create mode 100644 apps/web/src/views/board/components/CardContextDueDateModal.tsx create mode 100644 apps/web/src/views/board/components/CardContextDuplicateModal.tsx create mode 100644 apps/web/src/views/board/components/CardContextLabelsModal.tsx create mode 100644 apps/web/src/views/board/components/CardContextMembersModal.tsx create mode 100644 apps/web/src/views/board/components/CardContextMenu.tsx create mode 100644 apps/web/src/views/board/components/CardContextMoveListModal.tsx diff --git a/apps/web/src/views/board/components/CardContextDueDateModal.tsx b/apps/web/src/views/board/components/CardContextDueDateModal.tsx new file mode 100644 index 00000000..ad7a9b3b --- /dev/null +++ b/apps/web/src/views/board/components/CardContextDueDateModal.tsx @@ -0,0 +1,41 @@ +import { t } from "@lingui/core/macro"; + +import { useModal } from "~/providers/modal"; +import { api } from "~/utils/api"; +import { DueDateSelector } from "~/views/card/components/DueDateSelector"; + +export function CardContextDueDateModal() { + const { entityId: cardPublicId, closeModal } = useModal(); + + const { data: card, isLoading } = api.card.byId.useQuery( + { cardPublicId: cardPublicId ?? "" }, + { enabled: !!cardPublicId && cardPublicId.length >= 12 }, + ); + + if (!cardPublicId) return null; + + return ( +