-
-
Notifications
You must be signed in to change notification settings - Fork 32.5k
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
[Autocomplete] ArrowLeft key press throws an error when setting renderTags to return null. #27933
Comments
Thanks for the report. I can reproduce. We should add a check for it. This diff should do it: index 62bc7df557..e81a9baaa4 100644
--- a/packages/material-ui-unstyled/src/AutocompleteUnstyled/useAutocomplete.js
+++ b/packages/material-ui-unstyled/src/AutocompleteUnstyled/useAutocomplete.js
@@ -252,7 +252,7 @@ export default function useAutocomplete(props) {
if (tagToFocus === -1) {
inputRef.current.focus();
} else {
- anchorEl.querySelector(`[data-tag-index="${tagToFocus}"]`).focus();
+ anchorEl.querySelector(`[data-tag-index="${tagToFocus}"]`)?.focus();
}
});
@Phebonacci would you like to create a PR? :) |
Hi @Phebonacci, if this hasn't fixed yet, can i work on this issue, also can you guide me on how to get started since i am just starting out? |
This seems inactive, so I'm starting to work on this. |
Hey @mnajdova can you help me with the test? I've no experience with tests. sorry about that. it('should not throw when render tags is null', () => {
const Test = (props) => {
const { options, renderTags, defaultValue } = props;
const {
groupedOptions,
getRootProps,
getInputLabelProps,
getInputProps,
getListboxProps,
getOptionProps,
setAnchorEl,
} = useAutocomplete({
options,
open: true,
// useAutocomplete doesn't expect renderTags prop
renderTags,
multiple: true,
defaultValue,
});
return (
<div>
<div {...getRootProps()} ref={setAnchorEl}>
<label {...getInputLabelProps()}>useAutocomplete</label>
<input {...getInputProps()} type="text" />
</div>
{groupedOptions.length > 0 ? (
<ul {...getListboxProps()}>
{groupedOptions.map((option, index) => {
return <li {...getOptionProps({ option, index })}>{option}</li>;
})}
</ul>
) : null}
</div>
);
};
render(<Test options={['foo', 'bar']} renderTags={() => null} defaultValue={['foo']} />);
const combobox = screen.getByRole('combobox');
expect(combobox).toBeVisible();
fireEvent.keyDown(combobox, { key: 'ArrowLeft' });
});
|
Apologizes, I have missed this comment. @anirudh1713 you need to first focus the combobox before firing some keyboard events. Would be best if you can create a PR and we can iterate there. |
Hi @mnajdova , apologies. I have been busy and only got back to this. Has anyone started working on a PR? I can also create one if no one has started working on this yet. |
Hi @anirudh1713 , if you already have a PR, i can help you with the tests if you want. |
@Phebonacci feel free to create a new PR, looks like no one else is actively working on the issue |
May I tackle this issue? |
There is no open linked PR, so whoever wants can open one :) |
Hi, since there was no activity on this issue for 9 days. I have created a PR and have made sure to add a test. |
@mnajdova In the latest version of the library, we don't have this problem, as we can observe here https://codesandbox.io/s/p7njj6?file=/demo.tsx (It's the same example just with latest library) |
Should we close this issue? |
Ah I haven't realized that the bug used v4. We don't accept fixes for v4, and it indeed seems like is already working in v5. I am closing this. Thanks @gauravsoti1 for the info :) |
When the ArrowLeft key is pressed while there are selected options and
renderTags
is set to return null (so that no tags are rendered), the component breaks.Current Behavior 😯
When the ArrowLeft key is pressed while there are selected options and
renderTags
is set to return null (so that no tags are rendered), the component breaks and returns the error describe below:It appears that the
useAutocomplete
hook tries to put focus on the tag elements without checking whether there are tags rendered or not as per the source code:Expected Behavior 🤔
When the ArrowLeft key is pressed while there are selected options and
renderTags
is set to return null, it shouldn't try to put focus on tags.Steps to Reproduce 🕹
Codesandbox link: https://codesandbox.io/s/nt24o
Taken from: https://material-ui.com/components/autocomplete/#githubs-picker
Steps:
Context 🔦
We are trying to build a component similar to the Github Labels picker sample provided by the docs: https://material-ui.com/components/autocomplete/#githubs-picker because we need a filterable/searchable dropdown component, but we don't need to show tags/chips because we want the input field of the Autocomplete to just act like an input for filtering.
Your Environment 🌎
`npx @material-ui/envinfo`
The text was updated successfully, but these errors were encountered: