@gooddata/sdk-ui-dashboard 11.56.0-alpha.7 → 11.56.0

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 (308) hide show
  1. package/esm/__version.d.ts +1 -1
  2. package/esm/__version.d.ts.map +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/_staging/catalog/computedAttributes.d.ts +43 -0
  5. package/esm/_staging/catalog/computedAttributes.d.ts.map +1 -0
  6. package/esm/_staging/catalog/computedAttributes.js +93 -0
  7. package/esm/_staging/catalog/displayFormMap.d.ts +3 -2
  8. package/esm/_staging/catalog/displayFormMap.d.ts.map +1 -1
  9. package/esm/_staging/catalog/displayFormMap.js +9 -3
  10. package/esm/_staging/metadata/objRefMap.d.ts.map +1 -1
  11. package/esm/_staging/metadata/objRefMap.js +11 -1
  12. package/esm/index.d.ts +9 -5
  13. package/esm/index.d.ts.map +1 -1
  14. package/esm/index.js +7 -3
  15. package/esm/kdaDialog/composition/hooks/useKdaValidAttributes.js +2 -2
  16. package/esm/kdaDialog/dialog/hooks/useValidAttributes.d.ts.map +1 -1
  17. package/esm/kdaDialog/dialog/hooks/useValidAttributes.js +21 -6
  18. package/esm/kdaDialog/hooks/useAttribute.d.ts.map +1 -1
  19. package/esm/kdaDialog/hooks/useAttribute.js +16 -8
  20. package/esm/locales.d.ts +3 -0
  21. package/esm/locales.d.ts.map +1 -1
  22. package/esm/locales.js +3 -0
  23. package/esm/model/commandHandlers/dashboard/common/loadAvailableDisplayFormRefs.d.ts.map +1 -1
  24. package/esm/model/commandHandlers/dashboard/common/loadAvailableDisplayFormRefs.js +15 -6
  25. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts +2 -3
  26. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
  27. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +26 -17
  28. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.d.ts +6 -1
  29. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.d.ts.map +1 -1
  30. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.js +37 -4
  31. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts +7 -2
  32. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts.map +1 -1
  33. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +15 -3
  34. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/filterDisplayFormValidation.d.ts.map +1 -1
  35. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/filterDisplayFormValidation.js +10 -3
  36. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/uniqueFiltersValidation.d.ts.map +1 -1
  37. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/uniqueFiltersValidation.js +24 -14
  38. package/esm/model/commandHandlers/scheduledEmail/createScheduledEmailHandler.js +2 -2
  39. package/esm/model/commandHandlers/scheduledEmail/saveScheduledEmailHandler.js +2 -2
  40. package/esm/model/commandHandlers/widgets/attributeHierarchyModifiedHandler.d.ts.map +1 -1
  41. package/esm/model/commandHandlers/widgets/attributeHierarchyModifiedHandler.js +6 -0
  42. package/esm/model/commandHandlers/widgets/exportInsightWidgetHandler.d.ts.map +1 -1
  43. package/esm/model/commandHandlers/widgets/exportInsightWidgetHandler.js +2 -2
  44. package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.js +2 -2
  45. package/esm/model/queries/base.d.ts +1 -1
  46. package/esm/model/queries/base.d.ts.map +1 -1
  47. package/esm/model/queries/base.js +1 -1
  48. package/esm/model/queries/computedAttributeExpression.d.ts +27 -0
  49. package/esm/model/queries/computedAttributeExpression.d.ts.map +1 -0
  50. package/esm/model/queries/computedAttributeExpression.js +21 -0
  51. package/esm/model/queries/connectedAttributes.d.ts +19 -1
  52. package/esm/model/queries/connectedAttributes.d.ts.map +1 -1
  53. package/esm/model/queries/connectedAttributes.js +3 -1
  54. package/esm/model/queries/index.d.ts +2 -1
  55. package/esm/model/queries/index.d.ts.map +1 -1
  56. package/esm/model/queryServices/index.d.ts +1 -1
  57. package/esm/model/queryServices/index.d.ts.map +1 -1
  58. package/esm/model/queryServices/index.js +2 -0
  59. package/esm/model/queryServices/queryAttributeByDisplayForm.d.ts.map +1 -1
  60. package/esm/model/queryServices/queryAttributeByDisplayForm.js +12 -3
  61. package/esm/model/queryServices/queryAttributeDataset.d.ts.map +1 -1
  62. package/esm/model/queryServices/queryAttributeDataset.js +9 -1
  63. package/esm/model/queryServices/queryComputedAttributeExpression.d.ts +4 -0
  64. package/esm/model/queryServices/queryComputedAttributeExpression.d.ts.map +1 -0
  65. package/esm/model/queryServices/queryComputedAttributeExpression.js +17 -0
  66. package/esm/model/queryServices/queryConnectedAttributes.d.ts.map +1 -1
  67. package/esm/model/queryServices/queryConnectedAttributes.js +20 -5
  68. package/esm/model/queryServices/queryInsightAttributesMeta.d.ts.map +1 -1
  69. package/esm/model/queryServices/queryInsightAttributesMeta.js +20 -11
  70. package/esm/model/react/useIsWidgetRestricted.d.ts +9 -0
  71. package/esm/model/react/useIsWidgetRestricted.d.ts.map +1 -0
  72. package/esm/model/react/useIsWidgetRestricted.js +14 -0
  73. package/esm/model/store/catalog/catalogReducers.d.ts +2 -1
  74. package/esm/model/store/catalog/catalogReducers.d.ts.map +1 -1
  75. package/esm/model/store/catalog/catalogReducers.js +2 -1
  76. package/esm/model/store/catalog/catalogSelectors.d.ts +21 -1
  77. package/esm/model/store/catalog/catalogSelectors.d.ts.map +1 -1
  78. package/esm/model/store/catalog/catalogSelectors.js +26 -2
  79. package/esm/model/store/catalog/catalogState.d.ts +8 -1
  80. package/esm/model/store/catalog/catalogState.d.ts.map +1 -1
  81. package/esm/model/store/catalog/catalogState.js +1 -0
  82. package/esm/model/store/config/configSelectors.d.ts +11 -0
  83. package/esm/model/store/config/configSelectors.d.ts.map +1 -1
  84. package/esm/model/store/config/configSelectors.js +13 -0
  85. package/esm/model/store/insights/insightsSelectors.js +3 -3
  86. package/esm/model/store/tabs/filterContext/filterContextSelectors.d.ts.map +1 -1
  87. package/esm/model/store/tabs/filterContext/filterContextSelectors.js +8 -4
  88. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.d.ts +8 -0
  89. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.d.ts.map +1 -1
  90. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.js +8 -0
  91. package/esm/model/utils/displayFormResolver.d.ts.map +1 -1
  92. package/esm/model/utils/displayFormResolver.js +11 -1
  93. package/esm/plugins/customizationApis/customizationBuilder.d.ts.map +1 -1
  94. package/esm/plugins/customizationApis/customizationBuilder.js +1 -0
  95. package/esm/plugins/customizationApis/insightCustomizer.d.ts +4 -2
  96. package/esm/plugins/customizationApis/insightCustomizer.d.ts.map +1 -1
  97. package/esm/plugins/customizationApis/insightCustomizer.js +43 -3
  98. package/esm/plugins/customizer.d.ts +14 -1
  99. package/esm/plugins/customizer.d.ts.map +1 -1
  100. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  101. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +1 -1
  102. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts.map +1 -1
  103. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +23 -58
  104. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts +33 -0
  105. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts.map +1 -0
  106. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.js +61 -0
  107. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts +3 -17
  108. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts.map +1 -1
  109. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.js +3 -52
  110. package/esm/presentation/automations/alerting/state/useAlertFormState.js +1 -1
  111. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +2 -2
  112. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  113. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +1 -1
  114. package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogShell.js +2 -5
  115. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.d.ts.map +1 -1
  116. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +22 -40
  117. package/esm/presentation/automations/scheduledEmail/state/useSaveScheduledEmailToBackend.d.ts.map +1 -1
  118. package/esm/presentation/automations/scheduledEmail/state/useSaveScheduledEmailToBackend.js +14 -3
  119. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts +27 -0
  120. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts.map +1 -0
  121. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.js +142 -0
  122. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts +4 -6
  123. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts.map +1 -1
  124. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.js +9 -151
  125. package/esm/presentation/automations/shared/filters/conversions.d.ts +4 -0
  126. package/esm/presentation/automations/shared/filters/conversions.d.ts.map +1 -1
  127. package/esm/presentation/automations/shared/filters/conversions.js +28 -24
  128. package/esm/presentation/automations/shared/hooks/useShallowStable.d.ts +10 -0
  129. package/esm/presentation/automations/shared/hooks/useShallowStable.d.ts.map +1 -0
  130. package/esm/presentation/automations/shared/hooks/useShallowStable.js +18 -0
  131. package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.d.ts.map +1 -1
  132. package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.js +17 -4
  133. package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.d.ts +10 -0
  134. package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.d.ts.map +1 -0
  135. package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.js +19 -0
  136. package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.d.ts.map +1 -1
  137. package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.js +8 -2
  138. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeChrome.d.ts.map +1 -1
  139. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeChrome.js +4 -2
  140. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.d.ts +8 -3
  141. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.d.ts.map +1 -1
  142. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.js +65 -25
  143. package/esm/presentation/dashboard/components/DashboardInner.d.ts.map +1 -1
  144. package/esm/presentation/dashboard/components/DashboardInner.js +4 -4
  145. package/esm/presentation/dashboard/components/DashboardRenderer.d.ts.map +1 -1
  146. package/esm/presentation/dashboard/components/DashboardRenderer.js +2 -2
  147. package/esm/presentation/dashboard/hooks/useDashboard.d.ts +2 -1
  148. package/esm/presentation/dashboard/hooks/useDashboard.d.ts.map +1 -1
  149. package/esm/presentation/dashboard/hooks/useDashboard.js +7 -1
  150. package/esm/presentation/dashboard/types.d.ts +14 -1
  151. package/esm/presentation/dashboard/types.d.ts.map +1 -1
  152. package/esm/presentation/dashboardContexts/DashboardComponentsContext.d.ts +2 -1
  153. package/esm/presentation/dashboardContexts/DashboardComponentsContext.d.ts.map +1 -1
  154. package/esm/presentation/dashboardContexts/DashboardComponentsContext.js +1 -0
  155. package/esm/presentation/dashboardContexts/types.d.ts +20 -0
  156. package/esm/presentation/dashboardContexts/types.d.ts.map +1 -1
  157. package/esm/presentation/dragAndDrop/draggableAttributeFilter/DefaultAttributeFilterDraggingComponent.d.ts.map +1 -1
  158. package/esm/presentation/dragAndDrop/draggableAttributeFilter/DefaultAttributeFilterDraggingComponent.js +4 -3
  159. package/esm/presentation/export/useExportData.js +2 -2
  160. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltip.d.ts.map +1 -1
  161. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltip.js +8 -2
  162. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.d.ts +12 -1
  163. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.d.ts.map +1 -1
  164. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.js +19 -2
  165. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/displayForms/AttributeDisplayFormsDropdown.d.ts.map +1 -1
  166. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/displayForms/AttributeDisplayFormsDropdown.js +3 -2
  167. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.d.ts +14 -0
  168. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.d.ts.map +1 -0
  169. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.js +28 -0
  170. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useDisplayFormConfiguration.js +2 -2
  171. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useValidNeighbourAttributes.d.ts.map +1 -1
  172. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useValidNeighbourAttributes.js +12 -2
  173. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/shared/limitingItemsHook.d.ts.map +1 -1
  174. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/shared/limitingItemsHook.js +6 -5
  175. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/parentFilters/ParentFiltersDisabledItem.js +2 -2
  176. package/esm/presentation/filterBar/filterBar/DefaultFilterBarItem.js +2 -2
  177. package/esm/presentation/filterBar/filterBar/useFiltersWithAddedPlaceholder.js +2 -2
  178. package/esm/presentation/filterBar/measureValueFilter/useDashboardMeasureValueFilterData.d.ts.map +1 -1
  179. package/esm/presentation/filterBar/measureValueFilter/useDashboardMeasureValueFilterData.js +55 -17
  180. package/esm/presentation/flexibleLayout/DashboardLayoutWidget.d.ts.map +1 -1
  181. package/esm/presentation/flexibleLayout/DashboardLayoutWidget.js +6 -1
  182. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +5 -0
  183. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  184. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +5 -0
  185. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +5 -0
  186. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  187. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +5 -0
  188. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +5 -0
  189. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  190. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +5 -0
  191. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +40 -0
  192. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  193. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +40 -0
  194. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +5 -0
  195. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  196. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +5 -0
  197. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +5 -0
  198. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  199. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +5 -0
  200. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +5 -0
  201. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  202. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +5 -0
  203. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +5 -0
  204. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  205. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +5 -0
  206. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +5 -0
  207. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  208. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +5 -0
  209. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +5 -0
  210. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  211. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +5 -0
  212. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +5 -0
  213. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  214. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +5 -0
  215. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +5 -0
  216. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  217. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +5 -0
  218. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +5 -0
  219. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  220. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +5 -0
  221. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +5 -0
  222. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  223. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +5 -0
  224. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +5 -0
  225. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  226. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +5 -0
  227. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +5 -0
  228. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  229. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +5 -0
  230. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +5 -0
  231. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  232. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +5 -0
  233. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +5 -0
  234. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  235. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +5 -0
  236. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +5 -0
  237. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  238. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +5 -0
  239. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +5 -0
  240. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  241. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +5 -0
  242. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +5 -0
  243. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  244. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +5 -0
  245. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +5 -0
  246. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  247. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +5 -0
  248. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +5 -0
  249. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  250. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +5 -0
  251. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +5 -0
  252. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  253. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +5 -0
  254. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +5 -0
  255. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  256. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +5 -0
  257. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +5 -0
  258. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  259. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +5 -0
  260. package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts +54 -0
  261. package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts.map +1 -0
  262. package/esm/presentation/widget/common/RestrictedPlaceholder.js +49 -0
  263. package/esm/presentation/widget/common/configuration/DateDatasetFilter.d.ts +6 -1
  264. package/esm/presentation/widget/common/configuration/DateDatasetFilter.d.ts.map +1 -1
  265. package/esm/presentation/widget/common/configuration/DateDatasetFilter.js +2 -2
  266. package/esm/presentation/widget/common/configuration/DateFilterCheckbox.d.ts +6 -1
  267. package/esm/presentation/widget/common/configuration/DateFilterCheckbox.d.ts.map +1 -1
  268. package/esm/presentation/widget/common/configuration/DateFilterCheckbox.js +10 -3
  269. package/esm/presentation/widget/insight/DefaultInsightBody/DefaultInsightBody.js +2 -2
  270. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.js +2 -2
  271. package/esm/presentation/widget/insight/configuration/InsightDateDataSetFilter.d.ts.map +1 -1
  272. package/esm/presentation/widget/insight/configuration/InsightDateDataSetFilter.js +1 -1
  273. package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.d.ts +6 -1
  274. package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.d.ts.map +1 -1
  275. package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.js +13 -2
  276. package/esm/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.d.ts.map +1 -1
  277. package/esm/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.js +5 -1
  278. package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.d.ts +1 -1
  279. package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.d.ts.map +1 -1
  280. package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.js +2 -2
  281. package/esm/presentation/widget/richText/configuration/RichTextDateDataSetFilter.d.ts.map +1 -1
  282. package/esm/presentation/widget/richText/configuration/RichTextDateDataSetFilter.js +1 -1
  283. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.d.ts.map +1 -1
  284. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.js +8 -0
  285. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.d.ts +16 -0
  286. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.d.ts.map +1 -0
  287. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.js +19 -0
  288. package/esm/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.d.ts.map +1 -1
  289. package/esm/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.js +11 -1
  290. package/esm/presentation/widget/widget/InsightWidget/DefaultDashboardInsightWidget.js +2 -2
  291. package/esm/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.d.ts.map +1 -1
  292. package/esm/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.js +25 -12
  293. package/esm/sdk-ui-dashboard.d.ts +201 -3
  294. package/package.json +21 -21
  295. package/styles/css/configurationPanel.css +1 -5
  296. package/styles/css/configurationPanel.css.map +1 -1
  297. package/styles/css/filterBar.css +29 -0
  298. package/styles/css/filterBar.css.map +1 -1
  299. package/styles/css/main.css +203 -5
  300. package/styles/css/main.css.map +1 -1
  301. package/styles/css/sidebar.css +165 -0
  302. package/styles/css/sidebar.css.map +1 -1
  303. package/styles/css/visualizationSwitcherWidget.css +8 -0
  304. package/styles/css/visualizationSwitcherWidget.css.map +1 -1
  305. package/styles/scss/configurationPanel.scss +1 -7
  306. package/styles/scss/filterBar.scss +38 -0
  307. package/styles/scss/sidebar.scss +215 -0
  308. package/styles/scss/visualizationSwitcherWidget.scss +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"DateDatasetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/common/configuration/DateDatasetFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiB7E,UAAU,uBAAuB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAChE,iBAAiB,EAAE,OAAO,CAAC;IAE3B,qBAAqB,CAAC,EAAE,mBAAmB,CAAC;IAC5C,0BAA0B,EAAE,OAAO,CAAC;IACpC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,wBAAgB,iBAAiB,CAAC,EAC9B,mBAAmB,EACnB,MAAM,EACN,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,uBAAuB,GAC1B,EAAE,uBAAuB,2CAmFzB"}
1
+ {"version":3,"file":"DateDatasetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/common/configuration/DateDatasetFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiB7E,UAAU,uBAAuB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAChE,iBAAiB,EAAE,OAAO,CAAC;IAE3B,qBAAqB,CAAC,EAAE,mBAAmB,CAAC;IAC5C,0BAA0B,EAAE,OAAO,CAAC;IACpC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,iBAAiB,CAAC,EAC9B,mBAAmB,EACnB,MAAM,EACN,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,GACrB,EAAE,uBAAuB,2CAoFzB"}
@@ -11,7 +11,7 @@ import { DateFilterCheckbox } from "./DateFilterCheckbox.js";
11
11
  import { useDateFilterConfigurationHandling } from "./useDateFilterConfigurationHandling.js";
12
12
  import { useIsSelectedDatasetHidden } from "./useIsSelectedDatasetHidden.js";
13
13
  import { getUnrelatedDateDataset, getUnrelatedDateDatasets } from "./utils.js";
14
- export function DateDatasetFilter({ relatedDateDatasets, widget, dateFilterCheckboxDisabled, dateFromVisualization, isDatasetsLoading, shouldPickDateDataset, shouldOpenDateDatasetPicker, onDateDatasetChanged, isLoadingAdditionalData, }) {
14
+ export function DateDatasetFilter({ relatedDateDatasets, widget, dateFilterCheckboxDisabled, dateFromVisualization, isDatasetsLoading, shouldPickDateDataset, shouldOpenDateDatasetPicker, onDateDatasetChanged, isLoadingAdditionalData, datasetsLoadFailed, }) {
15
15
  const enableUnrelatedItemsVisibility = useDashboardSelector(selectEnableUnavailableItemsVisibility);
16
16
  const catalogDatasetsMap = useDashboardSelector(selectAllCatalogDateDatasetsMap);
17
17
  const selectedDateDataset = widget.dateDataSet && catalogDatasetsMap.get(widget.dateDataSet);
@@ -35,5 +35,5 @@ export function DateDatasetFilter({ relatedDateDatasets, widget, dateFilterCheck
35
35
  const unrelatedDateDataset = relatedDateDatasets &&
36
36
  getUnrelatedDateDataset(relatedDateDatasets, selectedDateDataset, selectedDateDatasetHiddenByObjectAvailability);
37
37
  const unrelatedDateDatasets = getUnrelatedDateDatasets(dateDatasets, relatedDateDatasets);
38
- return (_jsxs("div", { children: [_jsx(DateFilterCheckbox, { relatedDateDatasets: relatedDateDatasets, widget: widget, dateFilterCheckboxDisabled: dateFilterCheckboxDisabled, dateFilterEnabled: isDateFilterEnabled, isDropdownLoading: isDropdownLoading, isFilterLoading: isFilterLoading, selectedDateDataset: selectedDateDataset, selectedDateDatasetHidden: selectedDateDatasetHiddenByObjectAvailability, onDateDatasetFilterEnabled: handleDateFilterEnabled, enableUnrelatedItemsVisibility: enableUnrelatedItemsVisibility }), !!shouldRenderDateDataSetsDropdown && (_jsx(DateDatasetPicker, { relatedDateDatasets: relatedDateDatasets, dateFromVisualization: dateFromVisualization, widget: widget, selectedDateDataset: selectedDateDataset, selectedDateDatasetHidden: selectedDateDatasetHiddenByObjectAvailability, unrelatedDateDataset: unrelatedDateDataset, onDateDatasetChange: handleDateDatasetChanged, autoOpen: shouldOpenDateDatasetPicker, isLoading: isDropdownLoading, enableUnrelatedItemsVisibility: enableUnrelatedItemsVisibility, unrelatedDateDatasets: unrelatedDateDatasets })), !isDropdownLoading && !!duplicatedDateDatasetFilter && _jsx(DateDatasetDuplicityWarning, {})] }));
38
+ return (_jsxs("div", { children: [_jsx(DateFilterCheckbox, { relatedDateDatasets: relatedDateDatasets, widget: widget, dateFilterCheckboxDisabled: dateFilterCheckboxDisabled, dateFilterEnabled: isDateFilterEnabled, isDropdownLoading: isDropdownLoading, isFilterLoading: isFilterLoading, selectedDateDataset: selectedDateDataset, selectedDateDatasetHidden: selectedDateDatasetHiddenByObjectAvailability, onDateDatasetFilterEnabled: handleDateFilterEnabled, enableUnrelatedItemsVisibility: enableUnrelatedItemsVisibility, datasetsLoadFailed: datasetsLoadFailed }), !!shouldRenderDateDataSetsDropdown && (_jsx(DateDatasetPicker, { relatedDateDatasets: relatedDateDatasets, dateFromVisualization: dateFromVisualization, widget: widget, selectedDateDataset: selectedDateDataset, selectedDateDatasetHidden: selectedDateDatasetHiddenByObjectAvailability, unrelatedDateDataset: unrelatedDateDataset, onDateDatasetChange: handleDateDatasetChanged, autoOpen: shouldOpenDateDatasetPicker, isLoading: isDropdownLoading, enableUnrelatedItemsVisibility: enableUnrelatedItemsVisibility, unrelatedDateDatasets: unrelatedDateDatasets })), !isDropdownLoading && !!duplicatedDateDatasetFilter && _jsx(DateDatasetDuplicityWarning, {})] }));
39
39
  }
@@ -10,7 +10,12 @@ interface IDateFilterCheckboxProps {
10
10
  dateFilterCheckboxDisabled?: boolean;
11
11
  onDateDatasetFilterEnabled: (enabled: boolean, dateDatasetRef: ObjRef | undefined) => void;
12
12
  enableUnrelatedItemsVisibility?: boolean;
13
+ /**
14
+ * When the related date datasets query failed, the empty result must not be presented
15
+ * as "cannot be filtered by date" - the related date datasets are unknown, not absent.
16
+ */
17
+ datasetsLoadFailed?: boolean;
13
18
  }
14
- export declare function DateFilterCheckbox({ isDropdownLoading, isFilterLoading, dateFilterEnabled, selectedDateDataset, selectedDateDatasetHidden, dateFilterCheckboxDisabled, relatedDateDatasets, widget, onDateDatasetFilterEnabled, enableUnrelatedItemsVisibility, }: IDateFilterCheckboxProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function DateFilterCheckbox({ isDropdownLoading, isFilterLoading, dateFilterEnabled, selectedDateDataset, selectedDateDatasetHidden, dateFilterCheckboxDisabled, relatedDateDatasets, widget, onDateDatasetFilterEnabled, enableUnrelatedItemsVisibility, datasetsLoadFailed, }: IDateFilterCheckboxProps): import("react/jsx-runtime").JSX.Element;
15
20
  export {};
16
21
  //# sourceMappingURL=DateFilterCheckbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateFilterCheckbox.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/common/configuration/DateFilterCheckbox.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,qBAAqB,CAAC;AAS3G,UAAU,wBAAwB;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAChE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,0BAA0B,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC3F,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED,wBAAgB,kBAAkB,CAAC,EAC/B,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,MAAM,EACN,0BAA0B,EAC1B,8BAA8B,GACjC,EAAE,wBAAwB,2CAuE1B"}
1
+ {"version":3,"file":"DateFilterCheckbox.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/common/configuration/DateFilterCheckbox.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,qBAAqB,CAAC;AAS3G,UAAU,wBAAwB;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAChE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,0BAA0B,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC3F,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,kBAAkB,CAAC,EAC/B,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,MAAM,EACN,0BAA0B,EAC1B,8BAA8B,EAC9B,kBAAkB,GACrB,EAAE,wBAAwB,2CAqF1B"}
@@ -8,17 +8,24 @@ import { ShortenedText } from "@gooddata/sdk-ui-kit";
8
8
  import { useCurrentDateFilterConfig } from "../../../dragAndDrop/useCurrentDateFilterConfig.js";
9
9
  import { getUnrelatedDateDataset } from "./utils.js";
10
10
  const tooltipAlignPoints = [{ align: "cl cr", offset: { x: -20, y: 0 } }];
11
- export function DateFilterCheckbox({ isDropdownLoading, isFilterLoading, dateFilterEnabled, selectedDateDataset, selectedDateDatasetHidden, dateFilterCheckboxDisabled, relatedDateDatasets, widget, onDateDatasetFilterEnabled, enableUnrelatedItemsVisibility, }) {
11
+ export function DateFilterCheckbox({ isDropdownLoading, isFilterLoading, dateFilterEnabled, selectedDateDataset, selectedDateDatasetHidden, dateFilterCheckboxDisabled, relatedDateDatasets, widget, onDateDatasetFilterEnabled, enableUnrelatedItemsVisibility, datasetsLoadFailed, }) {
12
12
  const unrelatedDateDataset = relatedDateDatasets &&
13
13
  getUnrelatedDateDataset(relatedDateDatasets, selectedDateDataset, selectedDateDatasetHidden);
14
14
  const hasRelatedDateDataSets = !!relatedDateDatasets?.length;
15
15
  const showNoRelatedDate = !hasRelatedDateDataSets &&
16
+ !datasetsLoadFailed &&
16
17
  !selectedDateDatasetHidden &&
17
18
  dateFilterEnabled &&
18
19
  !isDropdownLoading &&
19
20
  !dateFilterCheckboxDisabled &&
20
21
  !enableUnrelatedItemsVisibility;
21
- const showError = (!!unrelatedDateDataset || showNoRelatedDate) &&
22
+ const showLoadFailed = !!datasetsLoadFailed &&
23
+ !hasRelatedDateDataSets &&
24
+ !selectedDateDatasetHidden &&
25
+ dateFilterEnabled &&
26
+ !isDropdownLoading &&
27
+ !dateFilterCheckboxDisabled;
28
+ const showError = (!!unrelatedDateDataset || showNoRelatedDate || showLoadFailed) &&
22
29
  !isDropdownLoading &&
23
30
  !isFilterLoading &&
24
31
  dateFilterEnabled &&
@@ -36,5 +43,5 @@ export function DateFilterCheckbox({ isDropdownLoading, isFilterLoading, dateFil
36
43
  const intl = useIntl();
37
44
  const defaultDateFilterName = intl.formatMessage({ id: "dateFilterDropdown.title" });
38
45
  const { title } = useCurrentDateFilterConfig(undefined, defaultDateFilterName);
39
- return (_jsxs("div", { children: [_jsxs("label", { className: classes, htmlFor: "configurationPanel.date.input", children: [_jsx("input", { className: "input-checkbox s-date-filter-checkbox", id: "configurationPanel.date.input", type: "checkbox", checked: !dateFilterCheckboxDisabled && dateFilterEnabled, disabled: dateFilterCheckboxDisabled, onChange: handleChange }), _jsx("span", { className: "input-label-text title", children: _jsx(ShortenedText, { tooltipAlignPoints: tooltipAlignPoints, tagName: "span", className: "title", children: title }) }), isFilterLoading ? _jsx("div", { className: "gd-spinner small" }) : null] }), !isFilterLoading && showNoRelatedDate ? (_jsx("div", { className: "gd-message error s-no-related-date", children: isInsightWidget(widget) ? (_jsx(FormattedMessage, { id: "configurationPanel.vizCantBeFilteredByDate" })) : (_jsx(FormattedMessage, { id: "configurationPanel.kpiCantBeFilteredByDate" })) })) : null] }));
46
+ return (_jsxs("div", { children: [_jsxs("label", { className: classes, htmlFor: "configurationPanel.date.input", children: [_jsx("input", { className: "input-checkbox s-date-filter-checkbox", id: "configurationPanel.date.input", type: "checkbox", checked: !dateFilterCheckboxDisabled && dateFilterEnabled, disabled: dateFilterCheckboxDisabled, onChange: handleChange }), _jsx("span", { className: "input-label-text title", children: _jsx(ShortenedText, { tooltipAlignPoints: tooltipAlignPoints, tagName: "span", className: "title", children: title }) }), isFilterLoading ? _jsx("div", { className: "gd-spinner small" }) : null] }), !isFilterLoading && showLoadFailed ? (_jsx("div", { className: "gd-message error s-date-datasets-load-failed", children: _jsx(FormattedMessage, { id: "configurationPanel.dateDatasetsLoadFailed" }) })) : null, !isFilterLoading && showNoRelatedDate ? (_jsx("div", { className: "gd-message error s-no-related-date", children: isInsightWidget(widget) ? (_jsx(FormattedMessage, { id: "configurationPanel.vizCantBeFilteredByDate" })) : (_jsx(FormattedMessage, { id: "configurationPanel.kpiCantBeFilteredByDate" })) })) : null] }));
40
47
  }
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useMemo } from "react";
4
4
  import { InsightRenderer } from "@gooddata/sdk-ui-ext";
5
5
  import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
6
- import { selectCatalogAttributes } from "../../../../model/store/catalog/catalogSelectors.js";
6
+ import { selectCatalogAttributesWithComputed } from "../../../../model/store/catalog/catalogSelectors.js";
7
7
  import { selectSettings } from "../../../../model/store/config/configSelectors.js";
8
8
  import { selectPreloadedAttributesWithReferences } from "../../../../model/store/tabs/filterContext/filterContextSelectors.js";
9
9
  import { useShowAsTable } from "../../showAsTableButton/useShowAsTable.js";
@@ -19,7 +19,7 @@ export function DefaultInsightBody(props) {
19
19
  const { insight, layerTables: providedLayerTables } = props;
20
20
  const { isWidgetAsTable } = useShowAsTable(props.widget);
21
21
  const settings = useDashboardSelector(selectSettings);
22
- const catalogAttributes = useDashboardSelector(selectCatalogAttributes);
22
+ const catalogAttributes = useDashboardSelector(selectCatalogAttributesWithComputed);
23
23
  const preloadedAttributesWithReferences = useDashboardSelector(selectPreloadedAttributesWithReferences);
24
24
  const computedLayerTables = useMemo(() => providedLayerTables
25
25
  ? undefined
@@ -7,7 +7,7 @@ import { useBackendStrict, useWorkspaceStrict, } from "@gooddata/sdk-ui";
7
7
  import { useDashboardSelector } from "../../../../../model/react/DashboardStoreProvider.js";
8
8
  import { useWidgetExecConfig } from "../../../../../model/react/useWidgetExecConfig.js";
9
9
  import { useWidgetFilters } from "../../../../../model/react/useWidgetFilters.js";
10
- import { selectCatalogAttributes } from "../../../../../model/store/catalog/catalogSelectors.js";
10
+ import { selectCatalogAttributesWithComputed } from "../../../../../model/store/catalog/catalogSelectors.js";
11
11
  import { selectAgGridToken, selectColorPalette, selectIsExport, selectLocale, selectMapboxToken, selectMaxZoomLevel, selectSeparators, selectSettings, } from "../../../../../model/store/config/configSelectors.js";
12
12
  import { selectDrillableItems } from "../../../../../model/store/drill/drillSelectors.js";
13
13
  import { selectPermissions } from "../../../../../model/store/permissions/permissionsSelectors.js";
@@ -56,7 +56,7 @@ export function DrillDialogInsight({ insight, widget, backend, workspace, drillS
56
56
  const { locale, settings, colorPalette } = useDashboardSelector(selectCommonDashboardInsightProps);
57
57
  const permissions = useDashboardSelector(selectPermissions);
58
58
  const chartConfig = useDashboardSelector(selectChartConfig);
59
- const catalogAttributes = useDashboardSelector(selectCatalogAttributes);
59
+ const catalogAttributes = useDashboardSelector(selectCatalogAttributesWithComputed);
60
60
  const preloadedAttributesWithReferences = useDashboardSelector(selectPreloadedAttributesWithReferences);
61
61
  // Loading and rendering
62
62
  const [isVisualizationLoading, setIsVisualizationLoading] = useState(false);
@@ -1 +1 @@
1
- {"version":3,"file":"InsightDateDataSetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/InsightDateDataSetFilter.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,qBAAqB,CAAC;AAcrE,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,wBAAwB,CAAC,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CAwC5E"}
1
+ {"version":3,"file":"InsightDateDataSetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/InsightDateDataSetFilter.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,qBAAqB,CAAC;AAcrE,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,wBAAwB,CAAC,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CAyC5E"}
@@ -22,5 +22,5 @@ export function InsightDateDataSetFilter({ widget }) {
22
22
  queryDateDatasets(insight);
23
23
  }, [queryDateDatasets, insight]);
24
24
  const { handleDateDatasetChanged, shouldOpenDateDatasetPicker } = useDateDatasetFilter(result?.dateDatasets);
25
- return (_jsx(DateDatasetFilter, { widget: widget, dateFilterCheckboxDisabled: false, isDatasetsLoading: status === "running" || status === "pending" || isLoadingAdditionalData, relatedDateDatasets: result?.dateDatasetsOrdered, isLoadingAdditionalData: isLoadingAdditionalData, shouldOpenDateDatasetPicker: shouldOpenDateDatasetPicker, onDateDatasetChanged: handleDateDatasetChanged }));
25
+ return (_jsx(DateDatasetFilter, { widget: widget, dateFilterCheckboxDisabled: false, isDatasetsLoading: status === "running" || status === "pending" || isLoadingAdditionalData, relatedDateDatasets: result?.dateDatasetsOrdered, datasetsLoadFailed: status === "error", isLoadingAdditionalData: isLoadingAdditionalData, shouldOpenDateDatasetPicker: shouldOpenDateDatasetPicker, onDateDatasetChanged: handleDateDatasetChanged }));
26
26
  }
@@ -6,6 +6,11 @@ export interface IDrillConfigListProps {
6
6
  onSetup: (drill: InsightDrillDefinition | IDrillDownAttributeHierarchyDefinition, changedItem: IDrillConfigItem) => void;
7
7
  onIncompleteChange: (changedItem: IDrillConfigItem) => void;
8
8
  disableDrillDown?: boolean;
9
+ /**
10
+ * Local identifiers of insight attributes that are computed attributes. Drill down is not
11
+ * available for them - a computed attribute cannot be part of an attribute hierarchy.
12
+ */
13
+ computedAttributeOriginLocalIds?: string[];
9
14
  }
10
- export declare function InsightDrillConfigList({ drillConfigItems, disableDrillDown, onDelete, onSetup, onIncompleteChange, }: IDrillConfigListProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function InsightDrillConfigList({ drillConfigItems, disableDrillDown, computedAttributeOriginLocalIds, onDelete, onSetup, onIncompleteChange, }: IDrillConfigListProps): import("react/jsx-runtime").JSX.Element;
11
16
  //# sourceMappingURL=InsightDrillConfigList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InsightDrillConfigList.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/InsightDrillConfigList.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAGlE,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,sCAAsC,EAAE,MAAM,yBAAyB,CAAC;AAK7G,MAAM,WAAW,qBAAqB;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACtC,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,CACL,KAAK,EAAE,sBAAsB,GAAG,sCAAsC,EACtE,WAAW,EAAE,gBAAgB,KAC5B,IAAI,CAAC;IACV,kBAAkB,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,sBAAsB,CAAC,EACnC,gBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,OAAO,EACP,kBAAkB,GACrB,EAAE,qBAAqB,2CAiCvB"}
1
+ {"version":3,"file":"InsightDrillConfigList.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/InsightDrillConfigList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIlE,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,sCAAsC,EAAE,MAAM,yBAAyB,CAAC;AAK7G,MAAM,WAAW,qBAAqB;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACtC,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,CACL,KAAK,EAAE,sBAAsB,GAAG,sCAAsC,EACtE,WAAW,EAAE,gBAAgB,KAC5B,IAAI,CAAC;IACV,kBAAkB,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,+BAA+B,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9C;AAED,wBAAgB,sBAAsB,CAAC,EACnC,gBAAqB,EACrB,gBAAgB,EAChB,+BAAoC,EACpC,QAAQ,EACR,OAAO,EACP,kBAAkB,GACrB,EAAE,qBAAqB,2CA6CvB"}
@@ -1,9 +1,20 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2019-2026 GoodData Corporation
3
+ import { useIntl } from "react-intl";
2
4
  import { ScrollableItem } from "@gooddata/sdk-ui-kit";
5
+ import { messages } from "../../../../locales.js";
3
6
  import { DrillConfigItem } from "./InsightDrillConfigItem.js";
4
7
  import { useDrillTargetTypeItems } from "./useDrillTargetTypeItems.js";
5
- export function InsightDrillConfigList({ drillConfigItems = [], disableDrillDown, onDelete, onSetup, onIncompleteChange, }) {
8
+ export function InsightDrillConfigList({ drillConfigItems = [], disableDrillDown, computedAttributeOriginLocalIds = [], onDelete, onSetup, onIncompleteChange, }) {
9
+ const intl = useIntl();
6
10
  const enabledDrillTargetTypeItems = useDrillTargetTypeItems(disableDrillDown);
11
+ const computedAttributeDrillTargetTypeItems = useDrillTargetTypeItems(true, intl.formatMessage(messages.computedAttributeDrillDownToolTip));
12
+ const getDrillTargetTypeItems = (item) => {
13
+ return item.type === "attribute" &&
14
+ computedAttributeOriginLocalIds.includes(item.originLocalIdentifier)
15
+ ? computedAttributeDrillTargetTypeItems
16
+ : enabledDrillTargetTypeItems;
17
+ };
7
18
  const shouldScrollToContainer = (item, isLast) => {
8
19
  return !item.complete && isLast;
9
20
  };
@@ -12,6 +23,6 @@ export function InsightDrillConfigList({ drillConfigItems = [], disableDrillDown
12
23
  };
13
24
  return (_jsx("div", { className: "s-drill-config-list", children: drillConfigItems.map((item, index) => {
14
25
  const shouldScroll = shouldScrollToContainer(item, isLast(index));
15
- return (_jsx(ScrollableItem, { scrollIntoView: shouldScroll, children: _jsx(DrillConfigItem, { item: item, onDelete: onDelete, onSetup: onSetup, onIncompleteChange: onIncompleteChange, enabledDrillTargetTypeItems: enabledDrillTargetTypeItems }, item.localIdentifier + item.drillTargetType) }, item.localIdentifier + item.drillTargetType));
26
+ return (_jsx(ScrollableItem, { scrollIntoView: shouldScroll, children: _jsx(DrillConfigItem, { item: item, onDelete: onDelete, onSetup: onSetup, onIncompleteChange: onIncompleteChange, enabledDrillTargetTypeItems: getDrillTargetTypeItems(item) }, item.localIdentifier + item.drillTargetType) }, item.localIdentifier + item.drillTargetType));
16
27
  }) }));
17
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InsightDrillConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAUlD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,EAAE,EAAE,sBAAsB,2CAgD5E"}
1
+ {"version":3,"file":"InsightDrillConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,MAAM,EAA4D,MAAM,qBAAqB,CAAC;AAU5G;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,EAAE,EAAE,sBAAsB,2CAuD5E"}
@@ -1,6 +1,8 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2019-2026 GoodData Corporation
3
+ import { useMemo } from "react";
3
4
  import { FormattedMessage } from "react-intl";
5
+ import { attributeLocalId, insightAttributes, isComputedAttribute } from "@gooddata/sdk-model";
4
6
  import { Typography } from "@gooddata/sdk-ui-kit";
5
7
  import { DrillFiltersConfig } from "../DrillFilters/DrillFiltersConfig.js";
6
8
  import { DrillOriginSelector } from "../DrillOriginSelector/DrillOriginSelector.js";
@@ -12,8 +14,10 @@ import { useInsightDrillConfigPanel } from "./useInsightDrillConfigPanel.js";
12
14
  */
13
15
  export function InsightDrillConfigPanel({ widgetRef }) {
14
16
  const { widget, insight, drillConfigItems, selectedDrillItem, originSelectorItems, isOriginSelectorVisible, isLoaded, onChangeItem, onOriginSelect, onSetupItem, onUpdateDrillItem, onDeleteItem, } = useInsightDrillConfigPanel({ widgetRef });
17
+ // drill down is never available for computed attributes: they cannot be part of an attribute hierarchy
18
+ const computedAttributeOriginLocalIds = useMemo(() => (insight ? insightAttributes(insight).filter(isComputedAttribute).map(attributeLocalId) : []), [insight]);
15
19
  if (selectedDrillItem) {
16
20
  return _jsx(DrillFiltersConfig, { item: selectedDrillItem, onUpdateDrillItem: onUpdateDrillItem });
17
21
  }
18
- return (_jsxs(_Fragment, { children: [_jsx(ZoomInsightConfiguration, { widget: widget }), _jsxs("div", { className: "configuration-category s-drill-config-panel", children: [_jsx(Typography, { tagName: "h3", children: _jsx("span", { children: _jsx(FormattedMessage, { id: "configurationPanel.drillConfig.interactions" }) }) }), _jsx(InsightDrillConfigList, { disableDrillDown: insight?.insight?.properties?.["controls"]?.disableDrillDown, drillConfigItems: drillConfigItems, onDelete: onDeleteItem, onSetup: onSetupItem, onIncompleteChange: onChangeItem }), isOriginSelectorVisible ? (_jsx(DrillOriginSelector, { widgetRef: widgetRef, items: originSelectorItems, onSelect: onOriginSelect })) : isLoaded ? null : (_jsx("div", { className: "gd-spinner small" }))] })] }));
22
+ return (_jsxs(_Fragment, { children: [_jsx(ZoomInsightConfiguration, { widget: widget }), _jsxs("div", { className: "configuration-category s-drill-config-panel", children: [_jsx(Typography, { tagName: "h3", children: _jsx("span", { children: _jsx(FormattedMessage, { id: "configurationPanel.drillConfig.interactions" }) }) }), _jsx(InsightDrillConfigList, { disableDrillDown: insight?.insight?.properties?.["controls"]?.disableDrillDown, computedAttributeOriginLocalIds: computedAttributeOriginLocalIds, drillConfigItems: drillConfigItems, onDelete: onDeleteItem, onSetup: onSetupItem, onIncompleteChange: onChangeItem }), isOriginSelectorVisible ? (_jsx(DrillOriginSelector, { widgetRef: widgetRef, items: originSelectorItems, onSelect: onOriginSelect })) : isLoaded ? null : (_jsx("div", { className: "gd-spinner small" }))] })] }));
19
23
  }
@@ -7,5 +7,5 @@ export interface IDrillTargetType {
7
7
  tooltipMessage?: string;
8
8
  documentUrl?: string;
9
9
  }
10
- export declare const useDrillTargetTypeItems: (disableDrillDown?: boolean) => IDrillTargetType[];
10
+ export declare const useDrillTargetTypeItems: (disableDrillDown?: boolean, disableDrillDownTooltip?: string) => IDrillTargetType[];
11
11
  //# sourceMappingURL=useDrillTargetTypeItems.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDrillTargetTypeItems.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/useDrillTargetTypeItems.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,iBAAiB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,uBAAuB,sBAAuB,OAAO,KAAG,gBAAgB,EA6CpF,CAAC"}
1
+ {"version":3,"file":"useDrillTargetTypeItems.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/useDrillTargetTypeItems.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,iBAAiB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,uBAAuB,sBACb,OAAO,4BACA,MAAM,KACjC,gBAAgB,EA6ClB,CAAC"}
@@ -5,7 +5,7 @@ import { messages } from "../../../../locales.js";
5
5
  import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
6
6
  import { selectSupportsAttributeHierarchies } from "../../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
7
7
  import { DRILL_TARGET_TYPE } from "../../../drill/types.js";
8
- export const useDrillTargetTypeItems = (disableDrillDown) => {
8
+ export const useDrillTargetTypeItems = (disableDrillDown, disableDrillDownTooltip) => {
9
9
  const intl = useIntl();
10
10
  const supportsAttributeHierarchies = useDashboardSelector(selectSupportsAttributeHierarchies);
11
11
  const dropdownItems = [
@@ -28,7 +28,7 @@ export const useDrillTargetTypeItems = (disableDrillDown) => {
28
28
  title: intl.formatMessage(messages.drillDownConfig),
29
29
  disabled: disableDrillDown,
30
30
  disableTooltipMessage: disableDrillDown
31
- ? intl.formatMessage(messages.disableDrillDownToolTip)
31
+ ? (disableDrillDownTooltip ?? intl.formatMessage(messages.disableDrillDownToolTip))
32
32
  : undefined,
33
33
  tooltipMessage: uiMessages["drilldownTooltip"].id,
34
34
  documentUrl: "https://www.gooddata.com/docs/cloud/create-dashboards/drilling-in-dashboards/set-drill-down/",
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextDateDataSetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/richText/configuration/RichTextDateDataSetFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,qBAAqB,CAAC;AAatE,MAAM,WAAW,+BAA+B;IAC5C,MAAM,EAAE,eAAe,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE,+BAA+B,2CAoCpF"}
1
+ {"version":3,"file":"RichTextDateDataSetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/richText/configuration/RichTextDateDataSetFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,qBAAqB,CAAC;AAatE,MAAM,WAAW,+BAA+B;IAC5C,MAAM,EAAE,eAAe,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE,+BAA+B,2CAqCpF"}
@@ -17,5 +17,5 @@ export function RichTextDateDataSetFilter({ widget }) {
17
17
  queryDateDatasets();
18
18
  }, [queryDateDatasets]);
19
19
  const { handleDateDatasetChanged, shouldOpenDateDatasetPicker } = useDateDatasetFilter(result?.dateDatasets);
20
- return (_jsx(DateDatasetFilter, { widget: widget, dateFilterCheckboxDisabled: false, isDatasetsLoading: status === "running" || status === "pending" || isLoadingAdditionalData, relatedDateDatasets: result?.dateDatasetsOrdered, isLoadingAdditionalData: isLoadingAdditionalData, shouldOpenDateDatasetPicker: shouldOpenDateDatasetPicker, onDateDatasetChanged: handleDateDatasetChanged }));
20
+ return (_jsx(DateDatasetFilter, { widget: widget, dateFilterCheckboxDisabled: false, isDatasetsLoading: status === "running" || status === "pending" || isLoadingAdditionalData, relatedDateDatasets: result?.dateDatasetsOrdered, datasetsLoadFailed: status === "error", isLoadingAdditionalData: isLoadingAdditionalData, shouldOpenDateDatasetPicker: shouldOpenDateDatasetPicker, onDateDatasetChanged: handleDateDatasetChanged }));
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ViewModeDashboardVisualizationSwitcher.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,cAAc,EAGtB,MAAM,qBAAqB,CAAC;AAyB7B,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAGvE;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,EACnD,MAAM,EACN,qBAAqB,EAAE,4BAA4B,EACnD,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,MAAM,EACN,UAAU,GACb,EAAE,oCAAoC,2CAyCtC;AAED,wBAAgB,2CAA2C,4CAE1D;AAED,MAAM,WAAW,mDAAoD,SAAQ,oCAAoC;IAC7G,OAAO,EAAE,QAAQ,CAAC;IAClB,mBAAmB,EAAE,cAAc,CAAC;IACpC,2BAA2B,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,6CAA6C,CAAC,EAC1D,MAAM,EACN,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,UAAU,GACb,EAAE,mDAAmD,2CAmOrD"}
1
+ {"version":3,"file":"ViewModeDashboardVisualizationSwitcher.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,cAAc,EAGtB,MAAM,qBAAqB,CAAC;AA0B7B,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAIvE;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,EACnD,MAAM,EACN,qBAAqB,EAAE,4BAA4B,EACnD,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,MAAM,EACN,UAAU,GACb,EAAE,oCAAoC,2CAwDtC;AAED,wBAAgB,2CAA2C,4CAE1D;AAED,MAAM,WAAW,mDAAoD,SAAQ,oCAAoC;IAC7G,OAAO,EAAE,QAAQ,CAAC;IAClB,mBAAmB,EAAE,cAAc,CAAC;IACpC,2BAA2B,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,6CAA6C,CAAC,EAC1D,MAAM,EACN,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,UAAU,GACb,EAAE,mDAAmD,2CAmOrD"}
@@ -12,6 +12,7 @@ import { useDashboardAlerts } from "../../../model/react/useDashboardAlerting/us
12
12
  import { useDashboardCommand } from "../../../model/react/useDashboardCommand.js";
13
13
  import { selectInsightsMap } from "../../../model/store/insights/insightsSelectors.js";
14
14
  import { selectVisualizationSwitcherActiveVisualizationByWidgetRef } from "../../../model/store/ui/uiSelectors.js";
15
+ import { selectRestrictedInsightsMap } from "../../../model/store/unavailableObjects/unavailableObjectsSelectors.js";
15
16
  import { useDashboardComponentsContext } from "../../dashboardContexts/DashboardComponentsContext.js";
16
17
  import { DashboardItem } from "../../presentationComponents/DashboardItems/DashboardItem.js";
17
18
  import { DashboardItemVisualization } from "../../presentationComponents/DashboardItems/DashboardItemVisualization.js";
@@ -26,6 +27,7 @@ import { useInsightMenu } from "../widget/InsightWidget/useInsightMenu.js";
26
27
  import { VisualizationSwitcherNavigationHeader } from "../widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.js";
27
28
  import { AllVisualizationsDashInsights } from "./AllVisualizationsDashInsights.js";
28
29
  import { useExecutionProgress } from "./useExecutionProgress.js";
30
+ import { ViewModeDashboardVisualizationSwitcherRestricted } from "./ViewModeDashboardVisualizationSwitcherRestricted.js";
29
31
  /**
30
32
  * @internal
31
33
  */
@@ -40,7 +42,13 @@ export function ViewModeDashboardVisualizationSwitcher({ widget, activeVisualiza
40
42
  const activeVisualization = widget.visualizations.find((visualization) => visualization.identifier === activeVisualizationId) ??
41
43
  widget.visualizations[0];
42
44
  const insights = useDashboardSelector(selectInsightsMap);
45
+ const restrictedInsights = useDashboardSelector(selectRestrictedInsightsMap);
43
46
  const insight = activeVisualization ? insights.get(activeVisualization.insight) : undefined;
47
+ // a restricted insight is withheld from the insights map, so this must be decided before the
48
+ // missing-insight branch below, which would otherwise render the empty switcher
49
+ if (activeVisualization && restrictedInsights.has(activeVisualization.insight)) {
50
+ return (_jsx(ViewModeDashboardVisualizationSwitcherRestricted, { widget: widget, activeVisualization: activeVisualization, screen: screen, exportData: exportData, onActiveVisualizationChange: setActiveVisualizationId }));
51
+ }
44
52
  if (!activeVisualization || !insight) {
45
53
  return _jsx(ViewModeDashboardVisualizationSwitcherEmpty, {});
46
54
  }
@@ -0,0 +1,16 @@
1
+ import { type IInsightWidget, type IVisualizationSwitcherWidget, type ScreenSize } from "@gooddata/sdk-model";
2
+ import { type WidgetExportData } from "../../export/types.js";
3
+ export interface IViewModeDashboardVisualizationSwitcherRestrictedProps {
4
+ widget: IVisualizationSwitcherWidget;
5
+ activeVisualization: IInsightWidget;
6
+ screen: ScreenSize;
7
+ exportData?: WidgetExportData;
8
+ onActiveVisualizationChange: (activeVisualizationId: string) => void;
9
+ }
10
+ /**
11
+ * The switcher with a restricted visualization active. The switcher keeps its entry list, so the user
12
+ * can move to a readable visualization; only the body becomes the access placeholder, and no widget
13
+ * menu is offered, which leaves the widget without drill and without export.
14
+ */
15
+ export declare function ViewModeDashboardVisualizationSwitcherRestricted({ widget, activeVisualization, screen, exportData, onActiveVisualizationChange, }: IViewModeDashboardVisualizationSwitcherRestrictedProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=ViewModeDashboardVisualizationSwitcherRestricted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewModeDashboardVisualizationSwitcherRestricted.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,4BAA4B,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI9G,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D,MAAM,WAAW,sDAAsD;IACnE,MAAM,EAAE,4BAA4B,CAAC;IACrC,mBAAmB,EAAE,cAAc,CAAC;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,2BAA2B,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED;;;;GAIG;AACH,wBAAgB,gDAAgD,CAAC,EAC7D,MAAM,EACN,mBAAmB,EACnB,MAAM,EACN,UAAU,EACV,2BAA2B,GAC9B,EAAE,sDAAsD,2CAqCxD"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import cx from "classnames";
4
+ import { useId } from "@gooddata/sdk-ui-kit";
5
+ import { useDashboardComponentsContext } from "../../dashboardContexts/DashboardComponentsContext.js";
6
+ import { DashboardItem } from "../../presentationComponents/DashboardItems/DashboardItem.js";
7
+ import { DashboardItemVisualization } from "../../presentationComponents/DashboardItems/DashboardItemVisualization.js";
8
+ import { VisualizationSwitcherNavigationHeader } from "../widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.js";
9
+ /**
10
+ * The switcher with a restricted visualization active. The switcher keeps its entry list, so the user
11
+ * can move to a readable visualization; only the body becomes the access placeholder, and no widget
12
+ * menu is offered, which leaves the widget without drill and without export.
13
+ */
14
+ export function ViewModeDashboardVisualizationSwitcherRestricted({ widget, activeVisualization, screen, exportData, onActiveVisualizationChange, }) {
15
+ const titleId = useId();
16
+ const { RestrictedPlaceholderComponentProvider } = useDashboardComponentsContext();
17
+ const Content = RestrictedPlaceholderComponentProvider(activeVisualization);
18
+ return (_jsx(DashboardItem, { className: cx("type-visualization", "gd-dashboard-view-widget"), screen: screen, titleId: titleId, children: _jsx(DashboardItemVisualization, { isExport: !!exportData, renderHeadline: (clientHeight, clientWidth) => (_jsx(VisualizationSwitcherNavigationHeader, { widget: widget, clientHeight: clientHeight, clientWidth: clientWidth, titleId: titleId, activeVisualization: activeVisualization, onActiveVisualizationChange: onActiveVisualizationChange, exportData: exportData?.title })), children: ({ clientHeight, clientWidth }) => (_jsx("div", { className: "gd-visualization-switcher-visible-visualization", children: _jsx("div", { className: "visualization-content", children: _jsx(Content, { width: clientWidth, height: clientHeight }) }) })) }) }));
19
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardWidgetInsightGuard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAK3C,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEtE,UAAU,iCAAkC,SAAQ,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC;IACpG,SAAS,EAAE,aAAa,CAAC,mCAAmC,CAAC,CAAC;CACjE;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iCAAiC,2CAMnF"}
1
+ {"version":3,"file":"DashboardWidgetInsightGuard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEtE,UAAU,iCAAkC,SAAQ,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC;IACpG,SAAS,EAAE,aAAa,CAAC,mCAAmC,CAAC,CAAC;CACjE;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iCAAiC,2CAsBnF"}
@@ -1,12 +1,22 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
3
+ import { useIsWidgetRestricted } from "../../../../model/react/useIsWidgetRestricted.js";
3
4
  import { selectInsightsMap } from "../../../../model/store/insights/insightsSelectors.js";
5
+ import { useDashboardComponentsContext } from "../../../dashboardContexts/DashboardComponentsContext.js";
6
+ import { RestrictedPlaceholder } from "../../common/RestrictedPlaceholder.js";
4
7
  // Sometimes this component is rendered even before insights are ready, which blows up.
5
8
  // Since the behavior is nearly impossible to replicate reliably, let's be defensive here and not render
6
9
  // anything until the insights "catch up".
7
10
  export function DashboardWidgetInsightGuard(props) {
8
- const { widget, Component } = props;
11
+ const { widget, screen, dashboardItemClasses, exportData, Component } = props;
9
12
  const insights = useDashboardSelector(selectInsightsMap);
13
+ const isRestricted = useIsWidgetRestricted(widget);
14
+ const { RestrictedPlaceholderComponentProvider } = useDashboardComponentsContext();
15
+ // view, edit and export modes all reach the widget through this guard, so short-circuiting here is
16
+ // what strips the config panel, menu and selection from a restricted widget in edit mode
17
+ if (isRestricted) {
18
+ return (_jsx(RestrictedPlaceholder, { screen: screen, dashboardItemClasses: dashboardItemClasses, exportData: exportData, Content: RestrictedPlaceholderComponentProvider(widget) }));
19
+ }
10
20
  const insight = insights.get(widget.insight);
11
21
  return _jsx(Component, { ...props, insight: insight });
12
22
  }
@@ -8,7 +8,7 @@ import { useId } from "@gooddata/sdk-ui-kit";
8
8
  import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
9
9
  import { useDashboardScheduledEmails } from "../../../../model/react/useDasboardScheduledEmails/useDashboardScheduledEmails.js";
10
10
  import { useDashboardAlerts } from "../../../../model/react/useDashboardAlerting/useDashboardAlerts.js";
11
- import { selectCatalogAttributes } from "../../../../model/store/catalog/catalogSelectors.js";
11
+ import { selectCatalogAttributesWithComputed } from "../../../../model/store/catalog/catalogSelectors.js";
12
12
  import { selectSettings } from "../../../../model/store/config/configSelectors.js";
13
13
  import { selectRenderMode } from "../../../../model/store/renderMode/renderModeSelectors.js";
14
14
  import { selectPreloadedAttributesWithReferences } from "../../../../model/store/tabs/filterContext/filterContextSelectors.js";
@@ -39,7 +39,7 @@ export function DefaultDashboardInsightWidget(props) {
39
39
  function DefaultDashboardInsightWidgetCore({ widget, insight, screen, onError, onExportReady, onLoadingChanged, dashboardItemClasses, exportData, }) {
40
40
  const intl = useIntl();
41
41
  const settings = useDashboardSelector(selectSettings);
42
- const catalogAttributes = useDashboardSelector(selectCatalogAttributes);
42
+ const catalogAttributes = useDashboardSelector(selectCatalogAttributesWithComputed);
43
43
  const preloadedAttributesWithReferences = useDashboardSelector(selectPreloadedAttributesWithReferences);
44
44
  const renderMode = useDashboardSelector(selectRenderMode);
45
45
  const isExportMode = renderMode === "export";
@@ -1 +1 @@
1
- {"version":3,"file":"VisualizationSwitcherNavigationHeader.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAU7F,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAG3E,UAAU,2CAA2C;IACjD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,mBAAmB,EAAE,cAAc,CAAC;IACpC,MAAM,EAAE,4BAA4B,CAAC;IACrC,2BAA2B,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;CACnB;AAaD,wBAAgB,qCAAqC,CAAC,EAClD,MAAM,EACN,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,OAAO,GACV,EAAE,2CAA2C,2CAmD7C"}
1
+ {"version":3,"file":"VisualizationSwitcherNavigationHeader.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAa7F,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAG3E,UAAU,2CAA2C;IACjD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,mBAAmB,EAAE,cAAc,CAAC;IACpC,MAAM,EAAE,4BAA4B,CAAC;IACrC,2BAA2B,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;CACnB;AAaD,wBAAgB,qCAAqC,CAAC,EAClD,MAAM,EACN,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,OAAO,GACV,EAAE,2CAA2C,2CAiE7C"}
@@ -1,9 +1,12 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2020-2026 GoodData Corporation
3
3
  import { forwardRef, useCallback, useMemo } from "react";
4
4
  import cx from "classnames";
5
- import { Dropdown, UiListbox, } from "@gooddata/sdk-ui-kit";
5
+ import { useIntl } from "react-intl";
6
+ import { Dropdown, UiIcon, UiListbox, } from "@gooddata/sdk-ui-kit";
7
+ import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
6
8
  import { useDashboardUserInteraction } from "../../../../model/react/useDashboardUserInteraction.js";
9
+ import { selectRestrictedInsightsMap } from "../../../../model/store/unavailableObjects/unavailableObjectsSelectors.js";
7
10
  import { DashboardItemHeadline } from "../../../presentationComponents/DashboardItems/DashboardItemHeadline.js";
8
11
  const alignPoints = [
9
12
  {
@@ -17,23 +20,33 @@ const alignPoints = [
17
20
  ];
18
21
  export function VisualizationSwitcherNavigationHeader({ widget, clientWidth, clientHeight, activeVisualization, onActiveVisualizationChange, exportData, titleId, }) {
19
22
  const userInteraction = useDashboardUserInteraction();
23
+ const intl = useIntl();
24
+ const restrictedInsights = useDashboardSelector(selectRestrictedInsightsMap);
25
+ const restrictedEntryTitle = intl.formatMessage({ id: "visualizationSwitcher.restrictedEntry" });
20
26
  const items = useMemo(() => {
21
- return widget.visualizations.map((visualization) => ({
22
- type: "interactive",
23
- id: visualization.identifier,
24
- stringTitle: visualization.title,
25
- data: visualization,
26
- }));
27
- }, [widget.visualizations]);
27
+ return widget.visualizations.map((visualization) => {
28
+ // a stored entry title names the visualization, so a restricted entry must never show it
29
+ const isRestricted = restrictedInsights.has(visualization.insight);
30
+ return {
31
+ type: "interactive",
32
+ id: visualization.identifier,
33
+ stringTitle: isRestricted ? restrictedEntryTitle : visualization.title,
34
+ icon: isRestricted ? "lock" : undefined,
35
+ data: visualization,
36
+ };
37
+ });
38
+ }, [widget.visualizations, restrictedInsights, restrictedEntryTitle]);
28
39
  const handleSelectVisualization = useCallback((item) => {
29
40
  onActiveVisualizationChange(item.id);
30
41
  userInteraction.visualizationSwitcherInteraction("visualizationSwitcherSwitched");
31
42
  }, [onActiveVisualizationChange, userInteraction]);
32
- return (_jsx(Dropdown, { alignPoints: alignPoints, accessibilityConfig: { popupRole: "listbox" }, autofocusOnOpen: true, renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiListbox, { items: items, selectedItemId: activeVisualization.identifier, onSelect: handleSelectVisualization, onClose: closeDropdown, ariaAttributes: ariaAttributes, maxWidth: clientWidth ?? 200, dataTestId: "s-visualization-switcher-widget-list", itemDataTestId: "s-visualization-switcher-widget-list-item" })), renderButton: ({ toggleDropdown, isOpen, ariaAttributes, buttonRef }) => (_jsx(VisualizationSwitcherNavigationHeaderButton, { title: activeVisualization.title, isOpen: isOpen, toggleDropdown: toggleDropdown, clientHeight: clientHeight, exportData: exportData, ariaAttributes: ariaAttributes, titleId: titleId, ref: buttonRef })) }));
43
+ return (_jsx(Dropdown, { alignPoints: alignPoints, accessibilityConfig: { popupRole: "listbox" }, autofocusOnOpen: true, renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiListbox, { items: items, selectedItemId: activeVisualization.identifier, onSelect: handleSelectVisualization, onClose: closeDropdown, ariaAttributes: ariaAttributes, maxWidth: clientWidth ?? 200, dataTestId: "s-visualization-switcher-widget-list", itemDataTestId: "s-visualization-switcher-widget-list-item" })), renderButton: ({ toggleDropdown, isOpen, ariaAttributes, buttonRef }) => (_jsx(VisualizationSwitcherNavigationHeaderButton, { isRestricted: restrictedInsights.has(activeVisualization.insight), title: restrictedInsights.has(activeVisualization.insight)
44
+ ? restrictedEntryTitle
45
+ : activeVisualization.title, isOpen: isOpen, toggleDropdown: toggleDropdown, clientHeight: clientHeight, exportData: exportData, ariaAttributes: ariaAttributes, titleId: titleId, ref: buttonRef })) }));
33
46
  }
34
- const VisualizationSwitcherNavigationHeaderButton = forwardRef(function VisualizationSwitcherNavigationHeaderButton({ isOpen, toggleDropdown, title, clientHeight, ariaAttributes, exportData, titleId }, ref) {
47
+ const VisualizationSwitcherNavigationHeaderButton = forwardRef(function VisualizationSwitcherNavigationHeaderButton({ isOpen, toggleDropdown, title, isRestricted, clientHeight, ariaAttributes, exportData, titleId }, ref) {
35
48
  const classNames = cx("gd-visualization-switcher-widget-header s-visualization-switcher-widget-header", {
36
49
  "is-open": isOpen,
37
50
  });
38
- return (_jsx("div", { ref: ref, className: classNames, onClick: toggleDropdown, tabIndex: 0, ...exportData, ...ariaAttributes, children: _jsx(DashboardItemHeadline, { clientHeight: clientHeight, title: title, titleId: titleId }) }));
51
+ return (_jsx("div", { ref: ref, className: classNames, onClick: toggleDropdown, tabIndex: 0, ...exportData, ...ariaAttributes, children: _jsxs("div", { className: "gd-visualization-switcher-widget-header-title", children: [isRestricted ? _jsx(UiIcon, { type: "lock", size: 14, color: "complementary-7" }) : null, _jsx(DashboardItemHeadline, { clientHeight: clientHeight, title: title, titleId: titleId })] }) }));
39
52
  });