EN · DE · RU · FR · ES

#2756 : propTypes.js

projectforge-webapp/src/utilities/propTypes.js Définitions de types / Export PropTypes · projectforge-webapp/src/utilities/propTypes.js 58 lignes · 49 code · 1 commentaire · 8 vides
Référentiel central des définitions de formes PropTypes React partagées pour l'arborescence des composants de l'application web ProjectForge. Ce module exporte des validateurs de types réutilisables pour les menus, boutons, couleurs, listes déroulantes, colonnes de tableaux, badges et éléments de contenu de mise en page dynamique. En regroupant ces PropTypes dans un seul module, la base de code évite les duplications dans des dizaines de composants qui affichent les mêmes formes de données, tout en fournissant une vérification de type cohérente pendant le développement.

Architecture

Modèle de conception

Plutôt que de définir les PropTypes en ligne dans la déclaration .propTypes de chaque composant, l'application web ProjectForge extrait les formes partagées dans ce module utilitaire. Les composants importent des validateurs spécifiques (par exemple buttonPropType) et les utilisent directement. Il s'agit d'une forme du modèle « vocabulaire de types partagé » — il réduit les dérives où le même concept (par exemple, un bouton) reçoit des PropTypes légèrement différents dans différents composants.

PropTypes exportés

menuItemPropType — forme minimale avec une chaîne title. Utilisé dans les menus déroulants de navigation et les composants de menu latéral.

buttonPropType — forme complète de bouton couvrant les variantes de type Bootstrap (primary à link), id optionnel, gestionnaire de clic, un sous-type CHECKBOX et l'état checked.

colorPropType — chaînes de couleurs énumérées correspondant aux noms de couleurs Bootstrap 4 plus light.

selectProps — forme de sélection avec id requis et tableau options (prenant en charge les tableaux d'objets {value, title} et les tableaux plats de chaînes/nombres), plus une étiquette et une couleur optionnelles.

tableColumnsPropType — tableau de descripteurs de colonnes avec id et title.

contentPropType — la forme fondamentale du système DynamicLayout : chaque bloc de contenu nécessite une chaîne type (par exemple INPUT, TABLE, LABEL) et une chaîne key (identifiant unique dans la mise en page).

Évolution : dynamicTypePropType → chaîne

Une version antérieure de ce fichier définissait un dynamicTypePropType énumérant l'ensemble des types DynamicLayout pris en charge (CHECKBOX, COL, CUSTOMIZED, FIELDSET, INPUT, LABEL, ROW, SELECT, TABLE, TEXTAREA). Cela a ensuite été remplacé par un simple PropTypes.string.isRequired — un assouplissement délibéré qui permet au moteur de mise en page côté serveur d'introduire de nouveaux types de contenu sans nécessiter de mise à jour des PropTypes côté frontend, suivant un principe de conception ouvert-fermé.

Historique Git

CommitCe qui a changé
09fadca1cAjout de 'light' à l'énumération colorPropType. Cela était nécessaire lorsque la configuration du calendrier a commencé à prendre en charge une variante de couleur claire pour les styles de source d'événement, en s'alignant sur l'expansion de la palette de couleurs de Bootstrap.
4b945f64dRevert de 30eea8132 : rétablissement du champ contentPropType.key en .isRequired. Le revert suggère que la clé optionnelle provoquait des échecs silencieux de recherche de mise en page — une clé obligatoire force le code consommateur à toujours fournir des identifiants.
30eea8132Rendu de contentPropType.key optionnel (suppression de .isRequired), probablement pour prendre en charge les blocs de contenu en ligne qui n'ont pas besoin d'identifiants de persistance. Cela a ensuite été annulé.
3763871f8Suppression de l'énumération dynamicTypePropType et remplacement de contentPropType.type par un simple PropTypes.string.isRequired. Cela a ouvert le système DynamicLayout à des types de contenu arbitraires pilotés par le serveur sans modifications du code frontend.
ae35f5cc0Ajout de TABLE à l'énumération dynamicTypePropType lorsque la vue liste a été migrée pour utiliser le système de rendu de tableau DynamicLayout au lieu d'un composant de tableau codé en dur.
a8102b34eAjout de SELECT à l'énumération dynamicTypePropType et introduction de la forme contentPropType. Il s'agit du commit fondateur qui a établi le module PropTypes comme vocabulaire partagé pour le système DynamicLayout.