"use client"; import { useState } from "react"; import { useTableControls } from "@/components/ui/use-table-controls"; import { TableControls, SortableTh } from "@/components/ui/table-controls"; import { RowActionsMenu, RowActionsItem, RowActionsDestructiveItem, RowActionsSeparator } from "@/components/ui/row-actions-menu"; import { DeleteConfirmDialog } from "@/components/ui/delete-confirm-dialog"; import { ConfirmDialog } from "@/components/ui/confirm-dialog"; import { AddProjectCodeButton, EditProjectCodeButton, type ProjectCodeRow, } from "./project-code-form"; import { deleteProjectCode, toggleProjectCodeActive } from "./actions"; const CHIPS = ["Active", "Inactive"]; function ProjectCodeActionsMenu({ projectCode }: { projectCode: ProjectCodeRow }) { const [editOpen, setEditOpen] = useState(false); const [deleteOpen, setDeleteOpen] = useState(false); const [toggleOpen, setToggleOpen] = useState(false); return ( <> setEditOpen(true)}>Edit setToggleOpen(true)}> {projectCode.isActive ? "Deactivate" : "Activate"} setDeleteOpen(true)}>Delete deleteProjectCode(projectCode.id)} /> toggleProjectCodeActive(projectCode.id)} /> ); } export function ProjectCodesTable({ projectCodes }: { projectCodes: ProjectCodeRow[] }) { const { search, setSearch, sortKey, sortDir, toggleSort, activeFilters, toggleFilter, filtered } = useTableControls({ rows: projectCodes, defaultSortKey: "code", searchText: (c) => [c.code, c.isActive ? "active" : "inactive"].join(" "), chipMatch: (c, chip) => { if (chip.toLowerCase() === "active") return c.isActive; if (chip.toLowerCase() === "inactive") return !c.isActive; return false; }, sortValue: (c, key) => { if (key === "isActive") return c.isActive ? "Active" : "Inactive"; const val = c[key as keyof ProjectCodeRow]; return typeof val === "string" || typeof val === "boolean" ? val : String(val ?? ""); }, }); return (

Project Codes

Codes that populate the PO “Project Code” dropdown

toggleSort(k as keyof ProjectCodeRow)}>Project Code toggleSort(k as keyof ProjectCodeRow)}>Status {filtered.length === 0 && ( )} {filtered.map((projectCode) => ( ))}
No project codes yet. Add one to populate the Project Code dropdown.
{projectCode.code} {projectCode.isActive ? "Active" : "Inactive"}
); }