Фильтрация
В этой статье
Фильтрация в виджетах используется для управления отображением данных в соответствии с определенными критериями или условиями. Ее основная цель — позволить пользователям виджетов извлекать и анализировать только те данные, которые соответствуют их потребностям или интересам. Более подробно про фильтрацию можно прочитать на странице Фильтр по клику.
Для работы с фильтрацией в 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,
]);
Была ли статья полезна?
Да
Нет