"use client"; import { useMemo } 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 { useViewStore, useViewStoreApi } from "@/features/issues/stores/view-store-context"; import { sortIssues } from "@/features/issues/utils/sort"; import { StatusIcon } from "./status-icon"; import { DraggableBoardCard } from "./board-card"; export function BoardColumn({ status, issues, }: { status: IssueStatus; issues: Issue[]; }) { const cfg = STATUS_CONFIG[status]; const { setNodeRef, isOver } = useDroppable({ id: status }); const viewStoreApi = useViewStoreApi(); const sortBy = useViewStore((s) => s.sortBy); const sortDirection = useViewStore((s) => s.sortDirection); const sortedIssues = useMemo( () => sortIssues(issues, sortBy, sortDirection), [issues, sortBy, sortDirection] ); const sortedIds = useMemo( () => sortedIssues.map((i) => i.id), [sortedIssues] ); return (
{/* Left: status badge + count */}
{cfg.label} {issues.length}
{/* Right: add + menu */}
} /> viewStoreApi.getState().hideStatus(status)}> Hide column useModalStore.getState().open("create-issue", { status })} > } /> Add issue
{sortedIssues.map((issue) => ( ))} {issues.length === 0 && (

No issues

)}
); }