diff --git a/src/app/admin/stops/page.tsx b/src/app/admin/stops/page.tsx index 682a448..7ffeb63 100644 --- a/src/app/admin/stops/page.tsx +++ b/src/app/admin/stops/page.tsx @@ -1,27 +1,11 @@ import StopsDashboardClient from "@/components/admin/stops/StopsDashboardClient"; import StopsHeaderActions from "@/components/admin/StopsHeaderActions"; -import { supabase } from "@/lib/supabase"; import { getAdminUser } from "@/lib/admin-permissions"; import AdminAccessDenied from "@/components/admin/AdminAccessDenied"; import { PageHeader } from "@/components/admin/design-system"; import { redirect } from "next/navigation"; - -interface Stop { - id: string; - city: string; - state: string; - date: string; - time: string; - location: string; - active: boolean; - deleted_at: string | null; - brand_id: string; - address: string | null; - zip: string | null; - cutoff_time: string | null; - status: string; - brands: { name: string } | { name: string }[]; -} +import { pool } from "@/lib/db"; +import { type Stop } from "@/components/admin/stops/types"; const StopIcon = () => ( @@ -39,35 +23,56 @@ export default async function AdminStopsPage() { redirect("/admin/pickup"); } - let query = supabase - .from("stops") - .select(` - id, - city, - state, - date, - time, - location, - active, - deleted_at, - brand_id, - address, - zip, - cutoff_time, - status, - brands ( - name - ) - `) - .is("deleted_at", null) - .order("date", { ascending: true }); + let stops: Stop[] = []; + let error: { message: string } | null = null; - if (adminUser?.brand_id) { - query = query.eq("brand_id", adminUser.brand_id); + try { + const brandFilter = adminUser.brand_id + ? `AND brand_id = '${adminUser.brand_id}'` + : ""; + + const { rows } = await pool.query(` + SELECT + s.id, + s.city, + s.state, + s.date, + s.time, + s.location, + s.status, + s.deleted_at, + s.brand_id, + s.address, + s.zip, + s.cutoff_time, + b.name as brand_name + FROM stops s + LEFT JOIN brands b ON b.id = s.brand_id + WHERE s.deleted_at IS NULL + ${brandFilter} + ORDER BY s.date ASC + `); + + stops = rows.map((r) => ({ + id: r.id, + city: r.city ?? "", + state: r.state ?? "", + date: r.date ? String(r.date) : "", + time: r.time ?? "", + location: r.location ?? "", + active: r.status === "active", + deleted_at: r.deleted_at, + brand_id: r.brand_id, + address: r.address, + zip: r.zip, + cutoff_time: r.cutoff_time, + status: r.status ?? "active", + brands: r.brand_name ? { name: r.brand_name } : { name: "" }, + })); + } catch (e) { + error = { message: e instanceof Error ? e.message : String(e) }; } - const { data: stops, error } = await query as unknown as { data: Stop[] | null; error: { message: string } | null }; - if (error) { return (
@@ -76,7 +81,7 @@ export default async function AdminStopsPage() {
/ - Stops & Routes + Stops& Routes

Error loading stops @@ -107,7 +112,7 @@ export default async function AdminStopsPage() { {/* Content */}
- +
);