Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
fix: keep in sync highlighted index when the option still exists but …
…was moved
  • Loading branch information
Loïc Mangeonjean committed Mar 7, 2024
commit 541c3f6a71ff3e943fb55a3cf9a659509bc91d89
16 changes: 7 additions & 9 deletions packages/mui-base/src/useAutocomplete/useAutocomplete.js
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ export function useAutocomplete(props) {
},
);

const checkHighlightedOptionExists = () => {
const getPreviousHighlightedOptionIndex = () => {
const isSameValue = (value1, value2) => {
const label1 = value1 ? getOptionLabel(value1) : '';
const label2 = value2 ? getOptionLabel(value2) : '';
Expand All @@ -498,16 +498,12 @@ export function useAutocomplete(props) {
const previousHighlightedOption = previousProps.filteredOptions[highlightedIndexRef.current];

if (previousHighlightedOption) {
const previousHighlightedOptionExists = filteredOptions.some((option) => {
return findIndex(filteredOptions, (option) => {
return getOptionLabel(option) === getOptionLabel(previousHighlightedOption);
});

if (previousHighlightedOptionExists) {
return true;
}
}
}
return false;
return -1;
};

const syncHighlightedIndex = React.useCallback(() => {
Expand All @@ -516,8 +512,10 @@ export function useAutocomplete(props) {
}

// Check if the previously highlighted option still exists in the updated filtered options list and if the value and inputValue haven't changed
// If it exists and the value and the inputValue haven't changed, return, otherwise continue execution
if (checkHighlightedOptionExists()) {
// If it exists and the value and the inputValue haven't changed, just update its index, otherwise continue execution
const previousHighlightedOptionIndex = getPreviousHighlightedOptionIndex();
if (previousHighlightedOptionIndex !== -1) {
highlightedIndexRef.current = previousHighlightedOptionIndex;
return;
}

Expand Down