@gooddata/sdk-ui-dashboard 11.58.0-alpha.2 → 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 (274) hide show
  1. package/NOTICE +8 -8
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/index.d.ts +5 -5
  5. package/esm/index.d.ts.map +1 -1
  6. package/esm/index.js +3 -3
  7. package/esm/internal.d.ts +1 -0
  8. package/esm/internal.d.ts.map +1 -1
  9. package/esm/internal.js +1 -0
  10. package/esm/model/DashboardTester.d.ts.map +1 -1
  11. package/esm/model/DashboardTester.js +7 -1
  12. package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.d.ts.map +1 -1
  13. package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.js +6 -1
  14. package/esm/model/commandHandlers/common/validateDrills.d.ts.map +1 -1
  15. package/esm/model/commandHandlers/common/validateDrills.js +12 -3
  16. package/esm/model/commandHandlers/dashboard/dashboardDrillReferences.d.ts +4 -0
  17. package/esm/model/commandHandlers/dashboard/dashboardDrillReferences.d.ts.map +1 -0
  18. package/esm/model/commandHandlers/dashboard/dashboardDrillReferences.js +53 -0
  19. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
  20. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +13 -6
  21. package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.d.ts.map +1 -1
  22. package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.js +4 -1
  23. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.d.ts.map +1 -1
  24. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js +30 -6
  25. package/esm/model/commandHandlers/drill/drillToAttributeUrlHandler.d.ts.map +1 -1
  26. package/esm/model/commandHandlers/drill/drillToAttributeUrlHandler.js +2 -0
  27. package/esm/model/commandHandlers/drill/drillToCustomUrlHandler.d.ts.map +1 -1
  28. package/esm/model/commandHandlers/drill/drillToCustomUrlHandler.js +2 -0
  29. package/esm/model/commandHandlers/drill/drillToDashboardHandler.d.ts.map +1 -1
  30. package/esm/model/commandHandlers/drill/drillToDashboardHandler.js +2 -0
  31. package/esm/model/commandHandlers/drill/drillToInsightHandler.d.ts.map +1 -1
  32. package/esm/model/commandHandlers/drill/drillToInsightHandler.js +3 -1
  33. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.d.ts.map +1 -1
  34. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.js +30 -29
  35. package/esm/model/commandHandlers/drill/validateDrillAccess.d.ts +6 -0
  36. package/esm/model/commandHandlers/drill/validateDrillAccess.d.ts.map +1 -0
  37. package/esm/model/commandHandlers/drill/validateDrillAccess.js +10 -0
  38. package/esm/model/commandHandlers/parameters/filterParameterDependenciesWorker.d.ts +45 -0
  39. package/esm/model/commandHandlers/parameters/filterParameterDependenciesWorker.d.ts.map +1 -0
  40. package/esm/model/commandHandlers/parameters/filterParameterDependenciesWorker.js +99 -0
  41. package/esm/model/commandHandlers/parameters/insightParameterDependenciesWorker.d.ts +11 -0
  42. package/esm/model/commandHandlers/parameters/insightParameterDependenciesWorker.d.ts.map +1 -0
  43. package/esm/model/commandHandlers/parameters/insightParameterDependenciesWorker.js +71 -0
  44. package/esm/model/commandHandlers/parameters/loadFilterParameterDependencies.d.ts +22 -0
  45. package/esm/model/commandHandlers/parameters/loadFilterParameterDependencies.d.ts.map +1 -0
  46. package/esm/model/commandHandlers/parameters/loadFilterParameterDependencies.js +39 -0
  47. package/esm/model/commandHandlers/parameters/loadInsightParameterDependencies.d.ts +21 -0
  48. package/esm/model/commandHandlers/parameters/loadInsightParameterDependencies.d.ts.map +1 -0
  49. package/esm/model/commandHandlers/parameters/loadInsightParameterDependencies.js +86 -0
  50. package/esm/model/react/useInitializeDashboardStore.d.ts.map +1 -1
  51. package/esm/model/react/useInitializeDashboardStore.js +4 -0
  52. package/esm/model/react/useWidgetExecConfig.d.ts +4 -4
  53. package/esm/model/react/useWidgetExecConfig.d.ts.map +1 -1
  54. package/esm/model/react/useWidgetExecConfig.js +2 -2
  55. package/esm/model/store/catalog/catalogReducers.d.ts +16 -4
  56. package/esm/model/store/catalog/catalogReducers.d.ts.map +1 -1
  57. package/esm/model/store/catalog/catalogReducers.js +15 -3
  58. package/esm/model/store/catalog/catalogSelectors.d.ts +47 -7
  59. package/esm/model/store/catalog/catalogSelectors.d.ts.map +1 -1
  60. package/esm/model/store/catalog/catalogSelectors.js +33 -7
  61. package/esm/model/store/catalog/catalogState.d.ts +30 -9
  62. package/esm/model/store/catalog/catalogState.d.ts.map +1 -1
  63. package/esm/model/store/catalog/catalogState.js +2 -1
  64. package/esm/model/store/catalog/index.d.ts +4 -1
  65. package/esm/model/store/catalog/index.d.ts.map +1 -1
  66. package/esm/model/store/filtering/dashboardFilterSelectors.d.ts +8 -2
  67. package/esm/model/store/filtering/dashboardFilterSelectors.d.ts.map +1 -1
  68. package/esm/model/store/filtering/dashboardFilterSelectors.js +41 -25
  69. package/esm/model/store/filtering/types.d.ts +5 -0
  70. package/esm/model/store/filtering/types.d.ts.map +1 -1
  71. package/esm/model/store/tabs/layout/layoutSelectors.d.ts.map +1 -1
  72. package/esm/model/store/tabs/layout/layoutSelectors.js +2 -1
  73. package/esm/model/store/tabs/parameters/parametersHelpers.d.ts +42 -8
  74. package/esm/model/store/tabs/parameters/parametersHelpers.d.ts.map +1 -1
  75. package/esm/model/store/tabs/parameters/parametersHelpers.js +88 -19
  76. package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +13 -6
  77. package/esm/model/store/tabs/parameters/parametersSelectors.d.ts.map +1 -1
  78. package/esm/model/store/tabs/parameters/parametersSelectors.js +24 -13
  79. package/esm/model/store/ui/index.d.ts +1 -0
  80. package/esm/model/store/ui/index.d.ts.map +1 -1
  81. package/esm/model/store/ui/uiReducers.d.ts +5 -1
  82. package/esm/model/store/ui/uiReducers.d.ts.map +1 -1
  83. package/esm/model/store/ui/uiReducers.js +8 -4
  84. package/esm/model/store/ui/uiSelectors.d.ts +5 -1
  85. package/esm/model/store/ui/uiSelectors.d.ts.map +1 -1
  86. package/esm/model/store/ui/uiSelectors.js +4 -0
  87. package/esm/model/store/ui/uiState.d.ts +2 -1
  88. package/esm/model/store/ui/uiState.d.ts.map +1 -1
  89. package/esm/model/store/ui/uiState.js +1 -0
  90. package/esm/model/store/widgetDrills/drillRestrictionSelectors.d.ts +23 -0
  91. package/esm/model/store/widgetDrills/drillRestrictionSelectors.d.ts.map +1 -0
  92. package/esm/model/store/widgetDrills/drillRestrictionSelectors.js +5 -0
  93. package/esm/model/store/widgetDrills/drillRestrictionUtils.d.ts +5 -0
  94. package/esm/model/store/widgetDrills/drillRestrictionUtils.d.ts.map +1 -0
  95. package/esm/model/store/widgetDrills/drillRestrictionUtils.js +27 -0
  96. package/esm/model/store/widgetDrills/widgetDrillSelectors.d.ts.map +1 -1
  97. package/esm/model/store/widgetDrills/widgetDrillSelectors.js +9 -5
  98. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +1 -0
  99. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts +4 -2
  100. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts.map +1 -1
  101. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.js +12 -3
  102. package/esm/presentation/automations/alerting/utils/items.js +8 -14
  103. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.d.ts.map +1 -1
  104. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +8 -2
  105. package/esm/presentation/automations/contexts/AutomationsContext.d.ts +4 -2
  106. package/esm/presentation/automations/contexts/AutomationsContext.d.ts.map +1 -1
  107. package/esm/presentation/automations/scheduledEmail/hooks/useExportTimezones.js +1 -1
  108. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +1 -0
  109. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts +4 -2
  110. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts.map +1 -1
  111. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.js +25 -6
  112. package/esm/presentation/automations/shared/automationFilters/components/AutomationAttributeFilter.d.ts.map +1 -1
  113. package/esm/presentation/automations/shared/automationFilters/components/AutomationAttributeFilter.js +16 -2
  114. package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts.map +1 -1
  115. package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.js +16 -11
  116. package/esm/presentation/automations/shared/automationFilters/components/AutomationRestrictedFilters.d.ts +9 -0
  117. package/esm/presentation/automations/shared/automationFilters/components/AutomationRestrictedFilters.d.ts.map +1 -0
  118. package/esm/presentation/automations/shared/automationFilters/components/AutomationRestrictedFilters.js +22 -0
  119. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.d.ts +2 -2
  120. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.d.ts.map +1 -1
  121. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.js +17 -5
  122. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.d.ts +8 -0
  123. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.d.ts.map +1 -1
  124. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.js +54 -10
  125. package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.d.ts.map +1 -1
  126. package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.js +3 -2
  127. package/esm/presentation/automations/shared/filters/conversions.d.ts +10 -2
  128. package/esm/presentation/automations/shared/filters/conversions.d.ts.map +1 -1
  129. package/esm/presentation/automations/shared/filters/conversions.js +15 -6
  130. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.d.ts.map +1 -1
  131. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.js +3 -4
  132. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts.map +1 -1
  133. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.js +20 -7
  134. package/esm/presentation/dialogs/ExportCsvDialog.d.ts.map +1 -1
  135. package/esm/presentation/dialogs/ExportCsvDialog.js +2 -1
  136. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParametersSections/IdentifierParametersSection.js +1 -1
  137. package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.d.ts +2 -1
  138. package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.d.ts.map +1 -1
  139. package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.js +19 -1
  140. package/esm/presentation/drill/DrillSelect/WithDrillSelect.d.ts.map +1 -1
  141. package/esm/presentation/drill/DrillSelect/WithDrillSelect.js +12 -4
  142. package/esm/presentation/drill/DrillSelect/types.d.ts +1 -0
  143. package/esm/presentation/drill/DrillSelect/types.d.ts.map +1 -1
  144. package/esm/presentation/drill/hooks/useDrillSelectDropdownMenuItems.d.ts.map +1 -1
  145. package/esm/presentation/drill/hooks/useDrillSelectDropdownMenuItems.js +4 -2
  146. package/esm/presentation/insightNotSavedDialog/InsightNotSavedDialog.d.ts.map +1 -1
  147. package/esm/presentation/insightNotSavedDialog/InsightNotSavedDialog.js +4 -5
  148. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +3 -0
  149. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  150. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +5 -2
  151. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +3 -0
  152. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  153. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +5 -2
  154. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +3 -0
  155. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  156. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +5 -2
  157. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +21 -1
  158. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  159. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +27 -7
  160. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +3 -0
  161. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  162. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +5 -2
  163. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +3 -0
  164. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  165. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +5 -2
  166. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +3 -0
  167. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  168. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +5 -2
  169. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +3 -0
  170. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  171. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +5 -2
  172. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +3 -0
  173. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  174. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +5 -2
  175. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +3 -0
  176. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  177. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +5 -2
  178. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +3 -0
  179. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  180. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +5 -2
  181. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +3 -0
  182. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  183. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +5 -2
  184. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +3 -0
  185. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  186. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +5 -2
  187. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +3 -0
  188. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  189. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +5 -2
  190. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +3 -0
  191. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  192. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +5 -2
  193. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +3 -0
  194. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  195. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +5 -2
  196. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +3 -0
  197. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  198. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +5 -2
  199. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +3 -0
  200. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  201. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +5 -2
  202. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +3 -0
  203. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  204. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +5 -2
  205. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +3 -0
  206. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  207. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +5 -2
  208. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +3 -0
  209. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  210. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +5 -2
  211. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +3 -0
  212. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  213. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +5 -2
  214. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +3 -0
  215. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  216. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +5 -2
  217. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +3 -0
  218. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  219. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +5 -2
  220. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +3 -0
  221. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  222. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +5 -2
  223. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +3 -0
  224. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  225. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +5 -2
  226. package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts +4 -8
  227. package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts.map +1 -1
  228. package/esm/presentation/widget/common/RestrictedPlaceholder.js +16 -23
  229. package/esm/presentation/widget/insight/DefaultInsightBody/DefaultInsightBody.d.ts.map +1 -1
  230. package/esm/presentation/widget/insight/DefaultInsightBody/DefaultInsightBody.js +2 -4
  231. package/esm/presentation/widget/insight/LayeredTableView.d.ts +1 -1
  232. package/esm/presentation/widget/insight/LayeredTableView.d.ts.map +1 -1
  233. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.d.ts.map +1 -1
  234. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.js +2 -3
  235. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.d.ts.map +1 -1
  236. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.js +1 -1
  237. package/esm/presentation/widget/insight/types.d.ts +1 -1
  238. package/esm/presentation/widget/insight/types.d.ts.map +1 -1
  239. package/esm/presentation/widget/richText/RestrictedReferencesDialog.d.ts.map +1 -1
  240. package/esm/presentation/widget/richText/RestrictedReferencesDialog.js +5 -6
  241. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.js +1 -1
  242. package/esm/presentation/widget/visualizationSwitcher/configuration/VisualizationsList/VisualizationListItem.d.ts.map +1 -1
  243. package/esm/presentation/widget/visualizationSwitcher/configuration/VisualizationsList/VisualizationListItem.js +1 -4
  244. package/esm/presentation/widget/widget/InsightWidget/DefaultDashboardInsightWidget.js +2 -3
  245. package/esm/sdk-ui-dashboard.d.ts +88 -61
  246. package/package.json +21 -21
  247. package/styles/css/dashboard.css +1 -7
  248. package/styles/css/dashboard.css.map +1 -1
  249. package/styles/css/dashboardSettingsDialog.css +4 -0
  250. package/styles/css/dashboardSettingsDialog.css.map +1 -1
  251. package/styles/css/export.css +0 -6
  252. package/styles/css/export.css.map +1 -1
  253. package/styles/css/main.css +13 -20
  254. package/styles/css/main.css.map +1 -1
  255. package/styles/css/notifications_channels_dialog.css +1 -7
  256. package/styles/css/notifications_channels_dialog.css.map +1 -1
  257. package/styles/css/richTextWidget.css +4 -0
  258. package/styles/css/richTextWidget.css.map +1 -1
  259. package/styles/scss/dashboardSettingsDialog.scss +5 -0
  260. package/styles/scss/export.scss +0 -9
  261. package/styles/scss/notifications_channels_dialog.scss +1 -10
  262. package/styles/scss/richTextWidget.scss +5 -1
  263. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadMeasureParameterDependencies.d.ts +0 -13
  264. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadMeasureParameterDependencies.d.ts.map +0 -1
  265. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadMeasureParameterDependencies.js +0 -98
  266. package/esm/model/types/drillTypes.d.ts +0 -13
  267. package/esm/model/types/drillTypes.d.ts.map +0 -1
  268. package/esm/model/types/drillTypes.js +0 -14
  269. package/esm/presentation/widget/insight/geoDefaultDisplayFormRefs.d.ts +0 -5
  270. package/esm/presentation/widget/insight/geoDefaultDisplayFormRefs.d.ts.map +0 -1
  271. package/esm/presentation/widget/insight/geoDefaultDisplayFormRefs.js +0 -28
  272. package/esm/presentation/widget/insight/insightToTable.d.ts +0 -74
  273. package/esm/presentation/widget/insight/insightToTable.d.ts.map +0 -1
  274. package/esm/presentation/widget/insight/insightToTable.js +0 -482
@@ -1,13 +1,21 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
2
  import { useCallback, useMemo, useRef, useState } from "react";
3
+ import { partition } from "lodash-es";
3
4
  import { useIntl } from "react-intl";
4
5
  import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
5
6
  import { applyFilterChange, getCatalogAttributesByFilters, getCatalogDateDatasetsByFilters, getCatalogMeasuresByFilters, getFilterTitle, getNonHiddenFilters, getNonSelectedFilters, removeFilterFrom, resolveFilterToAdd, resolveTabFilterToAdd, } from "./utils.js";
6
7
  /**
7
- * Computes visible filters by removing hidden filters.
8
+ * Computes the filters the bar renders: restricted ones split off to be reported as a count, hidden
9
+ * ones removed from the rest. Restricted filters stay in the selection, so they are still saved.
10
+ *
11
+ * @remarks
12
+ * Restricted filters are taken out before the hidden check, so one the author hid after the automation
13
+ * stored it is still counted and removable rather than kept invisibly.
8
14
  */
9
15
  function computeVisibleFilters(selectedFilters, context) {
10
- return getNonHiddenFilters(selectedFilters, context.attributeConfigs, context.dateConfigs, context.isCommonDateFilterHidden, context.disableDateFilters);
16
+ const [restrictedFilters, readableFilters] = partition(selectedFilters, context.isFilterRestricted);
17
+ const visibleFilters = getNonHiddenFilters(readableFilters, context.attributeConfigs, context.dateConfigs, context.isCommonDateFilterHidden, context.disableDateFilters);
18
+ return { visibleFilters, restrictedFilters };
11
19
  }
12
20
  /**
13
21
  * Computes catalog attributes available for the Add filter dropdown.
@@ -32,7 +40,7 @@ function computeAddDropdownMeasures(nonSelectedFilters, context) {
32
40
  */
33
41
  export const useAutomationFilters = ({ availableFilters, selectedFilters, onFiltersChange, onStoreFiltersChange, disableDateFilters = false, }) => {
34
42
  const intl = useIntl();
35
- const { catalogAttributes: allAttributes, catalogDateDatasets: allDateDatasets, catalogMeasures: allMeasures, attributeFilterConfigs: attributeConfigs, dateFilterConfigs: dateConfigs, measureValueFilterConfigs: mvfConfigs, dateFilterContextConfig: dateFilterConfig, commonDateFilterId, lockedFilters, } = useAutomationsContext();
43
+ const { catalogAttributes: allAttributes, catalogDateDatasets: allDateDatasets, catalogMeasures: allMeasures, attributeFilterConfigs: attributeConfigs, dateFilterConfigs: dateConfigs, measureValueFilterConfigs: mvfConfigs, dateFilterContextConfig: dateFilterConfig, commonDateFilterId, lockedFilters, isFilterRestricted, } = useAutomationsContext();
36
44
  const [filterAnnouncement, setFilterAnnouncement] = useState("");
37
45
  const addFilterButtonRef = useRef(null);
38
46
  const filterGroupRef = useRef(null);
@@ -47,6 +55,7 @@ export const useAutomationFilters = ({ availableFilters, selectedFilters, onFilt
47
55
  mvfConfigs,
48
56
  isCommonDateFilterHidden,
49
57
  disableDateFilters,
58
+ isFilterRestricted,
50
59
  }), [
51
60
  allAttributes,
52
61
  allDateDatasets,
@@ -56,9 +65,12 @@ export const useAutomationFilters = ({ availableFilters, selectedFilters, onFilt
56
65
  mvfConfigs,
57
66
  isCommonDateFilterHidden,
58
67
  disableDateFilters,
68
+ isFilterRestricted,
59
69
  ]);
60
- const visibleFilters = useMemo(() => computeVisibleFilters(selectedFilters, processingContext), [selectedFilters, processingContext]);
61
- const nonSelectedFilters = useMemo(() => getNonSelectedFilters(availableFilters, selectedFilters), [availableFilters, selectedFilters]);
70
+ const { visibleFilters, restrictedFilters } = useMemo(() => computeVisibleFilters(selectedFilters, processingContext), [selectedFilters, processingContext]);
71
+ // Dropped once here, so no consumer has to remember to exclude a restricted filter.
72
+ const selectableFilters = useMemo(() => availableFilters.filter((filter) => !isFilterRestricted(filter)), [availableFilters, isFilterRestricted]);
73
+ const nonSelectedFilters = useMemo(() => getNonSelectedFilters(selectableFilters, selectedFilters), [selectableFilters, selectedFilters]);
62
74
  const attributes = useMemo(() => computeAddDropdownAttributes(nonSelectedFilters, processingContext), [nonSelectedFilters, processingContext]);
63
75
  const dateDatasets = useMemo(() => computeAddDropdownDateDatasets(nonSelectedFilters, processingContext), [nonSelectedFilters, processingContext]);
64
76
  const measures = useMemo(() => computeAddDropdownMeasures(nonSelectedFilters, processingContext), [nonSelectedFilters, processingContext]);
@@ -133,6 +145,20 @@ export const useAutomationFilters = ({ availableFilters, selectedFilters, onFilt
133
145
  intl,
134
146
  focusAddFilterButton,
135
147
  ]);
148
+ const handleRemoveRestrictedFilters = useCallback(() => {
149
+ const message = intl.formatMessage({ id: "automationFilters.announcement.restrictedFiltersRemoved" }, { count: restrictedFilters.length });
150
+ announceFiltersChanged(message);
151
+ onFiltersChange(selectedFilters.filter((filter) => !isFilterRestricted(filter)));
152
+ focusFilterGroup();
153
+ }, [
154
+ onFiltersChange,
155
+ focusFilterGroup,
156
+ announceFiltersChanged,
157
+ selectedFilters,
158
+ restrictedFilters,
159
+ isFilterRestricted,
160
+ intl,
161
+ ]);
136
162
  const handleStoreFiltersChange = useCallback((value) => {
137
163
  onStoreFiltersChange(value, selectedFilters, undefined);
138
164
  }, [onStoreFiltersChange, selectedFilters]);
@@ -147,6 +173,9 @@ export const useAutomationFilters = ({ availableFilters, selectedFilters, onFilt
147
173
  commonDateFilterId,
148
174
  lockedFilters,
149
175
  visibleFilters,
176
+ restrictedFilterCount: restrictedFilters.length,
177
+ hasFiltersToAdd: nonSelectedFilters.length > 0,
178
+ handleRemoveRestrictedFilters,
150
179
  attributes,
151
180
  dateDatasets,
152
181
  measures,
@@ -169,7 +198,7 @@ export const useAutomationFilters = ({ availableFilters, selectedFilters, onFilt
169
198
  * Returns processed filters and handlers for add/change/delete operations per tab.
170
199
  */
171
200
  export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, onFiltersByTabChange, onStoreFiltersChange, disableDateFilters = false, }) => {
172
- const { catalogAttributes: allAttributes, catalogDateDatasets: allDateDatasets, catalogMeasures: allMeasures, commonDateFilterId, attributeFilterConfigsByTab: attributeConfigsByTab, dateFilterConfigsByTab: dateConfigsByTab, dateFilterConfigOverridesByTab: dateFilterConfigByTab, measureValueFilterConfigsByTab: mvfConfigsByTab, } = useAutomationsContext();
201
+ const { catalogAttributes: allAttributes, catalogDateDatasets: allDateDatasets, catalogMeasures: allMeasures, commonDateFilterId, attributeFilterConfigsByTab: attributeConfigsByTab, dateFilterConfigsByTab: dateConfigsByTab, dateFilterConfigOverridesByTab: dateFilterConfigByTab, measureValueFilterConfigsByTab: mvfConfigsByTab, isFilterRestricted, } = useAutomationsContext();
173
202
  const [filterAnnouncement] = useState("");
174
203
  const addFilterButtonRef = useRef(null);
175
204
  const filterGroupRef = useRef(null);
@@ -195,14 +224,14 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
195
224
  mvfConfigs,
196
225
  isCommonDateFilterHidden,
197
226
  disableDateFilters,
227
+ isFilterRestricted,
198
228
  };
199
229
  // Use edited filters if available, otherwise default selected filters
200
230
  const selectedFilters = editedFiltersByTab?.[tabId] ?? tab.defaultSelectedFilters;
201
- const availableFilters = tab.availableFilters;
202
231
  // Apply visible filter logic (removes hidden filters based on config)
203
- const visibleFilters = computeVisibleFilters(selectedFilters, processingContext);
232
+ const { visibleFilters, restrictedFilters } = computeVisibleFilters(selectedFilters, processingContext);
204
233
  // Compute non-selected filters for Add dropdown
205
- const nonSelectedFilters = getNonSelectedFilters(availableFilters, selectedFilters);
234
+ const nonSelectedFilters = getNonSelectedFilters(tab.selectableFilters, selectedFilters);
206
235
  // Compute catalog items for Add dropdown
207
236
  const attributes = computeAddDropdownAttributes(nonSelectedFilters, processingContext);
208
237
  const dateDatasets = computeAddDropdownDateDatasets(nonSelectedFilters, processingContext);
@@ -211,6 +240,8 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
211
240
  tabId: tab.tabId,
212
241
  tabTitle: tab.tabTitle,
213
242
  visibleFilters,
243
+ restrictedFilterCount: restrictedFilters.length,
244
+ hasFiltersToAdd: nonSelectedFilters.length > 0,
214
245
  lockedFilters: tab.lockedFilters,
215
246
  attributes,
216
247
  dateDatasets,
@@ -231,6 +262,7 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
231
262
  dateFilterConfigByTab,
232
263
  mvfConfigsByTab,
233
264
  disableDateFilters,
265
+ isFilterRestricted,
234
266
  ]);
235
267
  // Handlers for per-tab filter operations (similar to original hook)
236
268
  const handleTabFilterChange = useCallback((tabId, updatedFilter) => {
@@ -267,7 +299,9 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
267
299
  if (!tabData) {
268
300
  return;
269
301
  }
270
- const availableFilter = resolveTabFilterToAdd(displayForm, tabData.availableFilters, attributes, dateDatasets);
302
+ // Resolves by ObjRef, which is coarser than the local identifier used elsewhere: one
303
+ // catalog attribute can back several filters, so a restricted one must not be a candidate.
304
+ const availableFilter = resolveTabFilterToAdd(displayForm, tabData.selectableFilters, attributes, dateDatasets);
271
305
  if (availableFilter) {
272
306
  onFiltersByTabChange({
273
307
  ...editedFiltersByTab,
@@ -275,6 +309,15 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
275
309
  });
276
310
  }
277
311
  }, [editedFiltersByTab, onFiltersByTabChange, filtersByTab]);
312
+ const handleTabRestrictedFiltersRemove = useCallback((tabId) => {
313
+ if (!editedFiltersByTab || !onFiltersByTabChange) {
314
+ return;
315
+ }
316
+ onFiltersByTabChange({
317
+ ...editedFiltersByTab,
318
+ [tabId]: (editedFiltersByTab[tabId] ?? []).filter((filter) => !isFilterRestricted(filter)),
319
+ });
320
+ }, [editedFiltersByTab, onFiltersByTabChange, isFilterRestricted]);
278
321
  const handleStoreFiltersChange = useCallback((value) => {
279
322
  onStoreFiltersChange(value, undefined, editedFiltersByTab);
280
323
  }, [editedFiltersByTab, onStoreFiltersChange]);
@@ -314,6 +357,7 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
314
357
  handleTabFilterChange,
315
358
  handleTabFilterDelete,
316
359
  handleTabFilterAdd,
360
+ handleTabRestrictedFiltersRemove,
317
361
  handleStoreFiltersChange,
318
362
  makeFilterGroupUnfocusable,
319
363
  setAddFilterButtonRefs,
@@ -1 +1 @@
1
- {"version":3,"file":"useAutomationFiltersSelect.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAEhC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AActF;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IACxC,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACnE,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAClD,gCAAgC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IACzE,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C;;;;;OAKG;IACH,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAClD;;;;OAIG;IACH,4BAA4B,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC7D;;OAEG;IACH,+BAA+B,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEvE,qCAAqC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAAG,SAAS,CAAC;CACjG;AAiFD;;GAEG;AACH,eAAO,MAAM,0BAA0B,kCAGpC;IACC;;OAEG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAEjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;CAChD,KAAG,2BA8GH,CAAC;AAEF,wBAAgB,yCAAyC,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS,kCAQ1G;AAED,wBAAgB,mCAAmC,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS,uCAQpG"}
1
+ {"version":3,"file":"useAutomationFiltersSelect.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAEhC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AActF;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IACxC,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACnE,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAClD,gCAAgC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IACzE,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C;;;;;OAKG;IACH,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAClD;;;;OAIG;IACH,4BAA4B,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC7D;;OAEG;IACH,+BAA+B,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEvE,qCAAqC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAAG,SAAS,CAAC;CACjG;AAiFD;;GAEG;AACH,eAAO,MAAM,0BAA0B,kCAGpC;IACC;;OAEG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAEjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;CAChD,KAAG,2BAiHH,CAAC;AAEF,wBAAgB,yCAAyC,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS,kCAQ1G;AAED,wBAAgB,mCAAmC,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS,uCAQpG"}
@@ -68,7 +68,7 @@ function checkAreParametersStored(automationToEdit) {
68
68
  * Hook to get data for AutomationFiltersSelect component.
69
69
  */
70
70
  export const useAutomationFiltersSelect = ({ widget, automationToEdit, }) => {
71
- const { availableFilters, automationFiltersByTab: allFiltersByTab, commonDateFilterId, parameters: { enabled: parametersEnabled }, } = useAutomationsContext();
71
+ const { availableFilters, automationFiltersByTab: allFiltersByTab, commonDateFilterId, isFilterRestricted, parameters: { enabled: parametersEnabled }, } = useAutomationsContext();
72
72
  const availableFiltersWithoutIgnoredWidgetFilters = useMemo(() => removeIgnoredWidgetFilters(availableFilters, widget), [availableFilters, widget]);
73
73
  const availableFiltersAsVisibleFilters = useAutomationVisibleFilters(availableFiltersWithoutIgnoredWidgetFilters);
74
74
  const filtersForNewAutomation = useDefaultSelectedFiltersForNewAutomation(widget);
@@ -99,7 +99,7 @@ export const useAutomationFiltersSelect = ({ widget, automationToEdit, }) => {
99
99
  if (!filtersByTab || !automationToEdit || isDashboardAutomationWithoutStoredFilters) {
100
100
  return undefined;
101
101
  }
102
- const filtersByTabForExistingAutomation = getDefaultSelectedFiltersByTabForExistingAutomation(automationToEdit, availableFiltersByTab, commonDateFilterId);
102
+ const filtersByTabForExistingAutomation = getDefaultSelectedFiltersByTabForExistingAutomation(automationToEdit, availableFiltersByTab, commonDateFilterId, isFilterRestricted);
103
103
  if (filtersByTabForExistingAutomation) {
104
104
  return filtersByTabForExistingAutomation;
105
105
  }
@@ -110,6 +110,7 @@ export const useAutomationFiltersSelect = ({ widget, automationToEdit, }) => {
110
110
  isDashboardAutomationWithoutStoredFilters,
111
111
  commonDateFilterId,
112
112
  availableFiltersByTab,
113
+ isFilterRestricted,
113
114
  ]);
114
115
  // State for edited filters per tab (only used when dashboard tabs are enabled)
115
116
  const [editedAutomationFiltersByTab, setEditedAutomationFiltersByTab] = useState(automationToEdit && !isDashboardAutomationWithoutStoredFilters
@@ -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"}