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

[Emotion] Convert EuiDataGrid cell popover, actions, and focus outline styles (Part 4) #8011

Merged
merged 13 commits into from
Sep 10, 2024

Conversation

cee-chen
Copy link
Member

@cee-chen cee-chen commented Sep 9, 2024

Summary

This PR:

As always, I recommend following along by commit. The last commit/refactor is a bit spicy - I'd love to hear feedback on whether y'all feel it helps make the CSS more understandable & maintainable or if it does the opposite 🫠

QA

  • Go to https://eui.elastic.co/pr_8011/#/tabular-content/data-grid or https://eui.elastic.co/pr_8011/storybook/?path=/story/tabular-content-euidatagrid--playground
    • On hover (but not click), confirm that the cell outline+actions are gray and the cell actions have a slight delay before showing up
    • On click, confirm that the cell outline+actions are blue, and cell actions show up immediately
    • On keyboard arrow navigation of cells, confirm that cell actions show up immediately and outline+actions are always blue
  • New hover zone affordance testing
    • On hover (without clicking), move your mouse diagonally from the cell content to the actions and confirm that there is more buffer/affordance for this compared to production
  • Go to your OS system accessibility settings and toggle Reduce motion
    • Confirm cell actions show up immediately on hover
    • Confirm cell popovers show with no transition/animation on open
  • Header cell outline testing - go to Storybook or focus docs
    • Confirm no outline shows on hover
    • Confirm the focus outline shows on click
    • Confirm the focus outline shows when the cell actions is opened both via keyboard enter and mouse click

General checklist

  • Browser QA
    • Checked in both light and dark modes
    • Checked in Chrome, Safari, Edge, and Firefox
    • Checked for accessibility including keyboard-only and screenreader modes
      - [ ] Checked in mobile
  • Docs site QA - N/A
  • 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 - N/A

@cee-chen cee-chen force-pushed the emotion/datagrid-2 branch 2 times, most recently from e63eab6 to 6939bf2 Compare September 9, 2024 23:54
@cee-chen cee-chen changed the title [Emotion] Convert remaining EuiDataGrid row/footer/header cell styles (+ cell actions/outline) (Part 4) [Emotion] Convert EuiDataGrid cell popover, actions, and focus outline styles (Part 4) Sep 9, 2024
@cee-chen cee-chen force-pushed the emotion/datagrid-2 branch 2 times, most recently from 3110dd0 to f3fab78 Compare September 10, 2024 06:20
+ remove CSS `filter: none` unset - `attachToAnchor` prop handles that already

+ refactor `!important` z-index CSS to use JS var and popover prop instead

+ remove enzyme snapshots, refactor shallow-like test snapshot with Emotion cruft to render DOM instead
- remove :focus-within - it was causing bugs and is no longer necessary with new cell actions design

+ remove enzyme snapshots
+ start row/header cell styles, but leaving the rest of that CSS for later

- move away from CSS var to Emotion util, it's easier when separating styles by component/concern

+ fix/tweak cell actions CSS to account for new setup
- remove unnecessary close/reopen popover Cypress test

- remove unneeded realClick/waits with realMount
- instead of snapshots

+ fix EuiDataGridCell not correctly merging `data-test-subj` 🤦
- hooray for data grid's ref API allowing us to show cell actions and popovers without `play()`!
- to reduce unnecessary selectors
- to comment everything in one place
+ write E2E tests checking for expected CSS behavior
+ add UI enhancement that shows the outline when cell focus traps are entered
@cee-chen cee-chen marked this pull request as ready for review September 10, 2024 06:38
@cee-chen cee-chen requested a review from a team as a code owner September 10, 2024 06:38
`,
visibility: css`
/* If a cell is not hovered nor focused nor open via popover, don't show the actions */
.euiDataGridRowCell:not(:hover, ${hasFocus}) & {
Copy link
Contributor

Choose a reason for hiding this comment

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

That's a more clean selector now 🧹

/* Increase non-visible hitbox of cell on hover, to reduce UX friction
* for users mousing from the cell diagonally over to the actions */
.euiDataGridRowCell:hover:not(${cellOutline.rowCellFocusSelectors}) & {
${logicalCSS('min-width', '50%')}
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm wondering if this is too much for single action popovers and might cause confusion? 🤔
Maybe the padding alone would be enough?

Screenshot 2024-09-10 at 15 03 23

Copy link
Member Author

Choose a reason for hiding this comment

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

My 2c is that it's not about the cell actions, it's about the cell itself. Users are likely to mouse over from the cell to the actions, so we should inherit the hitbox/hover zone from the cell width.

Copy link
Member Author

Choose a reason for hiding this comment

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

Example mouse path of what I mean - if a user's mouse is at the start of the arrow and they move in a straight diagonal line to the cell action, then the 50% width hover zone is more likely to capture that than a static padding:

366051417-5f4640b5-944f-409b-94ad-51e03bf092b8

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah, I understand. And thinking about it further it's probably better to try with more space and worst case we reduce it if there are issues 👍

};
};

export const euiDataGridCellOutlineSelectors = (parentSelector = '&') => {
Copy link
Contributor

Choose a reason for hiding this comment

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

This is "more code" but I personally like and prefer this refactor. ✨
I was a bit confused by the previous usage of rowCellFocusSelectors as it abstracted away some selectors. Now the usage is more clear as each variable has a clear purpose 👍

Copy link
Member Author

Choose a reason for hiding this comment

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

Super glad to hear that!! 🎉

const headerActionsOpen = '.euiDataGridHeaderCell--isActionsPopoverOpen';

// Utils
const selectors = (...args: string[]) => [...args].join(', ');
Copy link
Contributor

@mgadewoll mgadewoll Sep 10, 2024

Choose a reason for hiding this comment

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

The only thing I'm not fully sold on is if this selectors() is really needed?
If I understand it correctly the difference is this? If so, it's not really that much less to write 🤔

selectors(hover, focus, isOpen, isEntered)

vs

`${hover}, ${focus}, ${isOpen}, ${isEntered}`

Copy link
Member Author

Choose a reason for hiding this comment

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

It's very minor but I personally find it easier to read the first API / it's easier for my brain to see the list of states without the extra ${} syntax! It's also fewer characters, so Prettier is less likely to send it down to multiple lines which is sometimes annoying.

Copy link
Contributor

Choose a reason for hiding this comment

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

I guess I understand why it can be easier to perceive without ${}, I guess I'm just too used to filter them out 😅
I don't have a hard opinion on it, I'm fine either way.

needs moar pixels
Copy link
Contributor

@mgadewoll mgadewoll left a comment

Choose a reason for hiding this comment

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

🚢 🐈‍⬛ The updates work great, I didn't see any visual regression.
Kudos for the cleanups and refactors to make the code easier to grasp!

- actions ::after position was slightly off, I fixed this after taking the first screenshots
@cee-chen
Copy link
Member Author

Thank you so much as always for the PR reviews Lene! I'm going to throw a huge party after the final PR 😭

@cee-chen cee-chen enabled auto-merge (squash) September 10, 2024 16:34
@cee-chen cee-chen merged commit 4308a65 into elastic:main Sep 10, 2024
5 checks passed
@cee-chen cee-chen deleted the emotion/datagrid-2 branch September 10, 2024 17:00
@elasticmachine
Copy link
Collaborator

💚 Build Succeeded

History

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants