[EuiTourStep] className consistency with EuiPopover + performance/cleanups#7497
[EuiTourStep] className consistency with EuiPopover + performance/cleanups#7497cee-chen merged 7 commits intoelastic:mainfrom
className consistency with EuiPopover + performance/cleanups#7497Conversation
- consumers who want to add a className to the popover panel should use `panelClassName` instead
- consumers who want to add styles to the popover panel should use `panelStyle` instead + fix/clean up extended EuiPopover props typing(s) to allow `style` prop
+ replace snapshots with explicit assertions
- grab EuiBeacon too while we're here
- split up into `memo`'d internal subcomponents (most performant option), which also has the side benefit of making code a little easier to reason about
|
Preview staging links for this PR:
|
💚 Build Succeeded
|
|
This PR contains breaking changes. The opener of this pull request is asked to perform the following due diligence steps below, to assist EUI in our next Kibana upgrade:
|
|
Checked all usages of |
| */ | ||
|
|
||
| import React from 'react'; | ||
| import { mount } from 'enzyme'; |
| const customFooterAction = useMemo(() => { | ||
| if (!footerAction) return null; | ||
|
|
||
| return Array.isArray(footerAction) ? ( |
There was a problem hiding this comment.
I think using a regular if statement would be cleaner here, but I have no strong preference!
There was a problem hiding this comment.
I'm a huge sucker for early returns 😅 I like that they mean the rest of the code has one less set of indentations!
| const [popoverPosition, setPopoverPosition] = useState<EuiPopoverPosition>(); | ||
|
|
||
| const onPositionChange = (position: EuiPopoverPosition) => { | ||
| const onPositionChange = useCallback((position: EuiPopoverPosition) => { |
tkajtoch
left a comment
There was a problem hiding this comment.
LGTM! The changes look and work great 🎉
Feel free to ignore my comment about the if statement if you prefer to leave it as is!
|
Thanks a million Tomasz! Hope my comment about the early return makes sense, you'll definitely see me continue to do that in code if I can get away with it :shifty_eyes: |
`v92.2.1` ⏩ `v93.0.0` --- ## [`v93.0.0`](https://github.com/elastic/eui/releases/v93.0.0) **Bug fixes** - Fixed `EuiTextTruncate` component to clean up timer from side effect on unmount ([#7495](elastic/eui#7495)) **Breaking changes** - Removed deprecated `anchorClassName` prop from `EuiPopover`. Use `className` instead ([#7488](elastic/eui#7488)) - Removed deprecated `buttonRef` prop from `EuiPopover`. Use `popoverRef` instead ([#7488](elastic/eui#7488)) - Removed deprecated `toolTipTitle` and `toolTipPosition` props from `EuiContextMenuItem`. Use `toolTipProps.title` and `toolTipProps.position` instead ([#7489](elastic/eui#7489)) - Removed deprecated internal `setSelection` ref method from `EuiInMemoryTable` and `EuiBasicTable`. Use the new controlled `selection.selected` prop API instead. ([#7491](elastic/eui#7491)) - `EuiTourStep`'s `className` and `style` props now apply to the anchoring element instead of to the popover panel, to match `EuiPopover` behavior. ([#7497](elastic/eui#7497)) - Convert your existing usages to `panelClassName` and `panelStyle` respectively instead. **Performance** - Improved the amount of recomputed styles being generated by `EuiCode` and `EuiCodeBlock` ([#7486](elastic/eui#7486)) **CSS-in-JS conversions** - Converted `EuiSearchBar` to Emotion ([#7490](elastic/eui#7490)) - Converted `EuiEmptyPrompt` to Emotion ([#7494](elastic/eui#7494)) - Added `euiBorderColor` and `useEuiBorderColorCSS` style utilities ([#7494](elastic/eui#7494)) --------- Co-authored-by: Jon <jon@elastic.co>
`v92.2.1` ⏩ `v93.0.0` --- ## [`v93.0.0`](https://github.com/elastic/eui/releases/v93.0.0) **Bug fixes** - Fixed `EuiTextTruncate` component to clean up timer from side effect on unmount ([elastic#7495](elastic/eui#7495)) **Breaking changes** - Removed deprecated `anchorClassName` prop from `EuiPopover`. Use `className` instead ([elastic#7488](elastic/eui#7488)) - Removed deprecated `buttonRef` prop from `EuiPopover`. Use `popoverRef` instead ([elastic#7488](elastic/eui#7488)) - Removed deprecated `toolTipTitle` and `toolTipPosition` props from `EuiContextMenuItem`. Use `toolTipProps.title` and `toolTipProps.position` instead ([elastic#7489](elastic/eui#7489)) - Removed deprecated internal `setSelection` ref method from `EuiInMemoryTable` and `EuiBasicTable`. Use the new controlled `selection.selected` prop API instead. ([elastic#7491](elastic/eui#7491)) - `EuiTourStep`'s `className` and `style` props now apply to the anchoring element instead of to the popover panel, to match `EuiPopover` behavior. ([elastic#7497](elastic/eui#7497)) - Convert your existing usages to `panelClassName` and `panelStyle` respectively instead. **Performance** - Improved the amount of recomputed styles being generated by `EuiCode` and `EuiCodeBlock` ([elastic#7486](elastic/eui#7486)) **CSS-in-JS conversions** - Converted `EuiSearchBar` to Emotion ([elastic#7490](elastic/eui#7490)) - Converted `EuiEmptyPrompt` to Emotion ([elastic#7494](elastic/eui#7494)) - Added `euiBorderColor` and `useEuiBorderColorCSS` style utilities ([elastic#7494](elastic/eui#7494)) --------- Co-authored-by: Jon <jon@elastic.co>
`v92.2.1` ⏩ `v93.0.0` --- ## [`v93.0.0`](https://github.com/elastic/eui/releases/v93.0.0) **Bug fixes** - Fixed `EuiTextTruncate` component to clean up timer from side effect on unmount ([elastic#7495](elastic/eui#7495)) **Breaking changes** - Removed deprecated `anchorClassName` prop from `EuiPopover`. Use `className` instead ([elastic#7488](elastic/eui#7488)) - Removed deprecated `buttonRef` prop from `EuiPopover`. Use `popoverRef` instead ([elastic#7488](elastic/eui#7488)) - Removed deprecated `toolTipTitle` and `toolTipPosition` props from `EuiContextMenuItem`. Use `toolTipProps.title` and `toolTipProps.position` instead ([elastic#7489](elastic/eui#7489)) - Removed deprecated internal `setSelection` ref method from `EuiInMemoryTable` and `EuiBasicTable`. Use the new controlled `selection.selected` prop API instead. ([elastic#7491](elastic/eui#7491)) - `EuiTourStep`'s `className` and `style` props now apply to the anchoring element instead of to the popover panel, to match `EuiPopover` behavior. ([elastic#7497](elastic/eui#7497)) - Convert your existing usages to `panelClassName` and `panelStyle` respectively instead. **Performance** - Improved the amount of recomputed styles being generated by `EuiCode` and `EuiCodeBlock` ([elastic#7486](elastic/eui#7486)) **CSS-in-JS conversions** - Converted `EuiSearchBar` to Emotion ([elastic#7490](elastic/eui#7490)) - Converted `EuiEmptyPrompt` to Emotion ([elastic#7494](elastic/eui#7494)) - Added `euiBorderColor` and `useEuiBorderColorCSS` style utilities ([elastic#7494](elastic/eui#7494)) --------- Co-authored-by: Jon <jon@elastic.co>
Summary
As always, I recommend following along by commit!
Breaking prop<->DOM changes
classNames to the anchor element instead of to the popover panelEuiPopoverbehavior (consumers cannot otherwise apply styles to the anchor since we deprecated theanchorClassNameprop).panelClassNameinsteadstyleprop to the anchor element instead of to the popover panelpanelStyleinstead.Tech debt
React.memo'd subcomponents which optimizes/reduces rerenders.QA
General checklist
- [ ] Checked for accessibility including keyboard-only and screenreader modes**- EuiTour does not appear to be inherently accessible in productionand cypress tests