static getDerivedStateFromProps()

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,
    };
  }