@gooddata/sdk-ui-dashboard 11.10.0-alpha.0 → 11.10.0-alpha.1

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 (283) hide show
  1. package/esm/__version.d.ts +1 -1
  2. package/esm/__version.js +1 -1
  3. package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.d.ts.map +1 -1
  4. package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.js +3 -2
  5. package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.js.map +1 -1
  6. package/esm/model/commandHandlers/dashboard/changeAttributeFilterDisplayAsLabelHandler.d.ts.map +1 -1
  7. package/esm/model/commandHandlers/dashboard/changeAttributeFilterDisplayAsLabelHandler.js +4 -3
  8. package/esm/model/commandHandlers/dashboard/changeAttributeFilterDisplayAsLabelHandler.js.map +1 -1
  9. package/esm/model/commandHandlers/dashboard/changeAttributeFilterLimitingItemsHandler.js +3 -3
  10. package/esm/model/commandHandlers/dashboard/changeAttributeFilterLimitingItemsHandler.js.map +1 -1
  11. package/esm/model/commandHandlers/dashboard/changeAttributeFilterModeHandler.d.ts.map +1 -1
  12. package/esm/model/commandHandlers/dashboard/changeAttributeFilterModeHandler.js +4 -3
  13. package/esm/model/commandHandlers/dashboard/changeAttributeFilterModeHandler.js.map +1 -1
  14. package/esm/model/commandHandlers/dashboard/changeDateFilterTitleHandler.d.ts.map +1 -1
  15. package/esm/model/commandHandlers/dashboard/changeDateFilterTitleHandler.js +7 -7
  16. package/esm/model/commandHandlers/dashboard/changeDateFilterTitleHandler.js.map +1 -1
  17. package/esm/model/commandHandlers/dashboard/changeDateFilterWithDimensionModeHandler.d.ts.map +1 -1
  18. package/esm/model/commandHandlers/dashboard/changeDateFilterWithDimensionModeHandler.js +5 -4
  19. package/esm/model/commandHandlers/dashboard/changeDateFilterWithDimensionModeHandler.js.map +1 -1
  20. package/esm/model/commandHandlers/dashboard/common/stateInitializers.d.ts +2 -2
  21. package/esm/model/commandHandlers/dashboard/common/stateInitializers.d.ts.map +1 -1
  22. package/esm/model/commandHandlers/dashboard/common/stateInitializers.js +234 -106
  23. package/esm/model/commandHandlers/dashboard/common/stateInitializers.js.map +1 -1
  24. package/esm/model/commandHandlers/dashboard/dateFilterConfigHandler.d.ts.map +1 -1
  25. package/esm/model/commandHandlers/dashboard/dateFilterConfigHandler.js +2 -2
  26. package/esm/model/commandHandlers/dashboard/dateFilterConfigHandler.js.map +1 -1
  27. package/esm/model/commandHandlers/dashboard/exportDashboardToPdfHandler.d.ts.map +1 -1
  28. package/esm/model/commandHandlers/dashboard/exportDashboardToPdfHandler.js +2 -1
  29. package/esm/model/commandHandlers/dashboard/exportDashboardToPdfHandler.js.map +1 -1
  30. package/esm/model/commandHandlers/dashboard/exportDashboardToPdfPresentationHandler.d.ts.map +1 -1
  31. package/esm/model/commandHandlers/dashboard/exportDashboardToPdfPresentationHandler.js +2 -1
  32. package/esm/model/commandHandlers/dashboard/exportDashboardToPdfPresentationHandler.js.map +1 -1
  33. package/esm/model/commandHandlers/dashboard/exportDashboardToPptPresentationHandler.d.ts.map +1 -1
  34. package/esm/model/commandHandlers/dashboard/exportDashboardToPptPresentationHandler.js +2 -1
  35. package/esm/model/commandHandlers/dashboard/exportDashboardToPptPresentationHandler.js.map +1 -1
  36. package/esm/model/commandHandlers/dashboard/exportToTabularHandler.js +1 -1
  37. package/esm/model/commandHandlers/dashboard/exportToTabularHandler.js.map +1 -1
  38. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts +1 -1
  39. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
  40. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +47 -20
  41. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js.map +1 -1
  42. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/onDateFilterConfigValidationError.d.ts +1 -1
  43. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/onDateFilterConfigValidationError.d.ts.map +1 -1
  44. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/onDateFilterConfigValidationError.js +2 -2
  45. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/onDateFilterConfigValidationError.js.map +1 -1
  46. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/preloadAttributeFiltersData.d.ts.map +1 -1
  47. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/preloadAttributeFiltersData.js +10 -5
  48. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/preloadAttributeFiltersData.js.map +1 -1
  49. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +2 -2
  50. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js.map +1 -1
  51. package/esm/model/commandHandlers/dashboard/resetDashboardHandler.d.ts.map +1 -1
  52. package/esm/model/commandHandlers/dashboard/resetDashboardHandler.js +62 -22
  53. package/esm/model/commandHandlers/dashboard/resetDashboardHandler.js.map +1 -1
  54. package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.js +6 -6
  55. package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.js.map +1 -1
  56. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.d.ts.map +1 -1
  57. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js +39 -14
  58. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js.map +1 -1
  59. package/esm/model/commandHandlers/drill/crossFilteringHandler.js +2 -2
  60. package/esm/model/commandHandlers/drill/crossFilteringHandler.js.map +1 -1
  61. package/esm/model/commandHandlers/drill/drillToDashboardHandler.js +2 -2
  62. package/esm/model/commandHandlers/drill/drillToDashboardHandler.js.map +1 -1
  63. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.d.ts.map +1 -1
  64. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.js +2 -2
  65. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.js.map +1 -1
  66. package/esm/model/commandHandlers/filterContext/attributeFilter/addAttributeFilterHandler.d.ts.map +1 -1
  67. package/esm/model/commandHandlers/filterContext/attributeFilter/addAttributeFilterHandler.js +6 -7
  68. package/esm/model/commandHandlers/filterContext/attributeFilter/addAttributeFilterHandler.js.map +1 -1
  69. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeDisplayFormHandler.js +4 -4
  70. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeDisplayFormHandler.js.map +1 -1
  71. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.d.ts.map +1 -1
  72. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.js +5 -4
  73. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.js.map +1 -1
  74. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeSelectionModeHandler.d.ts.map +1 -1
  75. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeSelectionModeHandler.js +4 -3
  76. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeSelectionModeHandler.js.map +1 -1
  77. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeTitleHandler.d.ts.map +1 -1
  78. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeTitleHandler.js +4 -3
  79. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeTitleHandler.js.map +1 -1
  80. package/esm/model/commandHandlers/filterContext/attributeFilter/moveAttributeFilterHandler.d.ts.map +1 -1
  81. package/esm/model/commandHandlers/filterContext/attributeFilter/moveAttributeFilterHandler.js +4 -3
  82. package/esm/model/commandHandlers/filterContext/attributeFilter/moveAttributeFilterHandler.js.map +1 -1
  83. package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.d.ts.map +1 -1
  84. package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.js +6 -7
  85. package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.js.map +1 -1
  86. package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterDependentDateFilterHandler.d.ts.map +1 -1
  87. package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterDependentDateFilterHandler.js +4 -3
  88. package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterDependentDateFilterHandler.js.map +1 -1
  89. package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterParentHandler.d.ts.map +1 -1
  90. package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterParentHandler.js +4 -3
  91. package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterParentHandler.js.map +1 -1
  92. package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.d.ts.map +1 -1
  93. package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.js +13 -14
  94. package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.js.map +1 -1
  95. package/esm/model/commandHandlers/filterContext/common.d.ts +3 -3
  96. package/esm/model/commandHandlers/filterContext/common.d.ts.map +1 -1
  97. package/esm/model/commandHandlers/filterContext/common.js +6 -6
  98. package/esm/model/commandHandlers/filterContext/common.js.map +1 -1
  99. package/esm/model/commandHandlers/filterContext/dateFilter/addDateFilterHandler.js +3 -3
  100. package/esm/model/commandHandlers/filterContext/dateFilter/addDateFilterHandler.js.map +1 -1
  101. package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.d.ts.map +1 -1
  102. package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.js +3 -3
  103. package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.js.map +1 -1
  104. package/esm/model/commandHandlers/filterContext/dateFilter/moveDateFilterHandler.d.ts.map +1 -1
  105. package/esm/model/commandHandlers/filterContext/dateFilter/moveDateFilterHandler.js +4 -3
  106. package/esm/model/commandHandlers/filterContext/dateFilter/moveDateFilterHandler.js.map +1 -1
  107. package/esm/model/commandHandlers/filterContext/dateFilter/removeDateFiltersHandler.d.ts.map +1 -1
  108. package/esm/model/commandHandlers/filterContext/dateFilter/removeDateFiltersHandler.js +5 -6
  109. package/esm/model/commandHandlers/filterContext/dateFilter/removeDateFiltersHandler.js.map +1 -1
  110. package/esm/model/commandHandlers/filterContext/filterViewHandler.js +4 -4
  111. package/esm/model/commandHandlers/filterContext/filterViewHandler.js.map +1 -1
  112. package/esm/model/commandHandlers/layout/validation/itemValidation.js +2 -2
  113. package/esm/model/commandHandlers/layout/validation/itemValidation.js.map +1 -1
  114. package/esm/model/commandHandlers/scheduledEmail/initializeAutomationsHandler.d.ts.map +1 -1
  115. package/esm/model/commandHandlers/scheduledEmail/initializeAutomationsHandler.js +1 -1
  116. package/esm/model/commandHandlers/scheduledEmail/initializeAutomationsHandler.js.map +1 -1
  117. package/esm/model/commandHandlers/tabs/createDashboardTabHandler.d.ts.map +1 -1
  118. package/esm/model/commandHandlers/tabs/createDashboardTabHandler.js +26 -4
  119. package/esm/model/commandHandlers/tabs/createDashboardTabHandler.js.map +1 -1
  120. package/esm/model/commandHandlers/tabs/switchDashboardTabHandler.d.ts.map +1 -1
  121. package/esm/model/commandHandlers/tabs/switchDashboardTabHandler.js +1 -93
  122. package/esm/model/commandHandlers/tabs/switchDashboardTabHandler.js.map +1 -1
  123. package/esm/model/commandHandlers/widgets/common/filterOperations.js +2 -2
  124. package/esm/model/commandHandlers/widgets/common/filterOperations.js.map +1 -1
  125. package/esm/model/commandHandlers/widgets/exportImageInsightWidgetHandler.d.ts.map +1 -1
  126. package/esm/model/commandHandlers/widgets/exportImageInsightWidgetHandler.js +2 -1
  127. package/esm/model/commandHandlers/widgets/exportImageInsightWidgetHandler.js.map +1 -1
  128. package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.d.ts.map +1 -1
  129. package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.js +2 -1
  130. package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.js.map +1 -1
  131. package/esm/model/commandHandlers/widgets/exportSlidesInsightWidgetHandler.d.ts.map +1 -1
  132. package/esm/model/commandHandlers/widgets/exportSlidesInsightWidgetHandler.js +2 -1
  133. package/esm/model/commandHandlers/widgets/exportSlidesInsightWidgetHandler.js.map +1 -1
  134. package/esm/model/commandHandlers/widgets/validation/filterValidation.js +2 -2
  135. package/esm/model/commandHandlers/widgets/validation/filterValidation.js.map +1 -1
  136. package/esm/model/queryServices/queryWidgetFilters.d.ts.map +1 -1
  137. package/esm/model/queryServices/queryWidgetFilters.js +1 -1
  138. package/esm/model/queryServices/queryWidgetFilters.js.map +1 -1
  139. package/esm/model/store/dashboardStore.d.ts.map +1 -1
  140. package/esm/model/store/dashboardStore.js +0 -8
  141. package/esm/model/store/dashboardStore.js.map +1 -1
  142. package/esm/model/store/index.d.ts +12 -10
  143. package/esm/model/store/index.d.ts.map +1 -1
  144. package/esm/model/store/index.js +6 -5
  145. package/esm/model/store/index.js.map +1 -1
  146. package/esm/model/store/keyDriverAnalysis/const.d.ts +14 -0
  147. package/esm/model/store/keyDriverAnalysis/const.d.ts.map +1 -0
  148. package/esm/model/store/keyDriverAnalysis/const.js +32 -0
  149. package/esm/model/store/keyDriverAnalysis/const.js.map +1 -0
  150. package/esm/model/store/layout/layoutSelectors.d.ts.map +1 -1
  151. package/esm/model/store/layout/layoutSelectors.js +1 -1
  152. package/esm/model/store/layout/layoutSelectors.js.map +1 -1
  153. package/esm/model/store/meta/metaSelectors.d.ts +76 -20
  154. package/esm/model/store/meta/metaSelectors.d.ts.map +1 -1
  155. package/esm/model/store/meta/metaSelectors.js +234 -140
  156. package/esm/model/store/meta/metaSelectors.js.map +1 -1
  157. package/esm/model/store/{attributeFilterConfigs → tabs/attributeFilterConfigs}/attributeFilterConfigsReducers.d.ts +7 -6
  158. package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts.map +1 -0
  159. package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.js +83 -0
  160. package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.js.map +1 -0
  161. package/esm/model/store/{attributeFilterConfigs → tabs/attributeFilterConfigs}/attributeFilterConfigsSelectors.d.ts +7 -1
  162. package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.d.ts.map +1 -0
  163. package/esm/model/store/{attributeFilterConfigs → tabs/attributeFilterConfigs}/attributeFilterConfigsSelectors.js +24 -4
  164. package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js.map +1 -0
  165. package/esm/model/store/{attributeFilterConfigs/attributeFilterConfigsState.d.ts → tabs/attributeFilterConfigs/attrtibuteFilterConfigsState.d.ts} +1 -1
  166. package/esm/model/store/tabs/attributeFilterConfigs/attrtibuteFilterConfigsState.d.ts.map +1 -0
  167. package/esm/model/store/tabs/attributeFilterConfigs/attrtibuteFilterConfigsState.js +5 -0
  168. package/esm/model/store/tabs/attributeFilterConfigs/attrtibuteFilterConfigsState.js.map +1 -0
  169. package/esm/model/store/{dateFilterConfig → tabs/dateFilterConfig}/dateFilterConfigReducers.d.ts +3 -3
  170. package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigReducers.d.ts.map +1 -0
  171. package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigReducers.js +117 -0
  172. package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigReducers.js.map +1 -0
  173. package/esm/model/store/{dateFilterConfig → tabs/dateFilterConfig}/dateFilterConfigSelectors.d.ts +8 -2
  174. package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigSelectors.d.ts.map +1 -0
  175. package/esm/model/store/{dateFilterConfig → tabs/dateFilterConfig}/dateFilterConfigSelectors.js +36 -13
  176. package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigSelectors.js.map +1 -0
  177. package/esm/model/store/{dateFilterConfig → tabs/dateFilterConfig}/dateFilterConfigState.d.ts +1 -1
  178. package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigState.d.ts.map +1 -0
  179. package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigState.js.map +1 -0
  180. package/esm/model/store/{dateFilterConfigs → tabs/dateFilterConfigs}/dateFilterConfigsReducers.d.ts +7 -7
  181. package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsReducers.d.ts.map +1 -0
  182. package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsReducers.js +105 -0
  183. package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsReducers.js.map +1 -0
  184. package/esm/model/store/{dateFilterConfigs → tabs/dateFilterConfigs}/dateFilterConfigsSelectors.d.ts +7 -1
  185. package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsSelectors.d.ts.map +1 -0
  186. package/esm/model/store/{dateFilterConfigs → tabs/dateFilterConfigs}/dateFilterConfigsSelectors.js +24 -4
  187. package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsSelectors.js.map +1 -0
  188. package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsState.d.ts.map +1 -0
  189. package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsState.js +5 -0
  190. package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsState.js.map +1 -0
  191. package/esm/model/store/{filterContext → tabs/filterContext}/filterContextReducers.d.ts +54 -3
  192. package/esm/model/store/tabs/filterContext/filterContextReducers.d.ts.map +1 -0
  193. package/esm/model/store/{filterContext → tabs/filterContext}/filterContextReducers.js +237 -92
  194. package/esm/model/store/tabs/filterContext/filterContextReducers.js.map +1 -0
  195. package/esm/model/store/{filterContext → tabs/filterContext}/filterContextSelectors.d.ts +182 -2
  196. package/esm/model/store/tabs/filterContext/filterContextSelectors.d.ts.map +1 -0
  197. package/esm/model/store/{filterContext → tabs/filterContext}/filterContextSelectors.js +55 -8
  198. package/esm/model/store/tabs/filterContext/filterContextSelectors.js.map +1 -0
  199. package/esm/model/store/tabs/filterContext/filterContextState.d.ts.map +1 -0
  200. package/esm/model/store/tabs/filterContext/filterContextState.js.map +1 -0
  201. package/esm/model/store/tabs/filterContext/filterContextUtils.d.ts +35 -0
  202. package/esm/model/store/tabs/filterContext/filterContextUtils.d.ts.map +1 -0
  203. package/esm/model/store/{filterContext → tabs/filterContext}/filterContextUtils.js +55 -0
  204. package/esm/model/store/tabs/filterContext/filterContextUtils.js.map +1 -0
  205. package/esm/model/store/tabs/index.d.ts +175 -12
  206. package/esm/model/store/tabs/index.d.ts.map +1 -1
  207. package/esm/model/store/tabs/index.js +15 -3
  208. package/esm/model/store/tabs/index.js.map +1 -1
  209. package/esm/model/store/tabs/tabsReducers.d.ts +22 -6
  210. package/esm/model/store/tabs/tabsReducers.d.ts.map +1 -1
  211. package/esm/model/store/tabs/tabsReducers.js +37 -3
  212. package/esm/model/store/tabs/tabsReducers.js.map +1 -1
  213. package/esm/model/store/tabs/tabsSelectors.d.ts +31 -6
  214. package/esm/model/store/tabs/tabsSelectors.d.ts.map +1 -1
  215. package/esm/model/store/tabs/tabsSelectors.js +6 -0
  216. package/esm/model/store/tabs/tabsSelectors.js.map +1 -1
  217. package/esm/model/store/tabs/tabsState.d.ts +30 -3
  218. package/esm/model/store/tabs/tabsState.d.ts.map +1 -1
  219. package/esm/model/store/tabs/tabsState.js +13 -0
  220. package/esm/model/store/tabs/tabsState.js.map +1 -1
  221. package/esm/model/store/types.d.ts +0 -11
  222. package/esm/model/store/types.d.ts.map +1 -1
  223. package/esm/model/store/widgetDrills/widgetDrillSelectors.d.ts.map +1 -1
  224. package/esm/model/store/widgetDrills/widgetDrillSelectors.js +3 -11
  225. package/esm/model/store/widgetDrills/widgetDrillSelectors.js.map +1 -1
  226. package/esm/presentation/drill/utils/kdaUtils.d.ts.map +1 -1
  227. package/esm/presentation/drill/utils/kdaUtils.js +7 -1
  228. package/esm/presentation/drill/utils/kdaUtils.js.map +1 -1
  229. package/esm/sdk-ui-dashboard.d.ts +365 -22
  230. package/package.json +18 -18
  231. package/styles/css/main.css +5 -5
  232. package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts.map +0 -1
  233. package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsReducers.js +0 -43
  234. package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsReducers.js.map +0 -1
  235. package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsSelectors.d.ts.map +0 -1
  236. package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsSelectors.js.map +0 -1
  237. package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsState.d.ts.map +0 -1
  238. package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsState.js +0 -4
  239. package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsState.js.map +0 -1
  240. package/esm/model/store/attributeFilterConfigs/index.d.ts +0 -10
  241. package/esm/model/store/attributeFilterConfigs/index.d.ts.map +0 -1
  242. package/esm/model/store/attributeFilterConfigs/index.js +0 -13
  243. package/esm/model/store/attributeFilterConfigs/index.js.map +0 -1
  244. package/esm/model/store/dateFilterConfig/dateFilterConfigReducers.d.ts.map +0 -1
  245. package/esm/model/store/dateFilterConfig/dateFilterConfigReducers.js +0 -55
  246. package/esm/model/store/dateFilterConfig/dateFilterConfigReducers.js.map +0 -1
  247. package/esm/model/store/dateFilterConfig/dateFilterConfigSelectors.d.ts.map +0 -1
  248. package/esm/model/store/dateFilterConfig/dateFilterConfigSelectors.js.map +0 -1
  249. package/esm/model/store/dateFilterConfig/dateFilterConfigState.d.ts.map +0 -1
  250. package/esm/model/store/dateFilterConfig/dateFilterConfigState.js.map +0 -1
  251. package/esm/model/store/dateFilterConfig/index.d.ts +0 -16
  252. package/esm/model/store/dateFilterConfig/index.d.ts.map +0 -1
  253. package/esm/model/store/dateFilterConfig/index.js +0 -13
  254. package/esm/model/store/dateFilterConfig/index.js.map +0 -1
  255. package/esm/model/store/dateFilterConfigs/dateFilterConfigsReducers.d.ts.map +0 -1
  256. package/esm/model/store/dateFilterConfigs/dateFilterConfigsReducers.js +0 -63
  257. package/esm/model/store/dateFilterConfigs/dateFilterConfigsReducers.js.map +0 -1
  258. package/esm/model/store/dateFilterConfigs/dateFilterConfigsSelectors.d.ts.map +0 -1
  259. package/esm/model/store/dateFilterConfigs/dateFilterConfigsSelectors.js.map +0 -1
  260. package/esm/model/store/dateFilterConfigs/dateFilterConfigsState.d.ts.map +0 -1
  261. package/esm/model/store/dateFilterConfigs/dateFilterConfigsState.js +0 -4
  262. package/esm/model/store/dateFilterConfigs/dateFilterConfigsState.js.map +0 -1
  263. package/esm/model/store/dateFilterConfigs/index.d.ts +0 -10
  264. package/esm/model/store/dateFilterConfigs/index.d.ts.map +0 -1
  265. package/esm/model/store/dateFilterConfigs/index.js +0 -13
  266. package/esm/model/store/dateFilterConfigs/index.js.map +0 -1
  267. package/esm/model/store/filterContext/filterContextReducers.d.ts.map +0 -1
  268. package/esm/model/store/filterContext/filterContextReducers.js.map +0 -1
  269. package/esm/model/store/filterContext/filterContextSelectors.d.ts.map +0 -1
  270. package/esm/model/store/filterContext/filterContextSelectors.js.map +0 -1
  271. package/esm/model/store/filterContext/filterContextState.d.ts.map +0 -1
  272. package/esm/model/store/filterContext/filterContextState.js.map +0 -1
  273. package/esm/model/store/filterContext/filterContextUtils.d.ts +0 -14
  274. package/esm/model/store/filterContext/filterContextUtils.d.ts.map +0 -1
  275. package/esm/model/store/filterContext/filterContextUtils.js.map +0 -1
  276. package/esm/model/store/filterContext/index.d.ts +0 -36
  277. package/esm/model/store/filterContext/index.d.ts.map +0 -1
  278. package/esm/model/store/filterContext/index.js +0 -13
  279. package/esm/model/store/filterContext/index.js.map +0 -1
  280. /package/esm/model/store/{dateFilterConfig → tabs/dateFilterConfig}/dateFilterConfigState.js +0 -0
  281. /package/esm/model/store/{dateFilterConfigs → tabs/dateFilterConfigs}/dateFilterConfigsState.d.ts +0 -0
  282. /package/esm/model/store/{filterContext → tabs/filterContext}/filterContextState.d.ts +0 -0
  283. /package/esm/model/store/{filterContext → tabs/filterContext}/filterContextState.js +0 -0
@@ -1,6 +1,6 @@
1
- import { IAccessControlAware, IDashboard, IDashboardDateFilterConfig, IDashboardDefinition, IDashboardWidget, IFilterContext, IFilterContextDefinition, ITempFilterContext, IdentifierRef, ObjRef, ShareStatus, UriRef } from "@gooddata/sdk-model";
1
+ import { IAccessControlAware, IDashboard, IDashboardAttributeFilterConfig, IDashboardDateFilterConfig, IDashboardDateFilterConfigItem, IDashboardDefinition, IDashboardTab, IDashboardWidget, IFilterContext, IFilterContextDefinition, ITempFilterContext, IdentifierRef, ObjRef, ShareStatus, UriRef } from "@gooddata/sdk-model";
2
2
  import { DashboardDescriptor } from "./metaState.js";
3
- import { DashboardSelector } from "../types.js";
3
+ import { DashboardSelector, DashboardState } from "../types.js";
4
4
  /**
5
5
  * Selects dashboard's descriptor.
6
6
  *
@@ -17,27 +17,89 @@ export declare const selectDashboardDescriptor: DashboardSelector<DashboardDescr
17
17
  * @internal
18
18
  */
19
19
  export declare const selectPersistedDashboard: DashboardSelector<IDashboard | undefined>;
20
+ export declare const selectPersistedDashboardTabs: ((state: DashboardState) => IDashboardTab<IDashboardWidget>[]) & {
21
+ clearCache: () => void;
22
+ resultsCount: () => number;
23
+ resetResultsCount: () => void;
24
+ } & {
25
+ resultFunc: (resultFuncArgs_0: import("./metaState.js").DashboardMetaState, resultFuncArgs_1: boolean) => IDashboardTab<IDashboardWidget>[];
26
+ memoizedResultFunc: ((resultFuncArgs_0: import("./metaState.js").DashboardMetaState, resultFuncArgs_1: boolean) => IDashboardTab<IDashboardWidget>[]) & {
27
+ clearCache: () => void;
28
+ resultsCount: () => number;
29
+ resetResultsCount: () => void;
30
+ };
31
+ lastResult: () => IDashboardTab<IDashboardWidget>[];
32
+ dependencies: [((state: DashboardState) => import("./metaState.js").DashboardMetaState) & {
33
+ clearCache: () => void;
34
+ resultsCount: () => number;
35
+ resetResultsCount: () => void;
36
+ } & {
37
+ resultFunc: (resultFuncArgs_0: DashboardState) => import("./metaState.js").DashboardMetaState;
38
+ memoizedResultFunc: ((resultFuncArgs_0: DashboardState) => import("./metaState.js").DashboardMetaState) & {
39
+ clearCache: () => void;
40
+ resultsCount: () => number;
41
+ resetResultsCount: () => void;
42
+ };
43
+ lastResult: () => import("./metaState.js").DashboardMetaState;
44
+ dependencies: [(state: DashboardState) => DashboardState];
45
+ recomputations: () => number;
46
+ resetRecomputations: () => void;
47
+ dependencyRecomputations: () => number;
48
+ resetDependencyRecomputations: () => void;
49
+ } & {
50
+ argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
51
+ memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
52
+ }, DashboardSelector<boolean>];
53
+ recomputations: () => number;
54
+ resetRecomputations: () => void;
55
+ dependencyRecomputations: () => number;
56
+ resetDependencyRecomputations: () => void;
57
+ } & {
58
+ argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
59
+ memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
60
+ };
61
+ /**
62
+ * Returns raw persisted filter contexts keyed by tab identifier.
63
+ *
64
+ * @internal
65
+ */
66
+ export declare const selectPersistedDashboardFilterContextsByTab: DashboardSelector<Record<string, IFilterContext | ITempFilterContext | undefined>>;
20
67
  /**
21
- * Selects persisted IFilterContext/ITempFilterContext - that is the IFilterContext or ITempFilterContext that
22
- * was used to initialize the original filters of the dashboard component during the initial load of the
23
- * dashboard.
68
+ * Returns persisted filter context definitions keyed by tab identifier.
24
69
  *
25
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
26
- * been persisted (typically newly created dashboard being edited).
70
+ * @internal
71
+ */
72
+ export declare const selectPersistedDashboardFilterContextDefinitionsByTab: DashboardSelector<Record<string, IFilterContextDefinition | undefined>>;
73
+ /**
74
+ * Returns persisted attribute filter configs keyed by tab identifier.
75
+ *
76
+ * @internal
77
+ */
78
+ export declare const selectPersistedDashboardAttributeFilterConfigsByTab: DashboardSelector<Record<string, IDashboardAttributeFilterConfig[]>>;
79
+ /**
80
+ * Returns persisted date filter config overrides keyed by tab identifier.
81
+ *
82
+ * @internal
83
+ */
84
+ export declare const selectPersistedDashboardDateFilterConfigByTab: DashboardSelector<Record<string, IDashboardDateFilterConfig | undefined>>;
85
+ /**
86
+ * Returns persisted date filter configs keyed by tab identifier.
87
+ *
88
+ * @internal
89
+ */
90
+ export declare const selectPersistedDashboardDateFilterConfigsByTab: DashboardSelector<Record<string, IDashboardDateFilterConfigItem[]>>;
91
+ /**
92
+ * Selects persisted filter context for the active tab (legacy selector).
27
93
  */
28
94
  export declare const selectPersistedDashboardFilterContext: DashboardSelector<IFilterContext | ITempFilterContext | undefined>;
29
95
  /**
96
+ * Selects persisted date filter config for the active tab (legacy selector).
97
+ *
30
98
  * @internal
31
99
  */
32
100
  export declare const selectPersistedDashboardFilterContextDateFilterConfig: DashboardSelector<IDashboardDateFilterConfig | undefined>;
33
101
  /**
34
- * Selects persisted IFilterContextDefinition - that is the IFilterContext or ITempFilterContext that
35
- * was used to initialize the original filters of the dashboard component during the initial load of the
36
- * dashboard but removes ref, uri and identifier, effectively creating a clone of the stored value
37
- * that can be used independently.
38
- *
39
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
40
- * been persisted (typically newly created dashboard being edited).
102
+ * Selects persisted filter context definition for the active tab (legacy selector).
41
103
  */
42
104
  export declare const selectPersistedDashboardFilterContextAsFilterContextDefinition: DashboardSelector<IFilterContextDefinition | undefined>;
43
105
  /**
@@ -258,12 +320,6 @@ export declare const selectEvaluationFrequencyChanged: DashboardSelector<boolean
258
320
  * @internal
259
321
  */
260
322
  export declare const selectIsSectionHeadersDateDataSetChanged: DashboardSelector<boolean>;
261
- /**
262
- * Selects a boolean indication if the dashboard has any changes to the tabs compared to the persisted version (if any)
263
- *
264
- * @internal
265
- */
266
- export declare const selectIsTabsChanged: DashboardSelector<boolean>;
267
323
  /**
268
324
  * Selects a boolean indication if he dashboard has any changes to the title compared to the persisted version (if any)
269
325
  *
@@ -1 +1 @@
1
- {"version":3,"file":"metaSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/meta/metaSelectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metaSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/meta/metaSelectors.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,13 @@ import { isEqual } from "lodash-es";
4
4
  import { invariant } from "ts-invariant";
5
5
  import { isDashboardLayoutEmpty } from "@gooddata/sdk-backend-spi";
6
6
  import { idRef, isDashboardAttributeFilter, isDashboardCommonDateFilter, isDashboardDateFilterWithDimension, isTempFilterContext, uriRef, } from "@gooddata/sdk-model";
7
- import { selectAttributeFilterConfigsOverrides } from "../attributeFilterConfigs/attributeFilterConfigsSelectors.js";
8
7
  import { selectEnableDashboardTabs } from "../config/configSelectors.js";
9
- import { selectDateFilterConfigOverrides } from "../dateFilterConfig/dateFilterConfigSelectors.js";
10
- import { selectDateFilterConfigsOverrides } from "../dateFilterConfigs/dateFilterConfigsSelectors.js";
11
- import { selectFilterContextAttributeFilters, selectFilterContextDateFilter, selectFilterContextDefinition, selectFilterContextDraggableFilters, selectFilterContextIdentity, } from "../filterContext/filterContextSelectors.js";
12
8
  import { selectBasicLayout } from "../layout/layoutSelectors.js";
13
- import { selectActiveTabId, selectTabs } from "../tabs/tabsSelectors.js";
9
+ import { selectAttributeFilterConfigsOverridesByTab } from "../tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js";
10
+ import { selectDateFilterConfigOverrides, selectDateFilterConfigOverridesByTab, } from "../tabs/dateFilterConfig/dateFilterConfigSelectors.js";
11
+ import { selectDateFilterConfigsOverridesByTab } from "../tabs/dateFilterConfigs/dateFilterConfigsSelectors.js";
12
+ import { selectFilterContextDefinition, selectFilterContextDefinitionsByTab, selectFilterContextIdentity, } from "../tabs/filterContext/filterContextSelectors.js";
13
+ import { DEFAULT_TAB_ID, selectActiveTabId, selectTabs } from "../tabs/index.js";
14
14
  const selectSelf = createSelector((state) => state, (state) => state.meta);
15
15
  /**
16
16
  * Selects dashboard's descriptor.
@@ -34,61 +34,184 @@ export const selectPersistedDashboard = createSelector(selectSelf, (state) => {
34
34
  return state.persistedDashboard ?? undefined;
35
35
  });
36
36
  /**
37
- * Selects persisted IFilterContext/ITempFilterContext - that is the IFilterContext or ITempFilterContext that
38
- * was used to initialize the original filters of the dashboard component during the initial load of the
39
- * dashboard.
40
- *
41
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
42
- * been persisted (typically newly created dashboard being edited).
37
+ * Snapshot of persisted dashboard tab data relevant for dirty checking.
43
38
  */
44
- export const selectPersistedDashboardFilterContext = createSelector(selectSelf, selectEnableDashboardTabs, (state, enableDashboardTabs) => {
39
+ const toFilterContextDefinition = (filterContext) => {
40
+ if (!filterContext) {
41
+ return undefined;
42
+ }
43
+ if (isTempFilterContext(filterContext)) {
44
+ const { ref: _, uri: __, ...definition } = filterContext;
45
+ return {
46
+ ...definition,
47
+ title: "filterContext",
48
+ description: "",
49
+ };
50
+ }
51
+ const { identifier: _, ref: __, uri: ___, ...definition } = filterContext;
52
+ return definition;
53
+ };
54
+ export const selectPersistedDashboardTabs = createSelector(selectSelf, selectEnableDashboardTabs, (state, enableDashboardTabs) => {
45
55
  const persistedDashboard = state.persistedDashboard;
46
56
  if (!persistedDashboard) {
47
- return undefined;
57
+ return [];
48
58
  }
49
- // If tabs are enabled and dashboard has tabs, get filter context from the active tab
50
59
  if (enableDashboardTabs && persistedDashboard.tabs && persistedDashboard.tabs.length > 0) {
51
- const persistedActiveTabId = persistedDashboard.activeTabId;
52
- const activeTab = persistedActiveTabId
53
- ? persistedDashboard.tabs.find((tab) => tab.identifier === persistedActiveTabId)
54
- : undefined;
55
- const effectiveTab = activeTab ?? persistedDashboard.tabs[0];
56
- return effectiveTab.filterContext ?? undefined;
60
+ return persistedDashboard.tabs;
57
61
  }
58
- // No tabs or feature disabled - use root-level filter context
59
- return persistedDashboard.filterContext ?? undefined;
62
+ return [
63
+ {
64
+ identifier: DEFAULT_TAB_ID,
65
+ title: "",
66
+ filterContext: persistedDashboard.filterContext,
67
+ attributeFilterConfigs: persistedDashboard.attributeFilterConfigs,
68
+ dateFilterConfig: persistedDashboard.dateFilterConfig,
69
+ dateFilterConfigs: persistedDashboard.dateFilterConfigs,
70
+ },
71
+ ];
72
+ });
73
+ const selectPersistedDashboardActiveTabId = createSelector(selectSelf, selectPersistedDashboardTabs, selectEnableDashboardTabs, (state, tabs, enableDashboardTabs) => {
74
+ const persistedDashboard = state.persistedDashboard;
75
+ if (!persistedDashboard) {
76
+ return undefined;
77
+ }
78
+ if (enableDashboardTabs) {
79
+ const persistedActiveTabId = persistedDashboard.activeTabId ?? tabs[0]?.identifier;
80
+ return persistedActiveTabId ?? DEFAULT_TAB_ID;
81
+ }
82
+ return DEFAULT_TAB_ID;
60
83
  });
61
84
  /**
85
+ * Returns raw persisted filter contexts keyed by tab identifier.
86
+ *
62
87
  * @internal
63
88
  */
64
- export const selectPersistedDashboardFilterContextDateFilterConfig = createSelector(selectSelf, (state) => {
65
- return state.persistedDashboard?.dateFilterConfig ?? undefined;
89
+ export const selectPersistedDashboardFilterContextsByTab = createSelector(selectPersistedDashboardTabs, (tabSnapshots) => {
90
+ return tabSnapshots.reduce((acc, snapshot) => {
91
+ acc[snapshot.identifier] = snapshot.filterContext;
92
+ return acc;
93
+ }, {});
66
94
  });
67
95
  /**
68
- * Selects persisted IFilterContextDefinition - that is the IFilterContext or ITempFilterContext that
69
- * was used to initialize the original filters of the dashboard component during the initial load of the
70
- * dashboard but removes ref, uri and identifier, effectively creating a clone of the stored value
71
- * that can be used independently.
96
+ * Returns persisted filter context definitions keyed by tab identifier.
72
97
  *
73
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
74
- * been persisted (typically newly created dashboard being edited).
98
+ * @internal
75
99
  */
76
- export const selectPersistedDashboardFilterContextAsFilterContextDefinition = createSelector(selectPersistedDashboardFilterContext, (filterContext) => {
77
- if (!filterContext) {
100
+ export const selectPersistedDashboardFilterContextDefinitionsByTab = createSelector(selectPersistedDashboardTabs, (tabSnapshots) => {
101
+ return tabSnapshots.reduce((acc, snapshot) => {
102
+ acc[snapshot.identifier] = toFilterContextDefinition(snapshot.filterContext);
103
+ return acc;
104
+ }, {});
105
+ });
106
+ /**
107
+ * Returns persisted attribute filter configs keyed by tab identifier.
108
+ *
109
+ * @internal
110
+ */
111
+ export const selectPersistedDashboardAttributeFilterConfigsByTab = createSelector(selectPersistedDashboardTabs, (tabSnapshots) => {
112
+ return tabSnapshots.reduce((acc, snapshot) => {
113
+ acc[snapshot.identifier] = snapshot.attributeFilterConfigs ?? [];
114
+ return acc;
115
+ }, {});
116
+ });
117
+ /**
118
+ * Returns persisted date filter config overrides keyed by tab identifier.
119
+ *
120
+ * @internal
121
+ */
122
+ export const selectPersistedDashboardDateFilterConfigByTab = createSelector(selectPersistedDashboardTabs, (tabSnapshots) => {
123
+ return tabSnapshots.reduce((acc, snapshot) => {
124
+ acc[snapshot.identifier] = snapshot.dateFilterConfig ?? undefined;
125
+ return acc;
126
+ }, {});
127
+ });
128
+ /**
129
+ * Returns persisted date filter configs keyed by tab identifier.
130
+ *
131
+ * @internal
132
+ */
133
+ export const selectPersistedDashboardDateFilterConfigsByTab = createSelector(selectPersistedDashboardTabs, (tabSnapshots) => {
134
+ return tabSnapshots.reduce((acc, snapshot) => {
135
+ acc[snapshot.identifier] = snapshot.dateFilterConfigs ?? [];
136
+ return acc;
137
+ }, {});
138
+ });
139
+ const selectPersistedDashboardFilterContextFiltersByTab = createSelector(selectPersistedDashboardFilterContextDefinitionsByTab, (definitionsByTab) => {
140
+ return Object.entries(definitionsByTab).reduce((acc, [identifier, definition]) => {
141
+ acc[identifier] = definition?.filters ?? [];
142
+ return acc;
143
+ }, {});
144
+ });
145
+ const selectWorkingFilterContextFiltersByTab = createSelector(selectFilterContextDefinitionsByTab, (definitionsByTab) => {
146
+ return Object.entries(definitionsByTab).reduce((acc, [identifier, definition]) => {
147
+ acc[identifier] = definition?.filters ?? [];
148
+ return acc;
149
+ }, {});
150
+ });
151
+ const collectTabIdentifiers = (...maps) => {
152
+ const identifiers = new Set();
153
+ maps.forEach((map) => {
154
+ Object.keys(map ?? {}).forEach((identifier) => identifiers.add(identifier));
155
+ });
156
+ return Array.from(identifiers);
157
+ };
158
+ const selectPersistedDashboardAttributeFiltersByTab = createSelector(selectPersistedDashboardFilterContextFiltersByTab, (filtersByTab) => {
159
+ return Object.entries(filtersByTab).reduce((acc, [identifier, filters]) => {
160
+ acc[identifier] = filters.filter(isDashboardAttributeFilter);
161
+ return acc;
162
+ }, {});
163
+ });
164
+ const selectWorkingAttributeFiltersByTab = createSelector(selectWorkingFilterContextFiltersByTab, (filtersByTab) => {
165
+ return Object.entries(filtersByTab).reduce((acc, [identifier, filters]) => {
166
+ acc[identifier] = filters.filter(isDashboardAttributeFilter);
167
+ return acc;
168
+ }, {});
169
+ });
170
+ const selectPersistedDashboardDraggableFiltersByTab = createSelector(selectPersistedDashboardFilterContextFiltersByTab, (filtersByTab) => {
171
+ return Object.entries(filtersByTab).reduce((acc, [identifier, filters]) => {
172
+ acc[identifier] = filters.filter((filter) => isDashboardDateFilterWithDimension(filter) || isDashboardAttributeFilter(filter));
173
+ return acc;
174
+ }, {});
175
+ });
176
+ const selectWorkingDraggableFiltersByTab = createSelector(selectWorkingFilterContextFiltersByTab, (filtersByTab) => {
177
+ return Object.entries(filtersByTab).reduce((acc, [identifier, filters]) => {
178
+ acc[identifier] = filters.filter((filter) => isDashboardDateFilterWithDimension(filter) || isDashboardAttributeFilter(filter));
179
+ return acc;
180
+ }, {});
181
+ });
182
+ /**
183
+ * Selects persisted filter context for the active tab (legacy selector).
184
+ */
185
+ export const selectPersistedDashboardFilterContext = createSelector(selectPersistedDashboardFilterContextsByTab, selectPersistedDashboardActiveTabId, (filterContextsByTab, activeTabId) => {
186
+ if (!filterContextsByTab || Object.keys(filterContextsByTab).length === 0) {
78
187
  return undefined;
79
188
  }
80
- if (isTempFilterContext(filterContext)) {
81
- const { ref: _, uri: __, ...definition } = filterContext;
82
- return {
83
- ...definition,
84
- title: "filterContext",
85
- description: "",
86
- };
189
+ const resolvedActiveTabId = activeTabId ?? Object.keys(filterContextsByTab)[0];
190
+ return (filterContextsByTab[resolvedActiveTabId] ??
191
+ filterContextsByTab[Object.keys(filterContextsByTab)[0]]);
192
+ });
193
+ /**
194
+ * Selects persisted date filter config for the active tab (legacy selector).
195
+ *
196
+ * @internal
197
+ */
198
+ export const selectPersistedDashboardFilterContextDateFilterConfig = createSelector(selectPersistedDashboardDateFilterConfigByTab, selectPersistedDashboardActiveTabId, (dateFilterConfigByTab, activeTabId) => {
199
+ if (!dateFilterConfigByTab || Object.keys(dateFilterConfigByTab).length === 0) {
200
+ return undefined;
87
201
  }
88
- else {
89
- const { identifier: _, ref: __, uri: ___, ...definition } = filterContext;
90
- return definition;
202
+ const resolvedActiveTabId = activeTabId ?? Object.keys(dateFilterConfigByTab)[0];
203
+ return (dateFilterConfigByTab[resolvedActiveTabId] ??
204
+ dateFilterConfigByTab[Object.keys(dateFilterConfigByTab)[0]]);
205
+ });
206
+ /**
207
+ * Selects persisted filter context definition for the active tab (legacy selector).
208
+ */
209
+ export const selectPersistedDashboardFilterContextAsFilterContextDefinition = createSelector(selectPersistedDashboardFilterContextDefinitionsByTab, selectPersistedDashboardActiveTabId, (definitionsByTab, activeTabId) => {
210
+ if (!definitionsByTab || Object.keys(definitionsByTab).length === 0) {
211
+ return undefined;
91
212
  }
213
+ const resolvedActiveTabId = activeTabId ?? Object.keys(definitionsByTab)[0];
214
+ return definitionsByTab[resolvedActiveTabId] ?? definitionsByTab[Object.keys(definitionsByTab)[0]];
92
215
  });
93
216
  /**
94
217
  * Selects ref of the persisted dashboard object that backs and is rendered-by the dashboard component.
@@ -277,46 +400,6 @@ export const selectEvaluationFrequency = createSelector(selectDashboardDescripto
277
400
  //
278
401
  //
279
402
  //
280
- /**
281
- * Selects persisted FilterContextItems - that is the FilterContextItems that were used to initialize
282
- * the original filters of the dashboard component during the initial load of the dashboard.
283
- *
284
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
285
- * been persisted (typically newly created dashboard being edited).
286
- */
287
- const selectPersistedDashboardFilterContextFilters = createSelector(selectPersistedDashboardFilterContext, (persistedFilterContext) => {
288
- return persistedFilterContext?.filters;
289
- });
290
- /**
291
- * Selects persisted IDashboardDateFilter - that is the IDashboardDateFilter that were used to initialize
292
- * the original filters of the dashboard component during the initial load of the dashboard.
293
- *
294
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
295
- * been persisted (typically newly created dashboard being edited).
296
- */
297
- const selectPersistedDashboardFilterContextDateFilter = createSelector(selectPersistedDashboardFilterContextFilters, (persistedFilters) => {
298
- return (persistedFilters ?? []).find(isDashboardCommonDateFilter);
299
- });
300
- /**
301
- * Selects persisted IDashboardAttributeFilters - that is the IDashboardAttributeFilters that were used to initialize
302
- * the original filters of the dashboard component during the initial load of the dashboard.
303
- *
304
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
305
- * been persisted (typically newly created dashboard being edited).
306
- */
307
- const selectPersistedDashboardFilterContextAttributeFilters = createSelector(selectPersistedDashboardFilterContextFilters, (persistedFilters) => {
308
- return (persistedFilters ?? []).filter(isDashboardAttributeFilter);
309
- });
310
- /**
311
- * Selects persisted draggable filters (date filters with dimension and attribute filters) - that is the filters that were used to initialize
312
- * the original filters of the dashboard component during the initial load of the dashboard.
313
- *
314
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
315
- * been persisted (typically newly created dashboard being edited).
316
- */
317
- const selectPersistedDashboardFilterContextDraggableFilters = createSelector(selectPersistedDashboardFilterContextFilters, (persistedFilters) => {
318
- return (persistedFilters ?? []).filter((f) => isDashboardDateFilterWithDimension(f) || isDashboardAttributeFilter(f));
319
- });
320
403
  /**
321
404
  * Selects persisted title - that is the title that was used to initialize the rest
322
405
  * of the dashboard state of the dashboard component during the initial load of the dashboard.
@@ -387,32 +470,17 @@ const selectPersistedDashboardEvaluationFrequency = createSelector(selectSelf, (
387
470
  const selectPersistedDashboardLayout = createSelector(selectSelf, (state) => {
388
471
  return state.persistedDashboard?.layout;
389
472
  });
390
- /**
391
- * Selects persisted attribute filter configs - that is the attribute filter configs array object that was used to initialize the rest
392
- * of the dashboard state of the dashboard component during the initial load of the dashboard.
393
- *
394
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
395
- * been persisted (typically newly created dashboard being edited).
396
- */
397
- const selectPersistedDashboardAttributeFilterConfigs = createSelector(selectSelf, (state) => {
398
- return state.persistedDashboard?.attributeFilterConfigs || [];
399
- });
400
473
  /**
401
474
  * Selects a boolean indication if he dashboard has any changes to the dashboard filter compared to the persisted version (if any)
402
475
  *
403
476
  */
404
- export const selectIsAttributeFilterConfigsChanged = createSelector(selectPersistedDashboardAttributeFilterConfigs, selectAttributeFilterConfigsOverrides, (persistedAttributeFilterConfigs, currentAttributeFilterConfigs) => {
405
- return !isEqual(persistedAttributeFilterConfigs, currentAttributeFilterConfigs);
406
- });
407
- /**
408
- * Selects persisted date filter configs - that is the date filter configs array object that was used to initialize the rest
409
- * of the dashboard state of the dashboard component during the initial load of the dashboard.
410
- *
411
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
412
- * been persisted (typically newly created dashboard being edited).
413
- */
414
- const selectPersistedDashboardDateFilterConfigs = createSelector(selectSelf, (state) => {
415
- return state.persistedDashboard?.dateFilterConfigs || [];
477
+ export const selectIsAttributeFilterConfigsChanged = createSelector(selectPersistedDashboardAttributeFilterConfigsByTab, selectAttributeFilterConfigsOverridesByTab, (persistedAttributeFilterConfigsByTab, currentAttributeFilterConfigsByTab) => {
478
+ const tabIdentifiers = collectTabIdentifiers(persistedAttributeFilterConfigsByTab, currentAttributeFilterConfigsByTab);
479
+ return tabIdentifiers.some((tabId) => {
480
+ const persistedConfigs = persistedAttributeFilterConfigsByTab[tabId] ?? [];
481
+ const currentConfigs = currentAttributeFilterConfigsByTab[tabId] ?? [];
482
+ return !isEqual(persistedConfigs, currentConfigs);
483
+ });
416
484
  });
417
485
  /**
418
486
  * Selects the date dataset to use for filtering metrics in section header rich text.
@@ -429,59 +497,66 @@ export const selectSectionHeadersDateDataSet = createSelector(selectDashboardDes
429
497
  const selectPersistedDashboardSectionHeadersDateDataSet = createSelector(selectSelf, (state) => {
430
498
  return state.persistedDashboard?.sectionHeadersDateDataSet;
431
499
  });
432
- /**
433
- * Selects persisted tabs - that is the tabs array that was used to initialize the rest
434
- * of the dashboard state of the dashboard component during the initial load of the dashboard.
435
- *
436
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
437
- * been persisted (typically newly created dashboard being edited).
438
- */
439
- const selectPersistedDashboardTabs = createSelector(selectSelf, (state) => {
440
- return state.persistedDashboard?.tabs;
441
- });
442
- /**
443
- * Selects persisted active tab ID - that is the active tab ID that was used to initialize the rest
444
- * of the dashboard state of the dashboard component during the initial load of the dashboard.
445
- *
446
- * Note that this may be undefined when the dashboard component works with a dashboard that has not yet
447
- * been persisted (typically newly created dashboard being edited).
448
- */
449
- const selectPersistedDashboardActiveTabId = createSelector(selectSelf, (state) => {
450
- return state.persistedDashboard?.activeTabId;
451
- });
452
500
  /**
453
501
  * Selects a boolean indication if the dashboard has any changes to the dashboard date filter configs compared to the persisted version (if any)
454
502
  *
455
503
  */
456
- export const selectIsDateFilterConfigsChanged = createSelector(selectPersistedDashboardDateFilterConfigs, selectDateFilterConfigsOverrides, (persistedDateFilterConfigs, currentDateFilterConfigs) => {
457
- return !isEqual(persistedDateFilterConfigs, currentDateFilterConfigs);
504
+ export const selectIsDateFilterConfigsChanged = createSelector(selectPersistedDashboardDateFilterConfigsByTab, selectDateFilterConfigsOverridesByTab, (persistedDateFilterConfigsByTab, currentDateFilterConfigsByTab) => {
505
+ const tabIdentifiers = collectTabIdentifiers(persistedDateFilterConfigsByTab, currentDateFilterConfigsByTab);
506
+ return tabIdentifiers.some((tabId) => {
507
+ const persistedConfigs = persistedDateFilterConfigsByTab[tabId] ?? [];
508
+ const currentConfigs = currentDateFilterConfigsByTab[tabId] ?? [];
509
+ return !isEqual(persistedConfigs, currentConfigs);
510
+ });
458
511
  });
459
512
  /**
460
513
  * Selects a boolean indication if the dashboard has any changes to the dashboard filter compared to the persisted version (if any)
461
514
  *
462
515
  * @internal
463
516
  */
464
- export const selectIsDateFilterChanged = createSelector(selectPersistedDashboardFilterContextDateFilter, selectFilterContextDateFilter, (persistedDateFilter, currentDateFilter) => {
465
- return !isEqual(persistedDateFilter, currentDateFilter);
466
- });
467
- export const selectIsDateFilterConfigChanged = createSelector(selectPersistedDashboardFilterContextDateFilterConfig, selectDateFilterConfigOverrides, (persistedDateFilterConfig, currentDateFilterConfig) => {
468
- return !isEqual(persistedDateFilterConfig, currentDateFilterConfig);
517
+ export const selectIsDateFilterChanged = createSelector(selectPersistedDashboardFilterContextFiltersByTab, selectWorkingFilterContextFiltersByTab, (persistedFiltersByTab, workingFiltersByTab) => {
518
+ const tabIdentifiers = collectTabIdentifiers(persistedFiltersByTab, workingFiltersByTab);
519
+ return tabIdentifiers.some((tabId) => {
520
+ const persistedFilters = persistedFiltersByTab[tabId] ?? [];
521
+ const workingFilters = workingFiltersByTab[tabId] ?? [];
522
+ const persistedDateFilter = persistedFilters.find(isDashboardCommonDateFilter);
523
+ const workingDateFilter = workingFilters.find(isDashboardCommonDateFilter);
524
+ return !isEqual(persistedDateFilter, workingDateFilter);
525
+ });
526
+ });
527
+ export const selectIsDateFilterConfigChanged = createSelector(selectPersistedDashboardDateFilterConfigByTab, selectDateFilterConfigOverridesByTab, (persistedDateFilterConfigByTab, currentDateFilterConfigByTab) => {
528
+ const tabIdentifiers = collectTabIdentifiers(persistedDateFilterConfigByTab, currentDateFilterConfigByTab);
529
+ return tabIdentifiers.some((tabId) => {
530
+ const persistedConfig = persistedDateFilterConfigByTab[tabId];
531
+ const currentConfig = currentDateFilterConfigByTab[tabId];
532
+ return !isEqual(persistedConfig, currentConfig);
533
+ });
469
534
  });
470
535
  /**
471
536
  * Selects a boolean indication if the dashboard has any changes to the attribute filters compared to the persisted version (if any)
472
537
  *
473
538
  * @internal
474
539
  */
475
- export const selectIsAttributeFiltersChanged = createSelector(selectPersistedDashboardFilterContextAttributeFilters, selectFilterContextAttributeFilters, (persistedAttributeFilters, currentAttributeFilters) => {
476
- return !isEqual(persistedAttributeFilters, currentAttributeFilters);
540
+ export const selectIsAttributeFiltersChanged = createSelector(selectPersistedDashboardAttributeFiltersByTab, selectWorkingAttributeFiltersByTab, (persistedAttributeFiltersByTab, workingAttributeFiltersByTab) => {
541
+ const tabIdentifiers = collectTabIdentifiers(persistedAttributeFiltersByTab, workingAttributeFiltersByTab);
542
+ return tabIdentifiers.some((tabId) => {
543
+ const persistedFilters = persistedAttributeFiltersByTab[tabId] ?? [];
544
+ const workingFilters = workingAttributeFiltersByTab[tabId] ?? [];
545
+ return !isEqual(persistedFilters, workingFilters);
546
+ });
477
547
  });
478
548
  /**
479
549
  * Selects a boolean indication if the dashboard has any changes to the date filters with dimension compared to the persisted version (if any)
480
550
  *
481
551
  * @internal
482
552
  */
483
- export const selectIsOtherFiltersChanged = createSelector(selectPersistedDashboardFilterContextDraggableFilters, selectFilterContextDraggableFilters, (persistedFilters, currentFilters) => {
484
- return !isEqual(persistedFilters, currentFilters);
553
+ export const selectIsOtherFiltersChanged = createSelector(selectPersistedDashboardDraggableFiltersByTab, selectWorkingDraggableFiltersByTab, (persistedDraggableFiltersByTab, workingDraggableFiltersByTab) => {
554
+ const tabIdentifiers = collectTabIdentifiers(persistedDraggableFiltersByTab, workingDraggableFiltersByTab);
555
+ return tabIdentifiers.some((tabId) => {
556
+ const persistedFilters = persistedDraggableFiltersByTab[tabId] ?? [];
557
+ const workingFilters = workingDraggableFiltersByTab[tabId] ?? [];
558
+ return !isEqual(persistedFilters, workingFilters);
559
+ });
485
560
  });
486
561
  /**
487
562
  * Selects a boolean indication if the dashboard has any changes to any of the filters compared to the persisted version (if any)
@@ -544,16 +619,35 @@ export const selectIsSectionHeadersDateDataSetChanged = createSelector(selectPer
544
619
  });
545
620
  /**
546
621
  * Selects a boolean indication if the dashboard has any changes to the tabs compared to the persisted version (if any)
622
+ * Compares only the tabs identifiers and titles.
547
623
  *
548
- * @internal
549
624
  */
550
- export const selectIsTabsChanged = createSelector(selectPersistedDashboardTabs, selectPersistedDashboardActiveTabId, selectTabs, selectActiveTabId, (persistedTabs, persistedActiveTabId, currentTabs, currentActiveTabId) => {
551
- // Check if active tab ID changed
625
+ const selectIsTabsChanged = createSelector(selectPersistedDashboardTabs, selectPersistedDashboardActiveTabId, selectTabs, selectActiveTabId, (persistedTabs, persistedActiveTabId, currentTabs, currentActiveTabId) => {
626
+ // Check if active tab ID changed (only if persisted dashboard has tabs)
552
627
  if (persistedActiveTabId !== currentActiveTabId) {
553
628
  return true;
554
629
  }
555
- // Compare tabs arrays
556
- return !isEqual(persistedTabs, currentTabs);
630
+ // Both have tabs - compare them
631
+ // Normalize tabs for comparison - compare all common properties including filter configs
632
+ // Layout is compared separately via selectIsLayoutChanged
633
+ const normalizeTabsForComparison = (tabs) => {
634
+ if (!tabs || tabs.length === 0) {
635
+ return [];
636
+ }
637
+ return tabs
638
+ .map((tab) => {
639
+ return {
640
+ identifier: tab.identifier,
641
+ title: tab.title,
642
+ // all other props are dirty checked separately
643
+ };
644
+ })
645
+ .sort((a, b) => a.identifier.localeCompare(b.identifier));
646
+ };
647
+ const normalizedPersistedTabs = normalizeTabsForComparison(persistedTabs);
648
+ const normalizedCurrentTabs = normalizeTabsForComparison(currentTabs);
649
+ // Compare normalized tabs arrays
650
+ return !isEqual(normalizedPersistedTabs, normalizedCurrentTabs);
557
651
  });
558
652
  /**
559
653
  * Selects a boolean indication if he dashboard has any changes to the title compared to the persisted version (if any)