@gooddata/sdk-ui-dashboard 11.46.0-alpha.4 → 11.46.0-alpha.6

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 (48) hide show
  1. package/NOTICE +15 -15
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/_staging/dateFilterConfig/validation.d.ts.map +1 -1
  5. package/esm/_staging/dateFilterConfig/validation.js +2 -15
  6. package/esm/index.d.ts +2 -2
  7. package/esm/index.d.ts.map +1 -1
  8. package/esm/index.js +2 -2
  9. package/esm/model/store/config/configSelectors.d.ts +0 -37
  10. package/esm/model/store/config/configSelectors.d.ts.map +1 -1
  11. package/esm/model/store/config/configSelectors.js +1 -50
  12. package/esm/model/store/executionResults/executionResultsSelectors.d.ts.map +1 -1
  13. package/esm/model/store/executionResults/executionResultsSelectors.js +1 -2
  14. package/esm/model/store/widgetExports/widgetExportsSelectors.d.ts +0 -4
  15. package/esm/model/store/widgetExports/widgetExportsSelectors.d.ts.map +1 -1
  16. package/esm/model/store/widgetExports/widgetExportsSelectors.js +2 -11
  17. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormValidation.d.ts +22 -0
  18. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormValidation.d.ts.map +1 -0
  19. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormValidation.js +47 -0
  20. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts +1 -1
  21. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +1 -1
  22. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +16 -36
  23. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Attachments/SlidesTemplateSettings.d.ts.map +1 -1
  24. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Attachments/SlidesTemplateSettings.js +9 -4
  25. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.d.ts.map +1 -1
  26. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.js +4 -4
  27. package/esm/presentation/dialogs/ExportTemplateSelectionDialog/ExportTemplateSelectionDialog.d.ts.map +1 -1
  28. package/esm/presentation/dialogs/ExportTemplateSelectionDialog/ExportTemplateSelectionDialog.js +9 -4
  29. package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.d.ts.map +1 -1
  30. package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.js +4 -5
  31. package/esm/presentation/flexibleLayout/DashboardLayoutWidget.d.ts.map +1 -1
  32. package/esm/presentation/flexibleLayout/DashboardLayoutWidget.js +1 -12
  33. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.d.ts.map +1 -1
  34. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.js +1 -2
  35. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +0 -12
  36. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  37. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +0 -12
  38. package/esm/presentation/widget/common/useInsightExport.js +3 -2
  39. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialog.d.ts.map +1 -1
  40. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialog.js +2 -4
  41. package/esm/sdk-ui-dashboard.d.ts +0 -41
  42. package/package.json +21 -21
  43. package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlay.d.ts +0 -10
  44. package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlay.d.ts.map +0 -1
  45. package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlay.js +0 -51
  46. package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlayController.d.ts +0 -7
  47. package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlayController.d.ts.map +0 -1
  48. package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlayController.js +0 -16
@@ -11,8 +11,4 @@ export declare const selectIsExportableToXLSX: DashboardSelector<boolean>;
11
11
  * @internal
12
12
  */
13
13
  export declare const selectIsExportableToPngImage: DashboardSelector<boolean>;
14
- /**
15
- * @internal
16
- */
17
- export declare const selectIsExportableToPdfTabular: DashboardSelector<boolean>;
18
14
  //# sourceMappingURL=widgetExportsSelectors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"widgetExportsSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/widgetExports/widgetExportsSelectors.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,iBAAiB,CAAC,OAAO,CAO9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,iBAAiB,CAAC,OAAO,CAM/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,OAAO,CAMnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,8BAA8B,EAAE,iBAAiB,CAAC,OAAO,CAMrE,CAAC"}
1
+ {"version":3,"file":"widgetExportsSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/widgetExports/widgetExportsSelectors.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,iBAAiB,CAAC,OAAO,CAO9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,iBAAiB,CAAC,OAAO,CAM/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,OAAO,CAAsB,CAAC"}
@@ -1,7 +1,6 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2025-2026 GoodData Corporation
2
2
  import { createSelector } from "@reduxjs/toolkit";
3
3
  import { selectSupportsExportToCsv, selectSupportsExportToXlsx, } from "../backendCapabilities/backendCapabilitiesSelectors.js";
4
- import { selectEnableExportToPdfTabular, selectEnableWidgetExportPngImage, } from "../config/configSelectors.js";
5
4
  import { selectCanExecuteRaw, selectCanExportPdf, selectCanExportTabular, } from "../permissions/permissionsSelectors.js";
6
5
  /**
7
6
  * @internal
@@ -18,12 +17,4 @@ export const selectIsExportableToXLSX = createSelector(selectSupportsExportToXls
18
17
  /**
19
18
  * @internal
20
19
  */
21
- export const selectIsExportableToPngImage = createSelector(selectEnableWidgetExportPngImage, selectCanExportPdf, (enableWidgetExportPngImage, canExportVisual) => {
22
- return enableWidgetExportPngImage && canExportVisual;
23
- });
24
- /**
25
- * @internal
26
- */
27
- export const selectIsExportableToPdfTabular = createSelector(selectEnableExportToPdfTabular, selectCanExportTabular, (enableExportToPdfTabular, canExportTabular) => {
28
- return enableExportToPdfTabular && canExportTabular;
29
- });
20
+ export const selectIsExportableToPngImage = selectCanExportPdf;
@@ -0,0 +1,22 @@
1
+ import { type IAutomationMetadataObject, type IAutomationMetadataObjectDefinition, type IAutomationRecipient, type ICatalogDateDataset, type IInsight, type INotificationChannelIdentifier, type INotificationChannelMetadataObject, type IWidget } from "@gooddata/sdk-model";
2
+ export interface IUseAlertFormValidationProps {
3
+ editedAutomation: IAutomationMetadataObjectDefinition | undefined;
4
+ originalAutomation: IAutomationMetadataObjectDefinition | undefined;
5
+ alertToEdit?: IAutomationMetadataObject;
6
+ widget?: IWidget;
7
+ insight?: IInsight;
8
+ catalogDateDatasets: ICatalogDateDataset[];
9
+ isInvalidConnectionToInsight: boolean;
10
+ selectedNotificationChannel: INotificationChannelIdentifier | INotificationChannelMetadataObject | undefined;
11
+ allowExternalRecipients: boolean;
12
+ allowOnlyLoggedUserRecipients: boolean;
13
+ maxAutomationsRecipients: number;
14
+ defaultRecipient: IAutomationRecipient;
15
+ isTitleValid: boolean;
16
+ }
17
+ export declare function useAlertFormValidation(props: IUseAlertFormValidationProps): {
18
+ isSubmitDisabled: boolean;
19
+ validationErrorMessage: string | undefined;
20
+ isParentValid: boolean;
21
+ };
22
+ //# sourceMappingURL=useAlertFormValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAlertFormValidation.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormValidation.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EAIf,MAAM,qBAAqB,CAAC;AAO7B,MAAM,WAAW,4BAA4B;IACzC,gBAAgB,EAAE,mCAAmC,GAAG,SAAS,CAAC;IAClE,kBAAkB,EAAE,mCAAmC,GAAG,SAAS,CAAC;IACpE,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;IAC3C,4BAA4B,EAAE,OAAO,CAAC;IACtC,2BAA2B,EACrB,8BAA8B,GAC9B,kCAAkC,GAClC,SAAS,CAAC;IAChB,uBAAuB,EAAE,OAAO,CAAC;IACjC,6BAA6B,EAAE,OAAO,CAAC;IACvC,wBAAwB,EAAE,MAAM,CAAC;IACjC,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,YAAY,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,4BAA4B,GAAG;IACzE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,OAAO,CAAC;CAC1B,CA4EA"}
@@ -0,0 +1,47 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { isEqual } from "lodash-es";
3
+ import { useIntl } from "react-intl";
4
+ import { isAutomationExternalUserRecipient, isAutomationUnknownUserRecipient, isAutomationUserRecipient, } from "@gooddata/sdk-model";
5
+ import { isEmail } from "../../../scheduledEmail/utils/validate.js";
6
+ import { isAlertValueDefined } from "../utils/guards.js";
7
+ import { useAlertValidation } from "./useAlertValidation.js";
8
+ export function useAlertFormValidation(props) {
9
+ const { editedAutomation, originalAutomation, alertToEdit, widget, insight, catalogDateDatasets, isInvalidConnectionToInsight, selectedNotificationChannel, allowExternalRecipients, allowOnlyLoggedUserRecipients, maxAutomationsRecipients, defaultRecipient, isTitleValid, } = props;
10
+ const intl = useIntl();
11
+ const { isValid: isOriginalAutomationValid, invalidityReason } = useAlertValidation(originalAutomation, widget, insight, catalogDateDatasets, undefined);
12
+ const isParentValid = invalidityReason !== "missingWidget";
13
+ const validationErrorMessage = isOriginalAutomationValid
14
+ ? undefined
15
+ : isInvalidConnectionToInsight
16
+ ? intl.formatMessage({ id: "insightAlert.config.invalidWidget" })
17
+ : intl.formatMessage({ id: "insightAlert.config.unusedWidget" });
18
+ const hasValidThreshold = isAlertValueDefined(editedAutomation?.alert);
19
+ const hasRecipients = (editedAutomation?.recipients?.length ?? 0) > 0;
20
+ const hasValidExternalRecipients = allowExternalRecipients
21
+ ? true
22
+ : !editedAutomation?.recipients?.some(isAutomationExternalUserRecipient);
23
+ const hasValidCreatorRecipient = allowOnlyLoggedUserRecipients
24
+ ? editedAutomation?.recipients?.length === 1 &&
25
+ editedAutomation?.recipients[0].id === defaultRecipient.id
26
+ : true;
27
+ const hasNoUnknownRecipients = !editedAutomation?.recipients?.some(isAutomationUnknownUserRecipient);
28
+ const respectsRecipientsLimit = (editedAutomation?.recipients?.length ?? 0) <= maxAutomationsRecipients;
29
+ const hasFilledEmails = selectedNotificationChannel?.destinationType === "smtp"
30
+ ? editedAutomation?.recipients?.every((recipient) => isAutomationUserRecipient(recipient) ? isEmail(recipient.email ?? "") : true)
31
+ : true;
32
+ const isValid = !!editedAutomation &&
33
+ hasRecipients &&
34
+ respectsRecipientsLimit &&
35
+ hasValidExternalRecipients &&
36
+ hasValidCreatorRecipient &&
37
+ hasNoUnknownRecipients &&
38
+ hasFilledEmails &&
39
+ hasValidThreshold &&
40
+ isTitleValid;
41
+ const isSubmitDisabled = !!(!isValid || (alertToEdit && isEqual(originalAutomation, editedAutomation)));
42
+ return {
43
+ isSubmitDisabled,
44
+ validationErrorMessage,
45
+ isParentValid,
46
+ };
47
+ }
@@ -67,7 +67,7 @@ export declare function useEditAlert({ alertToEdit, notificationChannels, insigh
67
67
  allowOnlyLoggedUserRecipients: boolean;
68
68
  allowExternalRecipients: boolean;
69
69
  validationErrorMessage: string | undefined;
70
- isSubmitDisabled: boolean | undefined;
70
+ isSubmitDisabled: boolean;
71
71
  isParentValid: boolean;
72
72
  thresholdErrorMessage: string | undefined;
73
73
  allowHourlyRecurrence: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useEditAlert.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,iCAAiC,EACtC,KAAK,iCAAiC,EACtC,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,EAEb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EACZ,KAAK,cAAc,EAItB,MAAM,qBAAqB,CAAC;AAiB7B,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAoBvG,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAC9F,wBAAwB,EAAE,MAAM,CAAC;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,uBAAuB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAE9C,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACnE,gCAAgC,CAAC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IAC1E,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,wBAAgB,YAAY,CAAC,EACzB,WAAW,EACX,oBAAoB,EACpB,OAAO,EACP,MAAM,EACN,KAAK,EACL,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,gCAAgC,EAChC,uBAAuB,EACvB,yBAAyB,EAC5B,EAAE,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0lBpB"}
1
+ {"version":3,"file":"useEditAlert.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,iCAAiC,EACtC,KAAK,iCAAiC,EACtC,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,EAEb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EACZ,KAAK,cAAc,EACtB,MAAM,qBAAqB,CAAC;AAgB7B,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAmBvG,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAC9F,wBAAwB,EAAE,MAAM,CAAC;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,uBAAuB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAE9C,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACnE,gCAAgC,CAAC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IAC1E,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,wBAAgB,YAAY,CAAC,EACzB,WAAW,EACX,oBAAoB,EACpB,OAAO,EACP,MAAM,EACN,KAAK,EACL,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,gCAAgC,EAChC,uBAAuB,EACvB,yBAAyB,EAC5B,EAAE,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAujBpB"}
@@ -1,21 +1,17 @@
1
1
  // (C) 2019-2026 GoodData Corporation
2
2
  import { useCallback, useState } from "react";
3
- import { isEqual } from "lodash-es";
4
3
  import { useIntl } from "react-intl";
5
- import { isAutomationExternalUserRecipient, isAutomationUnknownUserRecipient, isAutomationUserRecipient, } from "@gooddata/sdk-model";
6
4
  import { useAlertingDialogContext } from "../../../contexts/AlertingDialogContext.js";
7
5
  import { useAutomationsContext } from "../../../contexts/AutomationsContext.js";
8
- import { isEmail } from "../../../scheduledEmail/utils/validate.js";
9
6
  import { setAlertExecutionParameters } from "../../../shared/automationFilters/automationParameters.js";
10
7
  import { useAutomationAlertParameters } from "../../../shared/automationFilters/useAutomationAlertParameters.js";
11
8
  import { getAppliedWidgetFilters, getVisibleFiltersByFilters, resolveMvfDimensionalityLocalRefs, } from "../../../shared/automationFilters/utils.js";
12
9
  import { convertCurrentUserToAutomationRecipient, convertCurrentUserToWorkspaceUser, convertExternalRecipientToAutomationRecipient, } from "../../../shared/utils/automationUtils.js";
13
10
  import { createDefaultAlert } from "../utils/convertors.js";
14
- import { isAlertValueDefined } from "../utils/guards.js";
15
11
  import { transformAlertByAnomalyDetection, transformAlertByAttribute, transformAlertByComparisonOperator, transformAlertByDestination, transformAlertByGranularity, transformAlertByMetric, transformAlertByRelativeOperator, transformAlertBySensitivity, transformAlertByValue, } from "../utils/transformation.js";
12
+ import { useAlertFormValidation } from "./useAlertFormValidation.js";
16
13
  import { useAlertSelectedValues } from "./useAlertSelectedValues.js";
17
14
  import { useAlertSupportedMetrics } from "./useAlertSupportedMetrics.js";
18
- import { useAlertValidation } from "./useAlertValidation.js";
19
15
  import { useThresholdValue } from "./useThresholdValue.js";
20
16
  export function useEditAlert({ alertToEdit, notificationChannels, insight, widget, users, editedAutomationFilters, maxAutomationsRecipients, setEditedAutomationFilters, availableFiltersAsVisibleFilters, filtersForNewAutomation, externalRecipientOverride, }) {
21
17
  const intl = useIntl();
@@ -86,8 +82,6 @@ export function useEditAlert({ alertToEdit, notificationChannels, insight, widge
86
82
  supportedAttributes,
87
83
  notificationChannels,
88
84
  });
89
- const { isValid: isOriginalAutomationValid, invalidityReason } = useAlertValidation(originalAutomation, widget, insight, catalogDateDatasets, undefined);
90
- const isParentValid = invalidityReason !== "missingWidget";
91
85
  //
92
86
  // Handlers
93
87
  //
@@ -244,35 +238,21 @@ export function useEditAlert({ alertToEdit, notificationChannels, insight, widge
244
238
  onFiltersChange(filtersForNewAutomation);
245
239
  }, [filtersForNewAutomation, onFiltersChange]);
246
240
  const { value, onChange, onBlur, errorMessage: thresholdErrorMessage, } = useThresholdValue(onValueChange, getMetricValue, isNewAlert, editedAutomation?.alert, selectedRelativeOperator, selectedMeasure, selectedAttribute, selectedValue);
247
- const hasValidThreshold = isAlertValueDefined(editedAutomation?.alert);
248
- const validationErrorMessage = isOriginalAutomationValid
249
- ? undefined
250
- : isInvalidConnectionToInsight
251
- ? intl.formatMessage({ id: "insightAlert.config.invalidWidget" })
252
- : intl.formatMessage({ id: "insightAlert.config.unusedWidget" });
253
- const hasRecipients = (editedAutomation?.recipients?.length ?? 0) > 0;
254
- const hasValidExternalRecipients = allowExternalRecipients
255
- ? true
256
- : !editedAutomation?.recipients?.some(isAutomationExternalUserRecipient);
257
- const hasValidCreatorRecipient = allowOnlyLoggedUserRecipients
258
- ? editedAutomation?.recipients?.length === 1 &&
259
- editedAutomation?.recipients[0].id === defaultRecipient.id
260
- : true;
261
- const hasNoUnknownRecipients = !editedAutomation?.recipients?.some(isAutomationUnknownUserRecipient);
262
- const respectsRecipientsLimit = (editedAutomation?.recipients?.length ?? 0) <= maxAutomationsRecipients;
263
- const hasFilledEmails = selectedNotificationChannel?.destinationType === "smtp"
264
- ? editedAutomation?.recipients?.every((recipient) => isAutomationUserRecipient(recipient) ? isEmail(recipient.email ?? "") : true)
265
- : true;
266
- const isValid = !!editedAutomation &&
267
- hasRecipients &&
268
- respectsRecipientsLimit &&
269
- hasValidExternalRecipients &&
270
- hasValidCreatorRecipient &&
271
- hasNoUnknownRecipients &&
272
- hasFilledEmails &&
273
- hasValidThreshold &&
274
- isTitleValid;
275
- const isSubmitDisabled = !isValid || (alertToEdit && isEqual(originalAutomation, editedAutomation));
241
+ const { isSubmitDisabled, validationErrorMessage, isParentValid } = useAlertFormValidation({
242
+ editedAutomation,
243
+ originalAutomation,
244
+ alertToEdit,
245
+ widget,
246
+ insight,
247
+ catalogDateDatasets,
248
+ isInvalidConnectionToInsight: !!isInvalidConnectionToInsight,
249
+ selectedNotificationChannel,
250
+ allowExternalRecipients,
251
+ allowOnlyLoggedUserRecipients,
252
+ maxAutomationsRecipients,
253
+ defaultRecipient,
254
+ isTitleValid,
255
+ });
276
256
  return {
277
257
  onTitleChange,
278
258
  onRecipientsChange,
@@ -1 +1 @@
1
- {"version":3,"file":"SlidesTemplateSettings.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Attachments/SlidesTemplateSettings.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAuB3D,UAAU,4BAA4B;IAClC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAChE;AAED,wBAAgB,sBAAsB,CAAC,EACnC,SAAS,EACT,UAAU,EACV,kBAAkB,EACrB,EAAE,4BAA4B,kDA2G9B"}
1
+ {"version":3,"file":"SlidesTemplateSettings.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Attachments/SlidesTemplateSettings.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AA0B5E,UAAU,4BAA4B;IAClC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAChE;AAED,wBAAgB,sBAAsB,CAAC,EACnC,SAAS,EACT,UAAU,EACV,kBAAkB,EACrB,EAAE,4BAA4B,kDA+G9B"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
3
  import { useState } from "react";
4
4
  import { defineMessages, useIntl } from "react-intl";
5
+ import { isIdentifierRef } from "@gooddata/sdk-model";
5
6
  import { Button, ContentDivider, Dropdown, UiIcon, UiTooltip, isEscapeKey, } from "@gooddata/sdk-ui-kit";
6
7
  const DROPDOWN_ALIGN_POINTS = [
7
8
  { align: "bc tc", offset: { x: 0, y: 0 } },
@@ -13,6 +14,7 @@ const messages = defineMessages({
13
14
  save: { id: "save" },
14
15
  close: { id: "close" },
15
16
  });
17
+ const getTemplateId = (template) => isIdentifierRef(template.ref) ? template.ref.identifier : "";
16
18
  export function SlidesTemplateSettings({ templates, templateId, onTemplateIdChange, }) {
17
19
  const intl = useIntl();
18
20
  const [pendingTemplateId, setPendingTemplateId] = useState(undefined);
@@ -20,7 +22,7 @@ export function SlidesTemplateSettings({ templates, templateId, onTemplateIdChan
20
22
  return null;
21
23
  }
22
24
  const settingsLabel = intl.formatMessage(messages.settingsTitle);
23
- const effectiveSelection = pendingTemplateId ?? templateId ?? templates[0]?.id;
25
+ const effectiveSelection = pendingTemplateId ?? templateId ?? (templates[0] ? getTemplateId(templates[0]) : undefined);
24
26
  const isSaveDisabled = effectiveSelection === templateId;
25
27
  return (_jsx(Dropdown, { alignPoints: DROPDOWN_ALIGN_POINTS, closeOnParentScroll: true, autofocusOnOpen: true, onOpenStateChanged: (isOpen) => {
26
28
  if (!isOpen) {
@@ -34,9 +36,12 @@ export function SlidesTemplateSettings({ templates, templateId, onTemplateIdChan
34
36
  }, children: [
35
37
  _jsx("h3", { className: "gd-list-title", children: settingsLabel }), _jsx("span", { className: "gd-close-button", children: _jsx(Button, { className: "gd-button-link gd-button-icon-only gd-icon-cross s-dialog-close-button", value: "", onClick: closeDropdown, accessibilityConfig: {
36
38
  ariaLabel: intl.formatMessage(messages.close),
37
- } }) }), _jsx("div", { className: "gd-attachment-settings-dropdown-content", children: _jsx("div", { className: "gd-slides-template-dropdown-list", role: "radiogroup", "aria-label": settingsLabel, children: templates.map((template) => (_jsx(UiTooltip, { triggerBy: ["hover", "focus"], arrowPlacement: "bottom", content: template.name, anchor: _jsxs("label", { className: "input-radio-label s-slides-template-item", children: [
38
- _jsx("input", { type: "radio", className: "input-radio", name: "slidesTemplate", value: template.id, checked: effectiveSelection === template.id, onChange: () => setPendingTemplateId(template.id) }), _jsx("span", { className: "input-label-text", children: template.name })
39
- ] }) }, template.id))) }) }), _jsx(ContentDivider, { className: "gd-divider-without-margin" }), _jsxs("div", { className: "gd-attachment-settings-dropdown-footer", children: [
39
+ } }) }), _jsx("div", { className: "gd-attachment-settings-dropdown-content", children: _jsx("div", { className: "gd-slides-template-dropdown-list", role: "radiogroup", "aria-label": settingsLabel, children: templates.map((template) => {
40
+ const id = getTemplateId(template);
41
+ return (_jsx(UiTooltip, { triggerBy: ["hover", "focus"], arrowPlacement: "bottom", content: template.name, anchor: _jsxs("label", { className: "input-radio-label s-slides-template-item", children: [
42
+ _jsx("input", { type: "radio", className: "input-radio", name: "slidesTemplate", value: id, checked: effectiveSelection === id, onChange: () => setPendingTemplateId(id) }), _jsx("span", { className: "input-label-text", children: template.name })
43
+ ] }) }, id));
44
+ }) }) }), _jsx(ContentDivider, { className: "gd-divider-without-margin" }), _jsxs("div", { className: "gd-attachment-settings-dropdown-footer", children: [
40
45
  _jsx(Button, { value: intl.formatMessage(messages.cancel), className: "gd-button-secondary", onClick: closeDropdown }), _jsx(Button, { value: intl.formatMessage(messages.save), className: "gd-button-action", onClick: () => {
41
46
  if (effectiveSelection) {
42
47
  onTemplateIdChange(effectiveSelection);
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultDashboardSettingsDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoD,MAAM,OAAO,CAAC;AAqC5F,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAGhE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,SAAS,EACT,OAAO,EACP,QAAQ,EACX,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CAkMrD"}
1
+ {"version":3,"file":"DefaultDashboardSettingsDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoD,MAAM,OAAO,CAAC;AAoC5F,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAGhE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,SAAS,EACT,OAAO,EACP,QAAQ,EACX,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CA6LrD"}
@@ -7,7 +7,7 @@ import { Bubble, BubbleHoverTrigger, ConfirmDialog, DialogListHeader, Dropdown,
7
7
  import { queryDateDatasetsForInsight, } from "../../model/queries/insights.js";
8
8
  import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
9
9
  import { useDashboardQueryProcessing } from "../../model/react/useDashboardQueryProcessing.js";
10
- import { selectDateFormat, selectEnableAlertsEvaluationFrequencySetup, selectEnableDashboardSectionHeadersDateDataSet, selectIsWhiteLabeled, selectLocale, selectSettings, selectWeekStart, } from "../../model/store/config/configSelectors.js";
10
+ import { selectDateFormat, selectEnableDashboardSectionHeadersDateDataSet, selectIsWhiteLabeled, selectLocale, selectSettings, selectWeekStart, } from "../../model/store/config/configSelectors.js";
11
11
  import { selectCrossFilteringEnabledAndSupported } from "../../model/store/topBar/topBarSelectors.js";
12
12
  import { useDialogData } from "./useDialogData.js";
13
13
  /**
@@ -21,7 +21,6 @@ export function DefaultDashboardSettingsDialog({ isVisible, onApply, onCancel /*
21
21
  const weekStart = useDashboardSelector(selectWeekStart);
22
22
  const locale = useDashboardSelector(selectLocale);
23
23
  const isCrossFilteringEnabledAndSupported = useDashboardSelector(selectCrossFilteringEnabledAndSupported);
24
- const enableAlertsEvaluationFrequencySetup = useDashboardSelector(selectEnableAlertsEvaluationFrequencySetup);
25
24
  const settings = useDashboardSelector(selectSettings);
26
25
  const isWhiteLabeled = useDashboardSelector(selectIsWhiteLabeled);
27
26
  const enableDashboardSectionHeadersDateDataSet = useDashboardSelector(selectEnableDashboardSectionHeadersDateDataSet);
@@ -86,7 +85,7 @@ export function DefaultDashboardSettingsDialog({ isVisible, onApply, onCancel /*
86
85
  ...currentData,
87
86
  sectionHeadersDateDataSet: dateDataSet,
88
87
  });
89
- } })) : null] }), enableAlertsEvaluationFrequencySetup ? (_jsxs("div", { className: "gd-dashboard-settings-dialog-section", children: [
88
+ } })) : null] }), _jsxs("div", { className: "gd-dashboard-settings-dialog-section", children: [
90
89
  _jsx(DialogListHeader, { title: intl.formatMessage({ id: "settingsDashboardDialog.section.alert" }), className: "gd-dashboard-settings-filters" }), _jsx(RecurrenceForm, { allowHourlyRecurrence: true, cronExpression: currentData.evaluationFrequency ?? "", placeholder: settings.alertDefault?.defaultCron, timezone: settings.alertDefault?.defaultTimezone, onChange: (e, _, valid) => {
91
90
  setCronValid(valid);
92
91
  setCurrentData({
@@ -98,7 +97,8 @@ export function DefaultDashboardSettingsDialog({ isVisible, onApply, onCancel /*
98
97
  }), showRepeatTypeDescription: true, showTimezoneInOccurrence: true, dateFormat: dateFormat, weekStart: weekStart, locale: locale, showInheritValue: true, isWhiteLabeled: isWhiteLabeled, customRecurrenceTypeMappingFn: simpleRecurrenceTypeMappingFn }), _jsx("div", { className: "gd-dashboard-settings-evaluation-note", children: currentData.evaluationFrequency === undefined ? (_jsx(FormattedMessage, { id: "settingsDashboardDialog.section.alert.inherit" })) : (_jsx(FormattedMessage, { id: "settingsDashboardDialog.section.alert.note", values: {
99
98
  strong: (chunks) => _jsx("strong", { children: chunks }),
100
99
  } })) })
101
- ] })) : null] }) }));
100
+ ] })
101
+ ] }) }));
102
102
  }
103
103
  const BUBBLE_ALIGN_POINTS = [{ align: "bc tl" }];
104
104
  function ConfigurationOption({ label, tooltip, isChecked, onChange }) {
@@ -1 +1 @@
1
- {"version":3,"file":"ExportTemplateSelectionDialog.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dialogs/ExportTemplateSelectionDialog/ExportTemplateSelectionDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAS3D,UAAU,mCAAmC;IACzC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wBAAgB,6BAA6B,CAAC,EAC1C,SAAS,EACT,SAAS,EACT,QAAQ,EACX,EAAE,mCAAmC,2CAiDrC"}
1
+ {"version":3,"file":"ExportTemplateSelectionDialog.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dialogs/ExportTemplateSelectionDialog/ExportTemplateSelectionDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAY5E,UAAU,mCAAmC;IACzC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wBAAgB,6BAA6B,CAAC,EAC1C,SAAS,EACT,SAAS,EACT,QAAQ,EACX,EAAE,mCAAmC,2CAsDrC"}
@@ -2,19 +2,24 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
3
  import { useState } from "react";
4
4
  import { defineMessages, useIntl } from "react-intl";
5
+ import { isIdentifierRef } from "@gooddata/sdk-model";
5
6
  import { ConfirmDialog, UiTooltip } from "@gooddata/sdk-ui-kit";
6
7
  const messages = defineMessages({
7
8
  dialogTitle: { id: "export.template.dialog.title" },
8
9
  exportButton: { id: "export.template.dialog.export" },
9
10
  cancelButton: { id: "cancel" },
10
11
  });
12
+ const templateId = (template) => isIdentifierRef(template.ref) ? template.ref.identifier : "";
11
13
  export function ExportTemplateSelectionDialog({ templates, onConfirm, onCancel, }) {
12
14
  const intl = useIntl();
13
- const [selectedTemplateId, setSelectedTemplateId] = useState(templates[0]?.id ?? "");
15
+ const [selectedTemplateId, setSelectedTemplateId] = useState(templates[0] ? templateId(templates[0]) : "");
14
16
  const handleSubmit = () => {
15
17
  onConfirm(selectedTemplateId);
16
18
  };
17
- return (_jsx(ConfirmDialog, { className: "gd-export-template-selection-dialog s-export-template-selection-dialog", isPositive: true, displayCloseButton: true, headline: intl.formatMessage(messages.dialogTitle), cancelButtonText: intl.formatMessage(messages.cancelButton), submitButtonText: intl.formatMessage(messages.exportButton), onCancel: onCancel, onClose: onCancel, onSubmit: handleSubmit, children: _jsx("div", { className: "gd-export-template-list", role: "radiogroup", "aria-label": intl.formatMessage(messages.dialogTitle), children: templates.map((template) => (_jsx(UiTooltip, { triggerBy: ["hover", "focus"], arrowPlacement: "bottom", content: template.name, anchor: _jsxs("label", { className: "gd-export-template-item input-radio-label s-export-template-item", children: [
18
- _jsx("input", { type: "radio", className: "input-radio", name: "exportTemplate", value: template.id, checked: selectedTemplateId === template.id, onChange: () => setSelectedTemplateId(template.id) }), _jsx("span", { className: "input-label-text", children: template.name })
19
- ] }) }, template.id))) }) }));
19
+ return (_jsx(ConfirmDialog, { className: "gd-export-template-selection-dialog s-export-template-selection-dialog", isPositive: true, displayCloseButton: true, headline: intl.formatMessage(messages.dialogTitle), cancelButtonText: intl.formatMessage(messages.cancelButton), submitButtonText: intl.formatMessage(messages.exportButton), onCancel: onCancel, onClose: onCancel, onSubmit: handleSubmit, children: _jsx("div", { className: "gd-export-template-list", role: "radiogroup", "aria-label": intl.formatMessage(messages.dialogTitle), children: templates.map((template) => {
20
+ const id = templateId(template);
21
+ return (_jsx(UiTooltip, { triggerBy: ["hover", "focus"], arrowPlacement: "bottom", content: template.name, anchor: _jsxs("label", { className: "gd-export-template-item input-radio-label s-export-template-item", children: [
22
+ _jsx("input", { type: "radio", className: "input-radio", name: "exportTemplate", value: id, checked: selectedTemplateId === id, onChange: () => setSelectedTemplateId(id) }), _jsx("span", { className: "input-label-text", children: template.name })
23
+ ] }) }, id));
24
+ }) }) }));
20
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultDashboardDateFilter.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkC,MAAM,OAAO,CAAC;AAkC1E,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,MAAM,EACN,aAAa,EACb,eAAe,EACf,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,KAAK,EACR,EAAE,yBAAyB,GAAG,YAAY,CAkK1C"}
1
+ {"version":3,"file":"DefaultDashboardDateFilter.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkC,MAAM,OAAO,CAAC;AAiC1E,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,MAAM,EACN,aAAa,EACb,eAAe,EACf,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,KAAK,EACR,EAAE,yBAAyB,GAAG,YAAY,CAgK1C"}
@@ -9,7 +9,7 @@ import { matchDateFilterToDateFilterOptionWithPreference } from "../../../_stagi
9
9
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
10
10
  import { selectBackendCapabilities } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
11
11
  import { selectCatalogDateDatasets } from "../../../model/store/catalog/catalogSelectors.js";
12
- import { selectActiveCalendars, selectEnableKDEmptyDateValuesFilter, selectIsApplyFiltersAllAtOnceEnabledAndSet, selectLocale, selectSettings, selectWeekStart, } from "../../../model/store/config/configSelectors.js";
12
+ import { selectActiveCalendars, selectIsApplyFiltersAllAtOnceEnabledAndSet, selectLocale, selectSettings, selectWeekStart, } from "../../../model/store/config/configSelectors.js";
13
13
  import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSelectors.js";
14
14
  import { useCurrentDateFilterConfig } from "../../dragAndDrop/useCurrentDateFilterConfig.js";
15
15
  import { getVisibilityIcon } from "../utils.js";
@@ -30,11 +30,10 @@ export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChan
30
30
  const weekStart = useDashboardSelector(selectWeekStart);
31
31
  const isApplyAllAtOnceEnabledAndSet = useDashboardSelector(selectIsApplyFiltersAllAtOnceEnabledAndSet);
32
32
  const activeCalendars = useDashboardSelector(selectActiveCalendars);
33
- const isEmptyDateValuesFilterEnabled = useDashboardSelector(selectEnableKDEmptyDateValuesFilter);
34
33
  // The empty-values feature (the "Empty values" preset and the include/exclude toggle) is shown only when
35
- // the feature flag is on AND the date filter config marks the option as visible. Hiding it via the config
36
- // does not strip an already-set emptyValueHandling - that value is still applied to executions.
37
- const enableEmptyDateValues = isEmptyDateValuesFilterEnabled && (config.dateFilterOptions.emptyValues?.visible ?? true);
34
+ // the date filter config marks the option as visible. Hiding it via the config does not strip an
35
+ // already-set emptyValueHandling - that value is still applied to executions.
36
+ const enableEmptyDateValues = config.dateFilterOptions.emptyValues?.visible ?? true;
38
37
  const allDateDatasets = useDashboardSelector(selectCatalogDateDatasets);
39
38
  let defaultDateFilterName;
40
39
  if (filter?.dateFilter.dataSet) {
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardLayoutWidget.d.ts","sourceRoot":"","sources":["../../../src/presentation/flexibleLayout/DashboardLayoutWidget.tsx"],"names":[],"mappings":"AA+CA,OAAO,EACH,KAAK,uBAAuB,EAG/B,MAAM,kCAAkC,CAAC;AAW1C,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIvE,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,gDAAgD,CAAC;AA0DxG;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,IAAI,EACJ,qBAAqB,EACrB,OAAO,EACP,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACX,EAAE,iCAAiC,CAAC,uBAAuB,CAAC,GACzD,IAAI,CAAC,qBAAqB,EAAE,SAAS,GAAG,SAAS,GAAG,iBAAiB,GAAG,UAAU,CAAC,2CA8KtF"}
1
+ {"version":3,"file":"DashboardLayoutWidget.d.ts","sourceRoot":"","sources":["../../../src/presentation/flexibleLayout/DashboardLayoutWidget.tsx"],"names":[],"mappings":"AA0CA,OAAO,EACH,KAAK,uBAAuB,EAG/B,MAAM,kCAAkC,CAAC;AAW1C,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,gDAAgD,CAAC;AAyDxG;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,IAAI,EACJ,qBAAqB,EACrB,OAAO,EACP,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACX,EAAE,iCAAiC,CAAC,uBAAuB,CAAC,GACzD,IAAI,CAAC,qBAAqB,EAAE,SAAS,GAAG,SAAS,GAAG,iBAAiB,GAAG,UAAU,CAAC,2CA4JtF"}
@@ -14,7 +14,6 @@ import { selectEnableSnapshotExportAccessibility, selectIsExport, selectSettings
14
14
  import { selectInsightsMap } from "../../model/store/insights/insightsSelectors.js";
15
15
  import { selectIsInEditMode, selectIsInExportMode, } from "../../model/store/renderMode/renderModeSelectors.js";
16
16
  import { uiActions } from "../../model/store/ui/index.js";
17
- import { selectSectionModification, selectWidgetsModification, selectWidgetsOverlayState, } from "../../model/store/ui/uiSelectors.js";
18
17
  import { isCustomWidget, isExtendedDashboardLayoutWidget, } from "../../model/types/layoutTypes.js";
19
18
  import { isAnyPlaceholderWidget, isPlaceholderWidget } from "../../widgets/placeholders/types.js";
20
19
  import { DashboardItemPathAndSizeProvider } from "../dashboard/components/DashboardItemPathAndSizeContext.js";
@@ -26,7 +25,6 @@ import { useDashboardDrag } from "../dragAndDrop/useDashboardDrag.js";
26
25
  import { useWidgetExportData } from "../export/useExportData.js";
27
26
  import { DashboardWidget } from "../widget/widget/DashboardWidget.js";
28
27
  import { DEFAULT_COLUMN_CLIENT_WIDTH, DEFAULT_WIDTH_RESIZER_HEIGHT } from "./constants.js";
29
- import { DashboardItemOverlay } from "./DashboardItemOverlay/DashboardItemOverlay.js";
30
28
  import { useWidthValidation } from "./DefaultDashboardLayoutRenderer/useItemWidthValidation.js";
31
29
  import { getDashboardLayoutItemHeightForRatioAndScreen } from "./DefaultDashboardLayoutRenderer/utils/sizing.js";
32
30
  import { Hotspot } from "./dragAndDrop/draggableWidget/Hotspot.js";
@@ -34,7 +32,6 @@ import { useShouldShowRowEndHotspot } from "./dragAndDrop/draggableWidget/RowEnd
34
32
  import { HoverDetector } from "./dragAndDrop/Resize/HoverDetector.js";
35
33
  import { ResizeOverlay } from "./dragAndDrop/Resize/ResizeOverlay.js";
36
34
  import { WidthResizerHotspot } from "./dragAndDrop/Resize/WidthResizerHotspot.js";
37
- import { getRefsForItem, getRefsForSection } from "./refs.js";
38
35
  function logInvalidWidth(isValid, widgetId, gridWidth, parentWidth) {
39
36
  if (!isValid) {
40
37
  console.error(`DashboardLayoutWidget: Widget ID: ${widgetId} has width set to ${gridWidth} which is bigger than the parent container's width ${parentWidth} or parent container has a column direction set and the widget width is smaller than the parent!`);
@@ -108,10 +105,6 @@ export function DashboardLayoutWidget({ item, DefaultWidgetRenderer, onDrill, on
108
105
  const height = calculateHeight(currentSize, screen);
109
106
  const allowOverflow = !!currentSize.heightAsRatio;
110
107
  const index = getWidgetIndex(item);
111
- const refs = getRefsForItem(item);
112
- const sectionModifications = useDashboardSelector(selectSectionModification(getRefsForSection(item.section())));
113
- const itemModifications = useDashboardSelector(selectWidgetsModification(refs));
114
- const overlayShow = useDashboardSelector(selectWidgetsOverlayState(refs));
115
108
  const { isActive, isResizingColumnOrRow, heightLimitReached, widthLimitReached } = useResizeItemStatus(widget.identifier);
116
109
  const contentRef = useRef(null);
117
110
  const getWidthInPx = () => contentRef.current?.getBoundingClientRect().width ?? DEFAULT_COLUMN_CLIENT_WIDTH;
@@ -141,16 +134,12 @@ export function DashboardLayoutWidget({ item, DefaultWidgetRenderer, onDrill, on
141
134
  "gd-widget-export": isSnapshotAccessibilityEnabled && isExport,
142
135
  },
143
136
  ]);
144
- const isInsertedByPlugin = sectionModifications.includes("insertedByPlugin");
145
- const shouldRenderOverlay = isInEditMode && overlayShow && !isInsertedByPlugin;
146
- const handleHideOverlay = () => dispatch(uiActions.toggleWidgetsOverlay({ refs: [item.ref()], visible: false }));
147
137
  return (_jsxs(DefaultWidgetRenderer, { DefaultWidgetRenderer: DefaultWidgetRenderer, item: item, allowOverflow: allowOverflow, height: height, minHeight: minHeight, className: className, contentRef: contentRef, getLayoutDimensions: getLayoutDimensions, rowIndex: rowIndex, children: [
148
138
  _jsxs("div", { ref: wrapperRef, className: wrapperClassName, children: [canShowWidgetHotspots ? (_jsx(Hotspot, { dropZoneType: "prev", direction: direction, layoutPath: item.index(), isOverNestedLayout: isNestedLayout, isInFirstRow: isInFirstRow })) : null, _jsx(DashboardItemPathAndSizeProvider, { layoutItem: item, children: _jsx(HoverDetector, { widgetRef: widget.ref, children: _jsx(DashboardWidget
149
139
  // @ts-expect-error Don't expose index prop on public interface (we need it only for css class for KD tests)
150
140
  , {
151
141
  // @ts-expect-error Don't expose index prop on public interface (we need it only for css class for KD tests)
152
- index: index, onDrill: onDrill, onError: onError, onFiltersChange: onFiltersChange, widget: widget, parentLayoutItemSize: item.size(), parentLayoutPath: item.index(), ErrorComponent: ErrorComponent, LoadingComponent: LoadingComponent, rowIndex: rowIndex, exportData: exportData }) }) }), canShowResizeOverlay ? (_jsx(ResizeOverlay, { isActive: isActive, isResizingColumnOrRow: isResizingColumnOrRow, reachedWidthLimit: widthLimitReached, reachedHeightLimit: heightLimitReached, isOverNestedLayout: isNestedLayout, isInFirstRow: isInFirstRow })) : null, canShowWidgetHotspots ? (_jsx(Hotspot, { dropZoneType: "next", direction: direction, layoutPath: item.index(), hideDropTarget: enableRowEndHotspot, isOverNestedLayout: isNestedLayout, isInFirstRow: isInFirstRow })) : null] }), canShowWidgetHotspots ? (_jsx(WidthResizerHotspot, { item: item, getGridColumnHeightInPx: getHeightInPx, getGridColumnWidth: getGridColumnWidth, getLayoutDimensions: getLayoutDimensions, rowIndex: rowIndex })) : null, _jsx(DashboardItemOverlay, { type: "column", onHide: handleHideOverlay, render: shouldRenderOverlay, modifications: itemModifications })
153
- ] }));
142
+ index: index, onDrill: onDrill, onError: onError, onFiltersChange: onFiltersChange, widget: widget, parentLayoutItemSize: item.size(), parentLayoutPath: item.index(), ErrorComponent: ErrorComponent, LoadingComponent: LoadingComponent, rowIndex: rowIndex, exportData: exportData }) }) }), canShowResizeOverlay ? (_jsx(ResizeOverlay, { isActive: isActive, isResizingColumnOrRow: isResizingColumnOrRow, reachedWidthLimit: widthLimitReached, reachedHeightLimit: heightLimitReached, isOverNestedLayout: isNestedLayout, isInFirstRow: isInFirstRow })) : null, canShowWidgetHotspots ? (_jsx(Hotspot, { dropZoneType: "next", direction: direction, layoutPath: item.index(), hideDropTarget: enableRowEndHotspot, isOverNestedLayout: isNestedLayout, isInFirstRow: isInFirstRow })) : null] }), canShowWidgetHotspots ? (_jsx(WidthResizerHotspot, { item: item, getGridColumnHeightInPx: getHeightInPx, getGridColumnWidth: getGridColumnWidth, getLayoutDimensions: getLayoutDimensions, rowIndex: rowIndex })) : null] }));
154
143
  }
155
144
  function getFilledSize(itemSize, sizeInfo) {
156
145
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardLayoutSection.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAEH,KAAK,6BAA6B,EACrC,MAAM,iEAAiE,CAAC;AAEzE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAU1E,OAAO,EACH,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,qCAAqC,EAC1C,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACtC,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,4BAA4B,CAAC,OAAO;IACjD,OAAO,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC7D,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,qBAAqB,CAAC,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;IACvE,aAAa,CAAC,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACrD,cAAc,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,mBAAmB,EAAE,MAAM,OAAO,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,gCAAgC,CAAC;IACxD,gBAAgB,EAAE,eAAe,GAAG,SAAS,CAAC;CACjD;AAaD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,EAC5C,OAAO,EACP,eAAwC,EACxC,qBAA6C,EAC7C,aAAoC,EACpC,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EACnB,EAAE,4BAA4B,CAAC,OAAO,CAAC,GAAG,YAAY,CAgGtD"}
1
+ {"version":3,"file":"DashboardLayoutSection.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAEH,KAAK,6BAA6B,EACrC,MAAM,iEAAiE,CAAC;AAEzE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS1E,OAAO,EACH,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,qCAAqC,EAC1C,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACtC,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,4BAA4B,CAAC,OAAO;IACjD,OAAO,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC7D,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,qBAAqB,CAAC,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;IACvE,aAAa,CAAC,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACrD,cAAc,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,mBAAmB,EAAE,MAAM,OAAO,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,gCAAgC,CAAC;IACxD,gBAAgB,EAAE,eAAe,GAAG,SAAS,CAAC;CACjD;AAaD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,EAC5C,OAAO,EACP,eAAwC,EACxC,qBAA6C,EAC7C,aAAoC,EACpC,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EACnB,EAAE,4BAA4B,CAAC,OAAO,CAAC,GAAG,YAAY,CA+FtD"}
@@ -5,7 +5,6 @@ import { getItemIndex, serializeLayoutItemPath } from "../../../_staging/layout/
5
5
  import { useScreenSize } from "../../dashboard/components/DashboardScreenSizeContext.js";
6
6
  import { useSlideSizeStyle } from "../../dashboardContexts/useSlideData.js";
7
7
  import { useSectionExportData } from "../../export/useExportData.js";
8
- import { DashboardLayoutSectionOverlayController } from "../DashboardItemOverlay/DashboardItemOverlayController.js";
9
8
  import { DashboardLayoutGridRow } from "./DashboardLayoutGridRow.js";
10
9
  import { DashboardLayoutGridRowEdit } from "./DashboardLayoutGridRowEdit.js";
11
10
  import { DashboardLayoutSectionHeaderRenderer } from "./DashboardLayoutSectionHeaderRenderer.js";
@@ -64,6 +63,6 @@ export function DashboardLayoutSection({ section, sectionRenderer = defaultSecti
64
63
  parentLayoutItemSize,
65
64
  parentLayoutPath,
66
65
  exportData,
67
- }), items, renderMode === "edit" ? _jsx(DashboardLayoutSectionOverlayController, { section: section }) : null] })),
66
+ }), items] })),
68
67
  });
69
68
  }
@@ -2223,18 +2223,6 @@ export declare const en_US: {
2223
2223
  text: string;
2224
2224
  crowdinContext: string;
2225
2225
  };
2226
- "layout.widget.addedByPlugin": {
2227
- text: string;
2228
- crowdinContext: string;
2229
- };
2230
- "layout.widget.modifiedByPlugin": {
2231
- text: string;
2232
- crowdinContext: string;
2233
- };
2234
- "layout.widget.hideOverlay": {
2235
- text: string;
2236
- crowdinContext: string;
2237
- };
2238
2226
  "dropzone.new.row.desc": {
2239
2227
  text: string;
2240
2228
  crowdinContext: string;
@@ -1 +1 @@
1
- {"version":3,"file":"en-US.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/en-US.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAq6GjB,CAAC"}
1
+ {"version":3,"file":"en-US.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/en-US.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAy5GjB,CAAC"}
@@ -2225,18 +2225,6 @@ export const en_US = {
2225
2225
  "text": "Widget is at the maximal height",
2226
2226
  "crowdinContext": "Warning shown when widget cannot be resized taller"
2227
2227
  },
2228
- "layout.widget.addedByPlugin": {
2229
- "text": "Added by plugin",
2230
- "crowdinContext": "Indicator that widget was added by a plugin extension"
2231
- },
2232
- "layout.widget.modifiedByPlugin": {
2233
- "text": "Modified by plugin",
2234
- "crowdinContext": "Indicator that widget was modified by a plugin extension"
2235
- },
2236
- "layout.widget.hideOverlay": {
2237
- "text": "Hide overlay",
2238
- "crowdinContext": "Button to hide informational overlay on widget"
2239
- },
2240
2228
  "dropzone.new.row.desc": {
2241
2229
  "text": "Drop to create a{nbsp}<b>new section</b>",
2242
2230
  "crowdinContext": "Instruction shown when dragging a widget to create a new dashboard section"
@@ -11,9 +11,10 @@ import { useDashboardDispatch, useDashboardSelector } from "../../../model/react
11
11
  import { dispatchAndWaitFor } from "../../../model/store/_infra/dispatchAndWaitFor.js";
12
12
  import { selectEnableCustomizableCsvDelimiter, selectEnableDashboardTabularExport, selectSettings, } from "../../../model/store/config/configSelectors.js";
13
13
  import { selectIsExecutionResultExportableToCsvByRef, selectIsExecutionResultExportableToPdfByRef, selectIsExecutionResultExportableToXlsxByRef, } from "../../../model/store/executionResults/executionResultsSelectors.js";
14
+ import { selectCanExportTabular } from "../../../model/store/permissions/permissionsSelectors.js";
14
15
  import { selectShowWidgetAsTable } from "../../../model/store/showWidgetAsTable/showWidgetAsTableSelectors.js";
15
16
  import { selectSlideShowExportVisible } from "../../../model/store/topBar/topBarSelectors.js";
16
- import { selectIsExportableToCSV, selectIsExportableToPdfTabular, selectIsExportableToPngImage, selectIsExportableToXLSX, } from "../../../model/store/widgetExports/widgetExportsSelectors.js";
17
+ import { selectIsExportableToCSV, selectIsExportableToPngImage, selectIsExportableToXLSX, } from "../../../model/store/widgetExports/widgetExportsSelectors.js";
17
18
  import { getDefaultPdfPageSize } from "../../automations/scheduledEmail/utils/pdfPageSize.js";
18
19
  import { useExportCsvDialogContext } from "../../dashboardContexts/ExportCsvDialogContext.js";
19
20
  import { useExportTabularPdfDialogContext } from "../../dashboardContexts/ExportTabularPdfDialogContext.js";
@@ -272,7 +273,7 @@ export const useInsightExport = (config) => {
272
273
  const widgetsAsTable = useDashboardSelector(selectShowWidgetAsTable);
273
274
  const isWidgetShownAsTable = widgetsAsTable.some((ref) => widgetRef && ref && areObjRefsEqual(ref, widgetRef));
274
275
  const isAccessibilityModeEnabled = settings.enableAccessibilityMode === true;
275
- const isExportPdfTabularVisible = useDashboardSelector(selectIsExportableToPdfTabular) &&
276
+ const isExportPdfTabularVisible = useDashboardSelector(selectCanExportTabular) &&
276
277
  !!insight &&
277
278
  (insightVisualizationType(insight) === VisualizationTypes.TABLE || isWidgetShownAsTable) &&
278
279
  !isAccessibilityModeEnabled;
@@ -1 +1 @@
1
- {"version":3,"file":"DrillDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,OAAO,CAAC;AAK9D,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAMH,KAAK,gBAAgB,EAMxB,MAAM,sBAAsB,CAAC;AAY9B,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC3C,gBAAgB,EAChB,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,qBAAqB,GAAG,iBAAiB,CAChG;IACG,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IAEvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,EAAE,SAAS,CAAC;IAEpB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B;AAcD,wBAAgB,WAAW,CAAC,EACxB,OAAO,EACP,MAAM,EAEN,YAAY,EACZ,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EAER,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,mBAAwB,EACxB,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,YAAY,EACf,EAAE,iBAAiB,2CAyHnB"}
1
+ {"version":3,"file":"DrillDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,OAAO,CAAC;AAK9D,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAMH,KAAK,gBAAgB,EAMxB,MAAM,sBAAsB,CAAC;AAS9B,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC3C,gBAAgB,EAChB,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,qBAAqB,GAAG,iBAAiB,CAChG;IACG,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IAEvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,EAAE,SAAS,CAAC;IAEpB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B;AAcD,wBAAgB,WAAW,CAAC,EACxB,OAAO,EACP,MAAM,EAEN,YAAY,EACZ,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EAER,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,mBAAwB,EACxB,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,YAAY,EACf,EAAE,iBAAiB,2CAuHnB"}