v11.20
Cette release contient un grand nombre de petites évolutions suite à des demandes utilisateurs diverses :
Composants par défaut sur les domaines
Les composants par défaut (InputComponent
, SelectComponent
, DisplayComponent
...) sont désormais portés par le domaine au lieu d'être définis dans le composant de champ (Field
, posé par fieldFor
/selectFor
/autocompleteFor
). Cette évolution est accompagnée d'un renforcement des types de composants que l'on peut passer aux domaines, afin de pouvoir être sûr que le composant passé corresponde bien au type de domaine (exemple : utiliser une Checkbox
sur un domaine de type "boolean"
uniquement).
Cela implique les changements (potentiellement breaking changes) suivants :
-
Si vous utilisez
makeField
ou.add()
pour créer un champ sans domaine, alors vous n'aurez plus de composants d'affichage ou de saisie par défaut. Il est donc impératif de renseigner un domaine ou les composants d'affichage dont vous avez besoin. -
Les composants génériques, ceux qui fonctionnent pour plusieurs types comme
SelectAutocomplete
par exemple, doivent spécifier le type dans la définition, car il ne peut pas être inféré automatiquement 🥺Cela veut dire qu'écrire
domain({type: "number", SelectComponent: SelectAutocomplete})
est désormais une erreur et que vous devez écriredomain({type: "number", SelectComponent: SelectAutocomplete<"number">})
pour que ça fonctionne. En contrepartie, vous aurez bien le bon type partout dansselectProps
, ce qui n'était pas forcément le cas avant. -
Les domaines multiples (
"boolean-array"
,"number-array"
et"string-array"
) utilisent désormaisSelectChips
etAutocompleteChips
comme composants par défaut (et aucunInputComponent
), puisque les composants doivent désormais correspondre au type du domaine. Les domaines de type"object"
n'ont plus aucun composant de saisie par défaut. Cela ne devrait casser personne puisqu'il fallait de toute façon impérativement renseigner d'autres composants pour utiliser ces domaines, vous pouvez en revanche maintenant vous en abstenir si les composants par défaut vous conviennent. -
Vous devez désormais impérativement utiliser la fonction
domain()
pour créer un domaine. Si vous utilisiez simplement{type: "string"}
à certains endroits par exemple, vous devrez le wrapper, ou bien spécifier manuellement les 5 composants de champs.
Autres évolutions
-
b4768c7 -
showIfNoData
sur les operationList deActionBar
/tableFor
Vous pouvez renseigner cette propriété (àtrue
) dans une définition d'action dans uneActionBar
ou dans untableFor
pour qu'elle soit affichée en permanence, au lieu d'être conditionnée au fait d'avoir sélectionné au moins un élément. A noter que dans l'action est toujours appelée avec les éléments sélectionnés, donc ici ça serait une liste vide. Cette propriété doit être renseignée même s'il n'y a pas de sélection du tout (ce qui est un breaking change pourtableFor
). -
6743d7a -
noSuggestionsOnEmptyQuery
surAutocomplete
Le composant d'Autocomplete
(et doncSelectAutocomplete
également) peuvent désormais ne pas afficher les suggestions tant que la query est vide, à la manière deAutocompleteSearch
(dont le comportement inverse pouvait déjà être activé avecsearchOnEmptyQuery
) -
34827f3 -
noBlurOnClick
=>noFocusOnClick
Dans la définition d'un "trailing button" dans un dérivé deTextField
, la propriéténoBlurOnClick
a été renommée ennoFocusOnClick
puisqu'elle n'effectue plus de "blur" (l'implémentation précédente le faisait à tort, ce qui pouvait entraîner des effets secondaires indésirables, comme dans l'InputDate
par exemple) -
0775e83 - Conservation des modifications de
criteriaBuilder
dans le type deCollectionStore
Le type d'unCollectionStore
qui a patché son critère (comme avecuseFormNode
, viacriteriaBuilder
), prend désormais en compte le type résultant de ces modifications, au lieu de l'ignorer silencieusement. -
c39d60e - Fix critères "vides" affichés quand même dans le
Summary
En particulier pour les listes vides. -
d05d66c - Ajout mouseEvent sur
onLineClick
surtableFor
Il est passé en deuxième paramètre. -
ab3eddd - Extraction de
useInput
deInput
Le comportement du composantInput
qui gère le masque de saisie et la saisie de nombres (décimaux) a été extrait dans un hook, si vous voulez l'utiliser dans un autre composant que leTextField
.