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"; "use client";
import { ColumnDef } from "@tanstack/react-table"; 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 { Button } from "@/components/ui/button";
import { import {
DropdownMenu, DropdownMenu,
@@ -29,7 +29,19 @@ export const columns: ColumnDef<Customer>[] = [
}, },
{ {
accessorKey: "name", 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", accessorKey: "occupation",
@@ -46,7 +58,20 @@ export const columns: ColumnDef<Customer>[] = [
}, },
{ {
accessorKey: "balance", 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 }) => { cell: ({ row }) => {
const amount = parseFloat(row.getValue("balance")); const amount = parseFloat(row.getValue("balance"));
const formatted = new Intl.NumberFormat("en-IN", { const formatted = new Intl.NumberFormat("en-IN", {

View File

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