Rocky_Mountain_Vending/app/products/page.tsx

85 lines
3 KiB
TypeScript

import { fetchAllProducts } from "@/lib/stripe/products"
import {
PublicInset,
PublicPageHeader,
PublicSurface,
} from "@/components/public-surface"
import { ProductGrid } from "@/components/product-grid"
import Link from "next/link"
export const metadata = {
title: "Products | Rocky Mountain Vending",
description: "Shop our selection of vending machines and equipment",
}
export default async function ProductsPage() {
let products: Awaited<ReturnType<typeof fetchAllProducts>> = []
let error: string | null = null
try {
products = await fetchAllProducts()
} catch (err) {
if (err instanceof Error) {
if (err.message.includes("STRIPE_SECRET_KEY")) {
error =
"Our product catalog is temporarily unavailable. Please contact us for current machine options."
} else {
error = "Failed to load products. Please try again later."
}
} else {
error = "Failed to load products. Please try again later."
}
}
return (
<div className="container mx-auto px-4 py-10 md:py-14">
<PublicPageHeader
align="center"
eyebrow="Machine Sales"
title="Browse Rocky Mountain Vending equipment and machine options."
description="Explore machines, payment hardware, and vending equipment. If you need help choosing the right setup, we can talk through new, used, and feature-specific options."
>
<div className="flex justify-center">
<Link
href="/contact-us#contact-form"
className="inline-flex min-h-11 items-center justify-center rounded-full border border-border bg-background px-4 text-sm font-medium text-foreground transition hover:border-primary/40 hover:text-primary"
>
Ask About Sales
</Link>
</div>
</PublicPageHeader>
{error ? (
<PublicSurface className="mt-10 text-center">
<p className="text-destructive">{error}</p>
<p className="text-sm text-muted-foreground mt-2">
Please try again later.
</p>
</PublicSurface>
) : products.length === 0 ? (
<PublicSurface className="mt-10 text-center">
<div className="mb-6">
<p className="text-lg font-medium mb-2">
No products available yet
</p>
<p className="text-muted-foreground">
Our product catalog is being prepared. Please check back soon or
contact us directly for current offerings.
</p>
</div>
<PublicInset className="mx-auto max-w-md text-sm text-muted-foreground">
<p className="font-medium mb-1">For Vending Machine Sales:</p>
<p>
Call us at (435) 233-9668 or visit our contact page for immediate
assistance.
</p>
</PublicInset>
</PublicSurface>
) : (
<div className="mt-10">
<ProductGrid products={products} />
</div>
)}
</div>
)
}