Skip to content
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

[EuiPortal] Allow insert prop to be configured via EuiProvider.componentDefaults #6941

Merged

Conversation

cee-chen
Copy link
Member

@cee-chen cee-chen commented Jul 12, 2023

Summary

⚠️ This PR contains semi-messy git history (due to me not wanting to totally nuke @y1j2x34's commits/contributions) - since this PR is on the smaller side, I'd recommend simply reviewing the final files changed diff instead.

closes #6882 (although this work won't be available until this feature branch is merged into main and released)

Example usage:

<EuiProvider
  componentDefaults={{
    EuiPortal: { insert: { sibling: document.querySelector('.foo'), position: 'after' } },
  }}
>
  <App />
</EuiProvider>

See https://eui.elastic.co/pr_6923/#/utilities/provider#component-defaults for more documentation.

QA

  • Run yarn test-cypress-dev locally
  • Open Chrome component testing, select portal.spec.tsx
  • Confirm all / new EuiProvider.componentDefaults tests pass
  • Optionally inspect the DOM output of the two tests to confirm that 2 portal nodes rendered in the expected positions, based on the passed code

General checklist

  • Props have proper autodocs (using @default if default values are missing) and playground toggles
  • Added or updated jest and cypress tests
  • A changelog entry exists and is marked appropriately

y1j2x34 and others added 6 commits July 12, 2023 16:33
Update EuiPortal component

- update class naming to match other instances in EUI for consistency (e.g. EuiAccordionClass)

- update function component typing and syntax

- minor object spread syntax nit
- has to be Cypress, as our current version of jest/jsdom does not support `insertAdjacentElement`

+ clarify in comments of the new provider test how individual component tests should be handled
- not super necessary to have a separate file for it, these types are only used within EuiPortal

- use `as const` array and typeof instead of `keyof`

- simplify insert positions map typing
@kibanamachine
Copy link

Preview documentation changes for this PR: https://eui.elastic.co/pr_6941/

Copy link
Contributor

@1Copenut 1Copenut left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! The commit comments were especially helpful following the refactoring steps.

@cee-chen
Copy link
Member Author

Thanks Trevor!

@cee-chen cee-chen merged commit 0ae73ae into elastic:feature/provider/component-defaults Jul 13, 2023
@cee-chen cee-chen deleted the provider/portal branch July 13, 2023 19:43
cee-chen added a commit to cee-chen/eui that referenced this pull request Jul 25, 2023
…ponentDefaults` (elastic#6941)

* [EuiPortal] Add global settings for Portal-Based Components

* changelog

* Remove `PortalProvider` usage in favor of `EuiComponentDefaultsProvider`

Update EuiPortal component

- update class naming to match other instances in EUI for consistency (e.g. EuiAccordionClass)

- update function component typing and syntax

- minor object spread syntax nit

* Add EuiPortal tests for provided `insert` behavior

- has to be Cypress, as our current version of jest/jsdom does not support `insertAdjacentElement`

+ clarify in comments of the new provider test how individual component tests should be handled

* changelog

* Clean up types

- not super necessary to have a separate file for it, these types are only used within EuiPortal

- use `as const` array and typeof instead of `keyof`

- simplify insert positions map typing

---------

Co-authored-by: y1j2x34 <y1j2x34@qq.com>
cee-chen added a commit to cee-chen/eui that referenced this pull request Jul 25, 2023
…ponentDefaults` (elastic#6941)

* [EuiPortal] Add global settings for Portal-Based Components

* changelog

* Remove `PortalProvider` usage in favor of `EuiComponentDefaultsProvider`

Update EuiPortal component

- update class naming to match other instances in EUI for consistency (e.g. EuiAccordionClass)

- update function component typing and syntax

- minor object spread syntax nit

* Add EuiPortal tests for provided `insert` behavior

- has to be Cypress, as our current version of jest/jsdom does not support `insertAdjacentElement`

+ clarify in comments of the new provider test how individual component tests should be handled

* changelog

* Clean up types

- not super necessary to have a separate file for it, these types are only used within EuiPortal

- use `as const` array and typeof instead of `keyof`

- simplify insert positions map typing

---------

Co-authored-by: y1j2x34 <y1j2x34@qq.com>
cee-chen added a commit to cee-chen/eui that referenced this pull request Jul 26, 2023
…ponentDefaults` (elastic#6941)

* [EuiPortal] Add global settings for Portal-Based Components

* changelog

* Remove `PortalProvider` usage in favor of `EuiComponentDefaultsProvider`

Update EuiPortal component

- update class naming to match other instances in EUI for consistency (e.g. EuiAccordionClass)

- update function component typing and syntax

- minor object spread syntax nit

* Add EuiPortal tests for provided `insert` behavior

- has to be Cypress, as our current version of jest/jsdom does not support `insertAdjacentElement`

+ clarify in comments of the new provider test how individual component tests should be handled

* changelog

* Clean up types

- not super necessary to have a separate file for it, these types are only used within EuiPortal

- use `as const` array and typeof instead of `keyof`

- simplify insert positions map typing

---------

Co-authored-by: y1j2x34 <y1j2x34@qq.com>
cee-chen added a commit that referenced this pull request Aug 1, 2023
…ponentDefaults` (#6941)

* [EuiPortal] Add global settings for Portal-Based Components

* changelog

* Remove `PortalProvider` usage in favor of `EuiComponentDefaultsProvider`

Update EuiPortal component

- update class naming to match other instances in EUI for consistency (e.g. EuiAccordionClass)

- update function component typing and syntax

- minor object spread syntax nit

* Add EuiPortal tests for provided `insert` behavior

- has to be Cypress, as our current version of jest/jsdom does not support `insertAdjacentElement`

+ clarify in comments of the new provider test how individual component tests should be handled

* changelog

* Clean up types

- not super necessary to have a separate file for it, these types are only used within EuiPortal

- use `as const` array and typeof instead of `keyof`

- simplify insert positions map typing

---------

Co-authored-by: y1j2x34 <y1j2x34@qq.com>
cee-chen added a commit to cee-chen/eui that referenced this pull request Aug 1, 2023
…ponentDefaults` (elastic#6941)

* [EuiPortal] Add global settings for Portal-Based Components

* changelog

* Remove `PortalProvider` usage in favor of `EuiComponentDefaultsProvider`

Update EuiPortal component

- update class naming to match other instances in EUI for consistency (e.g. EuiAccordionClass)

- update function component typing and syntax

- minor object spread syntax nit

* Add EuiPortal tests for provided `insert` behavior

- has to be Cypress, as our current version of jest/jsdom does not support `insertAdjacentElement`

+ clarify in comments of the new provider test how individual component tests should be handled

* changelog

* Clean up types

- not super necessary to have a separate file for it, these types are only used within EuiPortal

- use `as const` array and typeof instead of `keyof`

- simplify insert positions map typing

---------

Co-authored-by: y1j2x34 <y1j2x34@qq.com>
cee-chen added a commit to cee-chen/eui that referenced this pull request Aug 3, 2023
…ponentDefaults` (elastic#6941)

* [EuiPortal] Add global settings for Portal-Based Components

* changelog

* Remove `PortalProvider` usage in favor of `EuiComponentDefaultsProvider`

Update EuiPortal component

- update class naming to match other instances in EUI for consistency (e.g. EuiAccordionClass)

- update function component typing and syntax

- minor object spread syntax nit

* Add EuiPortal tests for provided `insert` behavior

- has to be Cypress, as our current version of jest/jsdom does not support `insertAdjacentElement`

+ clarify in comments of the new provider test how individual component tests should be handled

* changelog

* Clean up types

- not super necessary to have a separate file for it, these types are only used within EuiPortal

- use `as const` array and typeof instead of `keyof`

- simplify insert positions map typing

---------

Co-authored-by: y1j2x34 <y1j2x34@qq.com>
cee-chen added a commit to elastic/kibana that referenced this pull request Aug 21, 2023
`v86.0.0`⏩`v87.1.0`

⚠️ The biggest set of type changes in this PR come from the breaking
change that makes `pageSize` and `pageSizeOptions` now optional props
for `EuiBasicTable.pagination`, `EuiInMemoryTable.pagination` and
`EuiDataGrid.pagination`.

This caused several other components that were cloning EUI's pagination
type to start throwing type warnings about `pageSize` being optional.
Where I came across these errors, I modified the extended types to
require `pageSize`. These types and their usages may end up changing
again in any case once the Shared UX team looks into
#56406.

---

## [`87.1.0`](https://github.com/elastic/eui/tree/v87.1.0)

- Updated the underlying library powering `EuiAutoSizer`. This primarily
affects typing around the `disableHeight` and `disableWidth` props
([#6798](elastic/eui#6798))
- Added new `EuiAutoSize`, `EuiAutoSizeHorizontal`, and
`EuiAutoSizeVertical` types to support `EuiAutoSizer`'s now-stricter
typing ([#6798](elastic/eui#6798))
- Updated `EuiDatePickerRange` to support `compressed` display
([#7058](elastic/eui#7058))
- Updated `EuiFlyoutBody` with a new `scrollableTabIndex` prop
([#7061](elastic/eui#7061))
- Added a new `panelMinWidth` prop to `EuiInputPopover`
([#7071](elastic/eui#7071))
- Added a new `inputPopoverProps` prop for `EuiRange`s and
`EuiDualRange`s with `showInput="inputWithPopover"` set
([#7082](elastic/eui#7082))

**Bug fixes**

- Fixed `EuiToolTip` overriding instead of merging its
`aria-describedby` tooltip ID with any existing `aria-describedby`s
([#7055](elastic/eui#7055))
- Fixed `EuiSuperDatePicker`'s `compressed` display
([#7058](elastic/eui#7058))
- Fixed `EuiAccordion` to remove tabbable children from sequential
keyboard navigation when the accordion is closed
([#7064](elastic/eui#7064))
- Fixed `EuiFlyout`s to accept custom `aria-describedby` IDs
([#7065](elastic/eui#7065))

**Accessibility**

- Removed the default `dialog` role and `tabIndex` from push
`EuiFlyout`s. Push flyouts, compared to overlay flyouts, require manual
accessibility management.
([#7065](elastic/eui#7065))

## [`87.0.0`](https://github.com/elastic/eui/tree/v87.0.0)

- Added beta `componentDefaults` prop to `EuiProvider`, which will allow
configuring certain default props globally. This list of components and
defaults is still under consideration.
([#6923](elastic/eui#6923))
- `EuiPortal`'s `insert` prop can now be configured globally via
`EuiProvider.componentDefaults`
([#6941](elastic/eui#6941))
- `EuiFocusTrap`'s `crossFrame` and `gapMode` props can now be
configured globally via `EuiProvider.componentDefaults`
([#6942](elastic/eui#6942))
- `EuiTablePagination`'s `itemsPerPage`, `itemsPerPageOptions`, and
`showPerPageOptions` props can now be configured globally via
`EuiProvider.componentDefaults`
([#6951](elastic/eui#6951))
- `EuiBasicTable`, `EuiInMemoryTable`, and `EuiDataGrid` now allow
`pagination.pageSize` to be undefined. If undefined, `pageSize` defaults
to `EuiTablePagination`'s `itemsPerPage` component default.
([#6993](elastic/eui#6993))
- `EuiBasicTable`, `EuiInMemoryTable`, and `EuiDataGrid`'s
`pagination.pageSizeOptions` will now fall back to
`EuiTablePagination`'s `itemsPerPageOptions` component default.
([#6993](elastic/eui#6993))
- Updated `EuiHeaderLinks`'s `gutterSize` spacings
([#7005](elastic/eui#7005))
- Updated `EuiHeaderAlert`'s stacking styles
([#7005](elastic/eui#7005))
- Added `toolTipProps` to `EuiListGroupItem` that allows customizing
item tooltips. ([#7018](elastic/eui#7018))
- Updated `EuiBreadcrumbs` to support breadcrumbs that toggle popovers
via `popoverContent` and `popoverProps`
([#7031](elastic/eui#7031))
- Improved the contrast ratio of disabled titles within `EuiSteps` and
`EuiStepsHorizontal` to meet WCAG AA guidelines.
([#7032](elastic/eui#7032))
- Updated `EuiSteps` and `EuiStepsHorizontal` to highlight and provide a
more clear visual indication of the current step
([#7048](elastic/eui#7048))

**Bug fixes**

- Single uses of `<EuiHeaderSectionItem side="right" />` now align right
as expected without needing a previous `side="left"` sibling.
([#7005](elastic/eui#7005))
- `EuiPageTemplate` now correctly displays `panelled={true}`
([#7044](elastic/eui#7044))

**Breaking changes**

- `EuiTablePagination`'s default `itemsPerPage` is now `10` (was
previously `50`). This can be configured through
`EuiProvider.componentDefaults`.
([#6993](elastic/eui#6993))
- `EuiTablePagination`'s default `itemsPerPageOptions` is now `[10, 25,
50]` (was previously `[10, 20, 50, 100]`). This can be configured
through `EuiProvider.componentDefaults`.
([#6993](elastic/eui#6993))
- Removed `border` prop from `EuiHeaderSectionItem` (unused since
Amsterdam theme) ([#7005](elastic/eui#7005))
- Removed `borders` object configuration from `EuiHeader.sections`
([#7005](elastic/eui#7005))

**CSS-in-JS conversions**

- Converted `EuiHeaderAlert` to Emotion; Removed unused
`.euiHeaderAlert__dismiss` CSS
([#7005](elastic/eui#7005))
- Converted `EuiHeaderSection`, `EuiHeaderSectionItem`, and
`EuiHeaderSectionItemButton` to Emotion
([#7005](elastic/eui#7005))
- Converted `EuiHeaderLinks` and `EuiHeaderLink` to Emotion; Removed
`$euiHeaderLinksGutterSizes` Sass variables
([#7005](elastic/eui#7005))
- Removed `$euiHeaderBackgroundColor` Sass variable; use
`$euiColorEmptyShade` instead
([#7005](elastic/eui#7005))
- Removed `$euiHeaderChildSize` Sass variable; use `$euiSizeXXL` instead
([#7005](elastic/eui#7005))

---------

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Patryk Kopyciński <contact@patrykkopycinski.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants