EN · DE · RU · FR · ES

#2756: propTypes.js

projectforge-webapp/src/utilities/propTypes.js Definiciones de tipo / Exportación de PropTypes · projectforge-webapp/src/utilities/propTypes.js 58 líneas · 49 código · 1 comentario · 8 en blanco
Repositorio central de definiciones de forma de PropTypes de React compartidas para el árbol de componentes de la aplicación web ProjectForge. Este módulo exporta validadores de tipo reutilizables para menús, botones, colores, menús desplegables de selección, columnas de tabla, insignias y elementos de contenido de diseño dinámico. Al ubicar estos PropTypes en un solo módulo, la base de código evita la duplicación en docenas de componentes que renderizan las mismas formas de datos, al tiempo que proporciona una verificación de tipo en tiempo de ejecución consistente durante el desarrollo.

Arquitectura

Patrón de diseño

En lugar de definir PropTypes en línea dentro de la declaración .propTypes de cada componente, la aplicación web ProjectForge extrae formas compartidas en este módulo de utilidad. Los componentes importan validadores específicos (por ejemplo, buttonPropType) y los usan directamente. Esto es una forma del patrón "vocabulario de tipo compartido": reduce la desviación donde el mismo concepto (por ejemplo, un botón) obtiene PropTypes ligeramente diferentes en diferentes componentes.

PropTypes exportados

menuItemPropType — forma mínima con una cadena title. Se usa en menús desplegables de navegación y componentes de menú lateral.

buttonPropType — forma completa de botón que cubre variantes de estilo Bootstrap (primary hasta link), id opcional, manejador de clic, un subtipo CHECKBOX y estado checked.

colorPropType — cadenas de color enumeradas que coinciden con los nombres de color de Bootstrap 4 más light.

selectProps — forma de entrada de selección con id requerido y arreglo options (que admite tanto arreglos de objetos {value, title} como arreglos planos de cadena/número), más etiqueta y color opcionales.

tableColumnsPropType — arreglo de descriptores de columna con id y title.

contentPropType — la forma fundamental para el sistema DynamicLayout: cada bloque de contenido requiere una cadena type (por ejemplo, INPUT, TABLE, LABEL) y una cadena key (identificador único dentro del diseño).

Evolución: dynamicTypePropType → cadena

Una versión anterior de este archivo definía un dynamicTypePropType que enumeraba el conjunto de tipos DynamicLayout admitidos (CHECKBOX, COL, CUSTOMIZED, FIELDSET, INPUT, LABEL, ROW, SELECT, TABLE, TEXTAREA). Esto fue reemplazado posteriormente por un simple PropTypes.string.isRequired — una relajación deliberada que permite al motor de diseño del lado del servidor introducir nuevos tipos de contenido sin requerir una actualización de PropTypes en el frontend, siguiendo un principio de diseño abierto-cerrado.

Historial de Git

CommitQué cambió
09fadca1cSe añadió 'light' a la enumeración colorPropType. Esto fue necesario cuando la configuración del calendario comenzó a admitir una variante de color claro para los estilos de fuente de eventos, alineándose con la expansión de la paleta de colores de Bootstrap.
4b945f64dSe revirtió 30eea8132: se restauró el campo contentPropType.key a .isRequired. La reversión sugiere que la clave opcional estaba causando que las búsquedas de diseño fallaran silenciosamente — una clave requerida obliga al código consumidor a proporcionar siempre identificadores.
30eea8132Se hizo opcional contentPropType.key (se eliminó .isRequired), presumiblemente para admitir bloques de contenido en línea que no necesitan identificadores de persistencia. Esto fue revertido posteriormente.
3763871f8Se eliminó la enumeración dynamicTypePropType y se reemplazó contentPropType.type con un simple PropTypes.string.isRequired. Esto abrió el sistema DynamicLayout a tipos de contenido arbitrarios impulsados por el servidor sin cambios en el código del frontend.
ae35f5cc0Se añadió TABLE a la enumeración dynamicTypePropType cuando la vista de lista se migró para usar el sistema de renderizado de tablas DynamicLayout en lugar de un componente de tabla hardcodeado.
a8102b34eSe añadió SELECT a la enumeración dynamicTypePropType y se introdujo la forma contentPropType. Este fue el commit fundamental que estableció el módulo PropTypes como un vocabulario compartido para el sistema DynamicLayout.