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

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 (130) 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/sdk-ui-dashboard.d.ts +20 -19
  114. package/package.json +21 -21
  115. package/styles/css/dashboard.css +1 -7
  116. package/styles/css/dashboard.css.map +1 -1
  117. package/styles/css/dashboardSettingsDialog.css +4 -0
  118. package/styles/css/dashboardSettingsDialog.css.map +1 -1
  119. package/styles/css/export.css +0 -6
  120. package/styles/css/export.css.map +1 -1
  121. package/styles/css/main.css +5 -13
  122. package/styles/css/main.css.map +1 -1
  123. package/styles/css/notifications_channels_dialog.css +1 -7
  124. package/styles/css/notifications_channels_dialog.css.map +1 -1
  125. package/styles/scss/dashboardSettingsDialog.scss +5 -0
  126. package/styles/scss/export.scss +0 -9
  127. package/styles/scss/notifications_channels_dialog.scss +1 -10
  128. package/esm/model/types/drillTypes.d.ts +0 -13
  129. package/esm/model/types/drillTypes.d.ts.map +0 -1
  130. package/esm/model/types/drillTypes.js +0 -14
@@ -1,12 +1,20 @@
1
1
  import { type FilterContextItem, type IAutomationVisibleFilter, type IFilter, type IInsight } from "@gooddata/sdk-model";
2
2
  import { type ExtendedDashboardWidget } from "../../../../model/types/layoutTypes.js";
3
3
  import { type IDashboardFilter } from "../../../../types.js";
4
- export declare const getVisibleFiltersByFilters: (selectedFilters: FilterContextItem[] | undefined, visibleFiltersMetadata: IAutomationVisibleFilter[] | undefined, storeFilters?: boolean) => IAutomationVisibleFilter[] | undefined;
4
+ /**
5
+ * The automation's own stored entries, used to keep a restricted filter's name as it was saved.
6
+ * `TStored` is the flat list, or the per-tab record for {@link getVisibleFiltersByFiltersByTab}.
7
+ */
8
+ export interface IRestrictedVisibleFiltersFallback<TStored = IAutomationVisibleFilter[]> {
9
+ storedVisibleFilters: TStored | undefined;
10
+ isFilterRestricted: (filter: FilterContextItem) => boolean;
11
+ }
12
+ export declare const getVisibleFiltersByFilters: (selectedFilters: FilterContextItem[] | undefined, visibleFiltersMetadata: IAutomationVisibleFilter[] | undefined, storeFilters?: boolean, restrictedFallback?: IRestrictedVisibleFiltersFallback) => IAutomationVisibleFilter[] | undefined;
5
13
  /**
6
14
  * Get visible filters metadata structured by tab.
7
15
  * Applies the same logic as getVisibleFiltersByFilters to each tab's filters.
8
16
  */
9
- export declare const getVisibleFiltersByFiltersByTab: (filtersByTab: Record<string, FilterContextItem[]> | undefined, visibleFiltersMetadata: Record<string, IAutomationVisibleFilter[]> | undefined, storeFilters?: boolean) => Record<string, IAutomationVisibleFilter[]> | undefined;
17
+ export declare const getVisibleFiltersByFiltersByTab: (filtersByTab: Record<string, FilterContextItem[]> | undefined, visibleFiltersMetadata: Record<string, IAutomationVisibleFilter[]> | undefined, storeFilters?: boolean, restrictedFallback?: IRestrictedVisibleFiltersFallback<Record<string, IAutomationVisibleFilter[]>>) => Record<string, IAutomationVisibleFilter[]> | undefined;
10
18
  /**
11
19
  * Get final execution filters for the widget alert or scheduled export.
12
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"conversions.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/filters/conversions.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,OAAO,EACZ,KAAK,QAAQ,EAoChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEtF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,eAAO,MAAM,0BAA0B,oBAClB,iBAAiB,EAAE,GAAG,SAAS,0BACxB,wBAAwB,EAAE,GAAG,SAAS,iBAC/C,OAAO,KACvB,wBAAwB,EAAE,GAAG,SA+B/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,+BAA+B,iBAC1B,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,GAAG,SAAS,0BACrC,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAAG,SAAS,iBAC/D,OAAO,KACvB,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAAG,SAmB/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,8BACL,iBAAiB,EAAE,0BACtB,iBAAiB,EAAE,UACnC,uBAAuB,GAAG,SAAS,WAClC,QAAQ,GAAG,SAAS,sBACT,MAAM,GAAG,SAAS,wBACjB,OAAO,kBACb,OAAO,cA6BzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,8BACR,iBAAiB,EAAE,0BACtB,iBAAiB,EAAE,iBAC5B,OAAO,oCAWzB,CAAC;AAEF,wBAAgB,kCAAkC,CAC9C,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,OAAO,GACtB,iBAAiB,GAAG,SAAS,CA8E/B;AAED;;;;;;;GAOG;AACH,wBAAgB,oCAAoC,CAChD,OAAO,EAAE,OAAO,EAAE,EAClB,OAAO,EAAE,QAAQ,GAAG,SAAS,GAC9B,OAAO,EAAE,CAiDX;AAyBD,8GAA8G;AAC9G,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAW9D;AAED,mEAAmE;AACnE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAWxE;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CA0BhE"}
1
+ {"version":3,"file":"conversions.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/filters/conversions.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,OAAO,EACZ,KAAK,QAAQ,EAoChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEtF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,iCAAiC,CAAC,OAAO,GAAG,wBAAwB,EAAE;IACnF,oBAAoB,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,kBAAkB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC;CAC9D;AASD,eAAO,MAAM,0BAA0B,oBAClB,iBAAiB,EAAE,GAAG,SAAS,0BACxB,wBAAwB,EAAE,GAAG,SAAS,iBAC/C,OAAO,uBACD,iCAAiC,KACvD,wBAAwB,EAAE,GAAG,SAmC/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,+BAA+B,iBAC1B,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,GAAG,SAAS,0BACrC,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAAG,SAAS,iBAC/D,OAAO,uBACD,iCAAiC,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC,KACnG,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAAG,SAuB/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,8BACL,iBAAiB,EAAE,0BACtB,iBAAiB,EAAE,UACnC,uBAAuB,GAAG,SAAS,WAClC,QAAQ,GAAG,SAAS,sBACT,MAAM,GAAG,SAAS,wBACjB,OAAO,kBACb,OAAO,cA6BzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,8BACR,iBAAiB,EAAE,0BACtB,iBAAiB,EAAE,iBAC5B,OAAO,oCAWzB,CAAC;AAEF,wBAAgB,kCAAkC,CAC9C,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,OAAO,GACtB,iBAAiB,GAAG,SAAS,CA8E/B;AAED;;;;;;;GAOG;AACH,wBAAgB,oCAAoC,CAChD,OAAO,EAAE,OAAO,EAAE,EAClB,OAAO,EAAE,QAAQ,GAAG,SAAS,GAC9B,OAAO,EAAE,CAiDX;AAyBD,8GAA8G;AAC9G,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAW9D;AAED,mEAAmE;AACnE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAWxE;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CA0BhE"}
@@ -3,7 +3,10 @@ import { compact } from "lodash-es";
3
3
  import { NotSupported } from "@gooddata/sdk-backend-spi";
4
4
  import { attributeLocalId, dashboardFilterLocalIdentifier, filterAttributeElements, filterContextItemsToDashboardFiltersByWidget, filterLocalIdentifier, filterObjRef, hasMeasureValueFilterConditions, insightAttributes, isAbsoluteDateFilter, isAllDashboardMeasureValueFilter, isAllTimeDateFilter, isAllValuesAttributeFilter, isAllValuesDashboardAttributeFilter, isArbitraryAttributeFilter, isAttributeFilterWithSelection, isDashboardDateFilter, isDashboardMeasureValueFilter, isDateFilter, isInsightWidget, isLocalIdRef, isMatchAttributeFilter, isMeasureValueFilter, isNegativeAttributeFilter, isNoopAllTimeDashboardDateFilter, isObjRef, isRankingFilter, isRelativeBoundedDateFilter, isRelativeDateFilter, measureValueFilterConditions, measureValueFilterMeasure, mergeFilters, newAbsoluteDashboardDateFilter, newAllTimeDashboardDateFilter, newRelativeDashboardDateFilter, } from "@gooddata/sdk-model";
5
5
  import { removeIgnoredWidgetFilters } from "../../../../model/utils/widgetFilters.js";
6
- export const getVisibleFiltersByFilters = (selectedFilters, visibleFiltersMetadata, storeFilters) => {
6
+ function findVisibleFilter(localIdentifier, visibleFilters) {
7
+ return (visibleFilters ?? []).find((visibleFilter) => visibleFilter.localIdentifier === localIdentifier);
8
+ }
9
+ export const getVisibleFiltersByFilters = (selectedFilters, visibleFiltersMetadata, storeFilters, restrictedFallback) => {
7
10
  if (!storeFilters) {
8
11
  return undefined;
9
12
  }
@@ -13,9 +16,12 @@ export const getVisibleFiltersByFilters = (selectedFilters, visibleFiltersMetada
13
16
  .filter((filter) => !isAllValuesDashboardAttributeFilter(filter) && !isAllDashboardMeasureValueFilter(filter))
14
17
  .map((selectedFilter) => {
15
18
  const selectedLocalIdentifier = dashboardFilterLocalIdentifier(selectedFilter);
16
- const targetFilter = (visibleFiltersMetadata ?? []).find((visibleFilter) => {
17
- return selectedLocalIdentifier === visibleFilter.localIdentifier;
18
- });
19
+ // A restricted date or measure value filter still resolves a title from the dashboard, so
20
+ // the stored entry has to win or the saved name is replaced by that derived one.
21
+ const storedFilter = restrictedFallback?.isFilterRestricted(selectedFilter)
22
+ ? findVisibleFilter(selectedLocalIdentifier, restrictedFallback.storedVisibleFilters)
23
+ : undefined;
24
+ const targetFilter = storedFilter ?? findVisibleFilter(selectedLocalIdentifier, visibleFiltersMetadata);
19
25
  if (targetFilter && isDashboardDateFilter(selectedFilter)) {
20
26
  return {
21
27
  ...targetFilter,
@@ -32,12 +38,15 @@ export const getVisibleFiltersByFilters = (selectedFilters, visibleFiltersMetada
32
38
  * Get visible filters metadata structured by tab.
33
39
  * Applies the same logic as getVisibleFiltersByFilters to each tab's filters.
34
40
  */
35
- export const getVisibleFiltersByFiltersByTab = (filtersByTab, visibleFiltersMetadata, storeFilters) => {
41
+ export const getVisibleFiltersByFiltersByTab = (filtersByTab, visibleFiltersMetadata, storeFilters, restrictedFallback) => {
36
42
  if (!storeFilters || !filtersByTab) {
37
43
  return undefined;
38
44
  }
39
45
  return Object.entries(filtersByTab).reduce((acc, [tabId, tabFilters]) => {
40
- const visibleFilters = getVisibleFiltersByFilters(tabFilters, visibleFiltersMetadata?.[tabId], true);
46
+ const visibleFilters = getVisibleFiltersByFilters(tabFilters, visibleFiltersMetadata?.[tabId], true, restrictedFallback && {
47
+ storedVisibleFilters: restrictedFallback.storedVisibleFilters?.[tabId],
48
+ isFilterRestricted: restrictedFallback.isFilterRestricted,
49
+ });
41
50
  if (visibleFilters && visibleFilters.length > 0) {
42
51
  acc[tabId] = visibleFilters;
43
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultDashboardSettingsDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoD,MAAM,OAAO,CAAC;AA2C5F,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAMhE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,SAAS,EACT,OAAO,EACP,QAAQ,GACX,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CAgSrD"}
1
+ {"version":3,"file":"DefaultDashboardSettingsDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoD,MAAM,OAAO,CAAC;AA2C5F,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAGhE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,SAAS,EACT,OAAO,EACP,QAAQ,GACX,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CAiRrD"}
@@ -11,7 +11,6 @@ import { selectDateFormat, selectEnableDashboardPersistentFiltersAcrossTabs, sel
11
11
  import { selectCrossFilteringEnabledAndSupported } from "../../model/store/topBar/topBarSelectors.js";
12
12
  import { TimezoneOption } from "./TimezoneOption.js";
13
13
  import { useDialogData } from "./useDialogData.js";
14
- const DASHBOARD_TIMEZONE_DOC_LINK = "https://www.gooddata.ai/docs/cloud/customize-appearance/manage-timezones/#change-the-time-zone-on-a-dashboard";
15
14
  /**
16
15
  * @alpha
17
16
  */
@@ -105,9 +104,9 @@ export function DefaultDashboardSettingsDialog({ isVisible, onApply, onCancel /*
105
104
  strong: (chunks) => _jsx("strong", { children: chunks }),
106
105
  } })) })] }), settings.enableTimezoneChange ? (_jsxs("div", { className: "gd-dashboard-settings-dialog-section s-dashboard-settings-timezone", children: [_jsx(DialogListHeader, { title: intl.formatMessage({ id: "settingsDashboardDialog.section.timezone" }), className: "gd-dashboard-settings-filters" }), _jsx(TimezoneOption, { label: intl.formatMessage({
107
106
  id: "settingsDashboardDialog.section.timezone.defaultTimezone",
108
- }), tooltip: _jsx(FormattedMessage, { id: "settingsDashboardDialog.section.timezone.defaultTimezone.tooltip", values: {
109
- a: (chunks) => isWhiteLabeled ? null : (_jsx("a", { href: DASHBOARD_TIMEZONE_DOC_LINK, rel: "noopener noreferrer", target: "_blank", className: "s-timezone-docs-link", children: chunks })),
110
- } }), timezoneConfig: currentData.timezoneConfig, onChange: (timezoneId) => {
107
+ }), tooltip: intl.formatMessage({
108
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone.tooltip",
109
+ }), timezoneConfig: currentData.timezoneConfig, onChange: (timezoneId) => {
111
110
  setCurrentData({
112
111
  ...currentData,
113
112
  timezoneConfig: normalizeDashboardTimezoneConfig({
@@ -1 +1 @@
1
- {"version":3,"file":"TimezoneOption.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/TimezoneOption.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAIhD,OAAO,EAAoB,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAQtF,UAAU,oBAAoB;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,cAAc,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACrD,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACtD;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAoEhG"}
1
+ {"version":3,"file":"TimezoneOption.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/TimezoneOption.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAIhD,OAAO,EAAoB,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAetF,UAAU,oBAAoB;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,cAAc,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACrD,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACtD;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAmGhG"}
@@ -1,11 +1,15 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
3
  import { useMemo } from "react";
4
4
  import { useIntl } from "react-intl";
5
5
  import { BROWSER_DETECTED } from "@gooddata/sdk-model";
6
- import { TimezoneSelect, UiTooltip, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
6
+ import { TimezoneSelect, UiLink, UiTooltip, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
7
+ import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
8
+ import { selectIsWhiteLabeled } from "../../model/store/config/configSelectors.js";
9
+ const DASHBOARD_TIMEZONE_DOC_LINK = "https://www.gooddata.ai/docs/cloud/customize-appearance/manage-timezones/#change-the-time-zone-on-a-dashboard";
7
10
  export function TimezoneOption({ label, tooltip, timezoneConfig, onChange }) {
8
11
  const intl = useIntl();
12
+ const isWhiteLabeled = useDashboardSelector(selectIsWhiteLabeled);
9
13
  const helpTooltipId = useIdPrefixed("timezone-help-tooltip");
10
14
  const specialItems = useMemo(() => {
11
15
  const workspaceItemLabel = intl.formatMessage({
@@ -14,6 +18,10 @@ export function TimezoneOption({ label, tooltip, timezoneConfig, onChange }) {
14
18
  const workspaceItemTooltip = intl.formatMessage({
15
19
  id: "settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip",
16
20
  });
21
+ // the docs link goes on its own line; it is left out of the plain-text tooltip read by screen readers
22
+ const workspaceItemTooltipContent = isWhiteLabeled ? undefined : (_jsxs(_Fragment, { children: [workspaceItemTooltip, _jsx("div", { className: "gd-timezone-option__tooltip-link", children: _jsx(UiLink, { variant: "inverse", href: DASHBOARD_TIMEZONE_DOC_LINK, rel: "noopener noreferrer", target: "_blank", dataTestId: "timezone-docs-link", children: intl.formatMessage({
23
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip.learnMore",
24
+ }) }) })] }));
17
25
  const browserItemLabel = intl.formatMessage({
18
26
  id: "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser",
19
27
  });
@@ -21,13 +29,18 @@ export function TimezoneOption({ label, tooltip, timezoneConfig, onChange }) {
21
29
  id: "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser.tooltip",
22
30
  });
23
31
  return [
24
- { id: undefined, label: workspaceItemLabel, tooltip: workspaceItemTooltip },
32
+ {
33
+ id: undefined,
34
+ label: workspaceItemLabel,
35
+ tooltip: workspaceItemTooltip,
36
+ tooltipContent: workspaceItemTooltipContent,
37
+ },
25
38
  { id: BROWSER_DETECTED, label: browserItemLabel, tooltip: browserItemTooltip },
26
39
  ];
27
- }, [intl]);
28
- return (_jsxs("div", { className: "configuration-category-item", children: [_jsx("span", { className: "input-label-text", children: label }), _jsx(UiTooltip, { id: helpTooltipId, inlineAnchor: true, anchor: _jsx("span", { role: "img", tabIndex: 0, "aria-label": intl.formatMessage({
29
- id: "settingsDashboardDialog.section.timezone.defaultTimezone.help",
30
- }), "aria-describedby": helpTooltipId, className: "gd-icon-circle-question gd-filter-configuration__help-icon configuration-category-item-tooltip-icon" }), content: _jsx("div", { className: "gd-filter-configuration__help-tooltip", children: tooltip }), triggerBy: ["hover", "focus"], arrowPlacement: "left", optimalPlacement: true, width: 200 }), _jsx(TimezoneSelect, { value: timezoneConfig?.timezoneId, showTooltip: true, onChange: onChange, specialItems: specialItems, searchPlaceholder: intl.formatMessage({
40
+ }, [intl, isWhiteLabeled]);
41
+ return (_jsxs("div", { className: "configuration-category-item", children: [_jsxs("span", { className: "input-label-text", children: [label, _jsx("span", { className: "configuration-category-item-tooltip-icon", children: _jsx(UiTooltip, { id: helpTooltipId, component: "span", inlineAnchor: true, anchor: _jsx("span", { role: "img", tabIndex: 0, "aria-label": intl.formatMessage({
42
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone.help",
43
+ }), "aria-describedby": helpTooltipId, className: "gd-icon-circle-question gd-filter-configuration__help-icon" }), content: _jsx("div", { className: "gd-filter-configuration__help-tooltip", children: tooltip }), triggerBy: ["hover", "focus"], arrowPlacement: "left", optimalPlacement: true, width: 200 }) })] }), _jsx(TimezoneSelect, { value: timezoneConfig?.timezoneId, showTooltip: true, onChange: onChange, specialItems: specialItems, searchPlaceholder: intl.formatMessage({
31
44
  id: "settingsDashboardDialog.section.timezone.select.searchPlaceholder",
32
45
  }), ariaLabel: intl.formatMessage({
33
46
  id: "settingsDashboardDialog.section.timezone.defaultTimezone",
@@ -1 +1 @@
1
- {"version":3,"file":"ExportCsvDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dialogs/ExportCsvDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAW3F,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAClD;AAED,eAAO,MAAM,eAAe,+DAAyD,qBAAqB,6CA2CxG,CAAC"}
1
+ {"version":3,"file":"ExportCsvDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dialogs/ExportCsvDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAY3F,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAClD;AAED,eAAO,MAAM,eAAe,+DAAyD,qBAAqB,6CA8CxG,CAAC"}
@@ -11,6 +11,7 @@ const messages = defineMessages({
11
11
  cancel: { id: "cancel" },
12
12
  submit: { id: "dialogs.export.submit" },
13
13
  delimiterLabel: { id: "dialogs.export.csv.delimiter", defaultMessage: "CSV delimiter" },
14
+ submitDisabledTooltip: { id: "dialogs.export.csv.submit.disabledTooltip" },
14
15
  });
15
16
  export const ExportCsvDialog = memo(function ExportCsvDialog({ onCancel, onSubmit }) {
16
17
  const intl = useIntl();
@@ -22,5 +23,5 @@ export const ExportCsvDialog = memo(function ExportCsvDialog({ onCancel, onSubmi
22
23
  const handleSubmit = () => {
23
24
  onSubmit({ delimiter: selectedDelimiter });
24
25
  };
25
- return (_jsx(Overlay, { alignPoints: alignPoints, isModal: true, positionType: "fixed", children: _jsx(ValidationContextStore, { value: validationContextValue, children: _jsx(ConfirmDialogBase, { className: "gd-csv-export-dialog s-gd-csv-export-dialog", displayCloseButton: true, isPositive: true, isSubmitDisabled: isSubmitDisabled, headline: intl.formatMessage(messages.headline), cancelButtonText: intl.formatMessage(messages.cancel), submitButtonText: intl.formatMessage(messages.submit), onCancel: onCancel, onSubmit: handleSubmit, autofocusOnOpen: true, children: _jsx("div", { className: "gd-csv-export-dialog-item", children: _jsx(CsvDelimiterPicker, { value: value, onChange: setValue, validationError: validationError, label: intl.formatMessage(messages.delimiterLabel), onEnterKeyPress: isSubmitDisabled ? undefined : handleSubmit }) }) }) }) }));
26
+ return (_jsx(Overlay, { alignPoints: alignPoints, isModal: true, positionType: "fixed", children: _jsx(ValidationContextStore, { value: validationContextValue, children: _jsx(ConfirmDialogBase, { className: "gd-csv-export-dialog s-gd-csv-export-dialog", displayCloseButton: true, isPositive: true, isSubmitDisabled: isSubmitDisabled, submitButtonTooltipText: isSubmitDisabled ? intl.formatMessage(messages.submitDisabledTooltip) : undefined, headline: intl.formatMessage(messages.headline), cancelButtonText: intl.formatMessage(messages.cancel), submitButtonText: intl.formatMessage(messages.submit), onCancel: onCancel, onSubmit: handleSubmit, autofocusOnOpen: true, children: _jsx("div", { className: "gd-csv-export-dialog-item", children: _jsx(CsvDelimiterPicker, { value: value, onChange: setValue, validationError: validationError, label: intl.formatMessage(messages.delimiterLabel), onEnterKeyPress: isSubmitDisabled ? undefined : handleSubmit }) }) }) }) }));
26
27
  });
@@ -1,6 +1,6 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { FormattedMessage, defineMessages } from "react-intl";
3
- import { DRILL_TO_URL_PLACEHOLDER } from "../../../../../model/types/drillTypes.js";
3
+ import { DRILL_TO_URL_PLACEHOLDER } from "@gooddata/sdk-model/internal";
4
4
  import { DropdownSectionHeader } from "../DropdownSectionHeader.js";
5
5
  import { ClientIdParameterDetail } from "../ParameterDetails/ClientIdParameterDetail.js";
6
6
  import { DashboardIdParameterDetail } from "../ParameterDetails/DashboardIdParameterDetail.js";
@@ -12,7 +12,8 @@ export interface IDrillSelectDropdownProps extends IDrillSelectContext {
12
12
  onSelect: (item: DashboardDrillDefinition, context: unknown) => void;
13
13
  }
14
14
  export declare function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCloseReturnFocus, onSelect, drillDefinitions, drillEvent, }: IDrillSelectDropdownProps): import("react/jsx-runtime").JSX.Element | null;
15
- export declare const createDrillSelectItems: ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities, }: {
15
+ export declare const createDrillSelectItems: ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities, isDrillRestricted, }: {
16
+ isDrillRestricted: (drill: DashboardDrillDefinition) => boolean;
16
17
  drillDefinitions: DashboardDrillDefinition[];
17
18
  drillEvent: IDrillEvent;
18
19
  insights: ObjRefMap<IInsight>;
@@ -1 +1 @@
1
- {"version":3,"file":"DrillSelectDropdown.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/DrillSelectDropdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,YAAY,CAAC;AAGrD,OAAO,EACH,KAAK,mCAAmC,EACxC,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,OAAO,EAcf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAIxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,OAAO,EAAE,KAAK,wBAAwB,EAAyB,MAAM,mBAAmB,CAAC;AAazF,OAAO,EAAa,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IAClE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,mBAAmB,CAAC,EAChC,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,EAChB,UAAU,GACb,EAAE,yBAAyB,kDA0K3B;AAqFD,eAAO,MAAM,sBAAsB,+IAUhC;IACC,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,UAAU,EAAE,WAAW,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;IAC3E,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACvC,KAAG,gBAAgB,EAyInB,CAAC"}
1
+ {"version":3,"file":"DrillSelectDropdown.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/DrillSelectDropdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,YAAY,CAAC;AAGrD,OAAO,EACH,KAAK,mCAAmC,EACxC,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,OAAO,EAcf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAIxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,OAAO,EAAE,KAAK,wBAAwB,EAAyB,MAAM,mBAAmB,CAAC;AAazF,OAAO,EAAa,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IAClE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,mBAAmB,CAAC,EAChC,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,EAChB,UAAU,GACb,EAAE,yBAAyB,kDA6K3B;AAqFD,eAAO,MAAM,sBAAsB,kKAWhC;IACC,iBAAiB,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC;IAChE,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,UAAU,EAAE,WAAW,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;IAC3E,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACvC,KAAG,gBAAgB,EAuJnB,CAAC"}
@@ -16,6 +16,7 @@ import { selectEnableSecondGranularities } from "../../../model/store/config/con
16
16
  import { selectInsightsMap } from "../../../model/store/insights/insightsSelectors.js";
17
17
  import { selectDashboardTitle } from "../../../model/store/meta/metaSelectors.js";
18
18
  import { selectWidgetByRef } from "../../../model/store/tabs/layout/layoutSelectors.js";
19
+ import { selectIsDrillRestricted } from "../../../model/store/widgetDrills/drillRestrictionSelectors.js";
19
20
  import { isDrillDownDefinition } from "../../../types.js";
20
21
  import { useDrillSelectDropdownMenuItems } from "../hooks/useDrillSelectDropdownMenuItems.js";
21
22
  import { isDrillToUrl } from "../types.js";
@@ -27,6 +28,7 @@ import { DrillSelectDropdownMenuItem } from "./DrillSelectDropdownMenuItem.js";
27
28
  import { DrillType } from "./types.js";
28
29
  export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCloseReturnFocus, onSelect, drillDefinitions, drillEvent, }) {
29
30
  const intl = useIntl();
31
+ const isDrillRestricted = useDashboardSelector(selectIsDrillRestricted);
30
32
  const dashboardList = useDashboardSelector(selectAccessibleDashboards);
31
33
  const dashboardTitle = useDashboardSelector(selectDashboardTitle);
32
34
  const insights = useDashboardSelector(selectInsightsMap);
@@ -73,6 +75,7 @@ export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCl
73
75
  const drillSelectItems = useMemo(() => createDrillSelectItems({
74
76
  drillDefinitions: deduplicateDrillIntoUrlItems(drillDefinitions),
75
77
  drillEvent,
78
+ isDrillRestricted,
76
79
  insights,
77
80
  dashboardList,
78
81
  dashboardTitle,
@@ -82,6 +85,7 @@ export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCl
82
85
  enableSecondGranularities,
83
86
  }), [
84
87
  drillDefinitions,
88
+ isDrillRestricted,
85
89
  drillEvent,
86
90
  insights,
87
91
  dashboardList,
@@ -212,10 +216,24 @@ function calculateAlignPoints(anchorClass, drillEvent) {
212
216
  },
213
217
  ];
214
218
  }
215
- export const createDrillSelectItems = ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities = false, }) => {
219
+ export const createDrillSelectItems = ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities = false, isDrillRestricted, }) => {
216
220
  const totalDrillToUrls = getTotalDrillToUrlCount(drillDefinitions);
217
221
  return drillDefinitions.flatMap((drillDefinition) => {
218
222
  invariant(!isDrillToLegacyDashboard(drillDefinition), "Drill to pixel perfect dashboards from insight is not supported.");
223
+ if (isDrillRestricted(drillDefinition)) {
224
+ return {
225
+ type: isDrillToInsight(drillDefinition)
226
+ ? DrillType.DRILL_TO_INSIGHT
227
+ : isDrillToDashboard(drillDefinition)
228
+ ? DrillType.DRILL_TO_DASHBOARD
229
+ : DrillType.DRILL_TO_URL,
230
+ name: intl.formatMessage({ id: "drill_modal_picker.restricted" }),
231
+ drillDefinition,
232
+ id: stringify(drillDefinition) || "undefined",
233
+ isRestricted: true,
234
+ isDisabled: true,
235
+ };
236
+ }
219
237
  if (isDrillDownDefinition(drillDefinition)) {
220
238
  const { title: drillTitle } = drillDefinition;
221
239
  const drillTargetIdentifier = isIdentifierRef(drillDefinition.target)
@@ -1 +1 @@
1
- {"version":3,"file":"WithDrillSelect.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/WithDrillSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAA0C,MAAM,OAAO,CAAC;AAKlF,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,MAAM,EAOd,MAAM,qBAAqB,CAAC;AAqB7B,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EACrB,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,QAAQ,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,4BAA4B,CAAC,EAAE,4BAA4B,CAAC;IAC5D,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,aAAa,CAAA;KAAE,KAAK,YAAY,CAAC;CACjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,OAAO,EACP,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,OAAO,GACV,EAAE,qBAAqB,GAAG,YAAY,CA2KtC"}
1
+ {"version":3,"file":"WithDrillSelect.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/WithDrillSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAA0C,MAAM,OAAO,CAAC;AAKlF,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,MAAM,EAOd,MAAM,qBAAqB,CAAC;AAsB7B,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EACrB,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,QAAQ,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,4BAA4B,CAAC,EAAE,4BAA4B,CAAC;IAC5D,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,aAAa,CAAA;KAAE,KAAK,YAAY,CAAC;CACjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,OAAO,EACP,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,OAAO,GACV,EAAE,qBAAqB,GAAG,YAAY,CAmLtC"}
@@ -9,8 +9,9 @@ import { OverlayController, OverlayControllerProvider } from "@gooddata/sdk-ui-k
9
9
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
10
10
  import { selectBackendCapabilities } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
11
11
  import { selectDisableDefaultDrills, selectLocale } from "../../../model/store/config/configSelectors.js";
12
- import { selectDashboardFiltersWithoutCrossFiltering } from "../../../model/store/filtering/dashboardFilterSelectors.js";
12
+ import { selectExecutableDashboardFiltersWithoutCrossFiltering } from "../../../model/store/filtering/dashboardFilterSelectors.js";
13
13
  import { selectWidgetDrills } from "../../../model/store/tabs/layout/layoutSelectors.js";
14
+ import { selectIsDrillRestricted } from "../../../model/store/widgetDrills/drillRestrictionSelectors.js";
14
15
  import { isDrillDownDefinition, } from "../../../types.js";
15
16
  import { DASHBOARD_DRILL_MENU_Z_INDEX } from "../../constants/zIndex.js";
16
17
  import { IntlWrapper } from "../../localization/IntlWrapper.js";
@@ -26,7 +27,8 @@ export function WithDrillSelect({ widgetRef, children, insight, returnFocusToIns
26
27
  const [isOpen, setIsOpen] = useState(true);
27
28
  const locale = useDashboardSelector(selectLocale);
28
29
  const disableDefaultDrills = useDashboardSelector(selectDisableDefaultDrills); // TODO: maybe remove?
29
- const filters = useDashboardSelector(selectDashboardFiltersWithoutCrossFiltering);
30
+ const filters = useDashboardSelector(selectExecutableDashboardFiltersWithoutCrossFiltering);
31
+ const isDrillRestricted = useDashboardSelector(selectIsDrillRestricted);
30
32
  const configuredDrills = useDashboardSelector(selectWidgetDrills(widgetRef));
31
33
  const { supportsAttributeHierarchies } = useDashboardSelector(selectBackendCapabilities);
32
34
  const drills = useDrills({
@@ -41,7 +43,9 @@ export function WithDrillSelect({ widgetRef, children, insight, returnFocusToIns
41
43
  const validDrillDefinitions = supportsAttributeHierarchies
42
44
  ? drillDefinitions
43
45
  : filterDrillFromAttributeByPriority(drillDefinitions, configuredDrills);
44
- const type = getDrillDefinitionType(validDrillDefinitions);
46
+ const type = validDrillDefinitions.some(isDrillRestricted)
47
+ ? "multiple"
48
+ : getDrillDefinitionType(validDrillDefinitions);
45
49
  if (type === "single") {
46
50
  onSelect(validDrillDefinitions[0], undefined, drillEvent, s.correlationId, context);
47
51
  }
@@ -74,10 +78,14 @@ export function WithDrillSelect({ widgetRef, children, insight, returnFocusToIns
74
78
  drills,
75
79
  dropdownProps: { correlationId: dropdownProps?.correlationId, drillEvent: dropdownProps?.drillEvent },
76
80
  insight,
81
+ isDrillRestricted,
77
82
  handleClose,
78
83
  });
79
84
  const onSelect = useCallback((drillDefinition, context, drillEvent, correlationId, drillContext) => {
80
- const { drills, dropdownProps, insight, handleClose } = onSelectDepsRef.current;
85
+ const { drills, dropdownProps, insight, handleClose, isDrillRestricted } = onSelectDepsRef.current;
86
+ if (isDrillRestricted(drillDefinition)) {
87
+ return;
88
+ }
81
89
  const effectiveDrillEvent = drillEvent ?? dropdownProps?.drillEvent;
82
90
  const effectiveCorrelationId = correlationId ?? dropdownProps?.correlationId;
83
91
  const effectiveInsight = drillContext?.insight ?? insight;
@@ -19,6 +19,7 @@ export interface IDrillSelectItem {
19
19
  attributeValue?: string | null;
20
20
  context?: unknown;
21
21
  isDisabled?: boolean;
22
+ isRestricted?: boolean;
22
23
  tooltipText?: string;
23
24
  }
24
25
  export interface IDrillSelectContext {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,8BAA8B,EAAE,KAAK,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAE1G,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC5B,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,oBAAY,SAAS;IACjB,kBAAkB,uBAAuB;IACzC,gBAAgB,qBAAqB;IACrC,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,mBAAmB,wBAAwB;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,wBAAwB,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,UAAU,EAAE,oBAAoB,CAAC;IACjC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,yBAAyB,GAAG,8BAA8B,GAAG,4BAA4B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,8BAA8B,EAAE,KAAK,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAE1G,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC5B,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,oBAAY,SAAS;IACjB,kBAAkB,uBAAuB;IACzC,gBAAgB,qBAAqB;IACrC,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,mBAAmB,wBAAwB;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,wBAAwB,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,UAAU,EAAE,oBAAoB,CAAC;IACjC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,yBAAyB,GAAG,8BAA8B,GAAG,4BAA4B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDrillSelectDropdownMenuItems.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/hooks/useDrillSelectDropdownMenuItems.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,EAAyB,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAuB3E,MAAM,WAAW,gCAAgC;IAC7C,WAAW,EAAE;QACT,IAAI,EAAE,SAAS,CAAC;QAChB,eAAe,EAAE,wBAAwB,CAAC;QAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;KACxB,CAAC;CACL;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAEjF,eAAO,MAAM,+BAA+B,4GAOzC;IACC,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;IACxC,sBAAsB,EAAE,gBAAgB,EAAE,CAAC;IAC3C,eAAe,EAAE,gBAAgB,EAAE,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE,KAAG,oBAAoB,EAmFvB,CAAC"}
1
+ {"version":3,"file":"useDrillSelectDropdownMenuItems.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/hooks/useDrillSelectDropdownMenuItems.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,EAAyB,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAuB3E,MAAM,WAAW,gCAAgC;IAC7C,WAAW,EAAE;QACT,IAAI,EAAE,SAAS,CAAC;QAChB,eAAe,EAAE,wBAAwB,CAAC;QAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;KACxB,CAAC;CACL;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAEjF,eAAO,MAAM,+BAA+B,4GAOzC;IACC,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;IACxC,sBAAsB,EAAE,gBAAgB,EAAE,CAAC;IAC3C,eAAe,EAAE,gBAAgB,EAAE,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE,KAAG,oBAAoB,EA2FvB,CAAC"}
@@ -35,7 +35,7 @@ export const useDrillSelectDropdownMenuItems = ({ drillDownItems, drillItems, cr
35
35
  type: "interactive",
36
36
  id: `${groupId}-${index}`,
37
37
  stringTitle: getMenuItemStringTitle(item),
38
- iconLeft: _jsx(UiIcon, { type: DRILL_ICON_NAME[item.type], size: 16, color: "complementary-5" }),
38
+ iconLeft: (_jsx(UiIcon, { type: item.isRestricted ? "lock" : DRILL_ICON_NAME[item.type], size: 16, color: "complementary-5" })),
39
39
  isDisabled: item.isDisabled,
40
40
  tooltip: item.tooltipText,
41
41
  ariaAttributes: {
@@ -47,7 +47,9 @@ export const useDrillSelectDropdownMenuItems = ({ drillDownItems, drillItems, cr
47
47
  type: item.type,
48
48
  drillDefinition: item.drillDefinition,
49
49
  onSelect: () => {
50
- onSelect(item.drillDefinition, item.context);
50
+ if (!item.isDisabled) {
51
+ onSelect(item.drillDefinition, item.context);
52
+ }
51
53
  },
52
54
  },
53
55
  })),
@@ -1 +1 @@
1
- {"version":3,"file":"InsightNotSavedDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/insightNotSavedDialog/InsightNotSavedDialog.tsx"],"names":[],"mappings":"AAaA;;GAEG;AACH,wBAAgB,qBAAqB,mDAuDpC"}
1
+ {"version":3,"file":"InsightNotSavedDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/insightNotSavedDialog/InsightNotSavedDialog.tsx"],"names":[],"mappings":"AAeA;;GAEG;AACH,wBAAgB,qBAAqB,mDAwDpC"}
@@ -4,9 +4,8 @@ import { useCallback, useState } from "react";
4
4
  import { useIntl } from "react-intl";
5
5
  import { ConfirmDialog, Typography, UiButton, UiIcon } from "@gooddata/sdk-ui-kit";
6
6
  import { useDashboardDispatch, useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
7
- import { selectDraftInsightsUsedOnDashboard } from "../../model/store/insights/insightsSelectors.js";
8
7
  import { uiActions } from "../../model/store/ui/index.js";
9
- import { selectIsInsightNotSavedDialogOpen } from "../../model/store/ui/uiSelectors.js";
8
+ import { selectInsightNotSavedDialogDraftInsightsToPersist, selectIsInsightNotSavedDialogOpen, } from "../../model/store/ui/uiSelectors.js";
10
9
  /**
11
10
  * @internal
12
11
  */
@@ -19,11 +18,11 @@ export function InsightNotSavedDialog() {
19
18
  dispatch(uiActions.confirmInsightNotSavedDialogSubmit());
20
19
  }, [dispatch]);
21
20
  const closeDialog = useCallback(() => dispatch(uiActions.closeInsightNotSavedDialog()), [dispatch]);
22
- const unsavedInsights = useDashboardSelector(selectDraftInsightsUsedOnDashboard);
21
+ const unsavedInsights = useDashboardSelector(selectInsightNotSavedDialogDraftInsightsToPersist);
23
22
  if (!isInsightNotSavedDialogOpen) {
24
23
  return null;
25
24
  }
26
- return (_jsx(ConfirmDialog, { isPositive: true, dataTestId: "s-insight-not-saved-dialog", headline: intl.formatMessage({ id: "insightNotSavedDialog.headline" }), submitButtonText: intl.formatMessage({ id: "insightNotSavedDialog.saveAll" }), cancelButtonText: intl.formatMessage({ id: "insightNotSavedDialog.close" }), onCancel: closeDialog, onSubmit: submitDialog, children: _jsxs("div", { className: "gdc-insight-not-saved-dialog", children: [_jsx(Typography, { tagName: "p", children: intl.formatMessage({ id: "insightNotSavedDialog.message" }) }), _jsx(UiButton, { iconBeforeSize: 12, variant: "dropdownInline", label: intl.formatMessage({ id: "insightNotSavedDialog.visualisations" }, {
25
+ return (_jsx(ConfirmDialog, { isPositive: true, dataTestId: "s-insight-not-saved-dialog", headline: intl.formatMessage({ id: "insightNotSavedDialog.headline" }), submitButtonText: intl.formatMessage({ id: "insightNotSavedDialog.saveAll" }), cancelButtonText: intl.formatMessage({ id: "insightNotSavedDialog.cancel" }), onCancel: closeDialog, onSubmit: submitDialog, children: _jsxs("div", { className: "gdc-insight-not-saved-dialog", children: [_jsx(Typography, { tagName: "p", children: intl.formatMessage({ id: "insightNotSavedDialog.message" }) }), _jsx(UiButton, { iconBeforeSize: 12, variant: "dropdownInline", label: intl.formatMessage({ id: "insightNotSavedDialog.visualisations" }, {
27
26
  count: unsavedInsights.length,
28
- }), iconBefore: showVisualisationsList ? "navigateDown" : "navigateRight", onClick: () => setShowVisualisationsList(!showVisualisationsList) }), showVisualisationsList ? (_jsx("ul", { children: unsavedInsights.map((insight) => (_jsxs("li", { children: [_jsx(UiIcon, { type: "visualization", size: 18 }), " ", insight.insight.title] }, insight.insight.identifier))) })) : null] }) }));
27
+ }), iconBefore: showVisualisationsList ? "navigateDown" : "navigateRight", onClick: () => setShowVisualisationsList(!showVisualisationsList) }), showVisualisationsList ? (_jsx("ul", { children: unsavedInsights.map((insight) => (_jsxs("li", { children: [_jsx(UiIcon, { type: "visualization", size: 18, color: "complementary-5" }), " ", insight.insight.title] }, insight.insight.identifier))) })) : null] }) }));
29
28
  }
@@ -83,7 +83,7 @@ export declare const en_US: {
83
83
  text: string;
84
84
  crowdinContext: string;
85
85
  };
86
- "insightNotSavedDialog.close": {
86
+ "insightNotSavedDialog.cancel": {
87
87
  text: string;
88
88
  crowdinContext: string;
89
89
  };
@@ -511,6 +511,10 @@ export declare const en_US: {
511
511
  text: string;
512
512
  crowdinContext: string;
513
513
  };
514
+ "settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip.learnMore": {
515
+ text: string;
516
+ crowdinContext: string;
517
+ };
514
518
  "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser": {
515
519
  text: string;
516
520
  crowdinContext: string;
@@ -975,6 +979,10 @@ export declare const en_US: {
975
979
  text: string;
976
980
  crowdinContext: string;
977
981
  };
982
+ "dialogs.automation.filters.restricted.deleteTooltip": {
983
+ text: string;
984
+ crowdinContext: string;
985
+ };
978
986
  "dialogs.automation.filters.deleteTooltip": {
979
987
  text: string;
980
988
  crowdinContext: string;
@@ -1147,6 +1155,10 @@ export declare const en_US: {
1147
1155
  text: string;
1148
1156
  crowdinContext: string;
1149
1157
  };
1158
+ "dialogs.export.csv.submit.disabledTooltip": {
1159
+ text: string;
1160
+ crowdinContext: string;
1161
+ };
1150
1162
  "dialogs.export.pdf.headline": {
1151
1163
  text: string;
1152
1164
  crowdinContext: string;
@@ -2603,6 +2615,10 @@ export declare const en_US: {
2603
2615
  text: string;
2604
2616
  crowdinContext: string;
2605
2617
  };
2618
+ "drill_modal_picker.restricted": {
2619
+ text: string;
2620
+ crowdinContext: string;
2621
+ };
2606
2622
  "visualizationSwitcher.restrictedEntry": {
2607
2623
  text: string;
2608
2624
  crowdinContext: string;
@@ -3359,6 +3375,10 @@ export declare const en_US: {
3359
3375
  text: string;
3360
3376
  crowdinContext: string;
3361
3377
  };
3378
+ "automationFilters.announcement.restrictedFiltersRemoved": {
3379
+ text: string;
3380
+ crowdinContext: string;
3381
+ };
3362
3382
  "automationFilters.announcement.filterChanged": {
3363
3383
  text: string;
3364
3384
  crowdinContext: string;