| 1 |
b15ff05 |
Mrdn |
2y ago |
|
| 2 |
b15ff05 |
Mrdn |
2y ago |
import { |
| 3 |
b15ff05 |
Mrdn |
2y ago |
ArrowDownIcon, |
| 4 |
b15ff05 |
Mrdn |
2y ago |
ArrowUpIcon, |
| 5 |
b15ff05 |
Mrdn |
2y ago |
CaretSortIcon, |
| 6 |
b15ff05 |
Mrdn |
2y ago |
EyeNoneIcon, |
| 7 |
b15ff05 |
Mrdn |
2y ago |
} from "@radix-ui/react-icons" |
| 8 |
b15ff05 |
Mrdn |
2y ago |
import { Column } from "@tanstack/react-table" |
| 9 |
b15ff05 |
Mrdn |
2y ago |
|
| 10 |
b15ff05 |
Mrdn |
2y ago |
import { |
| 11 |
b15ff05 |
Mrdn |
2y ago |
Button, |
| 12 |
b15ff05 |
Mrdn |
2y ago |
DropdownMenu, |
| 13 |
b15ff05 |
Mrdn |
2y ago |
DropdownMenuContent, |
| 14 |
b15ff05 |
Mrdn |
2y ago |
DropdownMenuItem, |
| 15 |
b15ff05 |
Mrdn |
2y ago |
DropdownMenuSeparator, |
| 16 |
b15ff05 |
Mrdn |
2y ago |
DropdownMenuTrigger, |
| 17 |
b15ff05 |
Mrdn |
2y ago |
} from "@marzneshin/components" |
| 18 |
b15ff05 |
Mrdn |
2y ago |
import { cn } from "@marzneshin/utils" |
| 19 |
b15ff05 |
Mrdn |
2y ago |
|
| 20 |
b15ff05 |
Mrdn |
2y ago |
interface DataTableColumnHeaderProps<TData, TValue> |
| 21 |
b15ff05 |
Mrdn |
2y ago |
extends React.HTMLAttributes<HTMLDivElement> { |
| 22 |
b15ff05 |
Mrdn |
2y ago |
column: Column<TData, TValue> |
| 23 |
b15ff05 |
Mrdn |
2y ago |
title: string |
| 24 |
b15ff05 |
Mrdn |
2y ago |
} |
| 25 |
b15ff05 |
Mrdn |
2y ago |
|
| 26 |
b15ff05 |
Mrdn |
2y ago |
export function DataTableColumnHeader<TData, TValue>({ |
| 27 |
b15ff05 |
Mrdn |
2y ago |
column, |
| 28 |
b15ff05 |
Mrdn |
2y ago |
title, |
| 29 |
b15ff05 |
Mrdn |
2y ago |
className, |
| 30 |
b15ff05 |
Mrdn |
2y ago |
}: DataTableColumnHeaderProps<TData, TValue>) { |
| 31 |
b15ff05 |
Mrdn |
2y ago |
if (!column.getCanSort()) { |
| 32 |
b15ff05 |
Mrdn |
2y ago |
return <div className={cn(className)}>{title}</div> |
| 33 |
b15ff05 |
Mrdn |
2y ago |
} |
| 34 |
b15ff05 |
Mrdn |
2y ago |
|
| 35 |
b15ff05 |
Mrdn |
2y ago |
return ( |
| 36 |
b15ff05 |
Mrdn |
2y ago |
<div className={cn("flex items-center space-x-2", className)}> |
| 37 |
b15ff05 |
Mrdn |
2y ago |
<DropdownMenu> |
| 38 |
b15ff05 |
Mrdn |
2y ago |
<DropdownMenuTrigger asChild> |
| 39 |
b15ff05 |
Mrdn |
2y ago |
<Button |
| 40 |
b15ff05 |
Mrdn |
2y ago |
variant="ghost" |
| 41 |
b15ff05 |
Mrdn |
2y ago |
size="sm" |
| 42 |
b15ff05 |
Mrdn |
2y ago |
className="-ml-3 h-8 data-[state=open]:bg-accent" |
| 43 |
b15ff05 |
Mrdn |
2y ago |
> |
| 44 |
b15ff05 |
Mrdn |
2y ago |
<span>{title}</span> |
| 45 |
b15ff05 |
Mrdn |
2y ago |
{column.getIsSorted() === "desc" ? ( |
| 46 |
b15ff05 |
Mrdn |
2y ago |
<ArrowDownIcon className="ml-2 w-4 h-4" /> |
| 47 |
b15ff05 |
Mrdn |
2y ago |
) : column.getIsSorted() === "asc" ? ( |
| 48 |
b15ff05 |
Mrdn |
2y ago |
<ArrowUpIcon className="ml-2 w-4 h-4" /> |
| 49 |
b15ff05 |
Mrdn |
2y ago |
) : ( |
| 50 |
b15ff05 |
Mrdn |
2y ago |
<CaretSortIcon className="ml-2 w-4 h-4" /> |
| 51 |
b15ff05 |
Mrdn |
2y ago |
)} |
| 52 |
b15ff05 |
Mrdn |
2y ago |
</Button> |
| 53 |
b15ff05 |
Mrdn |
2y ago |
</DropdownMenuTrigger> |
| 54 |
b15ff05 |
Mrdn |
2y ago |
<DropdownMenuContent align="start"> |
| 55 |
b15ff05 |
Mrdn |
2y ago |
<DropdownMenuItem onClick={() => column.toggleSorting(false)}> |
| 56 |
b15ff05 |
Mrdn |
2y ago |
<ArrowUpIcon className="mr-2 w-3.5 h-3.5 text-muted-foreground/70" /> |
| 57 |
b15ff05 |
Mrdn |
2y ago |
Asc |
| 58 |
b15ff05 |
Mrdn |
2y ago |
</DropdownMenuItem> |
| 59 |
b15ff05 |
Mrdn |
2y ago |
<DropdownMenuItem onClick={() => column.toggleSorting(true)}> |
| 60 |
b15ff05 |
Mrdn |
2y ago |
<ArrowDownIcon className="mr-2 w-3.5 h-3.5 text-muted-foreground/70" /> |
| 61 |
b15ff05 |
Mrdn |
2y ago |
Desc |
| 62 |
b15ff05 |
Mrdn |
2y ago |
</DropdownMenuItem> |
| 63 |
b15ff05 |
Mrdn |
2y ago |
<DropdownMenuSeparator /> |
| 64 |
b15ff05 |
Mrdn |
2y ago |
<DropdownMenuItem onClick={() => column.toggleVisibility(false)}> |
| 65 |
b15ff05 |
Mrdn |
2y ago |
<EyeNoneIcon className="mr-2 w-3.5 h-3.5 text-muted-foreground/70" /> |
| 66 |
b15ff05 |
Mrdn |
2y ago |
Hide |
| 67 |
b15ff05 |
Mrdn |
2y ago |
</DropdownMenuItem> |
| 68 |
b15ff05 |
Mrdn |
2y ago |
</DropdownMenuContent> |
| 69 |
b15ff05 |
Mrdn |
2y ago |
</DropdownMenu> |
| 70 |
b15ff05 |
Mrdn |
2y ago |
</div> |
| 71 |
b15ff05 |
Mrdn |
2y ago |
) |
| 72 |
b15ff05 |
Mrdn |
2y ago |
} |