Openstatus
www.openstatus.dev
1"use client";
2
3import type { Table } from "@tanstack/react-table";
4import { X } from "lucide-react";
5
6import { Button } from "@/components/ui/button";
7import { DataTableViewOptions } from "@/components/ui/data-table/data-table-view-options";
8import { Input } from "@/components/ui/input";
9
10import { DataTableFacetedFilter } from "@/components/ui/data-table/data-table-faceted-filter";
11
12export interface DataTableToolbarProps<TData> {
13 table: Table<TData>;
14}
15
16export function DataTableToolbar<TData>({
17 table,
18}: DataTableToolbarProps<TData>) {
19 const isFiltered = table.getState().columnFilters.length > 0;
20
21 return (
22 <div className="flex items-center justify-between">
23 <div className="flex flex-1 items-center space-x-2">
24 <Input
25 placeholder="Filter entries..."
26 value={(table.getColumn("title")?.getFilterValue() as string) ?? ""}
27 onChange={(event) =>
28 table.getColumn("title")?.setFilterValue(event.target.value)
29 }
30 className="h-8 w-[150px] lg:w-[250px]"
31 />
32 {table.getColumn("status") && (
33 <DataTableFacetedFilter
34 column={table.getColumn("status")}
35 title="Status"
36 options={[]}
37 />
38 )}
39 {table.getColumn("tags") && (
40 <DataTableFacetedFilter
41 column={table.getColumn("tags")}
42 title="Tags"
43 options={[]}
44 />
45 )}
46 {isFiltered && (
47 <Button
48 variant="ghost"
49 onClick={() => table.resetColumnFilters()}
50 className="h-8 px-2 lg:px-3"
51 >
52 Reset
53 <X />
54 </Button>
55 )}
56 </div>
57 <DataTableViewOptions table={table} />
58 </div>
59 );
60}