"use client"; import { useMemo, type ReactNode } from "react"; import { EyeOff, MoreHorizontal, Plus } from "lucide-react"; import { Tooltip, TooltipTrigger, TooltipContent } from "@/components/ui/tooltip"; import { useDroppable } from "@dnd-kit/core"; import { SortableContext, verticalListSortingStrategy } from "@dnd-kit/sortable"; import type { Issue, IssueStatus } from "@/shared/types"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, } from "@/components/ui/dropdown-menu"; import { STATUS_CONFIG } from "@/features/issues/config"; import { useModalStore } from "@/features/modals"; import { useViewStoreApi } from "@/features/issues/stores/view-store-context"; import { StatusIcon } from "./status-icon"; import { DraggableBoardCard } from "./board-card"; export function BoardColumn({ status, issueIds, issueMap, footer, }: { status: IssueStatus; issueIds: string[]; issueMap: Map; footer?: ReactNode; }) { const cfg = STATUS_CONFIG[status]; const { setNodeRef, isOver } = useDroppable({ id: status }); const viewStoreApi = useViewStoreApi(); // Resolve IDs to Issue objects, preserving parent-provided order const resolvedIssues = useMemo( () => issueIds.flatMap((id) => { const issue = issueMap.get(id); return issue ? [issue] : []; }), [issueIds, issueMap], ); return (
{/* Left: status badge + count */}
{cfg.label} {issueIds.length}
{/* Right: add + menu */}
} /> viewStoreApi.getState().hideStatus(status)}> Hide column useModalStore.getState().open("create-issue", { status })} > } /> Add issue
{resolvedIssues.map((issue) => ( ))} {issueIds.length === 0 && (

No issues

)} {footer}
); }