"use client"; import { useCallback, memo } from "react"; import Link from "next/link"; import { useSortable } from "@dnd-kit/sortable"; import { CSS } from "@dnd-kit/utilities"; import { toast } from "sonner"; import type { Issue, UpdateIssueRequest } from "@/shared/types"; import { CalendarDays } from "lucide-react"; import { ActorAvatar } from "@/components/common/actor-avatar"; import { api } from "@/shared/api"; import { useIssueStore } from "@/features/issues/store"; import { PriorityIcon } from "./priority-icon"; import { PriorityPicker, AssigneePicker, DueDatePicker } from "./pickers"; import { PRIORITY_CONFIG } from "@/features/issues/config"; import type { CardProperties } from "@/features/issues/stores/view-store"; import { useViewStore } from "@/features/issues/stores/view-store-context"; function formatDate(date: string): string { return new Date(date).toLocaleDateString("en-US", { month: "short", day: "numeric", }); } /** Stops event from bubbling to Link/drag handlers */ function PickerWrapper({ children }: { children: React.ReactNode }) { const stop = (e: React.SyntheticEvent) => { e.stopPropagation(); e.preventDefault(); }; return (
{issue.identifier}
{/* Row 2: Title */}{issue.title}
{/* Description */} {showDescription && ({issue.description}
)} {/* Row 3: Assignee, priority badge, due date */} {(showAssignee || showPriority || showDueDate) && (