Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
206571627b | ||
|
|
d64218f45f | ||
|
|
7695ca0dea | ||
|
|
bd956328db | ||
|
|
20bc559a6c |
No files matched your search
@@ -6,6 +6,13 @@ import { Navbar } from "@/components/layout/navbar";
|
|||||||
import { WishlistDrawer } from "@/components/wishlist/wishlist-drawer";
|
import { WishlistDrawer } from "@/components/wishlist/wishlist-drawer";
|
||||||
import { getCategories, getProducts } from "@/lib/headless/client";
|
import { getCategories, getProducts } from "@/lib/headless/client";
|
||||||
|
|
||||||
|
// El Navbar (categorias/colecciones/predictive search) vive en este layout
|
||||||
|
// compartido -- si alguna pagina futura queda estatica, este fetch se
|
||||||
|
// congelaria con datos de build time (mock) igual que le paso al home
|
||||||
|
// (ver app/page.tsx). Forzarlo aca protege el nav en cualquier ruta, no
|
||||||
|
// solo en las que hoy ya son dinamicas por otro motivo (searchParams, etc.).
|
||||||
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL ?? "https://shop.cruzcloud.net"),
|
metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL ?? "https://shop.cruzcloud.net"),
|
||||||
title: { default: "ARI Shopping | Juguetes, regalos y variedades", template: "%s | ARI Shopping" },
|
title: { default: "ARI Shopping | Juguetes, regalos y variedades", template: "%s | ARI Shopping" },
|
||||||
|
|||||||
@@ -7,6 +7,13 @@ import { ProductCarousel } from "@/components/product/product-carousel";
|
|||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { getCategories, getProducts } from "@/lib/headless/client";
|
import { getCategories, getProducts } from "@/lib/headless/client";
|
||||||
|
|
||||||
|
// Sin esto, Next.js prerenderiza "/" en build time dentro del Dockerfile,
|
||||||
|
// donde HEADLESS_PROVIDER/MEDUSA_* todavia no existen (solo se inyectan en
|
||||||
|
// runtime via el Deployment) -- cae al provider mock y ese HTML queda
|
||||||
|
// cacheado 1 año (visto en vivo: x-nextjs-prerender:1, s-maxage=31536000),
|
||||||
|
// violando el flujo Admin -> revalidate del ADR 0005 justo en el home.
|
||||||
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
export default async function HomePage() {
|
export default async function HomePage() {
|
||||||
const [products, categories] = await Promise.all([getProducts(), getCategories()]);
|
const [products, categories] = await Promise.all([getProducts(), getCategories()]);
|
||||||
const treasures = products.filter((product) => product.isNew || product.featured).slice(0, 8);
|
const treasures = products.filter((product) => product.isNew || product.featured).slice(0, 8);
|
||||||
|
|||||||
@@ -3,11 +3,13 @@ import Link from "next/link";
|
|||||||
import { ArrowUpRight } from "lucide-react";
|
import { ArrowUpRight } from "lucide-react";
|
||||||
import type { Category } from "@/lib/headless/types";
|
import type { Category } from "@/lib/headless/types";
|
||||||
|
|
||||||
|
type TileContent = { subtitle: string; image?: string; color: string };
|
||||||
|
|
||||||
// No hay fotografia real todavia para las 6 categorias raiz de la taxonomia
|
// No hay fotografia real todavia para las 6 categorias raiz de la taxonomia
|
||||||
// (ver ADR 0005) -- solo se mapean imagen/subtitulo para las que ya tienen
|
// (ver ADR 0005) -- solo se mapean imagen/subtitulo para las que ya tienen
|
||||||
// un asset en public/images/categories/. Las demas caen al tile de solo
|
// un asset en public/images/categories/. Las demas caen al tile de solo
|
||||||
// gradiente en vez de mostrar una imagen que no les corresponde.
|
// gradiente en vez de mostrar una imagen que no les corresponde.
|
||||||
const tileContent: Record<string, { subtitle: string; image?: string; color: string }> = {
|
const tileContent: Record<string, TileContent> = {
|
||||||
juguetes: { subtitle: "Personajes que inspiran", image: "/images/categories/figuras.webp", color: "from-yellow-300 to-orange-400" },
|
juguetes: { subtitle: "Personajes que inspiran", image: "/images/categories/figuras.webp", color: "from-yellow-300 to-orange-400" },
|
||||||
"mochilas-y-morrales": { subtitle: "Estilo para cada aventura", image: "/images/categories/mochilas.webp", color: "from-cyan-400 to-blue-500" },
|
"mochilas-y-morrales": { subtitle: "Estilo para cada aventura", image: "/images/categories/mochilas.webp", color: "from-cyan-400 to-blue-500" },
|
||||||
"bebes-y-primera-infancia": { subtitle: "Primeros descubrimientos", color: "from-pink-300 to-fuchsia-400" },
|
"bebes-y-primera-infancia": { subtitle: "Primeros descubrimientos", color: "from-pink-300 to-fuchsia-400" },
|
||||||
@@ -16,7 +18,7 @@ const tileContent: Record<string, { subtitle: string; image?: string; color: str
|
|||||||
variedades: { subtitle: "Un poco de todo", color: "from-violet-400 to-purple-600" },
|
variedades: { subtitle: "Un poco de todo", color: "from-violet-400 to-purple-600" },
|
||||||
};
|
};
|
||||||
|
|
||||||
const defaultTile = { subtitle: "Explora esta categoría", color: "from-slate-400 to-slate-600" };
|
const defaultTile: TileContent = { subtitle: "Explora esta categoría", color: "from-slate-400 to-slate-600" };
|
||||||
|
|
||||||
export function CategoryTiles({ categories }: { categories: Category[] }) {
|
export function CategoryTiles({ categories }: { categories: Category[] }) {
|
||||||
const roots = categories.filter((category) => !category.parentId);
|
const roots = categories.filter((category) => !category.parentId);
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ spec:
|
|||||||
runAsUser: 1001
|
runAsUser: 1001
|
||||||
containers:
|
containers:
|
||||||
- name: app
|
- name: app
|
||||||
image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.135
|
image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.141
|
||||||
env:
|
env:
|
||||||
- name: HEADLESS_PROVIDER
|
- name: HEADLESS_PROVIDER
|
||||||
value: medusa
|
value: medusa
|
||||||
|
|||||||
Reference in new issue
Block a user