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

Render SelectFields as MUI Selects #4059

Open
wants to merge 23 commits into
base: main
Choose a base branch
from
Open

Render SelectFields as MUI Selects #4059

wants to merge 23 commits into from

Conversation

CommandMC
Copy link
Collaborator

@CommandMC CommandMC commented Oct 14, 2024

This renders most drop-down selection prompts inside Heroic. In turn, these dropdowns now work inside the Gamescope session.

Current issues:

  • Controller navigation does not work, hitting "Down" opens the dropdown, with no way to navigate further down to other components
  • There is a black box in the top-left of the component, where the label should be
  • The dropdowns do not work while in a Dialog (they're rendered behind the Dialog)

Use the following Checklist if you have changed something on the Backend or Frontend:

  • Tested the feature and it's working on a current and clean install.
  • Tested the main App features and they are still working on a current and clean install. (Login, Install, Play, Uninstall, Move games, etc.)
  • Created / Updated Tests (If necessary)
  • Created / Updated documentation (If necessary)

This renders most drop-down selection prompts inside Heroic. In turn, these
dropdowns now work inside the Gamescope session.

Current issues:
- Controller navigation does not work, hitting "Down" opens the dropdown, with
  no way to navigate further down to other components
- There is a black box in the top-left of the component, where the label should
  be
@CommandMC CommandMC added the pr:wip WIP, don't merge. label Oct 14, 2024
@CommandMC CommandMC self-assigned this Oct 14, 2024
MUI CSS class names are not stable, they cannot be used like this
I prefer to use this over CSS rules in a separate file since it can sometimes be
unclear where "the magic happens". Having layout and style together is clearer
IMO
This will definitely break things, but it makes selects work
Navigating "over" selects now works

This is done by simulating Tab/Shift-Tab key presses when pressing the
respective buttons while focussing a MUI select element

I've gone ahead and removed our home-grown `GamepadInputEvent` type, as it's
just a lesser version of Electron's input events
This makes dialogs closeable with the back button again
Restoring the focussed element on dialog close is already handled by MUI, we
don't need this code ourselves

Moving focus on dialog open *should* work automatically as well, however it
doesn't. I've tried various methods with element properties and JS, nothing
seems to work. As a band-aid fix for now, we simulate 1-2 tab presses to focus
the dialog content
Closing selects with the B/Circle button
MUI treats an empty value as "don't show anything selected", while native
selects show the first option
@CommandMC CommandMC added pr:ready-for-review Feature-complete, ready for the grind! :P and removed pr:wip WIP, don't merge. labels Dec 5, 2024
@CommandMC CommandMC marked this pull request as ready for review December 5, 2024 21:11
@CommandMC CommandMC requested a review from a team December 5, 2024 21:12
@CommandMC CommandMC requested review from arielj, flavioislima, Nocccer and imLinguin and removed request for a team December 5, 2024 21:12
Copy link
Collaborator

@arielj arielj left a comment

Choose a reason for hiding this comment

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

Looks good, but I left a comment about an accessibility feature that is not working with the new dialogs

Copy link
Collaborator

@arielj arielj left a comment

Choose a reason for hiding this comment

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

There's one more thing I noticed, when using a RTL language, the arrow in the select field is in the wrong side of the element:

in main:
image

with these changes:
image

src/frontend/components/UI/SelectField/index.tsx Outdated Show resolved Hide resolved
@arielj
Copy link
Collaborator

arielj commented Jan 6, 2025

I've been testing a bit more, I found 1 issue and two small things:


one small thing is the categories and filters style changed and it's missing some padding:

  • main:
    image

  • this branch:
    image


the second small thing is that the controller hints (the instructions of what each button does at the bottom of the screen) shows incorrect hints for dropdowns, it thinks it's the context menu of library cards and it shows ( x ) Close Options incorrectly. This one can be fixed by using target.closest('.contextMenu') in line 60 of src/frontend/components/UI/ControllerHints/index.tsx


now the issue is that, when using a controller to navigate the UI (or a keyboard), you can get stuck focusing the X button of dialogs when the dialog's content is long and it shows a scrollbar:

  • open the settings for a game
  • in the wine tab (because it's long it will show a scrollbar), move up until you focus the X
  • you can't move out of there (moving up/down scrolls the library page, moving left/right does nothing)

a smaller dialog doesn't have this problem:

  • now use the mouse and change to the other tab (this is short and won't show a scrollbar)
  • move up until you focus the X
  • you can move out (moving up does nothing as expected, down/left/right moves focus to the tabs)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pr:ready-for-review Feature-complete, ready for the grind! :P
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants