-
Notifications
You must be signed in to change notification settings - Fork 63
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
LG-4526: refactor popover-consuming components #2501
base: LG-4121-popover-refactor
Are you sure you want to change the base?
Conversation
🦋 Changeset detectedLatest commit: 0b99dd5 The changes in this PR will be included in the next version bump. This PR includes changesets to release 66 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Size Change: -966 B (-0.07%) Total Size: 1.38 MB
ℹ️ View Unchanged
|
a3766bb
to
21481e5
Compare
export const inlineDefinitionStyles = css` | ||
white-space: normal; | ||
`; |
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.
Added this to ensure text wraps within the tooltip
/** | ||
* Number that controls the z-index of the tooltip containing the full label text. | ||
*/ | ||
popoverZIndex?: number; |
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.
This was added exclusively for the tooltip for instances of ComboboxChip
with long texts: https://github.com/search?q=(org:10gen+OR+org:evergreen-ci+OR+org:mongodb+OR+org:mongodb-js+OR+org:mongodb-labs+OR+org:wiredtiger)+AND+(@leafygreen-ui/chip+OR+%3CChip)+AND+popoverZIndex%3D&type=code
Instead, we can now always use the top layer to ensure proper visual stacking
{...popoverProps} | ||
renderMode={RenderMode.TopLayer} |
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.
From reviewing usage of languageOptions
: https://github.com/search?q=(org:10gen+OR+org:evergreen-ci+OR+org:mongodb+OR+org:mongodb-js+OR+org:mongodb-labs+OR+org:wiredtiger)+AND+(@leafygreen-ui/code+OR+%22%3CCode%22)+AND+(languageOptions%3D)&type=code
I observed:
- few enough instances (~8) of using a
Code
component w/ aLanguageSwitcher
- consistently usage of rendering the
LanguageSwitcher
as the highest element
usePortal={false}
+ highpopoverZIndex
usePortal={true}
- the
LanguageSwitcher
is the only open element at any given time
For these reasons, I believe it's safe to always use the top layer. If there's strong reasoning to the contrary, we can surface the renderMode
prop for this component, but it doesn't seem necessary for this case
usePortal={shouldTooltipUsePortal} | ||
renderMode={RenderMode.TopLayer} |
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.
(insert github code search link)
className={tooltipStyles} | ||
darkMode={darkMode} | ||
justify={Justify.Middle} | ||
renderMode={RenderMode.TopLayer} |
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.
(insert github code search link)
usePortal = true, | ||
portalClassName, | ||
portalContainer, | ||
portalRef, | ||
scrollContainer, |
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.
(insert github code search link)
usePortal={false} | ||
align="right" | ||
justify="middle" | ||
align={Align.Right} | ||
justify={Justify.Middle} | ||
open={typeof hideTooltip === 'boolean' ? !hideTooltip : undefined} | ||
renderMode={RenderMode.TopLayer} |
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.
(insert github code search link)
darkMode={darkMode} | ||
justify={Justify.Middle} | ||
renderMode={RenderMode.TopLayer} |
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.
(insert github code search link)
timeoutRef.current = setTimeout(() => { | ||
setOpen(true); | ||
}, 500); | ||
}); | ||
}, 35), | ||
onMouseLeave: debounce((e: MouseEvent) => { | ||
userTriggerHandler('onMouseLeave', e); | ||
if (timeoutRef.current) { | ||
clearTimeout(timeoutRef.current); | ||
timeoutRef.current = null; | ||
} |
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.
moved to this JS approach for delaying the tooltip entry in place of the CSS transition-delay
21481e5
to
9852a0d
Compare
9852a0d
to
0b99dd5
Compare
6c8a4cd
to
3cfece1
Compare
✍️ Proposed changes
usePortal
prop withrenderMode
Popover
-consuming components🎟 Jira ticket: LG-4526
✅ Checklist
For bug fixes, new features & breaking changes
yarn changeset
and documented my changes🧪 How to test changes
Terrence section
Combobox
live examplerenderMode
settingsmultiselect
, select long text options, and hover chipsGuideCue
live exampleMultistep Demo
storyMenu
live examplerenderMode
settingsSplitButton
live examplerenderMode
settingsSearchInput
live exampleAdam section
Select
live examplerenderMode
settingsCode
live exampleCopyButton
With Language Switcher
story and interact withLanguageSwitcher
DatePicker
live exampleNumberInput
live exampleUnitSelect
UnitSelectButton
Pagination
live exampleWith Current Page Options
storyShaneeza section
Tooltip
live examplerenderMode
settingsCopyable
live exampleInfoSprinkle
live exampleInlineDefinition
live examplePipeline
live exampleSideNav
live exampleCollapseToggle
Stepper
live exampleEllipsesStep