@gooddata/sdk-ui-ext 11.55.0-alpha.2 → 11.55.0-alpha.4
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 +9 -9
- package/esm/index.d.ts +4 -2
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -2
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionEditor.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionEditor.js +8 -5
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.d.ts +20 -5
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.js +143 -33
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.d.ts +19 -1
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.js +146 -46
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingModel.d.ts +34 -7
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingModel.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingModel.js +38 -7
- package/esm/internal/components/configurationPanels/PivotTableConfigurationPanel.d.ts.map +1 -1
- package/esm/internal/components/configurationPanels/PivotTableConfigurationPanel.js +9 -4
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.d.ts.map +1 -1
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.js +18 -18
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/pivotTableNextConfigFromInsight.d.ts +1 -2
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/pivotTableNextConfigFromInsight.d.ts.map +1 -1
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/pivotTableNextConfigFromInsight.js +3 -9
- package/esm/internal/index.d.ts +1 -0
- package/esm/internal/index.d.ts.map +1 -1
- package/esm/internal/index.js +1 -0
- package/esm/internal/translations/de-DE.localization-bundle.js +2 -2
- package/esm/internal/translations/en-US.localization-bundle.d.ts +14 -2
- package/esm/internal/translations/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-US.localization-bundle.js +18 -6
- package/esm/internal/translations/zh-HK.localization-bundle.js +40 -40
- package/esm/internal/translations/zh-Hant.localization-bundle.js +1 -1
- package/esm/internal/utils/embeddingInsightViewCodeGenerator/insightViewConfig.d.ts.map +1 -1
- package/esm/internal/utils/embeddingInsightViewCodeGenerator/insightViewConfig.js +2 -1
- package/esm/internal/utils/propertiesHelper.d.ts +33 -1
- package/esm/internal/utils/propertiesHelper.d.ts.map +1 -1
- package/esm/internal/utils/propertiesHelper.js +43 -1
- package/esm/locales.d.ts +11 -2
- package/esm/locales.d.ts.map +1 -1
- package/esm/locales.js +5 -2
- package/esm/sdk-ui-ext.d.ts +194 -4
- package/esm/share/ObjectShareDialog.d.ts +19 -0
- package/esm/share/ObjectShareDialog.d.ts.map +1 -1
- package/esm/share/ObjectShareDialog.js +8 -1
- package/esm/share/objectShareController.helpers.d.ts +8 -52
- package/esm/share/objectShareController.helpers.d.ts.map +1 -1
- package/esm/share/objectShareController.helpers.js +23 -0
- package/esm/share/objectShareController.types.d.ts +76 -3
- package/esm/share/objectShareController.types.d.ts.map +1 -1
- package/esm/share/useAccessList.d.ts +14 -3
- package/esm/share/useAccessList.d.ts.map +1 -1
- package/esm/share/useAccessList.js +26 -7
- package/esm/share/useApplyObjectPermissions.d.ts +13 -0
- package/esm/share/useApplyObjectPermissions.d.ts.map +1 -0
- package/esm/share/useApplyObjectPermissions.js +33 -0
- package/esm/share/useObjectShareController.d.ts.map +1 -1
- package/esm/share/useObjectShareController.js +20 -9
- package/esm/share/useObjectShareDialog.d.ts +12 -3
- package/esm/share/useObjectShareDialog.d.ts.map +1 -1
- package/esm/share/useObjectShareDialog.js +16 -3
- package/package.json +23 -24
- package/styles/css/main.css +65 -4
- package/styles/css/main.css.map +1 -1
- package/styles/internal/css/conditional_formatting.css +38 -4
- package/styles/internal/css/conditional_formatting.css.map +1 -1
- package/styles/internal/css/insightPicker.css +27 -0
- package/styles/internal/css/insightPicker.css.map +1 -1
- package/styles/internal/scss/conditional_formatting.scss +67 -18
- package/styles/internal/scss/insightPicker.scss +41 -0
package/NOTICE
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
The following 3rd-party software packages may be used by or distributed with gooddata-ui-sdk. Any information relevant to third-party vendors listed below are collected using common, reasonable means.
|
|
9
9
|
|
|
10
|
-
Date generated: 2026-
|
|
10
|
+
Date generated: 2026-9-1
|
|
11
11
|
|
|
12
|
-
Revision ID:
|
|
12
|
+
Revision ID: 3404f1a0d36039369213be192418b30d4f1226a6
|
|
13
13
|
|
|
14
14
|
================================================================================
|
|
15
15
|
================================================================================
|
|
@@ -518,7 +518,7 @@ No first party licenses found in gooddata-ui-sdk
|
|
|
518
518
|
- open (7.4.2) [MIT]
|
|
519
519
|
- ora (5.4.1) [MIT]
|
|
520
520
|
- oxc-transform (0.147.0) [MIT]
|
|
521
|
-
- oxfmt (0.
|
|
521
|
+
- oxfmt (0.58.0) [MIT, 0BSD]
|
|
522
522
|
- p-map (3.0.0) [MIT]
|
|
523
523
|
- package-json-from-dist (1.0.1) [blueoak-1.0.0]
|
|
524
524
|
- parent-module (1.0.1) [MIT]
|
|
@@ -10463,9 +10463,9 @@ Dependency Path: oxc-transform
|
|
|
10463
10463
|
File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
|
|
10464
10464
|
|
|
10465
10465
|
--------------------------------------------------------------------------------
|
|
10466
|
-
Package Title: oxfmt (0.
|
|
10466
|
+
Package Title: oxfmt (0.58.0)
|
|
10467
10467
|
|
|
10468
|
-
Package Locator: npm+oxfmt$0.
|
|
10468
|
+
Package Locator: npm+oxfmt$0.58.0
|
|
10469
10469
|
|
|
10470
10470
|
Package Depth: Direct
|
|
10471
10471
|
--------------------------------------------------------------------------------
|
|
@@ -10535,7 +10535,7 @@ SOFTWARE.
|
|
|
10535
10535
|
0BSD
|
|
10536
10536
|
--------------------------------------------------------------------------------
|
|
10537
10537
|
File matches:
|
|
10538
|
-
- dist/plugin-
|
|
10538
|
+
- dist/plugin-B4cguZ1l.js
|
|
10539
10539
|
- Copyright (c) Microsoft Corporation.
|
|
10540
10540
|
--------------------------------------------------------------------------------
|
|
10541
10541
|
|
|
@@ -10560,7 +10560,7 @@ MIT
|
|
|
10560
10560
|
Authors: boshenc@gmail.com
|
|
10561
10561
|
Package Manager: NPM
|
|
10562
10562
|
Project URL: https://oxc.rs/docs/guide/usage/formatter
|
|
10563
|
-
Package Download URL: https://registry.npmjs.org/oxfmt/-/oxfmt-0.
|
|
10563
|
+
Package Download URL: https://registry.npmjs.org/oxfmt/-/oxfmt-0.58.0.tgz
|
|
10564
10564
|
Dependency Path: oxfmt
|
|
10565
10565
|
File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
|
|
10566
10566
|
|
|
@@ -35327,7 +35327,7 @@ MIT
|
|
|
35327
35327
|
|
|
35328
35328
|
Authors: admin@simonboudrias.com
|
|
35329
35329
|
Package Manager: NPM
|
|
35330
|
-
Project URL: https://
|
|
35330
|
+
Project URL: https://github.com/SBoudrias/run-async#readme
|
|
35331
35331
|
Package Download URL: https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz
|
|
35332
35332
|
Dependency Path: inquirer > run-async
|
|
35333
35333
|
File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
|
|
@@ -64321,4 +64321,4 @@ File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
|
|
|
64321
64321
|
--------------------------------------------------------------------------------
|
|
64322
64322
|
--------------------------------------------------------------------------------
|
|
64323
64323
|
|
|
64324
|
-
Report Generated by FOSSA on 2026-
|
|
64324
|
+
Report Generated by FOSSA on 2026-9-1
|
package/esm/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
import { type IInsight, type IInsightDefinition, type ISettings } from "@gooddata/sdk-model";
|
|
13
13
|
import { type IDrillEvent } from "@gooddata/sdk-ui";
|
|
14
14
|
export type { ChartInlineVisualizationType } from "@gooddata/sdk-ui-charts";
|
|
15
|
-
import { DASHBOARD_LAYOUT_DEFAULT_VIS_HEIGHT_PX, DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT, EmbedInsightDialog, EmptyAfmSdkError, FluidLayoutDescriptor, type IDrillDownDefinition, type IEmbedInsightDialogProps, type IFluidLayoutDescriptor, type IInsightTitleProps, type IInsightViewProps, type ILayoutDescriptor, INSIGHT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT, type ISizeInfo, type ISizeInfoDefault, type IVisualizationDefaultSizeInfo, type IVisualizationMeta, type IVisualizationSizeInfo, KPI_WIDGET_SIZE_INFO_DEFAULT, type LayoutType, MIN_VISUALIZATION_WIDTH, PluggableVisualizationErrorCodes, type PluggableVisualizationErrorType, RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT, WIDGET_DROPZONE_SIZE_INFO_DEFAULT, addIntersectionFiltersToInsight, fluidLayoutDescriptor, isDrillDownDefinition, isEmptyAfm, isSizeInfo, isSizeInfoDefault, isVisualizationDefaultSizeInfo } from "./internal/index.js";
|
|
15
|
+
import { DASHBOARD_LAYOUT_DEFAULT_VIS_HEIGHT_PX, DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT, EmbedInsightDialog, EmptyAfmSdkError, FluidLayoutDescriptor, type IDrillDownDefinition, type IEmbedInsightDialogProps, type IFluidLayoutDescriptor, type IInsightTitleProps, type IInsightViewProps, type ILayoutDescriptor, INSIGHT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT, type ISizeInfo, type ISizeInfoDefault, type IVisualizationDefaultSizeInfo, type IVisualizationMeta, type IVisualizationSizeInfo, KPI_WIDGET_SIZE_INFO_DEFAULT, type LayoutType, MIN_VISUALIZATION_WIDTH, PluggableVisualizationErrorCodes, type PluggableVisualizationErrorType, RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT, WIDGET_DROPZONE_SIZE_INFO_DEFAULT, addIntersectionFiltersToInsight, fluidLayoutDescriptor, getEffectiveConditionalFormatting, isDrillDownDefinition, isEmptyAfm, isSizeInfo, isSizeInfoDefault, isVisualizationDefaultSizeInfo } from "./internal/index.js";
|
|
16
16
|
export { clearInsightViewCaches, clearInsightViewCacheForInsight } from "./dataLoaders/index.js";
|
|
17
17
|
export { InsightView } from "./insightView/InsightView.js";
|
|
18
18
|
export { InsightError, type IInsightErrorProps } from "./insightView/InsightError.js";
|
|
@@ -28,7 +28,7 @@ export type { IInsightPickerProps, IInsightPickerItem, IInsightPickerMenuAction,
|
|
|
28
28
|
export type { IAutomationsProps, AutomationsType, AutomationsScope, AutomationsColumnName, ScheduleAutomationsColumnName, CommonAutomationsColumnName, AutomationColumnDefinition, AutomationColumnDefinitions, AutomationsFilterName, AutomationsFilterPreselectName, AutomationsFilterPreselectValue, AutomationsPreselectedFilters, AutomationsAvailableFilters, AutomationsOnLoad, IEditAutomation, } from "./automations/types.js";
|
|
29
29
|
export { getComparisonOperatorTitle, getRelativeOperatorTitle } from "./automations/utils.js";
|
|
30
30
|
export { COMPARISON_OPERATORS, RELATIVE_OPERATORS, ARITHMETIC_OPERATORS, AI_OPERATORS, AI_OPERATOR, } from "./automations/constants.js";
|
|
31
|
-
export { type IDrillDownDefinition, type IVisualizationSizeInfo, type IVisualizationDefaultSizeInfo, type IVisualizationMeta, type ISizeInfo, type ISizeInfoDefault, type IFluidLayoutDescriptor, type ILayoutDescriptor, type LayoutType, type PluggableVisualizationErrorType, type IEmbedInsightDialogProps, isDrillDownDefinition, fluidLayoutDescriptor, FluidLayoutDescriptor, isEmptyAfm, EmptyAfmSdkError, PluggableVisualizationErrorCodes, addIntersectionFiltersToInsight, DASHBOARD_LAYOUT_DEFAULT_VIS_HEIGHT_PX, INSIGHT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT, KPI_WIDGET_SIZE_INFO_DEFAULT, WIDGET_DROPZONE_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT, DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT, MIN_VISUALIZATION_WIDTH, EmbedInsightDialog, isSizeInfo, isSizeInfoDefault, isVisualizationDefaultSizeInfo, };
|
|
31
|
+
export { type IDrillDownDefinition, type IVisualizationSizeInfo, type IVisualizationDefaultSizeInfo, type IVisualizationMeta, type ISizeInfo, type ISizeInfoDefault, type IFluidLayoutDescriptor, type ILayoutDescriptor, type LayoutType, type PluggableVisualizationErrorType, type IEmbedInsightDialogProps, isDrillDownDefinition, fluidLayoutDescriptor, FluidLayoutDescriptor, isEmptyAfm, EmptyAfmSdkError, PluggableVisualizationErrorCodes, addIntersectionFiltersToInsight, DASHBOARD_LAYOUT_DEFAULT_VIS_HEIGHT_PX, INSIGHT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT, KPI_WIDGET_SIZE_INFO_DEFAULT, WIDGET_DROPZONE_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT, DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT, MIN_VISUALIZATION_WIDTH, EmbedInsightDialog, isSizeInfo, isSizeInfoDefault, isVisualizationDefaultSizeInfo, getEffectiveConditionalFormatting, };
|
|
32
32
|
/**
|
|
33
33
|
* @internal
|
|
34
34
|
*/
|
|
@@ -80,6 +80,8 @@ export declare function provideCreateRoot(_fn: any): void;
|
|
|
80
80
|
export { useInsightPagedList, type IUsePagedDropdownConfig, type IUsePagedDropdownResult, type ITabsIds, type InsightListSortBy, type InsightListSortDirection, } from "./internal/components/insightList/useInsightPagedList.js";
|
|
81
81
|
export { ObjectShareDialog, type IObjectShareDialogProps } from "./share/ObjectShareDialog.js";
|
|
82
82
|
export { sortShareableLabels } from "./share/objectShareController.helpers.js";
|
|
83
|
+
export type { GranteeEdit, IGranteeIdentityFacts, IObjectShareDraft, IObjectShareGrantee, IRuleEdit, ObjectSharePermissionLevel, } from "./share/objectShareController.types.js";
|
|
84
|
+
export { useApplyObjectPermissions } from "./share/useApplyObjectPermissions.js";
|
|
83
85
|
export { accessListToSummary } from "./share/accessSummary.js";
|
|
84
86
|
export { isPermissionsNotAvailable } from "./share/accessErrors.js";
|
|
85
87
|
export type { IObjectAccessSummary, IObjectShareLabel } from "./share/types.js";
|
package/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// (C) 2007-2026 GoodData Corporation
|
|
2
|
-
import { DASHBOARD_LAYOUT_DEFAULT_VIS_HEIGHT_PX, DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT, EmbedInsightDialog, EmptyAfmSdkError, FluidLayoutDescriptor, FullVisualizationCatalog, INSIGHT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT, KPI_WIDGET_SIZE_INFO_DEFAULT, MIN_VISUALIZATION_WIDTH, PluggableVisualizationErrorCodes, RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT, WIDGET_DROPZONE_SIZE_INFO_DEFAULT, addIntersectionFiltersToInsight, fluidLayoutDescriptor, isDrillDownDefinition, isEmptyAfm, isSizeInfo, isSizeInfoDefault, isVisualizationDefaultSizeInfo, } from "./internal/index.js";
|
|
2
|
+
import { DASHBOARD_LAYOUT_DEFAULT_VIS_HEIGHT_PX, DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT, EmbedInsightDialog, EmptyAfmSdkError, FluidLayoutDescriptor, FullVisualizationCatalog, INSIGHT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT, KPI_WIDGET_SIZE_INFO_DEFAULT, MIN_VISUALIZATION_WIDTH, PluggableVisualizationErrorCodes, RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT, WIDGET_DROPZONE_SIZE_INFO_DEFAULT, addIntersectionFiltersToInsight, fluidLayoutDescriptor, getEffectiveConditionalFormatting, isDrillDownDefinition, isEmptyAfm, isSizeInfo, isSizeInfoDefault, isVisualizationDefaultSizeInfo, } from "./internal/index.js";
|
|
3
3
|
export { clearInsightViewCaches, clearInsightViewCacheForInsight } from "./dataLoaders/index.js";
|
|
4
4
|
export { InsightView } from "./insightView/InsightView.js";
|
|
5
5
|
export { InsightError } from "./insightView/InsightError.js";
|
|
@@ -12,7 +12,7 @@ export { useCfDateFilterOptions } from "./internal/components/configurationContr
|
|
|
12
12
|
export { getComparisonOperatorTitle, getRelativeOperatorTitle } from "./automations/utils.js";
|
|
13
13
|
export { COMPARISON_OPERATORS, RELATIVE_OPERATORS, ARITHMETIC_OPERATORS, AI_OPERATORS, AI_OPERATOR, } from "./automations/constants.js";
|
|
14
14
|
// exported for sdk-ui-dashboard
|
|
15
|
-
export { isDrillDownDefinition, fluidLayoutDescriptor, FluidLayoutDescriptor, isEmptyAfm, EmptyAfmSdkError, PluggableVisualizationErrorCodes, addIntersectionFiltersToInsight, DASHBOARD_LAYOUT_DEFAULT_VIS_HEIGHT_PX, INSIGHT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT, KPI_WIDGET_SIZE_INFO_DEFAULT, WIDGET_DROPZONE_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT, DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT, MIN_VISUALIZATION_WIDTH, EmbedInsightDialog, isSizeInfo, isSizeInfoDefault, isVisualizationDefaultSizeInfo, };
|
|
15
|
+
export { isDrillDownDefinition, fluidLayoutDescriptor, FluidLayoutDescriptor, isEmptyAfm, EmptyAfmSdkError, PluggableVisualizationErrorCodes, addIntersectionFiltersToInsight, DASHBOARD_LAYOUT_DEFAULT_VIS_HEIGHT_PX, INSIGHT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT, KPI_WIDGET_SIZE_INFO_DEFAULT, WIDGET_DROPZONE_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT, DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT, MIN_VISUALIZATION_WIDTH, EmbedInsightDialog, isSizeInfo, isSizeInfoDefault, isVisualizationDefaultSizeInfo, getEffectiveConditionalFormatting, };
|
|
16
16
|
// below functions are exported only for sdk-ui-dashboard use to avoid exporting the whole FullVisualizationCatalog
|
|
17
17
|
/**
|
|
18
18
|
* @internal
|
|
@@ -73,5 +73,6 @@ export function provideCreateRoot(_fn) {
|
|
|
73
73
|
export { useInsightPagedList, } from "./internal/components/insightList/useInsightPagedList.js";
|
|
74
74
|
export { ObjectShareDialog } from "./share/ObjectShareDialog.js";
|
|
75
75
|
export { sortShareableLabels } from "./share/objectShareController.helpers.js";
|
|
76
|
+
export { useApplyObjectPermissions } from "./share/useApplyObjectPermissions.js";
|
|
76
77
|
export { accessListToSummary } from "./share/accessSummary.js";
|
|
77
78
|
export { isPermissionsNotAvailable } from "./share/accessErrors.js";
|
package/esm/internal/components/configurationControls/conditionalFormatting/ConditionEditor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionEditor.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/configurationControls/conditionalFormatting/ConditionEditor.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAiBzE,OAAO,EACH,KAAK,2BAA2B,EAEhC,KAAK,+BAA+B,EAEvC,MAAM,6BAA6B,CAAC;AAarC,OAAO,EAGH,KAAK,WAAW,EAChB,KAAK,eAAe,EAavB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ConditionEditor.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/configurationControls/conditionalFormatting/ConditionEditor.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAiBzE,OAAO,EACH,KAAK,2BAA2B,EAEhC,KAAK,+BAA+B,EAEvC,MAAM,6BAA6B,CAAC;AAarC,OAAO,EAGH,KAAK,WAAW,EAChB,KAAK,eAAe,EAavB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAyYrD,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,+BAA+B,CAAC;IAC3C,IAAI,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,WAAW,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9B,iBAAiB,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACxD,YAAY,EAAE,eAAe,GAAG,SAAS,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,SAAS,EAAE,+BAA+B,KAAK,IAAI,CAAC;IAC/D,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wBAAgB,eAAe,CAAC,EAC5B,SAAS,EACT,IAAI,EACJ,SAAS,EACT,UAAU,EACV,WAAW,EACX,IAAI,EACJ,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,QAAgB,EAChB,QAAQ,EACR,QAAQ,EACX,EAAE,qBAAqB,2CA8FvB"}
|
package/esm/internal/components/configurationControls/conditionalFormatting/ConditionEditor.js
CHANGED
|
@@ -108,9 +108,12 @@ function ConditionValueInput({ condition, editorKind, kind, isPercent, separator
|
|
|
108
108
|
] }));
|
|
109
109
|
}
|
|
110
110
|
// The ColorDropdown trigger swatch. ColorDropdown clones it with selectable-child props the swatch
|
|
111
|
-
// ignores. No color renders a "none" slash rather than a misleading white.
|
|
111
|
+
// ignores. No color renders a "none" slash rather than a misleading white. The outer span fills and
|
|
112
|
+
// centers within ColorDropdown's own trigger wrapper (taller than the fixed-size chip); the inner
|
|
113
|
+
// `__box` is the actual visible 20x20 chip — see conditional_formatting.scss for why it's split this
|
|
114
|
+
// way instead of reaching into ColorDropdown's own (dynamically-classed) wrapper.
|
|
112
115
|
function CfSwatch({ hex }) {
|
|
113
|
-
return (_jsx("span", { className: `gd-cf-
|
|
116
|
+
return (_jsx("span", { className: "gd-cf-swatch", children: _jsx("span", { className: `gd-cf-swatch__box${hex ? "" : " gd-cf-swatch__box--none"}`, style: hex ? { backgroundColor: hex } : undefined }) }));
|
|
114
117
|
}
|
|
115
118
|
function CfColorPick({ hex, noneColorLabel, onChange }) {
|
|
116
119
|
return (_jsx(ColorDropdown, { colorPalette: CF_COLOR_PALETTE, selectedColorItem: hexToColor(hex), onColorSelected: (color) => onChange(colorToHex(color)), onClear: () => onChange(undefined), noneColorAriaLabel: noneColorLabel, children: _jsx(CfSwatch, { hex: hex }) }));
|
|
@@ -127,9 +130,9 @@ function FormatEditor({ format, onChange }) {
|
|
|
127
130
|
...accessibilityConfig,
|
|
128
131
|
ariaLabel: intl.formatMessage(conditionalFormattingMessages.dialogFormat),
|
|
129
132
|
}, onClick: toggleDropdown })), renderBody: () => (_jsxs("div", { className: "gd-cf-format", children: [
|
|
130
|
-
_jsx("span", { className: "gd-cf-format__label", children: intl.formatMessage(conditionalFormattingMessages.dialogTextColor) }), _jsx(CfColorPick, { hex: format.color, noneColorLabel: intl.formatMessage(conditionalFormattingMessages.dialogNoColor), onChange: (color) => onChange({ ...format, color }) }), _jsx("span", { className: "gd-cf-format__label", children: intl.formatMessage(conditionalFormattingMessages.dialogFillColor) }), _jsx(CfColorPick, { hex: format.backgroundColor, noneColorLabel: intl.formatMessage(conditionalFormattingMessages.dialogNoColor), onChange: (backgroundColor) => onChange({ ...format, backgroundColor }) }), _jsxs(UiButtonSegmentedControl, { children: [
|
|
131
|
-
|
|
132
|
-
|
|
133
|
+
_jsx("span", { className: "gd-cf-format__label", children: intl.formatMessage(conditionalFormattingMessages.dialogTextColor) }), _jsx(CfColorPick, { hex: format.color, noneColorLabel: intl.formatMessage(conditionalFormattingMessages.dialogNoColor), onChange: (color) => onChange({ ...format, color }) }), _jsx("span", { className: "gd-cf-format__label", children: intl.formatMessage(conditionalFormattingMessages.dialogFillColor) }), _jsx(CfColorPick, { hex: format.backgroundColor, noneColorLabel: intl.formatMessage(conditionalFormattingMessages.dialogNoColor), onChange: (backgroundColor) => onChange({ ...format, backgroundColor }) }), _jsx("div", { className: "gd-cf-scope-toggle", children: _jsxs(UiButtonSegmentedControl, { children: [
|
|
134
|
+
_jsx(UiButton, { size: "small", variant: "secondary", label: intl.formatMessage(conditionalFormattingMessages.dialogScopeCell), isSelected: format.scope === "cell", onClick: () => onChange({ ...format, scope: "cell" }) }), _jsx(UiButton, { size: "small", variant: "secondary", label: intl.formatMessage(conditionalFormattingMessages.dialogScopeRow), isSelected: format.scope === "row", onClick: () => onChange({ ...format, scope: "row" }) })
|
|
135
|
+
] }) })
|
|
133
136
|
] })) }));
|
|
134
137
|
}
|
|
135
138
|
export function ConditionEditor({ condition, kind, isPercent, separators, suggestions, date, dateFilterOptions, dateSettings, removable, slot, readOnly = false, onChange, onRemove, }) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type ISeparators } from "@gooddata/sdk-model";
|
|
1
|
+
import { type ISemanticConditionalFormatting, type ISeparators } from "@gooddata/sdk-model";
|
|
2
2
|
import { type IDateFilterOptionsByType } from "@gooddata/sdk-ui-filters";
|
|
3
|
-
import { type IConditionalFormattingRule } from "@gooddata/sdk-ui-pivot/next";
|
|
3
|
+
import { type ConditionalFormattingTarget, type IConditionalFormattingRule } from "@gooddata/sdk-ui-pivot/next";
|
|
4
4
|
import { type ICfDateSettings, type ITargetOption } from "./conditionalFormattingModel.js";
|
|
5
5
|
/**
|
|
6
6
|
* @internal
|
|
@@ -17,15 +17,30 @@ export interface IConditionalFormattingDialogProps {
|
|
|
17
17
|
dateSettings?: ICfDateSettings;
|
|
18
18
|
/** CSS selector of a small, stable element the popover anchors to. */
|
|
19
19
|
alignTo: string;
|
|
20
|
-
/** Renders the dialog non-interactively: no target picker, no editing, no Save button. */
|
|
21
|
-
readOnly?: boolean;
|
|
22
20
|
/** Renders a static "icon + title" header for the rule's target instead of the picker dropdown. */
|
|
23
21
|
fixedTarget?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Semantic-layer rules by target localId. When the current target has an entry, the dialog
|
|
24
|
+
* offers the "Use default rule" checkbox switching between the inherited rule (locked) and an
|
|
25
|
+
* authored override (editable) — the whole map (not one resolved value) so an untargeted "Add
|
|
26
|
+
* rule" flow re-derives the right fallback if the user changes target mid-dialog.
|
|
27
|
+
*/
|
|
28
|
+
semanticByTarget?: Record<string, ISemanticConditionalFormatting>;
|
|
29
|
+
/** Deletes THIS specific authored rule (wired only when one exists) — the trash button. */
|
|
30
|
+
onDelete?: () => void;
|
|
31
|
+
/**
|
|
32
|
+
* Reverts to Inherited: clears every authored rule for `target` (a target can have several
|
|
33
|
+
* stacked custom rules, not just this one) AND this rule's own original id — needed together
|
|
34
|
+
* because a non-fixedTarget dialog lets the user retarget before saving, so the rule being
|
|
35
|
+
* edited may not (yet) be one of the rules actually stored against `target`. Distinct from
|
|
36
|
+
* `onDelete`: triggered only by Save while "Use default rule" is checked.
|
|
37
|
+
*/
|
|
38
|
+
onRevertToDefault?: (target: ConditionalFormattingTarget, ruleId: string) => void;
|
|
24
39
|
onSave: (rule: IConditionalFormattingRule) => void;
|
|
25
40
|
onClose: () => void;
|
|
26
41
|
}
|
|
27
42
|
/**
|
|
28
43
|
* @internal
|
|
29
44
|
*/
|
|
30
|
-
export declare function ConditionalFormattingDialog({ rule: initialRule, isNew, targetOptions, separators, dateFilterOptions, dateSettings, alignTo,
|
|
45
|
+
export declare function ConditionalFormattingDialog({ rule: initialRule, isNew, targetOptions, separators, dateFilterOptions, dateSettings, alignTo, fixedTarget, semanticByTarget, onDelete, onRevertToDefault, onSave, onClose }: IConditionalFormattingDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
31
46
|
//# sourceMappingURL=ConditionalFormattingDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionalFormattingDialog.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConditionalFormattingDialog.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,8BAA8B,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EACH,KAAK,2BAA2B,EAEhC,KAAK,0BAA0B,EAClC,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,aAAa,EASrB,MAAM,iCAAiC,CAAC;AAiCzC;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAC9C,IAAI,EAAE,0BAA0B,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,aAAa,EAAE,CAAC;IAC/B,uFAAuF;IACvF,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,mGAAmG;IACnG,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,uFAAuF;IACvF,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,mGAAmG;IACnG,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;IAClE,6FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,2BAA2B,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClF,MAAM,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACnD,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,EACxC,IAAI,EAAE,WAAW,EACjB,KAAK,EACL,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,WAAmB,EACnB,gBAAgB,EAChB,QAAQ,EACR,iBAAiB,EACjB,MAAM,EACN,OAAO,EACV,EAAE,iCAAiC,2CA0SnC"}
|
|
@@ -4,10 +4,12 @@ import { useState } from "react";
|
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { isEqual } from "lodash-es";
|
|
6
6
|
import { useIntl } from "react-intl";
|
|
7
|
-
import {
|
|
7
|
+
import { v4 as uuid } from "uuid";
|
|
8
|
+
import { Button, Overlay, UiCheckbox, UiIconButton, UiTooltip } from "@gooddata/sdk-ui-kit";
|
|
8
9
|
import { conditionalFormattingMessages } from "../../../../locales.js";
|
|
10
|
+
import { DisabledBubbleMessage } from "../../DisabledBubbleMessage.js";
|
|
9
11
|
import { CfSelect } from "./CfSelect.js";
|
|
10
|
-
import { findTargetOption, isDateTarget, isRuleComplete, newCondition, ruleWithTarget, sanitizeRuleForEditing, targetIcon, } from "./conditionalFormattingModel.js";
|
|
12
|
+
import { findTargetOption, isDateTarget, isRuleComplete, newCondition, ruleWithTarget, sanitizeRuleForEditing, targetIcon, targetLocalId, } from "./conditionalFormattingModel.js";
|
|
11
13
|
import { ConditionEditor } from "./ConditionEditor.js";
|
|
12
14
|
import { ReorderList } from "./ReorderList.js";
|
|
13
15
|
// The config panel sits on the right edge of the screen, so open the popover to the LEFT of the
|
|
@@ -16,31 +18,85 @@ const POPOVER_ALIGN_POINTS = [
|
|
|
16
18
|
{ align: "cl cr", offset: { x: -5, y: 0 } },
|
|
17
19
|
{ align: "cr cl", offset: { x: 5, y: 0 } },
|
|
18
20
|
];
|
|
21
|
+
// Small "?" info affordance next to the "Use default rule" checkbox. A real `<button>` anchor (not
|
|
22
|
+
// the older BubbleHoverTrigger/Bubble pair, which only wires mouse enter/leave and never forwards
|
|
23
|
+
// focus-related props to its span) so keyboard/screen-reader users can reach it via Tab too; the
|
|
24
|
+
// full text lives in the button's own aria-label, so the floating tooltip is purely visual.
|
|
25
|
+
function InfoTooltip({ text }) {
|
|
26
|
+
return (_jsx(UiTooltip, { anchor: _jsx("button", { type: "button", className: "gd-cf-dialog__use-default-info gd-icon-circle-question", "aria-label": text }), content: text, accessibilityHidden: true, triggerBy: ["hover", "focus"], arrowPlacement: "right" }));
|
|
27
|
+
}
|
|
19
28
|
/**
|
|
20
29
|
* @internal
|
|
21
30
|
*/
|
|
22
|
-
export function ConditionalFormattingDialog({ rule: initialRule, isNew, targetOptions, separators, dateFilterOptions, dateSettings, alignTo,
|
|
31
|
+
export function ConditionalFormattingDialog({ rule: initialRule, isNew, targetOptions, separators, dateFilterOptions, dateSettings, alignTo, fixedTarget = false, semanticByTarget, onDelete, onRevertToDefault, onSave, onClose, }) {
|
|
23
32
|
const intl = useIntl();
|
|
24
|
-
const initial =
|
|
25
|
-
? initialRule
|
|
26
|
-
: sanitizeRuleForEditing(initialRule, isDateTarget(findTargetOption(targetOptions, initialRule.target)));
|
|
33
|
+
const initial = sanitizeRuleForEditing(initialRule, isDateTarget(findTargetOption(targetOptions, initialRule.target)));
|
|
27
34
|
const [rule, setRule] = useState(initial);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
35
|
+
// The blank multi-target Add-Rule flow (isNew, no fixedTarget) must keep its target picker fully
|
|
36
|
+
// usable — starting "Use default rule" checked there just because targetOptions[0] happens to
|
|
37
|
+
// have a semantic entry would lock the very picker the user needs to choose a different target.
|
|
38
|
+
// Editing an EXISTING rule (isNew false) never starts locked regardless of fixedTarget, so this
|
|
39
|
+
// only needs to suppress the brand-new-blank-rule case specifically.
|
|
40
|
+
const activeSemantic = isNew && !fixedTarget ? undefined : semanticByTarget?.[targetLocalId(rule.target)];
|
|
41
|
+
// Only meaningful the first time the dialog opens: a target with no authored rule yet (isNew)
|
|
42
|
+
// and a semantic default to fall back to starts "on" (Inherited); retargeting mid-authoring
|
|
43
|
+
// never revisits this, matching `ruleWithTarget`'s existing "values reset, mode doesn't" behavior.
|
|
44
|
+
const [wantsDefault, setWantsDefault] = useState(() => isNew && activeSemantic !== undefined);
|
|
45
|
+
// A target's semantic default can disappear while this stays open and checked (the catalog
|
|
46
|
+
// object's rule was deleted elsewhere, or a data-view blip dropped the field) — the checkbox
|
|
47
|
+
// itself vanishes with it (rendered only when `activeSemantic` exists), which would otherwise
|
|
48
|
+
// leave fields silently locked with no visible way to unlock them, and Save would revert/delete
|
|
49
|
+
// against a default that no longer exists. Adjusting `wantsDefault` itself here (during render,
|
|
50
|
+
// not in an effect, so there's never a paint where the checkbox is still stale) rather than only
|
|
51
|
+
// deriving `usingDefault` as false makes the unlock permanent: if the default later reappears
|
|
52
|
+
// while the user has since edited the now-unlocked fields, it must not silently re-lock and
|
|
53
|
+
// discard that edit via Save's revert branch.
|
|
54
|
+
if (activeSemantic === undefined && wantsDefault) {
|
|
55
|
+
setWantsDefault(false);
|
|
56
|
+
}
|
|
57
|
+
const usingDefault = wantsDefault && activeSemantic !== undefined;
|
|
58
|
+
const locked = usingDefault;
|
|
59
|
+
// While using the default, always render the LIVE semantic conditions (never a stale draft);
|
|
60
|
+
// the user's own in-progress edits stay in `rule` untouched so unchecking restores them exactly.
|
|
61
|
+
const displayRule = usingDefault && activeSemantic ? { ...rule, conditions: activeSemantic.conditions } : rule;
|
|
62
|
+
// Tracks whether `rule.conditions` is still just a mirror of the semantic default (safe to
|
|
63
|
+
// silently resync/discard) versus genuinely the user's own content (an existing authored rule,
|
|
64
|
+
// or anything they've edited since) — which must never be clobbered by a later resync. NOT
|
|
65
|
+
// derivable from `isDirty` two lines below: `isDirty` is unconditionally true whenever `isNew`
|
|
66
|
+
// (nothing to compare against yet), but a fresh isNew dialog that opens already checked can be
|
|
67
|
+
// unchecked before any edit — `draftIsDefault` must still read true there (to reseed from the
|
|
68
|
+
// live default) while `isDirty` already reads true for an unrelated reason. `setConditions`
|
|
69
|
+
// below sets both together, so a future condition-mutator can't add itself while forgetting
|
|
70
|
+
// to flip this — the only way to touch `rule.conditions` here goes through it.
|
|
71
|
+
const [draftIsDefault, setDraftIsDefault] = useState(() => isNew);
|
|
72
|
+
const setConditions = (updater) => {
|
|
73
|
+
setDraftIsDefault(false);
|
|
74
|
+
setRule(updater);
|
|
75
|
+
};
|
|
76
|
+
const updateCondition = (id, next) => {
|
|
77
|
+
setConditions((current) => ({
|
|
78
|
+
...current,
|
|
79
|
+
conditions: current.conditions.map((condition) => (condition.id === id ? next : condition)),
|
|
80
|
+
}));
|
|
81
|
+
};
|
|
82
|
+
const removeCondition = (id) => {
|
|
83
|
+
setConditions((current) => ({
|
|
84
|
+
...current,
|
|
85
|
+
conditions: current.conditions.filter((condition) => condition.id !== id),
|
|
86
|
+
}));
|
|
87
|
+
};
|
|
88
|
+
const addCondition = () => {
|
|
89
|
+
setConditions((current) => ({
|
|
90
|
+
...current,
|
|
91
|
+
conditions: [
|
|
92
|
+
...current.conditions,
|
|
93
|
+
newCondition(isDateTarget(findTargetOption(targetOptions, current.target))),
|
|
94
|
+
],
|
|
95
|
+
}));
|
|
96
|
+
};
|
|
97
|
+
const reorderConditions = (conditions) => {
|
|
98
|
+
setConditions((current) => ({ ...current, conditions }));
|
|
99
|
+
};
|
|
44
100
|
const changeTarget = (value) => {
|
|
45
101
|
const option = targetOptions.find((candidate) => candidate.value === value);
|
|
46
102
|
if (!option) {
|
|
@@ -54,11 +110,23 @@ export function ConditionalFormattingDialog({ rule: initialRule, isNew, targetOp
|
|
|
54
110
|
const suggestions = selectedTarget?.elements ?? [];
|
|
55
111
|
const complete = isRuleComplete(rule, selectedTarget?.date);
|
|
56
112
|
const isDirty = isNew || !isEqual(rule, initial);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
113
|
+
// A target with a semantic default reads as a plain "Rule" regardless of which side of the
|
|
114
|
+
// checkbox it's on — the Add/Edit split only applies to targets with no default to switch to.
|
|
115
|
+
const title = intl.formatMessage(activeSemantic === undefined
|
|
116
|
+
? isNew
|
|
60
117
|
? conditionalFormattingMessages.dialogAddTitle
|
|
61
|
-
: conditionalFormattingMessages.dialogEditTitle
|
|
118
|
+
: conditionalFormattingMessages.dialogEditTitle
|
|
119
|
+
: conditionalFormattingMessages.dialogRuleTitle);
|
|
120
|
+
// Nothing authored yet to delete while still on the default — the disabled state points the
|
|
121
|
+
// user at the (separate) rule-list toggle instead, per the mock's tooltip. Also disabled whenever
|
|
122
|
+
// the caller hasn't actually given us a way to delete anything: `onDelete` is only real when the
|
|
123
|
+
// caller (Section today) found an authored rule for this dialog's synthetic-or-real id, so its
|
|
124
|
+
// absence must disable the button too, not just leave it clickable-but-inert.
|
|
125
|
+
const deleteDisabled = isNew || !onDelete;
|
|
126
|
+
// The blank multi-target Add-Rule flow (isNew, no fixedTarget) has nothing to show a delete
|
|
127
|
+
// affordance for at all — everywhere else (a semantic-fallback view, or an existing authored
|
|
128
|
+
// rule) shows one, disabled per `deleteDisabled` above when there's genuinely nothing to delete.
|
|
129
|
+
const showDelete = fixedTarget || !isNew;
|
|
62
130
|
return (_jsx(Overlay, { alignTo: alignTo, alignPoints: POPOVER_ALIGN_POINTS, closeOnParentScroll: true, closeOnMouseDrag: true, onClose: onClose, children: _jsxs("div", { className: "gd-cf-dialog", "aria-label": title, children: [
|
|
63
131
|
_jsxs("div", { className: "gd-cf-dialog__header", children: [
|
|
64
132
|
_jsx("h3", { className: "gd-cf-dialog__title", children: title }), _jsx(Button, { className: "gd-button-link gd-button-icon-only gd-icon-cross", accessibilityConfig: {
|
|
@@ -67,15 +135,57 @@ export function ConditionalFormattingDialog({ rule: initialRule, isNew, targetOp
|
|
|
67
135
|
] }), _jsxs("div", { className: "gd-cf-dialog__body", children: [
|
|
68
136
|
_jsx("span", { className: "gd-cf-dialog__label", children: intl.formatMessage(conditionalFormattingMessages.dialogTarget) }), singleTarget ? (_jsxs("div", { className: "gd-cf-dialog__static-target", children: [
|
|
69
137
|
_jsx("span", { className: cx("gd-cf-type-icon", targetIcon(singleTarget.target.kind, isDateTarget(singleTarget))), "aria-hidden": "true" }), _jsx("span", { className: "gd-cf-dialog__static-target-title", children: singleTarget.title })
|
|
70
|
-
] })) : (_jsx("fieldset", { className: "gd-cf-dialog__target-picker", disabled:
|
|
138
|
+
] })) : (_jsx("fieldset", { className: "gd-cf-dialog__target-picker", disabled: locked, children: _jsx(CfSelect, { value: selectedTarget?.value, items: targetOptions.map((option) => ({
|
|
71
139
|
value: option.value,
|
|
72
140
|
title: option.title,
|
|
73
141
|
icon: targetIcon(option.target.kind, isDateTarget(option)),
|
|
74
|
-
})), onSelect: changeTarget, placeholder: intl.formatMessage(conditionalFormattingMessages.dialogSelectTarget) }) })), _jsxs("
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
142
|
+
})), onSelect: changeTarget, placeholder: intl.formatMessage(conditionalFormattingMessages.dialogSelectTarget) }) })), activeSemantic ? (_jsxs("div", { className: "gd-cf-dialog__use-default", children: [
|
|
143
|
+
_jsx(UiCheckbox, { checked: usingDefault, onChange: (e) => {
|
|
144
|
+
const nextUseDefault = e.target.checked;
|
|
145
|
+
// Reseed from the live semantic value exactly at the moment of
|
|
146
|
+
// unchecking — but only while the draft is still just a mirror of
|
|
147
|
+
// the default (draftIsDefault): an existing authored rule, or
|
|
148
|
+
// anything the user has actually edited, must never be clobbered.
|
|
149
|
+
// This still fixes the "fresher payload arrived while this stayed
|
|
150
|
+
// checked" case, since fields are locked (nothing to edit) for as
|
|
151
|
+
// long as it's checked, so draftIsDefault can't have gone false then.
|
|
152
|
+
if (!nextUseDefault && activeSemantic && draftIsDefault) {
|
|
153
|
+
// Sanitize like any other externally-authored rule: a
|
|
154
|
+
// semantic condition can carry an operator/value shape this
|
|
155
|
+
// editor doesn't support (e.g. from an AAC-authored default),
|
|
156
|
+
// which would otherwise dead-end with Save disabled.
|
|
157
|
+
setRule((current) => sanitizeRuleForEditing({ ...current, conditions: activeSemantic.conditions }, isDateTarget(selectedTarget)));
|
|
158
|
+
}
|
|
159
|
+
setWantsDefault(nextUseDefault);
|
|
160
|
+
}, label: intl.formatMessage(conditionalFormattingMessages.dialogUseDefaultRule) }), _jsx(InfoTooltip, { text: intl.formatMessage(conditionalFormattingMessages.dialogUseDefaultRuleInfo) })
|
|
161
|
+
] })) : null, _jsxs("fieldset", { disabled: locked, className: cx("gd-cf-dialog__editable", {
|
|
162
|
+
"gd-cf-dialog__editable--readonly": locked,
|
|
163
|
+
}), children: [_jsx(ReorderList, { items: displayRule.conditions, getKey: (condition) => condition.id, onReorder: reorderConditions, disabled: locked, renderItem: (condition, slot) => (_jsx(ConditionEditor, { condition: condition, kind: rule.target.kind, isPercent: isPercent, separators: separators, suggestions: suggestions, date: selectedTarget?.date, dateFilterOptions: dateFilterOptions, dateSettings: dateSettings, removable: displayRule.conditions.length > 1, slot: slot, readOnly: locked, onChange: (next) => updateCondition(condition.id, next), onRemove: () => removeCondition(condition.id) })) }), locked ? null : (_jsx(Button, { className: "gd-button-secondary gd-cf-dialog__add-condition", iconLeft: "gd-icon-plus", value: intl.formatMessage(conditionalFormattingMessages.dialogAddCondition), onClick: addCondition }))] })
|
|
164
|
+
] }), _jsxs("div", { className: "gd-cf-dialog__footer", children: [showDelete ? (_jsx(DisabledBubbleMessage, { className: "gd-cf-dialog__delete", showDisabledMessage: deleteDisabled, messageId: conditionalFormattingMessages.dialogRuleCannotBeDeleted.id, children: _jsx(UiIconButton, { icon: "trash", size: "small", variant: "tertiary", isDesctructive: true, isDisabled: deleteDisabled, label: intl.formatMessage(conditionalFormattingMessages.ruleDelete), onClick: () => {
|
|
165
|
+
onDelete?.();
|
|
166
|
+
onClose();
|
|
167
|
+
} }) })) : null, _jsx(Button, { className: "gd-button-secondary", value: intl.formatMessage(conditionalFormattingMessages.dialogCancel), onClick: onClose }), _jsx(Button, { className: "gd-button-action", value: intl.formatMessage(conditionalFormattingMessages.dialogSave), disabled: usingDefault ? false : !complete || !isDirty, onClick: () => {
|
|
168
|
+
if (usingDefault) {
|
|
169
|
+
// Revert (not delete-this-one): clears every rule already stored
|
|
170
|
+
// against the CURRENT target, plus this rule's own id — needed
|
|
171
|
+
// together because a retarget-then-revert (no fixedTarget) means
|
|
172
|
+
// the rule being edited may still sit under its OLD target in
|
|
173
|
+
// `rules`, not yet the one now selected in this draft. Gated on
|
|
174
|
+
// `isNew` alone, deliberately NOT on `deleteDisabled` — `onDelete` and
|
|
175
|
+
// `onRevertToDefault` are independent optional props, and tying revert
|
|
176
|
+
// eligibility to whether a delete callback happens to be provided
|
|
177
|
+
// would silently skip a valid revert for a caller that only wired one.
|
|
178
|
+
if (!isNew) {
|
|
179
|
+
onRevertToDefault?.(rule.target, rule.id);
|
|
180
|
+
}
|
|
181
|
+
onClose();
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
// A dialog opened straight from a semantic row (`semanticRuleFor`) still
|
|
185
|
+
// carries that display-only synthetic id — give it a real one the instant
|
|
186
|
+
// it's actually persisted, exactly like every other freshly authored rule.
|
|
187
|
+
onSave(isNew ? { ...rule, id: uuid() } : rule);
|
|
188
|
+
} })
|
|
189
|
+
] })
|
|
80
190
|
] }) }));
|
|
81
191
|
}
|
|
@@ -14,6 +14,24 @@ export interface IConditionalFormattingSectionProps {
|
|
|
14
14
|
separators?: ISeparators;
|
|
15
15
|
isLoading?: boolean;
|
|
16
16
|
pushData?: (data: unknown) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Whether insight-level (authored) rules can apply at all — mirrors
|
|
19
|
+
* `isConditionalFormattingEnabled` in PluggablePivotTableNext.tsx. When `false`, the master
|
|
20
|
+
* toggle, "Add rule" button, and any authored rule list are hidden entirely: those controls edit
|
|
21
|
+
* `properties.controls.conditionalFormatting`, which the engine ignores while this is off, so
|
|
22
|
+
* showing them would let a user "author" formatting that silently never paints. The semantic
|
|
23
|
+
* block is unaffected — it has its own independent flag below. Defaults to `true` (existing
|
|
24
|
+
* behavior): most callers only ever render this section when insight-level CF is on.
|
|
25
|
+
*/
|
|
26
|
+
enableConditionalFormatting?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Mirrors the engine's own `enableSemanticConditionalFormatting` (set in
|
|
29
|
+
* PluggablePivotTableNext.tsx from the same setting, by design, today) — a distinct prop rather
|
|
30
|
+
* than an assumption baked into this component, so the "From semantic layer" block can't drift
|
|
31
|
+
* out of sync with what the table actually paints if semantic inheritance ever gets its own flag.
|
|
32
|
+
* Defaults to `false`: never show inherited rows the caller hasn't confirmed the engine will paint.
|
|
33
|
+
*/
|
|
34
|
+
enableSemanticConditionalFormatting?: boolean;
|
|
17
35
|
}
|
|
18
|
-
export declare function ConditionalFormattingSection({ properties, propertiesMeta, insight, targetData, backend, workspace, dateSettings, separators, isLoading, pushData }: IConditionalFormattingSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export declare function ConditionalFormattingSection({ properties, propertiesMeta, insight, targetData, backend, workspace, dateSettings, separators, isLoading, pushData, enableConditionalFormatting, enableSemanticConditionalFormatting }: IConditionalFormattingSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
19
37
|
//# sourceMappingURL=ConditionalFormattingSection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionalFormattingSection.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACH,KAAK,kBAAkB,EAEvB,KAAK,WAAW,EACnB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAIrF,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"ConditionalFormattingSection.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACH,KAAK,kBAAkB,EAEvB,KAAK,WAAW,EACnB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAIrF,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,aAAa,EAcrB,MAAM,iCAAiC,CAAC;AAYzC,MAAM,WAAW,kCAAkC;IAC/C,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,yFAAyF;IACzF,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC;;;;;;;;OAQG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;;OAMG;IACH,mCAAmC,CAAC,EAAE,OAAO,CAAC;CACjD;AAkJD,wBAAgB,4BAA4B,CAAC,EACzC,UAAU,EACV,cAAc,EACd,OAAO,EACP,UAAU,EACV,OAAO,EACP,SAAS,EACT,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,2BAAkC,EAClC,mCAA2C,EAC9C,EAAE,kCAAkC,2CAkSpC"}
|