in src/select/select.tsx [418:471]
static getDerivedStateFromProps<T = unknown>(nextProps: SelectProps<T>, prevState: SelectState<T>) {
const {multiple, data, type} = nextProps;
const {prevSelected, prevData, prevMultiple, filterValue} = prevState;
const nextState: Partial<SelectState<T>> = {
prevData: data,
prevSelected: nextProps.selected,
prevMultiple: multiple,
};
if ('data' in nextProps && data !== prevData) {
const {filteredData, addButton} = getListItems(nextProps, prevState, filterValue, data);
Object.assign(nextState, {shownData: filteredData, addButton});
if (prevState.selected) {
Object.assign(nextState, {
filterValue: getValueForFilter(prevState.selected, type, filterValue),
});
}
}
if ('selected' in nextProps && nextProps.selected !== prevSelected) {
const selected = nextProps.selected || (multiple ? [] : null);
Object.assign(nextState, {
selected,
filterValue: getValueForFilter(selected, type, filterValue),
});
}
if (prevMultiple !== multiple && !dequal(prevMultiple, multiple)) {
nextState.selected = multiple ? [] : null;
}
if (multiple && !nextState.selected) {
nextState.selected = prevState.selected;
}
const {selected} = {...prevState, ...nextState};
if (selected && Array.isArray(selected)) {
nextState.multipleMap = buildMultipleMap(selected);
const {filteredData, addButton} = getListItems(nextProps, nextState, filterValue, data);
Object.assign(nextState, {shownData: filteredData, addButton});
}
const isSelectionEmpty =
nextProps.selected === null ||
nextProps.selected === undefined ||
(Array.isArray(nextProps.selected) && nextProps.selected.length === 0);
if (isSelectionEmpty) {
nextState.lastInteractedKey = null;
}
return nextState;
}