@gooddata/sdk-ui-dashboard 11.54.0-alpha.3 → 11.54.0-alpha.5

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 (142) hide show
  1. package/NOTICE +92923 -17333
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/_staging/automation/index.d.ts +6 -0
  5. package/esm/_staging/automation/index.d.ts.map +1 -1
  6. package/esm/_staging/automation/index.js +7 -0
  7. package/esm/_staging/dashboard/flexibleLayout/builder/utils.d.ts +45 -0
  8. package/esm/_staging/dashboard/flexibleLayout/builder/utils.d.ts.map +1 -0
  9. package/esm/_staging/dashboard/flexibleLayout/builder/utils.js +54 -0
  10. package/esm/_staging/dateFilterConfig/fixtures.d.ts +10 -0
  11. package/esm/_staging/dateFilterConfig/fixtures.d.ts.map +1 -0
  12. package/esm/_staging/dateFilterConfig/fixtures.js +60 -0
  13. package/esm/_staging/layout/coordinates.mock.d.ts +17 -0
  14. package/esm/_staging/layout/coordinates.mock.d.ts.map +1 -0
  15. package/esm/_staging/layout/coordinates.mock.js +103 -0
  16. package/esm/index.d.ts +2 -2
  17. package/esm/index.d.ts.map +1 -1
  18. package/esm/model/DashboardTester.d.ts +150 -0
  19. package/esm/model/DashboardTester.d.ts.map +1 -0
  20. package/esm/model/DashboardTester.js +208 -0
  21. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
  22. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +27 -1
  23. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadAutomationTimezone.d.ts +9 -0
  24. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadAutomationTimezone.d.ts.map +1 -0
  25. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadAutomationTimezone.js +27 -0
  26. package/esm/model/commandHandlers/timezone/changeDashboardTimezoneOverrideHandler.d.ts.map +1 -1
  27. package/esm/model/commandHandlers/timezone/changeDashboardTimezoneOverrideHandler.js +2 -11
  28. package/esm/model/commands/timezone.d.ts +10 -2
  29. package/esm/model/commands/timezone.d.ts.map +1 -1
  30. package/esm/model/commands/timezone.js +5 -2
  31. package/esm/model/fixtures/CatalogAvailability.fixtures.d.ts +14 -0
  32. package/esm/model/fixtures/CatalogAvailability.fixtures.d.ts.map +1 -0
  33. package/esm/model/fixtures/CatalogAvailability.fixtures.js +57 -0
  34. package/esm/model/fixtures/ComplexDashboard.fixtures.d.ts +56 -0
  35. package/esm/model/fixtures/ComplexDashboard.fixtures.d.ts.map +1 -0
  36. package/esm/model/fixtures/ComplexDashboard.fixtures.js +71 -0
  37. package/esm/model/fixtures/Dashboard.fixtures.d.ts +10 -0
  38. package/esm/model/fixtures/Dashboard.fixtures.d.ts.map +1 -0
  39. package/esm/model/fixtures/Dashboard.fixtures.js +13 -0
  40. package/esm/model/fixtures/Insights.fixtures.d.ts +6 -0
  41. package/esm/model/fixtures/Insights.fixtures.d.ts.map +1 -0
  42. package/esm/model/fixtures/Insights.fixtures.js +11 -0
  43. package/esm/model/fixtures/Layout.fixtures.d.ts +14 -0
  44. package/esm/model/fixtures/Layout.fixtures.d.ts.map +1 -0
  45. package/esm/model/fixtures/Layout.fixtures.js +115 -0
  46. package/esm/model/fixtures/SimpleDashboard.fixtures.d.ts +46 -0
  47. package/esm/model/fixtures/SimpleDashboard.fixtures.d.ts.map +1 -0
  48. package/esm/model/fixtures/SimpleDashboard.fixtures.js +315 -0
  49. package/esm/model/fixtures/SimpleDashboardNoDrills.fixtures.d.ts +28 -0
  50. package/esm/model/fixtures/SimpleDashboardNoDrills.fixtures.d.ts.map +1 -0
  51. package/esm/model/fixtures/SimpleDashboardNoDrills.fixtures.js +40 -0
  52. package/esm/plugins/customizationApis/fixtures/TestingDashboardCustomizationLogger.d.ts +16 -0
  53. package/esm/plugins/customizationApis/fixtures/TestingDashboardCustomizationLogger.d.ts.map +1 -0
  54. package/esm/plugins/customizationApis/fixtures/TestingDashboardCustomizationLogger.js +30 -0
  55. package/esm/plugins/customizationApis/utils.d.ts +3 -0
  56. package/esm/plugins/customizationApis/utils.d.ts.map +1 -0
  57. package/esm/plugins/customizationApis/utils.js +17 -0
  58. package/esm/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogDestination.d.ts +6 -0
  59. package/esm/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogDestination.d.ts.map +1 -0
  60. package/esm/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogDestination.js +13 -0
  61. package/esm/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogRecipients.d.ts +7 -0
  62. package/esm/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogRecipients.d.ts.map +1 -0
  63. package/esm/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogRecipients.js +12 -0
  64. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  65. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +25 -13
  66. package/esm/presentation/automations/alerting/DefaultAlertingDialog/FormField.d.ts +8 -0
  67. package/esm/presentation/automations/alerting/DefaultAlertingDialog/FormField.d.ts.map +1 -0
  68. package/esm/presentation/automations/alerting/DefaultAlertingDialog/FormField.js +8 -0
  69. package/esm/presentation/automations/alerting/state/fixtures.d.ts +13 -0
  70. package/esm/presentation/automations/alerting/state/fixtures.d.ts.map +1 -0
  71. package/esm/presentation/automations/alerting/state/fixtures.js +37 -0
  72. package/esm/presentation/automations/alerting/types.d.ts +42 -2
  73. package/esm/presentation/automations/alerting/types.d.ts.map +1 -1
  74. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  75. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +24 -5
  76. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.d.ts +1 -5
  77. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.d.ts.map +1 -1
  78. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.js +2 -2
  79. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.d.ts +0 -4
  80. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.d.ts.map +1 -1
  81. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/ScheduledEmailDialogDestination.d.ts +6 -0
  82. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/ScheduledEmailDialogDestination.d.ts.map +1 -0
  83. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/ScheduledEmailDialogDestination.js +10 -0
  84. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/ScheduledEmailDialogRecipients.d.ts +6 -0
  85. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/ScheduledEmailDialogRecipients.d.ts.map +1 -0
  86. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/ScheduledEmailDialogRecipients.js +8 -0
  87. package/esm/presentation/automations/scheduledEmail/state/fixtures.d.ts +18 -0
  88. package/esm/presentation/automations/scheduledEmail/state/fixtures.d.ts.map +1 -0
  89. package/esm/presentation/automations/scheduledEmail/state/fixtures.js +105 -0
  90. package/esm/presentation/automations/scheduledEmail/types.d.ts +52 -3
  91. package/esm/presentation/automations/scheduledEmail/types.d.ts.map +1 -1
  92. package/esm/presentation/automations/shared/automationFilters/parameterFixtures.d.ts +5 -0
  93. package/esm/presentation/automations/shared/automationFilters/parameterFixtures.d.ts.map +1 -0
  94. package/esm/presentation/automations/shared/automationFilters/parameterFixtures.js +22 -0
  95. package/esm/presentation/automations/shared/slots/types.d.ts +67 -1
  96. package/esm/presentation/automations/shared/slots/types.d.ts.map +1 -1
  97. package/esm/presentation/automations/shared/test/fixtures.d.ts +9 -0
  98. package/esm/presentation/automations/shared/test/fixtures.d.ts.map +1 -0
  99. package/esm/presentation/automations/shared/test/fixtures.js +101 -0
  100. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayout.d.ts +17 -0
  101. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayout.d.ts.map +1 -0
  102. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayout.js +18 -0
  103. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutItemRenderer.d.ts +12 -0
  104. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutItemRenderer.d.ts.map +1 -0
  105. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutItemRenderer.js +26 -0
  106. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutMocks.d.ts +20 -0
  107. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutMocks.d.ts.map +1 -0
  108. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutMocks.js +95 -0
  109. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutRowRenderer.d.ts +14 -0
  110. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutRowRenderer.d.ts.map +1 -0
  111. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutRowRenderer.js +9 -0
  112. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionBorder.d.ts +9 -0
  113. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionBorder.d.ts.map +1 -0
  114. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionBorder.js +17 -0
  115. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionBorderMarker.d.ts +6 -0
  116. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionBorderMarker.d.ts.map +1 -0
  117. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionBorderMarker.js +10 -0
  118. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionHeader.d.ts +9 -0
  119. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionHeader.d.ts.map +1 -0
  120. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionHeader.js +14 -0
  121. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionHeaderRenderer.d.ts +8 -0
  122. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionHeaderRenderer.d.ts.map +1 -0
  123. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionHeaderRenderer.js +49 -0
  124. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionRenderer.d.ts +7 -0
  125. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionRenderer.d.ts.map +1 -0
  126. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutSectionRenderer.js +33 -0
  127. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutTypes.d.ts +62 -0
  128. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutTypes.d.ts.map +1 -0
  129. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutTypes.js +2 -0
  130. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutWidget.d.ts +11 -0
  131. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutWidget.d.ts.map +1 -0
  132. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutWidget.js +4 -0
  133. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutWidgetRenderer.d.ts +8 -0
  134. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutWidgetRenderer.d.ts.map +1 -0
  135. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/DashboardEditLayoutWidgetRenderer.js +28 -0
  136. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/LayoutTypes.d.ts +26 -0
  137. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/LayoutTypes.d.ts.map +1 -0
  138. package/esm/presentation/flexibleLayout/useInKD/DashboardEditLayout/LayoutTypes.js +21 -0
  139. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/EditAlert.d.ts.map +1 -1
  140. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/EditAlert.js +1 -1
  141. package/esm/sdk-ui-dashboard.d.ts +172 -5
  142. package/package.json +21 -21
@@ -0,0 +1,315 @@
1
+ // (C) 2021-2026 GoodData Corporation
2
+ import { ReferenceRecordings } from "@gooddata/reference-workspace";
3
+ import { idRef, } from "@gooddata/sdk-model";
4
+ import { ComplexDashboardIdentifier } from "./ComplexDashboard.fixtures.js";
5
+ export const SimpleDashboardIdentifier = "adb4fefa-c5ad-410e-bb2c-d6933e0ec7a0";
6
+ export const SimpleDashboardWithReferences = ReferenceRecordings.Recordings.metadata?.dashboards?.["dash_adb4fefa_c5ad_410e_bb2c_d6933e0ec7a0"].obj;
7
+ export const SimpleDashboardLayout = SimpleDashboardWithReferences.dashboard.layout;
8
+ export const SimpleDashboardFilterContext = SimpleDashboardWithReferences.dashboard
9
+ .filterContext;
10
+ /**
11
+ * drillToAttributeUrl on simple dashboard
12
+ */
13
+ export const drillToAttributeUrlWidgetRef = SimpleDashboardLayout.sections[2].items[0].widget.ref;
14
+ /**
15
+ * First widget from first section
16
+ */
17
+ export const KpiWidgetRef = SimpleDashboardLayout.sections[0].items[0].widget.ref;
18
+ /**
19
+ * First widget from second section
20
+ */
21
+ export const SimpleSortedTableWidgetRef = SimpleDashboardLayout.sections[1].items[0].widget.ref;
22
+ export const SimpleSortedTableWidgetInsightRef = SimpleDashboardWithReferences.references.insights[2].insight.ref;
23
+ export const SimpleSortedTableWidgetInsightIdentifier = SimpleDashboardWithReferences.references.insights[2].insight.identifier;
24
+ export const SimpleSortedTableWidgetInsight = SimpleDashboardWithReferences.references.insights[2];
25
+ /**
26
+ * localIdentifier of Won Measure of Simple SortedTable Widget on Simple Dashboard
27
+ */
28
+ export const SimpleDashboardSimpleSortedTableWonMeasureLocalIdentifier = "31c22194386b408aa80ab90b966e85a7";
29
+ export const SimpleDashboardSimpleSortedTableProductAttributeLocalIdentifier = "3b196b9f8de04b61ba37762fa28fcf4f";
30
+ /**
31
+ * simple dashboard drillToAttributeUrl NumOfOpportunities measure identifier
32
+ */
33
+ export const NumOfOpportunitiesMeasureIdentifier = "8e874c44107d41809d0d5e7bbd1c19ff";
34
+ /**
35
+ * This mock is real reported drillTargets after firs render
36
+ */
37
+ export const SimpleDashboardSimpleSortedTableWidgetDrillTargets = {
38
+ measures: [
39
+ {
40
+ measure: {
41
+ measureHeaderItem: {
42
+ name: "Won",
43
+ format: "$#,##0.00",
44
+ localIdentifier: SimpleDashboardSimpleSortedTableWonMeasureLocalIdentifier,
45
+ uri: "obj_1272",
46
+ identifier: "acugFHNJgsBy",
47
+ ref: {
48
+ identifier: "obj_1272",
49
+ },
50
+ },
51
+ },
52
+ attributes: [
53
+ {
54
+ attributeHeader: {
55
+ name: "Product Name",
56
+ localIdentifier: "3b196b9f8de04b61ba37762fa28fcf4f",
57
+ uri: "obj_1055",
58
+ identifier: "label.product.id.name",
59
+ formOf: {
60
+ name: "Product",
61
+ uri: "obj_1054",
62
+ identifier: "attr.product.id",
63
+ ref: {
64
+ identifier: "obj_1054",
65
+ },
66
+ },
67
+ ref: {
68
+ identifier: "obj_1055",
69
+ },
70
+ },
71
+ },
72
+ {
73
+ attributeHeader: {
74
+ name: "Department",
75
+ localIdentifier: "d25f36e4914f4ed18ee6b057d18decd9",
76
+ uri: "obj_1089",
77
+ identifier: "label.owner.department",
78
+ formOf: {
79
+ name: "Department",
80
+ uri: "obj_1088",
81
+ identifier: "attr.owner.department",
82
+ ref: {
83
+ identifier: "obj_1088",
84
+ },
85
+ },
86
+ ref: {
87
+ identifier: "obj_1089",
88
+ },
89
+ },
90
+ },
91
+ ],
92
+ },
93
+ ],
94
+ attributes: [
95
+ {
96
+ attribute: {
97
+ attributeHeader: {
98
+ name: "Product Name",
99
+ localIdentifier: SimpleDashboardSimpleSortedTableProductAttributeLocalIdentifier,
100
+ uri: "obj_1055",
101
+ identifier: "label.product.id.name",
102
+ formOf: {
103
+ name: "Product",
104
+ uri: "obj_1054",
105
+ identifier: "attr.product.id",
106
+ ref: {
107
+ identifier: "obj_1054",
108
+ },
109
+ },
110
+ ref: {
111
+ identifier: "obj_1055",
112
+ },
113
+ },
114
+ },
115
+ intersectionAttributes: [
116
+ {
117
+ attributeHeader: {
118
+ name: "Product Name",
119
+ localIdentifier: "3b196b9f8de04b61ba37762fa28fcf4f",
120
+ uri: "obj_1055",
121
+ identifier: "label.product.id.name",
122
+ formOf: {
123
+ name: "Product",
124
+ uri: "obj_1054",
125
+ identifier: "attr.product.id",
126
+ ref: {
127
+ identifier: "obj_1054",
128
+ },
129
+ },
130
+ ref: {
131
+ identifier: "obj_1055",
132
+ },
133
+ },
134
+ },
135
+ ],
136
+ },
137
+ ],
138
+ };
139
+ export const SimpleDashboarddrillToAttributeUrlWidgetDrillTargets = {
140
+ measures: [
141
+ {
142
+ measure: {
143
+ measureHeaderItem: {
144
+ name: "# Of Opportunities",
145
+ format: "#,##0.00",
146
+ localIdentifier: "8e874c44107d41809d0d5e7bbd1c19ff",
147
+ uri: "obj_1268",
148
+ identifier: "abQgDWx4gOUu",
149
+ ref: {
150
+ identifier: "obj_1268",
151
+ },
152
+ },
153
+ },
154
+ attributes: [
155
+ {
156
+ attributeHeader: {
157
+ name: "Opportunity Name",
158
+ localIdentifier: "a75a78a7e2194c339b4f6b8694777803",
159
+ uri: "obj_1067",
160
+ identifier: "label.opportunity.id.name",
161
+ formOf: {
162
+ name: "Opportunity",
163
+ uri: "obj_1066",
164
+ identifier: "attr.opportunity.id",
165
+ ref: {
166
+ identifier: "obj_1066",
167
+ },
168
+ },
169
+ ref: {
170
+ identifier: "obj_1067",
171
+ },
172
+ },
173
+ },
174
+ ],
175
+ },
176
+ ],
177
+ attributes: [
178
+ {
179
+ attribute: {
180
+ attributeHeader: {
181
+ name: "Opportunity Name",
182
+ localIdentifier: "a75a78a7e2194c339b4f6b8694777803",
183
+ uri: "obj_1067",
184
+ identifier: "label.opportunity.id.name",
185
+ formOf: {
186
+ name: "Opportunity",
187
+ uri: "obj_1066",
188
+ identifier: "attr.opportunity.id",
189
+ ref: {
190
+ identifier: "obj_1066",
191
+ },
192
+ },
193
+ ref: {
194
+ identifier: "obj_1067",
195
+ },
196
+ },
197
+ },
198
+ intersectionAttributes: [
199
+ {
200
+ attributeHeader: {
201
+ name: "Opportunity Name",
202
+ localIdentifier: "a75a78a7e2194c339b4f6b8694777803",
203
+ uri: "obj_1067",
204
+ identifier: "label.opportunity.id.name",
205
+ formOf: {
206
+ name: "Opportunity",
207
+ uri: "obj_1066",
208
+ identifier: "attr.opportunity.id",
209
+ ref: {
210
+ identifier: "obj_1066",
211
+ },
212
+ },
213
+ ref: {
214
+ identifier: "obj_1067",
215
+ },
216
+ },
217
+ },
218
+ ],
219
+ },
220
+ ],
221
+ };
222
+ export const DrillToDashboardWithThreeSectionsLocalIdentifier = "b4c6999557164163a9e0e75ec74cb8db";
223
+ export const DrillToDashboardFromWonMeasureDefinition = {
224
+ localIdentifier: "b4c6999557164163a9e0e75ec74cb854",
225
+ type: "drillToDashboard",
226
+ origin: {
227
+ type: "drillFromMeasure",
228
+ measure: {
229
+ localIdentifier: SimpleDashboardSimpleSortedTableWonMeasureLocalIdentifier,
230
+ },
231
+ },
232
+ target: {
233
+ identifier: ComplexDashboardIdentifier,
234
+ type: "analyticalDashboard",
235
+ },
236
+ transition: "in-place",
237
+ };
238
+ export const DrillToDashboardFromProductAttributeDefinition = {
239
+ localIdentifier: "b4c6999557164163a9e0e75ec74cb8d4",
240
+ type: "drillToDashboard",
241
+ origin: {
242
+ type: "drillFromAttribute",
243
+ attribute: {
244
+ localIdentifier: SimpleDashboardSimpleSortedTableProductAttributeLocalIdentifier,
245
+ },
246
+ },
247
+ target: {
248
+ identifier: ComplexDashboardIdentifier,
249
+ type: "analyticalDashboard",
250
+ },
251
+ transition: "in-place",
252
+ };
253
+ export const DrillToToInsightFromWonMeasureDefinition = {
254
+ localIdentifier: DrillToDashboardWithThreeSectionsLocalIdentifier,
255
+ type: "drillToInsight",
256
+ origin: {
257
+ type: "drillFromMeasure",
258
+ measure: {
259
+ localIdentifier: SimpleDashboardSimpleSortedTableWonMeasureLocalIdentifier,
260
+ },
261
+ },
262
+ transition: "pop-up",
263
+ target: SimpleSortedTableWidgetInsightRef,
264
+ };
265
+ export const DrillToCustomUrlFromMeasureDefinition = {
266
+ localIdentifier: DrillToDashboardWithThreeSectionsLocalIdentifier,
267
+ type: "drillToCustomUrl",
268
+ transition: "new-window",
269
+ origin: {
270
+ type: "drillFromMeasure",
271
+ measure: {
272
+ localIdentifier: SimpleDashboardSimpleSortedTableWonMeasureLocalIdentifier,
273
+ },
274
+ },
275
+ target: {
276
+ url: "https://www.example.org?dep={attribute_title(label.owner.department)}",
277
+ },
278
+ };
279
+ export const DrillToAttributeUrlFromMeasureDefinition = {
280
+ localIdentifier: "b4c6999557164163a9e0e75ec74cb8d3",
281
+ type: "drillToAttributeUrl",
282
+ transition: "new-window",
283
+ origin: {
284
+ type: "drillFromMeasure",
285
+ measure: {
286
+ localIdentifier: NumOfOpportunitiesMeasureIdentifier,
287
+ },
288
+ },
289
+ target: {
290
+ displayForm: {
291
+ identifier: "obj_1067",
292
+ },
293
+ hyperlinkDisplayForm: {
294
+ identifier: "obj_1069",
295
+ },
296
+ },
297
+ };
298
+ export const InaccessibleDashboard = {
299
+ title: "Inaccessible Dashboard",
300
+ ref: idRef("inaccessibleDashboardId"),
301
+ uri: "inaccessibleDashboardUri",
302
+ identifier: "inaccessibleDashboardId",
303
+ };
304
+ export const SimpleDashboardListed = {
305
+ ref: SimpleDashboardWithReferences.dashboard.ref,
306
+ identifier: SimpleDashboardWithReferences.dashboard.identifier,
307
+ uri: SimpleDashboardWithReferences.dashboard.uri,
308
+ title: SimpleDashboardWithReferences.dashboard.title,
309
+ description: SimpleDashboardWithReferences.dashboard.description,
310
+ updated: SimpleDashboardWithReferences.dashboard.updated,
311
+ created: SimpleDashboardWithReferences.dashboard.created,
312
+ tags: SimpleDashboardWithReferences.dashboard.tags,
313
+ shareStatus: SimpleDashboardWithReferences.dashboard.shareStatus,
314
+ availability: "full",
315
+ };
@@ -0,0 +1,28 @@
1
+ import { type IDashboardWithReferences } from "@gooddata/sdk-backend-spi";
2
+ import { type IFilterContext, type IListedDashboard } from "@gooddata/sdk-model";
3
+ export declare const SimpleDashboardNoDrillsIdentifier = "44a9d0ed-8a06-4ffd-b16c-6281707acfcf";
4
+ export declare const SimpleDashboardNoDrillsWithReferences: IDashboardWithReferences;
5
+ export declare const SimpleDashboardNoDrillsLayout: import("@gooddata/sdk-model").IDashboardLayout<import("@gooddata/sdk-model").IDashboardWidget>;
6
+ export declare const SimpleDashboardNoDrillsFilterContext: IFilterContext;
7
+ /**
8
+ * First widget from first section
9
+ */
10
+ export declare const KpiWidgetRef: import("@gooddata/sdk-model").ObjRef;
11
+ /**
12
+ * First widget from second section
13
+ */
14
+ export declare const SimpleSortedTableWidgetRef: any;
15
+ export declare const SimpleSortedTableWidgetInsightRef: import("@gooddata/sdk-model").ObjRef;
16
+ export declare const SimpleSortedTableWidgetInsightIdentifier: string;
17
+ export declare const SimpleSortedTableWidgetInsight: import("@gooddata/sdk-model").IInsight;
18
+ /**
19
+ * localIdentifier of Won Measure of Simple SortedTable Widget on Simple Dashboard
20
+ */
21
+ export declare const SimpleDashboardNoDrillsSimpleSortedTableWonMeasureLocalIdentifier = "31c22194386b408aa80ab90b966e85a7";
22
+ export declare const SimpleDashboardNoDrillsSimpleSortedTableProductAttributeLocalIdentifier = "3b196b9f8de04b61ba37762fa28fcf4f";
23
+ /**
24
+ * simple dashboard drillToAttributeUrl NumOfOpportunities measure identifier
25
+ */
26
+ export declare const NumOfOpportunitiesMeasureIdentifier = "8e874c44107d41809d0d5e7bbd1c19ff";
27
+ export declare const SimpleDashboardNoDrillsListed: IListedDashboard;
28
+ //# sourceMappingURL=SimpleDashboardNoDrills.fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleDashboardNoDrills.fixtures.d.ts","sourceRoot":"","sources":["../../../src/model/fixtures/SimpleDashboardNoDrills.fixtures.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,KAAK,cAAc,EAAmB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAElG,eAAO,MAAM,iCAAiC,yCAAyC,CAAC;AACxF,eAAO,MAAM,qCAAqC,0BAEjB,CAAC;AAClC,eAAO,MAAM,6BAA6B,gGAA0D,CAAC;AACrG,eAAO,MAAM,oCAAoC,gBACb,CAAC;AAErC;;GAEG;AACH,eAAO,MAAM,YAAY,sCAAgF,CAAC;AAC1G;;GAEG;AACH,eAAO,MAAM,0BAA0B,KAC/B,CAAC;AACT,eAAO,MAAM,iCAAiC,sCAC8B,CAAC;AAC7E,eAAO,MAAM,wCAAwC,QAC8B,CAAC;AACpF,eAAO,MAAM,8BAA8B,wCAA+D,CAAC;AAC3G;;GAEG;AACH,eAAO,MAAM,iEAAiE,qCACxC,CAAC;AACvC,eAAO,MAAM,uEAAuE,qCAC9C,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,mCAAmC,qCAAqC,CAAC;AAEtF,eAAO,MAAM,6BAA6B,EAAE,gBAW3C,CAAC"}
@@ -0,0 +1,40 @@
1
+ // (C) 2021-2026 GoodData Corporation
2
+ import { ReferenceRecordings } from "@gooddata/reference-workspace";
3
+ export const SimpleDashboardNoDrillsIdentifier = "44a9d0ed-8a06-4ffd-b16c-6281707acfcf";
4
+ export const SimpleDashboardNoDrillsWithReferences = ReferenceRecordings.Recordings.metadata?.dashboards?.["dash_44a9d0ed_8a06_4ffd_b16c_6281707acfcf"].obj;
5
+ export const SimpleDashboardNoDrillsLayout = SimpleDashboardNoDrillsWithReferences.dashboard.layout;
6
+ export const SimpleDashboardNoDrillsFilterContext = SimpleDashboardNoDrillsWithReferences.dashboard
7
+ .filterContext;
8
+ /**
9
+ * First widget from first section
10
+ */
11
+ export const KpiWidgetRef = SimpleDashboardNoDrillsLayout.sections[0].items[0].widget.ref;
12
+ /**
13
+ * First widget from second section
14
+ */
15
+ export const SimpleSortedTableWidgetRef = SimpleDashboardNoDrillsLayout.sections[1].items[0].widget
16
+ .ref;
17
+ export const SimpleSortedTableWidgetInsightRef = SimpleDashboardNoDrillsWithReferences.references.insights[1].insight.ref;
18
+ export const SimpleSortedTableWidgetInsightIdentifier = SimpleDashboardNoDrillsWithReferences.references.insights[1].insight.identifier;
19
+ export const SimpleSortedTableWidgetInsight = SimpleDashboardNoDrillsWithReferences.references.insights[1];
20
+ /**
21
+ * localIdentifier of Won Measure of Simple SortedTable Widget on Simple Dashboard
22
+ */
23
+ export const SimpleDashboardNoDrillsSimpleSortedTableWonMeasureLocalIdentifier = "31c22194386b408aa80ab90b966e85a7";
24
+ export const SimpleDashboardNoDrillsSimpleSortedTableProductAttributeLocalIdentifier = "3b196b9f8de04b61ba37762fa28fcf4f";
25
+ /**
26
+ * simple dashboard drillToAttributeUrl NumOfOpportunities measure identifier
27
+ */
28
+ export const NumOfOpportunitiesMeasureIdentifier = "8e874c44107d41809d0d5e7bbd1c19ff";
29
+ export const SimpleDashboardNoDrillsListed = {
30
+ ref: SimpleDashboardNoDrillsWithReferences.dashboard.ref,
31
+ identifier: SimpleDashboardNoDrillsWithReferences.dashboard.identifier,
32
+ uri: SimpleDashboardNoDrillsWithReferences.dashboard.uri,
33
+ title: SimpleDashboardNoDrillsWithReferences.dashboard.title,
34
+ description: SimpleDashboardNoDrillsWithReferences.dashboard.description,
35
+ updated: SimpleDashboardNoDrillsWithReferences.dashboard.updated,
36
+ created: SimpleDashboardNoDrillsWithReferences.dashboard.created,
37
+ tags: SimpleDashboardNoDrillsWithReferences.dashboard.tags,
38
+ shareStatus: SimpleDashboardNoDrillsWithReferences.dashboard.shareStatus,
39
+ availability: "full",
40
+ };
@@ -0,0 +1,16 @@
1
+ import { type IDashboardPluginContract_V1 } from "../../plugin.js";
2
+ import { type IDashboardCustomizationLogger } from "../customizationLogging.js";
3
+ export declare class TestingDashboardCustomizationLogger implements IDashboardCustomizationLogger {
4
+ private readonly setCurrentPluginImpl;
5
+ private readonly logImpl;
6
+ private readonly debugImpl;
7
+ private readonly warnImpl;
8
+ private readonly errorImpl;
9
+ constructor(functions: Partial<IDashboardCustomizationLogger>);
10
+ setCurrentPlugin(plugin: IDashboardPluginContract_V1 | undefined): void;
11
+ log(message: string, ...optionalParams: any[]): void;
12
+ debug(message: string, ...optionalParams: any[]): void;
13
+ warn(message: string, ...optionalParams: any[]): void;
14
+ error(message: string, ...optionalParams: any[]): void;
15
+ }
16
+ //# sourceMappingURL=TestingDashboardCustomizationLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestingDashboardCustomizationLogger.d.ts","sourceRoot":"","sources":["../../../../src/plugins/customizationApis/fixtures/TestingDashboardCustomizationLogger.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAEhF,qBAAa,mCAAoC,YAAW,6BAA6B;IACrF,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAgE;IACrG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmD;IAC3E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqD;IAC/E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IAC7E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqD;IAE/E,YAAY,SAAS,EAAE,OAAO,CAAC,6BAA6B,CAAC,EAM5D;IAED,gBAAgB,CAAC,MAAM,EAAE,2BAA2B,GAAG,SAAS,GAAG,IAAI,CAEtE;IACD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAEnD;IACD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAErD;IACD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAEpD;IACD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAErD;CACJ"}
@@ -0,0 +1,30 @@
1
+ // (C) 2022-2026 GoodData Corporation
2
+ export class TestingDashboardCustomizationLogger {
3
+ setCurrentPluginImpl;
4
+ logImpl;
5
+ debugImpl;
6
+ warnImpl;
7
+ errorImpl;
8
+ constructor(functions) {
9
+ this.setCurrentPluginImpl = functions.setCurrentPlugin;
10
+ this.logImpl = functions.log;
11
+ this.debugImpl = functions.debug;
12
+ this.warnImpl = functions.warn;
13
+ this.errorImpl = functions.error;
14
+ }
15
+ setCurrentPlugin(plugin) {
16
+ this.setCurrentPluginImpl?.(plugin);
17
+ }
18
+ log(message, ...optionalParams) {
19
+ this.logImpl?.(message, optionalParams);
20
+ }
21
+ debug(message, ...optionalParams) {
22
+ this.debugImpl?.(message, optionalParams);
23
+ }
24
+ warn(message, ...optionalParams) {
25
+ this.warnImpl?.(message, optionalParams);
26
+ }
27
+ error(message, ...optionalParams) {
28
+ this.errorImpl?.(message, optionalParams);
29
+ }
30
+ }
@@ -0,0 +1,3 @@
1
+ import { type CustomizerMutationsContext } from "./types.js";
2
+ export declare const EMPTY_MUTATIONS: CustomizerMutationsContext;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/plugins/customizationApis/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,0BAe7B,CAAC"}
@@ -0,0 +1,17 @@
1
+ // (C) 2025-2026 GoodData Corporation
2
+ export const EMPTY_MUTATIONS = {
3
+ kpi: [],
4
+ insight: [],
5
+ filterBar: [],
6
+ topBar: [],
7
+ layout: [],
8
+ richText: [],
9
+ title: [],
10
+ loading: [],
11
+ visualizationSwitcher: [],
12
+ visualizationSwitcherToolbar: [],
13
+ attributeFilter: [],
14
+ dashboardContent: [],
15
+ exports: [],
16
+ layouts: {},
17
+ };
@@ -0,0 +1,6 @@
1
+ import { type IAutomationDialogDestinationProps } from "../../shared/slots/types.js";
2
+ /**
3
+ * Default implementation of the alerting dialog's destination region (the "Action" row).
4
+ */
5
+ export declare function AlertingDialogDestination({ notificationChannels, selectedNotificationChannelId, onChange }: IAutomationDialogDestinationProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=AlertingDialogDestination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertingDialogDestination.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogDestination.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAQrF;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EACtC,oBAAoB,EACpB,6BAA6B,EAC7B,QAAQ,EACX,EAAE,iCAAiC,2CAanC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { FormattedMessage } from "react-intl";
4
+ import { AlertDestinationSelect } from "./components/AlertDestinationSelect.js";
5
+ import { FormField } from "./FormField.js";
6
+ const OVERLAY_POSITION_TYPE = "sameAsTarget";
7
+ const CLOSE_ON_PARENT_SCROLL = true;
8
+ /**
9
+ * Default implementation of the alerting dialog's destination region (the "Action" row).
10
+ */
11
+ export function AlertingDialogDestination({ notificationChannels, selectedNotificationChannelId, onChange, }) {
12
+ return (_jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.action" }), htmlFor: "alert.destination", children: _jsx(AlertDestinationSelect, { id: "alert.destination", selectedDestination: selectedNotificationChannelId, onDestinationChange: onChange, destinations: notificationChannels, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) }));
13
+ }
@@ -0,0 +1,7 @@
1
+ import { type IAutomationDialogRecipientsProps } from "../../shared/slots/types.js";
2
+ /**
3
+ * Default implementation of the alerting dialog's recipients region. The label comes from the
4
+ * form field row, so the select's own label is off.
5
+ */
6
+ export declare function AlertingDialogRecipients(props: IAutomationDialogRecipientsProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=AlertingDialogRecipients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertingDialogRecipients.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogRecipients.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAIpF;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gCAAgC,2CAU/E"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { FormattedMessage } from "react-intl";
4
+ import { RecipientsSelect } from "../../scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.js";
5
+ import { FormField } from "./FormField.js";
6
+ /**
7
+ * Default implementation of the alerting dialog's recipients region. The label comes from the
8
+ * form field row, so the select's own label is off.
9
+ */
10
+ export function AlertingDialogRecipients(props) {
11
+ return (_jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.recipients" }), htmlFor: "alert.recipients", fullWidth: true, children: _jsx(RecipientsSelect, { id: "alert.recipients", showLabel: false, ...props }) }));
12
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultAlertingDialog.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.tsx"],"names":[],"mappings":"AA6CA,OAAO,EAGH,KAAK,2BAA2B,EACnC,MAAM,aAAa,CAAC;AA6BrB,wBAAgB,sBAAsB,CAAC,EACnC,QAAQ,EACR,eAAe,EACf,aAAa,EACb,OAAO,EACP,SAAS,EACT,WAAW,EACX,aAAa,EACb,KAAK,EACR,EAAE,2BAA2B,2CAwjB7B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,2BAA2B,2CAcvE"}
1
+ {"version":3,"file":"DefaultAlertingDialog.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.tsx"],"names":[],"mappings":"AAgDA,OAAO,EAGH,KAAK,2BAA2B,EACnC,MAAM,aAAa,CAAC;AA+BrB,wBAAgB,sBAAsB,CAAC,EACnC,QAAQ,EACR,eAAe,EACf,aAAa,EACb,OAAO,EACP,SAAS,EACT,WAAW,EACX,aAAa,EACb,KAAK,EACR,EAAE,2BAA2B,2CA2jB7B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,2BAA2B,2CAcvE"}
@@ -8,7 +8,6 @@ import { DASHBOARD_DIALOG_OVERS_Z_INDEX } from "../../../constants/zIndex.js";
8
8
  import { IntlWrapper } from "../../../localization/IntlWrapper.js";
9
9
  import { useAlertingDialogContext } from "../../contexts/AlertingDialogContext.js";
10
10
  import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
11
- import { RecipientsSelect } from "../../scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.js";
12
11
  import { ApplyCurrentFiltersConfirmDialog } from "../../shared/automationFilters/components/ApplyLatestFiltersConfirmDialog.js";
13
12
  import { DeleteAlertConfirmDialog } from "../DefaultAlertingManagementDialog/components/DeleteAlertConfirmDialog.js";
14
13
  import { useAlertActions } from "../state/AlertActionsContext.js";
@@ -17,14 +16,15 @@ import { useAlertDraft } from "../state/AlertDraftContext.js";
17
16
  import { useAlertFilters } from "../state/AlertFiltersContext.js";
18
17
  import { useAlertDialogValidity } from "../state/useAlertDialogValidity.js";
19
18
  import { useAlertSelectedValues } from "../state/useAlertSelectedValues.js";
19
+ import { AlertingDialogDestination } from "./AlertingDialogDestination.js";
20
20
  import { AlertingDialogFilters } from "./AlertingDialogFilters.js";
21
21
  import { AlertingDialogHeader } from "./AlertingDialogHeader.js";
22
+ import { AlertingDialogRecipients } from "./AlertingDialogRecipients.js";
22
23
  import { AlertAttributeSelect } from "./components/AlertAttributeSelect.js";
23
24
  import { AlertComparisonOperatorSelect } from "./components/AlertComparisonOperatorSelect.js";
24
25
  //
25
26
  //
26
27
  import { AlertComparisonPeriodSelect } from "./components/AlertComparisonPeriodSelect.js";
27
- import { AlertDestinationSelect } from "./components/AlertDestinationSelect.js";
28
28
  import { AlertGranularitySelect } from "./components/AlertGranularitySelect.js";
29
29
  import { AlertMeasureSelect } from "./components/AlertMeasureSelect.js";
30
30
  import { AlertSensitivitySelect } from "./components/AlertSensitivitySelect.js";
@@ -33,6 +33,7 @@ import { AlertTriggerIntervalSelect } from "./components/AlertTriggerIntervalSel
33
33
  import { AlertTriggerModeSelect } from "./components/AlertTriggerModeSelect.js";
34
34
  import { ALERTING_DIALOG_ID } from "./constants.js";
35
35
  import { DefaultLoadingAlertingDialog } from "./DefaultLoadingAlertingDialog.js";
36
+ import { FormField } from "./FormField.js";
36
37
  import { useAlertSubmit } from "./hooks/useAlertSubmit.js";
37
38
  import { useAlertThreshold } from "./hooks/useAlertThreshold.js";
38
39
  import { getValueSuffix } from "./utils/getters.js";
@@ -44,6 +45,8 @@ const overlayController = OverlayController.getInstance(DASHBOARD_DIALOG_OVERS_Z
44
45
  export function AlertingDialogRenderer({ onCancel, onDeleteSuccess, onDeleteError, onError, onSuccess, onSaveError, onSaveSuccess, slots, }) {
45
46
  const HeaderSlot = slots?.Header;
46
47
  const FiltersSlot = slots?.Filters;
48
+ const DestinationSlot = slots?.Destination;
49
+ const RecipientsSlot = slots?.Recipients;
47
50
  const intl = useIntl();
48
51
  const dialogTitleRef = useRef(null);
49
52
  const { isWhiteLabeled, isSecondaryTitleVisible, externalRecipient: externalRecipientOverride, maxAutomationsRecipients, isExecutionTimestampMode, features: { enableAlertOncePerInterval, enableAnomalyDetectionAlert, canUseAiAssistant: enableAiAssistant, }, catalogAttributes, catalogDateDatasets, separators, allowHourlyRecurrence, } = useAutomationsContext();
@@ -53,7 +56,7 @@ export function AlertingDialogRenderer({ onCancel, onDeleteSuccess, onDeleteErro
53
56
  onDeleteSuccess?.(alert);
54
57
  setAlertToDelete(null);
55
58
  };
56
- const { editedAutomation, originalAutomation, warningMessage } = useAlertDraft();
59
+ const { editedAutomation, warningMessage } = useAlertDraft();
57
60
  const { onTitleChange, onRecipientsChange, onMeasureChange, onAttributeChange, onComparisonOperatorChange, onRelativeOperatorChange, onAnomalyDetectionChange, onComparisonTypeChange, onDestinationChange, onTriggerModeChange, onTriggerIntervalChange, onSensitivityChange, onGranularityChange, setEditedAutomation, } = useAlertActions();
58
61
  const { supportedMeasures, supportedAttributes, isResultLoading, getAttributeValues, defaultUser, getMetricValue, } = useAlertData();
59
62
  const { selectedFilters, availableFilters, onFiltersChange, onApplyCurrentFilters, automationIsValid, filtersAreStale, automationParameters, availableParameters, onParameterChange, onParameterDelete, onParameterAdd, dropStaleParameters, } = useAlertFilters();
@@ -128,6 +131,23 @@ export function AlertingDialogRenderer({ onCancel, onDeleteSuccess, onDeleteErro
128
131
  onParameterChange,
129
132
  onParameterDelete,
130
133
  };
134
+ const destinationDefaultProps = {
135
+ notificationChannels,
136
+ selectedNotificationChannelId: editedAutomation?.notificationChannel,
137
+ onChange: onDestinationChange,
138
+ };
139
+ const recipientsDefaultProps = {
140
+ loggedUser: defaultUser,
141
+ value: editedAutomation?.recipients ?? [],
142
+ onChange: onRecipientsChange,
143
+ allowEmptySelection: true,
144
+ allowOnlyLoggedUserRecipients,
145
+ allowExternalRecipients,
146
+ maxRecipients: maxAutomationsRecipients,
147
+ notificationChannels,
148
+ notificationChannelId: editedAutomation?.notificationChannel,
149
+ externalRecipientOverride,
150
+ };
131
151
  return (_jsxs(_Fragment, { children: [
132
152
  _jsx(Overlay, { className: "gd-notifications-channels-dialog-overlay", isModal: true, positionType: "fixed", ensureVisibility: true, children: _jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(ValidationContextStore, { value: validationContextValue, children: _jsxs(ConfirmDialogBase, { className: "gd-notifications-channels-dialog s-gd-notifications-channels-dialog gd-dialog--wide gd-notifications-channels-dialog--wide", isPositive: true, cancelButtonText: intl.formatMessage({ id: "cancel" }), submitButtonText: alertToEdit
133
153
  ? intl.formatMessage({ id: `save` })
@@ -173,14 +193,13 @@ export function AlertingDialogRenderer({ onCancel, onDeleteSuccess, onDeleteErro
173
193
  ] }), htmlFor: "alert.granularity", children: _jsx(AlertGranularitySelect, { id: "alert.granularity", allowHourlyRecurrence: allowHourlyRecurrence, selectedGranularity: selectedGranularity, onGranularityChange: (granularity) => {
174
194
  onGranularityChange(selectedMeasure, granularity);
175
195
  }, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) })
176
- ] }))] }), _jsx(ContentDivider, { className: "gd-divider-with-margin" }), _jsxs(FormFieldGroup, { label: _jsx(FormattedMessage, { id: "insightAlert.config.do" }), children: [notificationChannels.length > 1 && (_jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.action" }), htmlFor: "alert.destination", children: _jsx(AlertDestinationSelect, { id: "alert.destination", selectedDestination: editedAutomation?.notificationChannel, onDestinationChange: onDestinationChange, destinations: notificationChannels, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) })), _jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.trigger" }), htmlFor: "alert.trigger", children: _jsx(AlertTriggerModeSelect, { id: "alert.trigger", selectedTriggerMode: editedAutomation?.alert?.trigger.mode ?? "ALWAYS", onTriggerModeChange: onTriggerModeChange, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL, enableAlertOncePerInterval: enableAlertOncePerInterval }) }), editedAutomation?.alert?.trigger.mode === "ONCE_PER_INTERVAL" ? (_jsx(FormField, { label: _jsxs("div", { className: "gd-dashboard-alerting-dialog-form-field__content-container-tooltip", children: [
196
+ ] }))] }), _jsx(ContentDivider, { className: "gd-divider-with-margin" }), _jsxs(FormFieldGroup, { label: _jsx(FormattedMessage, { id: "insightAlert.config.do" }), children: [notificationChannels.length > 1 ? (DestinationSlot ? (_jsx(DestinationSlot, { Default: AlertingDialogDestination, defaultProps: destinationDefaultProps })) : (_jsx(AlertingDialogDestination, { ...destinationDefaultProps }))) : null, _jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.trigger" }), htmlFor: "alert.trigger", children: _jsx(AlertTriggerModeSelect, { id: "alert.trigger", selectedTriggerMode: editedAutomation?.alert?.trigger.mode ?? "ALWAYS", onTriggerModeChange: onTriggerModeChange, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL, enableAlertOncePerInterval: enableAlertOncePerInterval }) }), editedAutomation?.alert?.trigger.mode === "ONCE_PER_INTERVAL" ? (_jsx(FormField, { label: _jsxs("div", { className: "gd-dashboard-alerting-dialog-form-field__content-container-tooltip", children: [
177
197
  _jsx(FormattedMessage, { id: "insightAlert.config.interval" }), _jsx(UiTooltip, { anchor: _jsx(UiIconButton, { icon: "question", variant: "tertiary", size: "xsmall", accessibilityConfig: {
178
198
  ariaLabel: intl.formatMessage({
179
199
  id: "insightAlert.config.interval",
180
200
  }),
181
201
  } }), content: _jsx(FormattedMessage, { id: "insightAlert.config.interval.tooltip" }), arrowPlacement: "left", optimalPlacement: true, offset: 10, width: 280, triggerBy: ["hover", "click"] })
182
- ] }), htmlFor: "alert.interval", children: _jsx(AlertTriggerIntervalSelect, { id: "alert.interval", selectedTriggerInterval: editedAutomation?.alert?.trigger.interval ?? "DAY", onTriggerIntervalChange: onTriggerIntervalChange, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) })) : null, _jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.recipients" }), htmlFor: "alert.recipients", fullWidth: true, children: _jsx(RecipientsSelect, { id: "alert.recipients", loggedUser: defaultUser, value: editedAutomation?.recipients ?? [], originalValue: originalAutomation?.recipients || [], onChange: onRecipientsChange, allowEmptySelection: true, allowOnlyLoggedUserRecipients: allowOnlyLoggedUserRecipients, allowExternalRecipients: allowExternalRecipients, maxRecipients: maxAutomationsRecipients, notificationChannels: notificationChannels, notificationChannelId: editedAutomation?.notificationChannel, showLabel: false, externalRecipientOverride: externalRecipientOverride }) })
183
- ] }), warningMessage ? (_jsx(Message, { type: "warning", className: "gd-notifications-channels-dialog-error", children: warningMessage })) : null, invalidDatapoints.map((datapoint) => (_jsx(Message, { id: datapoint.id, type: datapoint.severity === "info" ? "progress" : datapoint.severity, className: "gd-notifications-channels-dialog-error gd-notifications-channels-dialog-error-scrollable", children: datapoint.message }, datapoint.id)))] })
202
+ ] }), htmlFor: "alert.interval", children: _jsx(AlertTriggerIntervalSelect, { id: "alert.interval", selectedTriggerInterval: editedAutomation?.alert?.trigger.interval ?? "DAY", onTriggerIntervalChange: onTriggerIntervalChange, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) })) : null, RecipientsSlot ? (_jsx(RecipientsSlot, { Default: AlertingDialogRecipients, defaultProps: recipientsDefaultProps })) : (_jsx(AlertingDialogRecipients, { ...recipientsDefaultProps }))] }), warningMessage ? (_jsx(Message, { type: "warning", className: "gd-notifications-channels-dialog-error", children: warningMessage })) : null, invalidDatapoints.map((datapoint) => (_jsx(Message, { id: datapoint.id, type: datapoint.severity === "info" ? "progress" : datapoint.severity, className: "gd-notifications-channels-dialog-error gd-notifications-channels-dialog-error-scrollable", children: datapoint.message }, datapoint.id)))] })
184
203
  ] }) }) }) }), alertToDelete ? (_jsx(DeleteAlertConfirmDialog, { alert: alertToDelete, onCancel: () => setAlertToDelete(null), onSuccess: handleAlertDeleteSuccess, onError: onDeleteError })) : null] }));
185
204
  }
186
205
  /**
@@ -218,13 +237,6 @@ function AlertingDialogFooter({ isWhiteLabeled, helpTextId, alertToEdit, isSavin
218
237
  const intl = useIntl();
219
238
  return (_jsxs("div", { className: "gd-notifications-channels-dialog-footer-link", children: [isWhiteLabeled ? null : (_jsx(Hyperlink, { text: intl.formatMessage({ id: helpTextId }), href: "https://www.gooddata.com/docs/cloud/create-dashboards/automation/alerts/", iconClass: "gd-icon-circle-question" })), alertToEdit ? (_jsx(Button, { className: "gd-button-link-dimmed", value: intl.formatMessage({ id: "delete" }), onClick: onDeleteClick, disabled: isSavingAlert })) : null] }));
220
239
  }
221
- function FormField({ label, children, htmlFor, fullWidth = false, }) {
222
- return (_jsxs("div", { className: "gd-input-component gd-input-component--no-last-child-margin gd-dashboard-alerting-dialog-form-field", children: [
223
- _jsx("div", { className: "gd-dashboard-alerting-dialog-form-field__label-container", children: _jsx("label", { className: "gd-label gd-dashboard-alerting-dialog-form-field__label", htmlFor: htmlFor, children: label }) }), _jsx("div", { className: fullWidth
224
- ? "gd-dashboard-alerting-dialog-form-field__content-container-full-width"
225
- : "gd-dashboard-alerting-dialog-form-field__content-container", children: children })
226
- ] }));
227
- }
228
240
  function FormFieldGroup({ label, children }) {
229
241
  return (_jsxs("div", { className: "gd-input-component gd-input-component--no-last-child-margin gd-dashboard-alerting-dialog-form-field-group", children: [
230
242
  _jsx("div", { className: "gd-dashboard-alerting-dialog-form-field-group__label-container", children: _jsx("label", { className: "gd-label gd-dashboard-alerting-dialog-form-field-group__label", children: label }) }), _jsx("div", { className: "gd-dashboard-alerting-dialog-form-field-group__content-container", children: children })