RF-005 — Destinos de contenido y descriptores de filtro¶
| Estado | Implementado, con divergencia de valores entre definiciones |
| Tipo | Campos reutilizables propios (field builders) |
| Ubicación | src/fields/linkConfig.ts · src/fields/ctaButton.ts |
| Depende de | RF-000 |
| Usado por | RF-001 · RF-002 · RF-003 · RF-004 |
Requisito¶
Unificar la forma en que el editor indica el destino de cualquier pieza de contenido —banner, slide, ítem de menú o botón—, admitiendo tres tipos de destino: un filtro de productos, una página del CMS o una URL libre; y describir el filtro de productos como un par tipo/valor que el storefront traduce a una consulta de catálogo, sin que el CMS acceda al catálogo.
Solución adoptada¶
Implementar dos generadores de campos reutilizables que producen un grupo con la misma estructura de destino, parametrizables por valores por defecto y sobreescrituras. La condición de visibilidad de cada campo depende del tipo de destino elegido.
flowchart TD
D{destinationType} -->|filter| F[filterType + filterValue<br/>+ filterQuery para el personalizado]
D -->|page| P[relación → pages]
D -->|custom| U[customUrl]
F --> SF([Storefront])
P --> SF
U --> SF
SF -->|traduce el descriptor| ALG[(Algolia)]
Campos generados¶
| Generador | Produce | Parámetros | Uso |
|---|---|---|---|
linkConfig |
Grupo de enlace: etiqueta opcional, tipo de destino, filtro, página, URL y apertura en pestaña nueva | Destino y tipo de filtro por defecto, ocultación de la etiqueta, sobreescrituras de nombre y descripción | banners.link; equivalente declarado en línea en cada slide |
ctaButton |
Grupo de botón: modo de exhibición (solo texto, solo imagen, texto e imagen), posición en grilla de nueve celdas, y el mismo bloque de destino | Posición y modo por defecto, además de los del enlace | banners.cta; primaryCTA de cada slide |
Reglas de negocio¶
- Mantener una sola gramática de destino en todas las entidades:
filter,pageocustom. - Condicionar la visibilidad de los campos al destino elegido, de modo que el editor solo complete lo pertinente.
- Admitir varios valores de filtro separados por coma en un mismo campo.
- Reservar la consulta JSON de Algolia al filtro personalizado.
- Posicionar los botones sobre una grilla de nueve celdas, sin coordenadas libres.
- Delegar toda resolución al storefront: el CMS persiste descriptores, no resultados.
Divergencia de valores — pendiente de unificación¶
Cuatro definiciones implementan el mismo patrón con valores distintos para las mismas opciones:
| Definición | Categoría | Etiqueta | Colección | Personalizado |
|---|---|---|---|---|
main-navigation y slides |
category |
tag |
collection |
custom |
Bloque productGrid |
category |
tag |
collection |
index |
ctaButton.ts |
category |
tag |
collection |
index |
linkConfig.ts |
category |
product_tag |
collection |
index |
El storefront contempla las tres variantes o alguna combinación no está resolviendo. La unificación invalida las filas ya cargadas, por lo que se decide junto con el equipo del storefront y se acompaña de migración de datos, no solo de cambio de esquema.
Criterios de aceptación¶
| # | Criterio |
|---|---|
| 1 | Configurar los tres tipos de destino en un banner y en un ítem de menú, con los mismos campos visibles en cada caso |
| 2 | Recibir por API el descriptor completo, sin resolución del lado del CMS |
| 3 | Configurar un botón en modo texto, imagen y texto e imagen, con su posición en la grilla |
| 4 | Reutilizar el generador en una entidad nueva sin duplicar la definición de campos |
Limitaciones conocidas¶
- Declarar el slide su grupo de destino en línea en lugar de invocar el generador, lo que duplica la definición y sostiene la divergencia de valores.
- Documentar la divergencia como hallazgo de lectura del código, sin incidente reportado que confirme cuál combinación falla.