From 83bffe974739f8d100f0ef31be530cb793040f5e Mon Sep 17 00:00:00 2001 From: THIS ONE IS A LITTLE BIT TRICKY KRUB Date: Mon, 31 Mar 2025 21:37:38 +0700 Subject: [PATCH] feat: add search functionality to inventory page --- frontend/app/(sidebar)/inventory/page.tsx | 42 ++++++++++++++--------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/frontend/app/(sidebar)/inventory/page.tsx b/frontend/app/(sidebar)/inventory/page.tsx index 9b02fc9..ff857f7 100644 --- a/frontend/app/(sidebar)/inventory/page.tsx +++ b/frontend/app/(sidebar)/inventory/page.tsx @@ -1,11 +1,12 @@ "use client"; import { + useState, JSXElementConstructor, ReactElement, ReactNode, ReactPortal, - useState, + useMemo, } from "react"; import { useQuery } from "@tanstack/react-query"; import { @@ -33,17 +34,15 @@ import { PaginationContent, PaginationItem, } from "@/components/ui/pagination"; +import { Search } from "lucide-react"; import { Badge } from "@/components/ui/badge"; - import { fetchInventoryItems } from "@/api/inventory"; import { AddInventoryItem } from "./add-inventory-item"; import { EditInventoryItem } from "./edit-inventory-item"; import { DeleteInventoryItem } from "./delete-inventory-item"; export default function InventoryPage() { - const [date, setDate] = useState(); - const [inventoryType, setInventoryType] = useState("all"); const [sorting, setSorting] = useState([]); const [pagination, setPagination] = useState({ pageIndex: 0, @@ -59,13 +58,16 @@ export default function InventoryPage() { queryFn: fetchInventoryItems, staleTime: 60 * 1000, }); - - const filteredItems = - inventoryType === "all" - ? inventoryItems - : inventoryItems.filter( - (item) => item.type.toLowerCase() === inventoryType - ); + const [searchTerm, setSearchTerm] = useState(""); + const handleSearch = () => { + // update search state when user clicks or presses enter + setSearchTerm(searchTerm); + }; + const filteredItems = useMemo(() => { + return inventoryItems.filter((item) => + item.name.toLowerCase().includes(searchTerm.toLowerCase()) + ); + }, [inventoryItems, searchTerm]); const columns = [ { accessorKey: "name", header: "Name" }, @@ -138,10 +140,13 @@ export default function InventoryPage() {

Inventory

- - + + setSearchTerm(e.target.value)} + />
@@ -180,7 +185,7 @@ export default function InventoryPage() {
- + @@ -204,6 +210,10 @@ export default function InventoryPage() { pageIndex: prev.pageIndex + 1, })) } + disabled={ + pagination.pageIndex >= + Math.ceil(filteredItems.length / pagination.pageSize) - 1 + } > Next