Top.Mail.Ru
Фильтрация
8 800 555-89-02
For developers
CTRL+K
Standalone2403

Фильтрация

В этой статье
  • Фильтрация

Фильтрация в виджетах используется для управления отображением данных в соответствии с определенными критериями или условиями. Ее основная цель — позволить пользователям виджетов извлекать и анализировать только те данные, которые соответствуют их потребностям или интересам. Более подробно про фильтрацию можно прочитать на странице Фильтр по клику.

Для работы с фильтрацией в props виджета передаётся объект filtration. Рассмотрим, какие поля и методы он содержит.

interface IWidgetFiltration {
  /**
   * Значения фильтров, подготовленные для передачи в вычислитель
   */
  preparedFilterValues: ICalculatorFilter[];

  /**
   * Добавить фильтр по формуле
   * @param {IWidgetFormulaFilterValue} value — значение фильтра по формуле
   */
  addFormulaFilter(value: IWidgetFormulaFilterValue): void;

  /**
   * Удалить фильтр по формуле
   * @param {string} formula — формула фильтра, который нужно удалить
   */
  removeFormulaFilter(formula: string): void;

  /**
   * Добавить процессный фильтр
   * @param {Parameters<IAddPresenceOfEventFilter> | Parameters<IAddRepetitionOfEventFilter> | Parameters<IAddPresenceOfTransitionFilter> | Parameters<IAddDurationOfTransitionFilter>} args — параметры для добавления процессного фильтра
   */
  addProcessFilter(
    ...args: Parameters<IAddPresenceOfEventFilter> |
             Parameters<IAddRepetitionOfEventFilter> |
             Parameters<IAddPresenceOfTransitionFilter> |
             Parameters<IAddDurationOfTransitionFilter>
  ): void;
}

Чтобы виджет реагировал на фильтры, необходимо передавать их в вычислитель. Подготовленные фильтры для вычислителя можно получить из filtration.preparedFilterValues.

useLayoutEffect(() => {
  if (!measures?.length || !dimensions?.length) {
    placeholder.setConfigured(false);
    return;
  }

  placeholder.setDisplay(false);

  (async () => {
    try {
      const output = await generalCalculator.calculate({
        filters: filtration.preparedFilterValues,
        measures: mapMeasuresToInputs(measures, widgetsContext.variables),
        dimensions: mapDimensionsToInputs(
          replaceHierarchiesWithDimensions(
            dimensions,
            filtration.preparedFilterValues
          ),
          widgetsContext.variables
        ),
      });

      placeholder.setDisplay(true);
    } catch (error) {
      placeholder.setError(error as Error);
    }
  })();
}, [
  dimensions,
  filtration.preparedFilterValues,
  generalCalculator,
  measures,
  placeholder,
  widgetsContext.variables,
]);

Была ли статья полезна?

Да
Нет
Предыдущая
Вычислители
8 (800) 555-89-028 (495) 150-31-45team@infomaximum.com
Для бизнеса
© 20102024. ООО «Инфомаксимум»
Мы используем файлы cookies, чтобы сайт был лучше для вас.