feat(storefront): franquicias, sagas y personajes (Disney > Toy Story > Rex)
Taxonomía desde tags de Medusa con prefijo (franquicia:/saga:/personaje:),
muchos-a-muchos (ej. "Minnie y Mickey" tiene dos personajes). Pixar va
dentro de Disney.
- lib/taxonomy.ts: helpers + árbol franquicia > saga > personaje.
- Navbar: "Personajes" pasa a mega panel por franquicia (con totales,
sagas y personajes); el menú lateral mobile muestra franquicias y sagas.
Fallback a colecciones si el provider no trae tags.
- Catálogo: filtros "Franquicia" y "Personaje" (acotado a la franquicia),
chip removible de "Saga", ?franquicia/?saga/?personaje en la URL, título
según la taxonomía de la URL, búsqueda normalizada ("spiderman" encuentra
"Spider-Man"). Conteos client-side (no son facetas de Meilisearch).
- allowedCategories memoizado (elimina warnings exhaustive-deps).
Revisado por frontend-critic (contraste de personajes /80, H1 solo desde la
URL, Escape devuelve el foco al trigger) + Playwright: check-taxonomy
17/17 + extras, shot-navbar sin regresiones.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_018r19s4H8MBGegqToqw5guP
This commit is contained in:
1 parent
271ea30f44
commit
472c12ec0a
4 files changed
+290
-33
No files matched your search
@@ -22,6 +22,11 @@ export default async function CatalogPage({ searchParams }: CatalogPageProps) {
|
||||
const category = single(params.category) || "Todos";
|
||||
const collection = single(params.collection);
|
||||
const query = single(params.q);
|
||||
const taxonomy = {
|
||||
franquicia: single(params.franquicia),
|
||||
saga: single(params.saga),
|
||||
personaje: single(params.personaje),
|
||||
};
|
||||
|
||||
// Los links de navbar/tiles apuntan a categorias raiz (ej. "Mochilas y
|
||||
// morrales"), pero ningun producto tiene esa categoria asignada
|
||||
@@ -39,13 +44,14 @@ export default async function CatalogPage({ searchParams }: CatalogPageProps) {
|
||||
|
||||
return (
|
||||
<CatalogClient
|
||||
key={`${category}:${collection}:${query}`}
|
||||
key={`${category}:${collection}:${query}:${taxonomy.franquicia}:${taxonomy.saga}:${taxonomy.personaje}`}
|
||||
products={products}
|
||||
categories={categories}
|
||||
categoryGroups={categoryGroups}
|
||||
initialCategory={category}
|
||||
initialCollection={collection}
|
||||
initialQuery={query}
|
||||
initialTaxonomy={taxonomy}
|
||||
/>
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user