Added table sorting. next up: filtering

This commit is contained in:
2026-02-20 00:17:16 +05:30
parent ab785c610f
commit fe3d9ac852
2 changed files with 39 additions and 3 deletions

View File

@@ -1,7 +1,7 @@
"use client";
import { ColumnDef } from "@tanstack/react-table";
import { Ghost, MoreHorizontal } from "lucide-react";
import { MoreHorizontal, ArrowUpDown } from "lucide-react";
import { Button } from "@/components/ui/button";
import {
DropdownMenu,
@@ -29,7 +29,19 @@ export const columns: ColumnDef<Customer>[] = [
},
{
accessorKey: "name",
header: "Name",
header: ({ column }) => {
return (
<div className="text-left">
<Button
variant="ghost"
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
>
Name
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
</div>
);
},
},
{
accessorKey: "occupation",
@@ -46,7 +58,20 @@ export const columns: ColumnDef<Customer>[] = [
},
{
accessorKey: "balance",
header: () => <div className="text-right">Balance</div>,
// header: () => <div className="text-right">Balance</div>,
header: ({ column }) => {
return (
<div className="text-right">
<Button
variant="ghost"
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
>
Balance
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
</div>
);
},
cell: ({ row }) => {
const amount = parseFloat(row.getValue("balance"));
const formatted = new Intl.NumberFormat("en-IN", {

View File

@@ -1,11 +1,15 @@
"use client";
import { useState } from "react";
import {
ColumnDef,
flexRender,
getCoreRowModel,
getPaginationRowModel,
useReactTable,
SortingState,
getSortedRowModel,
} from "@tanstack/react-table";
import {
@@ -35,11 +39,18 @@ export function DataTable<TData, TValue>({
columns,
data,
}: DataTableProps<TData, TValue>) {
const [sorting, setSorting] = useState<SortingState>([]);
const table = useReactTable({
data,
columns,
getCoreRowModel: getCoreRowModel(),
getPaginationRowModel: getPaginationRowModel(),
onSortingChange: setSorting,
getSortedRowModel: getSortedRowModel(),
state: {
sorting,
},
});
return (