"use client"; import { useState } from "react"; import { MoreHorizontal, Plus, Trash2 } from "lucide-react"; import { type Department } from "@/lib/schema"; import { DeleteConfirmDialog } from "@/components/workspace/DeleteConfirmDialog"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuAction, SidebarMenuButton, SidebarMenuItem, } from "@/components/ui/sidebar"; import { Pane1Toggle } from "@/components/workspace/Pane1Toggle"; import { AddItemDialog } from "@/components/workspace/AddItemDialog"; type PositionPaneProps = { workspaceName: string; departments: Department[]; selectedPositionName?: string; onAddPosition: (deptId: string, posName: string) => void; onDeletePosition: (deptId: string, posId: string) => void; }; export function PositionPane({ workspaceName, departments, selectedPositionName, onAddPosition, onDeletePosition, }: PositionPaneProps) { const [addDialogDeptId, setAddDialogDeptId] = useState(null); const [deleteTarget, setDeleteTarget] = useState<{ deptId: string; posId: string; posName: string; } | null>(null); const addDialogDept = departments.find((d) => d.id === addDialogDeptId); return ( <>

{workspaceName}

{departments.map((dept) => ( {dept.name} setAddDialogDeptId(dept.id)} className="w-6 rounded-[min(var(--radius-md),10px)] text-muted-foreground hover:bg-muted hover:text-foreground [&>svg]:size-3" > {dept.name} にポジションを追加 {dept.positions.map((pos) => { const active = pos.name === selectedPositionName; return ( {pos.name} {pos.count} 操作 } /> setDeleteTarget({ deptId: dept.id, posId: pos.id, posName: pos.name, }) } > 削除 ); })} ))}
{addDialogDept && ( { if (!open) setAddDialogDeptId(null); }} title="ポジションを追加" description={`${addDialogDept.name} に新しいポジションを追加します`} fieldLabel="ポジション名" fieldId="pos-name" placeholder="例: データエンジニア" onAdd={(name) => onAddPosition(addDialogDept.id, name)} /> )} { if (!open) setDeleteTarget(null); }} title="ポジションを削除しますか?" itemName={deleteTarget?.posName ?? ""} onConfirm={() => { if (deleteTarget) { onDeletePosition(deleteTarget.deptId, deleteTarget.posId); setDeleteTarget(null); } }} /> ); }