Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extraire la couche d'adaptation entre les composants standards (toolbox) et les composants pour les formulaires (forms) #192

Open
JabX opened this issue Nov 23, 2023 · 0 comments
Labels
Effort: important Peut être fait en plusieurs semaines Priorité: moyenne On peut contourner si c'est pas fait mais c'est bof

Comments

@JabX
Copy link
Member

JabX commented Nov 23, 2023

Les composants de champs doivent tous répondre à une API fixe Focus pour être utilisés comme Input/Select/Autocomplete... et implémenter des comportements associés. Par exemple :

  • Les composants sont tous appelés avec une prop type qui correspond au type du domaine (string, number, string-array...), et le composant doit avoir un couple value/onChange qui correspond au type TS correspondant (ex: type="string-array" implique value: string[] et onChange: (value: string[]) => void), et implémenter une conversion de type si nécessaire.
  • Les composants de saisies sont appelés avec une prop error: string qui correspond au message d'erreur éventuel à afficher.
  • Les composants de Select doivent avoir une prop values: ReferenceList (sans information de type d'ailleurs)

De plus, ce n'est pas forcément une erreur d'affecter un composant à InputComponent par exemple qui ne respecte pas cette API, ce qui peut amener des comportements étranges non anticipés.

Cela force Focus a redéfinir des composants pré-existants avec les bonnes APIs et les bons comportements (exemples : TextField/Input, Dropdown/Select, Autocomplete/AutocompleteSearch), et force les utilisateurs à recopier les implémentations de ces composants redéfinis dans les leurs lorsqu'ils veulent faire des composants personnalisés.

La solution envisagée serait d'extraire la logique de surcharge des composants de forms pour la rendre disponible plus globalement, afin de pouvoir directement utiliser un composant pré-existant dans un champ sans avoir à systématiquement créer un composant wrapper manuel. L'idée serait de ne plus avoir aucun composant de champ dans forms, remplacés par des "adapters". Dans l'idée, remplacer InputComponent: Input par quelque chose comme InputComponent: props => <TextField {...props} {...valueAdapter(props)} {...errorAdapter(props)} />.

@JabX JabX added Priorité: moyenne On peut contourner si c'est pas fait mais c'est bof Effort: important Peut être fait en plusieurs semaines labels Feb 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Effort: important Peut être fait en plusieurs semaines Priorité: moyenne On peut contourner si c'est pas fait mais c'est bof
Projects
None yet
Development

No branches or pull requests

1 participant