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

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 (307) hide show
  1. package/esm/__version.d.ts +1 -1
  2. package/esm/__version.js +1 -1
  3. package/esm/_staging/catalog/computedAttributes.d.ts +43 -0
  4. package/esm/_staging/catalog/computedAttributes.d.ts.map +1 -0
  5. package/esm/_staging/catalog/computedAttributes.js +93 -0
  6. package/esm/_staging/catalog/displayFormMap.d.ts +3 -2
  7. package/esm/_staging/catalog/displayFormMap.d.ts.map +1 -1
  8. package/esm/_staging/catalog/displayFormMap.js +9 -3
  9. package/esm/_staging/metadata/objRefMap.d.ts.map +1 -1
  10. package/esm/_staging/metadata/objRefMap.js +11 -1
  11. package/esm/index.d.ts +9 -5
  12. package/esm/index.d.ts.map +1 -1
  13. package/esm/index.js +7 -3
  14. package/esm/kdaDialog/composition/hooks/useKdaValidAttributes.js +2 -2
  15. package/esm/kdaDialog/dialog/hooks/useValidAttributes.d.ts.map +1 -1
  16. package/esm/kdaDialog/dialog/hooks/useValidAttributes.js +21 -6
  17. package/esm/kdaDialog/hooks/useAttribute.d.ts.map +1 -1
  18. package/esm/kdaDialog/hooks/useAttribute.js +16 -8
  19. package/esm/locales.d.ts +3 -0
  20. package/esm/locales.d.ts.map +1 -1
  21. package/esm/locales.js +3 -0
  22. package/esm/model/commandHandlers/dashboard/common/loadAvailableDisplayFormRefs.d.ts.map +1 -1
  23. package/esm/model/commandHandlers/dashboard/common/loadAvailableDisplayFormRefs.js +15 -6
  24. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts +2 -3
  25. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
  26. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +26 -17
  27. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.d.ts +6 -1
  28. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.d.ts.map +1 -1
  29. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.js +37 -4
  30. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts +7 -2
  31. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts.map +1 -1
  32. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +15 -3
  33. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/filterDisplayFormValidation.d.ts.map +1 -1
  34. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/filterDisplayFormValidation.js +10 -3
  35. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/uniqueFiltersValidation.d.ts.map +1 -1
  36. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/uniqueFiltersValidation.js +24 -14
  37. package/esm/model/commandHandlers/scheduledEmail/createScheduledEmailHandler.js +2 -2
  38. package/esm/model/commandHandlers/scheduledEmail/saveScheduledEmailHandler.js +2 -2
  39. package/esm/model/commandHandlers/widgets/attributeHierarchyModifiedHandler.d.ts.map +1 -1
  40. package/esm/model/commandHandlers/widgets/attributeHierarchyModifiedHandler.js +6 -0
  41. package/esm/model/commandHandlers/widgets/exportInsightWidgetHandler.d.ts.map +1 -1
  42. package/esm/model/commandHandlers/widgets/exportInsightWidgetHandler.js +2 -2
  43. package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.js +2 -2
  44. package/esm/model/queries/base.d.ts +1 -1
  45. package/esm/model/queries/base.d.ts.map +1 -1
  46. package/esm/model/queries/base.js +1 -1
  47. package/esm/model/queries/computedAttributeExpression.d.ts +27 -0
  48. package/esm/model/queries/computedAttributeExpression.d.ts.map +1 -0
  49. package/esm/model/queries/computedAttributeExpression.js +21 -0
  50. package/esm/model/queries/connectedAttributes.d.ts +19 -1
  51. package/esm/model/queries/connectedAttributes.d.ts.map +1 -1
  52. package/esm/model/queries/connectedAttributes.js +3 -1
  53. package/esm/model/queries/index.d.ts +2 -1
  54. package/esm/model/queries/index.d.ts.map +1 -1
  55. package/esm/model/queryServices/index.d.ts +1 -1
  56. package/esm/model/queryServices/index.d.ts.map +1 -1
  57. package/esm/model/queryServices/index.js +2 -0
  58. package/esm/model/queryServices/queryAttributeByDisplayForm.d.ts.map +1 -1
  59. package/esm/model/queryServices/queryAttributeByDisplayForm.js +12 -3
  60. package/esm/model/queryServices/queryAttributeDataset.d.ts.map +1 -1
  61. package/esm/model/queryServices/queryAttributeDataset.js +9 -1
  62. package/esm/model/queryServices/queryComputedAttributeExpression.d.ts +4 -0
  63. package/esm/model/queryServices/queryComputedAttributeExpression.d.ts.map +1 -0
  64. package/esm/model/queryServices/queryComputedAttributeExpression.js +17 -0
  65. package/esm/model/queryServices/queryConnectedAttributes.d.ts.map +1 -1
  66. package/esm/model/queryServices/queryConnectedAttributes.js +20 -5
  67. package/esm/model/queryServices/queryInsightAttributesMeta.d.ts.map +1 -1
  68. package/esm/model/queryServices/queryInsightAttributesMeta.js +20 -11
  69. package/esm/model/react/useIsWidgetRestricted.d.ts +9 -0
  70. package/esm/model/react/useIsWidgetRestricted.d.ts.map +1 -0
  71. package/esm/model/react/useIsWidgetRestricted.js +14 -0
  72. package/esm/model/store/catalog/catalogReducers.d.ts +2 -1
  73. package/esm/model/store/catalog/catalogReducers.d.ts.map +1 -1
  74. package/esm/model/store/catalog/catalogReducers.js +2 -1
  75. package/esm/model/store/catalog/catalogSelectors.d.ts +21 -1
  76. package/esm/model/store/catalog/catalogSelectors.d.ts.map +1 -1
  77. package/esm/model/store/catalog/catalogSelectors.js +26 -2
  78. package/esm/model/store/catalog/catalogState.d.ts +8 -1
  79. package/esm/model/store/catalog/catalogState.d.ts.map +1 -1
  80. package/esm/model/store/catalog/catalogState.js +1 -0
  81. package/esm/model/store/config/configSelectors.d.ts +11 -0
  82. package/esm/model/store/config/configSelectors.d.ts.map +1 -1
  83. package/esm/model/store/config/configSelectors.js +13 -0
  84. package/esm/model/store/insights/insightsSelectors.js +3 -3
  85. package/esm/model/store/tabs/filterContext/filterContextSelectors.d.ts.map +1 -1
  86. package/esm/model/store/tabs/filterContext/filterContextSelectors.js +8 -4
  87. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.d.ts +8 -0
  88. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.d.ts.map +1 -1
  89. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.js +8 -0
  90. package/esm/model/utils/displayFormResolver.d.ts.map +1 -1
  91. package/esm/model/utils/displayFormResolver.js +11 -1
  92. package/esm/plugins/customizationApis/customizationBuilder.d.ts.map +1 -1
  93. package/esm/plugins/customizationApis/customizationBuilder.js +1 -0
  94. package/esm/plugins/customizationApis/insightCustomizer.d.ts +4 -2
  95. package/esm/plugins/customizationApis/insightCustomizer.d.ts.map +1 -1
  96. package/esm/plugins/customizationApis/insightCustomizer.js +43 -3
  97. package/esm/plugins/customizer.d.ts +14 -1
  98. package/esm/plugins/customizer.d.ts.map +1 -1
  99. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  100. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +1 -1
  101. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts.map +1 -1
  102. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +23 -58
  103. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts +33 -0
  104. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts.map +1 -0
  105. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.js +61 -0
  106. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts +3 -17
  107. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts.map +1 -1
  108. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.js +3 -52
  109. package/esm/presentation/automations/alerting/state/useAlertFormState.js +1 -1
  110. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +2 -2
  111. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  112. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +1 -1
  113. package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogShell.js +2 -5
  114. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.d.ts.map +1 -1
  115. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +22 -40
  116. package/esm/presentation/automations/scheduledEmail/state/useSaveScheduledEmailToBackend.d.ts.map +1 -1
  117. package/esm/presentation/automations/scheduledEmail/state/useSaveScheduledEmailToBackend.js +14 -3
  118. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts +27 -0
  119. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts.map +1 -0
  120. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.js +142 -0
  121. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts +4 -6
  122. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts.map +1 -1
  123. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.js +9 -151
  124. package/esm/presentation/automations/shared/filters/conversions.d.ts +4 -0
  125. package/esm/presentation/automations/shared/filters/conversions.d.ts.map +1 -1
  126. package/esm/presentation/automations/shared/filters/conversions.js +28 -24
  127. package/esm/presentation/automations/shared/hooks/useShallowStable.d.ts +10 -0
  128. package/esm/presentation/automations/shared/hooks/useShallowStable.d.ts.map +1 -0
  129. package/esm/presentation/automations/shared/hooks/useShallowStable.js +18 -0
  130. package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.d.ts.map +1 -1
  131. package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.js +17 -4
  132. package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.d.ts +10 -0
  133. package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.d.ts.map +1 -0
  134. package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.js +19 -0
  135. package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.d.ts.map +1 -1
  136. package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.js +8 -2
  137. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeChrome.d.ts.map +1 -1
  138. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeChrome.js +4 -2
  139. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.d.ts +8 -3
  140. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.d.ts.map +1 -1
  141. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.js +65 -25
  142. package/esm/presentation/dashboard/components/DashboardInner.d.ts.map +1 -1
  143. package/esm/presentation/dashboard/components/DashboardInner.js +4 -4
  144. package/esm/presentation/dashboard/components/DashboardRenderer.d.ts.map +1 -1
  145. package/esm/presentation/dashboard/components/DashboardRenderer.js +2 -2
  146. package/esm/presentation/dashboard/hooks/useDashboard.d.ts +2 -1
  147. package/esm/presentation/dashboard/hooks/useDashboard.d.ts.map +1 -1
  148. package/esm/presentation/dashboard/hooks/useDashboard.js +7 -1
  149. package/esm/presentation/dashboard/types.d.ts +14 -1
  150. package/esm/presentation/dashboard/types.d.ts.map +1 -1
  151. package/esm/presentation/dashboardContexts/DashboardComponentsContext.d.ts +2 -1
  152. package/esm/presentation/dashboardContexts/DashboardComponentsContext.d.ts.map +1 -1
  153. package/esm/presentation/dashboardContexts/DashboardComponentsContext.js +1 -0
  154. package/esm/presentation/dashboardContexts/types.d.ts +20 -0
  155. package/esm/presentation/dashboardContexts/types.d.ts.map +1 -1
  156. package/esm/presentation/dragAndDrop/draggableAttributeFilter/DefaultAttributeFilterDraggingComponent.d.ts.map +1 -1
  157. package/esm/presentation/dragAndDrop/draggableAttributeFilter/DefaultAttributeFilterDraggingComponent.js +4 -3
  158. package/esm/presentation/export/useExportData.js +2 -2
  159. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltip.d.ts.map +1 -1
  160. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltip.js +8 -2
  161. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.d.ts +12 -1
  162. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.d.ts.map +1 -1
  163. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.js +19 -2
  164. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/displayForms/AttributeDisplayFormsDropdown.d.ts.map +1 -1
  165. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/displayForms/AttributeDisplayFormsDropdown.js +3 -2
  166. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.d.ts +14 -0
  167. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.d.ts.map +1 -0
  168. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.js +28 -0
  169. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useDisplayFormConfiguration.js +2 -2
  170. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useValidNeighbourAttributes.d.ts.map +1 -1
  171. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useValidNeighbourAttributes.js +12 -2
  172. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/shared/limitingItemsHook.d.ts.map +1 -1
  173. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/shared/limitingItemsHook.js +6 -5
  174. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/parentFilters/ParentFiltersDisabledItem.js +2 -2
  175. package/esm/presentation/filterBar/filterBar/DefaultFilterBarItem.js +2 -2
  176. package/esm/presentation/filterBar/filterBar/useFiltersWithAddedPlaceholder.js +2 -2
  177. package/esm/presentation/filterBar/measureValueFilter/useDashboardMeasureValueFilterData.d.ts.map +1 -1
  178. package/esm/presentation/filterBar/measureValueFilter/useDashboardMeasureValueFilterData.js +55 -17
  179. package/esm/presentation/flexibleLayout/DashboardLayoutWidget.d.ts.map +1 -1
  180. package/esm/presentation/flexibleLayout/DashboardLayoutWidget.js +6 -1
  181. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +5 -0
  182. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  183. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +5 -0
  184. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +5 -0
  185. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  186. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +5 -0
  187. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +5 -0
  188. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  189. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +5 -0
  190. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +40 -0
  191. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  192. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +40 -0
  193. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +5 -0
  194. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  195. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +5 -0
  196. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +5 -0
  197. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  198. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +5 -0
  199. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +5 -0
  200. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  201. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +5 -0
  202. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +5 -0
  203. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  204. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +5 -0
  205. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +5 -0
  206. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  207. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +5 -0
  208. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +5 -0
  209. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  210. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +5 -0
  211. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +5 -0
  212. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  213. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +5 -0
  214. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +5 -0
  215. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  216. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +5 -0
  217. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +5 -0
  218. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  219. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +5 -0
  220. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +5 -0
  221. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  222. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +5 -0
  223. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +5 -0
  224. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  225. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +5 -0
  226. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +5 -0
  227. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  228. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +5 -0
  229. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +5 -0
  230. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  231. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +5 -0
  232. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +5 -0
  233. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  234. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +5 -0
  235. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +5 -0
  236. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  237. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +5 -0
  238. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +5 -0
  239. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  240. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +5 -0
  241. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +5 -0
  242. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  243. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +5 -0
  244. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +5 -0
  245. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  246. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +5 -0
  247. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +5 -0
  248. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  249. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +5 -0
  250. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +5 -0
  251. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  252. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +5 -0
  253. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +5 -0
  254. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  255. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +5 -0
  256. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +5 -0
  257. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  258. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +5 -0
  259. package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts +54 -0
  260. package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts.map +1 -0
  261. package/esm/presentation/widget/common/RestrictedPlaceholder.js +49 -0
  262. package/esm/presentation/widget/common/configuration/DateDatasetFilter.d.ts +6 -1
  263. package/esm/presentation/widget/common/configuration/DateDatasetFilter.d.ts.map +1 -1
  264. package/esm/presentation/widget/common/configuration/DateDatasetFilter.js +2 -2
  265. package/esm/presentation/widget/common/configuration/DateFilterCheckbox.d.ts +6 -1
  266. package/esm/presentation/widget/common/configuration/DateFilterCheckbox.d.ts.map +1 -1
  267. package/esm/presentation/widget/common/configuration/DateFilterCheckbox.js +10 -3
  268. package/esm/presentation/widget/insight/DefaultInsightBody/DefaultInsightBody.js +2 -2
  269. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.js +2 -2
  270. package/esm/presentation/widget/insight/configuration/InsightDateDataSetFilter.d.ts.map +1 -1
  271. package/esm/presentation/widget/insight/configuration/InsightDateDataSetFilter.js +1 -1
  272. package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.d.ts +6 -1
  273. package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.d.ts.map +1 -1
  274. package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.js +13 -2
  275. package/esm/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.d.ts.map +1 -1
  276. package/esm/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.js +5 -1
  277. package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.d.ts +1 -1
  278. package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.d.ts.map +1 -1
  279. package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.js +2 -2
  280. package/esm/presentation/widget/richText/configuration/RichTextDateDataSetFilter.d.ts.map +1 -1
  281. package/esm/presentation/widget/richText/configuration/RichTextDateDataSetFilter.js +1 -1
  282. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.d.ts.map +1 -1
  283. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.js +8 -0
  284. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.d.ts +16 -0
  285. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.d.ts.map +1 -0
  286. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.js +19 -0
  287. package/esm/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.d.ts.map +1 -1
  288. package/esm/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.js +11 -1
  289. package/esm/presentation/widget/widget/InsightWidget/DefaultDashboardInsightWidget.js +2 -2
  290. package/esm/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.d.ts.map +1 -1
  291. package/esm/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.js +25 -12
  292. package/esm/sdk-ui-dashboard.d.ts +201 -3
  293. package/package.json +21 -21
  294. package/styles/css/configurationPanel.css +1 -5
  295. package/styles/css/configurationPanel.css.map +1 -1
  296. package/styles/css/filterBar.css +29 -0
  297. package/styles/css/filterBar.css.map +1 -1
  298. package/styles/css/main.css +203 -5
  299. package/styles/css/main.css.map +1 -1
  300. package/styles/css/sidebar.css +165 -0
  301. package/styles/css/sidebar.css.map +1 -1
  302. package/styles/css/visualizationSwitcherWidget.css +8 -0
  303. package/styles/css/visualizationSwitcherWidget.css.map +1 -1
  304. package/styles/scss/configurationPanel.scss +1 -7
  305. package/styles/scss/filterBar.scss +38 -0
  306. package/styles/scss/sidebar.scss +215 -0
  307. package/styles/scss/visualizationSwitcherWidget.scss +9 -0
@@ -4,7 +4,7 @@ import { defWithDimensions, defaultDimensionsGenerator, idRef, insightRef, insig
4
4
  import { fillMissingTitles, resolveDefaultDisplayFormRefForDisplayForm, resolveMessages, } from "@gooddata/sdk-ui";
5
5
  import { scheduledEmailCreated } from "../../events/scheduledEmail.js";
6
6
  import { queryWithInsight } from "../../queryServices/queryWidgetFilters.js";
7
- import { selectCatalogAttributes } from "../../store/catalog/catalogSelectors.js";
7
+ import { selectCatalogAttributesWithComputed } from "../../store/catalog/catalogSelectors.js";
8
8
  import { selectEnableStringParameters, selectLocale, selectSettings, } from "../../store/config/configSelectors.js";
9
9
  import { selectExecutionResultByRef } from "../../store/executionResults/executionResultsSelectors.js";
10
10
  import { selectAutomationCommonDateFilterId } from "../../store/filtering/dashboardFilterSelectors.js";
@@ -63,7 +63,7 @@ export function* createScheduledEmailHandler(ctx, cmd) {
63
63
  commonDateFilterId,
64
64
  });
65
65
  const settings = yield select(selectSettings);
66
- const catalogAttributes = yield select(selectCatalogAttributes);
66
+ const catalogAttributes = yield select(selectCatalogAttributesWithComputed);
67
67
  const preloadedAttributesWithReferences = yield select(selectPreloadedAttributesWithReferences);
68
68
  const preparedGeoRawExport = lookupInsight && filledInsight && preparedExecutionDefinitionWithFilters
69
69
  ? prepareGeoRawExportDefinition({
@@ -4,7 +4,7 @@ import { defWithDimensions, defaultDimensionsGenerator, idRef, insightRef, insig
4
4
  import { fillMissingTitles, resolveDefaultDisplayFormRefForDisplayForm, resolveMessages, } from "@gooddata/sdk-ui";
5
5
  import { scheduledEmailSaved } from "../../events/scheduledEmail.js";
6
6
  import { queryWithInsight } from "../../queryServices/queryWidgetFilters.js";
7
- import { selectCatalogAttributes } from "../../store/catalog/catalogSelectors.js";
7
+ import { selectCatalogAttributesWithComputed } from "../../store/catalog/catalogSelectors.js";
8
8
  import { selectEnableStringParameters, selectLocale, selectSettings, } from "../../store/config/configSelectors.js";
9
9
  import { selectExecutionResultByRef } from "../../store/executionResults/executionResultsSelectors.js";
10
10
  import { selectAutomationCommonDateFilterId } from "../../store/filtering/dashboardFilterSelectors.js";
@@ -67,7 +67,7 @@ export function* saveScheduledEmailHandler(ctx, cmd) {
67
67
  commonDateFilterId,
68
68
  });
69
69
  const settings = yield select(selectSettings);
70
- const catalogAttributes = yield select(selectCatalogAttributes);
70
+ const catalogAttributes = yield select(selectCatalogAttributesWithComputed);
71
71
  const preloadedAttributesWithReferences = yield select(selectPreloadedAttributesWithReferences);
72
72
  const preparedGeoRawExport = lookupInsight && filledInsight && preparedExecutionDefinitionWithFilters
73
73
  ? prepareGeoRawExportDefinition({
@@ -1 +1 @@
1
- {"version":3,"file":"attributeHierarchyModifiedHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/widgets/attributeHierarchyModifiedHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EACH,KAAK,gCAAgC,EAExC,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,KAAK,gBAAgB,EAAiC,MAAM,4BAA4B,CAAC;AAiClG,wBAAiB,iCAAiC,CAC9C,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,2BAA2B,GACjC,YAAY,CAAC,gCAAgC,CAAC,CA0BhD"}
1
+ {"version":3,"file":"attributeHierarchyModifiedHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/widgets/attributeHierarchyModifiedHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EACH,KAAK,gCAAgC,EAExC,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,KAAK,gBAAgB,EAAiC,MAAM,4BAA4B,CAAC;AAiClG,wBAAiB,iCAAiC,CAC9C,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,2BAA2B,GACjC,YAAY,CAAC,gCAAgC,CAAC,CAkChD"}
@@ -2,6 +2,7 @@
2
2
  import { call, put, select } from "redux-saga/effects";
3
3
  import { idRef } from "@gooddata/sdk-model";
4
4
  import { attributeHierarchyModifiedEvent, } from "../../events/insight.js";
5
+ import { selectCatalogComputedAttributes } from "../../store/catalog/catalogSelectors.js";
5
6
  import { catalogActions } from "../../store/catalog/index.js";
6
7
  import { selectObjectAvailabilityConfig } from "../../store/config/configSelectors.js";
7
8
  import { loadDateHierarchyTemplates } from "../dashboard/initializeDashboardHandler/loadDateHierarchyTemplates.js";
@@ -32,12 +33,17 @@ export function* attributeHierarchyModifiedHandler(ctx, cmd) {
32
33
  const availability = yield select(selectObjectAvailabilityConfig);
33
34
  const catalog = yield call(loadCatalog, ctx, availability);
34
35
  const dateHierarchyTemplates = yield call(loadDateHierarchyTemplates, ctx);
36
+ // setCatalogItems replaces the whole catalog, but this reload does not ask for computed
37
+ // attributes (a hierarchy cannot contain one, so their state cannot have changed) - the
38
+ // already-loaded slice is carried over so it is not wiped by the hierarchy refresh
39
+ const computedAttributes = yield select(selectCatalogComputedAttributes);
35
40
  yield put(catalogActions.setCatalogItems({
36
41
  attributes: catalog.attributes(),
37
42
  dateDatasets: catalog.dateDatasets(),
38
43
  facts: catalog.facts(),
39
44
  measures: catalog.measures(),
40
45
  attributeHierarchies: catalog.attributeHierarchies(),
46
+ computedAttributes,
41
47
  dateHierarchyTemplates,
42
48
  }));
43
49
  return attributeHierarchyModifiedEvent(ctx, correlationId);
@@ -1 +1 @@
1
- {"version":3,"file":"exportInsightWidgetHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/widgets/exportInsightWidgetHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAyB/C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EACH,KAAK,qCAAqC,EAG7C,MAAM,yBAAyB,CAAC;AAcjC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAsFnE,wBAAiB,0BAA0B,CACvC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,oBAAoB,GAC1B,YAAY,CAAC,qCAAqC,CAAC,CAqHrD"}
1
+ {"version":3,"file":"exportInsightWidgetHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/widgets/exportInsightWidgetHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAyB/C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EACH,KAAK,qCAAqC,EAG7C,MAAM,yBAAyB,CAAC;AAcjC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAsFnE,wBAAiB,0BAA0B,CACvC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,oBAAoB,GAC1B,YAAY,CAAC,qCAAqC,CAAC,CAsHrD"}
@@ -8,7 +8,7 @@ import { createExportExecutionDefinition, } from "@gooddata/sdk-ui/internal";
8
8
  import { mergeInsightWithWidgetProperties } from "../../../_staging/insight/insightWidgetProperties.js";
9
9
  import { invalidArgumentsProvided } from "../../events/general.js";
10
10
  import { insightWidgetExportRequested, insightWidgetExportResolved, } from "../../events/insight.js";
11
- import { selectCatalogAttributes } from "../../store/catalog/catalogSelectors.js";
11
+ import { selectCatalogAttributesWithComputed } from "../../store/catalog/catalogSelectors.js";
12
12
  import { selectExportResultPollingTimeout, selectSettings } from "../../store/config/configSelectors.js";
13
13
  import { selectExecutionResultByRef, selectIsExecutionResultExportableToCsvByRef, selectIsExecutionResultExportableToPdfByRef, selectIsExecutionResultExportableToXlsxByRef, selectIsExecutionResultReadyForExportByRef, } from "../../store/executionResults/executionResultsSelectors.js";
14
14
  import { selectInsightByWidgetRef } from "../../store/insights/insightsSelectors.js";
@@ -67,7 +67,7 @@ export function* exportInsightWidgetHandler(ctx, cmd) {
67
67
  const executionResult = executionEnvelope.executionResult;
68
68
  const insight = payloadInsight ?? (yield select(selectInsightByWidgetRef(ref)));
69
69
  const settings = yield select(selectSettings);
70
- const catalogAttributes = yield select(selectCatalogAttributes);
70
+ const catalogAttributes = yield select(selectCatalogAttributesWithComputed);
71
71
  const preloadedAttributesWithReferences = yield select(selectPreloadedAttributesWithReferences);
72
72
  const widget = yield select(selectWidgetByRef(ref));
73
73
  const effectiveInsight = insight && isInsightWidget(widget) ? mergeInsightWithWidgetProperties(insight, widget) : insight;
@@ -4,7 +4,7 @@ import { invariant } from "ts-invariant";
4
4
  import { defWithDimensions, defaultDimensionsGenerator, filterContextItemsToDashboardFiltersByWidget, insightRef, newDefForInsight, } from "@gooddata/sdk-model";
5
5
  import { fillMissingTitles, resolveDefaultDisplayFormRefForDisplayForm } from "@gooddata/sdk-ui";
6
6
  import { insightWidgetExportResolved, } from "../../events/insight.js";
7
- import { selectCatalogAttributes } from "../../store/catalog/catalogSelectors.js";
7
+ import { selectCatalogAttributesWithComputed } from "../../store/catalog/catalogSelectors.js";
8
8
  import { selectExportResultPollingTimeout, selectLocale, selectSettings, } from "../../store/config/configSelectors.js";
9
9
  import { selectExecutionResultByRef } from "../../store/executionResults/executionResultsSelectors.js";
10
10
  import { selectInsightByRef, selectRawExportOverridesForInsight, } from "../../store/insights/insightsSelectors.js";
@@ -30,7 +30,7 @@ export function* exportRawInsightWidgetHandler(ctx, cmd) {
30
30
  const locale = yield select(selectLocale);
31
31
  const filledInsight = yield call(fillMissingTitles, selectedInsight, locale, undefined);
32
32
  const settings = yield select(selectSettings);
33
- const catalogAttributes = yield select(selectCatalogAttributes);
33
+ const catalogAttributes = yield select(selectCatalogAttributesWithComputed);
34
34
  const preloadedAttributesWithReferences = yield select(selectPreloadedAttributesWithReferences);
35
35
  const baseExecutionDefinition = executionEnvelope?.executionResult?.definition ?? definition;
36
36
  const { executionDefinition: preparedExecutionDefinition, filledInsight: preparedFilledInsight } = prepareGeoRawExportDefinition({
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @beta
3
3
  */
4
- export type DashboardQueryType = "GDC.DASH/QUERY.INSIGHT.DATE.DATASETS" | "GDC.DASH/QUERY.INSIGHT.ATTRIBUTE.META" | "GDC.DASH/QUERY.MEASURE.DATE.DATASETS" | "GDC.DASH/QUERY.WIDGET.FILTERS" | "GDC.DASH/QUERY.WIDGET.BROKEN_ALERTS" | "GDC.DASH/QUERY.WIDGET.ALERT_COUNT" | "GDC.DASH/QUERY.CONNECTING.ATTRIBUTES" | "GDC.DASH/QUERY.DISPLAY.FORM.ATTRIBUTE" | "GDC.DASH/QUERY.DATA.SET.ATTRIBUTE" | "GDC.DASH/QUERY.ELEMENTS.ATTRIBUTE" | "GDC.DASH/QUERY.CONNECTED.ATTRIBUTES" | "GDC.DASH/QUERY.METRICS_AND_FACTS" | "GDC.DASH/QUERY.AVAILABLE.DATA.SETS.FOR.ITEMS";
4
+ export type DashboardQueryType = "GDC.DASH/QUERY.INSIGHT.DATE.DATASETS" | "GDC.DASH/QUERY.INSIGHT.ATTRIBUTE.META" | "GDC.DASH/QUERY.MEASURE.DATE.DATASETS" | "GDC.DASH/QUERY.WIDGET.FILTERS" | "GDC.DASH/QUERY.WIDGET.BROKEN_ALERTS" | "GDC.DASH/QUERY.WIDGET.ALERT_COUNT" | "GDC.DASH/QUERY.CONNECTING.ATTRIBUTES" | "GDC.DASH/QUERY.DISPLAY.FORM.ATTRIBUTE" | "GDC.DASH/QUERY.DATA.SET.ATTRIBUTE" | "GDC.DASH/QUERY.ELEMENTS.ATTRIBUTE" | "GDC.DASH/QUERY.CONNECTED.ATTRIBUTES" | "GDC.DASH/QUERY.COMPUTED.ATTRIBUTE.EXPRESSION" | "GDC.DASH/QUERY.METRICS_AND_FACTS" | "GDC.DASH/QUERY.AVAILABLE.DATA.SETS.FOR.ITEMS";
5
5
  /**
6
6
  * Base type for all dashboard queries. A dashboard query encapsulates how complex, read-only dashboard-specific logic
7
7
  * can be can be executed.
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/model/queries/base.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,kBAAkB,GACxB,sCAAsC,GACtC,uCAAuC,GACvC,sCAAsC,GACtC,+BAA+B,GAC/B,qCAAqC,GACrC,mCAAmC,GACnC,sCAAsC,GACtC,uCAAuC,GACvC,mCAAmC,GACnC,mCAAmC,GACnC,qCAAqC,GACrC,kCAAkC,GAClC,8CAA8C,CAAC;AAErD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAElC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACnC"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/model/queries/base.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,kBAAkB,GACxB,sCAAsC,GACtC,uCAAuC,GACvC,sCAAsC,GACtC,+BAA+B,GAC/B,qCAAqC,GACrC,mCAAmC,GACnC,sCAAsC,GACtC,uCAAuC,GACvC,mCAAmC,GACnC,mCAAmC,GACnC,qCAAqC,GACrC,8CAA8C,GAC9C,kCAAkC,GAClC,8CAA8C,CAAC;AAErD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAElC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACnC"}
@@ -1,2 +1,2 @@
1
- // (C) 2021-2025 GoodData Corporation
1
+ // (C) 2021-2026 GoodData Corporation
2
2
  export {};
@@ -0,0 +1,27 @@
1
+ import { type ObjRef } from "@gooddata/sdk-model";
2
+ import { type IDashboardQuery } from "./base.js";
3
+ /**
4
+ * @internal
5
+ */
6
+ export interface IQueryComputedAttributeExpression extends IDashboardQuery {
7
+ type: "GDC.DASH/QUERY.COMPUTED.ATTRIBUTE.EXPRESSION";
8
+ payload: {
9
+ /**
10
+ * Reference of the computed attribute.
11
+ */
12
+ readonly ref: ObjRef;
13
+ };
14
+ }
15
+ /**
16
+ * Creates action through which you can query the MAQL expression of a computed attribute, tokenized
17
+ * with the referenced objects resolved to their metadata (titles) instead of raw id references.
18
+ *
19
+ * @param ref - computed attribute reference
20
+ * @param correlationId - specify correlation id to use for this command. this will be included in all
21
+ * events that will be emitted during the command processing
22
+ * @returns tokenized computed attribute expression
23
+ *
24
+ * @internal
25
+ */
26
+ export declare function queryComputedAttributeExpression(ref: ObjRef, correlationId?: string): IQueryComputedAttributeExpression;
27
+ //# sourceMappingURL=computedAttributeExpression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computedAttributeExpression.d.ts","sourceRoot":"","sources":["../../../src/model/queries/computedAttributeExpression.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,iCAAkC,SAAQ,eAAe;IACtE,IAAI,EAAE,8CAA8C,CAAC;IACrD,OAAO,EAAE;QACL;;WAEG;QACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACxB,CAAC;CACL;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gCAAgC,CAC5C,GAAG,EAAE,MAAM,EACX,aAAa,CAAC,EAAE,MAAM,GACvB,iCAAiC,CAQnC"}
@@ -0,0 +1,21 @@
1
+ // (C) 2026 GoodData Corporation
2
+ /**
3
+ * Creates action through which you can query the MAQL expression of a computed attribute, tokenized
4
+ * with the referenced objects resolved to their metadata (titles) instead of raw id references.
5
+ *
6
+ * @param ref - computed attribute reference
7
+ * @param correlationId - specify correlation id to use for this command. this will be included in all
8
+ * events that will be emitted during the command processing
9
+ * @returns tokenized computed attribute expression
10
+ *
11
+ * @internal
12
+ */
13
+ export function queryComputedAttributeExpression(ref, correlationId) {
14
+ return {
15
+ type: "GDC.DASH/QUERY.COMPUTED.ATTRIBUTE.EXPRESSION",
16
+ correlationId,
17
+ payload: {
18
+ ref,
19
+ },
20
+ };
21
+ }
@@ -7,19 +7,37 @@ export interface IQueryConnectedAttributes extends IDashboardQuery {
7
7
  type: "GDC.DASH/QUERY.CONNECTED.ATTRIBUTES";
8
8
  payload: {
9
9
  readonly ref: ObjRef;
10
+ /**
11
+ * Also count computed attributes among the connected attributes. The query creator
12
+ * defaults this to false; pass the enableComputedAttributes setting of the dashboard
13
+ * to opt in.
14
+ */
15
+ readonly includeComputedAttributes?: boolean;
10
16
  };
11
17
  }
18
+ /**
19
+ * Options for {@link queryConnectedAttributes}.
20
+ *
21
+ * @alpha
22
+ */
23
+ export interface IQueryConnectedAttributesOptions {
24
+ /**
25
+ * Also count computed attributes among the connected attributes. Defaults to false.
26
+ */
27
+ includeComputedAttributes?: boolean;
28
+ }
12
29
  /**
13
30
  * Creates action through which you can query connected attributes for the information about
14
31
  * possibility of parent-child attribute filter relationship as only connected attributes may
15
32
  * be dependent on each other.
16
33
  *
17
34
  * @param ref - reference of the attribute filter display form
35
+ * @param options - query options
18
36
  * @param correlationId - specify correlation id to use for this command. this will be included in all
19
37
  * events that will be emitted during the command processing
20
38
  * @returns array of connected attributes for given reference
21
39
  *
22
40
  * @alpha
23
41
  */
24
- export declare function queryConnectedAttributes(ref: ObjRef, correlationId?: string): IQueryConnectedAttributes;
42
+ export declare function queryConnectedAttributes(ref: ObjRef, options?: IQueryConnectedAttributesOptions, correlationId?: string): IQueryConnectedAttributes;
25
43
  //# sourceMappingURL=connectedAttributes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connectedAttributes.d.ts","sourceRoot":"","sources":["../../../src/model/queries/connectedAttributes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,eAAe;IAC9D,IAAI,EAAE,qCAAqC,CAAC;IAC5C,OAAO,EAAE;QACL,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACxB,CAAC;CACL;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAQvG"}
1
+ {"version":3,"file":"connectedAttributes.d.ts","sourceRoot":"","sources":["../../../src/model/queries/connectedAttributes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,eAAe;IAC9D,IAAI,EAAE,qCAAqC,CAAC;IAC5C,OAAO,EAAE;QACL,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB;;;;WAIG;QACH,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;KAChD,CAAC;CACL;AAED;;;;GAIG;AACH,MAAM,WAAW,gCAAgC;IAC7C;;OAEG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,gCAAgC,EAC1C,aAAa,CAAC,EAAE,MAAM,GACvB,yBAAyB,CAS3B"}
@@ -5,18 +5,20 @@
5
5
  * be dependent on each other.
6
6
  *
7
7
  * @param ref - reference of the attribute filter display form
8
+ * @param options - query options
8
9
  * @param correlationId - specify correlation id to use for this command. this will be included in all
9
10
  * events that will be emitted during the command processing
10
11
  * @returns array of connected attributes for given reference
11
12
  *
12
13
  * @alpha
13
14
  */
14
- export function queryConnectedAttributes(ref, correlationId) {
15
+ export function queryConnectedAttributes(ref, options, correlationId) {
15
16
  return {
16
17
  type: "GDC.DASH/QUERY.CONNECTED.ATTRIBUTES",
17
18
  correlationId,
18
19
  payload: {
19
20
  ref,
21
+ includeComputedAttributes: options?.includeComputedAttributes ?? false,
20
22
  },
21
23
  };
22
24
  }
@@ -2,6 +2,7 @@ import { type IQueryAttributeDataSet } from "./attributeDataSet.js";
2
2
  import { type IQueryAttributeElements } from "./attributeElements.js";
3
3
  import { type IQueryAttributeByDisplayForm } from "./attributes.js";
4
4
  import { type IQueryAvailableDatasetsForItems } from "./availableDatasetsForItems.js";
5
+ import { type IQueryComputedAttributeExpression } from "./computedAttributeExpression.js";
5
6
  import { type IQueryConnectedAttributes } from "./connectedAttributes.js";
6
7
  import { type IQueryConnectingAttributes } from "./connectingAttributes.js";
7
8
  import { type IQueryInsightAttributesMeta, type IQueryInsightDateDatasets } from "./insights.js";
@@ -11,5 +12,5 @@ import { type IQueryWidgetAlertCount, type IQueryWidgetBrokenAlerts, type IQuery
11
12
  /**
12
13
  * @alpha
13
14
  */
14
- export type DashboardQueries = IQueryInsightDateDatasets | IQueryMeasureDateDatasets | IQueryInsightAttributesMeta | IQueryWidgetFilters | IQueryWidgetBrokenAlerts | IQueryWidgetAlertCount | IQueryConnectingAttributes | IQueryAttributeByDisplayForm | IQueryAttributeDataSet | IQueryAttributeElements | IQueryConnectedAttributes | IQueryMetricsAndFacts | IQueryAvailableDatasetsForItems;
15
+ export type DashboardQueries = IQueryInsightDateDatasets | IQueryMeasureDateDatasets | IQueryInsightAttributesMeta | IQueryWidgetFilters | IQueryWidgetBrokenAlerts | IQueryWidgetAlertCount | IQueryConnectingAttributes | IQueryAttributeByDisplayForm | IQueryAttributeDataSet | IQueryAttributeElements | IQueryComputedAttributeExpression | IQueryConnectedAttributes | IQueryMetricsAndFacts | IQueryAvailableDatasetsForItems;
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/model/queries/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,KAAK,2BAA2B,EAAE,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EAC3B,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACtB,yBAAyB,GACzB,yBAAyB,GACzB,2BAA2B,GAC3B,mBAAmB,GACnB,wBAAwB,GACxB,sBAAsB,GACtB,0BAA0B,GAC1B,4BAA4B,GAC5B,sBAAsB,GACtB,uBAAuB,GACvB,yBAAyB,GACzB,qBAAqB,GACrB,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/model/queries/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,KAAK,2BAA2B,EAAE,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EAC3B,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACtB,yBAAyB,GACzB,yBAAyB,GACzB,2BAA2B,GAC3B,mBAAmB,GACnB,wBAAwB,GACxB,sBAAsB,GACtB,0BAA0B,GAC1B,4BAA4B,GAC5B,sBAAsB,GACtB,uBAAuB,GACvB,iCAAiC,GACjC,yBAAyB,GACzB,qBAAqB,GACrB,+BAA+B,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const AllQueryServices: (import("../../index.js").IDashboardQueryService<import("../queries/availableDatasetsForItems.js").IQueryAvailableDatasetsForItems, import("@gooddata/sdk-model").ICatalogDateDataset[]> | import("../../index.js").IDashboardQueryService<import("../queries/widgets.js").IQueryWidgetAlertCount, number> | import("../../index.js").IDashboardQueryService<import("../queries/widgets.js").IQueryWidgetBrokenAlerts, import("../types/alertTypes.js").IBrokenAlertFilterBasicInfo<import("@gooddata/sdk-model").FilterContextItem>[]> | import("../../index.js").IDashboardQueryService<import("../queries/widgets.js").IQueryWidgetFilters, import("@gooddata/sdk-model").IFilter[]> | Required<import("../../index.js").IDashboardQueryService<import("../queries/attributes.js").IQueryAttributeByDisplayForm, import("@gooddata/sdk-model").IAttributeMetadataObject[]>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/attributeDataSet.js").IQueryAttributeDataSet, import("@gooddata/sdk-model").IMetadataObject>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/attributeElements.js").IQueryAttributeElements, import("../types/attributeFilterTypes.js").IUseAttributeElements>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/connectedAttributes.js").IQueryConnectedAttributes, import("@gooddata/sdk-model").ObjRef[]>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/connectingAttributes.js").IQueryConnectingAttributes, import("../types/attributeFilterTypes.js").IConnectingAttribute[][]>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/insights.js").IQueryInsightAttributesMeta, import("../queries/insights.js").IInsightAttributesMeta>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/insights.js").IQueryInsightDateDatasets, import("../queries/insights.js").IInsightDateDatasets>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/kpis.js").IQueryMeasureDateDatasets, import("../queries/kpis.js").IMeasureDateDatasets>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/metricsAndFacts.js").IQueryMetricsAndFacts, import("../queries/metricsAndFacts.js").IMetricsAndFacts>>)[];
1
+ export declare const AllQueryServices: (import("../../index.js").IDashboardQueryService<import("../queries/availableDatasetsForItems.js").IQueryAvailableDatasetsForItems, import("@gooddata/sdk-model").ICatalogDateDataset[]> | import("../../index.js").IDashboardQueryService<import("../queries/widgets.js").IQueryWidgetAlertCount, number> | import("../../index.js").IDashboardQueryService<import("../queries/widgets.js").IQueryWidgetBrokenAlerts, import("../types/alertTypes.js").IBrokenAlertFilterBasicInfo<import("@gooddata/sdk-model").FilterContextItem>[]> | import("../../index.js").IDashboardQueryService<import("../queries/widgets.js").IQueryWidgetFilters, import("@gooddata/sdk-model").IFilter[]> | Required<import("../../index.js").IDashboardQueryService<import("../queries/attributes.js").IQueryAttributeByDisplayForm, import("@gooddata/sdk-model").IAttributeMetadataObject[]>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/attributeDataSet.js").IQueryAttributeDataSet, import("@gooddata/sdk-model").IMetadataObject>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/attributeElements.js").IQueryAttributeElements, import("../types/attributeFilterTypes.js").IUseAttributeElements>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/computedAttributeExpression.js").IQueryComputedAttributeExpression, import("@gooddata/sdk-backend-spi").IMeasureExpressionToken[]>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/connectedAttributes.js").IQueryConnectedAttributes, import("@gooddata/sdk-model").ObjRef[]>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/connectingAttributes.js").IQueryConnectingAttributes, import("../types/attributeFilterTypes.js").IConnectingAttribute[][]>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/insights.js").IQueryInsightAttributesMeta, import("../queries/insights.js").IInsightAttributesMeta>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/insights.js").IQueryInsightDateDatasets, import("../queries/insights.js").IInsightDateDatasets>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/kpis.js").IQueryMeasureDateDatasets, import("../queries/kpis.js").IMeasureDateDatasets>> | Required<import("../../index.js").IDashboardQueryService<import("../queries/metricsAndFacts.js").IQueryMetricsAndFacts, import("../queries/metricsAndFacts.js").IMetricsAndFacts>>)[];
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/index.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,gBAAgB,mvEAc5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/index.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,gBAAgB,q8EAe5B,CAAC"}
@@ -3,6 +3,7 @@ import { QueryAttributeByDisplayFormService } from "./queryAttributeByDisplayFor
3
3
  import { QueryAttributeDataSetService } from "./queryAttributeDataset.js";
4
4
  import { QueryAttributeElementsService } from "./queryAttributeElements.js";
5
5
  import { QueryAvailableDatasetForItemsService } from "./queryAvailableDatasetsForItems.js";
6
+ import { QueryComputedAttributeExpressionService } from "./queryComputedAttributeExpression.js";
6
7
  import { QueryConnectedAttributesService } from "./queryConnectedAttributes.js";
7
8
  import { QueryConnectingAttributesService } from "./queryConnectingAttributes.js";
8
9
  import { QueryInsightAttributesMetaService } from "./queryInsightAttributesMeta.js";
@@ -23,6 +24,7 @@ export const AllQueryServices = [
23
24
  QueryAttributeByDisplayFormService,
24
25
  QueryAttributeDataSetService,
25
26
  QueryAttributeElementsService,
27
+ QueryComputedAttributeExpressionService,
26
28
  QueryConnectedAttributesService,
27
29
  QueryMetricsAndFactsService,
28
30
  QueryAvailableDatasetForItemsService,
@@ -1 +1 @@
1
- {"version":3,"file":"queryAttributeByDisplayForm.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/queryAttributeByDisplayForm.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,wBAAwB,EAKhC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAM7E,eAAO,MAAM,kCAAkC,sIAU9C,CAAC"}
1
+ {"version":3,"file":"queryAttributeByDisplayForm.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/queryAttributeByDisplayForm.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,wBAAwB,EAOhC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAM7E,eAAO,MAAM,kCAAkC,sIAU9C,CAAC"}
@@ -1,9 +1,9 @@
1
1
  // (C) 2022-2026 GoodData Corporation
2
2
  import { call, select } from "redux-saga/effects";
3
- import { areObjRefsEqual, serializeObjRef, } from "@gooddata/sdk-model";
3
+ import { areObjRefsEqual, computedAttributeAsAttributeMetadataObject, isComputedAttributeRef, serializeObjRef, } from "@gooddata/sdk-model";
4
4
  import { invalidQueryArguments } from "../events/general.js";
5
5
  import { createCachedQueryService } from "../store/_infra/queryService.js";
6
- import { selectCatalogAttributes } from "../store/catalog/catalogSelectors.js";
6
+ import { selectCatalogAttributesWithComputed } from "../store/catalog/catalogSelectors.js";
7
7
  import { selectPreloadedAttributesWithReferences } from "../store/tabs/filterContext/filterContextSelectors.js";
8
8
  export const QueryAttributeByDisplayFormService = createCachedQueryService("GDC.DASH/QUERY.DISPLAY.FORM.ATTRIBUTE", queryService, (query) => {
9
9
  const { payload: { displayForms }, } = query;
@@ -25,6 +25,15 @@ async function loadAttributeByDisplayForm(ctx, catalogAttributes, displayFormRef
25
25
  if (attribute) {
26
26
  return attribute;
27
27
  }
28
+ // A computed-attribute-typed display form ref resolves through the computedAttributes service;
29
+ // the fabricated display form shares the computed attribute's own ref.
30
+ if (isComputedAttributeRef(displayFormRef)) {
31
+ return backend
32
+ .workspace(workspace)
33
+ .computedAttributes()
34
+ .getComputedAttribute(displayFormRef)
35
+ .then(computedAttributeAsAttributeMetadataObject);
36
+ }
28
37
  // If attribute is not in preloaded filters or catalog attributes, fetch it from backend
29
38
  return backend.workspace(workspace).attributes().getAttributeByDisplayForm(displayFormRef);
30
39
  }
@@ -34,7 +43,7 @@ async function loadAttributes(ctx, catalogAttributes, displayForms, preloadedAtt
34
43
  function* queryService(ctx, query) {
35
44
  const { payload: { displayForms }, correlationId, } = query;
36
45
  const preloadedAttributesWithReferences = yield select(selectPreloadedAttributesWithReferences);
37
- const catalogAttributes = yield select(selectCatalogAttributes);
46
+ const catalogAttributes = yield select(selectCatalogAttributesWithComputed);
38
47
  const attributes = yield call(loadAttributes, ctx, catalogAttributes, displayForms, preloadedAttributesWithReferences);
39
48
  if (!attributes) {
40
49
  throw invalidQueryArguments(ctx, `Cannot find attribute for given displayForm`, correlationId);
@@ -1 +1 @@
1
- {"version":3,"file":"queryAttributeDataset.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/queryAttributeDataset.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,eAAe,EAAiD,MAAM,qBAAqB,CAAC;AAG1G,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAK7E,eAAO,MAAM,4BAA4B,qHAUxC,CAAC"}
1
+ {"version":3,"file":"queryAttributeDataset.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/queryAttributeDataset.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,eAAe,EAKvB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAK7E,eAAO,MAAM,4BAA4B,qHAUxC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  // (C) 2022-2026 GoodData Corporation
2
2
  import { call, select } from "redux-saga/effects";
3
- import { areObjRefsEqual, serializeObjRef } from "@gooddata/sdk-model";
3
+ import { areObjRefsEqual, isComputedAttributeRef, serializeObjRef, } from "@gooddata/sdk-model";
4
4
  import { invalidQueryArguments } from "../events/general.js";
5
5
  import { createCachedQueryService } from "../store/_infra/queryService.js";
6
6
  import { selectPreloadedAttributesWithReferences } from "../store/tabs/filterContext/filterContextSelectors.js";
@@ -15,6 +15,14 @@ async function loadAttributeDataSetMeta(ctx, attributeRef, preloadedAttributesWi
15
15
  if (dataSet) {
16
16
  return dataSet;
17
17
  }
18
+ // A computed attribute never matches a label; take the dataset from its own metadata (if any)
19
+ if (isComputedAttributeRef(attributeRef)) {
20
+ const computedAttribute = await backend
21
+ .workspace(workspace)
22
+ .computedAttributes()
23
+ .getComputedAttribute(attributeRef);
24
+ return computedAttribute.dataSet;
25
+ }
18
26
  // If dataSet is not in preloaded filters, fetch it from backend
19
27
  return backend.workspace(workspace).attributes().getAttributeDatasetMeta(attributeRef);
20
28
  }
@@ -0,0 +1,4 @@
1
+ import { type IMeasureExpressionToken } from "@gooddata/sdk-backend-spi";
2
+ import { type IQueryComputedAttributeExpression } from "../queries/computedAttributeExpression.js";
3
+ export declare const QueryComputedAttributeExpressionService: Required<import("../store/_infra/queryService.js").IDashboardQueryService<IQueryComputedAttributeExpression, IMeasureExpressionToken[]>>;
4
+ //# sourceMappingURL=queryComputedAttributeExpression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryComputedAttributeExpression.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/queryComputedAttributeExpression.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,2CAA2C,CAAC;AAInG,eAAO,MAAM,uCAAuC,0IAUnD,CAAC"}
@@ -0,0 +1,17 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { call } from "redux-saga/effects";
3
+ import { serializeObjRef } from "@gooddata/sdk-model";
4
+ import { createCachedQueryService } from "../store/_infra/queryService.js";
5
+ export const QueryComputedAttributeExpressionService = createCachedQueryService("GDC.DASH/QUERY.COMPUTED.ATTRIBUTE.EXPRESSION", queryService, (query) => {
6
+ const { payload: { ref }, } = query;
7
+ return serializeObjRef(ref);
8
+ });
9
+ async function loadComputedAttributeExpressionTokens(ctx, ref) {
10
+ const { backend, workspace } = ctx;
11
+ return backend.workspace(workspace).computedAttributes().getComputedAttributeExpressionTokens(ref);
12
+ }
13
+ function* queryService(ctx, query) {
14
+ const { payload: { ref }, } = query;
15
+ const tokens = yield call(loadComputedAttributeExpressionTokens, ctx, ref);
16
+ return tokens;
17
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"queryConnectedAttributes.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/queryConnectedAttributes.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAInF,eAAO,MAAM,+BAA+B,iHAU3C,CAAC"}
1
+ {"version":3,"file":"queryConnectedAttributes.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/queryConnectedAttributes.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAInF,eAAO,MAAM,+BAA+B,iHAa3C,CAAC"}
@@ -1,17 +1,32 @@
1
1
  // (C) 2022-2026 GoodData Corporation
2
2
  import { call } from "redux-saga/effects";
3
3
  import { serializeObjRef } from "@gooddata/sdk-model";
4
+ import { isComputedAttributesUnavailableError } from "../../_staging/catalog/computedAttributes.js";
4
5
  import { createCachedQueryService } from "../store/_infra/queryService.js";
5
6
  export const QueryConnectedAttributesService = createCachedQueryService("GDC.DASH/QUERY.CONNECTED.ATTRIBUTES", queryService, (query) => {
6
- const { payload: { ref }, } = query;
7
- return serializeObjRef(ref);
7
+ const { payload: { ref, includeComputedAttributes }, } = query;
8
+ // the flag is part of the cache identity: the same ref yields a different result with and
9
+ // without computed attributes (the ?? false mirrors the query creator's default, for
10
+ // queries constructed without the creator)
11
+ return `${serializeObjRef(ref)}:${includeComputedAttributes ?? false}`;
8
12
  });
9
- async function loadConnectedAttributes(ctx, ref) {
13
+ async function loadConnectedAttributes(ctx, ref, includeComputedAttributes) {
10
14
  const { backend, workspace } = ctx;
11
- return await backend.workspace(workspace).attributes().getConnectedAttributesByDisplayForm(ref);
15
+ const attributes = backend.workspace(workspace).attributes();
16
+ try {
17
+ return await attributes.getConnectedAttributesByDisplayForm(ref, { includeComputedAttributes });
18
+ }
19
+ catch (error) {
20
+ // when the backend refuses computed attributes (enableComputedAttributes off), fall back
21
+ // to plain attributes; a genuine failure propagates
22
+ if (!includeComputedAttributes || !isComputedAttributesUnavailableError(error)) {
23
+ throw error;
24
+ }
25
+ return attributes.getConnectedAttributesByDisplayForm(ref, { includeComputedAttributes: false });
26
+ }
12
27
  }
13
28
  function* queryService(ctx, query) {
14
29
  const { payload: { ref }, } = query;
15
- const connectedAttributes = yield call(loadConnectedAttributes, ctx, ref);
30
+ const connectedAttributes = yield call(loadConnectedAttributes, ctx, ref, query.payload.includeComputedAttributes ?? false);
16
31
  return connectedAttributes;
17
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"queryInsightAttributesMeta.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/queryInsightAttributesMeta.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,KAAK,qBAAqB,EAA4B,MAAM,iCAAiC,CAAC;AAMvG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,eAAO,MAAM,iCAAiC,iIAW7C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,+BAA+B,GAAG,CAC1C,KAAK,EAAE,2BAA2B,KACjC,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;AAE5G;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,EAAE,+BACmB,CAAC"}
1
+ {"version":3,"file":"queryInsightAttributesMeta.d.ts","sourceRoot":"","sources":["../../../src/model/queryServices/queryInsightAttributesMeta.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,KAAK,qBAAqB,EAA4B,MAAM,iCAAiC,CAAC;AAMvG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,eAAO,MAAM,iCAAiC,iIAW7C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,+BAA+B,GAAG,CAC1C,KAAK,EAAE,2BAA2B,KACjC,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;AAE5G;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,EAAE,+BACmB,CAAC"}
@@ -2,7 +2,8 @@
2
2
  import { uniqBy } from "lodash-es";
3
3
  import { call, select } from "redux-saga/effects";
4
4
  import { invariant } from "ts-invariant";
5
- import { insightDisplayFormUsage, insightRef, isObjRef, objRefToString, serializeObjRef, } from "@gooddata/sdk-model";
5
+ import { computedAttributeAsAttributeMetadataObject, insightDisplayFormUsage, insightRef, isObjRef, objRefToString, serializeObjRef, } from "@gooddata/sdk-model";
6
+ import { loadComputedAttributesByRefs, partitionComputedAttributeRefs, } from "../../_staging/catalog/computedAttributes.js";
6
7
  import { invalidQueryArguments } from "../events/general.js";
7
8
  import { createCachedQueryService } from "../store/_infra/queryService.js";
8
9
  import { selectAllCatalogAttributesMap, selectAllCatalogDisplayFormsMap, } from "../store/catalog/catalogSelectors.js";
@@ -29,17 +30,25 @@ export const selectInsightAttributesMeta = QueryInsightAttributesMetaService.cac
29
30
  //
30
31
  async function loadDisplayFormsAndAttributes(ctx, displayFormRefs) {
31
32
  const { backend, workspace } = ctx;
32
- const loadedDisplayForms = await backend
33
- .workspace(workspace)
34
- .attributes()
35
- .getAttributeDisplayForms(displayFormRefs);
36
- const loadedAttributes = await backend
37
- .workspace(workspace)
38
- .attributes()
39
- .getAttributes(loadedDisplayForms.map((df) => df.attribute));
33
+ // computed-attribute-typed display form refs never match labels; the computed attribute
34
+ // resolves through its own service and doubles as both the display form and the attribute
35
+ const { computedAttributeRefs, otherRefs } = partitionComputedAttributeRefs(displayFormRefs);
36
+ const computedAttributes = await loadComputedAttributesByRefs(backend, workspace, computedAttributeRefs);
37
+ const loadedDisplayForms = otherRefs.length
38
+ ? await backend.workspace(workspace).attributes().getAttributeDisplayForms(otherRefs)
39
+ : [];
40
+ const loadedAttributes = loadedDisplayForms.length
41
+ ? await backend
42
+ .workspace(workspace)
43
+ .attributes()
44
+ .getAttributes(loadedDisplayForms.map((df) => df.attribute))
45
+ : [];
40
46
  return {
41
- loadedDisplayForms,
42
- loadedAttributes,
47
+ loadedDisplayForms: [...loadedDisplayForms, ...computedAttributes.flatMap((ca) => ca.displayForms)],
48
+ loadedAttributes: [
49
+ ...loadedAttributes,
50
+ ...computedAttributes.map(computedAttributeAsAttributeMetadataObject),
51
+ ],
43
52
  };
44
53
  }
45
54
  /**
@@ -0,0 +1,9 @@
1
+ import { type ExtendedDashboardWidget } from "../types/layoutTypes.js";
2
+ /**
3
+ * Tells whether the widget renders an insight the current user is not allowed to see. A widget whose
4
+ * insight is merely deleted is not restricted — that one keeps rendering the missing-visualization tile.
5
+ *
6
+ * @alpha
7
+ */
8
+ export declare function useIsWidgetRestricted(widget: ExtendedDashboardWidget): boolean;
9
+ //# sourceMappingURL=useIsWidgetRestricted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsWidgetRestricted.d.ts","sourceRoot":"","sources":["../../../src/model/react/useIsWidgetRestricted.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIvE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAI9E"}
@@ -0,0 +1,14 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { isInsightWidget } from "@gooddata/sdk-model";
3
+ import { selectRestrictedInsightsMap } from "../store/unavailableObjects/unavailableObjectsSelectors.js";
4
+ import { useDashboardSelector } from "./DashboardStoreProvider.js";
5
+ /**
6
+ * Tells whether the widget renders an insight the current user is not allowed to see. A widget whose
7
+ * insight is merely deleted is not restricted — that one keeps rendering the missing-visualization tile.
8
+ *
9
+ * @alpha
10
+ */
11
+ export function useIsWidgetRestricted(widget) {
12
+ const restrictedInsights = useDashboardSelector(selectRestrictedInsightsMap);
13
+ return isInsightWidget(widget) && restrictedInsights.has(widget.insight);
14
+ }
@@ -1,5 +1,5 @@
1
1
  import { type Action, type CaseReducer } from "@reduxjs/toolkit";
2
- import { type ICatalogAttribute, type ICatalogAttributeHierarchy, type ICatalogDateDataset, type ICatalogFact, type ICatalogMeasure, type IDateHierarchyTemplate } from "@gooddata/sdk-model";
2
+ import { type ICatalogAttribute, type ICatalogAttributeHierarchy, type ICatalogComputedAttribute, type ICatalogDateDataset, type ICatalogFact, type ICatalogMeasure, type IDateHierarchyTemplate } from "@gooddata/sdk-model";
3
3
  import { type CatalogState, type ICatalogMeasureParametersState, type ICatalogParametersState } from "./catalogState.js";
4
4
  type CatalogReducer<A extends Action> = CaseReducer<CatalogState, A>;
5
5
  /**
@@ -11,6 +11,7 @@ export type SetCatalogItemsPayload = {
11
11
  facts?: ICatalogFact[];
12
12
  dateDatasets?: ICatalogDateDataset[];
13
13
  attributeHierarchies?: ICatalogAttributeHierarchy[];
14
+ computedAttributes?: ICatalogComputedAttribute[];
14
15
  dateHierarchyTemplates?: IDateHierarchyTemplate[];
15
16
  };
16
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"catalogReducers.d.ts","sourceRoot":"","sources":["../../../../src/model/store/catalog/catalogReducers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAGrF,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC9B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,8BAA8B,EACnC,KAAK,uBAAuB,EAC/B,MAAM,mBAAmB,CAAC;AAE3B,KAAK,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACjC,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,oBAAoB,CAAC,EAAE,0BAA0B,EAAE,CAAC;IACpD,sBAAsB,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACrD,CAAC;AAcF;;GAEG;AACH,MAAM,MAAM,iCAAiC,GAAG;IAC5C,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,EAAE,YAAY,EAAE,CAAC;CACzB,CAAC;AAqDF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ3B,CAAC"}
1
+ {"version":3,"file":"catalogReducers.d.ts","sourceRoot":"","sources":["../../../../src/model/store/catalog/catalogReducers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAGrF,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC9B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,8BAA8B,EACnC,KAAK,uBAAuB,EAC/B,MAAM,mBAAmB,CAAC;AAE3B,KAAK,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACjC,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,oBAAoB,CAAC,EAAE,0BAA0B,EAAE,CAAC;IACpD,kBAAkB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACjD,sBAAsB,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACrD,CAAC;AAsBF;;GAEG;AACH,MAAM,MAAM,iCAAiC,GAAG;IAC5C,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,EAAE,YAAY,EAAE,CAAC;CACzB,CAAC;AAqDF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ3B,CAAC"}
@@ -1,12 +1,13 @@
1
1
  // (C) 2021-2026 GoodData Corporation
2
2
  import { castDraft } from "immer";
3
3
  const setCatalogItems = (state, action) => {
4
- const { attributes, measures, dateDatasets, facts, attributeHierarchies, dateHierarchyTemplates } = action.payload;
4
+ const { attributes, measures, dateDatasets, facts, attributeHierarchies, computedAttributes, dateHierarchyTemplates, } = action.payload;
5
5
  state.attributes = attributes;
6
6
  state.measures = castDraft(measures);
7
7
  state.facts = facts;
8
8
  state.dateDatasets = dateDatasets;
9
9
  state.attributeHierarchies = attributeHierarchies;
10
+ state.computedAttributes = computedAttributes;
10
11
  state.dateHierarchyTemplates = dateHierarchyTemplates;
11
12
  };
12
13
  const setCatalogMeasuresAndFacts = (state, action) => {