@gooddata/sdk-ui-ext 11.58.0-alpha.2 → 11.58.0-alpha.3
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 +8 -8
- package/esm/index.d.ts +2 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -0
- package/esm/insightToTable/geoDefaultDisplayFormRefs.d.ts +10 -0
- package/esm/insightToTable/geoDefaultDisplayFormRefs.d.ts.map +1 -0
- package/esm/insightToTable/geoDefaultDisplayFormRefs.js +33 -0
- package/esm/insightToTable/insightToTable.d.ts +75 -0
- package/esm/insightToTable/insightToTable.d.ts.map +1 -0
- package/esm/insightToTable/insightToTable.js +482 -0
- package/esm/sdk-ui-ext.d.ts +77 -0
- package/package.json +21 -21
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-9-
|
|
10
|
+
Date generated: 2026-9-21
|
|
11
11
|
|
|
12
|
-
Revision ID:
|
|
12
|
+
Revision ID: d287888cbc82806bcb9866c66ecff9b2ff92c32b
|
|
13
13
|
|
|
14
14
|
================================================================================
|
|
15
15
|
================================================================================
|
|
@@ -13663,7 +13663,7 @@ MIT
|
|
|
13663
13663
|
|
|
13664
13664
|
Authors: 1075746765@qq.com, afc163@gmail.com, scdzwyxst@gmail.com, smith3816@gmail.com, wasd2144@hotmail.com
|
|
13665
13665
|
Package Manager: NPM
|
|
13666
|
-
Project URL: https://
|
|
13666
|
+
Project URL: https://react-component.github.io/resize-observer
|
|
13667
13667
|
Package Download URL: https://registry.npmjs.org/@rc-component/resize-observer/-/resize-observer-1.1.2.tgz
|
|
13668
13668
|
Dependency Path: @rc-component/picker > @rc-component/overflow > @rc-component/resize-observer > @rc-component/picker > @rc-component/resize-observer > @rc-component/picker > @rc-component/trigger > @rc-component/resize-observer
|
|
13669
13669
|
File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
|
|
@@ -21127,7 +21127,7 @@ MIT
|
|
|
21127
21127
|
|
|
21128
21128
|
Authors: ljharb@gmail.com
|
|
21129
21129
|
Package Manager: NPM
|
|
21130
|
-
Project URL: https://
|
|
21130
|
+
Project URL: https://github.com/ljharb/call-bind-apply-helpers#readme
|
|
21131
21131
|
Package Download URL: https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz
|
|
21132
21132
|
Dependency Path: @formatjs/cli-lib > @formatjs/ts-transformer > json-stable-stringify > call-bind > set-function-length > get-intrinsic > call-bind-apply-helpers > @formatjs/cli-lib > @types/json-stable-stringify > json-stable-stringify > call-bind > set-function-length > get-intrinsic > call-bind-apply-helpers > @formatjs/cli-lib > json-stable-stringify > call-bind > set-function-length > get-intrinsic > call-bind-apply-helpers > axios > form-data > es-set-tostringtag > get-intrinsic > call-bind-apply-helpers > json-stable-stringify > call-bind > call-bind-apply-helpers > json-stable-stringify > call-bind > get-intrinsic > call-bind-apply-helpers > json-stable-stringify > call-bind > get-intrinsic > get-proto > dunder-proto > call-bind-apply-helpers > json-stable-stringify > call-bind > set-function-length > get-intrinsic > call-bind-apply-helpers > json-stable-stringify > call-bound > call-bind-apply-helpers > json-stable-stringify > call-bound > get-intrinsic > call-bind-apply-helpers
|
|
21133
21133
|
File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
|
|
@@ -30212,7 +30212,7 @@ MIT
|
|
|
30212
30212
|
|
|
30213
30213
|
Authors: ljharb@gmail.com
|
|
30214
30214
|
Package Manager: NPM
|
|
30215
|
-
Project URL: https://
|
|
30215
|
+
Project URL: https://github.com/ljharb/gopd#readme
|
|
30216
30216
|
Package Download URL: https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz
|
|
30217
30217
|
Dependency Path: @formatjs/cli-lib > @formatjs/ts-transformer > @types/json-stable-stringify > json-stable-stringify > call-bind > set-function-length > gopd > @formatjs/cli-lib > @formatjs/ts-transformer > json-stable-stringify > call-bind > set-function-length > gopd > @formatjs/cli-lib > @types/json-stable-stringify > json-stable-stringify > call-bind > set-function-length > gopd > @formatjs/cli-lib > json-stable-stringify > call-bind > set-function-length > gopd > axios > form-data > es-set-tostringtag > get-intrinsic > gopd > json-stable-stringify > call-bind > get-intrinsic > get-proto > dunder-proto > gopd > json-stable-stringify > call-bind > get-intrinsic > gopd > json-stable-stringify > call-bind > set-function-length > define-data-property > gopd > json-stable-stringify > call-bind > set-function-length > gopd > json-stable-stringify > call-bound > get-intrinsic > gopd
|
|
30218
30218
|
File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
|
|
@@ -38217,7 +38217,7 @@ MIT
|
|
|
38217
38217
|
|
|
38218
38218
|
Authors: tituswormer@gmail.com
|
|
38219
38219
|
Package Manager: NPM
|
|
38220
|
-
Project URL: https://
|
|
38220
|
+
Project URL: https://github.com/wooorm/mathml-tag-names#readme
|
|
38221
38221
|
Package Download URL: https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz
|
|
38222
38222
|
Dependency Path: stylelint > mathml-tag-names > stylelint-config-standard > stylelint > mathml-tag-names > stylelint-config-standard > stylelint-config-recommended > stylelint > mathml-tag-names > stylelint-order > stylelint > mathml-tag-names > stylelint-plugin-defensive-css > stylelint > mathml-tag-names > stylelint-scss > stylelint > mathml-tag-names
|
|
38223
38223
|
File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
|
|
@@ -43603,7 +43603,7 @@ MIT
|
|
|
43603
43603
|
|
|
43604
43604
|
Authors: daniel@touchlay.com, npm@joshuakgoldberg.com
|
|
43605
43605
|
Package Manager: NPM
|
|
43606
|
-
Project URL: https://
|
|
43606
|
+
Project URL: https://github.com/omnidan/node-emoji#readme
|
|
43607
43607
|
Package Download URL: https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz
|
|
43608
43608
|
Dependency Path: remark-emoji > node-emoji
|
|
43609
43609
|
File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
|
|
@@ -64914,4 +64914,4 @@ File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
|
|
|
64914
64914
|
--------------------------------------------------------------------------------
|
|
64915
64915
|
--------------------------------------------------------------------------------
|
|
64916
64916
|
|
|
64917
|
-
Report Generated by FOSSA on 2026-9-
|
|
64917
|
+
Report Generated by FOSSA on 2026-9-21
|
package/esm/index.d.ts
CHANGED
|
@@ -87,4 +87,6 @@ export { accessListToSummary, draftToSummary, type ObjectShareLevel, summaryOthe
|
|
|
87
87
|
export { isPermissionsNotAvailable } from "./share/accessErrors.js";
|
|
88
88
|
export { type IObjectAccessLevel, type IUseObjectAccessLevelOptions, useObjectAccessLevel, } from "./share/useObjectAccessLevel.js";
|
|
89
89
|
export type { IObjectAccessSummary, IObjectShareLabel } from "./share/types.js";
|
|
90
|
+
export { type ILayerTableConversionOptions, type ILayerTableDefinition, canConvertToTable, convertInsightToLayerTables, convertInsightToTableDefinition, supportsShowAsTable, } from "./insightToTable/insightToTable.js";
|
|
91
|
+
export { getGeoTableDisplayFormRefs } from "./insightToTable/geoDefaultDisplayFormRefs.js";
|
|
90
92
|
//# sourceMappingURL=index.d.ts.map
|
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
|
@@ -79,3 +79,5 @@ export { useCopyObjectPermissions } from "./share/useCopyObjectPermissions.js";
|
|
|
79
79
|
export { accessListToSummary, draftToSummary, summaryOtherGranteeCount, summaryToShareLevel, } from "./share/accessSummary.js";
|
|
80
80
|
export { isPermissionsNotAvailable } from "./share/accessErrors.js";
|
|
81
81
|
export { useObjectAccessLevel, } from "./share/useObjectAccessLevel.js";
|
|
82
|
+
export { canConvertToTable, convertInsightToLayerTables, convertInsightToTableDefinition, supportsShowAsTable, } from "./insightToTable/insightToTable.js";
|
|
83
|
+
export { getGeoTableDisplayFormRefs } from "./insightToTable/geoDefaultDisplayFormRefs.js";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type IAttributeWithReferences } from "@gooddata/sdk-backend-spi";
|
|
2
|
+
import { type GeoLayerType, type IBucket, type ICatalogAttribute, type IInsight, type ISettings, type ObjRef } from "@gooddata/sdk-model";
|
|
3
|
+
/**
|
|
4
|
+
* The display form each geo attribute is read through when the insight states none of its own.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export declare function getGeoTableDisplayFormRefs(insight: IInsight, settings: ISettings | undefined, catalogAttributes: ICatalogAttribute[], preloadedAttributesWithReferences?: IAttributeWithReferences[]): Map<string, ObjRef> | undefined;
|
|
9
|
+
export declare function resolveGeoDefaultDisplayFormRefs(layerType: GeoLayerType, buckets: IBucket[], catalogAttributes: ICatalogAttribute[], preloadedAttributesWithReferences?: IAttributeWithReferences[]): Map<string, ObjRef> | undefined;
|
|
10
|
+
//# sourceMappingURL=geoDefaultDisplayFormRefs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geoDefaultDisplayFormRefs.d.ts","sourceRoot":"","sources":["../../src/insightToTable/geoDefaultDisplayFormRefs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EACH,KAAK,YAAY,EAEjB,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,MAAM,EAQd,MAAM,qBAAqB,CAAC;AAO7B;;;;GAIG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,SAAS,GAAG,SAAS,EAC/B,iBAAiB,EAAE,iBAAiB,EAAE,EACtC,iCAAiC,CAAC,EAAE,wBAAwB,EAAE,GAC/D,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAiBjC;AAED,wBAAgB,gCAAgC,CAC5C,SAAS,EAAE,YAAY,EACvB,OAAO,EAAE,OAAO,EAAE,EAClB,iBAAiB,EAAE,iBAAiB,EAAE,EACtC,iCAAiC,CAAC,EAAE,wBAAwB,EAAE,GAC/D,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAmBjC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// (C) 2025-2026 GoodData Corporation
|
|
2
|
+
import { GeoLayerTypes, attributeDisplayFormRef, bucketAttribute, bucketsFind, geoLayerTypeFromVisualizationType, insightBuckets, insightVisualizationType, serializeObjRef, } from "@gooddata/sdk-model";
|
|
3
|
+
import { BucketNames, isGeoVisualizationUsingNewEngine, resolveDefaultDisplayFormRefForDisplayForm, } from "@gooddata/sdk-ui";
|
|
4
|
+
/**
|
|
5
|
+
* The display form each geo attribute is read through when the insight states none of its own.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export function getGeoTableDisplayFormRefs(insight, settings, catalogAttributes, preloadedAttributesWithReferences) {
|
|
10
|
+
const type = insightVisualizationType(insight);
|
|
11
|
+
if (!isGeoVisualizationUsingNewEngine(type, settings)) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const layerType = geoLayerTypeFromVisualizationType(type);
|
|
15
|
+
if (!layerType) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
return resolveGeoDefaultDisplayFormRefs(layerType, insightBuckets(insight), catalogAttributes, preloadedAttributesWithReferences);
|
|
19
|
+
}
|
|
20
|
+
export function resolveGeoDefaultDisplayFormRefs(layerType, buckets, catalogAttributes, preloadedAttributesWithReferences) {
|
|
21
|
+
const bucketName = layerType === GeoLayerTypes.AREA ? BucketNames.AREA : BucketNames.LOCATION;
|
|
22
|
+
const geoBucket = bucketsFind(buckets, bucketName);
|
|
23
|
+
const geoAttribute = geoBucket ? bucketAttribute(geoBucket) : undefined;
|
|
24
|
+
if (!geoAttribute) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const geoDisplayFormRef = attributeDisplayFormRef(geoAttribute);
|
|
28
|
+
const defaultDisplayFormRef = resolveDefaultDisplayFormRefForDisplayForm(geoDisplayFormRef, catalogAttributes, preloadedAttributesWithReferences);
|
|
29
|
+
if (!defaultDisplayFormRef) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return new Map([[serializeObjRef(geoDisplayFormRef), defaultDisplayFormRef]]);
|
|
33
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type IAttributeWithReferences } from "@gooddata/sdk-backend-spi";
|
|
2
|
+
import { type ICatalogAttribute, type IInsight, type ISettings } from "@gooddata/sdk-model";
|
|
3
|
+
import { type GeoTableConversionOptions } from "@gooddata/sdk-ui";
|
|
4
|
+
/**
|
|
5
|
+
* Determines if a visualization type supports the "Show as Table" UI button.
|
|
6
|
+
* This controls whether users can manually toggle table view in the UI.
|
|
7
|
+
*
|
|
8
|
+
* @param insightType - The visualization type to check
|
|
9
|
+
* @returns true if the visualization supports the Show as Table UI feature
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare function supportsShowAsTable(insightType?: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Determines if a visualization type can be converted to table format.
|
|
15
|
+
* This is used for accessibility and export purposes, separate from UI controls.
|
|
16
|
+
*
|
|
17
|
+
* @param insightType - The visualization type to check
|
|
18
|
+
* @returns true if the visualization can be converted to table format
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export declare function canConvertToTable(insightType?: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Defines a single layer's table conversion result for multi-layer geo charts.
|
|
24
|
+
*
|
|
25
|
+
* @alpha
|
|
26
|
+
*/
|
|
27
|
+
export interface ILayerTableDefinition {
|
|
28
|
+
/** Stable id — "root" for root layer, layer.id for additional layers */
|
|
29
|
+
layerId: string;
|
|
30
|
+
/** Human-readable name for the tab label */
|
|
31
|
+
layerName: string;
|
|
32
|
+
/** Normalized layer type */
|
|
33
|
+
layerType: string;
|
|
34
|
+
/** Converted table insight for this layer */
|
|
35
|
+
tableInsight: IInsight;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Options steering how a multi-layer geo insight is turned into per-layer tables.
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export interface ILayerTableConversionOptions {
|
|
43
|
+
settings?: ISettings;
|
|
44
|
+
catalogAttributes?: ICatalogAttribute[];
|
|
45
|
+
preloadedAttributesWithReferences?: IAttributeWithReferences[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Converts a multi-layer geo insight into per-layer table definitions.
|
|
49
|
+
*
|
|
50
|
+
* Returns `undefined` when the insight is not a new-geo type (flags off, non-geo, etc.).
|
|
51
|
+
* Returns an array of {@link ILayerTableDefinition} with root layer first, then
|
|
52
|
+
* additional layers in their original order.
|
|
53
|
+
*
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
export declare function convertGeoInsightToLayerTables(insight: IInsight, options: ILayerTableConversionOptions): ILayerTableDefinition[] | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Converts an insight to layered table definitions.
|
|
59
|
+
*
|
|
60
|
+
* @remarks
|
|
61
|
+
* Currently supports geo insights only and is gated by `enableGeoChartA11yImprovements`.
|
|
62
|
+
*
|
|
63
|
+
* @internal
|
|
64
|
+
*/
|
|
65
|
+
export declare function convertInsightToLayerTables(insight: IInsight, options: ILayerTableConversionOptions): ILayerTableDefinition[] | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Converts any insight (except of type "table", "repeater", or "xirr") to a table insight definition.
|
|
68
|
+
* For table, repeater, or xirr insights, returns the original insight.
|
|
69
|
+
*
|
|
70
|
+
* @param insight - The input insight to convert.
|
|
71
|
+
* @returns IInsight with table visualization or the original insight if conversion is not supported.
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
export declare function convertInsightToTableDefinition(insight: IInsight, options?: GeoTableConversionOptions): IInsight;
|
|
75
|
+
//# sourceMappingURL=insightToTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insightToTable.d.ts","sourceRoot":"","sources":["../../src/insightToTable/insightToTable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAQH,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EAEb,KAAK,SAAS,EAyBjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEH,KAAK,yBAAyB,EAIjC,MAAM,kBAAkB,CAAC;AAI1B;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAOjE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/D;AAsYD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,YAAY,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACxC,iCAAiC,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAClE;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC1C,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,4BAA4B,GACtC,qBAAqB,EAAE,GAAG,SAAS,CAsDrC;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACvC,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,4BAA4B,GACtC,qBAAqB,EAAE,GAAG,SAAS,CAErC;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAC3C,OAAO,EAAE,QAAQ,EACjB,OAAO,GAAE,yBAA8B,GACxC,QAAQ,CA+HV"}
|
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
// (C) 2025-2026 GoodData Corporation
|
|
2
|
+
import { GeoLayerTypes, areObjRefsEqual, attributeAlias, attributeDisplayFormRef, attributeLocalId, bucketAttribute, bucketMeasure, bucketsFind, geoLayerTypeFromVisualizationType, idRef, insightBuckets, insightLayers, insightMeasures, insightProperties, insightSorts, insightVisualizationType, isGeoLayerType, isPoPMeasure, isPreviousPeriodMeasure, isUriRef, newAttribute, newVirtualArithmeticMeasure, serializeObjRef, uriRef, } from "@gooddata/sdk-model";
|
|
3
|
+
import { BucketNames, VisualizationTypes, convertGeoInsightToTableDefinition as convertGeoInsightToTableDefinitionShared, isGeoVisualizationUsingNewEngine, } from "@gooddata/sdk-ui";
|
|
4
|
+
import { resolveGeoDefaultDisplayFormRefs } from "./geoDefaultDisplayFormRefs.js";
|
|
5
|
+
/**
|
|
6
|
+
* Determines if a visualization type supports the "Show as Table" UI button.
|
|
7
|
+
* This controls whether users can manually toggle table view in the UI.
|
|
8
|
+
*
|
|
9
|
+
* @param insightType - The visualization type to check
|
|
10
|
+
* @returns true if the visualization supports the Show as Table UI feature
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export function supportsShowAsTable(insightType) {
|
|
14
|
+
return (insightType !== "table" &&
|
|
15
|
+
insightType !== "repeater" &&
|
|
16
|
+
insightType !== "headline" &&
|
|
17
|
+
insightType !== "xirr");
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Determines if a visualization type can be converted to table format.
|
|
21
|
+
* This is used for accessibility and export purposes, separate from UI controls.
|
|
22
|
+
*
|
|
23
|
+
* @param insightType - The visualization type to check
|
|
24
|
+
* @returns true if the visualization can be converted to table format
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export function canConvertToTable(insightType) {
|
|
28
|
+
return insightType !== "table" && insightType !== "repeater" && insightType !== "xirr";
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Default format strings for comparison calculations
|
|
32
|
+
* These match the defaults from sdk-ui-charts/headlineHelper.ts CALCULATION_VALUES_DEFAULT
|
|
33
|
+
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* - CHANGE: Percentage change between primary and secondary
|
|
36
|
+
* - RATIO: Ratio of primary to secondary as percentage
|
|
37
|
+
* - DIFFERENCE: Absolute difference (null means inherit from primary measure)
|
|
38
|
+
* - CHANGE_DIFFERENCE: Both percentage and absolute (sub-value uses null to inherit)
|
|
39
|
+
*/
|
|
40
|
+
const COMPARISON_FORMATS = {
|
|
41
|
+
change: "#,##0%",
|
|
42
|
+
ratio: "#,##0%",
|
|
43
|
+
difference: null, // null means inherit format from primary measure
|
|
44
|
+
change_difference: {
|
|
45
|
+
main: "#,##0%",
|
|
46
|
+
sub: null, // Absolute difference (inherit)
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Extracts comparison configuration from insight properties
|
|
51
|
+
*/
|
|
52
|
+
function getComparisonConfig(insight) {
|
|
53
|
+
const properties = insightProperties(insight);
|
|
54
|
+
return properties["controls"]?.comparison;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Checks if a headline insight has comparison enabled and exactly one secondary measure
|
|
58
|
+
* Matches the logic from HeadlineProviderFactory.isComparisonType in sdk-ui-charts
|
|
59
|
+
*
|
|
60
|
+
* @param insight - The insight to check
|
|
61
|
+
* @returns true if the insight is a headline with comparison enabled
|
|
62
|
+
*
|
|
63
|
+
* @remarks
|
|
64
|
+
* A headline qualifies for comparison if:
|
|
65
|
+
* 1. It's a "headline" visualization type
|
|
66
|
+
* 2. It has both a primary and secondary measure
|
|
67
|
+
* 3. Comparison is enabled in config (defaults to true)
|
|
68
|
+
*
|
|
69
|
+
*/
|
|
70
|
+
function isHeadlineWithComparison(insight) {
|
|
71
|
+
const type = insightVisualizationType(insight);
|
|
72
|
+
if (type !== "headline") {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
const buckets = insightBuckets(insight);
|
|
76
|
+
const primaryBucket = bucketsFind(buckets, BucketNames.MEASURES);
|
|
77
|
+
const secondaryBucket = bucketsFind(buckets, BucketNames.SECONDARY_MEASURES);
|
|
78
|
+
const primaryMeasure = primaryBucket && bucketMeasure(primaryBucket);
|
|
79
|
+
const secondaryMeasure = secondaryBucket && bucketMeasure(secondaryBucket);
|
|
80
|
+
if (!primaryMeasure || !secondaryMeasure) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
const comparison = getComparisonConfig(insight);
|
|
84
|
+
return comparison?.enabled ?? true;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Determines the calculation type for headline comparison
|
|
88
|
+
* Matches the logic from ComparisonProvider in sdk-ui-charts
|
|
89
|
+
*
|
|
90
|
+
* @param secondaryMeasure - The secondary measure to compare against
|
|
91
|
+
* @param comparison - Optional comparison configuration from insight properties
|
|
92
|
+
* @returns The calculation type to use
|
|
93
|
+
*
|
|
94
|
+
* @remarks
|
|
95
|
+
* Default logic (when no calculationType is configured):
|
|
96
|
+
* - If secondary measure is derived (PoP, Previous Period) → use "change" (percentage change)
|
|
97
|
+
* - If secondary measure is regular → use "ratio" (proportion)
|
|
98
|
+
*
|
|
99
|
+
*/
|
|
100
|
+
function getCalculationType(secondaryMeasure, comparison) {
|
|
101
|
+
if (comparison?.calculationType) {
|
|
102
|
+
return comparison.calculationType;
|
|
103
|
+
}
|
|
104
|
+
if (isPoPMeasure(secondaryMeasure) || isPreviousPeriodMeasure(secondaryMeasure)) {
|
|
105
|
+
return "change";
|
|
106
|
+
}
|
|
107
|
+
return "ratio";
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Creates virtual arithmetic measures for headline comparison
|
|
111
|
+
* Replicates the logic from ComparisonProvider in sdk-ui-charts
|
|
112
|
+
*
|
|
113
|
+
* @param primaryMeasure - The primary measure
|
|
114
|
+
* @param secondaryMeasure - The secondary measure to compare against
|
|
115
|
+
* @param calculationType - The type of calculation to perform
|
|
116
|
+
* @returns Array of virtual arithmetic measures (1 or 2 depending on calculation type)
|
|
117
|
+
*
|
|
118
|
+
* @remarks
|
|
119
|
+
* Virtual arithmetic measures are calculated by the backend:
|
|
120
|
+
* - "change": ((primary - secondary) / secondary) * 100
|
|
121
|
+
* - "ratio": (primary / secondary)
|
|
122
|
+
* - "difference": (primary - secondary)
|
|
123
|
+
* - "change_difference": Both change AND difference as separate measures
|
|
124
|
+
*
|
|
125
|
+
* The backend performs all calculations; we just create the measure definitions.
|
|
126
|
+
* Format strings are applied so values display correctly (e.g., "25%" instead of "0.25").
|
|
127
|
+
*
|
|
128
|
+
* @see {@link sdk-backend-tiger/MeasureConverter.ts#convertArithmeticMeasureDefinition}
|
|
129
|
+
*/
|
|
130
|
+
function createHeadlineComparisonMeasures(primaryMeasure, secondaryMeasure, calculationType) {
|
|
131
|
+
const createVirtualArithmeticMeasure = (operator, format, shouldCombineLocalIdAndOperator) => {
|
|
132
|
+
return newVirtualArithmeticMeasure([primaryMeasure, secondaryMeasure], operator, (builder) => {
|
|
133
|
+
if (shouldCombineLocalIdAndOperator) {
|
|
134
|
+
builder.combineLocalIdWithOperator();
|
|
135
|
+
}
|
|
136
|
+
// Apply format: null means inherit from primary measure, string means use explicit format
|
|
137
|
+
if (format !== null) {
|
|
138
|
+
builder.format(format);
|
|
139
|
+
}
|
|
140
|
+
return builder;
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
switch (calculationType) {
|
|
144
|
+
case "difference":
|
|
145
|
+
return [createVirtualArithmeticMeasure("difference", COMPARISON_FORMATS.difference)];
|
|
146
|
+
case "ratio":
|
|
147
|
+
return [createVirtualArithmeticMeasure("ratio", COMPARISON_FORMATS.ratio)];
|
|
148
|
+
case "change":
|
|
149
|
+
return [createVirtualArithmeticMeasure("change", COMPARISON_FORMATS.change)];
|
|
150
|
+
case "change_difference":
|
|
151
|
+
return [
|
|
152
|
+
createVirtualArithmeticMeasure("change", COMPARISON_FORMATS.change_difference.main, true),
|
|
153
|
+
createVirtualArithmeticMeasure("difference", COMPARISON_FORMATS.change_difference.sub, true),
|
|
154
|
+
];
|
|
155
|
+
default:
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Transforms a geo bucket attribute to use tooltipText display form (legacy pushpin only).
|
|
161
|
+
*
|
|
162
|
+
* @remarks
|
|
163
|
+
* This is used only when legacy pushpin behavior is active (new geo flags disabled).
|
|
164
|
+
*/
|
|
165
|
+
function transformGeoBucketAttributeUsingTooltipText(bucket, insight, uniqueLocalIdSuffix) {
|
|
166
|
+
if (!bucket) {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
const geoAttr = bucketAttribute(bucket);
|
|
170
|
+
if (!geoAttr) {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
const properties = insightProperties(insight);
|
|
174
|
+
const tooltipTextId = properties?.["controls"]?.["tooltipText"];
|
|
175
|
+
if (!tooltipTextId) {
|
|
176
|
+
return geoAttr;
|
|
177
|
+
}
|
|
178
|
+
const ref = isUriRef(attributeDisplayFormRef(geoAttr))
|
|
179
|
+
? uriRef(tooltipTextId)
|
|
180
|
+
: idRef(tooltipTextId, "displayForm");
|
|
181
|
+
// Generate a unique localId to avoid conflicts with existing attributes
|
|
182
|
+
const uniqueLocalId = `${attributeLocalId(geoAttr)}_${uniqueLocalIdSuffix}`;
|
|
183
|
+
const alias = attributeAlias(geoAttr);
|
|
184
|
+
return newAttribute(ref, (m) => {
|
|
185
|
+
m.localId(uniqueLocalId);
|
|
186
|
+
if (alias) {
|
|
187
|
+
m.alias(alias);
|
|
188
|
+
}
|
|
189
|
+
return m;
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Transforms a geo bucket attribute to use the default display form.
|
|
194
|
+
*
|
|
195
|
+
* @remarks
|
|
196
|
+
* Used for new GeoChartNext variants when feature flags are enabled.
|
|
197
|
+
*/
|
|
198
|
+
function transformGeoBucketAttributeUsingDefaultDisplayForm(bucket, defaultDisplayFormRefs, uniqueLocalIdSuffix) {
|
|
199
|
+
if (!bucket) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
const geoAttr = bucketAttribute(bucket);
|
|
203
|
+
if (!geoAttr) {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
const geoDisplayFormRef = attributeDisplayFormRef(geoAttr);
|
|
207
|
+
const defaultDisplayFormRef = defaultDisplayFormRefs?.get(serializeObjRef(geoDisplayFormRef));
|
|
208
|
+
if (!defaultDisplayFormRef || areObjRefsEqual(defaultDisplayFormRef, geoDisplayFormRef)) {
|
|
209
|
+
return geoAttr;
|
|
210
|
+
}
|
|
211
|
+
const uniqueLocalId = `${attributeLocalId(geoAttr)}_${uniqueLocalIdSuffix}`;
|
|
212
|
+
const alias = attributeAlias(geoAttr);
|
|
213
|
+
return newAttribute(defaultDisplayFormRef, (m) => {
|
|
214
|
+
m.localId(uniqueLocalId);
|
|
215
|
+
if (alias) {
|
|
216
|
+
m.alias(alias);
|
|
217
|
+
}
|
|
218
|
+
return m;
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
function transformGeoLocationAttribute(locationBucket, insight) {
|
|
222
|
+
return transformGeoBucketAttributeUsingTooltipText(locationBucket, insight, "table_name");
|
|
223
|
+
}
|
|
224
|
+
function resolveGeoPrimaryAttribute(options, insight, buckets, layerType) {
|
|
225
|
+
if (layerType) {
|
|
226
|
+
return resolveGeoPrimaryAttributeByLayerType(layerType, buckets, options.defaultDisplayFormRefs);
|
|
227
|
+
}
|
|
228
|
+
const type = insightVisualizationType(insight);
|
|
229
|
+
const isLegacyGeoPushpin = type === VisualizationTypes.PUSHPIN && !options.settings?.enableNewGeoPushpin;
|
|
230
|
+
const isNewGeoVisualization = isGeoVisualizationUsingNewEngine(type, options.settings);
|
|
231
|
+
if (isLegacyGeoPushpin) {
|
|
232
|
+
return transformGeoLocationAttribute(bucketsFind(buckets, BucketNames.LOCATION), insight);
|
|
233
|
+
}
|
|
234
|
+
if (isNewGeoVisualization) {
|
|
235
|
+
const rootLayerType = geoLayerTypeFromVisualizationType(type);
|
|
236
|
+
if (rootLayerType) {
|
|
237
|
+
return resolveGeoPrimaryAttributeByLayerType(rootLayerType, buckets, options.defaultDisplayFormRefs);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
function getGeoTableAttributesWithSegmentAndPrimary(buckets, primaryAttribute) {
|
|
243
|
+
const segmentBucket = bucketsFind(buckets, BucketNames.SEGMENT);
|
|
244
|
+
const rowAttributes = [];
|
|
245
|
+
const segmentAttr = segmentBucket ? bucketAttribute(segmentBucket) : undefined;
|
|
246
|
+
if (segmentAttr) {
|
|
247
|
+
rowAttributes.push(segmentAttr);
|
|
248
|
+
}
|
|
249
|
+
if (primaryAttribute) {
|
|
250
|
+
rowAttributes.push(primaryAttribute);
|
|
251
|
+
}
|
|
252
|
+
return { rowAttributes, columnAttributes: [] };
|
|
253
|
+
}
|
|
254
|
+
function getGeoTableAttributes(insight, buckets, options, layerType) {
|
|
255
|
+
const type = insightVisualizationType(insight);
|
|
256
|
+
const isLegacyGeoPushpin = type === VisualizationTypes.PUSHPIN && !options.settings?.enableNewGeoPushpin;
|
|
257
|
+
const isNewGeoVisualization = isGeoVisualizationUsingNewEngine(type, options.settings);
|
|
258
|
+
if (!layerType && !isLegacyGeoPushpin && !isNewGeoVisualization) {
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
const primaryAttribute = resolveGeoPrimaryAttribute(options, insight, buckets, layerType);
|
|
262
|
+
return getGeoTableAttributesWithSegmentAndPrimary(buckets, primaryAttribute);
|
|
263
|
+
}
|
|
264
|
+
function resolveGeoPrimaryAttributeByLayerType(layerType, buckets, defaultDisplayFormRefs) {
|
|
265
|
+
const bucketName = layerType === GeoLayerTypes.AREA ? BucketNames.AREA : BucketNames.LOCATION;
|
|
266
|
+
return transformGeoBucketAttributeUsingDefaultDisplayForm(bucketsFind(buckets, bucketName), defaultDisplayFormRefs, "table_default_label");
|
|
267
|
+
}
|
|
268
|
+
function buildTableInsightFromBuckets(insight, buckets, layerType, defaultDisplayFormRefs) {
|
|
269
|
+
const measureBucketIdentifiers = new Set([
|
|
270
|
+
BucketNames.MEASURES,
|
|
271
|
+
BucketNames.SIZE,
|
|
272
|
+
BucketNames.COLOR,
|
|
273
|
+
BucketNames.SECONDARY_MEASURES,
|
|
274
|
+
]);
|
|
275
|
+
const measures = buckets
|
|
276
|
+
.filter((b) => measureBucketIdentifiers.has(b.localIdentifier ?? ""))
|
|
277
|
+
.flatMap((b) => b.items);
|
|
278
|
+
const { rowAttributes, columnAttributes } = getGeoTableAttributes(insight, buckets, { defaultDisplayFormRefs }, layerType) ?? { rowAttributes: [], columnAttributes: [] };
|
|
279
|
+
const tableBuckets = [
|
|
280
|
+
{ localIdentifier: BucketNames.MEASURES, items: measures },
|
|
281
|
+
{ localIdentifier: BucketNames.ATTRIBUTE, items: rowAttributes },
|
|
282
|
+
{ localIdentifier: BucketNames.COLUMNS, items: columnAttributes },
|
|
283
|
+
];
|
|
284
|
+
const onlyMeasures = !rowAttributes.length && !columnAttributes.length;
|
|
285
|
+
const propertiesProp = onlyMeasures
|
|
286
|
+
? { properties: { controls: { measureGroupDimension: "rows" } } }
|
|
287
|
+
: {};
|
|
288
|
+
const tableInsight = {
|
|
289
|
+
...insight,
|
|
290
|
+
insight: {
|
|
291
|
+
...insight.insight,
|
|
292
|
+
visualizationUrl: "local:table",
|
|
293
|
+
buckets: tableBuckets,
|
|
294
|
+
...propertiesProp,
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
return {
|
|
298
|
+
...tableInsight,
|
|
299
|
+
insight: {
|
|
300
|
+
...tableInsight.insight,
|
|
301
|
+
// Keep only sorts that reference attributes/measures present in this layer table.
|
|
302
|
+
sorts: insightSorts(tableInsight),
|
|
303
|
+
},
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Converts a multi-layer geo insight into per-layer table definitions.
|
|
308
|
+
*
|
|
309
|
+
* Returns `undefined` when the insight is not a new-geo type (flags off, non-geo, etc.).
|
|
310
|
+
* Returns an array of {@link ILayerTableDefinition} with root layer first, then
|
|
311
|
+
* additional layers in their original order.
|
|
312
|
+
*
|
|
313
|
+
* @internal
|
|
314
|
+
*/
|
|
315
|
+
export function convertGeoInsightToLayerTables(insight, options) {
|
|
316
|
+
if (!options.settings?.["enableGeoChartA11yImprovements"]) {
|
|
317
|
+
return undefined;
|
|
318
|
+
}
|
|
319
|
+
const type = insightVisualizationType(insight);
|
|
320
|
+
if (!isGeoVisualizationUsingNewEngine(type, options.settings)) {
|
|
321
|
+
return undefined;
|
|
322
|
+
}
|
|
323
|
+
const rootLayerType = geoLayerTypeFromVisualizationType(type);
|
|
324
|
+
if (!rootLayerType) {
|
|
325
|
+
return undefined;
|
|
326
|
+
}
|
|
327
|
+
const rootBuckets = insightBuckets(insight);
|
|
328
|
+
const rootDisplayFormRefs = resolveGeoDefaultDisplayFormRefs(rootLayerType, rootBuckets, options.catalogAttributes ?? [], options.preloadedAttributesWithReferences);
|
|
329
|
+
const rootTable = buildTableInsightFromBuckets(insight, rootBuckets, rootLayerType, rootDisplayFormRefs);
|
|
330
|
+
const rootDef = {
|
|
331
|
+
layerId: "root",
|
|
332
|
+
layerName: insight.insight.title,
|
|
333
|
+
layerType: rootLayerType,
|
|
334
|
+
tableInsight: rootTable,
|
|
335
|
+
};
|
|
336
|
+
const layers = insightLayers(insight);
|
|
337
|
+
const layerDefs = layers.flatMap((layer) => {
|
|
338
|
+
if (!isGeoLayerType(layer.type)) {
|
|
339
|
+
return [];
|
|
340
|
+
}
|
|
341
|
+
const layerType = layer.type;
|
|
342
|
+
const displayFormRefs = resolveGeoDefaultDisplayFormRefs(layerType, layer.buckets, options.catalogAttributes ?? [], options.preloadedAttributesWithReferences);
|
|
343
|
+
const tableInsight = buildTableInsightFromBuckets(insight, layer.buckets, layerType, displayFormRefs);
|
|
344
|
+
return [
|
|
345
|
+
{
|
|
346
|
+
layerId: layer.id,
|
|
347
|
+
layerName: layer.name ?? layer.id,
|
|
348
|
+
layerType,
|
|
349
|
+
tableInsight,
|
|
350
|
+
},
|
|
351
|
+
];
|
|
352
|
+
});
|
|
353
|
+
return [rootDef, ...layerDefs];
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Converts an insight to layered table definitions.
|
|
357
|
+
*
|
|
358
|
+
* @remarks
|
|
359
|
+
* Currently supports geo insights only and is gated by `enableGeoChartA11yImprovements`.
|
|
360
|
+
*
|
|
361
|
+
* @internal
|
|
362
|
+
*/
|
|
363
|
+
export function convertInsightToLayerTables(insight, options) {
|
|
364
|
+
return convertGeoInsightToLayerTables(insight, options);
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Converts any insight (except of type "table", "repeater", or "xirr") to a table insight definition.
|
|
368
|
+
* For table, repeater, or xirr insights, returns the original insight.
|
|
369
|
+
*
|
|
370
|
+
* @param insight - The input insight to convert.
|
|
371
|
+
* @returns IInsight with table visualization or the original insight if conversion is not supported.
|
|
372
|
+
* @internal
|
|
373
|
+
*/
|
|
374
|
+
export function convertInsightToTableDefinition(insight, options = {}) {
|
|
375
|
+
const type = insightVisualizationType(insight);
|
|
376
|
+
if (!canConvertToTable(type)) {
|
|
377
|
+
return insight;
|
|
378
|
+
}
|
|
379
|
+
const geoTableInsight = convertGeoInsightToTableDefinitionShared(insight, options);
|
|
380
|
+
if (geoTableInsight) {
|
|
381
|
+
return geoTableInsight;
|
|
382
|
+
}
|
|
383
|
+
// Use sdk-model utils to extract all measures and attributes
|
|
384
|
+
// and build table buckets according to PluggablePivotTable conventions
|
|
385
|
+
// - 'measures' bucket: all measures
|
|
386
|
+
// - 'attributes' bucket: all attributes
|
|
387
|
+
// - 'columns' bucket: empty (can be customized if needed)
|
|
388
|
+
// This is a safe default for generic conversion
|
|
389
|
+
// If more advanced splitting is needed (e.g. from view/stack by), logic can be extended
|
|
390
|
+
//
|
|
391
|
+
// Note: IBucket type is imported from sdk-model
|
|
392
|
+
//
|
|
393
|
+
// The output insight will have only these three buckets
|
|
394
|
+
// Import bucket utilities for splitting attributes
|
|
395
|
+
// PluggablePivotTable convention: row attributes come from the first attribute bucket (view by, trend by, etc),
|
|
396
|
+
// column attributes come from the second attribute bucket (columns, stack by, etc)
|
|
397
|
+
// Measures always from 'measures' bucket
|
|
398
|
+
// See getRowAttributes and getColumnAttributes in PluggablePivotTable
|
|
399
|
+
const buckets = insightBuckets(insight);
|
|
400
|
+
const baseMeasures = insightMeasures(insight);
|
|
401
|
+
// Handle headline comparison: add virtual arithmetic measures for change/difference/ratio
|
|
402
|
+
const comparisonMeasures = [];
|
|
403
|
+
if (isHeadlineWithComparison(insight)) {
|
|
404
|
+
const primaryBucket = bucketsFind(buckets, BucketNames.MEASURES);
|
|
405
|
+
const secondaryBucket = bucketsFind(buckets, BucketNames.SECONDARY_MEASURES);
|
|
406
|
+
const primaryMeasure = primaryBucket && bucketMeasure(primaryBucket);
|
|
407
|
+
const secondaryMeasure = secondaryBucket && bucketMeasure(secondaryBucket);
|
|
408
|
+
if (primaryMeasure && secondaryMeasure) {
|
|
409
|
+
const comparison = getComparisonConfig(insight);
|
|
410
|
+
const calculationType = getCalculationType(secondaryMeasure, comparison);
|
|
411
|
+
comparisonMeasures.push(...createHeadlineComparisonMeasures(primaryMeasure, secondaryMeasure, calculationType));
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
const measures = [...baseMeasures, ...comparisonMeasures];
|
|
415
|
+
/**
|
|
416
|
+
* Keep conversion logic aligned with `PluggablePivotTable`:
|
|
417
|
+
* - row attributes: see `getRowAttributes` in `sdk-ui-ext`
|
|
418
|
+
* - column attributes: see `getColumnAttributes` in `sdk-ui-ext`
|
|
419
|
+
*
|
|
420
|
+
* Note: using `BucketNames.*` avoids fragile magic strings.
|
|
421
|
+
*/
|
|
422
|
+
const rowBucketIdentifiers = [
|
|
423
|
+
BucketNames.ATTRIBUTE,
|
|
424
|
+
BucketNames.ATTRIBUTES,
|
|
425
|
+
BucketNames.ATTRIBUTE_FROM,
|
|
426
|
+
BucketNames.ATTRIBUTE_TO,
|
|
427
|
+
BucketNames.VIEW,
|
|
428
|
+
BucketNames.TREND,
|
|
429
|
+
BucketNames.LOCATION,
|
|
430
|
+
BucketNames.AREA,
|
|
431
|
+
];
|
|
432
|
+
const columnBucketIdentifiers = [BucketNames.COLUMNS, BucketNames.STACK, BucketNames.SEGMENT];
|
|
433
|
+
const isRowBucket = (bucket) => rowBucketIdentifiers.includes(bucket.localIdentifier ?? "");
|
|
434
|
+
const isColumnBucket = (bucket) => columnBucketIdentifiers.includes(bucket.localIdentifier ?? "");
|
|
435
|
+
let rowAttributes;
|
|
436
|
+
let columnAttributes;
|
|
437
|
+
const geoAttributes = getGeoTableAttributes(insight, buckets, options);
|
|
438
|
+
if (geoAttributes) {
|
|
439
|
+
rowAttributes = geoAttributes.rowAttributes;
|
|
440
|
+
columnAttributes = geoAttributes.columnAttributes;
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
const rowBuckets = buckets.filter(isRowBucket);
|
|
444
|
+
const columnBuckets = buckets.filter(isColumnBucket);
|
|
445
|
+
rowAttributes = rowBuckets.map((bucket) => bucket.items).flat();
|
|
446
|
+
columnAttributes = columnBuckets.map((bucket) => bucket.items).flat();
|
|
447
|
+
}
|
|
448
|
+
const tableBuckets = [
|
|
449
|
+
{
|
|
450
|
+
localIdentifier: BucketNames.MEASURES,
|
|
451
|
+
items: measures,
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
localIdentifier: BucketNames.ATTRIBUTE,
|
|
455
|
+
items: rowAttributes,
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
localIdentifier: BucketNames.COLUMNS,
|
|
459
|
+
items: columnAttributes,
|
|
460
|
+
},
|
|
461
|
+
];
|
|
462
|
+
const onlyMeasures = !rowAttributes.length && !columnAttributes.length;
|
|
463
|
+
const propertiesProp = onlyMeasures
|
|
464
|
+
? {
|
|
465
|
+
properties: {
|
|
466
|
+
controls: {
|
|
467
|
+
measureGroupDimension: "rows",
|
|
468
|
+
},
|
|
469
|
+
},
|
|
470
|
+
}
|
|
471
|
+
: {};
|
|
472
|
+
const tableInsight = {
|
|
473
|
+
...insight,
|
|
474
|
+
insight: {
|
|
475
|
+
...insight.insight,
|
|
476
|
+
visualizationUrl: "local:table",
|
|
477
|
+
buckets: tableBuckets,
|
|
478
|
+
...propertiesProp,
|
|
479
|
+
},
|
|
480
|
+
};
|
|
481
|
+
return tableInsight;
|
|
482
|
+
}
|
package/esm/sdk-ui-ext.d.ts
CHANGED
|
@@ -22,12 +22,15 @@ import { Dispatch } from 'react';
|
|
|
22
22
|
import { EmbedType } from '@gooddata/sdk-ui-kit';
|
|
23
23
|
import { ExplicitDrill } from '@gooddata/sdk-ui';
|
|
24
24
|
import { GeneralAccessValue } from '@gooddata/sdk-ui-kit';
|
|
25
|
+
import { GeoTableConversionOptions } from '@gooddata/sdk-ui';
|
|
25
26
|
import { GoodDataSdkError } from '@gooddata/sdk-ui';
|
|
26
27
|
import { IAlertComparisonOperator } from '@gooddata/sdk-model';
|
|
27
28
|
import { IAlertRelativeArithmeticOperator } from '@gooddata/sdk-model';
|
|
28
29
|
import { IAlertRelativeOperator } from '@gooddata/sdk-model';
|
|
29
30
|
import { IAnalyticalBackend } from '@gooddata/sdk-backend-spi';
|
|
31
|
+
import { IAttributeWithReferences } from '@gooddata/sdk-backend-spi';
|
|
30
32
|
import { IAutomationMetadataObject } from '@gooddata/sdk-model';
|
|
33
|
+
import { ICatalogAttribute } from '@gooddata/sdk-model';
|
|
31
34
|
import { ICatalogAttributeHierarchy } from '@gooddata/sdk-model';
|
|
32
35
|
import { IChartConfig } from '@gooddata/sdk-ui-charts';
|
|
33
36
|
import { IColorPalette } from '@gooddata/sdk-model';
|
|
@@ -238,6 +241,16 @@ export declare type AutomationsScope = "workspace" | "organization";
|
|
|
238
241
|
*/
|
|
239
242
|
export declare type AutomationsType = Extract<AutomationType, "alert" | "schedule">;
|
|
240
243
|
|
|
244
|
+
/**
|
|
245
|
+
* Determines if a visualization type can be converted to table format.
|
|
246
|
+
* This is used for accessibility and export purposes, separate from UI controls.
|
|
247
|
+
*
|
|
248
|
+
* @param insightType - The visualization type to check
|
|
249
|
+
* @returns true if the visualization can be converted to table format
|
|
250
|
+
* @internal
|
|
251
|
+
*/
|
|
252
|
+
export declare function canConvertToTable(insightType?: string): boolean;
|
|
253
|
+
|
|
241
254
|
export { ChartInlineVisualizationType }
|
|
242
255
|
|
|
243
256
|
/**
|
|
@@ -296,6 +309,26 @@ export declare type ConditionalFormattingDialogSubmitIntent = {
|
|
|
296
309
|
rule: IConditionalFormattingRule;
|
|
297
310
|
};
|
|
298
311
|
|
|
312
|
+
/**
|
|
313
|
+
* Converts an insight to layered table definitions.
|
|
314
|
+
*
|
|
315
|
+
* @remarks
|
|
316
|
+
* Currently supports geo insights only and is gated by `enableGeoChartA11yImprovements`.
|
|
317
|
+
*
|
|
318
|
+
* @internal
|
|
319
|
+
*/
|
|
320
|
+
export declare function convertInsightToLayerTables(insight: IInsight, options: ILayerTableConversionOptions): ILayerTableDefinition[] | undefined;
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Converts any insight (except of type "table", "repeater", or "xirr") to a table insight definition.
|
|
324
|
+
* For table, repeater, or xirr insights, returns the original insight.
|
|
325
|
+
*
|
|
326
|
+
* @param insight - The input insight to convert.
|
|
327
|
+
* @returns IInsight with table visualization or the original insight if conversion is not supported.
|
|
328
|
+
* @internal
|
|
329
|
+
*/
|
|
330
|
+
export declare function convertInsightToTableDefinition(insight: IInsight, options?: GeoTableConversionOptions): IInsight;
|
|
331
|
+
|
|
299
332
|
/**
|
|
300
333
|
* @internal
|
|
301
334
|
*/
|
|
@@ -464,6 +497,13 @@ export declare const getComparisonOperatorTitle: (operator: IAlertComparisonOper
|
|
|
464
497
|
*/
|
|
465
498
|
export declare function getEffectiveConditionalFormatting(insight: IInsightDefinition, settings: ISettings | undefined, configOverride?: IConditionalFormatting): IConditionalFormatting | undefined;
|
|
466
499
|
|
|
500
|
+
/**
|
|
501
|
+
* The display form each geo attribute is read through when the insight states none of its own.
|
|
502
|
+
*
|
|
503
|
+
* @internal
|
|
504
|
+
*/
|
|
505
|
+
export declare function getGeoTableDisplayFormRefs(insight: IInsight, settings: ISettings | undefined, catalogAttributes: ICatalogAttribute[], preloadedAttributesWithReferences?: IAttributeWithReferences[]): Map<string, ObjRef> | undefined;
|
|
506
|
+
|
|
467
507
|
/**
|
|
468
508
|
* @internal
|
|
469
509
|
*/
|
|
@@ -1081,6 +1121,33 @@ export declare interface IInsightViewProps extends Partial<IVisualizationCallbac
|
|
|
1081
1121
|
TitleComponent?: ComponentType<IInsightTitleProps>;
|
|
1082
1122
|
}
|
|
1083
1123
|
|
|
1124
|
+
/**
|
|
1125
|
+
* Options steering how a multi-layer geo insight is turned into per-layer tables.
|
|
1126
|
+
*
|
|
1127
|
+
* @internal
|
|
1128
|
+
*/
|
|
1129
|
+
export declare interface ILayerTableConversionOptions {
|
|
1130
|
+
settings?: ISettings;
|
|
1131
|
+
catalogAttributes?: ICatalogAttribute[];
|
|
1132
|
+
preloadedAttributesWithReferences?: IAttributeWithReferences[];
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
/**
|
|
1136
|
+
* Defines a single layer's table conversion result for multi-layer geo charts.
|
|
1137
|
+
*
|
|
1138
|
+
* @alpha
|
|
1139
|
+
*/
|
|
1140
|
+
export declare interface ILayerTableDefinition {
|
|
1141
|
+
/** Stable id — "root" for root layer, layer.id for additional layers */
|
|
1142
|
+
layerId: string;
|
|
1143
|
+
/** Human-readable name for the tab label */
|
|
1144
|
+
layerName: string;
|
|
1145
|
+
/** Normalized layer type */
|
|
1146
|
+
layerType: string;
|
|
1147
|
+
/** Converted table insight for this layer */
|
|
1148
|
+
tableInsight: IInsight;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1084
1151
|
/**
|
|
1085
1152
|
* Layout descriptor.
|
|
1086
1153
|
* Provides parameters of used layout.
|
|
@@ -2265,6 +2332,16 @@ export declare function summaryOtherGranteeCount(summary: IObjectAccessSummary):
|
|
|
2265
2332
|
*/
|
|
2266
2333
|
export declare function summaryToShareLevel(summary: IObjectAccessSummary): ObjectShareLevel;
|
|
2267
2334
|
|
|
2335
|
+
/**
|
|
2336
|
+
* Determines if a visualization type supports the "Show as Table" UI button.
|
|
2337
|
+
* This controls whether users can manually toggle table view in the UI.
|
|
2338
|
+
*
|
|
2339
|
+
* @param insightType - The visualization type to check
|
|
2340
|
+
* @returns true if the visualization supports the Show as Table UI feature
|
|
2341
|
+
* @internal
|
|
2342
|
+
*/
|
|
2343
|
+
export declare function supportsShowAsTable(insightType?: string): boolean;
|
|
2344
|
+
|
|
2268
2345
|
/**
|
|
2269
2346
|
* @internal
|
|
2270
2347
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-ext",
|
|
3
|
-
"version": "11.58.0-alpha.
|
|
3
|
+
"version": "11.58.0-alpha.3",
|
|
4
4
|
"description": "GoodData.UI SDK - Extensions",
|
|
5
5
|
"license": "LicenseRef-LICENSE",
|
|
6
6
|
"author": "GoodData Corporation",
|
|
@@ -63,20 +63,20 @@
|
|
|
63
63
|
"ts-invariant": "0.10.3",
|
|
64
64
|
"tslib": "2.8.1",
|
|
65
65
|
"uuid": "11.1.1",
|
|
66
|
-
"@gooddata/sdk-backend-base": "11.58.0-alpha.
|
|
67
|
-
"@gooddata/sdk-backend-spi": "11.58.0-alpha.
|
|
68
|
-
"@gooddata/sdk-
|
|
69
|
-
"@gooddata/sdk-
|
|
70
|
-
"@gooddata/sdk-
|
|
71
|
-
"@gooddata/sdk-ui-
|
|
72
|
-
"@gooddata/sdk-ui-
|
|
73
|
-
"@gooddata/sdk-ui-kit": "11.58.0-alpha.
|
|
74
|
-
"@gooddata/sdk-ui-pivot": "11.58.0-alpha.
|
|
75
|
-
"@gooddata/sdk-ui-geo": "11.58.0-alpha.
|
|
76
|
-
"@gooddata/sdk-ui-semantic-search": "11.58.0-alpha.
|
|
77
|
-
"@gooddata/sdk-ui-theme-provider": "11.58.0-alpha.
|
|
78
|
-
"@gooddata/sdk-ui-vis-commons": "11.58.0-alpha.
|
|
79
|
-
"@gooddata/util": "11.58.0-alpha.
|
|
66
|
+
"@gooddata/sdk-backend-base": "11.58.0-alpha.3",
|
|
67
|
+
"@gooddata/sdk-backend-spi": "11.58.0-alpha.3",
|
|
68
|
+
"@gooddata/sdk-ui": "11.58.0-alpha.3",
|
|
69
|
+
"@gooddata/sdk-model": "11.58.0-alpha.3",
|
|
70
|
+
"@gooddata/sdk-embedding": "11.58.0-alpha.3",
|
|
71
|
+
"@gooddata/sdk-ui-charts": "11.58.0-alpha.3",
|
|
72
|
+
"@gooddata/sdk-ui-filters": "11.58.0-alpha.3",
|
|
73
|
+
"@gooddata/sdk-ui-kit": "11.58.0-alpha.3",
|
|
74
|
+
"@gooddata/sdk-ui-pivot": "11.58.0-alpha.3",
|
|
75
|
+
"@gooddata/sdk-ui-geo": "11.58.0-alpha.3",
|
|
76
|
+
"@gooddata/sdk-ui-semantic-search": "11.58.0-alpha.3",
|
|
77
|
+
"@gooddata/sdk-ui-theme-provider": "11.58.0-alpha.3",
|
|
78
|
+
"@gooddata/sdk-ui-vis-commons": "11.58.0-alpha.3",
|
|
79
|
+
"@gooddata/util": "11.58.0-alpha.3"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
82
|
"@microsoft/api-documenter": "7.30.10",
|
|
@@ -120,12 +120,12 @@
|
|
|
120
120
|
"typescript": "7.0.2",
|
|
121
121
|
"vitest": "4.1.11",
|
|
122
122
|
"vitest-dom": "0.1.1",
|
|
123
|
-
"@gooddata/
|
|
124
|
-
"@gooddata/
|
|
125
|
-
"@gooddata/oxlint-config": "11.58.0-alpha.
|
|
126
|
-
"@gooddata/
|
|
127
|
-
"@gooddata/
|
|
128
|
-
"@gooddata/stylelint-config": "11.58.0-alpha.
|
|
123
|
+
"@gooddata/eslint-config": "11.58.0-alpha.3",
|
|
124
|
+
"@gooddata/i18n-toolkit": "11.58.0-alpha.3",
|
|
125
|
+
"@gooddata/oxlint-config": "11.58.0-alpha.3",
|
|
126
|
+
"@gooddata/reference-workspace": "11.58.0-alpha.3",
|
|
127
|
+
"@gooddata/sdk-backend-mockingbird": "11.58.0-alpha.3",
|
|
128
|
+
"@gooddata/stylelint-config": "11.58.0-alpha.3"
|
|
129
129
|
},
|
|
130
130
|
"peerDependencies": {
|
|
131
131
|
"react": "^18.0.0 || ^19.0.0",
|