Uecko_ERP/packages/rdx-ui/src/components/datatable/data-table-column-header.tsx

76 lines
2.4 KiB
TypeScript
Raw Normal View History

2025-10-16 11:18:55 +00:00
import {
2025-11-16 21:11:46 +00:00
Button,
DropdownMenu,
2025-10-16 11:18:55 +00:00
DropdownMenuContent,
2026-04-12 19:12:10 +00:00
DropdownMenuGroup,
2025-10-16 11:18:55 +00:00
DropdownMenuItem,
2026-03-17 17:49:54 +00:00
DropdownMenuSeparator,
2025-11-16 21:11:46 +00:00
DropdownMenuTrigger,
} from "@repo/shadcn-ui/components";
import { cn } from "@repo/shadcn-ui/lib/utils";
import type { Column } from "@tanstack/react-table";
2026-03-17 17:49:54 +00:00
import { ArrowDownIcon, ArrowUpIcon, ChevronsUpDownIcon, EyeOffIcon } from "lucide-react";
2025-11-16 21:11:46 +00:00
import { useTranslation } from "../../locales/i18n.ts";
2025-10-16 11:18:55 +00:00
2025-11-16 21:11:46 +00:00
interface DataTableColumnHeaderProps<TData, TValue> extends React.HTMLAttributes<HTMLDivElement> {
column: Column<TData, TValue>;
title: string;
2025-10-16 11:18:55 +00:00
}
export function DataTableColumnHeader<TData, TValue>({
column,
title,
className,
}: DataTableColumnHeaderProps<TData, TValue>) {
const { t } = useTranslation();
if (!column.getCanSort()) {
2026-03-30 18:59:27 +00:00
return <div className={cn("text-foreground text-[0.8rem]", className)}>{title}</div>;
2025-10-16 11:18:55 +00:00
}
return (
2026-03-17 17:49:54 +00:00
<div className={cn("flex items-center gap-2 ", className)}>
2025-10-16 11:18:55 +00:00
<DropdownMenu>
2026-04-12 19:12:10 +00:00
<DropdownMenuTrigger
render={
<Button
//className="data-[state=open]:bg-accent -ml-4 h-8 text-xs text-muted-foreground font-semibold text-nowrap cursor-pointer"
className="-ml-3 h-8 data-[state=open]:bg-accent cursor-pointer text-foreground"
size="sm"
type="button"
variant="ghost"
>
<span>{title}</span>
{column.getIsSorted() === "desc" ? (
<ArrowDownIcon />
) : column.getIsSorted() === "asc" ? (
<ArrowUpIcon />
) : (
<ChevronsUpDownIcon />
)}
</Button>
}
/>
2025-10-16 11:18:55 +00:00
<DropdownMenuContent align="start">
2026-04-12 19:12:10 +00:00
<DropdownMenuGroup>
<DropdownMenuItem onClick={() => column.toggleSorting(false)}>
<ArrowUpIcon />
{t("components.datatable.asc")}
</DropdownMenuItem>
<DropdownMenuItem onClick={() => column.toggleSorting(true)}>
<ArrowDownIcon />
{t("components.datatable.desc")}
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem onClick={() => column.toggleVisibility(false)}>
<EyeOffIcon />
{t("components.datatable.hide")}
</DropdownMenuItem>
</DropdownMenuGroup>
2025-10-16 11:18:55 +00:00
</DropdownMenuContent>
</DropdownMenu>
</div>
2025-11-16 21:11:46 +00:00
);
2025-10-16 11:18:55 +00:00
}