@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.
- package/NOTICE +15 -15
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/_staging/dateFilterConfig/validation.d.ts.map +1 -1
- package/esm/_staging/dateFilterConfig/validation.js +2 -15
- package/esm/index.d.ts +2 -2
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -2
- package/esm/model/store/config/configSelectors.d.ts +0 -37
- package/esm/model/store/config/configSelectors.d.ts.map +1 -1
- package/esm/model/store/config/configSelectors.js +1 -50
- package/esm/model/store/executionResults/executionResultsSelectors.d.ts.map +1 -1
- package/esm/model/store/executionResults/executionResultsSelectors.js +1 -2
- package/esm/model/store/widgetExports/widgetExportsSelectors.d.ts +0 -4
- package/esm/model/store/widgetExports/widgetExportsSelectors.d.ts.map +1 -1
- package/esm/model/store/widgetExports/widgetExportsSelectors.js +2 -11
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormValidation.d.ts +22 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormValidation.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormValidation.js +47 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +16 -36
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Attachments/SlidesTemplateSettings.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Attachments/SlidesTemplateSettings.js +9 -4
- package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.d.ts.map +1 -1
- package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.js +4 -4
- package/esm/presentation/dialogs/ExportTemplateSelectionDialog/ExportTemplateSelectionDialog.d.ts.map +1 -1
- package/esm/presentation/dialogs/ExportTemplateSelectionDialog/ExportTemplateSelectionDialog.js +9 -4
- package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.d.ts.map +1 -1
- package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.js +4 -5
- package/esm/presentation/flexibleLayout/DashboardLayoutWidget.d.ts.map +1 -1
- package/esm/presentation/flexibleLayout/DashboardLayoutWidget.js +1 -12
- package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.d.ts.map +1 -1
- package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.js +1 -2
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +0 -12
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +0 -12
- package/esm/presentation/widget/common/useInsightExport.js +3 -2
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialog.d.ts.map +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialog.js +2 -4
- package/esm/sdk-ui-dashboard.d.ts +0 -41
- package/package.json +21 -21
- package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlay.d.ts +0 -10
- package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlay.d.ts.map +0 -1
- package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlay.js +0 -51
- package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlayController.d.ts +0 -7
- package/esm/presentation/flexibleLayout/DashboardItemOverlay/DashboardItemOverlayController.d.ts.map +0 -1
- 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":"
|
|
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 =
|
|
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"}
|
package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormValidation.js
ADDED
|
@@ -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
|
|
70
|
+
isSubmitDisabled: boolean;
|
|
71
71
|
isParentValid: boolean;
|
|
72
72
|
thresholdErrorMessage: string | undefined;
|
|
73
73
|
allowHourlyRecurrence: boolean;
|
package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEditAlert.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.ts"],"names":[],"mappings":"
|
|
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
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
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,
|
|
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]
|
|
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) =>
|
|
38
|
-
|
|
39
|
-
|
|
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;
|
|
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,
|
|
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] }),
|
|
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
|
-
] })
|
|
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,
|
|
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"}
|
package/esm/presentation/dialogs/ExportTemplateSelectionDialog/ExportTemplateSelectionDialog.js
CHANGED
|
@@ -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]
|
|
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) =>
|
|
18
|
-
|
|
19
|
-
|
|
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;
|
|
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,
|
|
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
|
|
36
|
-
//
|
|
37
|
-
const enableEmptyDateValues =
|
|
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":"
|
|
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
|
|
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;
|
|
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"}
|
package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.js
CHANGED
|
@@ -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
|
|
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
|
|
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,
|
|
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(
|
|
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;
|
|
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"}
|