@gooddata/sdk-ui-dashboard 11.42.0-alpha.0 → 11.42.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/index.d.ts +3 -3
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -3
- package/esm/model/store/config/configSelectors.d.ts +6 -0
- package/esm/model/store/config/configSelectors.d.ts.map +1 -1
- package/esm/model/store/config/configSelectors.js +8 -0
- package/esm/model/store/executionResults/constants.d.ts +7 -0
- package/esm/model/store/executionResults/constants.d.ts.map +1 -0
- package/esm/model/store/executionResults/constants.js +8 -0
- package/esm/model/store/executionResults/executionResultsSelectors.d.ts +12 -0
- package/esm/model/store/executionResults/executionResultsSelectors.d.ts.map +1 -1
- package/esm/model/store/executionResults/executionResultsSelectors.js +16 -1
- package/esm/model/store/tabs/parameters/parametersHelpers.d.ts +6 -0
- package/esm/model/store/tabs/parameters/parametersHelpers.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersHelpers.js +11 -0
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +7 -0
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersSelectors.js +18 -7
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +2 -2
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts +5 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +20 -3
- package/esm/presentation/automations/alerting/DefaultAlertingManagementDialog/DefaultAlertingManagementDialogContentEnhanced.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingManagementDialog/DefaultAlertingManagementDialogContentEnhanced.js +5 -2
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.js +13 -2
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContentEnhanced.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContentEnhanced.js +5 -2
- package/esm/presentation/automations/shared/automationFilters/automationParameters.d.ts +37 -0
- package/esm/presentation/automations/shared/automationFilters/automationParameters.d.ts.map +1 -0
- package/esm/presentation/automations/shared/automationFilters/automationParameters.js +90 -0
- package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts +23 -2
- package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.js +27 -15
- package/esm/presentation/automations/shared/automationFilters/components/AutomationParameter.d.ts +20 -0
- package/esm/presentation/automations/shared/automationFilters/components/AutomationParameter.d.ts.map +1 -0
- package/esm/presentation/automations/shared/automationFilters/components/AutomationParameter.js +32 -0
- package/esm/presentation/automations/shared/automationFilters/useAutomationAlertParameters.d.ts +32 -0
- package/esm/presentation/automations/shared/automationFilters/useAutomationAlertParameters.d.ts.map +1 -0
- package/esm/presentation/automations/shared/automationFilters/useAutomationAlertParameters.js +57 -0
- package/esm/presentation/dashboard/components/DashboardLoading.d.ts.map +1 -1
- package/esm/presentation/dashboard/components/DashboardLoading.js +12 -2
- package/esm/presentation/export/types.d.ts +1 -1
- package/esm/presentation/export/types.d.ts.map +1 -1
- package/esm/presentation/export/useExportData.d.ts +1 -1
- package/esm/presentation/export/useExportData.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.d.ts +20 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.js +41 -6
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +12 -44
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +12 -44
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-419.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +3 -11
- package/esm/presentation/shareDialog/DefaultShareDialog.d.ts.map +1 -1
- package/esm/presentation/shareDialog/DefaultShareDialog.js +6 -2
- package/esm/presentation/topBar/menuButton/DefaultMenuButton.d.ts.map +1 -1
- package/esm/presentation/topBar/menuButton/DefaultMenuButton.js +39 -16
- package/esm/presentation/topBar/menuButton/types.d.ts +6 -0
- package/esm/presentation/topBar/menuButton/types.d.ts.map +1 -1
- package/esm/presentation/topBar/menuButton/types.js +1 -0
- package/esm/presentation/topBar/menuButton/useDefaultMenuItems.d.ts.map +1 -1
- package/esm/presentation/topBar/menuButton/useDefaultMenuItems.js +7 -0
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogExportDropdown.js +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.d.ts.map +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.js +14 -10
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/useDrillDialogExportItems.d.ts +0 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/useDrillDialogExportItems.d.ts.map +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/useDrillDialogExportItems.js +23 -8
- package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/DashboardInsightMenuItemButton.js +1 -1
- package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/getDefaultInsightMenuItems.d.ts.map +1 -1
- package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/getDefaultInsightMenuItems.js +56 -27
- package/esm/presentation/widget/widget/warningPartialResult/InsightWidgetWarningPartialResult.d.ts.map +1 -1
- package/esm/presentation/widget/widget/warningPartialResult/InsightWidgetWarningPartialResult.js +4 -89
- package/esm/sdk-ui-dashboard.d.ts +49 -3
- package/package.json +20 -20
- package/styles/css/dashboard.css +7 -2
- package/styles/css/dashboard.css.map +1 -1
- package/styles/css/main.css +32 -6
- package/styles/css/main.css.map +1 -1
- package/styles/css/warningPartialResult.css +1 -0
- package/styles/css/warningPartialResult.css.map +1 -1
- package/styles/scss/dashboard.scss +14 -2
- package/styles/scss/warningPartialResult.scss +1 -0
|
@@ -43,6 +43,8 @@ export const zh_HK = {
|
|
|
43
43
|
"options.menu.export.dialog.widget.EXCEL": "導出格式化數據(.xlsx)",
|
|
44
44
|
"options.menu.export.dialog.includeExportInfo": "包含包含導出信息嘅工作表",
|
|
45
45
|
"options.menu.export.EXCEL": "數據(.xlsx)",
|
|
46
|
+
"options.menu.export.partialResults.exportDisabled": "無法匯出,因為可視化超出結果限制。",
|
|
47
|
+
"options.menu.export.partialResults.warning.dashboard": "部分可視化超出結果限制,因此不會包含在 XLSX 匯出中。",
|
|
46
48
|
"options.menu.export.presentation.PPTX": "幻燈片(.pptx)",
|
|
47
49
|
"options.menu.export.presentation.PDF": "幻燈片(.pdf)",
|
|
48
50
|
"options.menu.export.image.PNG": "快照(.png)",
|
|
@@ -206,6 +208,7 @@ export const zh_HK = {
|
|
|
206
208
|
"dialogs.automation.filters.deleteAriaLabel": "除濾網",
|
|
207
209
|
"dialogs.automation.filters.deleteTooltip": "除濾網",
|
|
208
210
|
"dialogs.automation.filters.lockedTooltip": "呢個過濾器係上鎖嘅,唔可以拆。",
|
|
211
|
+
"dialogs.automation.parameters.chip": "{title} 為 {value}",
|
|
209
212
|
"dialogs.automation.filters.useFiltersMessage.tooltip": "選中以保留呢啲過濾器以進行每次導出。 如果未選中,導出將使用儀錶板中最新嘅默認過濾器。",
|
|
210
213
|
"dialogs.automation.filters.activeFilters": "注意:呢啲過濾器將始終用于將來嘅導出。",
|
|
211
214
|
"dialogs.automation.filters.missing": "<b>警告:</b>某些篩選條件無法應用,它們在控制面板上不再可用。",
|
|
@@ -321,17 +324,6 @@ export const zh_HK = {
|
|
|
321
324
|
"partial_data_warning.hide_details": "隱藏詳情",
|
|
322
325
|
"partial_data_warning.close": "關閉部分資料警告",
|
|
323
326
|
"partial_data_warning.export_raw": "匯出完整結果為原始 (.csv)",
|
|
324
|
-
"partial_data_warning.description": "結果超出結果大小限制。",
|
|
325
|
-
"partial_data_warning.rows.description": "結果超出 {rowLimit} 列限制,共超出 {rowOverflow} 列。",
|
|
326
|
-
"partial_data_warning.rows.description.unknown_total": "結果超出 {rowLimit} 列限制。",
|
|
327
|
-
"partial_data_warning.columns.description": "結果超出 {columnLimit} 欄限制,共超出 {columnOverflow} 欄。",
|
|
328
|
-
"partial_data_warning.columns.description.unknown_total": "結果超出 {columnLimit} 欄限制。",
|
|
329
|
-
"partial_data_warning.rows_columns.description": "結果同時超出 {columnLimit} 欄及 {rowLimit} 列限制,共超出 {columnOverflow} 欄及 {rowOverflow} 列。",
|
|
330
|
-
"partial_data_warning.rows_columns.description.unknown_column_total": "結果同時超出 {columnLimit} 欄及 {rowLimit} 列限制。列數超出 {rowOverflow} 列。",
|
|
331
|
-
"partial_data_warning.rows_columns.description.unknown_row_total": "結果同時超出 {columnLimit} 欄及 {rowLimit} 列限制。欄數超出 {columnOverflow} 欄。",
|
|
332
|
-
"partial_data_warning.rows_columns.description.unknown_total": "結果同時超出 {columnLimit} 欄及 {rowLimit} 列限制。",
|
|
333
|
-
"partial_data_warning.cells.description": "結果超出 {cellLimit} 資料點限制,共超出 {cellOverflow} 個資料點。",
|
|
334
|
-
"partial_data_warning.cells.description.unknown_total": "結果超出 {cellLimit} 資料點限制。",
|
|
335
327
|
"export_unsupported.disabled": "不支持匯出",
|
|
336
328
|
"widget.options.description": "描述",
|
|
337
329
|
"widget.options.menu.exportToCSV": "匯出到CSV",
|
|
@@ -41,6 +41,8 @@ export declare const zh_Hans: {
|
|
|
41
41
|
"options.menu.export.dialog.widget.EXCEL": string;
|
|
42
42
|
"options.menu.export.dialog.includeExportInfo": string;
|
|
43
43
|
"options.menu.export.EXCEL": string;
|
|
44
|
+
"options.menu.export.partialResults.exportDisabled": string;
|
|
45
|
+
"options.menu.export.partialResults.warning.dashboard": string;
|
|
44
46
|
"options.menu.export.presentation.PPTX": string;
|
|
45
47
|
"options.menu.export.presentation.PDF": string;
|
|
46
48
|
"options.menu.export.image.PNG": string;
|
|
@@ -204,6 +206,7 @@ export declare const zh_Hans: {
|
|
|
204
206
|
"dialogs.automation.filters.deleteAriaLabel": string;
|
|
205
207
|
"dialogs.automation.filters.deleteTooltip": string;
|
|
206
208
|
"dialogs.automation.filters.lockedTooltip": string;
|
|
209
|
+
"dialogs.automation.parameters.chip": string;
|
|
207
210
|
"dialogs.automation.filters.useFiltersMessage.tooltip": string;
|
|
208
211
|
"dialogs.automation.filters.activeFilters": string;
|
|
209
212
|
"dialogs.automation.filters.missing": string;
|
|
@@ -319,17 +322,6 @@ export declare const zh_Hans: {
|
|
|
319
322
|
"partial_data_warning.hide_details": string;
|
|
320
323
|
"partial_data_warning.close": string;
|
|
321
324
|
"partial_data_warning.export_raw": string;
|
|
322
|
-
"partial_data_warning.description": string;
|
|
323
|
-
"partial_data_warning.rows.description": string;
|
|
324
|
-
"partial_data_warning.rows.description.unknown_total": string;
|
|
325
|
-
"partial_data_warning.columns.description": string;
|
|
326
|
-
"partial_data_warning.columns.description.unknown_total": string;
|
|
327
|
-
"partial_data_warning.rows_columns.description": string;
|
|
328
|
-
"partial_data_warning.rows_columns.description.unknown_column_total": string;
|
|
329
|
-
"partial_data_warning.rows_columns.description.unknown_row_total": string;
|
|
330
|
-
"partial_data_warning.rows_columns.description.unknown_total": string;
|
|
331
|
-
"partial_data_warning.cells.description": string;
|
|
332
|
-
"partial_data_warning.cells.description.unknown_total": string;
|
|
333
325
|
"export_unsupported.disabled": string;
|
|
334
326
|
"widget.options.description": string;
|
|
335
327
|
"widget.options.menu.exportToCSV": string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zh-Hans.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/zh-Hans.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"zh-Hans.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/zh-Hans.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAm2BnB,CAAC"}
|
|
@@ -43,6 +43,8 @@ export const zh_Hans = {
|
|
|
43
43
|
"options.menu.export.dialog.widget.EXCEL": "导出格式化数据(.xlsx)",
|
|
44
44
|
"options.menu.export.dialog.includeExportInfo": "包含导出信息表",
|
|
45
45
|
"options.menu.export.EXCEL": "数据(.xlsx)",
|
|
46
|
+
"options.menu.export.partialResults.exportDisabled": "无法导出,因为可视化超出了结果限制。",
|
|
47
|
+
"options.menu.export.partialResults.warning.dashboard": "某些可视化超出结果限制,因此不会包含在 XLSX 导出中。",
|
|
46
48
|
"options.menu.export.presentation.PPTX": "幻灯片 (.pptx)",
|
|
47
49
|
"options.menu.export.presentation.PDF": "幻灯片(.pdf)",
|
|
48
50
|
"options.menu.export.image.PNG": "快照 (.png)",
|
|
@@ -206,6 +208,7 @@ export const zh_Hans = {
|
|
|
206
208
|
"dialogs.automation.filters.deleteAriaLabel": "移除过滤器",
|
|
207
209
|
"dialogs.automation.filters.deleteTooltip": "移除过滤器",
|
|
208
210
|
"dialogs.automation.filters.lockedTooltip": "此过滤器已锁定,无法移除。",
|
|
211
|
+
"dialogs.automation.parameters.chip": "{title} 为 {value}",
|
|
209
212
|
"dialogs.automation.filters.useFiltersMessage.tooltip": "勾选此项可在每次导出时保留这些筛选条件。如果未勾选,导出将使用仪表板中最新的默认筛选条件。",
|
|
210
213
|
"dialogs.automation.filters.activeFilters": "注意:这些过滤器将始终用于未来的导出。",
|
|
211
214
|
"dialogs.automation.filters.missing": "<b>警告:</b> 某些过滤器无法应用 — 它们在仪表板上不再可用。",
|
|
@@ -321,17 +324,6 @@ export const zh_Hans = {
|
|
|
321
324
|
"partial_data_warning.hide_details": "隐藏详情",
|
|
322
325
|
"partial_data_warning.close": "关闭部分数据警告",
|
|
323
326
|
"partial_data_warning.export_raw": "将完整结果导出为 Raw (.csv)",
|
|
324
|
-
"partial_data_warning.description": "结果超出了结果大小限制。",
|
|
325
|
-
"partial_data_warning.rows.description": "结果超出了 {rowLimit} 行限制,超出 {rowOverflow} 行。",
|
|
326
|
-
"partial_data_warning.rows.description.unknown_total": "结果超出了 {rowLimit} 行限制。",
|
|
327
|
-
"partial_data_warning.columns.description": "结果超出了 {columnLimit} 列限制,超出 {columnOverflow} 列。",
|
|
328
|
-
"partial_data_warning.columns.description.unknown_total": "结果超出了 {columnLimit} 列限制。",
|
|
329
|
-
"partial_data_warning.rows_columns.description": "结果超出了 {columnLimit} 列和 {rowLimit} 行限制,超出 {columnOverflow} 列和 {rowOverflow} 行。",
|
|
330
|
-
"partial_data_warning.rows_columns.description.unknown_column_total": "结果超出了 {columnLimit} 列和 {rowLimit} 行限制。超出行限制 {rowOverflow} 行。",
|
|
331
|
-
"partial_data_warning.rows_columns.description.unknown_row_total": "结果超出了 {columnLimit} 列和 {rowLimit} 行限制。超出列限制 {columnOverflow} 列。",
|
|
332
|
-
"partial_data_warning.rows_columns.description.unknown_total": "结果超出了 {columnLimit} 列和 {rowLimit} 行限制。",
|
|
333
|
-
"partial_data_warning.cells.description": "结果超出了 {cellLimit} 数据点限制,超出 {cellOverflow} 个数据点。",
|
|
334
|
-
"partial_data_warning.cells.description.unknown_total": "结果超出了 {cellLimit} 数据点限制。",
|
|
335
327
|
"export_unsupported.disabled": "不支持导出",
|
|
336
328
|
"widget.options.description": "描述",
|
|
337
329
|
"widget.options.menu.exportToCSV": "导出至 CSV",
|
|
@@ -41,6 +41,8 @@ export declare const zh_Hant: {
|
|
|
41
41
|
"options.menu.export.dialog.widget.EXCEL": string;
|
|
42
42
|
"options.menu.export.dialog.includeExportInfo": string;
|
|
43
43
|
"options.menu.export.EXCEL": string;
|
|
44
|
+
"options.menu.export.partialResults.exportDisabled": string;
|
|
45
|
+
"options.menu.export.partialResults.warning.dashboard": string;
|
|
44
46
|
"options.menu.export.presentation.PPTX": string;
|
|
45
47
|
"options.menu.export.presentation.PDF": string;
|
|
46
48
|
"options.menu.export.image.PNG": string;
|
|
@@ -204,6 +206,7 @@ export declare const zh_Hant: {
|
|
|
204
206
|
"dialogs.automation.filters.deleteAriaLabel": string;
|
|
205
207
|
"dialogs.automation.filters.deleteTooltip": string;
|
|
206
208
|
"dialogs.automation.filters.lockedTooltip": string;
|
|
209
|
+
"dialogs.automation.parameters.chip": string;
|
|
207
210
|
"dialogs.automation.filters.useFiltersMessage.tooltip": string;
|
|
208
211
|
"dialogs.automation.filters.activeFilters": string;
|
|
209
212
|
"dialogs.automation.filters.missing": string;
|
|
@@ -319,17 +322,6 @@ export declare const zh_Hant: {
|
|
|
319
322
|
"partial_data_warning.hide_details": string;
|
|
320
323
|
"partial_data_warning.close": string;
|
|
321
324
|
"partial_data_warning.export_raw": string;
|
|
322
|
-
"partial_data_warning.description": string;
|
|
323
|
-
"partial_data_warning.rows.description": string;
|
|
324
|
-
"partial_data_warning.rows.description.unknown_total": string;
|
|
325
|
-
"partial_data_warning.columns.description": string;
|
|
326
|
-
"partial_data_warning.columns.description.unknown_total": string;
|
|
327
|
-
"partial_data_warning.rows_columns.description": string;
|
|
328
|
-
"partial_data_warning.rows_columns.description.unknown_column_total": string;
|
|
329
|
-
"partial_data_warning.rows_columns.description.unknown_row_total": string;
|
|
330
|
-
"partial_data_warning.rows_columns.description.unknown_total": string;
|
|
331
|
-
"partial_data_warning.cells.description": string;
|
|
332
|
-
"partial_data_warning.cells.description.unknown_total": string;
|
|
333
325
|
"export_unsupported.disabled": string;
|
|
334
326
|
"widget.options.description": string;
|
|
335
327
|
"widget.options.menu.exportToCSV": string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zh-Hant.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/zh-Hant.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"zh-Hant.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/zh-Hant.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAm2BnB,CAAC"}
|
|
@@ -43,6 +43,8 @@ export const zh_Hant = {
|
|
|
43
43
|
"options.menu.export.dialog.widget.EXCEL": "匯出格式化資料(.xlsx)",
|
|
44
44
|
"options.menu.export.dialog.includeExportInfo": "包含匯出資訊表",
|
|
45
45
|
"options.menu.export.EXCEL": "資料(.xlsx)",
|
|
46
|
+
"options.menu.export.partialResults.exportDisabled": "無法匯出,因為視覺化超出結果限制。",
|
|
47
|
+
"options.menu.export.partialResults.warning.dashboard": "部分視覺化超出結果限制,將不會包含在 XLSX 匯出中。",
|
|
46
48
|
"options.menu.export.presentation.PPTX": "幻燈片 (.pptx)",
|
|
47
49
|
"options.menu.export.presentation.PDF": "幻燈片(.pdf)",
|
|
48
50
|
"options.menu.export.image.PNG": "快照 (.png)",
|
|
@@ -206,6 +208,7 @@ export const zh_Hant = {
|
|
|
206
208
|
"dialogs.automation.filters.deleteAriaLabel": "移除過濾器",
|
|
207
209
|
"dialogs.automation.filters.deleteTooltip": "移除過濾器",
|
|
208
210
|
"dialogs.automation.filters.lockedTooltip": "此過濾器已鎖定,無法移除。",
|
|
211
|
+
"dialogs.automation.parameters.chip": "{title} 為 {value}",
|
|
209
212
|
"dialogs.automation.filters.useFiltersMessage.tooltip": "勾選此項目可在每次匯出時保留這些篩選條件。如果未勾選,匯出將使用儀表板中最新的預設篩選條件。",
|
|
210
213
|
"dialogs.automation.filters.activeFilters": "注意:這些過濾器將始終用於未來的匯出。",
|
|
211
214
|
"dialogs.automation.filters.missing": "<b>警告:</b> 某些過濾器無法套用 — 它們在儀表板上不再可用。",
|
|
@@ -321,17 +324,6 @@ export const zh_Hant = {
|
|
|
321
324
|
"partial_data_warning.hide_details": "隱藏詳細資料",
|
|
322
325
|
"partial_data_warning.close": "關閉部分資料警告",
|
|
323
326
|
"partial_data_warning.export_raw": "將完整結果匯出為原始檔 (.csv)",
|
|
324
|
-
"partial_data_warning.description": "結果超出結果大小限制。",
|
|
325
|
-
"partial_data_warning.rows.description": "結果超出 {rowLimit} 列限制,共超出 {rowOverflow} 列。",
|
|
326
|
-
"partial_data_warning.rows.description.unknown_total": "結果超出 {rowLimit} 列限制。",
|
|
327
|
-
"partial_data_warning.columns.description": "結果超出 {columnLimit} 欄限制,共超出 {columnOverflow} 欄。",
|
|
328
|
-
"partial_data_warning.columns.description.unknown_total": "結果超出 {columnLimit} 欄限制。",
|
|
329
|
-
"partial_data_warning.rows_columns.description": "結果同時超出 {columnLimit} 欄限制與 {rowLimit} 列限制,共超出 {columnOverflow} 欄與 {rowOverflow} 列。",
|
|
330
|
-
"partial_data_warning.rows_columns.description.unknown_column_total": "結果同時超出 {columnLimit} 欄限制與 {rowLimit} 列限制。列數超出限制 {rowOverflow} 列。",
|
|
331
|
-
"partial_data_warning.rows_columns.description.unknown_row_total": "結果同時超出 {columnLimit} 欄限制與 {rowLimit} 列限制。欄數超出限制 {columnOverflow} 欄。",
|
|
332
|
-
"partial_data_warning.rows_columns.description.unknown_total": "結果同時超出 {columnLimit} 欄限制與 {rowLimit} 列限制。",
|
|
333
|
-
"partial_data_warning.cells.description": "結果超出 {cellLimit} 資料點限制,共超出 {cellOverflow} 個資料點。",
|
|
334
|
-
"partial_data_warning.cells.description.unknown_total": "結果超出 {cellLimit} 資料點限制。",
|
|
335
327
|
"export_unsupported.disabled": "不支援導出",
|
|
336
328
|
"widget.options.description": "描述",
|
|
337
329
|
"widget.options.menu.exportToCSV": "匯出為 CSV",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultShareDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/shareDialog/DefaultShareDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,OAAO,CAAC;AASnD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,SAAS,EACT,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,OAAO,EACP,QAAQ,EACR,OAAO,EACP,aAAa,EACb,eAAe,EAClB,EAAE,iBAAiB,GAAG,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"DefaultShareDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/shareDialog/DefaultShareDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,OAAO,CAAC;AASnD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,SAAS,EACT,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,OAAO,EACP,QAAQ,EACR,OAAO,EACP,aAAa,EACb,eAAe,EAClB,EAAE,iBAAiB,GAAG,YAAY,GAAG,IAAI,CAoDzC"}
|
|
@@ -4,12 +4,16 @@ import { useMemo } from "react";
|
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
5
|
import { ShareDialog } from "@gooddata/sdk-ui-kit";
|
|
6
6
|
import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
|
|
7
|
-
import { selectLocale } from "../../model/store/config/configSelectors.js";
|
|
7
|
+
import { selectLocale, selectSettings } from "../../model/store/config/configSelectors.js";
|
|
8
8
|
/**
|
|
9
9
|
* @alpha
|
|
10
10
|
*/
|
|
11
11
|
export function DefaultShareDialog({ workspace, backend, isVisible, sharedObject, currentUser, isLockingSupported, isCurrentUserWorkspaceManager, currentUserPermissions, dashboardFilters, dashboardParameters, isShareGrantHidden, applyShareGrantOnSelect, showDashboardShareLink, isGranteeShareLoading, onApply, onCancel, onError, onInteraction, onShareLinkCopy, }) {
|
|
12
12
|
const locale = useDashboardSelector(selectLocale);
|
|
13
|
+
const settings = useDashboardSelector(selectSettings);
|
|
14
|
+
const dashboardLinkBasePath = settings.enableShellApplication_dashboards
|
|
15
|
+
? `/workspace/${workspace}/dashboards/`
|
|
16
|
+
: undefined;
|
|
13
17
|
const intl = useIntl();
|
|
14
18
|
const labels = useMemo(() => ({
|
|
15
19
|
accessTypeLabel: intl.formatMessage({ id: "dashboard.shareDialog.lock.label" }),
|
|
@@ -26,5 +30,5 @@ export function DefaultShareDialog({ workspace, backend, isVisible, sharedObject
|
|
|
26
30
|
if (!isVisible) {
|
|
27
31
|
return null;
|
|
28
32
|
}
|
|
29
|
-
return (_jsx(ShareDialog, { locale: locale, backend: backend, workspace: workspace, sharedObject: sharedObject, currentUser: currentUser, onApply: onApply, onCancel: onCancel, onError: onError, isLockingSupported: isLockingSupported, labels: labels, isCurrentUserWorkspaceManager: isCurrentUserWorkspaceManager, currentUserPermissions: currentUserPermissions, dashboardFilters: dashboardFilters, dashboardParameters: dashboardParameters, isShareGrantHidden: isShareGrantHidden, applyShareGrantOnSelect: applyShareGrantOnSelect, showDashboardShareLink: showDashboardShareLink, isGranteeShareLoading: isGranteeShareLoading, onInteraction: onInteraction, onShareLinkCopy: onShareLinkCopy }));
|
|
33
|
+
return (_jsx(ShareDialog, { locale: locale, backend: backend, workspace: workspace, sharedObject: sharedObject, currentUser: currentUser, onApply: onApply, onCancel: onCancel, onError: onError, isLockingSupported: isLockingSupported, labels: labels, isCurrentUserWorkspaceManager: isCurrentUserWorkspaceManager, currentUserPermissions: currentUserPermissions, dashboardFilters: dashboardFilters, dashboardParameters: dashboardParameters, dashboardLinkBasePath: dashboardLinkBasePath, isShareGrantHidden: isShareGrantHidden, applyShareGrantOnSelect: applyShareGrantOnSelect, showDashboardShareLink: showDashboardShareLink, isGranteeShareLoading: isGranteeShareLoading, onInteraction: onInteraction, onShareLinkCopy: onShareLinkCopy }));
|
|
30
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultMenuButton.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/menuButton/DefaultMenuButton.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"DefaultMenuButton.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/menuButton/DefaultMenuButton.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGH,KAAK,YAAY,EAOpB,MAAM,OAAO,CAAC;AA0Bf,OAAO,EAIH,KAAK,gBAAgB,EACxB,MAAM,YAAY,CAAC;AAIpB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,gBAAgB,GAAG,YAAY,GAAG,IAAI,CA0OtF"}
|
|
@@ -3,7 +3,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
3
3
|
import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { useIntl } from "react-intl";
|
|
6
|
-
import { Button, ItemsWrapper, Overlay, SingleSelectListItem, UiFocusManager, UiTooltip, getFocusableElements, isActionKey, makeMenuKeyboardNavigation, useId, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
|
|
6
|
+
import { Button, ItemsWrapper, Overlay, SingleSelectListItem, UiFocusManager, UiIcon, UiTooltip, getFocusableElements, isActionKey, makeMenuKeyboardNavigation, useId, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
|
|
7
7
|
import { DEFAULT_MENU_BUTTON_ID } from "../../../_staging/accessibility/elementId.js";
|
|
8
8
|
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
9
9
|
import { selectDashboardDensity } from "../../../model/store/ui/uiSelectors.js";
|
|
@@ -159,6 +159,10 @@ export function DefaultMenuButton({ menuItems }) {
|
|
|
159
159
|
}
|
|
160
160
|
function MenuItem({ menuItem, selectedMenuItem, setMenuItemRef, setSelectedMenuItem, setParentItemId, setAutofocusSubmenu, setIsOpen, }) {
|
|
161
161
|
const tooltipId = useIdPrefixed(`menu-tooltip-${menuItem.itemId}`);
|
|
162
|
+
const warningTooltipId = useIdPrefixed(`menu-warning-${menuItem.itemId}`);
|
|
163
|
+
// Tracks whether the item-level (focus-triggered) warning tooltip is open, so the icon's hover tooltip can
|
|
164
|
+
// be suppressed while the item is focused - avoids both tooltips showing at once.
|
|
165
|
+
const [isWarningFocusTooltipOpen, setIsWarningFocusTooltipOpen] = useState(false);
|
|
162
166
|
const renderWithOptionalTooltip = (menuItem, children) => {
|
|
163
167
|
const selectorClassName = `gd-menu-item-${menuItem.itemId}`;
|
|
164
168
|
const hasTooltip = !!menuItem.tooltip;
|
|
@@ -199,19 +203,38 @@ function MenuItem({ menuItem, selectedMenuItem, setMenuItemRef, setSelectedMenuI
|
|
|
199
203
|
ariaDescribedBy: menuItem.disabled ? tooltipId : undefined,
|
|
200
204
|
} }, menuItem.itemId)));
|
|
201
205
|
}
|
|
202
|
-
return renderWithOptionalTooltip(menuItem, ({ selectorClassName, tooltipId }) =>
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
: () =>
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
206
|
+
return renderWithOptionalTooltip(menuItem, ({ selectorClassName, tooltipId }) => {
|
|
207
|
+
const hasWarning = !!menuItem.warning;
|
|
208
|
+
const item = (_jsx(SingleSelectListItem, { ref: setMenuItemRef(menuItem.itemId), className: cx("gd-menu-item", menuItem.className, `s-${menuItem.itemId}`, {
|
|
209
|
+
[selectorClassName]: menuItem.tooltip,
|
|
210
|
+
"is-disabled": menuItem.disabled,
|
|
211
|
+
}), title: menuItem.itemName, icon: menuItem.icon, info: menuItem.warning ?? undefined, infoRenderer: hasWarning ? (info) => renderMenuItemWarning(info, isWarningFocusTooltipOpen) : undefined, onClick: menuItem.disabled
|
|
212
|
+
? undefined
|
|
213
|
+
: () => {
|
|
214
|
+
menuItem.onClick?.();
|
|
215
|
+
setIsOpen(false);
|
|
216
|
+
setSelectedMenuItem(null);
|
|
217
|
+
}, elementType: "button", accessibilityConfig: {
|
|
218
|
+
role: "menuitem",
|
|
219
|
+
ariaDisabled: menuItem.disabled,
|
|
220
|
+
ariaHasPopup: menuItem.opensDialog ? "dialog" : undefined,
|
|
221
|
+
// The warning icon is not focusable and is hidden from AT, so describe the whole item by
|
|
222
|
+
// the warning text for screen-reader users (disabled tooltip takes precedence when present).
|
|
223
|
+
ariaDescribedBy: menuItem.disabled
|
|
224
|
+
? tooltipId
|
|
225
|
+
: hasWarning
|
|
226
|
+
? warningTooltipId
|
|
227
|
+
: undefined,
|
|
228
|
+
} }, menuItem.itemId));
|
|
229
|
+
// Keyboard accessibility: the warning icon has its own hover-only tooltip for mouse users, but it is
|
|
230
|
+
// not focusable. Add a second, focus-triggered tooltip anchored to the whole (focusable) menu item so
|
|
231
|
+
// keyboard users see the warning too. Skip it when a disabled tooltip already takes over on focus.
|
|
232
|
+
if (!hasWarning || menuItem.tooltip) {
|
|
233
|
+
return item;
|
|
234
|
+
}
|
|
235
|
+
return (_jsx(UiTooltip, { id: warningTooltipId, triggerBy: ["focus"], arrowPlacement: "left", optimalPlacement: true, content: menuItem.warning, anchor: item, onOpen: () => setIsWarningFocusTooltipOpen(true), onClose: () => setIsWarningFocusTooltipOpen(false) }));
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
function renderMenuItemWarning(info, suppressHover) {
|
|
239
|
+
return (_jsx("span", { className: "gd-list-icon gd-list-icon-right", children: _jsx(UiTooltip, { triggerBy: ["hover"], disabled: suppressHover, arrowPlacement: "left", optimalPlacement: true, content: info, anchor: _jsx(UiIcon, { type: "warning", size: 16, color: "warning", accessibilityConfig: { ariaHidden: true } }) }) }));
|
|
217
240
|
}
|
|
@@ -18,6 +18,12 @@ export interface IMenuButtonItemButton extends IMenuItemCommonProps {
|
|
|
18
18
|
* If specified, the value is shown on hover of the item as a tooltip.
|
|
19
19
|
*/
|
|
20
20
|
tooltip?: string | ReactNode;
|
|
21
|
+
/**
|
|
22
|
+
* If specified, a warning indicator is rendered on the trailing side of the item, shown regardless of
|
|
23
|
+
* the item's disabled state. The value is the content shown on hover of the warning indicator. Used e.g.
|
|
24
|
+
* to flag that an export will contain partial results because an execution reached a result limit.
|
|
25
|
+
*/
|
|
26
|
+
warning?: ReactNode;
|
|
21
27
|
disabled?: boolean;
|
|
22
28
|
icon?: string | ReactNode;
|
|
23
29
|
opensDialog?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/menuButton/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/menuButton/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IAC/D,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE;QACH,qBAAqB,GAAG,wBAAwB,GAAG,qBAAqB;QACxE,GAAG,CAAC,qBAAqB,GAAG,wBAAwB,GAAG,qBAAqB,CAAC,EAAE;KAClF,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,oBAAoB;IAClE,IAAI,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IAC/D,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACrB,qBAAqB,GACrB,wBAAwB,GACxB,qBAAqB,GACrB,mBAAmB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;OAEG;IACH,SAAS,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAE1C,iBAAiB,EAAE,yBAAyB,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAE3C;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;CAClE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDefaultMenuItems.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/menuButton/useDefaultMenuItems.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDefaultMenuItems.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/menuButton/useDefaultMenuItems.tsx"],"names":[],"mappings":"AAyCA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AA8BlD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAicvD"}
|
|
@@ -8,6 +8,7 @@ import { useDashboardDispatch, useDashboardSelector } from "../../../model/react
|
|
|
8
8
|
import { useDashboardScheduledEmails } from "../../../model/react/useDasboardScheduledEmails/useDashboardScheduledEmails.js";
|
|
9
9
|
import { useDashboardAlerts } from "../../../model/react/useDashboardAlerting/useDashboardAlerts.js";
|
|
10
10
|
import { selectEnableAutomationManagement, selectEnableDashboardDensitySetting, selectEnableDashboardTabularExport, selectEnableSnapshotExport, selectIsReadOnly, selectSettings, } from "../../../model/store/config/configSelectors.js";
|
|
11
|
+
import { selectHasAnyExecutionResultLimitBreaks } from "../../../model/store/executionResults/executionResultsSelectors.js";
|
|
11
12
|
import { selectDashboardTitle, selectIsNewDashboard } from "../../../model/store/meta/metaSelectors.js";
|
|
12
13
|
import { selectCanCreateAutomation, selectCanExportPdf, selectCanExportTabular, } from "../../../model/store/permissions/permissionsSelectors.js";
|
|
13
14
|
import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSelectors.js";
|
|
@@ -52,6 +53,10 @@ export function useDefaultMenuItems() {
|
|
|
52
53
|
const isEmptyLayout = !useDashboardSelector(selectLayoutHasAnalyticalWidgets); // we need at least one non-custom widget there
|
|
53
54
|
const settings = useDashboardSelector(selectSettings);
|
|
54
55
|
const dashboardTitle = useDashboardSelector(selectDashboardTitle);
|
|
56
|
+
const hasAnyLimitBreaks = useDashboardSelector(selectHasAnyExecutionResultLimitBreaks);
|
|
57
|
+
const xlsxPartialResultsWarning = hasAnyLimitBreaks
|
|
58
|
+
? intl.formatMessage({ id: "options.menu.export.partialResults.warning.dashboard" })
|
|
59
|
+
: undefined;
|
|
55
60
|
const { isScheduledEmailingVisible, isScheduledManagementEmailingVisible, numberOfAvailableDestinations, defaultOnScheduleEmailing, defaultOnScheduleEmailingManagement, } = useDashboardScheduledEmails();
|
|
56
61
|
const { defaultOnAlertingManagement: defaultOnAlertsManagement, isAlertManagementVisible: isAlertsManagementVisible, } = useDashboardAlerts();
|
|
57
62
|
const dispatch = useDashboardDispatch();
|
|
@@ -355,6 +360,7 @@ export function useDefaultMenuItems() {
|
|
|
355
360
|
visible: isXlsxExportVisible,
|
|
356
361
|
disabled: isInProgress,
|
|
357
362
|
tooltip: disabledTooltip,
|
|
363
|
+
warning: xlsxPartialResultsWarning,
|
|
358
364
|
icon: "gd-icon-type-sheet",
|
|
359
365
|
},
|
|
360
366
|
],
|
|
@@ -414,5 +420,6 @@ export function useDefaultMenuItems() {
|
|
|
414
420
|
isXlsxExportVisible,
|
|
415
421
|
isAutomationManagementEnabled,
|
|
416
422
|
enableSnapshotExport,
|
|
423
|
+
xlsxPartialResultsWarning,
|
|
417
424
|
]);
|
|
418
425
|
}
|
|
@@ -62,7 +62,7 @@ function DrillModalExportMenuItem(props) {
|
|
|
62
62
|
const { item, isFocused } = props;
|
|
63
63
|
const tooltip = item.data.disabledTooltip;
|
|
64
64
|
return item.isDisabled && tooltip !== undefined ? (_jsxs(_Fragment, { children: [
|
|
65
|
-
_jsx(UiTooltip, { triggerBy: isFocused ? [] : ["hover", "focus"], arrowPlacement: "
|
|
65
|
+
_jsx(UiTooltip, { triggerBy: isFocused ? [] : ["hover", "focus"], arrowPlacement: "left", optimalPlacement: true, content: tooltip, anchor: _jsx(InteractiveItemWithIcon, { ...props }) }), _jsx("div", { className: "sr-only", "aria-live": "polite", children: tooltip })
|
|
66
66
|
] })) : (_jsx(InteractiveItemWithIcon, { ...props }));
|
|
67
67
|
}
|
|
68
68
|
function DropdownTriggerButton({ toggleDropdown, buttonRef, accessibilityConfig, isDisabled, }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsightDrillDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,YAAY,EAAyB,MAAM,OAAO,CAAC;AAKrF,OAAO,EAEH,KAAK,QAAQ,EACb,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"InsightDrillDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,YAAY,EAAyB,MAAM,OAAO,CAAC;AAKrF,OAAO,EAEH,KAAK,QAAQ,EACb,KAAK,cAAc,EAKtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,OAAO,EAAyB,MAAM,kBAAkB,CAAC;AA2BvE,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAgB7G;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,sBAAsB,EAAE,OAAO,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAkCD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,wBAAwB,GAAG,YAAY,CA2MhF"}
|
|
@@ -3,12 +3,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useCallback, useState } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { useIntl } from "react-intl";
|
|
6
|
-
import {
|
|
6
|
+
import { insightTitle, insightVisualizationType, isInsight, } from "@gooddata/sdk-model";
|
|
7
7
|
import { Button, FullScreenOverlay, Overlay, OverlayController, OverlayControllerProvider, RichText, UiIcon, UiTooltip, isNotDocumentFocused, useIdPrefixed, useMediaQuery, } from "@gooddata/sdk-ui-kit";
|
|
8
8
|
import { DOWNLOADER_ID } from "../../../../../_staging/fileUtils/downloadFile.js";
|
|
9
9
|
import { useDashboardSelector } from "../../../../../model/react/DashboardStoreProvider.js";
|
|
10
10
|
import { useWidgetExecutionsHandler } from "../../../../../model/react/useWidgetExecutionsHandler.js";
|
|
11
11
|
import { selectEnableRichTextDynamicReferences, selectSeparators, } from "../../../../../model/store/config/configSelectors.js";
|
|
12
|
+
import { DRILL_MODAL_EXECUTION_PSEUDO_REF } from "../../../../../model/store/executionResults/constants.js";
|
|
12
13
|
import { selectExecutionTimestamp } from "../../../../../model/store/ui/uiSelectors.js";
|
|
13
14
|
import { DASHBOARD_HEADER_OVERLAYS_Z_INDEX } from "../../../../constants/zIndex.js";
|
|
14
15
|
import { useDashboardComponentsContext } from "../../../../dashboardContexts/DashboardComponentsContext.js";
|
|
@@ -17,6 +18,8 @@ import { IntlWrapper } from "../../../../localization/IntlWrapper.js";
|
|
|
17
18
|
import { ThemedLoadingEqualizer } from "../../../../presentationComponents/ThemedLoadingEqualizer.js";
|
|
18
19
|
import { useInsightExport } from "../../../common/useInsightExport.js";
|
|
19
20
|
import { useShowAsTable } from "../../../showAsTableButton/useShowAsTable.js";
|
|
21
|
+
import { useInsightWarning } from "../../../widget/InsightWidget/useInsightWarning.js";
|
|
22
|
+
import { InsightWidgetWarningPartialResult } from "../../../widget/warningPartialResult/InsightWidgetWarningPartialResult.js";
|
|
20
23
|
import { supportsShowAsTable } from "../../insightToTable.js";
|
|
21
24
|
import { DrillDialog } from "./DrillDialog.js";
|
|
22
25
|
import { DrillDialogInsight } from "./DrillDialogInsight.js";
|
|
@@ -48,7 +51,6 @@ const getInsightWidgetDescription = (descriptionConfig, widget, insight) => {
|
|
|
48
51
|
// If widget is not insight or insight is not same as insight in dialog, we will use insight summary as default
|
|
49
52
|
return insight?.summary;
|
|
50
53
|
};
|
|
51
|
-
const DRILL_MODAL_EXECUTION_PSEUDO_REF = idRef("@@GDC_DRILL_MODAL");
|
|
52
54
|
export function InsightDrillDialog(props) {
|
|
53
55
|
const { widget, locale, breadcrumbs, insight, enableDrillDescription, drillStep, returnFocusToInsight, onClose, onBackButtonClick, onDrillDown, onDrillStart, } = props;
|
|
54
56
|
const isMobileDevice = useMediaQuery("mobileDevice");
|
|
@@ -94,16 +96,18 @@ export function InsightDrillDialog(props) {
|
|
|
94
96
|
const onCloseDialog = () => {
|
|
95
97
|
onClose();
|
|
96
98
|
};
|
|
99
|
+
const { limitBreaks, executionResult } = useInsightWarning(DRILL_MODAL_EXECUTION_PSEUDO_REF);
|
|
97
100
|
const isShowAsTableVisible = supportsShowAsTable(insightVisualizationType(insight));
|
|
98
|
-
return (_jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(OverlayComponent, { className: "gd-drill-modal-overlay", isModal: true, closeOnEscape: true, closeOnOutsideClick: true, ignoreClicksOnByClass: overlayIgnoredClasses, onClose: onCloseDialog, positionType: "fixed", children: _jsx(IntlWrapper, { locale: locale, children:
|
|
101
|
+
return (_jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(OverlayComponent, { className: "gd-drill-modal-overlay", isModal: true, closeOnEscape: true, closeOnOutsideClick: true, ignoreClicksOnByClass: overlayIgnoredClasses, onClose: onCloseDialog, positionType: "fixed", children: _jsx(IntlWrapper, { locale: locale, children: _jsxs(DrillDialog, { insight: insight, widget: widget, insightTitle: baseInsightTitle, isBackButtonVisible: breadcrumbs.length > 1, onBackButtonClick: onBackButtonClick, onCloseDialog: onCloseDialog, breadcrumbs: breadcrumbs, exportAvailable: exportXLSXEnabled || exportCSVEnabled, exportXLSXEnabled: exportXLSXEnabled, exportCSVEnabled: exportCSVEnabled, exportCSVRawEnabled: exportCSVRawEnabled, exportPDFEnabled: exportPdfTabularEnabled, exportPDFVisible: isExportPdfTabularVisible, enableDrillDescription: enableDrillDescription, onExportXLSX: onExportXLSX, onExportCSV: onExportCSV, onExportCSVRaw: onExportRawCSV, onExportPDF: onExportPdfTabular, isLoading: isLoading, isExporting: isExporting, isExportRawVisible: isExportRawVisible, isShowAsTableVisible: isShowAsTableVisible, isWidgetAsTable: drillDialogIsAsTable, onShowAsTable: toggleWidgetAsTable, focusCheckFn: isNotDocumentFocused, accessibilityConfig: {
|
|
99
102
|
dialogId,
|
|
100
|
-
}, children:
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
}, children: [
|
|
104
|
+
_jsx(WithDrillSelect, { widgetRef: widget.ref, insight: props.insight, returnFocusToInsight: returnFocusToInsight, onDrillStart: onDrillStart, onDrillDownSuccess: onDrillDown, children: ({ onDrill }) => {
|
|
105
|
+
return description && enableDrillDescription ? (_jsxs("div", { className: "drill-dialog-insight-container", children: [
|
|
106
|
+
_jsxs("div", { className: "drill-dialog-insight-container-insight", children: [
|
|
107
|
+
_jsx(InsightDrillDialogDescriptionButton, { isOpen: isOpen, isMobileDevice: isMobileDevice, setIsOpen: setIsOpen, descriptionId: descriptionId }), _jsx(DrillDialogInsight, { ...props, onDrill: onDrill, onLoadingChanged: handleLoadingChanged, onError: executionsHandler.onError, onWidgetFiltersReady: handleFiltersReady, pushData: executionsHandler.onPushData, ErrorComponent: ErrorComponent, LoadingComponent: LoadingComponent, drillStep: drillStep, isWidgetAsTable: drillDialogIsAsTable })
|
|
108
|
+
] }), _jsx(InsightDrillDialogDescriptionContent, { id: descriptionId, isOpen: isOpen, isMobileDevice: isMobileDevice, description: description, widgetFilters: widgetFilters, LoadingComponent: LoadingComponent })
|
|
109
|
+
] })) : (_jsx(DrillDialogInsight, { ...props, onDrill: onDrill, onLoadingChanged: handleLoadingChanged, onError: executionsHandler.onError, pushData: executionsHandler.onPushData, ErrorComponent: ErrorComponent, LoadingComponent: LoadingComponent, drillStep: drillStep, isWidgetAsTable: drillDialogIsAsTable }));
|
|
110
|
+
} }), limitBreaks.length > 0 && executionResult ? (_jsx(InsightWidgetWarningPartialResult, { className: "gd-warning-partial-result", limitBreaks: limitBreaks, onExportRawCSV: onExportRawCSV, isExporting: isExporting, isExportRawVisible: isExportRawVisible, isLoading: executionResult?.isLoading, executionResult: executionResult })) : null] }) }) }) }));
|
|
107
111
|
}
|
|
108
112
|
function InsightDrillDialogDescriptionButton({ isOpen, isMobileDevice, setIsOpen, descriptionId, }) {
|
|
109
113
|
const { formatMessage } = useIntl();
|
|
@@ -13,7 +13,6 @@ export interface IMenuItemData {
|
|
|
13
13
|
}
|
|
14
14
|
export type IMenuItem = IUiMenuItem<IMenuItemData>;
|
|
15
15
|
export type IMenuInteractiveItem = IUiMenuInteractiveItem<IMenuItemData>;
|
|
16
|
-
export declare const DRILL_MODAL_EXECUTION_PSEUDO_REF: import("@gooddata/sdk-model").IdentifierRef;
|
|
17
16
|
export declare const itemMessages: {
|
|
18
17
|
xlsx: {
|
|
19
18
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDrillDialogExportItems.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/useDrillDialogExportItems.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDrillDialogExportItems.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/useDrillDialogExportItems.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQpG,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE;QACT,MAAM,EAAE,MAAM,IAAI,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,QAAQ,CAAC;KAClB,CAAC;CACL;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;AACnD,MAAM,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAC;AAEzE,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAKvB,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;4BAgJrC,CAAC"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
// (C) 2025-2026 GoodData Corporation
|
|
2
2
|
import { useMemo } from "react";
|
|
3
3
|
import { defineMessages, useIntl } from "react-intl";
|
|
4
|
-
import { idRef } from "@gooddata/sdk-model";
|
|
5
4
|
import { useDashboardSelector } from "../../../../../model/react/DashboardStoreProvider.js";
|
|
6
5
|
import { selectSettings } from "../../../../../model/store/config/configSelectors.js";
|
|
6
|
+
import { DRILL_MODAL_EXECUTION_PSEUDO_REF } from "../../../../../model/store/executionResults/constants.js";
|
|
7
7
|
import { selectExecutionResultByRef } from "../../../../../model/store/executionResults/executionResultsSelectors.js";
|
|
8
8
|
import { getExportTooltipId } from "../../../insightMenu/DefaultDashboardInsightMenu/getExportTooltips.js";
|
|
9
|
-
export const DRILL_MODAL_EXECUTION_PSEUDO_REF = idRef("@@GDC_DRILL_MODAL");
|
|
10
9
|
export const itemMessages = defineMessages({
|
|
11
10
|
xlsx: { id: "widget.drill.dialog.exportToXLSX" },
|
|
12
11
|
csvFormatted: { id: "widget.drill.dialog.exportToCSV.formatted" },
|
|
@@ -20,6 +19,14 @@ export const useDrillDialogExportItems = ({ isExporting, isDropdownDisabled, isE
|
|
|
20
19
|
const disabledTooltip = formatMessage({
|
|
21
20
|
id: getExportTooltipId({ execution, isExporting, isRawExportsEnabled: settings?.enableRawExports }),
|
|
22
21
|
});
|
|
22
|
+
// When the drilled execution reached a result limit, formatted exports (XLSX, formatted CSV, PDF) can
|
|
23
|
+
// only contain partial data and are disabled with an explanatory tooltip. Raw CSV is unaffected (it runs
|
|
24
|
+
// a separate full execution). An in-progress export takes priority over the limit message (disabledTooltip
|
|
25
|
+
// already resolves to the in-progress reason while exporting).
|
|
26
|
+
const hasLimitBreaks = (execution?.limitBreaks?.length ?? 0) > 0;
|
|
27
|
+
const formattedExportTooltip = !isExporting && hasLimitBreaks
|
|
28
|
+
? formatMessage({ id: "options.menu.export.partialResults.exportDisabled" })
|
|
29
|
+
: disabledTooltip;
|
|
23
30
|
return useMemo(() => {
|
|
24
31
|
const allItems = [
|
|
25
32
|
{
|
|
@@ -28,12 +35,12 @@ export const useDrillDialogExportItems = ({ isExporting, isDropdownDisabled, isE
|
|
|
28
35
|
action: onExportXLSX,
|
|
29
36
|
className: "s-export-drilled-insight-xlsx gd-icon-type-sheet",
|
|
30
37
|
dataTestId: "s-export-drilled-insight-xlsx",
|
|
31
|
-
disabledTooltip,
|
|
38
|
+
disabledTooltip: formattedExportTooltip,
|
|
32
39
|
icon: "fileXlsx",
|
|
33
40
|
},
|
|
34
41
|
id: "xlsx",
|
|
35
42
|
stringTitle: formatMessage({ id: itemMessages.xlsx.id }),
|
|
36
|
-
isDisabled: !isExportXLSXEnabled,
|
|
43
|
+
isDisabled: !isExportXLSXEnabled || hasLimitBreaks,
|
|
37
44
|
},
|
|
38
45
|
...(isExportPDFVisible
|
|
39
46
|
? [
|
|
@@ -43,12 +50,12 @@ export const useDrillDialogExportItems = ({ isExporting, isDropdownDisabled, isE
|
|
|
43
50
|
action: onExportPDF,
|
|
44
51
|
className: "s-export-drilled-insight-pdf gd-icon-type-pdf",
|
|
45
52
|
dataTestId: "s-export-drilled-insight-pdf",
|
|
46
|
-
disabledTooltip,
|
|
53
|
+
disabledTooltip: formattedExportTooltip,
|
|
47
54
|
icon: "filePdf",
|
|
48
55
|
},
|
|
49
56
|
id: "pdf",
|
|
50
57
|
stringTitle: formatMessage({ id: itemMessages.pdf.id }),
|
|
51
|
-
isDisabled: !isExportPDFEnabled,
|
|
58
|
+
isDisabled: !isExportPDFEnabled || hasLimitBreaks,
|
|
52
59
|
},
|
|
53
60
|
]
|
|
54
61
|
: []),
|
|
@@ -58,12 +65,12 @@ export const useDrillDialogExportItems = ({ isExporting, isDropdownDisabled, isE
|
|
|
58
65
|
action: onExportCSV,
|
|
59
66
|
className: "s-export-drilled-insight-csv-formatted gd-icon-type-csv-formatted",
|
|
60
67
|
dataTestId: "s-export-drilled-insight-csv-formatted",
|
|
61
|
-
disabledTooltip,
|
|
68
|
+
disabledTooltip: formattedExportTooltip,
|
|
62
69
|
icon: "fileCsvFormatted",
|
|
63
70
|
},
|
|
64
71
|
id: "csv-formatted",
|
|
65
72
|
stringTitle: formatMessage({ id: itemMessages.csvFormatted.id }),
|
|
66
|
-
isDisabled: !isExportCSVEnabled,
|
|
73
|
+
isDisabled: !isExportCSVEnabled || hasLimitBreaks,
|
|
67
74
|
},
|
|
68
75
|
{
|
|
69
76
|
type: "interactive",
|
|
@@ -85,6 +92,12 @@ export const useDrillDialogExportItems = ({ isExporting, isDropdownDisabled, isE
|
|
|
85
92
|
if (isDropdownDisabled) {
|
|
86
93
|
return [];
|
|
87
94
|
}
|
|
95
|
+
// When the execution reached a result limit, keep the (disabled) formatted export items in the menu
|
|
96
|
+
// so the user sees they are unavailable because of the limit, instead of hiding them.
|
|
97
|
+
if (hasLimitBreaks) {
|
|
98
|
+
return allItems;
|
|
99
|
+
}
|
|
100
|
+
// Otherwise, when raw exports are not shown, disabled items are hidden as usual.
|
|
88
101
|
return allItems.filter((item) => !item.isDisabled);
|
|
89
102
|
}, [
|
|
90
103
|
formatMessage,
|
|
@@ -100,5 +113,7 @@ export const useDrillDialogExportItems = ({ isExporting, isDropdownDisabled, isE
|
|
|
100
113
|
isExportRawVisible,
|
|
101
114
|
isDropdownDisabled,
|
|
102
115
|
disabledTooltip,
|
|
116
|
+
formattedExportTooltip,
|
|
117
|
+
hasLimitBreaks,
|
|
103
118
|
]);
|
|
104
119
|
};
|
|
@@ -9,7 +9,7 @@ export const DashboardInsightMenuItemButton = (props) => {
|
|
|
9
9
|
function renderButtonWithTooltip(button, disabled, tooltip, isFocused) {
|
|
10
10
|
if (tooltip && disabled) {
|
|
11
11
|
return (_jsxs(_Fragment, { children: [
|
|
12
|
-
_jsx(UiTooltip, { triggerBy: isFocused ? [] : ["hover", "focus"], arrowPlacement: "
|
|
12
|
+
_jsx(UiTooltip, { triggerBy: isFocused ? [] : ["hover", "focus"], arrowPlacement: "left", optimalPlacement: true, content: tooltip, anchor: button }), _jsx("div", { className: "sr-only", "aria-live": "polite", children: tooltip })
|
|
13
13
|
] }));
|
|
14
14
|
}
|
|
15
15
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDefaultInsightMenuItems.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insightMenu/DefaultDashboardInsightMenu/getDefaultInsightMenuItems.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAElG,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"getDefaultInsightMenuItems.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insightMenu/DefaultDashboardInsightMenu/getDefaultInsightMenuItems.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAElG,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AA8MxD;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,qBAAqB,EAC7B,SAAS,CAAC,EAAE,wBAAwB,GACrC,gBAAgB,EAAE,CAuOpB"}
|