feat: add ItemOverviewDto for enriched item data in items list

feat: implement CustomerDetailPage for detailed customer view and editing

feat: create CustomersPage for listing and managing customers with filters

feat: add ColumnsMenu component for customizable table columns visibility

feat: implement CSV export functionality for data download

feat: add customer code generation logic for unique customer identifiers
This commit is contained in:
Dhananjaya99
2026-09-22 00:32:40 +05:30
parent 72819e5f7b
commit fdd104284e
44 changed files with 2186 additions and 381 deletions
@@ -0,0 +1,54 @@
"use client"
import { Columns3 } from "lucide-react"
import { Button } from "@/components/ui/button"
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
export interface ColumnOption {
key: string
label: string
/** Columns that must always show (e.g. the name column) omit onToggle to stay unchecked-disabled. */
required?: boolean
}
/** "Columns" button + checklist dropdown for showing/hiding optional table columns. */
export function ColumnsMenu({
columns,
visible,
onToggle,
}: {
columns: ColumnOption[]
visible: Record<string, boolean>
onToggle: (key: string, next: boolean) => void
}) {
return (
<DropdownMenu>
<DropdownMenuTrigger render={<Button variant="outline" size="lg" />}>
<Columns3 className="size-4" />
Columns
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="min-w-48">
<DropdownMenuLabel>Show columns</DropdownMenuLabel>
<DropdownMenuSeparator />
{columns.map((col) => (
<DropdownMenuCheckboxItem
key={col.key}
checked={col.required ? true : (visible[col.key] ?? true)}
onCheckedChange={(checked) => !col.required && onToggle(col.key, checked === true)}
disabled={col.required}
>
{col.label}
</DropdownMenuCheckboxItem>
))}
</DropdownMenuContent>
</DropdownMenu>
)
}