@gooddata/sdk-ui-dashboard 11.43.0-alpha.0 → 11.43.0-alpha.2

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 (152) hide show
  1. package/NOTICE +130 -130
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/index.d.ts +3 -2
  5. package/esm/index.d.ts.map +1 -1
  6. package/esm/index.js +1 -1
  7. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.d.ts.map +1 -1
  8. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.js +10 -5
  9. package/esm/model/commandHandlers/filterContext/dateFilter/removeDateFiltersHandler.d.ts.map +1 -1
  10. package/esm/model/commandHandlers/filterContext/dateFilter/removeDateFiltersHandler.js +22 -4
  11. package/esm/model/commandHandlers/scheduledEmail/createScheduledEmailHandler.d.ts.map +1 -1
  12. package/esm/model/commandHandlers/scheduledEmail/createScheduledEmailHandler.js +3 -1
  13. package/esm/model/commandHandlers/scheduledEmail/csvRawExecutionDefinition.d.ts +2 -2
  14. package/esm/model/commandHandlers/scheduledEmail/csvRawExecutionDefinition.d.ts.map +1 -1
  15. package/esm/model/commandHandlers/scheduledEmail/csvRawExecutionDefinition.js +36 -3
  16. package/esm/model/commandHandlers/scheduledEmail/saveScheduledEmailHandler.d.ts.map +1 -1
  17. package/esm/model/commandHandlers/scheduledEmail/saveScheduledEmailHandler.js +3 -1
  18. package/esm/model/store/executionResults/executionResultsSelectors.d.ts +4 -0
  19. package/esm/model/store/executionResults/executionResultsSelectors.d.ts.map +1 -1
  20. package/esm/model/store/executionResults/executionResultsSelectors.js +4 -1
  21. package/esm/model/store/filtering/dashboardFilterSelectors.d.ts +1 -30
  22. package/esm/model/store/filtering/dashboardFilterSelectors.d.ts.map +1 -1
  23. package/esm/model/store/filtering/dashboardFilterSelectors.js +3 -0
  24. package/esm/model/store/filtering/types.d.ts +33 -0
  25. package/esm/model/store/filtering/types.d.ts.map +1 -0
  26. package/esm/model/store/filtering/types.js +2 -0
  27. package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigSelectors.d.ts +14 -0
  28. package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigSelectors.d.ts.map +1 -1
  29. package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigSelectors.js +35 -0
  30. package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +12 -0
  31. package/esm/model/store/tabs/parameters/parametersSelectors.d.ts.map +1 -1
  32. package/esm/model/store/tabs/parameters/parametersSelectors.js +37 -12
  33. package/esm/presentation/automations/_staging/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  34. package/esm/presentation/automations/_staging/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +10 -5
  35. package/esm/presentation/automations/_staging/alerting/DefaultAlertingManagementDialog/components/PauseAlertRunner.js +1 -1
  36. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.d.ts +3 -0
  37. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.d.ts.map +1 -0
  38. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +110 -0
  39. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.test.d.ts +2 -0
  40. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.test.d.ts.map +1 -0
  41. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.test.js +99 -0
  42. package/esm/presentation/automations/connectors/hooks/useWidgetAutomationFilters.d.ts +4 -0
  43. package/esm/presentation/automations/connectors/hooks/useWidgetAutomationFilters.d.ts.map +1 -0
  44. package/esm/presentation/automations/connectors/hooks/useWidgetAutomationFilters.js +46 -0
  45. package/esm/presentation/automations/contexts/AutomationsContext.d.ts +42 -2
  46. package/esm/presentation/automations/contexts/AutomationsContext.d.ts.map +1 -1
  47. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  48. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +8 -2
  49. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts +1 -1
  50. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts.map +1 -1
  51. package/esm/presentation/automations/scheduledEmail/hooks/useWidgetAutomationFilters.d.ts +2 -3
  52. package/esm/presentation/automations/scheduledEmail/hooks/useWidgetAutomationFilters.d.ts.map +1 -1
  53. package/esm/presentation/automations/scheduledEmail/hooks/useWidgetAutomationFilters.js +4 -45
  54. package/esm/presentation/automations/shared/automationFilters/components/AutomationDateFilter.d.ts.map +1 -1
  55. package/esm/presentation/automations/shared/automationFilters/components/AutomationDateFilter.js +9 -16
  56. package/esm/presentation/automations/shared/automationFilters/components/AutomationDateFilter.test.d.ts +2 -0
  57. package/esm/presentation/automations/shared/automationFilters/components/AutomationDateFilter.test.d.ts.map +1 -0
  58. package/esm/presentation/automations/shared/automationFilters/components/AutomationDateFilter.test.js +131 -0
  59. package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts +1 -1
  60. package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts.map +1 -1
  61. package/esm/presentation/automations/shared/automationFilters/hooks/useAutomationVisibleFilters.d.ts.map +1 -1
  62. package/esm/presentation/automations/shared/automationFilters/hooks/useAutomationVisibleFilters.js +1 -1
  63. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.d.ts +1 -1
  64. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.d.ts.map +1 -1
  65. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.js +4 -6
  66. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForNewAutomation.d.ts +1 -1
  67. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForNewAutomation.d.ts.map +1 -1
  68. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForNewAutomation.js +3 -4
  69. package/esm/presentation/automations/shared/automationFilters/hooks/useValidateExistingAutomationFilters.d.ts +1 -1
  70. package/esm/presentation/automations/shared/automationFilters/hooks/useValidateExistingAutomationFilters.d.ts.map +1 -1
  71. package/esm/presentation/automations/shared/automationFilters/hooks/useValidateExistingAutomationFilters.js +4 -10
  72. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.d.ts +1 -1
  73. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.d.ts.map +1 -1
  74. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.js +3 -28
  75. package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.d.ts +2 -2
  76. package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.d.ts.map +1 -1
  77. package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.js +2 -5
  78. package/esm/presentation/automations/shared/automationFilters/utils.d.ts +1 -1
  79. package/esm/presentation/automations/shared/automationFilters/utils.d.ts.map +1 -1
  80. package/esm/presentation/automations/shared/dateFilterConfig/dateFilterConfigConverters.d.ts +10 -0
  81. package/esm/presentation/automations/shared/dateFilterConfig/dateFilterConfigConverters.d.ts.map +1 -0
  82. package/esm/presentation/automations/shared/dateFilterConfig/dateFilterConfigConverters.js +89 -0
  83. package/esm/presentation/automations/shared/dateFilterConfig/dateFilterOptionMapping.d.ts +34 -0
  84. package/esm/presentation/automations/shared/dateFilterConfig/dateFilterOptionMapping.d.ts.map +1 -0
  85. package/esm/presentation/automations/shared/dateFilterConfig/dateFilterOptionMapping.js +261 -0
  86. package/esm/presentation/automations/shared/dateFilterConfig/defaultConfig.d.ts +12 -0
  87. package/esm/presentation/automations/shared/dateFilterConfig/defaultConfig.d.ts.map +1 -0
  88. package/esm/presentation/automations/shared/dateFilterConfig/defaultConfig.js +437 -0
  89. package/esm/presentation/automations/shared/exportUtils/filterUtils.d.ts +3 -0
  90. package/esm/presentation/automations/shared/exportUtils/filterUtils.d.ts.map +1 -0
  91. package/esm/presentation/automations/shared/exportUtils/filterUtils.js +14 -0
  92. package/esm/presentation/automations/shared/hooks/useAttributeFilterDisplayFormFromMap.d.ts +3 -0
  93. package/esm/presentation/automations/shared/hooks/useAttributeFilterDisplayFormFromMap.d.ts.map +1 -0
  94. package/esm/presentation/automations/shared/hooks/useAttributeFilterDisplayFormFromMap.js +7 -0
  95. package/esm/presentation/automations/shared/hooks/useCommonDateFilterTitle.d.ts +3 -0
  96. package/esm/presentation/automations/shared/hooks/useCommonDateFilterTitle.d.ts.map +1 -0
  97. package/esm/presentation/automations/shared/hooks/useCommonDateFilterTitle.js +6 -0
  98. package/esm/presentation/automations/shared/hooks/useDateFiltersTitles.d.ts +4 -0
  99. package/esm/presentation/automations/shared/hooks/useDateFiltersTitles.d.ts.map +1 -0
  100. package/esm/presentation/automations/shared/hooks/useDateFiltersTitles.js +19 -0
  101. package/esm/presentation/automations/shared/hooks/useFiltersNamings.d.ts +13 -0
  102. package/esm/presentation/automations/shared/hooks/useFiltersNamings.d.ts.map +1 -0
  103. package/esm/presentation/automations/shared/hooks/useFiltersNamings.js +196 -0
  104. package/esm/presentation/automations/shared/utils/automationUtils.d.ts +24 -0
  105. package/esm/presentation/automations/shared/utils/automationUtils.d.ts.map +1 -0
  106. package/esm/presentation/automations/shared/utils/automationUtils.js +135 -0
  107. package/esm/presentation/automations/shared/utils/filterContextUtils.d.ts +4 -0
  108. package/esm/presentation/automations/shared/utils/filterContextUtils.d.ts.map +1 -0
  109. package/esm/presentation/automations/shared/utils/filterContextUtils.js +67 -0
  110. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditor.d.ts.map +1 -1
  111. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditor.js +11 -13
  112. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useDependentDateFilterConfigurationState.d.ts.map +1 -1
  113. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useDependentDateFilterConfigurationState.js +34 -16
  114. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useDependentDateFiltersConfiguration.d.ts.map +1 -1
  115. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useDependentDateFiltersConfiguration.js +23 -8
  116. package/esm/presentation/filterBar/attributeFilter/useDependentDateFilters.d.ts.map +1 -1
  117. package/esm/presentation/filterBar/attributeFilter/useDependentDateFilters.js +17 -6
  118. package/esm/presentation/topBar/menuButton/DefaultMenuButton.d.ts.map +1 -1
  119. package/esm/presentation/topBar/menuButton/DefaultMenuButton.js +11 -20
  120. package/esm/presentation/widget/insight/ViewModeDashboardInsight/Insight/DashboardInsight.d.ts.map +1 -1
  121. package/esm/presentation/widget/insight/ViewModeDashboardInsight/Insight/DashboardInsight.js +3 -4
  122. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogExportDropdown.d.ts.map +1 -1
  123. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogExportDropdown.js +1 -1
  124. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.d.ts.map +1 -1
  125. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.js +11 -2
  126. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useCreateAlert.d.ts.map +1 -0
  127. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useInsightWidgetAlerting.d.ts.map +1 -1
  128. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useInsightWidgetAlerting.js +2 -2
  129. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useSaveAlertToBackend.d.ts.map +1 -0
  130. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useUpdateAlert.d.ts.map +1 -0
  131. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useWidgetAutomationFilters.d.ts +4 -0
  132. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useWidgetAutomationFilters.d.ts.map +1 -0
  133. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useWidgetAutomationFilters.js +46 -0
  134. package/esm/presentation/widget/insight/configuration/InsightAlertsNew.d.ts.map +1 -1
  135. package/esm/presentation/widget/insight/configuration/InsightAlertsNew.js +1 -1
  136. package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/DashboardInsightMenuItemButton.d.ts.map +1 -1
  137. package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/DashboardInsightMenuItemButton.js +2 -2
  138. package/esm/presentation/widget/insightMenu/types.js +1 -1
  139. package/esm/presentation/widget/widget/warningPartialResult/InsightWidgetWarningPartialResult.d.ts.map +1 -1
  140. package/esm/presentation/widget/widget/warningPartialResult/InsightWidgetWarningPartialResult.js +1 -1
  141. package/esm/sdk-ui-dashboard.d.ts +11 -2
  142. package/esm/tsdoc-metadata.json +1 -1
  143. package/package.json +20 -20
  144. package/esm/presentation/automations/_staging/alerting/DefaultAlertingDialog/hooks/useCreateAlert.d.ts.map +0 -1
  145. package/esm/presentation/automations/_staging/alerting/DefaultAlertingDialog/hooks/useSaveAlertToBackend.d.ts.map +0 -1
  146. package/esm/presentation/automations/_staging/alerting/DefaultAlertingDialog/hooks/useUpdateAlert.d.ts.map +0 -1
  147. /package/esm/presentation/{automations/_staging/alerting/DefaultAlertingDialog → widget/insight/configuration/InsightAlertConfig}/hooks/useCreateAlert.d.ts +0 -0
  148. /package/esm/presentation/{automations/_staging/alerting/DefaultAlertingDialog → widget/insight/configuration/InsightAlertConfig}/hooks/useCreateAlert.js +0 -0
  149. /package/esm/presentation/{automations/_staging/alerting/DefaultAlertingDialog → widget/insight/configuration/InsightAlertConfig}/hooks/useSaveAlertToBackend.d.ts +0 -0
  150. /package/esm/presentation/{automations/_staging/alerting/DefaultAlertingDialog → widget/insight/configuration/InsightAlertConfig}/hooks/useSaveAlertToBackend.js +0 -0
  151. /package/esm/presentation/{automations/_staging/alerting/DefaultAlertingDialog → widget/insight/configuration/InsightAlertConfig}/hooks/useUpdateAlert.d.ts +0 -0
  152. /package/esm/presentation/{automations/_staging/alerting/DefaultAlertingDialog → widget/insight/configuration/InsightAlertConfig}/hooks/useUpdateAlert.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useDependentDateFilters.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/attributeFilter/useDependentDateFilters.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,4BAA4B,EAKpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAe1E;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,EAAE,sBAAsB,CAAC,CAAC;AAE7F;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,8FAqEnC,CAAC"}
1
+ {"version":3,"file":"useDependentDateFilters.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/attributeFilter/useDependentDateFilters.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,4BAA4B,EAMpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAe1E;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,EAAE,sBAAsB,CAAC,CAAC;AAE7F;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,8FAiFnC,CAAC"}
@@ -34,23 +34,34 @@ export const useDependentDateFilters = (filter, tabId) => {
34
34
  const dependentDateFilters = useMemo(() => {
35
35
  return filterElementsByDate?.map((dependentDateFilter) => {
36
36
  if (dependentDateFilter.isCommonDate) {
37
+ // The dimension to apply the common date range through.
38
+ // New format: the explicit `dataSet` field (filterLocalIdentifier references the common
39
+ // date filter itself). Legacy format: no `dataSet` field, so the dataset identifier was
40
+ // stored directly in filterLocalIdentifier.
41
+ const dataSet = dependentDateFilter.dataSet ?? {
42
+ identifier: dependentDateFilter.filterLocalIdentifier,
43
+ type: "dataSet",
44
+ };
37
45
  const commonDashboardDateFilter = {
38
46
  dateFilter: {
39
47
  type: commonDateFilterWithAllTime?.dateFilter.type,
40
48
  granularity: commonDateFilterWithAllTime?.dateFilter.granularity,
41
49
  from: commonDateFilterWithAllTime?.dateFilter.from,
42
50
  to: commonDateFilterWithAllTime?.dateFilter.to,
43
- dataSet: {
44
- identifier: dependentDateFilter.filterLocalIdentifier,
45
- type: "dataSet",
46
- },
51
+ dataSet,
47
52
  },
48
53
  };
49
54
  return commonDashboardDateFilter;
50
55
  }
51
56
  else {
52
- const matchingFilter = allDateFilters.find((filter) => objRefToString(filter.dateFilter.dataSet) ===
53
- dependentDateFilter.filterLocalIdentifier);
57
+ // Try localIdentifier first (new format), then fall back to dataset identifier
58
+ // (legacy format) for dashboards saved before the localIdentifier-based approach.
59
+ // NOTE: If a filter's localIdentifier happens to equal another filter's dataset
60
+ // identifier the wrong filter could be matched — this is an accepted theoretical
61
+ // risk given the practical namespace separation between the two.
62
+ const matchingFilter = allDateFilters.find((filter) => filter.dateFilter.localIdentifier === dependentDateFilter.filterLocalIdentifier ||
63
+ objRefToString(filter.dateFilter.dataSet) ===
64
+ dependentDateFilter.filterLocalIdentifier);
54
65
  invariant(matchingFilter); // if this blows up, the state is inconsistent
55
66
  return matchingFilter;
56
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultMenuButton.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/menuButton/DefaultMenuButton.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGH,KAAK,YAAY,EAOpB,MAAM,OAAO,CAAC;AA0Bf,OAAO,EAIH,KAAK,gBAAgB,EACxB,MAAM,YAAY,CAAC;AAIpB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,gBAAgB,GAAG,YAAY,GAAG,IAAI,CA0OtF"}
1
+ {"version":3,"file":"DefaultMenuButton.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/menuButton/DefaultMenuButton.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGH,KAAK,YAAY,EAOpB,MAAM,OAAO,CAAC;AA2Bf,OAAO,EAIH,KAAK,gBAAgB,EACxB,MAAM,YAAY,CAAC;AAIpB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,gBAAgB,GAAG,YAAY,GAAG,IAAI,CAgOtF"}
@@ -3,7 +3,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
3
3
  import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
4
4
  import cx from "classnames";
5
5
  import { useIntl } from "react-intl";
6
- import { Button, ItemsWrapper, Overlay, SingleSelectListItem, UiFocusManager, UiIcon, UiTooltip, getFocusableElements, isActionKey, makeMenuKeyboardNavigation, useId, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
6
+ import { Button, ItemsWrapper, Overlay, SingleSelectListItem, UiFocusManager, UiIcon, UiTooltip, findFocusableElementOutsideContainer, getFocusableElements, isActionKey, makeMenuKeyboardNavigation, useId, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
7
7
  import { DEFAULT_MENU_BUTTON_ID } from "../../../_staging/accessibility/elementId.js";
8
8
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
9
9
  import { selectDashboardDensity } from "../../../model/store/ui/uiSelectors.js";
@@ -20,6 +20,7 @@ export function DefaultMenuButton({ menuItems }) {
20
20
  const backLabel = intl.formatMessage({ id: "controlButtons.options.back" });
21
21
  const closeLabel = intl.formatMessage({ id: "controlButtons.options.closeMenu" });
22
22
  const menuWrapperRef = useRef(null);
23
+ const triggerButtonRef = useRef(null);
23
24
  const [parentItemId, setParentItemId] = useState(null);
24
25
  const menuItemRefs = useRef(new Map());
25
26
  const density = useDashboardSelector(selectDashboardDensity);
@@ -99,24 +100,14 @@ export function DefaultMenuButton({ menuItems }) {
99
100
  }
100
101
  event.stopPropagation();
101
102
  event.preventDefault();
102
- if (!selectedMenuItem || event.key !== "Tab" || !menuWrapperRef.current) {
103
+ if (event.key !== "Tab") {
103
104
  return;
104
105
  }
105
- const { focusableElements } = getFocusableElements(menuWrapperRef.current);
106
- let currentIndex = Array.from(focusableElements).indexOf(document.activeElement);
107
- let nextElement;
108
- const isMenuItemExceptTheFirstOne = (element) => element.getAttribute("role") === "menuitem" &&
109
- element !== Array.from(menuItemRefs.current.values())[0];
110
- const getNextElementIndex = (currentIndex, isShiftKey) => {
111
- if (isShiftKey) {
112
- return currentIndex <= 0 ? focusableElements.length - 1 : currentIndex - 1;
113
- }
114
- return (currentIndex + 1) % focusableElements.length;
115
- };
116
- do {
117
- currentIndex = getNextElementIndex(currentIndex, event.shiftKey);
118
- nextElement = focusableElements[currentIndex];
119
- } while (isMenuItemExceptTheFirstOne(nextElement));
106
+ const triggerButton = triggerButtonRef.current;
107
+ const nextElement = triggerButton
108
+ ? findFocusableElementOutsideContainer(triggerButton, event.shiftKey ? "backward" : "forward")
109
+ : null;
110
+ onClose();
120
111
  nextElement?.focus();
121
112
  },
122
113
  });
@@ -139,7 +130,7 @@ export function DefaultMenuButton({ menuItems }) {
139
130
  return null;
140
131
  }
141
132
  const renderMenuItems = () => {
142
- return (_jsx(Overlay, { alignTo: `.${dropdownAnchorClassName}`, alignPoints: overlayAlignPoints, className: "gd-header-menu-overlay", closeOnMouseDrag: true, closeOnOutsideClick: true, onClose: onMenuButtonClick, children: _jsx(UiFocusManager, { enableAutofocus: true, enableFocusTrap: true, enableReturnFocusOnUnmount: true, children: _jsx("div", { onKeyDown: menuKeyboardNavigationHandler, children: _jsxs(ItemsWrapper, { smallItemsSpacing: true, className: "gd-menu", wrapperRef: menuWrapperRef, children: [selectedMenuItem ? (_jsx(DefaultSubmenuHeader, { title: selectedMenuItem.itemName, backLabel: backLabel, closeLabel: closeLabel, onClose: onClose, onGoBack: () => {
133
+ return (_jsx(Overlay, { alignTo: `.${dropdownAnchorClassName}`, alignPoints: overlayAlignPoints, className: "gd-header-menu-overlay", closeOnMouseDrag: true, closeOnOutsideClick: true, onClose: onMenuButtonClick, children: _jsx(UiFocusManager, { enableAutofocus: true, enableReturnFocusOnUnmount: true, children: _jsx("div", { onKeyDown: menuKeyboardNavigationHandler, children: _jsxs(ItemsWrapper, { smallItemsSpacing: true, className: "gd-menu", wrapperRef: menuWrapperRef, children: [selectedMenuItem ? (_jsx(DefaultSubmenuHeader, { title: selectedMenuItem.itemName, backLabel: backLabel, closeLabel: closeLabel, onClose: onClose, onGoBack: () => {
143
134
  setAutofocusSubmenu(true);
144
135
  setSelectedMenuItem(null);
145
136
  } })) : null, _jsx("div", { role: "menu", id: menuId, "aria-labelledby": DEFAULT_MENU_BUTTON_ID, children: visibleMenuItems.map((menuItem) => {
@@ -148,7 +139,7 @@ export function DefaultMenuButton({ menuItems }) {
148
139
  ] }) }) }) }, "topBarMenuButton"));
149
140
  };
150
141
  return (_jsxs(_Fragment, { children: [
151
- _jsx(UiTooltip, { arrowPlacement: "top-end", content: tooltipText, anchor: _jsx(Button, { onClick: onMenuButtonClick, value: "\u22EF", id: DEFAULT_MENU_BUTTON_ID, className: cx("gd-button-primary dash-header-options-button s-header-options-button gd-button", dropdownAnchorClassName, {
142
+ _jsx(UiTooltip, { arrowPlacement: "top-end", content: tooltipText, anchor: _jsx(Button, { ref: triggerButtonRef, onClick: onMenuButtonClick, value: "\u22EF", id: DEFAULT_MENU_BUTTON_ID, className: cx("gd-button-primary dash-header-options-button s-header-options-button gd-button", dropdownAnchorClassName, {
152
143
  "gd-button-small": density === "compact",
153
144
  }), accessibilityConfig: {
154
145
  ariaLabel: tooltipText,
@@ -236,5 +227,5 @@ function MenuItem({ menuItem, selectedMenuItem, setMenuItemRef, setSelectedMenuI
236
227
  });
237
228
  }
238
229
  function renderMenuItemWarning(info, suppressHover) {
239
- return (_jsx("span", { className: "gd-list-icon gd-list-icon-right", children: _jsx(UiTooltip, { triggerBy: ["hover"], disabled: suppressHover, arrowPlacement: "left", optimalPlacement: true, content: info, anchor: _jsx(UiIcon, { type: "warning", size: 16, color: "warning", accessibilityConfig: { ariaHidden: true } }) }) }));
230
+ return (_jsx("span", { className: "gd-list-icon gd-list-icon-right", "data-testid": "menu-item-info-icon", children: _jsx(UiTooltip, { triggerBy: ["hover"], disabled: suppressHover, arrowPlacement: "left", optimalPlacement: true, content: info, anchor: _jsx(UiIcon, { type: "warning", size: 16, color: "warning", accessibilityConfig: { ariaHidden: true } }) }) }));
240
231
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardInsight.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/Insight/DashboardInsight.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,YAAY,EAMpB,MAAM,OAAO,CAAC;AAkDf,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAkD7D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,OAAO,EACP,MAAM,EACN,YAAY,EACZ,WAAW,EACX,OAAO,EACP,SAAS,EACT,OAAO,EACP,OAAO,EAAE,SAAS,EAClB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,cAAc,EAAE,oBAAoB,EACpC,gBAAgB,EAAE,sBAAsB,EACxC,UAAU,EACV,YAAY,EACZ,aAAa,EAChB,EAAE,sBAAsB,GAAG,YAAY,CA0QvC"}
1
+ {"version":3,"file":"DashboardInsight.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/Insight/DashboardInsight.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,YAAY,EAMpB,MAAM,OAAO,CAAC;AAkDf,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAkD7D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,OAAO,EACP,MAAM,EACN,YAAY,EACZ,WAAW,EACX,OAAO,EACP,SAAS,EACT,OAAO,EACP,OAAO,EAAE,SAAS,EAClB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,cAAc,EAAE,oBAAoB,EACpC,gBAAgB,EAAE,sBAAsB,EACxC,UAAU,EACV,YAAY,EACZ,aAAa,EAChB,EAAE,sBAAsB,GAAG,YAAY,CAyQvC"}
@@ -164,11 +164,11 @@ export function DashboardInsight({ insight, widget, clientHeight, clientWidth, b
164
164
  // eslint-disable-next-line react-hooks/exhaustive-deps
165
165
  [onError, executionsHandler.onError, onResolveAsyncRender]);
166
166
  const effectiveError = filtersError ?? visualizationError;
167
+ const execConfig = useWidgetExecConfig(ref);
167
168
  useEffect(() => {
168
- // need reset custom error when filters changed
169
- // one of custom error is no data
169
+ // Clear a stale error (e.g. "no data") on any execution change — parameters flow via execConfig, not filters.
170
170
  setVisualizationError(undefined);
171
- }, [filtersForInsightHash]);
171
+ }, [filtersForInsightHash, execConfig]);
172
172
  // CSS
173
173
  const insightPositionStyle = useInsightPositionStyle();
174
174
  const insightWrapperStyle = useMemo(() => {
@@ -181,7 +181,6 @@ export function DashboardInsight({ insight, widget, clientHeight, clientWidth, b
181
181
  // if filter status is success and visualization is loading, render both loading and insight
182
182
  const loading = filtersStatus === "running" || isVisualizationLoading;
183
183
  const exportDataVis = useVisualizationExportData(exportData, isVisualizationInitializing || isVisualizationLoading, !!effectiveError);
184
- const execConfig = useWidgetExecConfig(ref);
185
184
  const { setContent, isTooSmall, fontSize } = useMinimalSizeValidation(minimalWidth, minimalHeight, loading);
186
185
  const isExportSlidesMode = useDashboardSelector(selectIsInExportMode);
187
186
  const shouldLoadingBeHidden = isExportSlidesMode && !loading;
@@ -1 +1 @@
1
- {"version":3,"file":"DrillDialogExportDropdown.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogExportDropdown.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAC;AAoC3F,wBAAgB,yBAAyB,CAAC,EACtC,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,kBAAkB,EACrB,EAAE,+BAA+B,2CA8EjC"}
1
+ {"version":3,"file":"DrillDialogExportDropdown.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogExportDropdown.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAC;AAoC3F,wBAAgB,yBAAyB,CAAC,EACtC,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,kBAAkB,EACrB,EAAE,+BAA+B,2CA+EjC"}
@@ -52,7 +52,7 @@ export function DrillDialogExportDropdown({ exportAvailable, exportXLSXEnabled,
52
52
  item.data.action();
53
53
  }, []);
54
54
  const itemDataTestId = useCallback((item) => (item.type === "interactive" ? item.data.dataTestId : undefined), []);
55
- return (_jsx("div", { className: classNames, children: _jsx(Dropdown, { autofocusOnOpen: true, alignPoints: dropdownAlignPoints, renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx("div", { className: "gd-drill-dialog-export", children: _jsx(UiMenu, { onClose: closeDropdown, ariaAttributes: ariaAttributes, onSelect: handleSelectItem, items: items, dataTestId: "s-drill-modal-export-options", itemDataTestId: itemDataTestId, InteractiveItem: DrillModalExportMenuItem }) })), renderButton: (buttonRenderProps) => {
55
+ return (_jsx("div", { className: classNames, children: _jsx(Dropdown, { autofocusOnOpen: true, shouldTrapFocus: false, alignPoints: dropdownAlignPoints, renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx("div", { className: "gd-drill-dialog-export", children: _jsx(UiMenu, { onClose: closeDropdown, ariaAttributes: ariaAttributes, onSelect: handleSelectItem, items: items, dataTestId: "s-drill-modal-export-options", itemDataTestId: itemDataTestId, InteractiveItem: DrillModalExportMenuItem }) })), renderButton: (buttonRenderProps) => {
56
56
  return isDropdownDisabled ? (_jsx("div", { className: classNames, children: _jsxs(BubbleHoverTrigger, { children: [
57
57
  _jsx(DropdownTriggerButton, { ...buttonRenderProps, isDisabled: true }), _jsx(Bubble, { className: "bubble-primary", alignPoints: dropdownDisabledBubbleAlignPoints, children: _jsx(FormattedMessage, { id: "export_unsupported.disabled" }) })
58
58
  ] }) })) : (_jsx(DropdownTriggerButton, { ...buttonRenderProps }));
@@ -1 +1 @@
1
- {"version":3,"file":"DrillDialogInsight.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,YAAY,EAMpB,MAAM,OAAO,CAAC;AAkCf,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AA+B7D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAC/B,OAAO,EACP,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAS,EACT,OAAO,EACP,OAAO,EAAE,SAAS,EAClB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,gBAAgB,EACnB,EAAE,sBAAsB,GAAG,YAAY,CAyJvC"}
1
+ {"version":3,"file":"DrillDialogInsight.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,YAAY,EAMpB,MAAM,OAAO,CAAC;AAmCf,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAwC7D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAC/B,OAAO,EACP,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAS,EACT,OAAO,EACP,OAAO,EAAE,SAAS,EAClB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,gBAAgB,EACnB,EAAE,sBAAsB,GAAG,YAAY,CAyJvC"}
@@ -8,7 +8,7 @@ import { useDashboardSelector } from "../../../../../model/react/DashboardStoreP
8
8
  import { useWidgetExecConfig } from "../../../../../model/react/useWidgetExecConfig.js";
9
9
  import { useWidgetFilters } from "../../../../../model/react/useWidgetFilters.js";
10
10
  import { selectCatalogAttributes } from "../../../../../model/store/catalog/catalogSelectors.js";
11
- import { selectAgGridToken, selectColorPalette, selectIsExport, selectLocale, selectMapboxToken, selectSeparators, selectSettings, } from "../../../../../model/store/config/configSelectors.js";
11
+ import { selectAgGridToken, selectColorPalette, selectIsExport, selectLocale, selectMapboxToken, selectMaxZoomLevel, selectSeparators, selectSettings, } from "../../../../../model/store/config/configSelectors.js";
12
12
  import { selectDrillableItems } from "../../../../../model/store/drill/drillSelectors.js";
13
13
  import { selectPermissions } from "../../../../../model/store/permissions/permissionsSelectors.js";
14
14
  import { selectPreloadedAttributesWithReferences } from "../../../../../model/store/tabs/filterContext/filterContextSelectors.js";
@@ -28,9 +28,18 @@ const selectCommonDashboardInsightProps = createSelector([selectLocale, selectSe
28
28
  settings,
29
29
  colorPalette,
30
30
  }));
31
- const selectChartConfig = createSelector([selectMapboxToken, selectAgGridToken, selectSeparators, selectDrillableItems, selectIsExport], (mapboxToken, agGridToken, separators, drillableItems, isExport) => ({
31
+ const selectChartConfig = createSelector([
32
+ selectMapboxToken,
33
+ selectAgGridToken,
34
+ selectMaxZoomLevel,
35
+ selectSeparators,
36
+ selectDrillableItems,
37
+ selectIsExport,
38
+ ], (mapboxToken, agGridToken, maxZoomLevel, separators, drillableItems, isExport) => ({
32
39
  mapboxToken,
33
40
  agGridToken,
41
+ // Explicit undefined check — null is a meaningful value that clears the zoom limit
42
+ ...(typeof maxZoomLevel === "undefined" ? {} : { maxZoomLevel }),
34
43
  separators,
35
44
  forceDisableDrillOnAxes: !drillableItems.length, // to keep in line with KD, enable axes drilling only if using explicit drills
36
45
  isExportMode: isExport,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCreateAlert.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useCreateAlert.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EAC3C,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACH,KAAK,uBAAuB,EAE/B,MAAM,gEAAgE,CAAC;AAExE,eAAO,MAAM,cAAc;;;;;;;CAsC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useInsightWidgetAlerting.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useInsightWidgetAlerting.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EAExC,KAAK,cAAc,EACtB,MAAM,qBAAqB,CAAC;AAwD7B,KAAK,6BAA6B,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,2BAA2B;IACxC,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACpC,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACtC;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwUpC,CAAC"}
1
+ {"version":3,"file":"useInsightWidgetAlerting.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useInsightWidgetAlerting.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EAExC,KAAK,cAAc,EACtB,MAAM,qBAAqB,CAAC;AAyD7B,KAAK,6BAA6B,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,2BAA2B;IACxC,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACpC,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACtC;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwUpC,CAAC"}
@@ -21,12 +21,12 @@ import { selectNotificationChannels } from "../../../../../../model/store/notifi
21
21
  import { selectCanCreateAutomation, selectCanManageWorkspace, } from "../../../../../../model/store/permissions/permissionsSelectors.js";
22
22
  import { selectExecutionTimestamp } from "../../../../../../model/store/ui/uiSelectors.js";
23
23
  import { selectCurrentUser } from "../../../../../../model/store/user/userSelectors.js";
24
- import { useSaveAlertToBackend } from "../../../../../automations/_staging/alerting/DefaultAlertingDialog/hooks/useSaveAlertToBackend.js";
25
24
  import { messages } from "../../../../../automations/_staging/alerting/DefaultAlertingDialog/messages.js";
26
25
  import { createDefaultAlert } from "../../../../../automations/_staging/alerting/DefaultAlertingDialog/utils/convertors.js";
27
26
  import { getMeasureFormatsFromExecution } from "../../../../../automations/_staging/alerting/DefaultAlertingDialog/utils/getters.js";
28
27
  import { getSupportedInsightAttributesByInsight, getSupportedInsightMeasuresByInsight, } from "../../../../../automations/_staging/alerting/DefaultAlertingDialog/utils/items.js";
29
- import { useWidgetAutomationFilters } from "../../../../../automations/scheduledEmail/hooks/useWidgetAutomationFilters.js";
28
+ import { useSaveAlertToBackend } from "./useSaveAlertToBackend.js";
29
+ import { useWidgetAutomationFilters } from "./useWidgetAutomationFilters.js";
30
30
  export const useInsightWidgetAlerting = ({ widget, closeInsightWidgetMenu }) => {
31
31
  const { addSuccess, addError } = useToastMessage();
32
32
  const { automationInteraction } = useDashboardUserInteraction();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSaveAlertToBackend.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useSaveAlertToBackend.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EAG3C,MAAM,qBAAqB,CAAC;AAK7B;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,EAChB,EAAE;IACC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC1C;;;;;;EA0DA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdateAlert.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useUpdateAlert.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAIrE,OAAO,EACH,KAAK,uBAAuB,EAE/B,MAAM,gEAAgE,CAAC;AAExE,eAAO,MAAM,cAAc;;;;;;;CAsC1B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type IFilter, type IInsightDefinition } from "@gooddata/sdk-model";
2
+ import { type FilterableDashboardWidget } from "../../../../../../model/types/layoutTypes.js";
3
+ export declare function useWidgetAutomationFilters(widget?: FilterableDashboardWidget, insight?: IInsightDefinition): import("../../../../../../index.js").QueryProcessingState<IFilter[]>;
4
+ //# sourceMappingURL=useWidgetAutomationFilters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWidgetAutomationFilters.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useWidgetAutomationFilters.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,kBAAkB,EAK1B,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AAE9F,wBAAgB,0BAA0B,CAAC,MAAM,CAAC,EAAE,yBAAyB,EAAE,OAAO,CAAC,EAAE,kBAAkB,wEAmB1G"}
@@ -0,0 +1,46 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { useMemo } from "react";
3
+ import { filterIsEmpty, filterLocalIdentifier, isAttributeFilter, isNoopAllTimeDateFilter, } from "@gooddata/sdk-model";
4
+ import { useDashboardSelector } from "../../../../../../model/react/DashboardStoreProvider.js";
5
+ import { useWidgetFilters } from "../../../../../../model/react/useWidgetFilters.js";
6
+ import { selectCrossFilteringItems } from "../../../../../../model/store/drill/drillSelectors.js";
7
+ export function useWidgetAutomationFilters(widget, insight) {
8
+ const widgetFiltersQuery = useWidgetFilters(widget, insight);
9
+ const crossFilteringItems = useDashboardSelector(selectCrossFilteringItems);
10
+ return useMemo(() => {
11
+ const { result: widgetFilters, status: widgetFiltersStatus } = widgetFiltersQuery;
12
+ const sanitizedWidgetFilters = widgetFilters
13
+ ? sanitizeWidgetFilters(widgetFilters, crossFilteringItems)
14
+ : undefined;
15
+ if (widgetFiltersStatus === "success" && sanitizedWidgetFilters) {
16
+ return {
17
+ ...widgetFiltersQuery,
18
+ result: sanitizedWidgetFilters,
19
+ };
20
+ }
21
+ return widgetFiltersQuery;
22
+ }, [crossFilteringItems, widgetFiltersQuery]);
23
+ }
24
+ function sanitizeWidgetFilters(filters, crossFilteringItems) {
25
+ const withoutCrossFiltering = removeCrossFilteringFilters(filters, crossFilteringItems);
26
+ const withoutAllTimeDateFilters = removeAllTimeDateFilters(withoutCrossFiltering);
27
+ return removeEmptyAttributeFilters(withoutAllTimeDateFilters);
28
+ }
29
+ function removeCrossFilteringFilters(filters, crossFilteringItems) {
30
+ const crossFilteringFilterLocalIdentifiers = new Set(crossFilteringItems.flatMap((c) => c.filterLocalIdentifiers));
31
+ return filters.filter((filter) => {
32
+ const filterLocalId = filterLocalIdentifier(filter);
33
+ return filterLocalId ? !crossFilteringFilterLocalIdentifiers.has(filterLocalId) : true;
34
+ });
35
+ }
36
+ function removeEmptyAttributeFilters(filters) {
37
+ return filters.filter((filter) => {
38
+ if (isAttributeFilter(filter)) {
39
+ return !filterIsEmpty(filter);
40
+ }
41
+ return true;
42
+ });
43
+ }
44
+ function removeAllTimeDateFilters(filters) {
45
+ return filters.filter((filter) => !isNoopAllTimeDateFilter(filter));
46
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"InsightAlertsNew.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/InsightAlertsNew.tsx"],"names":[],"mappings":"AAmDA,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAOpF,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iCAAiC,2CAyKhG"}
1
+ {"version":3,"file":"InsightAlertsNew.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/InsightAlertsNew.tsx"],"names":[],"mappings":"AAkDA,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAQpF,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iCAAiC,2CAyKhG"}
@@ -19,11 +19,11 @@ import { selectCanCreateAutomation, selectCanManageWorkspace, } from "../../../.
19
19
  import { selectExecutionTimestamp } from "../../../../model/store/ui/uiSelectors.js";
20
20
  import { selectCurrentUser } from "../../../../model/store/user/userSelectors.js";
21
21
  import { AlertDeleteDialog } from "../../../automations/_staging/alerting/DefaultAlertingDialog/components/AlertDeleteDialog.js";
22
- import { useSaveAlertToBackend } from "../../../automations/_staging/alerting/DefaultAlertingDialog/hooks/useSaveAlertToBackend.js";
23
22
  import { messages } from "../../../automations/_staging/alerting/DefaultAlertingDialog/messages.js";
24
23
  import { getSupportedInsightMeasuresByInsight } from "../../../automations/_staging/alerting/DefaultAlertingDialog/utils/items.js";
25
24
  import { DASHBOARD_HEADER_OVERLAYS_Z_INDEX } from "../../../constants/zIndex.js";
26
25
  import { AlertsList } from "./InsightAlertConfig/AlertsList.js";
26
+ import { useSaveAlertToBackend } from "./InsightAlertConfig/hooks/useSaveAlertToBackend.js";
27
27
  import { NoAvailableMeasures } from "./InsightAlertConfig/NoAvailableAlerts.js";
28
28
  const overlayController = OverlayController.getInstance(DASHBOARD_HEADER_OVERLAYS_Z_INDEX);
29
29
  export function InsightAlertsNew({ widget, onClose, onGoBack }) {
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardInsightMenuItemButton.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/DashboardInsightMenuItemButton.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,eAAO,MAAM,8BAA8B;;6CAsB1C,CAAC"}
1
+ {"version":3,"file":"DashboardInsightMenuItemButton.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/DashboardInsightMenuItemButton.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,eAAO,MAAM,8BAA8B;;6CAiC1C,CAAC"}
@@ -2,9 +2,9 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
2
2
  import cx from "classnames";
3
3
  import { Item, UiTooltip } from "@gooddata/sdk-ui-kit";
4
4
  export const DashboardInsightMenuItemButton = (props) => {
5
- const { itemName, disabled, icon, onClick, tooltip, isFocused, className, submenu = false } = props;
5
+ const { itemName, itemId, disabled, icon, onClick, tooltip, isFocused, className, submenu = false, } = props;
6
6
  // for JSX icons we need an extra gd-icon-wrapper class to align the icon and the text vertically
7
- return renderButtonWithTooltip(_jsx(Item, { className: className, onClick: disabled ? undefined : onClick, disabled: disabled, subMenu: submenu, children: _jsxs("span", { className: cx({ "gd-icon-wrapper": icon && typeof icon !== "string" }), children: [icon ? typeof icon === "string" ? _jsx("i", { "aria-hidden": true, className: icon }) : icon : null, itemName] }) }), disabled, tooltip, isFocused);
7
+ return renderButtonWithTooltip(_jsx(Item, { className: className, testId: itemId, onClick: disabled ? undefined : onClick, disabled: disabled, subMenu: submenu, children: _jsxs("span", { className: cx({ "gd-icon-wrapper": icon && typeof icon !== "string" }), children: [icon ? typeof icon === "string" ? _jsx("i", { "aria-hidden": true, className: icon }) : icon : null, itemName] }) }), disabled, tooltip, isFocused);
8
8
  };
9
9
  function renderButtonWithTooltip(button, disabled, tooltip, isFocused) {
10
10
  if (tooltip && disabled) {
@@ -1,4 +1,4 @@
1
- // (C) 2020-2025 GoodData Corporation
1
+ // (C) 2020-2026 GoodData Corporation
2
2
  export function isIInsightMenuSubmenu(obj) {
3
3
  return obj !== null && obj.type === "submenu";
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InsightWidgetWarningPartialResult.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/warningPartialResult/InsightWidgetWarningPartialResult.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAItE,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAElG,UAAU,uCAAuC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,0BAA0B,EAAE,CAAC;IAC1C,eAAe,EAAE,wBAAwB,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,wBAAgB,iCAAiC,CAAC,EAC9C,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,UAAkB,EAClB,cAAc,EACjB,EAAE,uCAAuC,2CAwDzC"}
1
+ {"version":3,"file":"InsightWidgetWarningPartialResult.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/warningPartialResult/InsightWidgetWarningPartialResult.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAItE,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAElG,UAAU,uCAAuC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,0BAA0B,EAAE,CAAC;IAC1C,eAAe,EAAE,wBAAwB,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,wBAAgB,iCAAiC,CAAC,EAC9C,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,UAAkB,EAClB,cAAc,EACjB,EAAE,uCAAuC,2CAyDzC"}
@@ -19,5 +19,5 @@ export function InsightWidgetWarningPartialResult({ className, limitBreaks, isLo
19
19
  event.preventDefault();
20
20
  onExportRawCSV?.();
21
21
  };
22
- return (_jsx(_Fragment, { children: isOpen && isLoading === false ? (_jsx(DialogBase, { className: className, onMouseUp: noop, submitOnEnterKey: false, isModal: false, autofocusOnOpen: false, children: _jsx(WidgetNotice, { type: "warning", message: _jsx(FormattedMessage, { id: "partial_data_warning.title" }), detail: _jsx(FormattedMessage, { ...detailMessage }), detailAction: isExportRawVisible && !isEditMode ? (_jsx(UiLink, { isDisabled: isExporting, variant: "primary", href: "#", onClick: exportFullResult, children: _jsx(FormattedMessage, { id: "partial_data_warning.export_raw" }) })) : undefined, expandLabel: _jsx(FormattedMessage, { id: "partial_data_warning.show_details" }), collapseLabel: _jsx(FormattedMessage, { id: "partial_data_warning.hide_details" }), onClose: handleCloseOverlay, closeButtonLabel: intl.formatMessage(defineMessage({ id: "partial_data_warning.close" })) }) })) : null }));
22
+ return (_jsx(_Fragment, { children: isOpen && isLoading === false ? (_jsx(DialogBase, { className: className, onMouseUp: noop, submitOnEnterKey: false, isModal: false, autofocusOnOpen: false, children: _jsx(WidgetNotice, { dataTestId: "partial-data-warning", type: "warning", message: _jsx(FormattedMessage, { id: "partial_data_warning.title" }), detail: _jsx(FormattedMessage, { ...detailMessage }), detailAction: isExportRawVisible && !isEditMode ? (_jsx(UiLink, { isDisabled: isExporting, variant: "primary", href: "#", onClick: exportFullResult, children: _jsx(FormattedMessage, { id: "partial_data_warning.export_raw" }) })) : undefined, expandLabel: _jsx(FormattedMessage, { id: "partial_data_warning.show_details" }), collapseLabel: _jsx(FormattedMessage, { id: "partial_data_warning.hide_details" }), onClose: handleCloseOverlay, closeButtonLabel: intl.formatMessage(defineMessage({ id: "partial_data_warning.close" })) }) })) : null }));
23
23
  }
@@ -5826,7 +5826,7 @@ export declare interface IAttributesDropdownProps extends IDashboardAttributeFil
5826
5826
  }
5827
5827
 
5828
5828
  /**
5829
- * Automation filters grouped by tab.
5829
+ * Automation filters grouped by tab, returned by {@link selectAutomationFiltersByTab}.
5830
5830
  * @alpha
5831
5831
  */
5832
5832
  export declare interface IAutomationFiltersTab {
@@ -5843,7 +5843,8 @@ export declare interface IAutomationFiltersTab {
5843
5843
  */
5844
5844
  availableFilters: FilterContextItem[];
5845
5845
  /**
5846
- * Default selected filters for the tab (non-locked empty attribute filters removed).
5846
+ * Default selected filters for the tab
5847
+ * (no-op filters removed: "all values" attribute filters and "all" measure value filters).
5847
5848
  */
5848
5849
  defaultSelectedFilters: FilterContextItem[];
5849
5850
  /**
@@ -24656,6 +24657,14 @@ export declare const selectFiltersWithInvalidSelection: DashboardSelector<string
24656
24657
  */
24657
24658
  export declare const selectFilterValidationIncompatibleDefaultFiltersOverride: DashboardSelector<boolean>;
24658
24659
 
24660
+ /**
24661
+ * Returns the active tab's parameters in the shape persisted by a filter view.
24662
+ * Runtime overrides become persisted `value`; existing parameter values are kept when no runtime value exists.
24663
+ *
24664
+ * @internal
24665
+ */
24666
+ export declare const selectFilterViewParameters: DashboardSelector<IDashboardParameter[] | undefined>;
24667
+
24659
24668
  /**
24660
24669
  * @alpha
24661
24670
  */
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.58.7"
8
+ "packageVersion": "7.58.9"
9
9
  }
10
10
  ]
11
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-dashboard",
3
- "version": "11.43.0-alpha.0",
3
+ "version": "11.43.0-alpha.2",
4
4
  "description": "GoodData SDK - Dashboard Component",
5
5
  "license": "LicenseRef-LICENSE",
6
6
  "author": "GoodData Corporation",
@@ -60,19 +60,19 @@
60
60
  "ts-invariant": "0.10.3",
61
61
  "tslib": "2.8.1",
62
62
  "uuid": "11.1.1",
63
- "@gooddata/sdk-backend-base": "11.43.0-alpha.0",
64
- "@gooddata/sdk-backend-spi": "11.43.0-alpha.0",
65
- "@gooddata/sdk-model": "11.43.0-alpha.0",
66
- "@gooddata/sdk-ui": "11.43.0-alpha.0",
67
- "@gooddata/sdk-ui-charts": "11.43.0-alpha.0",
68
- "@gooddata/sdk-ui-ext": "11.43.0-alpha.0",
69
- "@gooddata/sdk-ui-filters": "11.43.0-alpha.0",
70
- "@gooddata/sdk-ui-geo": "11.43.0-alpha.0",
71
- "@gooddata/sdk-ui-theme-provider": "11.43.0-alpha.0",
72
- "@gooddata/sdk-ui-pivot": "11.43.0-alpha.0",
73
- "@gooddata/sdk-ui-vis-commons": "11.43.0-alpha.0",
74
- "@gooddata/util": "11.43.0-alpha.0",
75
- "@gooddata/sdk-ui-kit": "11.43.0-alpha.0"
63
+ "@gooddata/sdk-backend-base": "11.43.0-alpha.2",
64
+ "@gooddata/sdk-backend-spi": "11.43.0-alpha.2",
65
+ "@gooddata/sdk-model": "11.43.0-alpha.2",
66
+ "@gooddata/sdk-ui": "11.43.0-alpha.2",
67
+ "@gooddata/sdk-ui-charts": "11.43.0-alpha.2",
68
+ "@gooddata/sdk-ui-ext": "11.43.0-alpha.2",
69
+ "@gooddata/sdk-ui-filters": "11.43.0-alpha.2",
70
+ "@gooddata/sdk-ui-kit": "11.43.0-alpha.2",
71
+ "@gooddata/sdk-ui-pivot": "11.43.0-alpha.2",
72
+ "@gooddata/sdk-ui-theme-provider": "11.43.0-alpha.2",
73
+ "@gooddata/sdk-ui-vis-commons": "11.43.0-alpha.2",
74
+ "@gooddata/sdk-ui-geo": "11.43.0-alpha.2",
75
+ "@gooddata/util": "11.43.0-alpha.2"
76
76
  },
77
77
  "devDependencies": {
78
78
  "@microsoft/api-documenter": "^7.17.0",
@@ -118,12 +118,12 @@
118
118
  "typescript": "5.9.3",
119
119
  "vitest": "4.1.8",
120
120
  "vitest-dom": "0.1.1",
121
- "@gooddata/eslint-config": "11.43.0-alpha.0",
122
- "@gooddata/reference-workspace": "11.43.0-alpha.0",
123
- "@gooddata/i18n-toolkit": "11.43.0-alpha.0",
124
- "@gooddata/oxlint-config": "11.43.0-alpha.0",
125
- "@gooddata/sdk-backend-mockingbird": "11.43.0-alpha.0",
126
- "@gooddata/stylelint-config": "11.43.0-alpha.0"
121
+ "@gooddata/eslint-config": "11.43.0-alpha.2",
122
+ "@gooddata/i18n-toolkit": "11.43.0-alpha.2",
123
+ "@gooddata/oxlint-config": "11.43.0-alpha.2",
124
+ "@gooddata/sdk-backend-mockingbird": "11.43.0-alpha.2",
125
+ "@gooddata/stylelint-config": "11.43.0-alpha.2",
126
+ "@gooddata/reference-workspace": "11.43.0-alpha.2"
127
127
  },
128
128
  "peerDependencies": {
129
129
  "react": "^18.0.0 || ^19.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCreateAlert.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/_staging/alerting/DefaultAlertingDialog/hooks/useCreateAlert.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EAC3C,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACH,KAAK,uBAAuB,EAE/B,MAAM,gEAAgE,CAAC;AAExE,eAAO,MAAM,cAAc;;;;;;;CAsC1B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSaveAlertToBackend.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/_staging/alerting/DefaultAlertingDialog/hooks/useSaveAlertToBackend.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EAG3C,MAAM,qBAAqB,CAAC;AAK7B;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,EAChB,EAAE;IACC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC1C;;;;;;EA0DA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useUpdateAlert.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/_staging/alerting/DefaultAlertingDialog/hooks/useUpdateAlert.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAIrE,OAAO,EACH,KAAK,uBAAuB,EAE/B,MAAM,gEAAgE,CAAC;AAExE,eAAO,MAAM,cAAc;;;;;;;CAsC1B,CAAC"}