@lightdash/common 0.1357.0 → 0.1358.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/utils/filters.d.ts +3 -0
- package/dist/utils/filters.js +35 -1
- package/package.json +1 -1
package/dist/utils/filters.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type DashboardTile } from '../types/dashboard';
|
|
1
2
|
import { type Table } from '../types/explore';
|
|
2
3
|
import { type CompiledField, type CustomSqlDimension, type Dimension, type Field, type FilterableDimension, type FilterableField, type FilterableItem, type ItemsMap, type TableCalculation } from '../types/field';
|
|
3
4
|
import { FilterOperator, FilterType, type AndFilterGroup, type DashboardFieldTarget, type DashboardFilterRule, type DashboardFilters, type FilterDashboardToRule, type FilterGroup, type FilterGroupItem, type FilterRule, type Filters, type MetricFilterRule, type OrFilterGroup } from '../types/filter';
|
|
@@ -14,6 +15,7 @@ export declare const createFilterRuleFromField: (field: FilterableField, value?:
|
|
|
14
15
|
export declare const matchFieldExact: (a: Field) => (b: Field) => boolean;
|
|
15
16
|
export declare const matchFieldByTypeAndName: (a: Field) => (b: Field) => boolean;
|
|
16
17
|
export declare const matchFieldByType: (a: Field) => (b: Field) => boolean;
|
|
18
|
+
export declare const isTileFilterable: (tile: DashboardTile) => boolean;
|
|
17
19
|
export declare const applyDefaultTileTargets: (filterRule: DashboardFilterRule<FilterOperator, DashboardFieldTarget, any, any>, field: FilterableDimension, availableTileFilters: Record<string, FilterableDimension[] | undefined>) => DashboardFilterRule<FilterOperator, DashboardFieldTarget, any, any>;
|
|
18
20
|
export declare const createDashboardFilterRuleFromField: ({ field, availableTileFilters, isTemporary, value, }: {
|
|
19
21
|
field: Exclude<FilterableItem, TableCalculation | CustomSqlDimension> | CompiledField;
|
|
@@ -43,6 +45,7 @@ export declare const isDimensionValueInvalidDate: (item: FilterableField, value:
|
|
|
43
45
|
export declare const getFiltersFromGroup: (filterGroup: FilterGroup, fields: ItemsMap[string][]) => Filters;
|
|
44
46
|
export declare const deleteFilterRuleFromGroup: (filterGroup: FilterGroup, id: string) => FilterGroup;
|
|
45
47
|
export declare const getDashboardFilterRulesForTile: (tileUuid: string, rules: DashboardFilterRule[]) => DashboardFilterRule[];
|
|
48
|
+
export declare const getTabUuidsForFilterRules: (dashboardTiles: DashboardTile[] | undefined, filters: DashboardFilters, filterableFieldsByTileUuid: Record<string, FilterableDimension[]> | undefined) => Record<string, string[]>;
|
|
46
49
|
export declare const getDashboardFilterRulesForTables: (tables: string[], rules: DashboardFilterRule[]) => DashboardFilterRule[];
|
|
47
50
|
export declare const getDashboardFilterRulesForTileAndTables: (tileUuid: string, tables: string[], rules: DashboardFilterRule[]) => DashboardFilterRule[];
|
|
48
51
|
export declare const getDashboardFiltersForTileAndTables: (tileUuid: string, tables: string[], dashboardFilters: DashboardFilters) => DashboardFilters;
|
package/dist/utils/filters.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resetRequiredFilterRules = exports.reduceRequiredDimensionFiltersToFilterRules = exports.isFilterRuleInQuery = exports.createFilterRuleFromRequiredMetricRule = exports.addDashboardFiltersToMetricQuery = exports.overrideFilterGroupWithFilterRules = exports.overrideChartFilter = exports.addFiltersToMetricQuery = exports.getDashboardFiltersForTileAndTables = exports.getDashboardFilterRulesForTileAndTables = exports.getDashboardFilterRulesForTables = exports.getDashboardFilterRulesForTile = exports.deleteFilterRuleFromGroup = exports.getFiltersFromGroup = exports.isDimensionValueInvalidDate = exports.addFilterRule = exports.createDashboardFilterRuleFromField = exports.applyDefaultTileTargets = exports.matchFieldByType = exports.matchFieldByTypeAndName = exports.matchFieldExact = exports.createFilterRuleFromField = exports.getFilterRuleWithDefaultValue = exports.getFilterTypeFromItem = exports.getFilterGroupItemsPropertyName = exports.getItemsFromFilterGroup = exports.hasNestedGroups = exports.countTotalFilterRules = exports.getTotalFilterRules = exports.getFilterRulesFromGroup = void 0;
|
|
3
|
+
exports.resetRequiredFilterRules = exports.reduceRequiredDimensionFiltersToFilterRules = exports.isFilterRuleInQuery = exports.createFilterRuleFromRequiredMetricRule = exports.addDashboardFiltersToMetricQuery = exports.overrideFilterGroupWithFilterRules = exports.overrideChartFilter = exports.addFiltersToMetricQuery = exports.getDashboardFiltersForTileAndTables = exports.getDashboardFilterRulesForTileAndTables = exports.getDashboardFilterRulesForTables = exports.getTabUuidsForFilterRules = exports.getDashboardFilterRulesForTile = exports.deleteFilterRuleFromGroup = exports.getFiltersFromGroup = exports.isDimensionValueInvalidDate = exports.addFilterRule = exports.createDashboardFilterRuleFromField = exports.applyDefaultTileTargets = exports.isTileFilterable = exports.matchFieldByType = exports.matchFieldByTypeAndName = exports.matchFieldExact = exports.createFilterRuleFromField = exports.getFilterRuleWithDefaultValue = exports.getFilterTypeFromItem = exports.getFilterGroupItemsPropertyName = exports.getItemsFromFilterGroup = exports.hasNestedGroups = exports.countTotalFilterRules = exports.getTotalFilterRules = exports.getFilterRulesFromGroup = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
6
6
|
const moment_1 = tslib_1.__importDefault(require("moment"));
|
|
7
7
|
const uuid_1 = require("uuid");
|
|
8
|
+
const dashboard_1 = require("../types/dashboard");
|
|
8
9
|
const field_1 = require("../types/field");
|
|
9
10
|
const filter_1 = require("../types/filter");
|
|
10
11
|
const timeFrames_1 = require("../types/timeFrames");
|
|
@@ -182,6 +183,8 @@ const matchFieldByTypeAndName = (a) => (b) => a.type === b.type && a.name === b.
|
|
|
182
183
|
exports.matchFieldByTypeAndName = matchFieldByTypeAndName;
|
|
183
184
|
const matchFieldByType = (a) => (b) => a.type === b.type;
|
|
184
185
|
exports.matchFieldByType = matchFieldByType;
|
|
186
|
+
const isTileFilterable = (tile) => ![dashboard_1.DashboardTileTypes.MARKDOWN, dashboard_1.DashboardTileTypes.LOOM].includes(tile.type);
|
|
187
|
+
exports.isTileFilterable = isTileFilterable;
|
|
185
188
|
const getDefaultTileTargets = (field, availableTileFilters) => Object.entries(availableTileFilters).reduce((acc, [tileUuid, availableFilters]) => {
|
|
186
189
|
if (!availableFilters)
|
|
187
190
|
return acc;
|
|
@@ -409,6 +412,37 @@ const getDashboardFilterRulesForTile = (tileUuid, rules) => rules
|
|
|
409
412
|
})
|
|
410
413
|
.filter((f) => f !== null);
|
|
411
414
|
exports.getDashboardFilterRulesForTile = getDashboardFilterRulesForTile;
|
|
415
|
+
const getTabUuidsForFilterRules = (dashboardTiles, filters, filterableFieldsByTileUuid) => {
|
|
416
|
+
if (!dashboardTiles)
|
|
417
|
+
return {};
|
|
418
|
+
return dashboardTiles.reduce((acc, tile) => {
|
|
419
|
+
if (!tile.tabUuid || !(0, exports.isTileFilterable)(tile)) {
|
|
420
|
+
return acc;
|
|
421
|
+
}
|
|
422
|
+
const filterIdsForTile = (0, exports.getDashboardFilterRulesForTile)(tile.uuid, filters.dimensions)
|
|
423
|
+
.filter((filterRule) => {
|
|
424
|
+
const tileConfig = filterRule.tileTargets?.[tile.uuid];
|
|
425
|
+
// TODO: Move this fallback logic to the getDashboardFilterRulesForTile function
|
|
426
|
+
if (tileConfig === undefined && filterableFieldsByTileUuid) {
|
|
427
|
+
return filterableFieldsByTileUuid[tile.uuid]?.some((f) => (0, item_1.getItemId)(f) === filterRule.target.fieldId);
|
|
428
|
+
}
|
|
429
|
+
// Apply filter to tile
|
|
430
|
+
return !!tileConfig;
|
|
431
|
+
})
|
|
432
|
+
.map((tileFilter) => tileFilter.id);
|
|
433
|
+
// Set filter id as key and tile tab uuids as values
|
|
434
|
+
filterIdsForTile.forEach((filterId) => {
|
|
435
|
+
if (!acc[filterId]) {
|
|
436
|
+
acc[filterId] = [];
|
|
437
|
+
}
|
|
438
|
+
if (tile.tabUuid && !acc[filterId].includes(tile.tabUuid)) {
|
|
439
|
+
acc[filterId].push(tile.tabUuid);
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
return acc;
|
|
443
|
+
}, {});
|
|
444
|
+
};
|
|
445
|
+
exports.getTabUuidsForFilterRules = getTabUuidsForFilterRules;
|
|
412
446
|
const getDashboardFilterRulesForTables = (tables, rules) => rules.filter((f) => tables.includes(f.target.tableName));
|
|
413
447
|
exports.getDashboardFilterRulesForTables = getDashboardFilterRulesForTables;
|
|
414
448
|
const getDashboardFilterRulesForTileAndTables = (tileUuid, tables, rules) => (0, exports.getDashboardFilterRulesForTables)(tables, (0, exports.getDashboardFilterRulesForTile)(tileUuid, rules));
|