Saltar a contenido

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, page o custom.
  • 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.