@gooddata/sdk-ui-ext 11.53.0-alpha.1 → 11.53.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.
Files changed (86) hide show
  1. package/NOTICE +6 -6
  2. package/esm/insightView/InsightRenderer.d.ts +3 -6
  3. package/esm/insightView/InsightRenderer.d.ts.map +1 -1
  4. package/esm/insightView/InsightRenderer.js +193 -143
  5. package/esm/internal/components/BaseVisualization.d.ts +6 -33
  6. package/esm/internal/components/BaseVisualization.d.ts.map +1 -1
  7. package/esm/internal/components/BaseVisualization.js +255 -213
  8. package/esm/internal/index.d.ts +1 -1
  9. package/esm/internal/index.d.ts.map +1 -1
  10. package/esm/internal/index.js +1 -1
  11. package/esm/internal/translations/de-DE.localization-bundle.d.ts +4 -0
  12. package/esm/internal/translations/de-DE.localization-bundle.d.ts.map +1 -1
  13. package/esm/internal/translations/de-DE.localization-bundle.js +4 -0
  14. package/esm/internal/translations/en-AU.localization-bundle.d.ts +4 -0
  15. package/esm/internal/translations/en-AU.localization-bundle.d.ts.map +1 -1
  16. package/esm/internal/translations/en-AU.localization-bundle.js +4 -0
  17. package/esm/internal/translations/en-GB.localization-bundle.d.ts +4 -0
  18. package/esm/internal/translations/en-GB.localization-bundle.d.ts.map +1 -1
  19. package/esm/internal/translations/en-GB.localization-bundle.js +4 -0
  20. package/esm/internal/translations/es-419.localization-bundle.d.ts +4 -0
  21. package/esm/internal/translations/es-419.localization-bundle.d.ts.map +1 -1
  22. package/esm/internal/translations/es-419.localization-bundle.js +4 -0
  23. package/esm/internal/translations/es-ES.localization-bundle.d.ts +4 -0
  24. package/esm/internal/translations/es-ES.localization-bundle.d.ts.map +1 -1
  25. package/esm/internal/translations/es-ES.localization-bundle.js +4 -0
  26. package/esm/internal/translations/fi-FI.localization-bundle.d.ts +4 -0
  27. package/esm/internal/translations/fi-FI.localization-bundle.d.ts.map +1 -1
  28. package/esm/internal/translations/fi-FI.localization-bundle.js +4 -0
  29. package/esm/internal/translations/fr-CA.localization-bundle.d.ts +4 -0
  30. package/esm/internal/translations/fr-CA.localization-bundle.d.ts.map +1 -1
  31. package/esm/internal/translations/fr-CA.localization-bundle.js +4 -0
  32. package/esm/internal/translations/fr-FR.localization-bundle.d.ts +4 -0
  33. package/esm/internal/translations/fr-FR.localization-bundle.d.ts.map +1 -1
  34. package/esm/internal/translations/fr-FR.localization-bundle.js +4 -0
  35. package/esm/internal/translations/id-ID.localization-bundle.d.ts +4 -0
  36. package/esm/internal/translations/id-ID.localization-bundle.d.ts.map +1 -1
  37. package/esm/internal/translations/id-ID.localization-bundle.js +4 -0
  38. package/esm/internal/translations/it-IT.localization-bundle.d.ts +4 -0
  39. package/esm/internal/translations/it-IT.localization-bundle.d.ts.map +1 -1
  40. package/esm/internal/translations/it-IT.localization-bundle.js +4 -0
  41. package/esm/internal/translations/ja-JP.localization-bundle.d.ts +4 -0
  42. package/esm/internal/translations/ja-JP.localization-bundle.d.ts.map +1 -1
  43. package/esm/internal/translations/ja-JP.localization-bundle.js +4 -0
  44. package/esm/internal/translations/ko-KR.localization-bundle.d.ts +4 -0
  45. package/esm/internal/translations/ko-KR.localization-bundle.d.ts.map +1 -1
  46. package/esm/internal/translations/ko-KR.localization-bundle.js +4 -0
  47. package/esm/internal/translations/nl-NL.localization-bundle.d.ts +4 -0
  48. package/esm/internal/translations/nl-NL.localization-bundle.d.ts.map +1 -1
  49. package/esm/internal/translations/nl-NL.localization-bundle.js +4 -0
  50. package/esm/internal/translations/pl-PL.localization-bundle.d.ts +4 -0
  51. package/esm/internal/translations/pl-PL.localization-bundle.d.ts.map +1 -1
  52. package/esm/internal/translations/pl-PL.localization-bundle.js +4 -0
  53. package/esm/internal/translations/pt-BR.localization-bundle.d.ts +4 -0
  54. package/esm/internal/translations/pt-BR.localization-bundle.d.ts.map +1 -1
  55. package/esm/internal/translations/pt-BR.localization-bundle.js +4 -0
  56. package/esm/internal/translations/pt-PT.localization-bundle.d.ts +4 -0
  57. package/esm/internal/translations/pt-PT.localization-bundle.d.ts.map +1 -1
  58. package/esm/internal/translations/pt-PT.localization-bundle.js +4 -0
  59. package/esm/internal/translations/ru-RU.localization-bundle.d.ts +4 -0
  60. package/esm/internal/translations/ru-RU.localization-bundle.d.ts.map +1 -1
  61. package/esm/internal/translations/ru-RU.localization-bundle.js +4 -0
  62. package/esm/internal/translations/sl-SI.localization-bundle.d.ts +4 -0
  63. package/esm/internal/translations/sl-SI.localization-bundle.d.ts.map +1 -1
  64. package/esm/internal/translations/sl-SI.localization-bundle.js +4 -0
  65. package/esm/internal/translations/th-TH.localization-bundle.d.ts +4 -0
  66. package/esm/internal/translations/th-TH.localization-bundle.d.ts.map +1 -1
  67. package/esm/internal/translations/th-TH.localization-bundle.js +4 -0
  68. package/esm/internal/translations/tr-TR.localization-bundle.d.ts +4 -0
  69. package/esm/internal/translations/tr-TR.localization-bundle.d.ts.map +1 -1
  70. package/esm/internal/translations/tr-TR.localization-bundle.js +4 -0
  71. package/esm/internal/translations/uk-UA.localization-bundle.d.ts +4 -0
  72. package/esm/internal/translations/uk-UA.localization-bundle.d.ts.map +1 -1
  73. package/esm/internal/translations/uk-UA.localization-bundle.js +4 -0
  74. package/esm/internal/translations/vi-VN.localization-bundle.d.ts +4 -0
  75. package/esm/internal/translations/vi-VN.localization-bundle.d.ts.map +1 -1
  76. package/esm/internal/translations/vi-VN.localization-bundle.js +4 -0
  77. package/esm/internal/translations/zh-HK.localization-bundle.d.ts +4 -0
  78. package/esm/internal/translations/zh-HK.localization-bundle.d.ts.map +1 -1
  79. package/esm/internal/translations/zh-HK.localization-bundle.js +4 -0
  80. package/esm/internal/translations/zh-Hans.localization-bundle.d.ts +4 -0
  81. package/esm/internal/translations/zh-Hans.localization-bundle.d.ts.map +1 -1
  82. package/esm/internal/translations/zh-Hans.localization-bundle.js +4 -0
  83. package/esm/internal/translations/zh-Hant.localization-bundle.d.ts +4 -0
  84. package/esm/internal/translations/zh-Hant.localization-bundle.d.ts.map +1 -1
  85. package/esm/internal/translations/zh-Hant.localization-bundle.js +4 -0
  86. package/package.json +21 -21
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2019-2026 GoodData Corporation
3
- import { PureComponent, createRef } from "react";
3
+ import { forwardRef, useEffect, useImperativeHandle, useLayoutEffect, useRef, useState } from "react";
4
4
  import { isEmpty, isEqual, omit } from "lodash-es";
5
5
  import { createRoot } from "react-dom/client";
6
6
  import { v4 as uuidv4 } from "uuid";
@@ -8,268 +8,310 @@ import { insightProperties, isInsight, visClassUrl, } from "@gooddata/sdk-model"
8
8
  import { ConfigPanelClassName, } from "../interfaces/Visualization.js";
9
9
  import { cleanupKeyDriverAnalysisOnMetrics, hideKeyDriverOnMetrics } from "../utils/keyDriverAnalysis.js";
10
10
  import { FullVisualizationCatalog } from "./VisualizationCatalog.js";
11
- export class BaseVisualization extends PureComponent {
12
- static defaultProps = {
13
- visualizationCatalog: FullVisualizationCatalog,
14
- newDerivedBucketItems: [],
15
- referencePoint: undefined,
16
- onExtendedReferencePointChanged: () => { },
17
- onNewDerivedBucketItemsPlaced: () => { },
18
- isMdObjectValid: true,
19
- configPanelClassName: ConfigPanelClassName,
20
- featureFlags: {},
11
+ const noop = () => { };
12
+ function getVisualizationId(insight) {
13
+ return isInsight(insight) ? insight.insight.identifier : "__new_visualization__";
14
+ }
15
+ function bucketReferencePointHasChanged(currentReferencePoint, nextReferencePoint) {
16
+ return !isEqual(omit(currentReferencePoint, ["properties", "availableSorts"]), omit(nextReferencePoint, ["properties", "availableSorts"]));
17
+ }
18
+ function propertiesControlsHasChanged(currentReferencePoint, nextReferencePoint) {
19
+ return !isEqual(currentReferencePoint?.properties?.controls, nextReferencePoint?.properties?.controls);
20
+ }
21
+ export const BaseVisualization = forwardRef(function BaseVisualization(props, ref) {
22
+ const { visualizationCatalog = FullVisualizationCatalog, newDerivedBucketItems = [], referencePoint = undefined, onExtendedReferencePointChanged = noop, onNewDerivedBucketItemsPlaced = noop, isMdObjectValid = true, configPanelClassName = ConfigPanelClassName, featureFlags = {}, } = props;
23
+ /**
24
+ * Props with the defaults applied; the lifecycle handling below compares and passes them around
25
+ * the very same way the class component did with props defaulted by React.
26
+ */
27
+ const currentProps = {
28
+ ...props,
29
+ visualizationCatalog,
30
+ newDerivedBucketItems,
31
+ referencePoint,
32
+ onExtendedReferencePointChanged,
33
+ onNewDerivedBucketItemsPlaced,
34
+ isMdObjectValid,
35
+ configPanelClassName,
36
+ featureFlags,
21
37
  };
22
- visElementId;
23
- visualization;
24
- executionFactory;
25
- containerRef;
38
+ const [visElementId, setVisElementId] = useState(() => uuidv4());
39
+ /**
40
+ * Mirror of the visElementId state. The element lookups handed over to the pluggable visualization
41
+ * are lazy, so they must see the new id as soon as it is generated - that is, before the state
42
+ * update is processed and the container div is remounted under the new key.
43
+ */
44
+ const visElementIdRef = useRef(visElementId);
45
+ const visualization = useRef(undefined);
46
+ const containerRef = useRef(null);
26
47
  /**
27
48
  * The component may render both visualization and config panel. In React18 we therefore need two
28
49
  * roots with their respective render methods. This Map holds the roots for both and provides
29
50
  * render and unmount methods whenever needed.
30
51
  */
31
- reactRootsMap = new Map();
32
- constructor(props) {
33
- super(props);
34
- const { insight } = props;
35
- let visualizationId;
36
- if (isInsight(insight)) {
37
- visualizationId = insight.insight.identifier;
38
- }
39
- else {
40
- visualizationId = "__new_visualization__";
41
- }
42
- this.visElementId = uuidv4();
43
- this.executionFactory = props.backend
44
- .withCorrelation({ visualizationId })
52
+ const reactRootsMap = useRef(new Map());
53
+ const executionFactory = useRef(undefined);
54
+ if (!executionFactory.current) {
55
+ executionFactory.current = props.backend
56
+ .withCorrelation({ visualizationId: getVisualizationId(props.insight) })
45
57
  .workspace(props.projectId)
46
58
  .execution();
47
- this.containerRef = createRef();
48
- }
49
- componentWillUnmount() {
50
- if (this.visualization) {
51
- this.visualization.unmount();
52
- }
53
- // In order to avoid race conditions when mounting and unmounting synchronously,
54
- // we use timeout for React18.
55
- // https://github.com/facebook/react/issues/25675
56
- this.reactRootsMap.forEach((root) => setTimeout(() => root.unmount(), 0));
57
- }
58
- UNSAFE_componentWillReceiveProps(nextProps) {
59
- const newDerivedBucketItemsChanged = !isEmpty(nextProps.newDerivedBucketItems) &&
60
- !isEqual(nextProps.newDerivedBucketItems, this.props.newDerivedBucketItems);
61
- if (newDerivedBucketItemsChanged) {
62
- this.triggerPlaceNewDerivedBucketItems(nextProps);
63
- return;
64
- }
65
- // buckets changed from within inner visualization logic
66
- const bucketsToUpdate = this.visualization?.getBucketsToUpdate(this.props.referencePoint, nextProps.referencePoint);
67
- if (bucketsToUpdate) {
68
- this.triggerPlaceNewDerivedBucketItems(nextProps, bucketsToUpdate);
69
- this.triggerExtendedReferencePointChanged(nextProps, this.props);
70
- return;
71
- }
72
- const visualizationClassChanged = !isEqual(nextProps.visualizationClass, this.props.visualizationClass);
73
- const referencePointChanged = BaseVisualization.bucketReferencePointHasChanged(this.props.referencePoint, nextProps.referencePoint);
74
- const relevantPropertiesChanged = this.somePropertiesRelevantForReferencePointChanged(this.props.referencePoint, nextProps.referencePoint);
75
- const labelsChanged = !isEqual(this.props.insight?.insight.attributeFilterConfigs, nextProps.insight?.insight.attributeFilterConfigs);
76
- const propertiesControlsChanged = BaseVisualization.propertiesControlsHasChanged(this.props.referencePoint, nextProps.referencePoint);
77
- if (visualizationClassChanged) {
78
- this.visElementId = uuidv4();
79
- this.setupVisualization(nextProps);
80
- }
81
- if (referencePointChanged ||
82
- relevantPropertiesChanged ||
83
- visualizationClassChanged ||
84
- labelsChanged) {
85
- this.triggerExtendedReferencePointChanged(nextProps,
86
- // only pass current props if the visualization class is the same (see getExtendedReferencePoint JSDoc)
87
- visualizationClassChanged ? undefined : this.props);
88
- // Some of the properties eg. stacking of measures, dual axes influence sorting
89
- }
90
- else if (propertiesControlsChanged) {
91
- this.triggerPropertiesChanged(nextProps, this.props);
92
- }
93
59
  }
94
- componentDidMount() {
95
- this.setupVisualization(this.props);
96
- this.updateVisualization();
97
- this.triggerExtendedReferencePointChanged(this.props);
98
- }
99
- componentDidUpdate() {
100
- if (this.props.isMdObjectValid) {
101
- this.updateVisualization();
102
- }
103
- }
104
- render() {
105
- return (_jsx("div", { "aria-label": "base-visualization", style: { height: "100%" }, className: this.getClassName(), ref: this.containerRef }, this.visElementId));
106
- }
107
- getVisElementClassName() {
108
- return `gd-vis-${this.visElementId}`;
109
- }
110
- getClassName() {
111
- return `gd-base-visualization ${this.getVisElementClassName()}`;
112
- }
113
- setupVisualization(props) {
114
- const { insight, visualizationClass, environment, locale, featureFlags, permissions, projectId, configPanelClassName, renderer, unmount, } = props;
115
- if (this.visualization) {
116
- this.visualization.unmount();
60
+ const getVisElementClassName = () => `gd-vis-${visElementIdRef.current}`;
61
+ const getClassName = () => `gd-base-visualization ${getVisElementClassName()}`;
62
+ const getReactRenderFunction = () => {
63
+ return (children, element) => {
64
+ if (!element) {
65
+ return;
66
+ }
67
+ if (!reactRootsMap.current.get(element)) {
68
+ reactRootsMap.current.set(element, createRoot(element));
69
+ }
70
+ reactRootsMap.current.get(element).render(children);
71
+ };
72
+ };
73
+ const getReactUnmountFunction = () => {
74
+ return () => reactRootsMap.current.forEach((root) => root.render(null));
75
+ };
76
+ /**
77
+ * The `hostProps` are the equivalent of `this.props` of the original class component: the class
78
+ * picked the catalog and the messages from the props of the last completed render, which - when
79
+ * setting up on a visualization class change - were still the previous ones. Everything else is
80
+ * taken from the props the visualization is being set up for.
81
+ */
82
+ const setupVisualization = (setupProps, hostProps = setupProps) => {
83
+ const { insight, visualizationClass, environment, locale, featureFlags: setupFeatureFlags, permissions, projectId, configPanelClassName: setupConfigPanelClassName, renderer, unmount, } = setupProps;
84
+ if (visualization.current) {
85
+ visualization.current.unmount();
117
86
  }
118
87
  const visUri = visClassUrl(visualizationClass);
119
88
  let visFactory;
120
89
  try {
121
- visFactory = this.props
122
- .visualizationCatalog.forUri(visUri, featureFlags?.enableNewPivotTable ?? true, featureFlags?.enableNewGeoPushpin ?? false)
90
+ visFactory = hostProps
91
+ .visualizationCatalog.forUri(visUri, setupFeatureFlags?.enableNewPivotTable ?? true, setupFeatureFlags?.enableNewGeoPushpin ?? false)
123
92
  .getFactory();
124
93
  }
125
94
  catch {
126
95
  console.error(`Error: unsupported visualization type - ${visUri}`);
127
96
  }
128
- let visualizationId;
129
- if (isInsight(insight)) {
130
- visualizationId = insight.insight.identifier;
131
- }
132
- else {
133
- visualizationId = "__new_visualization__";
134
- }
135
97
  if (visFactory) {
136
98
  const constructorParams = {
137
99
  projectId,
138
100
  locale,
139
- messages: this.props.messages,
101
+ messages: hostProps.messages,
140
102
  environment,
141
- backend: props.backend.withCorrelation({ visualizationId }),
103
+ backend: setupProps.backend.withCorrelation({
104
+ visualizationId: getVisualizationId(insight),
105
+ }),
142
106
  element: () => {
143
- const rootNode = this.containerRef.current?.getRootNode() ?? document;
144
- return rootNode.querySelector(`.${this.getVisElementClassName()}`);
107
+ const rootNode = containerRef.current?.getRootNode() ?? document;
108
+ return rootNode.querySelector(`.${getVisElementClassName()}`);
145
109
  },
146
110
  configPanelElement: () => {
147
- const rootNode = this.containerRef.current?.getRootNode() ?? document;
148
- return rootNode.querySelector(`.${configPanelClassName}`);
111
+ const rootNode = containerRef.current?.getRootNode() ?? document;
112
+ return rootNode.querySelector(`.${setupConfigPanelClassName}`);
149
113
  },
150
114
  callbacks: {
151
- afterRender: props.afterRender,
152
- onLoadingChanged: props.onLoadingChanged,
153
- onError: props.onError,
154
- onExportReady: props.onExportReady,
155
- pushData: props.pushData,
156
- onDrill: props.onDrill,
157
- onDataView: props.onDataView,
115
+ afterRender: setupProps.afterRender,
116
+ onLoadingChanged: setupProps.onLoadingChanged,
117
+ onError: setupProps.onError,
118
+ onExportReady: setupProps.onExportReady,
119
+ pushData: setupProps.pushData,
120
+ onDrill: setupProps.onDrill,
121
+ onDataView: setupProps.onDataView,
158
122
  },
159
- featureFlags,
123
+ featureFlags: setupFeatureFlags,
160
124
  permissions,
161
- visualizationProperties: insightProperties(props.insight),
162
- renderFun: (renderer ?? this.getReactRenderFunction()),
163
- unmountFun: unmount ?? this.getReactUnmountFunction(),
125
+ visualizationProperties: insightProperties(setupProps.insight),
126
+ renderFun: (renderer ?? getReactRenderFunction()),
127
+ unmountFun: unmount ?? getReactUnmountFunction(),
164
128
  };
165
- this.visualization = visFactory(constructorParams);
129
+ visualization.current = visFactory(constructorParams);
166
130
  }
167
- }
168
- getReactRenderFunction = () => {
169
- return (children, element) => {
170
- if (!element) {
171
- return;
172
- }
173
- if (!this.reactRootsMap.get(element)) {
174
- this.reactRootsMap.set(element, createRoot(element));
175
- }
176
- this.reactRootsMap.get(element).render(children);
177
- };
178
131
  };
179
- getReactUnmountFunction = () => {
180
- return () => this.reactRootsMap.forEach((root) => root.render(null));
132
+ const getVisualizationProps = () => {
133
+ return {
134
+ locale: props.locale,
135
+ dateFormat: props.dateFormat,
136
+ dimensions: {
137
+ width: props.width,
138
+ height: props.height,
139
+ },
140
+ custom: {
141
+ drillableItems: props.drillableItems,
142
+ totalsEditAllowed: props.totalsEditAllowed,
143
+ lastSavedVisClassUrl: props.lastSavedVisClassUrl,
144
+ sourceInsightId: props.sourceInsightId,
145
+ configurationPanelRenderers: props.configurationPanelRenderers,
146
+ },
147
+ messages: props.messages,
148
+ config: props.config,
149
+ theme: props.theme,
150
+ referenceTheme: props.referenceTheme,
151
+ executionConfig: props.executionConfig,
152
+ supportsChartFill: props.supportsChartFill,
153
+ };
181
154
  };
182
- updateVisualization() {
183
- if (!this.visualization) {
155
+ const updateVisualization = () => {
156
+ if (!visualization.current) {
184
157
  return;
185
158
  }
186
- this.visualization.update(this.getVisualizationProps(), this.props.insight, this.props.insightPropertiesMeta, this.executionFactory);
187
- }
188
- triggerPlaceNewDerivedBucketItems(props, newBucketItemsFromVisualization) {
189
- const { newDerivedBucketItems, referencePoint, onNewDerivedBucketItemsPlaced } = props;
190
- const newDerivedBucketItemsToPlace = newBucketItemsFromVisualization ?? newDerivedBucketItems;
191
- if (this.visualization &&
192
- referencePoint &&
159
+ visualization.current.update(getVisualizationProps(), props.insight, props.insightPropertiesMeta, executionFactory.current);
160
+ };
161
+ const triggerPlaceNewDerivedBucketItems = (triggerProps, newBucketItemsFromVisualization) => {
162
+ const { newDerivedBucketItems: triggerNewDerivedBucketItems, referencePoint: triggerReferencePoint, onNewDerivedBucketItemsPlaced: triggerOnNewDerivedBucketItemsPlaced, } = triggerProps;
163
+ const newDerivedBucketItemsToPlace = newBucketItemsFromVisualization ?? triggerNewDerivedBucketItems;
164
+ if (visualization.current &&
165
+ triggerReferencePoint &&
193
166
  newDerivedBucketItemsToPlace &&
194
- onNewDerivedBucketItemsPlaced) {
195
- void this.visualization
196
- .addNewDerivedBucketItems(referencePoint, newDerivedBucketItemsToPlace)
197
- .then(onNewDerivedBucketItemsPlaced);
167
+ triggerOnNewDerivedBucketItemsPlaced) {
168
+ void visualization.current
169
+ .addNewDerivedBucketItems(triggerReferencePoint, newDerivedBucketItemsToPlace)
170
+ .then(triggerOnNewDerivedBucketItemsPlaced);
198
171
  }
199
- }
200
- triggerExtendedReferencePointChanged(newProps, currentProps) {
201
- const { referencePoint: newReferencePoint, onExtendedReferencePointChanged } = newProps;
202
- if (this.visualization && newReferencePoint && onExtendedReferencePointChanged) {
203
- void this.visualization
204
- .getExtendedReferencePoint(newReferencePoint, currentProps?.referencePoint)
172
+ };
173
+ const triggerExtendedReferencePointChanged = (newProps, previousProps) => {
174
+ const { referencePoint: newReferencePoint, onExtendedReferencePointChanged: newOnExtendedReferencePointChanged, } = newProps;
175
+ if (visualization.current && newReferencePoint && newOnExtendedReferencePointChanged) {
176
+ void visualization.current
177
+ .getExtendedReferencePoint(newReferencePoint, previousProps?.referencePoint)
205
178
  .then(async (extendedReferencePoint) => {
206
- const sortConfig = await this.visualization.getSortConfig(extendedReferencePoint);
179
+ const sortConfig = await visualization.current.getSortConfig(extendedReferencePoint);
207
180
  let updatedExtendedReferencePoint = cleanupKeyDriverAnalysisOnMetrics(extendedReferencePoint);
208
181
  updatedExtendedReferencePoint = hideKeyDriverOnMetrics(updatedExtendedReferencePoint);
209
182
  // new sort config needs to be sent together with new reference point to avoid double executions with old invalid sort until new one arrives by its own handler
210
- onExtendedReferencePointChanged(updatedExtendedReferencePoint, sortConfig);
183
+ newOnExtendedReferencePointChanged(updatedExtendedReferencePoint, sortConfig);
211
184
  });
212
185
  }
213
- }
214
- triggerPropertiesChanged(newProps, currentProps) {
186
+ };
187
+ const triggerPropertiesChanged = (newProps, previousProps) => {
215
188
  const { referencePoint: newReferencePoint, onSortingChanged } = newProps;
216
189
  // Some of the properties eg. stacking of measures, dual axes influence sorting
217
- if (this.visualization && newReferencePoint && onSortingChanged) {
218
- void this.visualization
219
- .getExtendedReferencePoint(newReferencePoint, currentProps?.referencePoint)
190
+ if (visualization.current && newReferencePoint && onSortingChanged) {
191
+ void visualization.current
192
+ .getExtendedReferencePoint(newReferencePoint, previousProps?.referencePoint)
220
193
  .then((extendedRefPoint) => {
221
- void this.visualization.getSortConfig(extendedRefPoint).then(onSortingChanged);
194
+ void visualization.current.getSortConfig(extendedRefPoint).then(onSortingChanged);
222
195
  });
223
196
  }
224
- }
225
- static bucketReferencePointHasChanged(currentReferencePoint, nextReferencePoint) {
226
- return !isEqual(omit(currentReferencePoint, ["properties", "availableSorts"]), omit(nextReferencePoint, ["properties", "availableSorts"]));
227
- }
228
- static propertiesControlsHasChanged(currentReferencePoint, nextReferencePoint) {
229
- return !isEqual(currentReferencePoint?.properties?.controls, nextReferencePoint?.properties?.controls);
230
- }
231
- somePropertiesRelevantForReferencePointChanged(currentReferencePoint, nextReferencePoint) {
232
- if (this.visualization) {
233
- return this.visualization.haveSomePropertiesRelevantForReferencePointChanged(currentReferencePoint, nextReferencePoint);
197
+ };
198
+ const somePropertiesRelevantForReferencePointChanged = (currentReferencePoint, nextReferencePoint) => {
199
+ if (visualization.current) {
200
+ return visualization.current.haveSomePropertiesRelevantForReferencePointChanged(currentReferencePoint, nextReferencePoint);
234
201
  }
235
202
  return false;
236
- }
237
- getVisualizationProps() {
238
- return {
239
- locale: this.props.locale,
240
- dateFormat: this.props.dateFormat,
241
- dimensions: {
242
- width: this.props.width,
243
- height: this.props.height,
244
- },
245
- custom: {
246
- drillableItems: this.props.drillableItems,
247
- totalsEditAllowed: this.props.totalsEditAllowed,
248
- lastSavedVisClassUrl: this.props.lastSavedVisClassUrl,
249
- sourceInsightId: this.props.sourceInsightId,
250
- configurationPanelRenderers: this.props.configurationPanelRenderers,
251
- },
252
- messages: this.props.messages,
253
- config: this.props.config,
254
- theme: this.props.theme,
255
- referenceTheme: this.props.referenceTheme,
256
- executionConfig: this.props.executionConfig,
257
- supportsChartFill: this.props.supportsChartFill,
258
- };
259
- }
260
- getInsightWithDrillDownApplied(sourceVisualization, drillDownContext) {
261
- return this.visualization.getInsightWithDrillDownApplied(sourceVisualization, drillDownContext, this.props.backend.capabilities.supportsElementUris ?? true);
262
- }
263
- getExecution() {
264
- if (!this.visualization) {
265
- this.setupVisualization(this.props);
203
+ };
204
+ const getInsightWithDrillDownApplied = (sourceVisualization, drillDownContext) => {
205
+ return visualization.current.getInsightWithDrillDownApplied(sourceVisualization, drillDownContext, props.backend.capabilities.supportsElementUris ?? true);
206
+ };
207
+ const getExecution = () => {
208
+ if (!visualization.current) {
209
+ setupVisualization(currentProps);
266
210
  }
267
- return this.visualization.getExecution(this.getVisualizationProps(), this.props.insight, this.executionFactory);
268
- }
269
- getExecutions() {
270
- if (!this.visualization) {
271
- this.setupVisualization(this.props);
211
+ return visualization.current.getExecution(getVisualizationProps(), props.insight, executionFactory.current);
212
+ };
213
+ const getExecutions = () => {
214
+ if (!visualization.current) {
215
+ setupVisualization(currentProps);
272
216
  }
273
- return this.visualization?.getExecutions?.(this.getVisualizationProps(), this.props.insight, this.executionFactory);
274
- }
275
- }
217
+ return visualization.current?.getExecutions?.(getVisualizationProps(), props.insight, executionFactory.current);
218
+ };
219
+ useImperativeHandle(ref, () => ({
220
+ getExecution,
221
+ getExecutions,
222
+ getInsightWithDrillDownApplied,
223
+ }));
224
+ const prevPropsRef = useRef(currentProps);
225
+ const mountedRef = useRef(false);
226
+ /**
227
+ * Replacement of UNSAFE_componentWillReceiveProps. Runs before the mount & update effect below so
228
+ * that the derived bucket items and the reference point are handled before the visualization is
229
+ * updated, the same way the class did it in the pre-render phase.
230
+ *
231
+ * The effect intentionally has no dependency list - it has to see every single commit, exactly like
232
+ * the class lifecycle did; the props diff below decides what actually happens. The visElementId is
233
+ * regenerated only when the visualization class really changes, so there is no update loop.
234
+ */
235
+ // eslint-disable-next-line react-hooks/exhaustive-deps
236
+ useLayoutEffect(() => {
237
+ const previousProps = prevPropsRef.current;
238
+ prevPropsRef.current = currentProps;
239
+ if (previousProps === currentProps) {
240
+ // the very first run, there is nothing to diff against yet
241
+ return;
242
+ }
243
+ const newDerivedBucketItemsChanged = !isEmpty(currentProps.newDerivedBucketItems) &&
244
+ !isEqual(currentProps.newDerivedBucketItems, previousProps.newDerivedBucketItems);
245
+ if (newDerivedBucketItemsChanged) {
246
+ triggerPlaceNewDerivedBucketItems(currentProps);
247
+ return;
248
+ }
249
+ // buckets changed from within inner visualization logic
250
+ const bucketsToUpdate = visualization.current?.getBucketsToUpdate(previousProps.referencePoint, currentProps.referencePoint);
251
+ if (bucketsToUpdate) {
252
+ triggerPlaceNewDerivedBucketItems(currentProps, bucketsToUpdate);
253
+ triggerExtendedReferencePointChanged(currentProps, previousProps);
254
+ return;
255
+ }
256
+ const visualizationClassChanged = !isEqual(currentProps.visualizationClass, previousProps.visualizationClass);
257
+ const referencePointChanged = bucketReferencePointHasChanged(previousProps.referencePoint, currentProps.referencePoint);
258
+ const relevantPropertiesChanged = somePropertiesRelevantForReferencePointChanged(previousProps.referencePoint, currentProps.referencePoint);
259
+ const labelsChanged = !isEqual(previousProps.insight?.insight.attributeFilterConfigs, currentProps.insight?.insight.attributeFilterConfigs);
260
+ const propertiesControlsChanged = propertiesControlsHasChanged(previousProps.referencePoint, currentProps.referencePoint);
261
+ if (visualizationClassChanged) {
262
+ const newVisElementId = uuidv4();
263
+ visElementIdRef.current = newVisElementId;
264
+ setVisElementId(newVisElementId);
265
+ setupVisualization(currentProps, previousProps);
266
+ }
267
+ if (referencePointChanged ||
268
+ relevantPropertiesChanged ||
269
+ visualizationClassChanged ||
270
+ labelsChanged) {
271
+ triggerExtendedReferencePointChanged(currentProps,
272
+ // only pass current props if the visualization class is the same (see getExtendedReferencePoint JSDoc)
273
+ visualizationClassChanged ? undefined : previousProps);
274
+ // Some of the properties eg. stacking of measures, dual axes influence sorting
275
+ }
276
+ else if (propertiesControlsChanged) {
277
+ triggerPropertiesChanged(currentProps, previousProps);
278
+ }
279
+ });
280
+ /**
281
+ * Replacement of componentDidMount and componentDidUpdate.
282
+ */
283
+ useLayoutEffect(() => {
284
+ if (!mountedRef.current) {
285
+ mountedRef.current = true;
286
+ setupVisualization(currentProps);
287
+ updateVisualization();
288
+ triggerExtendedReferencePointChanged(currentProps);
289
+ return;
290
+ }
291
+ if (visElementId !== visElementIdRef.current) {
292
+ // the visualization class has just changed; the container div is about to be remounted
293
+ // under the new key, so postpone the update until it is in the DOM
294
+ return;
295
+ }
296
+ if (isMdObjectValid) {
297
+ updateVisualization();
298
+ }
299
+ });
300
+ /**
301
+ * Replacement of componentWillUnmount.
302
+ */
303
+ useEffect(() => {
304
+ const reactRoots = reactRootsMap.current;
305
+ return () => {
306
+ // a subsequent mount (React StrictMode remounts the tree in development) has to set the
307
+ // visualization up again, exactly like componentDidMount did
308
+ mountedRef.current = false;
309
+ visualization.current?.unmount();
310
+ // In order to avoid race conditions when mounting and unmounting synchronously,
311
+ // we use timeout for React18.
312
+ // https://github.com/facebook/react/issues/25675
313
+ reactRoots.forEach((root) => setTimeout(() => root.unmount(), 0));
314
+ };
315
+ }, []);
316
+ return (_jsx("div", { "aria-label": "base-visualization", style: { height: "100%" }, className: getClassName(), ref: containerRef }, visElementId));
317
+ });
@@ -8,7 +8,7 @@ export { ColorDropdown } from "./components/configurationControls/colors/colorDr
8
8
  export { ColoredItemContent } from "./components/configurationControls/colors/coloredItemsList/ColoredItemContent.js";
9
9
  export { LegendSection } from "./components/configurationControls/legend/LegendSection.js";
10
10
  export { MinMaxControl } from "./components/configurationControls/MinMaxControl.js";
11
- export { BaseVisualization, type IBaseVisualizationProps } from "./components/BaseVisualization.js";
11
+ export { BaseVisualization, type IBaseVisualizationApi, type IBaseVisualizationProps, } from "./components/BaseVisualization.js";
12
12
  export { DefaultVisualizationCatalog, FullVisualizationCatalog, type IVisualizationCatalog, } from "./components/VisualizationCatalog.js";
13
13
  export { resolveMessages, DEFAULT_LANGUAGE, DEFAULT_MESSAGES } from "./utils/translations.js";
14
14
  export { createIntlMock } from "./tests/testIntlProvider.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ export { ColorDropdown } from "./components/configurationControls/colors/colorDr
10
10
  export { ColoredItemContent } from "./components/configurationControls/colors/coloredItemsList/ColoredItemContent.js";
11
11
  export { LegendSection } from "./components/configurationControls/legend/LegendSection.js";
12
12
  export { MinMaxControl } from "./components/configurationControls/MinMaxControl.js";
13
- export { BaseVisualization } from "./components/BaseVisualization.js";
13
+ export { BaseVisualization, } from "./components/BaseVisualization.js";
14
14
  export { DefaultVisualizationCatalog, FullVisualizationCatalog, } from "./components/VisualizationCatalog.js";
15
15
  export { resolveMessages, DEFAULT_LANGUAGE, DEFAULT_MESSAGES } from "./utils/translations.js";
16
16
  export { createIntlMock } from "./tests/testIntlProvider.js";
@@ -628,6 +628,7 @@ export declare const de_DE: {
628
628
  "objectShare.selfRestrict.title": string;
629
629
  "objectShare.selfRestrict.warning": string;
630
630
  "objectShare.workspaceLevel.inherited": string;
631
+ "objectShare.granteeRemove.inherited": string;
631
632
  "objectShare.grantee.you": string;
632
633
  "objectShare.adminTag.label": string;
633
634
  "objectShare.adminTag.tooltip": string;
@@ -641,12 +642,15 @@ export declare const de_DE: {
641
642
  "properties.conditionalFormatting.empty": string;
642
643
  "properties.conditionalFormatting.rulesLabel": string;
643
644
  "properties.conditionalFormatting.addRule": string;
645
+ "properties.conditionalFormatting.semanticLabel": string;
644
646
  "properties.conditionalFormatting.rule.invalid": string;
645
647
  "properties.conditionalFormatting.rule.invalidValue": string;
646
648
  "properties.conditionalFormatting.rule.edit": string;
647
649
  "properties.conditionalFormatting.rule.delete": string;
650
+ "properties.conditionalFormatting.rule.view": string;
648
651
  "properties.conditionalFormatting.dialog.addTitle": string;
649
652
  "properties.conditionalFormatting.dialog.editTitle": string;
653
+ "properties.conditionalFormatting.dialog.viewTitle": string;
650
654
  "properties.conditionalFormatting.dialog.target": string;
651
655
  "properties.conditionalFormatting.dialog.selectTarget": string;
652
656
  "properties.conditionalFormatting.dialog.condition": string;
@@ -1 +1 @@
1
- {"version":3,"file":"de-DE.localization-bundle.d.ts","sourceRoot":"","sources":["../../../src/internal/translations/de-DE.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAurBjB,CAAC"}
1
+ {"version":3,"file":"de-DE.localization-bundle.d.ts","sourceRoot":"","sources":["../../../src/internal/translations/de-DE.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2rBjB,CAAC"}
@@ -630,6 +630,7 @@ export const de_DE = {
630
630
  "objectShare.selfRestrict.title": "Ihren Zugriff beschränken?",
631
631
  "objectShare.selfRestrict.warning": "Sie können für sich selbst keine höheren Berechtigungen festlegen.",
632
632
  "objectShare.workspaceLevel.inherited": "Diese Berechtigung wird von einem übergeordneten Workspace gewährt und kann hier nicht herabgestuft werden.",
633
+ "objectShare.granteeRemove.inherited": "Dieser Zugriff wird von einer Gruppe oder einem übergeordneten Workspace geerbt und kann hier nicht entfernt werden.",
633
634
  "objectShare.grantee.you": "{name} (Sie)",
634
635
  "objectShare.adminTag.label": "Administrator",
635
636
  "objectShare.adminTag.tooltip": "Sie und andere Administratoren haben vollen Zugriff auf dieses Objekt.",
@@ -643,12 +644,15 @@ export const de_DE = {
643
644
  "properties.conditionalFormatting.empty": "Heben Sie Zellen oder Zeilen hervor, die einer Regel entsprechen.",
644
645
  "properties.conditionalFormatting.rulesLabel": "Regeln",
645
646
  "properties.conditionalFormatting.addRule": "Hinzufügen",
647
+ "properties.conditionalFormatting.semanticLabel": "Aus der semantischen Ebene",
646
648
  "properties.conditionalFormatting.rule.invalid": "Spalte nicht gefunden",
647
649
  "properties.conditionalFormatting.rule.invalidValue": "Ungültiger Wert",
648
650
  "properties.conditionalFormatting.rule.edit": "Regel bearbeiten",
649
651
  "properties.conditionalFormatting.rule.delete": "Regel löschen",
652
+ "properties.conditionalFormatting.rule.view": "Regel anzeigen",
650
653
  "properties.conditionalFormatting.dialog.addTitle": "Regel hinzufügen",
651
654
  "properties.conditionalFormatting.dialog.editTitle": "Regel bearbeiten",
655
+ "properties.conditionalFormatting.dialog.viewTitle": "Regel anzeigen",
652
656
  "properties.conditionalFormatting.dialog.target": "Wann",
653
657
  "properties.conditionalFormatting.dialog.selectTarget": "Messwert oder Attribut auswählen",
654
658
  "properties.conditionalFormatting.dialog.condition": "Bedingung",