-
Notifications
You must be signed in to change notification settings - Fork 40
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
(PC-33528)[PRO] feat : add new Multiselect component #15628
base: master
Are you sure you want to change the base?
Conversation
e4f34d2
to
a6935c0
Compare
96161cf
to
d83f8ac
Compare
a38d613
to
51e3823
Compare
bf5e2e9
to
4c43813
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ca rend super bien 🎉
J'ai quelques petits retours d'utilisation et d'a11y, mais l'affichage visuel / fonctionnement souris m'ont l'air nickel :
- Quand on est focus sur le bouton, je m'attends à ce que le panneau s'ouvre automatiquement quand je presse "Enter" ou "Space"
- Il faut que le panneau se ferme quand le focus sort du panneau (sinon il risque de cacher du contenu inutilement)
- Quand on est focus sur l'input de la checkbox c'est la touche "Space" qui doit toggle la sélection et pas la touche "Enter" (la doc du pattern est ici), ça fonctionne bien pour le "Tout sélectionner", mais pas pour les checkbox individuelles
- Il faudrait un attribut
aria-controls
sur le bouton d'ouverture avec pour valeur l'id de la div du panneau (idéalement il faudrait que l'attribut controls apparaisse quand la div du paneau apparait pour ne pas avoir une référence à un id inexistant) - Au moment de faire une recherche dans l'input de recherche, il faudrait un moyen d'annoncer (et d'afficher p-être ?) le nombre de résultats (souvent via un
role="status"
sur un texte genre "n résultats")
Ce serait cool d'avoir l'avis de Julie au global sur le composant (en particulier au lecteur d'écran)!
4c43813
to
e84a161
Compare
Visit the preview URL for this PR (updated for commit 93851a0): https://pc-pro-testing--pr15628-pc-33528-new-multi-s-bb1lh006.web.app (expires Wed, 22 Jan 2025 10:18:56 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: 032d233ee67e1c50d6af12e29c936c7076770eb1 |
e1b3605
to
c412b65
Compare
c80fc3d
to
e998578
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je pousse ces commentaires dans un premier temps pour résolution éventuelle, et je fais un tour en test user réel pour l'a11y en attendant.
hasSelectAllOptions?: boolean | ||
disabled?: boolean | ||
} & ( // If `hasSearch` is `true`, `searchExample` and `searchLabel` are required. // This part applies the condition | ||
| { hasSearch: true; searchExample: string; searchLabel: string } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si MultiSelect est construit à partir de MultiSelectPanel, peut-être définir un typage MultiSelectProps qui est une extension de MultiSelectPanelProps.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm pour la doc sur le composant MultiSelect je préfère rester explicite sur le typage de ses props
pro/src/ui-kit/MultiSelect/__specs__/MultiSelectTrigger.spec.tsx
Outdated
Show resolved
Hide resolved
label: string | ||
} | ||
|
||
type MultiSelectProps = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Aussi en testant dans le formulaire, je vois qu'il y a pas d'état en erreur. Je sais pas si ça a été designé par Agathe, mais dans l'exemple de l'implémentation des formats, le champ est obligatoire donc si on valide sans en avoir sélectionné il faudrait qu'il ait une bordure rouge je suppose (le message d'erreur serait géré par un FieldLayout
) ? 🤔
Aussi dans l'exemple, si le Format est le premier champ en erreur au moment de la validation du formulaire, il doit être re-focus. C'est fait par le composant ScrollToFirstErrorAfterSubmit
qui se base sur le premier attribut aria-invalid
de la page. Dans notre cas, c'est un bouton qu'on doit refocus, et je pense que ça a pas de sens de lui mettre un attribut aria-invalid
donc je sais pas trop ce qui est le mieux (ne pas se baser sur aria-invalid
mais sur un data-attribute maison ?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
en effet !
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'ai ajouté un data-error sur le bouton et mis à jour ScrollToFirstErrorAfterSubmit pour le prendre en compte, à priori le scroll et le focus fonctionnent comme souhaité. Est-ce que j'ajoute un commentaire pour expliquer pourquoi on a besoin de ça dans la fonction ?
f664abc
to
6a39e36
Compare
93851a0
to
607b48b
Compare
607b48b
to
cdd28d6
Compare
cdd28d6
to
fac3c07
Compare
fac3c07
to
af365e6
Compare
@@ -36,6 +36,10 @@ export const SelectedValuesTags = ({ | |||
const visibleTags = selectedOptions.slice(0, 5) | |||
const extraTagsCount = selectedOptions.length - visibleTags.length | |||
|
|||
if (selectedOptions.length === 0) { | |||
return <></> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tu ne peux pas retourner
return null
But de la pull request
Ticket Jira (ou description si BSR) : https://passculture.atlassian.net/browse/PC-33528
Vérifications