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

[EuiComboBox] Refactor singleSelection.asPlainText to make greater use of the underlying input element #7332

Merged
merged 12 commits into from
Nov 2, 2023

Conversation

cee-chen
Copy link
Member

@cee-chen cee-chen commented Nov 1, 2023

Summary

closes #6869
closes elastic/kibana#125131

combobox

This PR addresses the above UX issues by using the underlying input element for plain text selection to show values, instead of rendering a plain-text-styled combobox pill.

This PR also incidentally includes a bonus refactor (32667ac) along similar lines to use the underlying input element to render placeholder text, instead of a DOM element.

As always, I strongly recommend following along by commit.

QA

Feature testing

  • Go to https://eui.elastic.co/pr_7332/#/forms/combo-box#option-rendering
  • Click the "Single selection" switch
  • Confirm that you can double click to select and copy/paste any selected option's value
  • Confirm the append/prepend nodes render with correct alignment next to the input
  • Confirm that pressing backspace removes the selection (clear button and append/prepend nodes go away) but retains the previously selected text minus one character
  • (Regression testing) Uncheck the "Single selection" switch
    • Confirm that backspacing deletes the entire pill
    • Confirm all other combobox UX is the same as before (searching, selecting items, clear button, etc.)

General checklist

  • Browser QA
    • Checked in both light and dark modes
    • Checked in mobile
    • Checked in Chrome, Safari, Edge, and Firefox
    • Checked for accessibility including keyboard-only and screenreader modes
      • Keyboard UX same as before
      • SR behavior (in VO at least) with the new placeholder is slightly different? And I think better? TBH it's a little hard to tell, but not going to spend too long here as combobox will receive a total SR overhaul when we update it to dogfood EuiSelectable
  • Docs site QA - N/A - internal behavior, no consumer impact
  • Code quality checklist
  • Release checklist
    • A changelog entry exists and is marked appropriately.
      - [ ] If applicable, added the breaking change issue label (and filled out the breaking change checklist)
  • Designer checklist
    - [ ] Updated the Figma library counterpart

@cee-chen cee-chen changed the title [EuiComboBox] Refactor singleSelection.asPlainText to make greater user of the underlying input element [EuiComboBox] Refactor singleSelection.asPlainText to make greater use of the underlying input element Nov 1, 2023
@cee-chen cee-chen force-pushed the combobox/plaintext-selection-1 branch 4 times, most recently from f90eabf to ba86306 Compare November 1, 2023 19:06
+ add `asPlainText` as a getter, we'll be reusing this more shortly
…ead of as a separate DOM element

- this involves essentially disabling the autosize/width behavior of the input
+ simplify tests in EuiComboBox to remove snapshots - should be sufficiently covered by util unit etsts
- this isn't being used anymore since we removed the 3rd party autosize dependency, and most of the styles seem to live in the main combobox Sass file, so might as well consolidate
- Fix placeholder and plain text alignment to match EuiFieldText by adding a class and extra padding-left

- Remove unnecessary `hover` pseudo around cursor (by default they only show on hover) and fix pills to also use the correct cursor when disabled
@cee-chen cee-chen force-pushed the combobox/plaintext-selection-1 branch 8 times, most recently from 3c659d1 to e8e4919 Compare November 2, 2023 04:01
@cee-chen cee-chen marked this pull request as ready for review November 2, 2023 04:15
@cee-chen cee-chen requested a review from a team as a code owner November 2, 2023 04:15
@cee-chen cee-chen force-pushed the combobox/plaintext-selection-1 branch from e8e4919 to 1e45fbd Compare November 2, 2023 14:58
@kibanamachine
Copy link

Preview staging links for this PR:

@elasticmachine
Copy link
Collaborator

💚 Build Succeeded

History

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! Tested the manual QA in all four evergreen browsers and big three screen reader pairings. No UX issues or regressions.

@cee-chen
Copy link
Member Author

cee-chen commented Nov 2, 2023

Thanks Trevor!

@cee-chen cee-chen merged commit 6428ca8 into elastic:main Nov 2, 2023
7 checks passed
@cee-chen cee-chen deleted the combobox/plaintext-selection-1 branch November 2, 2023 16:00
@cee-chen cee-chen mentioned this pull request Nov 27, 2023
jbudz pushed a commit to elastic/kibana that referenced this pull request Dec 18, 2023
`v90.0.0`⏩`v91.0.0-backport.0`

⚠️ While this upgrade pings many teams and has a large code diff, **the
majority of the changes are snapshots or tests-related** and do not
touch source code, so should theoretically only need a code review and
not dedicated QA.

The changes in EUI that required a large swathe of these updates are:

- **EuiPopover** removed an extra unnecessary `<div>` wrapper on its
anchors, which affected many snapshots and a few CSS overrides, which
should have been updated
- **EuiButtonGroup** now renders `<button>` elements instead of `<input
type="radio">` elements for single selection, which affected both
snapshots and E2E tests
- **EuiSuperDatePicker**'s absolute date input now requires an `Enter`
keypress when parsing dates (affected E2E tests)
- **EuiComboBox**, when rendered with `singleSelection={{ plainText:
'true' }}`, no longer renders a pill (i.e. text). This combobox type now
behaves more like an `EuiFieldText`, where the selection is rendered via
input `value` instead. This affected a high amount of E2E tests (both
FTR and Cypress), both in terms of updating assertions and changing
selections, but should **not** significantly affect user experience -
see elastic/eui#7332 for more.

---

##
[`v91.0.0-backport.0`](https://github.com/elastic/eui/tree/v91.0.0-backport.0)

**This is a backport release only intended for use by Kibana.**

- Added `esqlVis`, `pipeBreaks`, and `pipeNoBreaks` icon glyphs.
- `EuiSelectable` now allows configurable text truncation via
`listProps.truncationProps`
([#7388](elastic/eui#7388))
- `EuiTextTruncate` now supports a new `calculationDelayMs` prop for
working around font loading or layout shifting scenarios
([#7388](elastic/eui#7388))

**Bug fixes**

- Fixed a bug with `EuiSelectable`s with custom `truncationProps`, where
scrollbar widths were not being accounted for
([#7392](elastic/eui#7392))

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

- Updated the background color of `EuiPopover`s in dark mode to increase
visibility & contrast against other page/panel backgrounds
([#7310](elastic/eui#7310))
- Memoized `EuiDataGrid` to prevent unneeded re-renders
([#7324](elastic/eui#7324))
- Added a configurable `role` prop to `EuiAccordion`
([#7326](elastic/eui#7326))
- Added a configurable `role` prop to `EuiGlobalToastList`
([#7328](elastic/eui#7328))
- For greater flexibility, `EuiSuperDatePicker` now allows users to
paste ISO 8601, RFC 2822, and Unix timestamps in the `Absolute` tab
input, in addition to timestamps in the `dateFormat` prop
([#7331](elastic/eui#7331))
- Plain text `EuiComboBox`es now behave more like a normal text
field/input. Backspacing will no longer delete the entire value, and
selected values can now be double clicked and copied.
([#7332](elastic/eui#7332))
- `EuiDataGrid`'s display settings popover now allows users to clear the
"Lines per row" input before typing in a new number
([#7338](elastic/eui#7338))
- Improved the UX of `EuiSuperDatePicker`'s Absolute tab for users
manually typing in timestamps
([#7341](elastic/eui#7341))
- Updated `EuiI18n`s with multiple `tokens` to accept dynamic `values`
([#7341](elastic/eui#7341))

**Bug fixes**

- Fixed `EuiComboBox`'s `onSearchChange` callback to pass the correct
`hasMatchingOptions` value
([#7334](elastic/eui#7334))
- Fixed an `EuiSelectableTemplateSitewide` bug where the `popoverButton`
behavior would break if passed a non-DOM React wrapper
([#7339](elastic/eui#7339))

**Deprecations**

- `EuiPopover`: deprecated `anchorClassName`. Use `className` instead
([#7311](elastic/eui#7311))
- `EuiPopover`: deprecated `buttonRef`. Use `popoverRef` instead
([#7311](elastic/eui#7311))
- `EuiPopover`: removed extra `.euiPopover__anchor` div wrapper. Target
`.euiPopover` instead if necessary
([#7311](elastic/eui#7311))
- Deprecated `EuiButtonGroup`'s `name` prop. This can safely be removed.
([#7325](elastic/eui#7325))

**Breaking changes**

- Removed deprecated `euiPaletteComplimentary` - use
`euiPaletteComplementary` Instead
([#7333](elastic/eui#7333))

**Accessibility**

- Updated `type="single"` `EuiButtonGroup`s to render standard buttons
instead of radio buttons under the hood, per recent a11y recommendations
([#7325](elastic/eui#7325))
- `EuiAccordion` now defaults to a less screenreader-noisy `group` role
instead of `region`. If your accordion contains significant enough
content to be a document landmark role, you may re-configure it back to
`region`. ([#7326](elastic/eui#7326))
- Reduced screen reader noisiness when sorting `EuiDataGrid` columns via
toolbar ([#7327](elastic/eui#7327))
- `EuiGlobalToastList` now defaults to a `log` role. If your toasts will
always require immediate user action, consider (with caution) using the
`alert` role instead.
([#7328](elastic/eui#7328))

**CSS-in-JS conversions**

- Updated `$euiFontFamily` and `$euiCodeFontFamily` to match Emotion
fonts ([#7332](elastic/eui#7332))

---------

Co-authored-by: Cee Chen <[email protected]>
Co-authored-by: kibanamachine <[email protected]>
Co-authored-by: Cee Chen <[email protected]>
Co-authored-by: Stratoula Kalafateli <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants