@gooddata/sdk-ui-dashboard 11.61.0-alpha.1 → 11.61.0-alpha.2

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.
@@ -1,4 +1,4 @@
1
- export declare const LIB_VERSION = "11.61.0-alpha.1";
1
+ export declare const LIB_VERSION = "11.61.0-alpha.2";
2
2
  export declare const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
3
3
  export declare const LIB_NAME = "@gooddata/sdk-ui-dashboard";
4
4
  //# sourceMappingURL=__version.d.ts.map
package/esm/__version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // (C) 2021 GoodData Corporation
2
2
  // DO NOT CHANGE THIS FILE, IT IS RE-GENERATED ON EVERY BUILD
3
- export const LIB_VERSION = "11.61.0-alpha.1";
3
+ export const LIB_VERSION = "11.61.0-alpha.2";
4
4
  export const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
5
5
  export const LIB_NAME = "@gooddata/sdk-ui-dashboard";
@@ -1 +1 @@
1
- {"version":3,"file":"changeFilterContextSelectionHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAwC/C,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAmC9E,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAoGnE,wBAAiB,mCAAmC,CAChD,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,4BAA4B,GAClC,YAAY,CAAC,IAAI,CAAC,CA+KpB"}
1
+ {"version":3,"file":"changeFilterContextSelectionHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAwC/C,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAqC9E,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAoGnE,wBAAiB,mCAAmC,CAChD,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,4BAA4B,GAClC,YAAY,CAAC,IAAI,CAAC,CA2LpB"}
@@ -7,10 +7,12 @@ import { areObjRefsEqual, attributeElementsIsEmpty, dashboardAttributeFilterItem
7
7
  import { dashboardFilterToFilterContextItem } from "../../../_staging/dashboard/dashboardFilterContext.js";
8
8
  import { invalidArgumentsProvided } from "../../events/general.js";
9
9
  import { dispatchDashboardEvent } from "../../store/_infra/eventDispatcher.js";
10
+ import { isDashboardFilterRestricted } from "../../store/filtering/restrictedFilterUtils.js";
10
11
  import { selectAttributeFilterConfigsOverrides, selectAttributeFilterConfigsOverridesByTab, selectAttributeFilterConfigsSelectionTypeMap, selectAttributeFilterConfigsSelectionTypeMapByTab, } from "../../store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js";
11
12
  import { selectAttributeFilterDisplayFormsMap, selectFilterContextAttributeFilterByDisplayForm, selectFilterContextAttributeFilterByDisplayFormForTab, selectFilterContextAttributeFilterByLocalId, selectFilterContextAttributeFilterByLocalIdForTab, selectFilterContextAttributeFilterItemByDisplayForm, selectFilterContextAttributeFilterItemByDisplayFormForTab, selectFilterContextAttributeFilterItemByLocalId, selectFilterContextAttributeFilterItemByLocalIdForTab, selectFilterContextAttributeFilterItems, selectFilterContextAttributeFilterItemsForTab, selectFilterContextAttributeFilters, selectFilterContextAttributeFiltersForTab, selectFilterContextDateFilterByDataSet, selectFilterContextDateFilterByDataSetForTab, selectFilterContextDateFiltersWithDimension, selectFilterContextDateFiltersWithDimensionForTab, selectFilterContextMeasureValueFilters, } from "../../store/tabs/filterContext/filterContextSelectors.js";
12
13
  import { tabsActions } from "../../store/tabs/index.js";
13
14
  import { selectTabs } from "../../store/tabs/tabsSelectors.js";
15
+ import { selectUnavailableObjects } from "../../store/unavailableObjects/unavailableObjectsSelectors.js";
14
16
  import { resolveAttributeMetadata } from "../../utils/attributeResolver.js";
15
17
  import { resolveDisplayFormMetadata, } from "../../utils/displayFormResolver.js";
16
18
  import { canApplyFilterTypeToTarget } from "../dashboard/common/attributeFilterSelectionTypeCompatibility.js";
@@ -79,6 +81,9 @@ export function* changeFilterContextSelectionHandler(ctx, cmd) {
79
81
  }
80
82
  // Cross-filtering is always compatible with dashboard tabs now
81
83
  // (removed the check that prevented cross-filtering without tabs)
84
+ const unavailableObjects = yield select(selectUnavailableObjects);
85
+ // A restricted attribute filter keeps its stored selection: its label is never resolved, so the
86
+ // filter can be neither matched nor changed.
82
87
  const normalizedFilters = compact(filters.map((filter) => {
83
88
  if (isDashboardAttributeFilterItem(filter) ||
84
89
  isDashboardDateFilter(filter) ||
@@ -86,7 +91,8 @@ export function* changeFilterContextSelectionHandler(ctx, cmd) {
86
91
  return filter;
87
92
  }
88
93
  return dashboardFilterToFilterContextItem(filter, !!ctx.backend.capabilities.supportsMultipleDateFilters);
89
- }));
94
+ })).filter((filter) => !(isDashboardAttributeFilterItem(filter) &&
95
+ isDashboardFilterRestricted(filter, unavailableObjects)));
90
96
  const disabledComputedAttributeRef = yield call(findDisabledComputedAttributeRef, [
91
97
  ...normalizedFilters
92
98
  .filter(isDashboardAttributeFilterItem)
@@ -134,7 +140,7 @@ export function* changeFilterContextSelectionHandler(ctx, cmd) {
134
140
  const [[commonDateFilter], dateFiltersWithDimension] = partition(dateFilters, isDashboardCommonDateFilter);
135
141
  const selectionTypeMap = yield call(selectAttributeFilterConfigsSelectionTypeMapTabAware, tabLocalIdentifier);
136
142
  const [attributeFilterResult, commonDateFilterUpdateActions, dateFiltersUpdateActions, measureValueFilterUpdateActions,] = yield all([
137
- call(getAttributeFiltersUpdateActions, [...attributeFilters].reverse(), textAttributeFilters, attributeFilterConfigs, resetOthers, ctx, tabLocalIdentifier, selectionTypeMap, matchByLocalIdentifier),
143
+ call(getAttributeFiltersUpdateActions, [...attributeFilters].reverse(), textAttributeFilters, attributeFilterConfigs, resetOthers, unavailableObjects, ctx, tabLocalIdentifier, selectionTypeMap, matchByLocalIdentifier),
138
144
  call(getDateFilterUpdateActions, commonDateFilter, resetOthers, tabLocalIdentifier),
139
145
  call(getDateFiltersUpdateActions, dateFiltersWithDimension, resetOthers, tabLocalIdentifier),
140
146
  call(getMeasureValueFiltersUpdateActions, measureValueFilters, resetOthers),
@@ -229,7 +235,7 @@ function* findTargetFilterItemByDisplayForm(displayFormRef, tabLocalIdentifier)
229
235
  }
230
236
  return undefined;
231
237
  }
232
- function* getAttributeFiltersUpdateActions(attributeFilters, textAttributeFilters, attributeFilterConfigs, resetOthers, ctx, tabLocalIdentifier, selectionTypeMap, matchByLocalIdentifier) {
238
+ function* getAttributeFiltersUpdateActions(attributeFilters, textAttributeFilters, attributeFilterConfigs, resetOthers, unavailableObjects, ctx, tabLocalIdentifier, selectionTypeMap, matchByLocalIdentifier) {
233
239
  const updateActions = [];
234
240
  const displayFormsToResolve = [];
235
241
  const handledLocalIds = new Set();
@@ -516,7 +522,8 @@ function* getAttributeFiltersUpdateActions(attributeFilters, textAttributeFilter
516
522
  if (resetOthers) {
517
523
  const currentAttributeFilters = yield call(selectFilterContextAttributeFiltersTabAware, tabLocalIdentifier);
518
524
  // for element-based filters that have not been handled, create clear selection actions
519
- const unhandledFilters = currentAttributeFilters.filter((filter) => !handledLocalIds.has(dashboardAttributeFilterItemLocalIdentifier(filter)));
525
+ const unhandledFilters = currentAttributeFilters.filter((filter) => !handledLocalIds.has(dashboardAttributeFilterItemLocalIdentifier(filter)) &&
526
+ !isDashboardFilterRestricted(filter, unavailableObjects));
520
527
  if (unhandledFilters.length > 0) {
521
528
  updateActions.push(tabsActions.clearAttributeFiltersSelection({
522
529
  filterLocalIds: unhandledFilters.map((filter) => dashboardAttributeFilterItemLocalIdentifier(filter)),
@@ -527,7 +534,8 @@ function* getAttributeFiltersUpdateActions(attributeFilters, textAttributeFilter
527
534
  // (negative arbitrary filter with empty selection)
528
535
  const currentAllFilterItems = yield call(selectFilterContextAttributeFilterItemsTabAware, tabLocalIdentifier);
529
536
  const unhandledTextFilters = currentAllFilterItems.filter((filter) => isDashboardTextAttributeFilter(filter) &&
530
- !handledLocalIds.has(dashboardAttributeFilterItemLocalIdentifier(filter)));
537
+ !handledLocalIds.has(dashboardAttributeFilterItemLocalIdentifier(filter)) &&
538
+ !isDashboardFilterRestricted(filter, unavailableObjects));
531
539
  for (const textFilter of unhandledTextFilters) {
532
540
  const localId = dashboardAttributeFilterItemLocalIdentifier(textFilter);
533
541
  const resetFilter = {
@@ -7,16 +7,16 @@ import { useAttributeFilterDisplayFormFromMap } from "../../../../_staging/share
7
7
  import { useAttributes } from "../../../../_staging/sharedHooks/useAttributes.js";
8
8
  import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
9
9
  import { selectAllCatalogAttributesMap, selectAllCatalogDateDatasetsMap, selectAllCatalogMeasuresMap, selectCatalogIsLoaded, } from "../../../../model/store/catalog/catalogSelectors.js";
10
+ import { selectExecutableDashboardFilters } from "../../../../model/store/filtering/dashboardFilterSelectors.js";
10
11
  import { selectInsightByRef } from "../../../../model/store/insights/insightsSelectors.js";
11
12
  import { selectAttributeFilterConfigsDisplayAsLabelMap } from "../../../../model/store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js";
12
- import { selectFilterContextFilters } from "../../../../model/store/tabs/filterContext/filterContextSelectors.js";
13
13
  import { AttributeFilterConfigurationItem } from "./AttributeFilterConfigurationItem.js";
14
14
  import { DateFilterConfigurationItem } from "./DateFilterConfigurationItem.js";
15
15
  import { MeasureValueFilterConfigurationItem } from "./MeasureValueFilterConfigurationItem.js";
16
16
  import { useMeasureValueFilterCompatibility } from "./useMeasureValueFilterCompatibility.js";
17
17
  import { getAttributeByDisplayForm } from "./utils.js";
18
18
  export function FilterConfiguration({ widget }) {
19
- const allFilters = useDashboardSelector(selectFilterContextFilters);
19
+ const filters = useDashboardSelector(selectExecutableDashboardFilters);
20
20
  const getAttributeFilterDisplayFormFromMap = useAttributeFilterDisplayFormFromMap();
21
21
  const attrMap = useDashboardSelector(selectAllCatalogAttributesMap);
22
22
  const ddsMap = useDashboardSelector(selectAllCatalogDateDatasetsMap);
@@ -24,10 +24,10 @@ export function FilterConfiguration({ widget }) {
24
24
  const isCatalogLoaded = useDashboardSelector(selectCatalogIsLoaded);
25
25
  const displayAsLabelMap = useDashboardSelector(selectAttributeFilterConfigsDisplayAsLabelMap);
26
26
  const draggableFilters = useMemo(() => {
27
- return allFilters.filter((f) => isDashboardAttributeFilterItem(f) ||
27
+ return filters.filter((f) => isDashboardAttributeFilterItem(f) ||
28
28
  isDashboardDateFilterWithDimension(f) ||
29
29
  isDashboardMeasureValueFilter(f));
30
- }, [allFilters]);
30
+ }, [filters]);
31
31
  const attributeFilters = useMemo(() => {
32
32
  return draggableFilters.filter(isDashboardAttributeFilterItem);
33
33
  }, [draggableFilters]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-dashboard",
3
- "version": "11.61.0-alpha.1",
3
+ "version": "11.61.0-alpha.2",
4
4
  "description": "GoodData SDK - Dashboard Component",
5
5
  "license": "LicenseRef-LICENSE",
6
6
  "author": "GoodData Corporation",
@@ -60,20 +60,20 @@
60
60
  "ts-invariant": "0.10.3",
61
61
  "tslib": "2.8.1",
62
62
  "uuid": "11.1.1",
63
- "@gooddata/sdk-backend-base": "11.61.0-alpha.1",
64
- "@gooddata/sdk-backend-spi": "11.61.0-alpha.1",
65
- "@gooddata/sdk-ui": "11.61.0-alpha.1",
66
- "@gooddata/sdk-ui-charts": "11.61.0-alpha.1",
67
- "@gooddata/sdk-model": "11.61.0-alpha.1",
68
- "@gooddata/sdk-ui-ext": "11.61.0-alpha.1",
69
- "@gooddata/sdk-ui-geo": "11.61.0-alpha.1",
70
- "@gooddata/sdk-ui-filters": "11.61.0-alpha.1",
71
- "@gooddata/sdk-ui-kit": "11.61.0-alpha.1",
72
- "@gooddata/sdk-ui-pivot": "11.61.0-alpha.1",
73
- "@gooddata/sdk-ui-theme-provider": "11.61.0-alpha.1",
74
- "@gooddata/sdk-ui-semantic-search": "11.61.0-alpha.1",
75
- "@gooddata/sdk-ui-vis-commons": "11.61.0-alpha.1",
76
- "@gooddata/util": "11.61.0-alpha.1"
63
+ "@gooddata/sdk-backend-base": "11.61.0-alpha.2",
64
+ "@gooddata/sdk-model": "11.61.0-alpha.2",
65
+ "@gooddata/sdk-backend-spi": "11.61.0-alpha.2",
66
+ "@gooddata/sdk-ui": "11.61.0-alpha.2",
67
+ "@gooddata/sdk-ui-charts": "11.61.0-alpha.2",
68
+ "@gooddata/sdk-ui-ext": "11.61.0-alpha.2",
69
+ "@gooddata/sdk-ui-filters": "11.61.0-alpha.2",
70
+ "@gooddata/sdk-ui-geo": "11.61.0-alpha.2",
71
+ "@gooddata/sdk-ui-pivot": "11.61.0-alpha.2",
72
+ "@gooddata/sdk-ui-kit": "11.61.0-alpha.2",
73
+ "@gooddata/sdk-ui-semantic-search": "11.61.0-alpha.2",
74
+ "@gooddata/sdk-ui-theme-provider": "11.61.0-alpha.2",
75
+ "@gooddata/sdk-ui-vis-commons": "11.61.0-alpha.2",
76
+ "@gooddata/util": "11.61.0-alpha.2"
77
77
  },
78
78
  "devDependencies": {
79
79
  "@microsoft/api-documenter": "7.30.16",
@@ -115,12 +115,12 @@
115
115
  "typescript": "7.0.2",
116
116
  "vitest": "4.1.11",
117
117
  "vitest-dom": "0.1.1",
118
- "@gooddata/eslint-config": "11.61.0-alpha.1",
119
- "@gooddata/oxlint-config": "11.61.0-alpha.1",
120
- "@gooddata/i18n-toolkit": "11.61.0-alpha.1",
121
- "@gooddata/reference-workspace": "11.61.0-alpha.1",
122
- "@gooddata/sdk-backend-mockingbird": "11.61.0-alpha.1",
123
- "@gooddata/stylelint-config": "11.61.0-alpha.1"
118
+ "@gooddata/eslint-config": "11.61.0-alpha.2",
119
+ "@gooddata/i18n-toolkit": "11.61.0-alpha.2",
120
+ "@gooddata/oxlint-config": "11.61.0-alpha.2",
121
+ "@gooddata/sdk-backend-mockingbird": "11.61.0-alpha.2",
122
+ "@gooddata/reference-workspace": "11.61.0-alpha.2",
123
+ "@gooddata/stylelint-config": "11.61.0-alpha.2"
124
124
  },
125
125
  "peerDependencies": {
126
126
  "react": "^18.0.0 || ^19.0.0",