@lightdash/common 0.1357.0 → 0.1358.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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;
@@ -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));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightdash/common",
3
- "version": "0.1357.0",
3
+ "version": "0.1358.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [