@gooddata/sdk-ui-dashboard 11.58.0-alpha.3 → 11.58.0-alpha.5

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.
Files changed (132) hide show
  1. package/esm/__version.d.ts +1 -1
  2. package/esm/__version.js +1 -1
  3. package/esm/index.d.ts +2 -2
  4. package/esm/index.d.ts.map +1 -1
  5. package/esm/index.js +2 -2
  6. package/esm/internal.d.ts +1 -0
  7. package/esm/internal.d.ts.map +1 -1
  8. package/esm/internal.js +1 -0
  9. package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.d.ts.map +1 -1
  10. package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.js +6 -1
  11. package/esm/model/commandHandlers/common/validateDrills.d.ts.map +1 -1
  12. package/esm/model/commandHandlers/common/validateDrills.js +12 -3
  13. package/esm/model/commandHandlers/dashboard/dashboardDrillReferences.d.ts +4 -0
  14. package/esm/model/commandHandlers/dashboard/dashboardDrillReferences.d.ts.map +1 -0
  15. package/esm/model/commandHandlers/dashboard/dashboardDrillReferences.js +53 -0
  16. package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.d.ts.map +1 -1
  17. package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.js +4 -1
  18. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.d.ts.map +1 -1
  19. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js +30 -6
  20. package/esm/model/commandHandlers/drill/drillToAttributeUrlHandler.d.ts.map +1 -1
  21. package/esm/model/commandHandlers/drill/drillToAttributeUrlHandler.js +2 -0
  22. package/esm/model/commandHandlers/drill/drillToCustomUrlHandler.d.ts.map +1 -1
  23. package/esm/model/commandHandlers/drill/drillToCustomUrlHandler.js +2 -0
  24. package/esm/model/commandHandlers/drill/drillToDashboardHandler.d.ts.map +1 -1
  25. package/esm/model/commandHandlers/drill/drillToDashboardHandler.js +2 -0
  26. package/esm/model/commandHandlers/drill/drillToInsightHandler.d.ts.map +1 -1
  27. package/esm/model/commandHandlers/drill/drillToInsightHandler.js +3 -1
  28. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.d.ts.map +1 -1
  29. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.js +30 -29
  30. package/esm/model/commandHandlers/drill/validateDrillAccess.d.ts +6 -0
  31. package/esm/model/commandHandlers/drill/validateDrillAccess.d.ts.map +1 -0
  32. package/esm/model/commandHandlers/drill/validateDrillAccess.js +10 -0
  33. package/esm/model/store/catalog/catalogSelectors.d.ts +26 -1
  34. package/esm/model/store/catalog/catalogSelectors.d.ts.map +1 -1
  35. package/esm/model/store/catalog/catalogSelectors.js +13 -2
  36. package/esm/model/store/filtering/dashboardFilterSelectors.d.ts +8 -2
  37. package/esm/model/store/filtering/dashboardFilterSelectors.d.ts.map +1 -1
  38. package/esm/model/store/filtering/dashboardFilterSelectors.js +41 -25
  39. package/esm/model/store/filtering/types.d.ts +5 -0
  40. package/esm/model/store/filtering/types.d.ts.map +1 -1
  41. package/esm/model/store/tabs/layout/layoutSelectors.d.ts.map +1 -1
  42. package/esm/model/store/tabs/layout/layoutSelectors.js +2 -1
  43. package/esm/model/store/ui/index.d.ts +1 -0
  44. package/esm/model/store/ui/index.d.ts.map +1 -1
  45. package/esm/model/store/ui/uiReducers.d.ts +5 -1
  46. package/esm/model/store/ui/uiReducers.d.ts.map +1 -1
  47. package/esm/model/store/ui/uiReducers.js +8 -4
  48. package/esm/model/store/ui/uiSelectors.d.ts +5 -1
  49. package/esm/model/store/ui/uiSelectors.d.ts.map +1 -1
  50. package/esm/model/store/ui/uiSelectors.js +4 -0
  51. package/esm/model/store/ui/uiState.d.ts +2 -1
  52. package/esm/model/store/ui/uiState.d.ts.map +1 -1
  53. package/esm/model/store/ui/uiState.js +1 -0
  54. package/esm/model/store/widgetDrills/drillRestrictionSelectors.d.ts +23 -0
  55. package/esm/model/store/widgetDrills/drillRestrictionSelectors.d.ts.map +1 -0
  56. package/esm/model/store/widgetDrills/drillRestrictionSelectors.js +5 -0
  57. package/esm/model/store/widgetDrills/drillRestrictionUtils.d.ts +5 -0
  58. package/esm/model/store/widgetDrills/drillRestrictionUtils.d.ts.map +1 -0
  59. package/esm/model/store/widgetDrills/drillRestrictionUtils.js +27 -0
  60. package/esm/model/store/widgetDrills/widgetDrillSelectors.d.ts.map +1 -1
  61. package/esm/model/store/widgetDrills/widgetDrillSelectors.js +9 -5
  62. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +1 -0
  63. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts +4 -2
  64. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts.map +1 -1
  65. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.js +12 -3
  66. package/esm/presentation/automations/alerting/utils/items.js +8 -14
  67. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.d.ts.map +1 -1
  68. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +8 -2
  69. package/esm/presentation/automations/contexts/AutomationsContext.d.ts +4 -2
  70. package/esm/presentation/automations/contexts/AutomationsContext.d.ts.map +1 -1
  71. package/esm/presentation/automations/scheduledEmail/hooks/useExportTimezones.js +1 -1
  72. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +1 -0
  73. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts +4 -2
  74. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts.map +1 -1
  75. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.js +25 -6
  76. package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts.map +1 -1
  77. package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.js +16 -11
  78. package/esm/presentation/automations/shared/automationFilters/components/AutomationRestrictedFilters.d.ts +9 -0
  79. package/esm/presentation/automations/shared/automationFilters/components/AutomationRestrictedFilters.d.ts.map +1 -0
  80. package/esm/presentation/automations/shared/automationFilters/components/AutomationRestrictedFilters.js +22 -0
  81. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.d.ts +2 -2
  82. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.d.ts.map +1 -1
  83. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.js +17 -5
  84. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.d.ts +8 -0
  85. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.d.ts.map +1 -1
  86. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.js +54 -10
  87. package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.d.ts.map +1 -1
  88. package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.js +3 -2
  89. package/esm/presentation/automations/shared/filters/conversions.d.ts +10 -2
  90. package/esm/presentation/automations/shared/filters/conversions.d.ts.map +1 -1
  91. package/esm/presentation/automations/shared/filters/conversions.js +15 -6
  92. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.d.ts.map +1 -1
  93. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.js +3 -4
  94. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts.map +1 -1
  95. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.js +20 -7
  96. package/esm/presentation/dialogs/ExportCsvDialog.d.ts.map +1 -1
  97. package/esm/presentation/dialogs/ExportCsvDialog.js +2 -1
  98. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParametersSections/IdentifierParametersSection.js +1 -1
  99. package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.d.ts +2 -1
  100. package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.d.ts.map +1 -1
  101. package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.js +19 -1
  102. package/esm/presentation/drill/DrillSelect/WithDrillSelect.d.ts.map +1 -1
  103. package/esm/presentation/drill/DrillSelect/WithDrillSelect.js +12 -4
  104. package/esm/presentation/drill/DrillSelect/types.d.ts +1 -0
  105. package/esm/presentation/drill/DrillSelect/types.d.ts.map +1 -1
  106. package/esm/presentation/drill/hooks/useDrillSelectDropdownMenuItems.d.ts.map +1 -1
  107. package/esm/presentation/drill/hooks/useDrillSelectDropdownMenuItems.js +4 -2
  108. package/esm/presentation/insightNotSavedDialog/InsightNotSavedDialog.d.ts.map +1 -1
  109. package/esm/presentation/insightNotSavedDialog/InsightNotSavedDialog.js +4 -5
  110. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +21 -1
  111. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  112. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +25 -5
  113. package/esm/presentation/topBar/buttonBar/button/saveButton/DefaultSaveButton.d.ts.map +1 -1
  114. package/esm/presentation/topBar/buttonBar/button/saveButton/DefaultSaveButton.js +3 -2
  115. package/esm/sdk-ui-dashboard.d.ts +20 -19
  116. package/package.json +21 -21
  117. package/styles/css/dashboard.css +1 -7
  118. package/styles/css/dashboard.css.map +1 -1
  119. package/styles/css/dashboardSettingsDialog.css +4 -0
  120. package/styles/css/dashboardSettingsDialog.css.map +1 -1
  121. package/styles/css/export.css +0 -6
  122. package/styles/css/export.css.map +1 -1
  123. package/styles/css/main.css +5 -13
  124. package/styles/css/main.css.map +1 -1
  125. package/styles/css/notifications_channels_dialog.css +1 -7
  126. package/styles/css/notifications_channels_dialog.css.map +1 -1
  127. package/styles/scss/dashboardSettingsDialog.scss +5 -0
  128. package/styles/scss/export.scss +0 -9
  129. package/styles/scss/notifications_channels_dialog.scss +1 -10
  130. package/esm/model/types/drillTypes.d.ts +0 -13
  131. package/esm/model/types/drillTypes.d.ts.map +0 -1
  132. package/esm/model/types/drillTypes.js +0 -14
@@ -1,6 +1,6 @@
1
1
  // (C) 2021-2026 GoodData Corporation
2
2
  import { batchActions } from "redux-batched-actions";
3
- import { call, put, select, take } from "redux-saga/effects";
3
+ import { all, call, put, select, take } from "redux-saga/effects";
4
4
  import { invariant } from "ts-invariant";
5
5
  import { isUnexpectedResponseError } from "@gooddata/sdk-backend-spi";
6
6
  import { areObjRefsEqual, insightRef, isTempFilterContext, } from "@gooddata/sdk-model";
@@ -38,6 +38,7 @@ import { isTemporaryIdentity } from "../../utils/dashboardItemUtils.js";
38
38
  import { generateTabLocalIdentifier } from "../../utils/tabLocalIdentifier.js";
39
39
  import { changeRenderModeHandler } from "../renderMode/changeRenderModeHandler.js";
40
40
  import { switchDashboardTabHandler } from "../tabs/switchDashboardTabHandler.js";
41
+ import { dashboardWithDrillReferences } from "./dashboardDrillReferences.js";
41
42
  function* persistDraftInsights(ctx, cmd, insights) {
42
43
  for (const draftInsight of insights) {
43
44
  const persistedInsight = yield call(async () => {
@@ -73,6 +74,26 @@ function* persistDraftInsights(ctx, cmd, insights) {
73
74
  yield put(insightsActions.setInsights(updatedInsights));
74
75
  }
75
76
  }
77
+ async function draftInsightExistsOnBackend(ctx, draftInsight) {
78
+ const ref = insightRef(draftInsight);
79
+ if (!ref) {
80
+ return false;
81
+ }
82
+ try {
83
+ await ctx.backend.workspace(ctx.workspace).insights().getInsight(ref);
84
+ return true;
85
+ }
86
+ catch (error) {
87
+ if (isUnexpectedResponseError(error) && error.httpStatus === 404) {
88
+ return false;
89
+ }
90
+ throw error;
91
+ }
92
+ }
93
+ function* getDraftInsightsToPersist(ctx, draftInsightsOnDashboard) {
94
+ const draftInsightsExistenceOnBackend = yield all(draftInsightsOnDashboard.map((draftInsight) => call(draftInsightExistsOnBackend, ctx, draftInsight)));
95
+ return draftInsightsOnDashboard.filter((_, index) => !draftInsightsExistenceOnBackend[index]);
96
+ }
76
97
  function createDashboard(ctx, saveCtx) {
77
98
  return ctx.backend
78
99
  .workspace(ctx.workspace)
@@ -160,7 +181,7 @@ function processExistingTabs(tabs, parametersByTab, defaultTabNewLocalIdentifier
160
181
  const tabLayout = tab.layout?.layout;
161
182
  const filterContext = tab.filterContext?.filterContextDefinition
162
183
  ? {
163
- ...(tab.filterContext?.filterContextIdentity || {}),
184
+ ...tab.filterContext?.filterContextIdentity,
164
185
  ...tab.filterContext.filterContextDefinition,
165
186
  }
166
187
  : undefined;
@@ -300,11 +321,12 @@ function* createDashboardSaveContext(cmd, isNewDashboard) {
300
321
  ...dashboardFromState,
301
322
  layout: layout ? dashboardLayoutRemoveIdentity(layout, isTemporaryIdentity) : undefined,
302
323
  };
324
+ const insights = yield select(selectInsights);
303
325
  return {
304
326
  cmd,
305
327
  persistedDashboard,
306
328
  dashboardFromState,
307
- dashboardToSave: getDashboardWithSharing(dashboardToSave, capabilities.supportsAccessControl, isNewDashboard),
329
+ dashboardToSave: getDashboardWithSharing(dashboardWithDrillReferences(dashboardToSave, insights), capabilities.supportsAccessControl, isNewDashboard),
308
330
  defaultTabNewLocalIdentifier,
309
331
  };
310
332
  }
@@ -390,8 +412,10 @@ export function* saveDashboardHandler(ctx, cmd) {
390
412
  try {
391
413
  const isInsightNotSavedDialogSaveConfirmed = yield select(selectIsInsightNotSavedDialogSaveConfirmed);
392
414
  const draftInsightsOnDashboard = yield select(selectDraftInsightsUsedOnDashboard);
415
+ const draftInsightsToPersist = yield call(getDraftInsightsToPersist, ctx, draftInsightsOnDashboard);
393
416
  let shouldPersistDraftInsights = isInsightNotSavedDialogSaveConfirmed;
394
- if (draftInsightsOnDashboard.length > 0 && !shouldPersistDraftInsights) {
417
+ if (draftInsightsToPersist.length > 0 && !shouldPersistDraftInsights) {
418
+ yield put(uiActions.setInsightNotSavedDialogDraftInsightsToPersist(draftInsightsToPersist));
395
419
  yield put(uiActions.openInsightNotSavedDialog());
396
420
  const draftInsightDialogAction = yield take([
397
421
  uiActions.confirmInsightNotSavedDialogSubmit.type,
@@ -407,8 +431,8 @@ export function* saveDashboardHandler(ctx, cmd) {
407
431
  if (isInsightNotSavedDialogOpen) {
408
432
  yield put(uiActions.closeInsightNotSavedDialog());
409
433
  }
410
- if (shouldPersistDraftInsights && draftInsightsOnDashboard.length > 0) {
411
- yield call(persistDraftInsights, ctx, cmd, draftInsightsOnDashboard);
434
+ if (shouldPersistDraftInsights && draftInsightsToPersist.length > 0) {
435
+ yield call(persistDraftInsights, ctx, cmd, draftInsightsToPersist);
412
436
  }
413
437
  const persistedDashboard = yield select(selectPersistedDashboard);
414
438
  const isNewDashboard = persistedDashboard === undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"drillToAttributeUrlHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/drillToAttributeUrlHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACH,KAAK,qCAAqC,EAG7C,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAKnE,wBAAiB,0BAA0B,CACvC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,oBAAoB,GAC1B,YAAY,CAAC,qCAAqC,CAAC,CAgCrD"}
1
+ {"version":3,"file":"drillToAttributeUrlHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/drillToAttributeUrlHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACH,KAAK,qCAAqC,EAG7C,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAMnE,wBAAiB,0BAA0B,CACvC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,oBAAoB,GAC1B,YAAY,CAAC,qCAAqC,CAAC,CAiCrD"}
@@ -5,7 +5,9 @@ import { drillToAttributeUrlRequested, drillToAttributeUrlResolved, } from "../.
5
5
  import { selectWidgetDrills } from "../../store/tabs/layout/layoutSelectors.js";
6
6
  import { getDrillToUrlFiltersWithResolvedValues } from "./getDrillToUrlFilters.js";
7
7
  import { resolveDrillToAttributeUrl } from "./resolveDrillToAttributeUrl.js";
8
+ import { validateDrillAccess } from "./validateDrillAccess.js";
8
9
  export function* drillToAttributeUrlHandler(ctx, cmd) {
10
+ yield call(validateDrillAccess, ctx, cmd, cmd.payload.drillDefinition);
9
11
  yield put(drillToAttributeUrlRequested(ctx, cmd.payload.drillDefinition, cmd.payload.drillEvent, cmd.correlationId));
10
12
  const [resolvedUrl, filtersInfo] = yield all([
11
13
  call(resolveDrillToAttributeUrl, cmd.payload.drillDefinition, cmd.payload.drillEvent, ctx),
@@ -1 +1 @@
1
- {"version":3,"file":"drillToCustomUrlHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/drillToCustomUrlHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACH,KAAK,kCAAkC,EAG1C,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAKnE,wBAAiB,uBAAuB,CACpC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACvB,YAAY,CAAC,kCAAkC,CAAC,CAiClD"}
1
+ {"version":3,"file":"drillToCustomUrlHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/drillToCustomUrlHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACH,KAAK,kCAAkC,EAG1C,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAMnE,wBAAiB,uBAAuB,CACpC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACvB,YAAY,CAAC,kCAAkC,CAAC,CAkClD"}
@@ -3,7 +3,9 @@ import { all, call, put } from "redux-saga/effects";
3
3
  import { drillToCustomUrlRequested, drillToCustomUrlResolved, } from "../../events/drill.js";
4
4
  import { getDrillToUrlFiltersWithResolvedValues } from "./getDrillToUrlFilters.js";
5
5
  import { resolveDrillToCustomUrl } from "./resolveDrillToCustomUrl.js";
6
+ import { validateDrillAccess } from "./validateDrillAccess.js";
6
7
  export function* drillToCustomUrlHandler(ctx, cmd) {
8
+ yield call(validateDrillAccess, ctx, cmd, cmd.payload.drillDefinition);
7
9
  yield put(drillToCustomUrlRequested(ctx, cmd.payload.drillDefinition, cmd.payload.drillEvent, cmd.correlationId));
8
10
  const [resolvedUrl, filtersInfo] = yield all([
9
11
  call(resolveDrillToCustomUrl, cmd.payload.drillDefinition, cmd.payload.drillEvent.widgetRef, cmd.payload.drillEvent, ctx, cmd),
@@ -1 +1 @@
1
- {"version":3,"file":"drillToDashboardHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/drillToDashboardHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAiC/C,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EACH,KAAK,kCAAkC,EAG1C,MAAM,uBAAuB,CAAC;AAkB/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAUnE,wBAAiB,uBAAuB,CACpC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACvB,YAAY,CAAC,kCAAkC,CAAC,CA8HlD"}
1
+ {"version":3,"file":"drillToDashboardHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/drillToDashboardHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAiC/C,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EACH,KAAK,kCAAkC,EAG1C,MAAM,uBAAuB,CAAC;AAkB/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE,wBAAiB,uBAAuB,CACpC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACvB,YAAY,CAAC,kCAAkC,CAAC,CA+HlD"}
@@ -16,7 +16,9 @@ import { selectActiveTabDrillParameters } from "../../store/tabs/parameters/para
16
16
  import { convertIntersectionToAttributeFilters, removeIgnoredValuesFromDrillIntersection, } from "./common/intersectionUtils.js";
17
17
  import { mergeDashboardAndSourceFilters } from "./common/mergeFilters.js";
18
18
  import { getIncludedSourceFiltersForDashboard } from "./common/sourceDrillFilters.js";
19
+ import { validateDrillAccess } from "./validateDrillAccess.js";
19
20
  export function* drillToDashboardHandler(ctx, cmd) {
21
+ yield call(validateDrillAccess, ctx, cmd, cmd.payload.drillDefinition);
20
22
  // put start event
21
23
  yield put(drillToDashboardRequested(ctx, cmd.payload.drillDefinition, cmd.payload.drillEvent, cmd.correlationId));
22
24
  // decide if we should use date filter (only if enabled and connected to a dataset)
@@ -1 +1 @@
1
- {"version":3,"file":"drillToInsightHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/drillToInsightHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACH,KAAK,gCAAgC,EAGxC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAInE,wBAAiB,qBAAqB,CAClC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,eAAe,GACrB,YAAY,CAAC,gCAAgC,CAAC,CAuBhD"}
1
+ {"version":3,"file":"drillToInsightHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/drillToInsightHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACH,KAAK,gCAAgC,EAGxC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAKnE,wBAAiB,qBAAqB,CAClC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,eAAe,GACrB,YAAY,CAAC,gCAAgC,CAAC,CAwBhD"}
@@ -1,9 +1,11 @@
1
1
  // (C) 2021-2026 GoodData Corporation
2
- import { put, select } from "redux-saga/effects";
2
+ import { call, put, select } from "redux-saga/effects";
3
3
  import { drillToInsightRequested, drillToInsightResolved, } from "../../events/drill.js";
4
4
  import { selectInsightByRef, selectInsightByWidgetRef } from "../../store/insights/insightsSelectors.js";
5
5
  import { addDrillFiltersToInsight } from "./drillToInsightUtils.js";
6
+ import { validateDrillAccess } from "./validateDrillAccess.js";
6
7
  export function* drillToInsightHandler(ctx, cmd) {
8
+ yield call(validateDrillAccess, ctx, cmd, cmd.payload.drillDefinition);
7
9
  const { drillDefinition, drillEvent } = cmd.payload;
8
10
  const insight = yield select(selectInsightByRef(drillDefinition.target));
9
11
  yield put(drillToInsightRequested(ctx, insight, drillDefinition, drillEvent, cmd.correlationId));
@@ -1 +1 @@
1
- {"version":3,"file":"resolveDrillToCustomUrl.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/resolveDrillToCustomUrl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveDrillToCustomUrl.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/resolveDrillToCustomUrl.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import stringify from "json-stable-stringify";
3
3
  import { groupBy } from "lodash-es";
4
4
  import { all, call, select } from "redux-saga/effects";
5
5
  import { areObjRefsEqual, dashboardAttributeFilterItemDisplayForm, dashboardFilterObjRef, filterAttributeElements, filterObjRef, insightFilters as insightDefinitionFilters, insightId, isArbitraryAttributeFilter, isAttributeDescriptor, isAttributeElementsByValue, isAttributeFilter, isComparisonCondition, isDashboardArbitraryAttributeFilter, isDashboardAttributeFilter, isDashboardTextAttributeFilter, isIdentifierRef, isMeasureValueFilter, isNegativeAttributeFilter, isRangeCondition, isTextAttributeFilter, isUriRef, measureValueFilterConditions, measureValueFilterMeasure, } from "@gooddata/sdk-model";
6
- import { displayFormPlaceholderRef, getAttributeIdentifiersPlaceholdersFromUrl, getDashboardAttributeFilterPlaceholdersFromUrl, getDashboardMeasureValueFilterPlaceholdersFromUrl, getInsightAttributeFilterPlaceholdersFromUrl, getInsightMeasureValueFilterPlaceholdersFromUrl, } from "@gooddata/sdk-model/internal";
6
+ import { DRILL_TO_URL_PLACEHOLDER, displayFormPlaceholderRef, getAttributeIdentifiersPlaceholdersFromUrl, getDashboardAttributeFilterPlaceholdersFromUrl, getDashboardMeasureValueFilterPlaceholdersFromUrl, getDrillUrlPlaceholderTypes, getInsightAttributeFilterPlaceholdersFromUrl, getInsightMeasureValueFilterPlaceholdersFromUrl, } from "@gooddata/sdk-model/internal";
7
7
  import { isDrillIntersectionAttributeItem, } from "@gooddata/sdk-ui";
8
8
  import { invalidArgumentsProvided } from "../../events/general.js";
9
9
  import { selectAllCatalogDisplayFormsMap, selectAllCatalogMeasuresMap, selectCatalogDateAttributes, } from "../../store/catalog/catalogSelectors.js";
@@ -13,7 +13,6 @@ import { selectDashboardId } from "../../store/meta/metaSelectors.js";
13
13
  import { selectAttributeFilterConfigsOverrides } from "../../store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js";
14
14
  import { selectFilterContextAttributeFilterItems, selectFilterContextMeasureValueFilters, } from "../../store/tabs/filterContext/filterContextSelectors.js";
15
15
  import { selectAnalyticalWidgetByRef } from "../../store/tabs/layout/layoutSelectors.js";
16
- import { DRILL_TO_URL_PLACEHOLDER } from "../../types/drillTypes.js";
17
16
  import { resolveDisplayFormMetadata } from "../../utils/displayFormResolver.js";
18
17
  import { dashboardMeasureValueFilterMatchesIdentifier, insightMeasureValueFilterMatchesIdentifier, } from "../../utils/measureValueFilterUtils.js";
19
18
  import { getElementTitle, getElementsSecondaryTitles } from "./getElementTitle.js";
@@ -340,24 +339,35 @@ export function* getInsightIdentifiersReplacements(customUrl, widgetRef, ctx) {
340
339
  const applyReplacements = (url, replacements) => replacements.reduce((customUrlWithReplacedPlaceholders, { toBeReplaced, replacement, replaceGlobally }) => customUrlWithReplacedPlaceholders.replace(replaceGlobally ? new RegExp(toBeReplaced, "g") : toBeReplaced, replacement), url);
341
340
  export function* resolveDrillToCustomUrl(drillConfig, widgetRef, event, ctx, cmd) {
342
341
  const customUrl = drillConfig.target.url;
343
- const attributeIdentifiersReplacements = yield call(getAttributeIdentifiersReplacements, customUrl, event.drillContext.intersection, ctx);
344
- const dashboardAttributeFilterReplacements = yield call(getDashboardAttributeFilterReplacements, customUrl, ctx);
345
- const insightAttributeFilterReplacements = yield call(getInsightAttributeFilterReplacements, customUrl, widgetRef);
346
- const dashboardMeasureValueFilterReplacements = yield call(getDashboardMeasureValueFilterReplacements, customUrl);
347
- const enableMeasureValueFilterKD = yield select(selectEnableMeasureValueFilterKD);
348
- const insightMeasureValueFilterReplacements = enableMeasureValueFilterKD
349
- ? yield call(getInsightMeasureValueFilterReplacements, customUrl, widgetRef)
350
- : getInsightMeasureValueFilterPlaceholdersFromUrl(customUrl).map(({ placeholder }) => ({
351
- toBeReplaced: placeholder,
352
- replacement: undefined,
353
- }));
354
- const missingReplacements = [
355
- ...attributeIdentifiersReplacements,
356
- ...dashboardAttributeFilterReplacements,
357
- ...insightAttributeFilterReplacements,
358
- ...dashboardMeasureValueFilterReplacements,
359
- ...insightMeasureValueFilterReplacements,
360
- ].filter(({ replacement }) => replacement === undefined);
342
+ const resolveContext = () => getInsightIdentifiersReplacements(customUrl, widgetRef, ctx);
343
+ const resolvers = {
344
+ attribute_title: () => getAttributeIdentifiersReplacements(customUrl, event.drillContext.intersection, ctx),
345
+ dash_attribute_filter_selection: () => getDashboardAttributeFilterReplacements(customUrl, ctx),
346
+ attribute_filter_selection: () => getInsightAttributeFilterReplacements(customUrl, widgetRef),
347
+ dash_mvf_condition: () => getDashboardMeasureValueFilterReplacements(customUrl),
348
+ mvf_condition: function* () {
349
+ const enabled = yield select(selectEnableMeasureValueFilterKD);
350
+ return enabled
351
+ ? yield call(getInsightMeasureValueFilterReplacements, customUrl, widgetRef)
352
+ : getInsightMeasureValueFilterPlaceholdersFromUrl(customUrl).map(({ placeholder }) => ({
353
+ toBeReplaced: placeholder,
354
+ replacement: undefined,
355
+ }));
356
+ },
357
+ [DRILL_TO_URL_PLACEHOLDER.DRILL_TO_URL_PLACEHOLDER_PROJECT_ID]: resolveContext,
358
+ [DRILL_TO_URL_PLACEHOLDER.DRILL_TO_URL_PLACEHOLDER_WORKSPACE_ID]: resolveContext,
359
+ [DRILL_TO_URL_PLACEHOLDER.DRILL_TO_URL_PLACEHOLDER_INSIGHT_ID]: resolveContext,
360
+ [DRILL_TO_URL_PLACEHOLDER.DRILL_TO_URL_PLACEHOLDER_WIDGET_ID]: resolveContext,
361
+ [DRILL_TO_URL_PLACEHOLDER.DRILL_TO_URL_PLACEHOLDER_DASHBOARD_ID]: resolveContext,
362
+ [DRILL_TO_URL_PLACEHOLDER.DRILL_TO_URL_PLACEHOLDER_CLIENT_ID]: resolveContext,
363
+ [DRILL_TO_URL_PLACEHOLDER.DRILL_TO_URL_PLACEHOLDER_DATA_PRODUCT_ID]: resolveContext,
364
+ };
365
+ const replacements = [];
366
+ for (const resolve of new Set(getDrillUrlPlaceholderTypes(customUrl).map((type) => resolvers[type]))) {
367
+ const resolved = yield call(resolve);
368
+ replacements.push(...resolved);
369
+ }
370
+ const missingReplacements = replacements.filter(({ replacement }) => replacement === undefined);
361
371
  if (missingReplacements.length > 0) {
362
372
  // Surface every unresolved placeholder (not just the first) and the URL, so a "Failed to load
363
373
  // URL" is diagnosable from the console without a debugger.
@@ -366,15 +376,6 @@ export function* resolveDrillToCustomUrl(drillConfig, widgetRef, event, ctx, cmd
366
376
  .join(", ")} in URL "${customUrl}". The drill cannot open.`);
367
377
  throw invalidArgumentsProvided(ctx, cmd, `Drill to custom URL unable to resolve missing parameter ${missingReplacements[0].toBeReplaced}`);
368
378
  }
369
- const insightIdentifiersReplacements = yield call(getInsightIdentifiersReplacements, customUrl, widgetRef, ctx);
370
- const replacements = [
371
- ...attributeIdentifiersReplacements,
372
- ...dashboardAttributeFilterReplacements,
373
- ...insightAttributeFilterReplacements,
374
- ...dashboardMeasureValueFilterReplacements,
375
- ...insightMeasureValueFilterReplacements,
376
- ...insightIdentifiersReplacements,
377
- ];
378
379
  return applyReplacements(customUrl, replacements);
379
380
  }
380
381
  function stringifyAttributeFilterSelection(selection, isNegative) {
@@ -0,0 +1,6 @@
1
+ import { type SagaIterator } from "redux-saga";
2
+ import { type DashboardDrillDefinition } from "../../../types.js";
3
+ import { type IDashboardCommand } from "../../commands/base.js";
4
+ import { type DashboardContext } from "../../types/commonTypes.js";
5
+ export declare function validateDrillAccess(ctx: DashboardContext, cmd: IDashboardCommand, drill: DashboardDrillDefinition): SagaIterator<void>;
6
+ //# sourceMappingURL=validateDrillAccess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateDrillAccess.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/drill/validateDrillAccess.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,wBAAiB,mBAAmB,CAChC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,wBAAwB,GAChC,YAAY,CAAC,IAAI,CAAC,CAKpB"}
@@ -0,0 +1,10 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { select } from "redux-saga/effects";
3
+ import { invalidArgumentsProvided } from "../../events/general.js";
4
+ import { selectIsDrillRestricted } from "../../store/widgetDrills/drillRestrictionSelectors.js";
5
+ export function* validateDrillAccess(ctx, cmd, drill) {
6
+ const isRestricted = yield select(selectIsDrillRestricted);
7
+ if (isRestricted(drill)) {
8
+ throw invalidArgumentsProvided(ctx, cmd, "The drill target is restricted.");
9
+ }
10
+ }
@@ -1,7 +1,7 @@
1
1
  import { type IAttributeDisplayFormMetadataObject, type ICatalogAttribute, type ICatalogAttributeHierarchy, type ICatalogComputedAttribute, type ICatalogDateAttribute, type ICatalogDateAttributeHierarchy, type ICatalogDateDataset, type ICatalogFact, type ICatalogMeasure, type IDateHierarchyTemplate, type IParameterMetadataObject, type IdentifierRef, type ObjRef } from "@gooddata/sdk-model";
2
2
  import { type CatalogDateAttributeWithDataset } from "../../../_staging/catalog/dateAttributeWithDatasetMap.js";
3
3
  import { type ObjRefMap } from "../../../_staging/metadata/objRefMap.js";
4
- import { type DashboardSelector } from "../types.js";
4
+ import { type DashboardSelector, type DashboardState } from "../types.js";
5
5
  import { type CatalogFilterParametersStatus, type CatalogInsightParametersStatus, type CatalogParametersStatus } from "./catalogState.js";
6
6
  /**
7
7
  * @public
@@ -140,6 +140,31 @@ export declare const selectAdhocDateHierarchies: DashboardSelector<ICatalogDateA
140
140
  * @alpha
141
141
  */
142
142
  export declare const selectAllCatalogAttributeHierarchies: DashboardSelector<(ICatalogAttributeHierarchy | ICatalogDateAttributeHierarchy)[]>;
143
+ /**
144
+ * Hierarchies used for drilling must be readable in their entirety. Do not bridge a missing
145
+ * level, or offer an entry point that will encounter an inaccessible level later.
146
+ */
147
+ export declare const selectDrillableAttributeHierarchies: ((state: DashboardState) => (ICatalogAttributeHierarchy | ICatalogDateAttributeHierarchy)[]) & {
148
+ clearCache: () => void;
149
+ resultsCount: () => number;
150
+ resetResultsCount: () => void;
151
+ } & {
152
+ resultFunc: (resultFuncArgs_0: (ICatalogAttributeHierarchy | ICatalogDateAttributeHierarchy)[], resultFuncArgs_1: ICatalogAttribute[], resultFuncArgs_2: ICatalogDateAttribute[], resultFuncArgs_3: boolean) => (ICatalogAttributeHierarchy | ICatalogDateAttributeHierarchy)[];
153
+ memoizedResultFunc: ((resultFuncArgs_0: (ICatalogAttributeHierarchy | ICatalogDateAttributeHierarchy)[], resultFuncArgs_1: ICatalogAttribute[], resultFuncArgs_2: ICatalogDateAttribute[], resultFuncArgs_3: boolean) => (ICatalogAttributeHierarchy | ICatalogDateAttributeHierarchy)[]) & {
154
+ clearCache: () => void;
155
+ resultsCount: () => number;
156
+ resetResultsCount: () => void;
157
+ };
158
+ lastResult: () => (ICatalogAttributeHierarchy | ICatalogDateAttributeHierarchy)[];
159
+ dependencies: [DashboardSelector<(ICatalogAttributeHierarchy | ICatalogDateAttributeHierarchy)[]>, DashboardSelector<ICatalogAttribute[]>, DashboardSelector<ICatalogDateAttribute[]>, DashboardSelector<boolean>];
160
+ recomputations: () => number;
161
+ resetRecomputations: () => void;
162
+ dependencyRecomputations: () => number;
163
+ resetDependencyRecomputations: () => void;
164
+ } & {
165
+ memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
166
+ argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
167
+ };
143
168
  /**
144
169
  * @alpha
145
170
  */
@@ -1 +1 @@
1
- {"version":3,"file":"catalogSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/catalog/catalogSelectors.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,KAAK,mCAAmC,EACxC,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,MAAM,EAMd,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACH,KAAK,+BAA+B,EAEvC,MAAM,0DAA0D,CAAC;AAElE,OAAO,EACH,KAAK,SAAS,EAIjB,MAAM,yCAAyC,CAAC;AAOjD,OAAO,EAAE,KAAK,iBAAiB,EAAuB,MAAM,aAAa,CAAC;AAE1E,OAAO,EACH,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EACnC,KAAK,uBAAuB,EAC/B,MAAM,mBAAmB,CAAC;AAO3B;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAK1E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,iBAAiB,CAAC,yBAAyB,EAAE,CAK1F,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mCAAmC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAItF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,iBAAiB,CAAC,wBAAwB,EAAE,CAGjF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,CACtC,GAAG,EAAE,MAAM,KACV,iBAAiB,CAAC,wBAAwB,GAAG,SAAS,CAI1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,iBAAiB,CAAC,uBAAuB,CAGpF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,EAAE,iBAAiB,CAAC,OAAO,CAGtE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAClB,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,EAAE,iBAAiB,CAAC,8BAA8B,CAC1B,CAAC;AAE1E;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CACtB,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,mCAAmC,EAAE,iBAAiB,CAAC,6BAA6B,CACzB,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,iBAAiB,CAAC,OAAO,CAGjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kCAAkC,EAAE,iBAAiB,CAAC,mCAAmC,EAAE,CAMlG,CAAC;AAEP;;GAEG;AACH,eAAO,MAAM,sCAAsC,EAAE,iBAAiB,CAClE,MAAM,CAAC,MAAM,EAAE,mCAAmC,CAAC,CASrD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,iBAAiB,CAAC,eAAe,EAAE,CAKtE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,iBAAiB,CAAC,OAAO,CAG/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,iBAAiB,CAAC,YAAY,EAAE,CAE/D,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,iBAAiB,CAAC,OAAO,CAG5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,iBAAiB,CAAC,mBAAmB,EAAE,CAK9E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,OAAO,CAGnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,iBAAiB,CAAC,OAAO,CAS3D,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,iBAAiB,CAAC,qBAAqB,EAAE,CAKlF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iCAAiC,EAAE,iBAAiB,CAAC,0BAA0B,EAAE,CAGxF,CAAC;AAEP;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,sBAAsB,EAAE,CAKpF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,iBAAiB,CAAC,8BAA8B,EAAE,CAQ1F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oCAAoC,EAAE,iBAAiB,CAChE,CAAC,0BAA0B,GAAG,8BAA8B,CAAC,EAAE,CAMlE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,6BAA6B,EAAE,iBAAiB,CAAC,CAAC,iBAAiB,GAAG,qBAAqB,CAAC,EAAE,CAMtG,CAAC;AAEN;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAC9B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,iCAAiC,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAEtF;;GAEG;AACH,eAAO,MAAM,wCAAwC,EAAE,iBAAiB,CAAC,iCAAiC,CAMrG,CAAC;AAEN;;GAEG;AACH,eAAO,MAAM,mCAAmC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAKtF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,EAAE,iBAAiB,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAGxF,CAAC;AAEP;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,EAAE,iBAAiB,CAC3D,SAAS,CAAC,mCAAmC,CAAC,CAMjD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,EAAE,iBAAiB,CACzD,SAAS,CAAC,iBAAiB,GAAG,qBAAqB,CAAC,CAWvD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,iBAAiB,CAAC,SAAS,CAAC,eAAe,CAAC,CAKrF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,EAAE,iBAAiB,CAC/D,SAAS,CAAC,+BAA+B,CAAC,CAe5C,CAAC"}
1
+ {"version":3,"file":"catalogSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/catalog/catalogSelectors.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import { createDisplayFormMap } from "../../../_staging/catalog/displayFormMap.j
8
8
  import { newCatalogAttributeMap, newCatalogDateDatasetMap, newCatalogMeasureMap, } from "../../../_staging/metadata/objRefMap.js";
9
9
  import { createMemoizedSelector } from "../_infra/selectors.js";
10
10
  import { selectBackendCapabilities, selectSupportsAttributeHierarchies, } from "../backendCapabilities/backendCapabilitiesSelectors.js";
11
- import { selectLocale } from "../config/configSelectors.js";
11
+ import { selectEnableDashboardPartialRendering, selectLocale } from "../config/configSelectors.js";
12
12
  const selectSelf = createSelector((state) => state, (state) => state.catalog);
13
13
  /**
14
14
  * @public
@@ -189,6 +189,17 @@ export const selectAdhocDateHierarchies = createSelector([selectDateHierarchyTem
189
189
  export const selectAllCatalogAttributeHierarchies = createSelector([selectCatalogAttributeHierarchies, selectAdhocDateHierarchies], (catalogAttributeHierarchies, adhocDateHierarchies) => {
190
190
  return [...catalogAttributeHierarchies, ...adhocDateHierarchies];
191
191
  });
192
+ /**
193
+ * Hierarchies used for drilling must be readable in their entirety. Do not bridge a missing
194
+ * level, or offer an entry point that will encounter an inaccessible level later.
195
+ */
196
+ export const selectDrillableAttributeHierarchies = createSelector(selectAllCatalogAttributeHierarchies, selectCatalogAttributes, selectCatalogDateAttributes, selectEnableDashboardPartialRendering, (hierarchies, attributes, dateAttributes, partialRendering) => {
197
+ if (!partialRendering) {
198
+ return hierarchies;
199
+ }
200
+ const readableAttributes = [...attributes, ...dateAttributes];
201
+ return hierarchies.filter((hierarchy) => getHierarchyAttributes(hierarchy).every((ref) => readableAttributes.some(({ attribute }) => areObjRefsEqual(attribute.ref, ref))));
202
+ });
192
203
  /**
193
204
  * @alpha
194
205
  */
@@ -198,7 +209,7 @@ export const selectAttributesWithDrillDown = createSelector([selectCatalogAttrib
198
209
  /**
199
210
  * @alpha
200
211
  */
201
- export const selectAttributesWithHierarchyDescendants = createSelector([selectCatalogAttributes, selectCatalogDateAttributes, selectAllCatalogAttributeHierarchies], (attributes = [], dateAttributes = [], attributeHierarchies = []) => {
212
+ export const selectAttributesWithHierarchyDescendants = createSelector([selectCatalogAttributes, selectCatalogDateAttributes, selectDrillableAttributeHierarchies], (attributes = [], dateAttributes = [], attributeHierarchies = []) => {
202
213
  return getAttributesWithHierarchyDescendants(attributes, dateAttributes, attributeHierarchies);
203
214
  });
204
215
  /**
@@ -42,9 +42,16 @@ export declare const selectRestrictedDashboardFilterLocalIdentifiersForTab: (tab
42
42
  */
43
43
  export declare const selectExecutableDashboardFiltersByTab: DashboardSelector<Record<string, FilterContextItem[]>>;
44
44
  /**
45
+ * Dashboard filters safe to execute with: the ones the current user may not read are left out.
46
+ *
45
47
  * @alpha
46
48
  */
47
- export declare const selectDashboardFiltersWithoutCrossFiltering: DashboardSelector<FilterContextItem[]>;
49
+ export declare const selectExecutableDashboardFiltersWithoutCrossFiltering: DashboardSelector<FilterContextItem[]>;
50
+ /**
51
+ * Same as {@link selectExecutableDashboardFiltersWithoutCrossFiltering}, but keeping the filters the
52
+ * current user may not read, which an automation stores like any other.
53
+ */
54
+ export declare const selectAllDashboardFiltersWithoutCrossFiltering: DashboardSelector<FilterContextItem[]>;
48
55
  /**
49
56
  * @alpha
50
57
  */
@@ -65,7 +72,6 @@ export declare const selectAutomationDefaultSelectedFilters: DashboardSelector<F
65
72
  * @alpha
66
73
  */
67
74
  export declare const selectAutomationCommonDateFilterId: DashboardSelector<string | undefined>;
68
- export declare function removeEmptyDashboardFilters(filters?: FilterContextItem[]): FilterContextItem[];
69
75
  export declare const isFilterContextItemHidden: (filter: FilterContextItem, filterConfigurations: {
70
76
  commonDateFilterConfig?: IDashboardDateFilterConfig;
71
77
  dateFilterWithDimensionConfigs: IDashboardDateFilterConfigItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"dashboardFilterSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/filtering/dashboardFilterSelectors.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EAYtC,MAAM,qBAAqB,CAAC;AAuB7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAOxD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAMxF;AASD;;;;GAIG;AACH,eAAO,MAAM,+CAA+C,EAAE,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CACvB,CAAC;AAE7E;;;GAGG;AACH,eAAO,MAAM,wCAAwC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CA0BvF,CAAC;AAEN;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,EAAE,iBAAiB,CAAC,MAAM,CAG1E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAKnF,CAAC;AAYF;;;GAGG;AACH,eAAO,MAAM,mCAAmC,EAAE,iBAAiB,CAAC,OAAO,CAI1E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qDAAqD,EAAE,CAChE,kBAAkB,EAAE,MAAM,KACzB,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CAIzC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qCAAqC,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAQpG,CAAC;AAEN;;GAEG;AACH,eAAO,MAAM,2CAA2C,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAW1F,CAAC;AAEN;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAmB/E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAmB/E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yCAAyC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAwBxF,CAAC;AAEN;;GAEG;AACH,eAAO,MAAM,sCAAsC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAKzF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kCAAkC,EAAE,iBAAiB,CAAC,MAAM,GAAG,SAAS,CAMpF,CAAC;AA0BF,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,iBAAiB,EAAO,uBAW5E;AAmBD,eAAO,MAAM,yBAAyB,WAC1B,iBAAiB,wBACH;IAClB,sBAAsB,CAAC,EAAE,0BAA0B,CAAC;IACpD,8BAA8B,EAAE,8BAA8B,EAAE,CAAC;IACjE,sBAAsB,EAAE,+BAA+B,EAAE,CAAC;CAC7D,KACF,OAyBF,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAC1B,iBAAiB,wBACH;IAClB,sBAAsB,CAAC,EAAE,0BAA0B,CAAC;IACpD,8BAA8B,EAAE,8BAA8B,EAAE,CAAC;IACjE,sBAAsB,EAAE,+BAA+B,EAAE,CAAC;CAC7D,KACF,OAyBF,CAAC;AAMF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,qBAAqB,EAAE,CA2EnF,CAAC"}
1
+ {"version":3,"file":"dashboardFilterSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/filtering/dashboardFilterSelectors.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EAYtC,MAAM,qBAAqB,CAAC;AAuB7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAOxD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAMxF;AASD;;;;GAIG;AACH,eAAO,MAAM,+CAA+C,EAAE,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CACvB,CAAC;AAE7E;;;GAGG;AACH,eAAO,MAAM,wCAAwC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CA0BvF,CAAC;AAEN;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,EAAE,iBAAiB,CAAC,MAAM,CAG1E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAKnF,CAAC;AAYF;;;GAGG;AACH,eAAO,MAAM,mCAAmC,EAAE,iBAAiB,CAAC,OAAO,CAI1E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qDAAqD,EAAE,CAChE,kBAAkB,EAAE,MAAM,KACzB,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CAIzC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qCAAqC,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAQpG,CAAC;AAaN;;;;GAIG;AACH,eAAO,MAAM,qDAAqD,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAKpG,CAAC;AAEN;;;GAGG;AACH,eAAO,MAAM,8CAA8C,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAK7F,CAAC;AAEN;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAmB/E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAmB/E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yCAAyC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAwBxF,CAAC;AAEN;;GAEG;AACH,eAAO,MAAM,sCAAsC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAIzF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kCAAkC,EAAE,iBAAiB,CAAC,MAAM,GAAG,SAAS,CAMpF,CAAC;AAoEF,eAAO,MAAM,yBAAyB,WAC1B,iBAAiB,wBACH;IAClB,sBAAsB,CAAC,EAAE,0BAA0B,CAAC;IACpD,8BAA8B,EAAE,8BAA8B,EAAE,CAAC;IACjE,sBAAsB,EAAE,+BAA+B,EAAE,CAAC;CAC7D,KACF,OAyBF,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAC1B,iBAAiB,wBACH;IAClB,sBAAsB,CAAC,EAAE,0BAA0B,CAAC;IACpD,8BAA8B,EAAE,8BAA8B,EAAE,CAAC;IACjE,sBAAsB,EAAE,+BAA+B,EAAE,CAAC;CAC7D,KACF,OAyBF,CAAC;AAMF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,qBAAqB,EAAE,CAwFnF,CAAC"}
@@ -73,19 +73,27 @@ export const selectExecutableDashboardFiltersByTab = createSelector(selectFilter
73
73
  tabId,
74
74
  filters.filter((filter) => !isDashboardFilterRestricted(filter, unavailableObjects)),
75
75
  ])));
76
- /**
77
- * @alpha
78
- */
79
- export const selectDashboardFiltersWithoutCrossFiltering = createSelector(selectExecutableDashboardFilters, selectCrossFilteringItems, (dashboardFilters, crossFilteringItems) => {
76
+ function withCommonDateFilterAndWithoutCrossFiltering(dashboardFilters, crossFilteringItems) {
80
77
  const dashboardFiltersWithCommonDateFilter = dashboardFilters.some(isDashboardCommonDateFilter)
81
78
  ? dashboardFilters
82
79
  : [commonDateFilter, ...dashboardFilters];
83
80
  return removeCrossFilteringFilters(dashboardFiltersWithCommonDateFilter, crossFilteringItems);
84
- });
81
+ }
85
82
  /**
83
+ * Dashboard filters safe to execute with: the ones the current user may not read are left out.
84
+ *
86
85
  * @alpha
87
86
  */
88
- export const selectDashboardHiddenFilters = createSelector(selectDashboardFiltersWithoutCrossFiltering, selectDateFilterConfigOverrides, selectDateFilterConfigsOverrides, selectAttributeFilterConfigsOverrides, (dashboardFiltersWithoutCrossFiltering, commonDateFilterConfig, dateFilterWithDimensionConfigs, attributeFilterConfigs) => {
87
+ export const selectExecutableDashboardFiltersWithoutCrossFiltering = createSelector(selectExecutableDashboardFilters, selectCrossFilteringItems, withCommonDateFilterAndWithoutCrossFiltering);
88
+ /**
89
+ * Same as {@link selectExecutableDashboardFiltersWithoutCrossFiltering}, but keeping the filters the
90
+ * current user may not read, which an automation stores like any other.
91
+ */
92
+ export const selectAllDashboardFiltersWithoutCrossFiltering = createSelector(selectFilterContextFilters, selectCrossFilteringItems, withCommonDateFilterAndWithoutCrossFiltering);
93
+ /**
94
+ * @alpha
95
+ */
96
+ export const selectDashboardHiddenFilters = createSelector(selectExecutableDashboardFiltersWithoutCrossFiltering, selectDateFilterConfigOverrides, selectDateFilterConfigsOverrides, selectAttributeFilterConfigsOverrides, (dashboardFiltersWithoutCrossFiltering, commonDateFilterConfig, dateFilterWithDimensionConfigs, attributeFilterConfigs) => {
89
97
  return dashboardFiltersWithoutCrossFiltering.filter((filter) => isFilterContextItemHidden(filter, {
90
98
  commonDateFilterConfig,
91
99
  dateFilterWithDimensionConfigs,
@@ -95,7 +103,7 @@ export const selectDashboardHiddenFilters = createSelector(selectDashboardFilter
95
103
  /**
96
104
  * @alpha
97
105
  */
98
- export const selectDashboardLockedFilters = createSelector(selectDashboardFiltersWithoutCrossFiltering, selectDateFilterConfigOverrides, selectDateFilterConfigsOverrides, selectAttributeFilterConfigsOverrides, (dashboardFiltersWithoutCrossFiltering, commonDateFilterConfig, dateFilterWithDimensionConfigs, attributeFilterConfigs) => {
106
+ export const selectDashboardLockedFilters = createSelector(selectExecutableDashboardFiltersWithoutCrossFiltering, selectDateFilterConfigOverrides, selectDateFilterConfigsOverrides, selectAttributeFilterConfigsOverrides, (dashboardFiltersWithoutCrossFiltering, commonDateFilterConfig, dateFilterWithDimensionConfigs, attributeFilterConfigs) => {
99
107
  return dashboardFiltersWithoutCrossFiltering.filter((filter) => isFilterContextItemLocked(filter, {
100
108
  commonDateFilterConfig,
101
109
  dateFilterWithDimensionConfigs,
@@ -105,7 +113,7 @@ export const selectDashboardLockedFilters = createSelector(selectDashboardFilter
105
113
  /**
106
114
  * @alpha
107
115
  */
108
- export const selectAutomationAvailableDashboardFilters = createSelector(selectDashboardFiltersWithoutCrossFiltering, selectDateFilterConfigOverrides, selectDateFilterConfigsOverrides, selectAttributeFilterConfigsOverrides, (dashboardFiltersWithoutCrossFiltering, commonDateFilterConfig, dateFilterWithDimensionConfigs, attributeFilterConfigs) => {
116
+ export const selectAutomationAvailableDashboardFilters = createSelector(selectAllDashboardFiltersWithoutCrossFiltering, selectDateFilterConfigOverrides, selectDateFilterConfigsOverrides, selectAttributeFilterConfigsOverrides, (dashboardFiltersWithoutCrossFiltering, commonDateFilterConfig, dateFilterWithDimensionConfigs, attributeFilterConfigs) => {
109
117
  const withCommonDateFilter = dashboardFiltersWithoutCrossFiltering.some(isDashboardCommonDateFilter)
110
118
  ? dashboardFiltersWithoutCrossFiltering
111
119
  : [commonDateFilter, ...dashboardFiltersWithoutCrossFiltering];
@@ -118,9 +126,7 @@ export const selectAutomationAvailableDashboardFilters = createSelector(selectDa
118
126
  /**
119
127
  * @alpha
120
128
  */
121
- export const selectAutomationDefaultSelectedFilters = createSelector(selectAutomationAvailableDashboardFilters, (availableDashboardFilters) => {
122
- return removeEmptyDashboardFilters(availableDashboardFilters);
123
- });
129
+ export const selectAutomationDefaultSelectedFilters = createSelector(selectAutomationAvailableDashboardFilters, selectUnavailableObjects, automationDefaultSelectedFilters);
124
130
  /**
125
131
  * @alpha
126
132
  */
@@ -143,16 +149,21 @@ const removeCrossFilteringFilters = (filters, crossFilteringItems) => {
143
149
  return true;
144
150
  });
145
151
  };
146
- export function removeEmptyDashboardFilters(filters = []) {
147
- return filters.filter((filter) => {
148
- if (isDashboardAttributeFilterItem(filter)) {
149
- return !isAllValuesDashboardAttributeFilter(filter);
150
- }
151
- if (isDashboardMeasureValueFilter(filter)) {
152
- return !isAllDashboardMeasureValueFilter(filter);
153
- }
154
- return true;
155
- });
152
+ function isEmptyDashboardFilter(filter) {
153
+ if (isDashboardAttributeFilterItem(filter)) {
154
+ return isAllValuesDashboardAttributeFilter(filter);
155
+ }
156
+ if (isDashboardMeasureValueFilter(filter)) {
157
+ return isAllDashboardMeasureValueFilter(filter);
158
+ }
159
+ return false;
160
+ }
161
+ /**
162
+ * Preselects the filters a new automation starts with. A restricted filter is left out, because the
163
+ * user cannot review what it filters by.
164
+ */
165
+ function automationDefaultSelectedFilters(filters, unavailableObjects) {
166
+ return filters.filter((filter) => !isEmptyDashboardFilter(filter) && !isDashboardFilterRestricted(filter, unavailableObjects));
156
167
  }
157
168
  function removeHiddenFilters(filters, filterConfigurations) {
158
169
  return filters.filter((filter) => {
@@ -205,7 +216,7 @@ export const isFilterContextItemLocked = (filter, filterConfigurations) => {
205
216
  *
206
217
  * @alpha
207
218
  */
208
- export const selectAutomationFiltersByTab = createSelector(selectTabs, selectExecutableDashboardFiltersByTab, selectDateFilterConfigOverridesByTab, selectDateFilterConfigsOverridesByTab, selectAttributeFilterConfigsOverridesByTab, selectCrossFilteringItemsByTab, (tabs, filtersByTab, dateFilterConfigByTab, dateFilterConfigsByTab, attributeFilterConfigsByTab, crossFilteringItemsByTab) => {
219
+ export const selectAutomationFiltersByTab = createSelector(selectTabs, selectFiltersByTab, selectUnavailableObjects, selectDateFilterConfigOverridesByTab, selectDateFilterConfigsOverridesByTab, selectAttributeFilterConfigsOverridesByTab, selectCrossFilteringItemsByTab, (tabs, filtersByTab, unavailableObjects, dateFilterConfigByTab, dateFilterConfigsByTab, attributeFilterConfigsByTab, crossFilteringItemsByTab) => {
209
220
  if (!tabs || tabs.length === 0) {
210
221
  return [];
211
222
  }
@@ -232,16 +243,21 @@ export const selectAutomationFiltersByTab = createSelector(selectTabs, selectExe
232
243
  };
233
244
  // Get available filters (hidden removed)
234
245
  const availableFilters = removeHiddenFilters(filtersWithCommonDate, filterConfigurations);
246
+ // A restricted filter cannot gate the user's automation, because they can neither see
247
+ // nor change it.
248
+ const unrestrictedFilters = filtersWithCommonDate.filter((filter) => !isDashboardFilterRestricted(filter, unavailableObjects));
249
+ const selectableFilters = removeHiddenFilters(unrestrictedFilters, filterConfigurations);
235
250
  // Get locked filters
236
- const lockedFilters = filtersWithCommonDate.filter((filter) => isFilterContextItemLocked(filter, filterConfigurations));
251
+ const lockedFilters = unrestrictedFilters.filter((filter) => isFilterContextItemLocked(filter, filterConfigurations));
237
252
  // Get hidden filters
238
- const hiddenFilters = filtersWithCommonDate.filter((filter) => isFilterContextItemHidden(filter, filterConfigurations));
253
+ const hiddenFilters = unrestrictedFilters.filter((filter) => isFilterContextItemHidden(filter, filterConfigurations));
239
254
  // Get default selected filters (noop "All" filters removed — attribute and MVF)
240
- const defaultSelectedFilters = removeEmptyDashboardFilters(availableFilters);
255
+ const defaultSelectedFilters = automationDefaultSelectedFilters(availableFilters, unavailableObjects);
241
256
  return {
242
257
  tabId,
243
258
  tabTitle,
244
259
  availableFilters,
260
+ selectableFilters,
245
261
  defaultSelectedFilters,
246
262
  lockedFilters,
247
263
  hiddenFilters,
@@ -16,6 +16,11 @@ export interface IAutomationFiltersTab {
16
16
  * Automation-available filters for the tab (hidden filters removed).
17
17
  */
18
18
  availableFilters: FilterContextItem[];
19
+ /**
20
+ * Filters the add-filter dropdown may offer: {@link IAutomationFiltersTab.availableFilters} minus
21
+ * the ones the user is forbidden to read.
22
+ */
23
+ selectableFilters: FilterContextItem[];
19
24
  /**
20
25
  * Default selected filters for the tab
21
26
  * (no-op filters removed: "all values" attribute filters and "all" measure value filters).
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/model/store/filtering/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC;;;OAGG;IACH,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;IAC5C;;OAEG;IACH,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC;;OAEG;IACH,aAAa,EAAE,iBAAiB,EAAE,CAAC;CACtC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/model/store/filtering/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC;;;OAGG;IACH,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IACvC;;;OAGG;IACH,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;IAC5C;;OAEG;IACH,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC;;OAEG;IACH,aAAa,EAAE,iBAAiB,EAAE,CAAC;CACtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"layoutSelectors.d.ts","sourceRoot":"","sources":["../../../../../src/model/store/tabs/layout/layoutSelectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layoutSelectors.d.ts","sourceRoot":"","sources":["../../../../../src/model/store/tabs/layout/layoutSelectors.ts"],"names":[],"mappings":"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"}