in web/timebase-datasource-plugin/src/view/Filter/Filter.tsx [70:99]
static getDerivedStateFromProps(nextProps: FilterProps, nextState: FilterState) {
const selectedFieldType = getSelectedFieldType(nextProps.selectedField, nextProps.schema);
const type = selectedFieldType?.dataType as PropertyType;
const isEnum = isEnumType(type);
const enumValues = isEnum ? selectedFieldType?.values : [];
const values =
showSpecialValues(nextProps.selectedOperators as Operator) || isInFilters(nextProps.selectedOperators as Operator)
? getFilterValues(type, enumValues as string[])
: [];
const selectedItem =
(isEnum && nextProps.filterValue.length !== 0 && enumValues?.includes(nextProps.filterValue[0])) ||
(nextProps.filterValue.length !== 0 && values.find(v => v.value === nextProps.filterValue[0]))
? toOption(nextProps.filterValue[0])
: nextState.selectedItem == null
? values[0]
: nextState.selectedItem;
return {
fields: [nextProps.selectedField, REMOVE].map(toOption),
operators: isNumberType(type)
? NUMBER_OPERATORS.map(toOption)
: isEnum
? ENUM_OPERATORS.map(toOption)
: STRING_OPERATORS.map(toOption),
selectedFieldType: type,
values,
selectedItem,
filterValue: nextProps.filterValue,
};
}