From e887502e27594cf85d74109f6793be088e09983d Mon Sep 17 00:00:00 2001 From: Hardik Date: Fri, 15 May 2026 11:57:53 +0530 Subject: [PATCH] =?UTF-8?q?refactor(inventory):=20site=20selector=20via=20?= =?UTF-8?q?URL=20param=20(=3FsiteId=3D)=20=E2=80=94=20no=20localStorage,?= =?UTF-8?q?=20no=20user=20preference?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../(portal)/inventory/items/items-table.tsx | 25 +++++++++--------- .../app/(portal)/inventory/items/page.tsx | 26 +++++++++++-------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/App/pelagia-portal/app/(portal)/inventory/items/items-table.tsx b/App/pelagia-portal/app/(portal)/inventory/items/items-table.tsx index f78164f..ba80a74 100644 --- a/App/pelagia-portal/app/(portal)/inventory/items/items-table.tsx +++ b/App/pelagia-portal/app/(portal)/inventory/items/items-table.tsx @@ -1,10 +1,10 @@ "use client"; -import { useState, useMemo, useTransition } from "react"; +import { useState, useMemo } from "react"; +import { useRouter } from "next/navigation"; import { Search, X, ChevronDown, ChevronRight, MapPin, Tag } from "lucide-react"; import { formatCurrency } from "@/lib/utils"; import { addToCart } from "@/lib/cart"; -import { setPreferredSite } from "@/app/actions/site-preference"; type VendorOption = { vendorId: string; @@ -32,18 +32,18 @@ export function ItemsTable({ items, hasSite, sites = [], - preferredSiteId = null, + currentSiteId = null, }: { items: CatalogItem[]; hasSite: boolean; sites?: SiteOption[]; - preferredSiteId?: string | null; + currentSiteId?: string | null; }) { + const router = useRouter(); const [query, setQuery] = useState(""); const [expandedId, setExpandedId] = useState(null); const [sortBy, setSortBy] = useState<"distance" | "price">(hasSite ? "distance" : "price"); const [added, setAdded] = useState>({}); - const [sitePending, startSiteTransition] = useTransition(); const filtered = useMemo(() => { const q = query.toLowerCase().trim(); @@ -99,20 +99,19 @@ export function ItemsTable({ - {sitePending && Updating…} - {!sitePending && preferredSiteId && ( + {currentSiteId && ( Distances shown from selected site )} diff --git a/App/pelagia-portal/app/(portal)/inventory/items/page.tsx b/App/pelagia-portal/app/(portal)/inventory/items/page.tsx index de81fd7..69cba20 100644 --- a/App/pelagia-portal/app/(portal)/inventory/items/page.tsx +++ b/App/pelagia-portal/app/(portal)/inventory/items/page.tsx @@ -7,17 +7,23 @@ import type { Metadata } from "next"; export const metadata: Metadata = { title: "Browse Items" }; -export default async function InventoryItemsPage() { +interface Props { + searchParams: Promise<{ siteId?: string }>; +} + +export default async function InventoryItemsPage({ searchParams }: Props) { const session = await auth(); if (!session?.user) redirect("/login"); - const [user, products, sites] = await Promise.all([ - db.user.findUnique({ - where: { id: session.user.id }, - include: { - preferredSite: { select: { id: true, name: true, latitude: true, longitude: true } }, - }, - }), + const { siteId } = await searchParams; + + const [site, products, sites] = await Promise.all([ + siteId + ? db.site.findUnique({ + where: { id: siteId, isActive: true }, + select: { id: true, name: true, latitude: true, longitude: true }, + }) + : Promise.resolve(null), db.product.findMany({ where: { isActive: true }, include: { @@ -40,8 +46,6 @@ export default async function InventoryItemsPage() { }), ]); - const site = user?.preferredSite ?? null; - const items = products.map((p) => ({ id: p.id, code: p.code, @@ -72,7 +76,7 @@ export default async function InventoryItemsPage() { items={items} hasSite={!!site} sites={sites} - preferredSiteId={user?.preferredSiteId ?? null} + currentSiteId={siteId ?? null} /> );