fix: categorías con tildes sin duplicados en el importador ni links rotos
Preparación para renombrar las categorías reales con tildes/eñes
("Figuras de acción", "Muñecas y peluches", etc.):
- Importador CSV (admin): categorías y colecciones se matchean ignorando
tildes/eñes, para que un CSV escrito sin tildes reuse la categoría
existente en vez de crear un duplicado. Títulos de producto sin cambios.
- Catálogo: ?category= se resuelve contra los nombres reales ignorando
tildes/mayúsculas, así los links viejos siguen funcionando.
- Plantilla CSV de ejemplo con "Figuras de acción".
Aprobado por devsecops-auditor (sin colisiones con los nombres actuales,
sin riesgo de inyección/XSS). CI guard local OK, tsc backend OK, build de
producción del storefront OK.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_018r19s4H8MBGegqToqw5guP
This commit is contained in:
1 parent
8e4f3515fe
commit
f6918b9eab
2 files changed
+26
-8
No files matched your search
@@ -11,6 +11,13 @@ type CatalogPageProps = {
|
||||
searchParams: Promise<Record<string, string | string[] | undefined>>;
|
||||
};
|
||||
|
||||
// Sin tildes/eñes ni mayusculas: los links viejos (o escritos a mano)
|
||||
// como ?category=Munecas y peluches siguen llevando a la categoria real
|
||||
// "Muñecas y peluches" (renombrada con tildes el 2026-09-27).
|
||||
function normalizeName(value: string): string {
|
||||
return value.normalize("NFD").replace(/[\u0300-\u036f]/g, "").trim().toLowerCase();
|
||||
}
|
||||
|
||||
function single(value: string | string[] | undefined): string {
|
||||
return Array.isArray(value) ? value[0] ?? "" : value ?? "";
|
||||
}
|
||||
@@ -19,7 +26,9 @@ export default async function CatalogPage({ searchParams }: CatalogPageProps) {
|
||||
const params = await searchParams;
|
||||
const [products, categories] = await Promise.all([getProducts(), getCategories()]);
|
||||
|
||||
const category = single(params.category) || "Todos";
|
||||
const requestedCategory = single(params.category) || "Todos";
|
||||
const category =
|
||||
categories.find((node) => normalizeName(node.name) === normalizeName(requestedCategory))?.name ?? requestedCategory;
|
||||
const collection = single(params.collection);
|
||||
const query = single(params.q);
|
||||
const taxonomy = {
|
||||
|
||||
Reference in new issue
Block a user