-
Notifications
You must be signed in to change notification settings - Fork 0
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
fix(components): make banner visible again when isClosable or isColla… #1155
base: main
Are you sure you want to change the base?
Conversation
…psible change (rapportnav usecase)
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #1155 +/- ##
=======================================
Coverage 57.39% 57.39%
=======================================
Files 55 55
Lines 805 805
Branches 274 274
=======================================
Hits 462 462
Misses 327 327
Partials 16 16
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
@@ -46,14 +46,22 @@ function Banner({ | |||
const [isCollapsing, setIsCollapsing] = useState<boolean>(false) | |||
const [hasCollapsed, setHasCollapsed] = useState<boolean>(false) | |||
|
|||
useEffect(() => { | |||
// Reset visibility/height when isCollapsible or isClosable change | |||
setIsHidden(false) |
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.
On ne re-init pas avec !!isHiddenByDefault
?
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 peux faire ça aussi mais mon usecase est différent :
côté rapportnav, quand le rapport est incomplet, on est sur une Banner qui se rétracte mais quand le rapport devient complet, elle devient fermable. Et dans ce cas là, si elle avait été rétractée, alors elle restait rétractée alors qu'on la veut full-height fermable.
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.
Alors je challenge l'existence même de ce useEffect : pour moi une Banner n'est pas sensée être un composant qu'on garde dans le DOM en faisant évoluer ses props, c'est un composant temporaire qui peut avoir plusieurs cas d'utilisation et qui devrait être détruit et recréé par l'app qui l'utilise à chaque fois qu'on couvre un autre "cas". Soit via une key
soit via un {myState1 && <Banner ...>} {myState2 && <Banner ...>}
.
Ma proposition est d'éviter (dans la mesure du possible) les useEffects qui abstraient de la logique qu'on peut tout à fait contrôler directement via l'extérieur du composant. Et si on veut répondre à un besoin particulier via un useEffect pour facilier une abstraction, je préfèrerais qu'on le fasse par une prop explicite qu'on expose pour "activer" ce useEffect (ex: isUndefinedWhenDisabled
sur les fields).
Ce que je proposerais donc ici c'est :
- Retirer ce useEffect par défaut
-
- Soit recréer le composant depuis l'extérieur quand les props changent,
- Soit ajouter une prop
isReopenedOnIsClosableOrIsCollapsibleChange
qui active ce useEffect. (pour éviter un saut visuel je suppose ?)
Qu'est-ce que vous en pensez ?
Quality Gate failedFailed conditions See analysis details on SonarCloud Catch issues before they fail your Quality Gate with our IDE extension SonarLint |
…psible change (rapportnav usecase)
Description
Côté RapportNav, on peut passer d'un type de banniere à l'autre selon certains cas. Mais la transition était mal supportée comme la video l'indique.
Screen.Recording.2024-04-24.at.12.51.53.mov
Preview URL
https://637e01cf5934a2ae881ccc9d-sxfnedzwrg.chromatic.com/