Skip to content

Commit 6ab5bcb

Browse files
[Autocomplete] Revert: Fix options list rendering in freeSolo mode (#44858)
1 parent 998c9f2 commit 6ab5bcb

File tree

2 files changed

+40
-67
lines changed

2 files changed

+40
-67
lines changed

packages/mui-material/src/Autocomplete/Autocomplete.js

+40-51
Original file line numberDiff line numberDiff line change
@@ -671,56 +671,6 @@ const Autocomplete = React.forwardRef(function Autocomplete(inProps, ref) {
671671
const clearIndicatorSlotProps = externalForwardedProps.slotProps.clearIndicator;
672672
const popupIndicatorSlotProps = externalForwardedProps.slotProps.popupIndicator;
673673

674-
const renderAutocompletePopperChildren = (children) => (
675-
<AutocompletePopper as={PopperSlot} {...popperProps}>
676-
<AutocompletePaper as={PaperSlot} {...paperProps}>
677-
{children}
678-
</AutocompletePaper>
679-
</AutocompletePopper>
680-
);
681-
682-
let autocompletePopper = null;
683-
if (groupedOptions.length > 0) {
684-
autocompletePopper = renderAutocompletePopperChildren(
685-
// TODO v7: remove `as` prop and move ListboxComponentProp to externalForwardedProps or remove ListboxComponentProp entirely
686-
// https://github.com/mui/material-ui/pull/43994#issuecomment-2401945800
687-
<ListboxSlot as={ListboxComponentProp} {...listboxProps}>
688-
{groupedOptions.map((option, index) => {
689-
if (groupBy) {
690-
return renderGroup({
691-
key: option.key,
692-
group: option.group,
693-
children: option.options.map((option2, index2) =>
694-
renderListOption(option2, option.index + index2),
695-
),
696-
});
697-
}
698-
return renderListOption(option, index);
699-
})}
700-
</ListboxSlot>,
701-
);
702-
} else if (loading && groupedOptions.length === 0) {
703-
autocompletePopper = renderAutocompletePopperChildren(
704-
<AutocompleteLoading className={classes.loading} ownerState={ownerState}>
705-
{loadingText}
706-
</AutocompleteLoading>,
707-
);
708-
} else if (groupedOptions.length === 0 && !freeSolo && !loading) {
709-
autocompletePopper = renderAutocompletePopperChildren(
710-
<AutocompleteNoOptions
711-
className={classes.noOptions}
712-
ownerState={ownerState}
713-
role="presentation"
714-
onMouseDown={(event) => {
715-
// Prevent input blur when interacting with the "no options" content
716-
event.preventDefault();
717-
}}
718-
>
719-
{noOptionsText}
720-
</AutocompleteNoOptions>,
721-
);
722-
}
723-
724674
return (
725675
<React.Fragment>
726676
<AutocompleteRoot
@@ -785,7 +735,46 @@ const Autocomplete = React.forwardRef(function Autocomplete(inProps, ref) {
785735
},
786736
})}
787737
</AutocompleteRoot>
788-
{anchorEl ? autocompletePopper : null}
738+
{anchorEl ? (
739+
<AutocompletePopper as={PopperSlot} {...popperProps}>
740+
<AutocompletePaper as={PaperSlot} {...paperProps}>
741+
{loading && groupedOptions.length === 0 ? (
742+
<AutocompleteLoading className={classes.loading} ownerState={ownerState}>
743+
{loadingText}
744+
</AutocompleteLoading>
745+
) : null}
746+
{groupedOptions.length === 0 && !freeSolo && !loading ? (
747+
<AutocompleteNoOptions
748+
className={classes.noOptions}
749+
ownerState={ownerState}
750+
role="presentation"
751+
onMouseDown={(event) => {
752+
// Prevent input blur when interacting with the "no options" content
753+
event.preventDefault();
754+
}}
755+
>
756+
{noOptionsText}
757+
</AutocompleteNoOptions>
758+
) : null}
759+
{groupedOptions.length > 0 ? (
760+
<ListboxSlot as={ListboxComponentProp} {...listboxProps}>
761+
{groupedOptions.map((option, index) => {
762+
if (groupBy) {
763+
return renderGroup({
764+
key: option.key,
765+
group: option.group,
766+
children: option.options.map((option2, index2) =>
767+
renderListOption(option2, option.index + index2),
768+
),
769+
});
770+
}
771+
return renderListOption(option, index);
772+
})}
773+
</ListboxSlot>
774+
) : null}
775+
</AutocompletePaper>
776+
</AutocompletePopper>
777+
) : null}
789778
</React.Fragment>
790779
);
791780
});

packages/mui-material/src/Autocomplete/Autocomplete.test.js

-16
Original file line numberDiff line numberDiff line change
@@ -2440,22 +2440,6 @@ describe('<Autocomplete />', () => {
24402440

24412441
expect(container.querySelector(`.${classes.endAdornment}`)).to.equal(null);
24422442
});
2443-
2444-
it('should not render popper when there are no options', () => {
2445-
render(
2446-
<Autocomplete
2447-
open
2448-
freeSolo
2449-
options={[]}
2450-
renderInput={(params) => <TextField {...params} />}
2451-
slotProps={{
2452-
popper: { 'data-testid': 'popperRoot' },
2453-
}}
2454-
/>,
2455-
);
2456-
const popper = screen.queryByTestId('popperRoot');
2457-
expect(popper).to.equal(null);
2458-
});
24592443
});
24602444

24612445
describe('prop: onChange', () => {

0 commit comments

Comments
 (0)