@gooddata/sdk-ui-geo 11.15.0-alpha.8 → 11.15.0

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 (71) hide show
  1. package/esm/next/components/RenderGeoChartNext.d.ts.map +1 -1
  2. package/esm/next/components/RenderGeoChartNext.js +5 -4
  3. package/esm/next/components/RenderGeoChartNext.js.map +1 -1
  4. package/esm/next/hooks/dataLoading/useNormalizedLayerExecutions.d.ts +3 -1
  5. package/esm/next/hooks/dataLoading/useNormalizedLayerExecutions.d.ts.map +1 -1
  6. package/esm/next/hooks/dataLoading/useNormalizedLayerExecutions.js +51 -34
  7. package/esm/next/hooks/dataLoading/useNormalizedLayerExecutions.js.map +1 -1
  8. package/esm/next/hooks/layers/useLayerClickEvent.d.ts.map +1 -1
  9. package/esm/next/hooks/layers/useLayerClickEvent.js +62 -5
  10. package/esm/next/hooks/layers/useLayerClickEvent.js.map +1 -1
  11. package/esm/next/hooks/map/useApplyViewportOnConfigChange.d.ts +21 -0
  12. package/esm/next/hooks/map/useApplyViewportOnConfigChange.d.ts.map +1 -0
  13. package/esm/next/hooks/map/useApplyViewportOnConfigChange.js +44 -0
  14. package/esm/next/hooks/map/useApplyViewportOnConfigChange.js.map +1 -0
  15. package/esm/next/hooks/map/useMapResize.d.ts +2 -2
  16. package/esm/next/hooks/map/useMapResize.js +3 -3
  17. package/esm/next/hooks/map/useMapResize.js.map +1 -1
  18. package/esm/next/hooks/props/useResolvedGeoChartNextProps.js +2 -2
  19. package/esm/next/hooks/props/useResolvedGeoChartNextProps.js.map +1 -1
  20. package/esm/next/hooks/pushData/useGeoPushData.d.ts +3 -1
  21. package/esm/next/hooks/pushData/useGeoPushData.d.ts.map +1 -1
  22. package/esm/next/hooks/pushData/useGeoPushData.js +28 -4
  23. package/esm/next/hooks/pushData/useGeoPushData.js.map +1 -1
  24. package/esm/next/layers/area/source.d.ts.map +1 -1
  25. package/esm/next/layers/area/source.js +3 -9
  26. package/esm/next/layers/area/source.js.map +1 -1
  27. package/esm/next/layers/area/tooltip/tooltipManagement.d.ts.map +1 -1
  28. package/esm/next/layers/area/tooltip/tooltipManagement.js +4 -6
  29. package/esm/next/layers/area/tooltip/tooltipManagement.js.map +1 -1
  30. package/esm/next/layers/common/constants.d.ts +2 -0
  31. package/esm/next/layers/common/constants.d.ts.map +1 -1
  32. package/esm/next/layers/common/constants.js +6 -1
  33. package/esm/next/layers/common/constants.js.map +1 -1
  34. package/esm/next/layers/pushpin/adapter.d.ts.map +1 -1
  35. package/esm/next/layers/pushpin/adapter.js +9 -5
  36. package/esm/next/layers/pushpin/adapter.js.map +1 -1
  37. package/esm/next/map/MapController.d.ts +2 -1
  38. package/esm/next/map/MapController.d.ts.map +1 -1
  39. package/esm/next/map/MapController.js +6 -4
  40. package/esm/next/map/MapController.js.map +1 -1
  41. package/esm/next/map/runtime/mapConfig.d.ts +59 -7
  42. package/esm/next/map/runtime/mapConfig.d.ts.map +1 -1
  43. package/esm/next/map/runtime/mapConfig.js +1 -1
  44. package/esm/next/map/runtime/mapConfig.js.map +1 -1
  45. package/esm/next/map/viewport/viewportPresets.d.ts.map +1 -1
  46. package/esm/next/map/viewport/viewportPresets.js +4 -3
  47. package/esm/next/map/viewport/viewportPresets.js.map +1 -1
  48. package/esm/next/map/viewport/viewportResolution.d.ts +31 -0
  49. package/esm/next/map/viewport/viewportResolution.d.ts.map +1 -0
  50. package/esm/next/map/viewport/viewportResolution.js +58 -0
  51. package/esm/next/map/viewport/viewportResolution.js.map +1 -0
  52. package/esm/next/map/viewport.d.ts +5 -0
  53. package/esm/next/map/viewport.d.ts.map +1 -1
  54. package/esm/next/map/viewport.js +6 -1
  55. package/esm/next/map/viewport.js.map +1 -1
  56. package/esm/next/pushData/PushDataSync.d.ts +3 -1
  57. package/esm/next/pushData/PushDataSync.d.ts.map +1 -1
  58. package/esm/next/pushData/PushDataSync.js +3 -2
  59. package/esm/next/pushData/PushDataSync.js.map +1 -1
  60. package/esm/next/types/common/drilling.d.ts +10 -0
  61. package/esm/next/types/common/drilling.d.ts.map +1 -0
  62. package/esm/next/types/common/drilling.js +3 -0
  63. package/esm/next/types/common/drilling.js.map +1 -0
  64. package/esm/next/utils/fingerprint.d.ts +11 -0
  65. package/esm/next/utils/fingerprint.d.ts.map +1 -1
  66. package/esm/next/utils/fingerprint.js +13 -1
  67. package/esm/next/utils/fingerprint.js.map +1 -1
  68. package/esm/next/utils/layerConversion.d.ts.map +1 -1
  69. package/esm/next/utils/layerConversion.js +12 -2
  70. package/esm/next/utils/layerConversion.js.map +1 -1
  71. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"RenderGeoChartNext.d.ts","sourceRoot":"","sources":["../../../src/next/components/RenderGeoChartNext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAA6B,MAAM,OAAO,CAAC;AAyBrE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CA0EjD"}
1
+ {"version":3,"file":"RenderGeoChartNext.d.ts","sourceRoot":"","sources":["../../../src/next/components/RenderGeoChartNext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAA6B,MAAM,OAAO,CAAC;AAyBrE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAgFjD"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // (C) 2025 GoodData Corporation
2
+ // (C) 2025-2026 GoodData Corporation
3
3
  import { useMemo, useRef, useState } from "react";
4
4
  import cx from "classnames";
5
5
  import { defaultImport } from "default-import";
@@ -10,7 +10,7 @@ import { GeoChartNextLegendOverlay } from "./multiLayerLegend/GeoChartNextLegend
10
10
  import { useGeoChartNextProps } from "../context/GeoChartNextContext.js";
11
11
  import { useGeoLayers } from "../context/GeoLayersContext.js";
12
12
  import { MapController } from "../map/MapController.js";
13
- import { computeCombinedViewport } from "../map/viewport.js";
13
+ import { computeCombinedViewport, computeViewportFromConfig } from "../map/viewport.js";
14
14
  import { PushDataSync } from "../pushData/PushDataSync.js";
15
15
  // There are known compatibility issues between CommonJS (CJS) and ECMAScript modules (ESM).
16
16
  const Measure = defaultImport(ReactMeasure);
@@ -38,12 +38,13 @@ export function RenderGeoChartNext() {
38
38
  const [chartContainerRect, setChartContainerRect] = useState(null);
39
39
  const colorStrategy = primaryLayer?.colorStrategy ?? null;
40
40
  const availableLegends = primaryLayer?.availableLegends;
41
- const initialViewport = useMemo(() => computeCombinedViewport(layers), [layers]);
41
+ const dataViewport = useMemo(() => computeCombinedViewport(layers), [layers]);
42
+ const initialViewport = useMemo(() => computeViewportFromConfig(props.config, dataViewport), [props.config, dataViewport]);
42
43
  const drillablePredicates = useMemo(() => convertDrillableItemsToPredicates(props.drillableItems ?? []), [props.drillableItems]);
43
44
  const isExportMode = props.config?.isExportMode ?? false;
44
45
  const containerClass = cx("gd-geo-chart-next__container", "gd-geo-component", containerBaseId, containerId, {
45
46
  isExportMode,
46
47
  });
47
- return (_jsx(Measure, { client: true, onResize: setChartContainerRect, children: ({ measureRef }) => (_jsxs("div", { id: containerId, "data-testid": isExportMode ? "geo-chart-next-export-mode" : containerBaseId, className: containerClass, ref: measureRef, children: [_jsx("div", { ref: mapContainerRef, className: "gd-geo-chart-next__map", children: _jsx(IntlTranslationsProvider, { children: (translationProps) => (_jsx(GeoChartNextLegendOverlay, { config: props.config, chartContainerRect: chartContainerRect, layers: layers, layerExecutions: layerExecutions, primaryLayer: primaryLayer, numericSymbols: translationProps.numericSymbols })) }) }), _jsx(MapController, { mapContainerRef: mapContainerRef, chartContainerRect: chartContainerRect, initialViewport: initialViewport, layerExecutions: layerExecutions, drillablePredicates: drillablePredicates, onCenterPositionChanged: props.onCenterPositionChanged, onZoomChanged: props.onZoomChanged, onDrill: props.onDrill, afterRender: props.afterRender, config: props.config, backend: props.backend }), _jsx(PushDataSync, { colorStrategy: colorStrategy, colorPalette: colorPalette, availableLegends: availableLegends })] })) }));
48
+ return (_jsx(Measure, { client: true, onResize: setChartContainerRect, children: ({ measureRef }) => (_jsxs("div", { id: containerId, "data-testid": isExportMode ? "geo-chart-next-export-mode" : containerBaseId, className: containerClass, ref: measureRef, children: [_jsx("div", { ref: mapContainerRef, className: "gd-geo-chart-next__map", children: _jsx(IntlTranslationsProvider, { children: (translationProps) => (_jsx(GeoChartNextLegendOverlay, { config: props.config, chartContainerRect: chartContainerRect, layers: layers, layerExecutions: layerExecutions, primaryLayer: primaryLayer, numericSymbols: translationProps.numericSymbols })) }) }), _jsx(MapController, { mapContainerRef: mapContainerRef, chartContainerRect: chartContainerRect, initialViewport: initialViewport, dataViewport: dataViewport, layerExecutions: layerExecutions, drillablePredicates: drillablePredicates, onCenterPositionChanged: props.onCenterPositionChanged, onZoomChanged: props.onZoomChanged, onDrill: props.onDrill, afterRender: props.afterRender, config: props.config, backend: props.backend }), _jsx(PushDataSync, { colorStrategy: colorStrategy, colorPalette: colorPalette, availableLegends: availableLegends, geoLayerType: props.type })] })) }));
48
49
  }
49
50
  //# sourceMappingURL=RenderGeoChartNext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RenderGeoChartNext.js","sourceRoot":"","sources":["../../../src/next/components/RenderGeoChartNext.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAqB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAErE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,YAA+D,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAE1B,OAAO,EAEH,wBAAwB,EACxB,iCAAiC,GACpC,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,4FAA4F;AAC5F,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;AAE5C,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB;IAC9B,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC;IAC/E,MAAM,eAAe,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,eAAe,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEpE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAC;IAEvF,MAAM,aAAa,GAAG,YAAY,EAAE,aAAa,IAAI,IAAI,CAAC;IAC1D,MAAM,gBAAgB,GAAG,YAAY,EAAE,gBAAgB,CAAC;IAExD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjF,MAAM,mBAAmB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,iCAAiC,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,EACnE,CAAC,KAAK,CAAC,cAAc,CAAC,CACzB,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,IAAI,KAAK,CAAC;IACzD,MAAM,cAAc,GAAG,EAAE,CACrB,8BAA8B,EAC9B,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX;QACI,YAAY;KACf,CACJ,CAAC;IAEF,OAAO,CACH,KAAC,OAAO,IAAC,MAAM,QAAC,QAAQ,EAAE,qBAAqB,YAC1C,CAAC,EAAE,UAAU,EAA0B,EAAE,EAAE,CAAC,CACzC,eACI,EAAE,EAAE,WAAW,iBACF,YAAY,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,eAAe,EAC1E,SAAS,EAAE,cAAc,EACzB,GAAG,EAAE,UAAU,aAEf,cAAK,GAAG,EAAE,eAAe,EAAE,SAAS,EAAC,wBAAwB,YACzD,KAAC,wBAAwB,cACpB,CAAC,gBAA6C,EAAE,EAAE,CAAC,CAChD,KAAC,yBAAyB,IACtB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,gBAAgB,CAAC,cAAc,GACjD,CACL,GACsB,GACzB,EACN,KAAC,aAAa,IACV,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,mBAAmB,EACxC,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,EACtD,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,OAAO,EAAE,KAAK,CAAC,OAAO,GACxB,EACF,KAAC,YAAY,IACT,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,gBAAgB,GACpC,IACA,CACT,GACK,CACb,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"RenderGeoChartNext.js","sourceRoot":"","sources":["../../../src/next/components/RenderGeoChartNext.tsx"],"names":[],"mappings":"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"}
@@ -39,6 +39,8 @@ export interface INormalizedLayerExecutions<TCoreProps> {
39
39
  *
40
40
  * @internal
41
41
  */
42
- export declare function useNormalizedLayerExecutions<TCoreProps extends IDataVisualizationProps & IPropsWithLayerType>(props: TCoreProps): INormalizedLayerExecutions<WithoutExecutions<TCoreProps>>;
42
+ export declare function useNormalizedLayerExecutions<TCoreProps extends IDataVisualizationProps & IPropsWithLayerType & {
43
+ backend?: unknown;
44
+ }>(props: TCoreProps): INormalizedLayerExecutions<WithoutExecutions<TCoreProps>>;
43
45
  export {};
44
46
  //# sourceMappingURL=useNormalizedLayerExecutions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNormalizedLayerExecutions.d.ts","sourceRoot":"","sources":["../../../../src/next/hooks/dataLoading/useNormalizedLayerExecutions.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAGxF,KAAK,iBAAiB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC;AAEhE;;GAEG;AACH,UAAU,mBAAmB;IACzB,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B,CAAC,UAAU;IAClD;;OAEG;IACH,eAAe,EAAE,qBAAqB,EAAE,CAAC;IAEzC;;OAEG;IACH,eAAe,EAAE,UAAU,GAAG;QAAE,MAAM,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;CACzD;AA4GD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CACxC,UAAU,SAAS,uBAAuB,GAAG,mBAAmB,EAClE,KAAK,EAAE,UAAU,GAAG,0BAA0B,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CA6C9E"}
1
+ {"version":3,"file":"useNormalizedLayerExecutions.d.ts","sourceRoot":"","sources":["../../../../src/next/hooks/dataLoading/useNormalizedLayerExecutions.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAGxF,KAAK,iBAAiB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC;AAEhE;;GAEG;AACH,UAAU,mBAAmB;IACzB,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB;AAoBD;;;;GAIG;AACH,MAAM,WAAW,0BAA0B,CAAC,UAAU;IAClD;;OAEG;IACH,eAAe,EAAE,qBAAqB,EAAE,CAAC;IAEzC;;OAEG;IACH,eAAe,EAAE,UAAU,GAAG;QAAE,MAAM,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;CACzD;AAoFD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CACxC,UAAU,SAAS,uBAAuB,GAAG,mBAAmB,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1F,KAAK,EAAE,UAAU,GAAG,0BAA0B,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAuE9E"}
@@ -1,7 +1,22 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2025-2026 GoodData Corporation
2
2
  import { useMemo } from "react";
3
3
  import { hasGeoLayerContext } from "../../layers/execution/layerContext.js";
4
- import { isRecord } from "../../utils/guards.js";
4
+ import { createExecutionBucketsFingerprint } from "../../utils/fingerprint.js";
5
+ function executionContextFingerprint(execution) {
6
+ if (!hasGeoLayerContext(execution)) {
7
+ return "";
8
+ }
9
+ const { id, type, name } = execution.context;
10
+ return `${type}:${id}:${name ?? ""}`;
11
+ }
12
+ function executionNormalizationFingerprint(execution, index) {
13
+ return [
14
+ index,
15
+ execution.fingerprint(),
16
+ createExecutionBucketsFingerprint(execution),
17
+ executionContextFingerprint(execution),
18
+ ].join("|");
19
+ }
5
20
  /**
6
21
  * Checks if a layer has a valid (non-empty) ID.
7
22
  *
@@ -43,32 +58,13 @@ function ensureUniqueLayerId(layer, usedIds, index) {
43
58
  }
44
59
  /**
45
60
  * Tries to extract a layer definition from an execution's context.
46
- * Even if the context is not a complete IGeoLayer, we try to preserve
47
- * as much information as possible (type, properties, etc).
61
+ * Unsupported context shapes are ignored; a minimal fallback layer is created.
48
62
  *
49
63
  * @internal
50
64
  */
51
- function extractLayerFromContext(execution, index, fallbackType, usedIds) {
52
- const context = execution.context;
53
- // If no context at all, create minimal fallback
54
- if (!isRecord(context)) {
55
- const id = generateUniqueId(`${fallbackType}-layer-${index}`, usedIds);
56
- return createMinimalLayer(id, fallbackType);
57
- }
58
- // Extract type from context if available
59
- const contextType = context["type"];
60
- const layerType = contextType === "pushpin" || contextType === "area" ? contextType : fallbackType;
61
- // Generate or fix the ID
62
- const contextId = context["id"];
63
- const hasValidId = typeof contextId === "string" && contextId.length > 0 && !usedIds.has(contextId);
64
- const id = hasValidId ? contextId : generateUniqueId(`${layerType}-layer-${index}`, usedIds);
65
- // Preserve all context properties and ensure required fields are set
66
- // This maintains layer configuration (filters, sortBy, etc.) even if some fields were missing
67
- return {
68
- ...context,
69
- id,
70
- type: layerType,
71
- };
65
+ function extractLayerFromContext(_execution, index, fallbackType, usedIds) {
66
+ const id = generateUniqueId(`${fallbackType}-layer-${index}`, usedIds);
67
+ return createMinimalLayer(id, fallbackType);
72
68
  }
73
69
  /**
74
70
  * Creates a minimal layer definition with just id and type.
@@ -105,10 +101,20 @@ function createMinimalLayer(id, type) {
105
101
  * @internal
106
102
  */
107
103
  export function useNormalizedLayerExecutions(props) {
108
- const { execution, executions, type: rootLayerType, ...coreProps } = props;
109
- return useMemo(() => {
104
+ const { execution, executions, type: rootLayerType } = props;
105
+ const normalizationFingerprint = [
106
+ rootLayerType ?? "",
107
+ executionNormalizationFingerprint(execution, 0),
108
+ ...(executions ?? []).map((e, index) => executionNormalizationFingerprint(e, index + 1)),
109
+ ].join("||");
110
+ const layerExecutionsCache = useMemo(() => new Map(), []);
111
+ const layerExecutions = useMemo(() => {
112
+ const cached = layerExecutionsCache.get(normalizationFingerprint);
113
+ if (cached) {
114
+ return cached;
115
+ }
110
116
  const allExecutions = [execution, ...(executions ?? [])];
111
- const layerExecutions = [];
117
+ const normalizedLayerExecutions = [];
112
118
  const usedIds = new Set();
113
119
  allExecutions.forEach((candidate, index) => {
114
120
  if (!candidate) {
@@ -127,18 +133,29 @@ export function useNormalizedLayerExecutions(props) {
127
133
  layer = extractLayerFromContext(candidate, index, fallbackType, usedIds);
128
134
  }
129
135
  usedIds.add(layer.id);
130
- layerExecutions.push({
136
+ normalizedLayerExecutions.push({
131
137
  layerId: layer.id,
132
138
  layer,
133
139
  execution: candidate,
134
140
  });
135
141
  });
136
- const layers = layerExecutions.map((record) => record.layer);
137
- const propsWithLayers = {
138
- ...coreProps,
142
+ // Prevent unbounded growth in case the fingerprint changes frequently.
143
+ // The cache is only used to stabilize outputs and avoid flicker.
144
+ if (layerExecutionsCache.size > 20) {
145
+ layerExecutionsCache.clear();
146
+ }
147
+ layerExecutionsCache.set(normalizationFingerprint, normalizedLayerExecutions);
148
+ return normalizedLayerExecutions;
149
+ }, [layerExecutionsCache, normalizationFingerprint, execution, executions, rootLayerType]);
150
+ const layers = useMemo(() => layerExecutions.map((record) => record.layer), [layerExecutions]);
151
+ const propsWithLayers = useMemo(() => {
152
+ const { execution: _execution, executions: _executions, type: _type, ...rest } = props;
153
+ return {
154
+ ...rest,
139
155
  layers,
156
+ type: rootLayerType,
140
157
  };
141
- return { layerExecutions, propsWithLayers };
142
- }, [execution, executions, rootLayerType, coreProps]);
158
+ }, [props, layers, rootLayerType]);
159
+ return { layerExecutions, propsWithLayers };
143
160
  }
144
161
  //# sourceMappingURL=useNormalizedLayerExecutions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNormalizedLayerExecutions.js","sourceRoot":"","sources":["../../../../src/next/hooks/dataLoading/useNormalizedLayerExecutions.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAG5E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA4BjD;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAgB;IACrC,OAAO,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,MAAc,EAAE,OAAoB;IAC1D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,CAAC;QACT,QAAQ,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,KAAgB,EAAE,OAAoB,EAAE,KAAa;IAC9E,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,KAAK,CAAC,IAAI,UAAU,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3E,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,uBAAuB,CAC5B,SAA6B,EAC7B,KAAa,EACb,YAA0B,EAC1B,OAAoB;IAEpB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAElC,gDAAgD;IAChD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,YAAY,UAAU,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QACvE,OAAO,kBAAkB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,yCAAyC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,SAAS,GACX,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;IAErF,yBAAyB;IACzB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpG,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,SAAS,UAAU,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAE7F,qEAAqE;IACrE,8FAA8F;IAC9F,OAAO;QACH,GAAG,OAAO;QACV,EAAE;QACF,IAAI,EAAE,SAAS;KACL,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,EAAU,EAAE,IAAkB;IACtD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,OAAO;YACH,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAkB;SAC3B,CAAC;IACN,CAAC;IAED,OAAO;QACH,EAAE;QACF,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,SAAkB;QAC5B,SAAS,EAAE,SAAkB;KAChC,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,4BAA4B,CAE1C,KAAiB;IACf,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAE3E,OAAO,OAAO,CAAC,GAAG,EAAE;QAChB,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;QAEzD,MAAM,eAAe,GAA4B,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;YACvC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACb,OAAO;YACX,CAAC;YAED,IAAI,KAAgB,CAAC;YAErB,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,0DAA0D;gBAC1D,KAAK,GAAG,mBAAmB,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACJ,gDAAgD;gBAChD,2DAA2D;gBAC3D,6DAA6D;gBAC7D,MAAM,YAAY,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC5E,KAAK,GAAG,uBAAuB,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;YAC7E,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAEtB,eAAe,CAAC,IAAI,CAAC;gBACjB,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,KAAK;gBACL,SAAS,EAAE,SAAS;aACvB,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE7D,MAAM,eAAe,GAAG;YACpB,GAAG,SAAS;YACZ,MAAM;SACkD,CAAC;QAE7D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;IAChD,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"useNormalizedLayerExecutions.js","sourceRoot":"","sources":["../../../../src/next/hooks/dataLoading/useNormalizedLayerExecutions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLayerClickEvent.d.ts","sourceRoot":"","sources":["../../../../src/next/hooks/layers/useLayerClickEvent.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,gBAAgB,EAErB,KAAK,iBAAiB,EAGzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAMvE,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,kCAAkC,CAAC;AA2DlF;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE,UAAU,GAAG,IAAI,EACtB,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAClC,mBAAmB,EAAE,gBAAgB,EAAE,EACvC,OAAO,CAAC,EAAE,iBAAiB,GAC5B,IAAI,CAoDN"}
1
+ {"version":3,"file":"useLayerClickEvent.d.ts","sourceRoot":"","sources":["../../../../src/next/hooks/layers/useLayerClickEvent.ts"],"names":[],"mappings":"AAYA,OAAO,EAEH,KAAK,gBAAgB,EAErB,KAAK,iBAAiB,EAGzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAOvE,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,kCAAkC,CAAC;AAiIlF;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE,UAAU,GAAG,IAAI,EACtB,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAClC,mBAAmB,EAAE,gBAAgB,EAAE,EACvC,OAAO,CAAC,EAAE,iBAAiB,GAC5B,IAAI,CAoDN"}
@@ -1,8 +1,8 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2025-2026 GoodData Corporation
2
2
  import { useEffect } from "react";
3
- import { isAttributeDescriptor, isResultAttributeHeader } from "@gooddata/sdk-model";
3
+ import { isAttributeDescriptor, isResultAttributeHeader, objRefToString, } from "@gooddata/sdk-model";
4
4
  import { getDrillIntersection, isSomeHeaderPredicateMatched, } from "@gooddata/sdk-ui";
5
- import { GEO_LAYER_DRILL_ELEMENT, GEO_LAYER_DRILL_TYPE, MAPLIBRE_LAYER_TYPE_PREFIXES, } from "../../layers/common/constants.js";
5
+ import { COORDINATE_FORM_TYPES, GEO_LAYER_DRILL_ELEMENT, GEO_LAYER_DRILL_TYPE, MAPLIBRE_LAYER_TYPE_PREFIXES, } from "../../layers/common/constants.js";
6
6
  /**
7
7
  * Get the layer data by MapLibre layer ID.
8
8
  */
@@ -17,22 +17,79 @@ function getClickedLayerByMapLibreLayerId(layers, mapLibreLayerId) {
17
17
  });
18
18
  return clickedLayerEntry?.[1];
19
19
  }
20
+ /**
21
+ * Check if a display form type is a geo coordinate type.
22
+ */
23
+ function isCoordinateFormType(labelType) {
24
+ return labelType !== undefined && COORDINATE_FORM_TYPES.includes(labelType);
25
+ }
26
+ /**
27
+ * Extract parent attribute info from a coordinate display form descriptor.
28
+ * Uses primaryLabel as ref if available, otherwise falls back to the descriptor's ref.
29
+ */
30
+ function getParentAttributeInfo(descriptor) {
31
+ const { primaryLabel, formOf, ref } = descriptor.attributeHeader;
32
+ return {
33
+ ref: primaryLabel ?? ref,
34
+ name: formOf.name,
35
+ key: primaryLabel ? objRefToString(primaryLabel) : formOf.identifier,
36
+ };
37
+ }
38
+ function normalizeCoordinateAttribute(descriptor, rowHeader, parentInfo) {
39
+ return {
40
+ descriptor: {
41
+ attributeHeader: {
42
+ ...descriptor.attributeHeader,
43
+ ref: parentInfo.ref,
44
+ name: parentInfo.name,
45
+ },
46
+ },
47
+ rowHeader: {
48
+ ...rowHeader,
49
+ attributeHeaderItem: {
50
+ ...rowHeader.attributeHeaderItem,
51
+ name: rowHeader.attributeHeaderItem.name, // Keep the value (e.g., "New York")
52
+ },
53
+ },
54
+ };
55
+ }
20
56
  /**
21
57
  * Build drill headers for a clicked location.
22
- * Includes attribute headers (excluding tooltip) and measure descriptors.
58
+ * Includes attribute headers (excluding auxiliary geo attributes) and measure descriptors.
23
59
  */
24
60
  function getDrillHeaders(dataView, locationIndex, tooltipIndex) {
25
61
  const headerItems = dataView.dataView.headerItems;
26
62
  const geoAttributesDimensionIndex = dataView.meta().dimensions().length - 1;
27
63
  const descriptors = dataView.meta().dimensionItemDescriptors(geoAttributesDimensionIndex);
28
64
  const drillHeaders = [];
65
+ // Track processed coordinate attributes by their parent attribute key
66
+ // This ensures we only include one coordinate attribute per parent (e.g., City, not City lat + City lon)
67
+ const processedCoordinateParents = new Set();
29
68
  descriptors.forEach((descriptor, attrIndex) => {
30
69
  if (isAttributeDescriptor(descriptor)) {
31
70
  if (attrIndex === tooltipIndex) {
32
71
  return; // Skip tooltip attribute
33
72
  }
34
73
  const rowHeader = headerItems[geoAttributesDimensionIndex]?.[attrIndex]?.[locationIndex];
35
- if (rowHeader && isResultAttributeHeader(rowHeader)) {
74
+ if (!rowHeader || !isResultAttributeHeader(rowHeader)) {
75
+ return;
76
+ }
77
+ const labelType = descriptor.attributeHeader.labelType;
78
+ // Handle coordinate display forms (lat/lon/pin) - deduplicate by parent attribute
79
+ if (isCoordinateFormType(labelType)) {
80
+ const parentInfo = getParentAttributeInfo(descriptor);
81
+ // Skip if we already processed a coordinate attribute from this parent
82
+ if (processedCoordinateParents.has(parentInfo.key)) {
83
+ return;
84
+ }
85
+ processedCoordinateParents.add(parentInfo.key);
86
+ // Normalize to use parent attribute's name and primary display form
87
+ const normalized = normalizeCoordinateAttribute(descriptor, rowHeader, parentInfo);
88
+ drillHeaders.push(normalized.rowHeader);
89
+ drillHeaders.push(normalized.descriptor);
90
+ }
91
+ else {
92
+ // Regular attributes - include as-is
36
93
  drillHeaders.push(rowHeader);
37
94
  drillHeaders.push(descriptor);
38
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useLayerClickEvent.js","sourceRoot":"","sources":["../../../../src/next/hooks/layers/useLayerClickEvent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useLayerClickEvent.js","sourceRoot":"","sources":["../../../../src/next/hooks/layers/useLayerClickEvent.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAIH,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAKH,oBAAoB,EACpB,4BAA4B,GAC/B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACH,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,GAC/B,MAAM,kCAAkC,CAAC;AAI1C;;GAEG;AACH,SAAS,gCAAgC,CACrC,MAAkC,EAClC,eAAmC;IAEnC,IAAI,CAAC,eAAe,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACzE,MAAM,MAAM,GAAG,4BAA4B,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;QACnC,OAAO,OAAO,KAAK,eAAe,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,OAAO,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,SAA+C;IACzE,OAAO,SAAS,KAAK,SAAS,IAAI,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,UAAgC;IAC5D,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC;IACjE,OAAO;QACH,GAAG,EAAE,YAAY,IAAI,GAAG;QACxB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;KACvE,CAAC;AACN,CAAC;AAED,SAAS,4BAA4B,CACjC,UAAgC,EAChC,SAAiC,EACjC,UAAgC;IAEhC,OAAO;QACH,UAAU,EAAE;YACR,eAAe,EAAE;gBACb,GAAG,UAAU,CAAC,eAAe;gBAC7B,GAAG,EAAE,UAAU,CAAC,GAAG;gBACnB,IAAI,EAAE,UAAU,CAAC,IAAI;aACxB;SACJ;QACD,SAAS,EAAE;YACP,GAAG,SAAS;YACZ,mBAAmB,EAAE;gBACjB,GAAG,SAAS,CAAC,mBAAmB;gBAChC,IAAI,EAAE,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,oCAAoC;aACjF;SACJ;KACJ,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CACpB,QAAwB,EACxB,aAAqB,EACrB,YAAgC;IAEhC,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;IAClD,MAAM,2BAA2B,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAE5E,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,wBAAwB,CAAC,2BAA2B,CAAC,CAAC;IAC1F,MAAM,YAAY,GAAqB,EAAE,CAAC;IAE1C,sEAAsE;IACtE,yGAAyG;IACzG,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAAU,CAAC;IAErD,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE;QAC1C,IAAI,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;gBAC7B,OAAO,CAAC,yBAAyB;YACrC,CAAC;YAED,MAAM,SAAS,GAAG,WAAW,CAAC,2BAA2B,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;YACzF,IAAI,CAAC,SAAS,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpD,OAAO;YACX,CAAC;YAED,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC;YAEvD,kFAAkF;YAClF,IAAI,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;gBAEtD,uEAAuE;gBACvE,IAAI,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjD,OAAO;gBACX,CAAC;gBACD,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAE/C,oEAAoE;gBACpE,MAAM,UAAU,GAAG,4BAA4B,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;gBACnF,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACxC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACJ,qCAAqC;gBACrC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,oCAAoC;IACpC,QAAQ;SACH,IAAI,EAAE;SACN,kBAAkB,EAAE;SACpB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACjB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEP,OAAO,YAAY,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAC9B,GAAsB,EACtB,UAAmB,EACnB,MAAkC,EAClC,mBAAuC,EACvC,OAA2B;IAE3B,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,CAAgB,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAEpD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC7C,MAAM,YAAY,GAAG,gCAAgC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBAC/E,MAAM,aAAa,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,eAAe,CAAC,CAAC;gBAC/D,IAAI,CAAC,YAAY,EAAE,QAAQ,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;oBACzD,OAAO;gBACX,CAAC;gBAED,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;gBACtD,MAAM,YAAY,GAAG,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;gBACjD,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;gBAC5E,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,OAAO;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7C,4BAA4B,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC,CACtE,CAAC;gBACF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,OAAO;gBACX,CAAC;gBAED,MAAM,YAAY,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;gBACxD,MAAM,UAAU,GAAG;oBACf,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,YAAY,EAAE;wBACV,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC;wBACrC,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC;wBAC3C,YAAY;qBACf;iBACJ,CAAC;gBAEF,OAAO,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;QACL,CAAC,CAAC;QAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE7B,OAAO,GAAG,EAAE;YACR,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAClC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { IMapFacade } from "../../layers/common/mapFacade.js";
2
+ import type { IGeoChartNextConfig } from "../../types/config/unified.js";
3
+ import type { IMapViewport } from "../../types/map/provider.js";
4
+ /**
5
+ * Applies configured viewport whenever the viewport-related config changes.
6
+ *
7
+ * @remarks
8
+ * `useMapInitialization` intentionally captures only the initial viewport and does not re-center the map on
9
+ * prop changes. This hook provides the missing behavior for Analytical Designer: when the user changes
10
+ * "Default viewport", we apply the new viewport to the already-initialized map.
11
+ *
12
+ * We only react to viewport-relevant config changes (`center`/`zoom` or `viewport.area`).
13
+ * Data changes are intentionally ignored to avoid unexpected re-centering during interactions.
14
+ *
15
+ * The current `dataViewport` is still passed in so that switching to `"auto"` (or clearing the preset)
16
+ * applies the latest data-derived bounds.
17
+ *
18
+ * @internal
19
+ */
20
+ export declare function useApplyViewportOnConfigChange(map: IMapFacade | null, isMapReady: boolean, config: IGeoChartNextConfig | undefined, dataViewport: Partial<IMapViewport> | null): void;
21
+ //# sourceMappingURL=useApplyViewportOnConfigChange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApplyViewportOnConfigChange.d.ts","sourceRoot":"","sources":["../../../../src/next/hooks/map/useApplyViewportOnConfigChange.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAGnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,8BAA8B,CAC1C,GAAG,EAAE,UAAU,GAAG,IAAI,EACtB,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,GAC3C,IAAI,CA2BN"}
@@ -0,0 +1,44 @@
1
+ // (C) 2025-2026 GoodData Corporation
2
+ import { useEffect, useMemo, useRef } from "react";
3
+ import { applyViewport } from "../../map/viewport/viewportCalculation.js";
4
+ import { computeViewportFromConfig, getViewportConfigKey } from "../../map/viewport/viewportResolution.js";
5
+ /**
6
+ * Applies configured viewport whenever the viewport-related config changes.
7
+ *
8
+ * @remarks
9
+ * `useMapInitialization` intentionally captures only the initial viewport and does not re-center the map on
10
+ * prop changes. This hook provides the missing behavior for Analytical Designer: when the user changes
11
+ * "Default viewport", we apply the new viewport to the already-initialized map.
12
+ *
13
+ * We only react to viewport-relevant config changes (`center`/`zoom` or `viewport.area`).
14
+ * Data changes are intentionally ignored to avoid unexpected re-centering during interactions.
15
+ *
16
+ * The current `dataViewport` is still passed in so that switching to `"auto"` (or clearing the preset)
17
+ * applies the latest data-derived bounds.
18
+ *
19
+ * @internal
20
+ */
21
+ export function useApplyViewportOnConfigChange(map, isMapReady, config, dataViewport) {
22
+ const configKey = useMemo(() => getViewportConfigKey(config), [config]);
23
+ const previousConfigKeyRef = useRef(null);
24
+ useEffect(() => {
25
+ if (!map || !isMapReady) {
26
+ return;
27
+ }
28
+ const previousKey = previousConfigKeyRef.current;
29
+ previousConfigKeyRef.current = configKey;
30
+ // First run: map just initialized with the initial viewport already applied.
31
+ if (previousKey === null) {
32
+ return;
33
+ }
34
+ if (previousKey === configKey) {
35
+ return;
36
+ }
37
+ const viewportToApply = computeViewportFromConfig(config, dataViewport);
38
+ if (!viewportToApply) {
39
+ return;
40
+ }
41
+ applyViewport(map, viewportToApply, true);
42
+ }, [map, isMapReady, configKey, config, dataViewport]);
43
+ }
44
+ //# sourceMappingURL=useApplyViewportOnConfigChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApplyViewportOnConfigChange.js","sourceRoot":"","sources":["../../../../src/next/hooks/map/useApplyViewportOnConfigChange.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAI3G;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,8BAA8B,CAC1C,GAAsB,EACtB,UAAmB,EACnB,MAAuC,EACvC,YAA0C;IAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,MAAM,oBAAoB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC;QACjD,oBAAoB,CAAC,OAAO,GAAG,SAAS,CAAC;QAEzC,6EAA6E;QAC7E,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO;QACX,CAAC;QAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QAED,MAAM,eAAe,GAAG,yBAAyB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACxE,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QACD,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -10,8 +10,8 @@ import { type IMapViewport } from "../../types/map/provider.js";
10
10
  * 1. Calls map.resize() to update the MapLibre canvas size
11
11
  * 2. Reapplies the viewport so fitBounds can recalculate based on new dimensions
12
12
  *
13
- * This is separate from viewport updates triggered by data/config changes.
14
- * Those are handled in useMapDataSync.
13
+ * This is separate from viewport updates triggered by config changes (e.g. Analytical Designer viewport).
14
+ * Those are handled in `useApplyViewportOnConfigChange`.
15
15
  *
16
16
  * @param map - MapLibre map instance (null if not initialized)
17
17
  * @param isMapReady - Whether map is ready for updates
@@ -1,4 +1,4 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2025-2026 GoodData Corporation
2
2
  import { useEffect, useRef } from "react";
3
3
  import { applyViewport } from "../../map/viewport/viewportCalculation.js";
4
4
  /**
@@ -10,8 +10,8 @@ import { applyViewport } from "../../map/viewport/viewportCalculation.js";
10
10
  * 1. Calls map.resize() to update the MapLibre canvas size
11
11
  * 2. Reapplies the viewport so fitBounds can recalculate based on new dimensions
12
12
  *
13
- * This is separate from viewport updates triggered by data/config changes.
14
- * Those are handled in useMapDataSync.
13
+ * This is separate from viewport updates triggered by config changes (e.g. Analytical Designer viewport).
14
+ * Those are handled in `useApplyViewportOnConfigChange`.
15
15
  *
16
16
  * @param map - MapLibre map instance (null if not initialized)
17
17
  * @param isMapReady - Whether map is ready for updates
@@ -1 +1 @@
1
- {"version":3,"file":"useMapResize.js","sourceRoot":"","sources":["../../../../src/next/hooks/map/useMapResize.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAK1C,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG1E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,YAAY,CACxB,GAAsB,EACtB,UAAmB,EACnB,kBAAsC,EACtC,QAAsC;IAEtC,MAAM,iBAAiB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAE3D,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClE,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC;QAC/C,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC;QACvC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,UAAU,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QAE3E,IAAI,UAAU,EAAE,CAAC;YACb,iBAAiB,CAAC,OAAO,GAAG,kBAAkB,CAAC;YAC/C,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;IACL,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"useMapResize.js","sourceRoot":"","sources":["../../../../src/next/hooks/map/useMapResize.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAK1C,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG1E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,YAAY,CACxB,GAAsB,EACtB,UAAmB,EACnB,kBAAsC,EACtC,QAAsC;IAEtC,MAAM,iBAAiB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAE3D,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClE,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC;QAC/C,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC;QACvC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,UAAU,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QAE3E,IAAI,UAAU,EAAE,CAAC;YACb,iBAAiB,CAAC,OAAO,GAAG,kBAAkB,CAAC;YAC/C,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;IACL,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -1,4 +1,4 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2025-2026 GoodData Corporation
2
2
  import { useMemo } from "react";
3
3
  import { useResolveValueWithPlaceholders } from "@gooddata/sdk-ui";
4
4
  import { EMPTY_DRILLS, EMPTY_FILTERS, EMPTY_OBJECT } from "../../constants/emptyDefaults.js";
@@ -19,7 +19,7 @@ export function useResolvedGeoChartNextProps(props) {
19
19
  const resolvedLayers = useResolveValueWithPlaceholders(props.layers);
20
20
  const resolvedFilters = useResolveValueWithPlaceholders(props.filters ?? EMPTY_FILTERS);
21
21
  const resolvedType = props.type ?? resolvedLayers[0]?.type ?? props.layers[0]?.type ?? "pushpin";
22
- const config = applyGeoChartNextConfigDefaults(props.config);
22
+ const config = useMemo(() => applyGeoChartNextConfigDefaults(props.config), [props.config]);
23
23
  return useMemo(() => ({
24
24
  ...props,
25
25
  layers: resolvedLayers,
@@ -1 +1 @@
1
- {"version":3,"file":"useResolvedGeoChartNextProps.js","sourceRoot":"","sources":["../../../../src/next/hooks/props/useResolvedGeoChartNextProps.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAKjF;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAyB;IAClE,MAAM,cAAc,GAAG,+BAA+B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,+BAA+B,CAAC,KAAK,CAAC,OAAO,IAAI,aAAa,CAAC,CAAC;IACxF,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,SAAS,CAAC;IAEjG,MAAM,MAAM,GAAG,+BAA+B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE7D,OAAO,OAAO,CACV,GAAG,EAAE,CAAC,CAAC;QACH,GAAG,KAAK;QACR,MAAM,EAAE,cAAc;QACtB,IAAI,EAAE,YAAY;QAClB,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,YAAY;QACpD,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,YAAY;QAC5C,MAAM;KACT,CAAC,EACF,CAAC,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,CAAC,CACjE,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAC3C,MAAuC;IAEvC,OAAO,uBAAuB,CAAC,0BAA0B,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrG,CAAC"}
1
+ {"version":3,"file":"useResolvedGeoChartNextProps.js","sourceRoot":"","sources":["../../../../src/next/hooks/props/useResolvedGeoChartNextProps.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAKjF;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAyB;IAClE,MAAM,cAAc,GAAG,+BAA+B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,+BAA+B,CAAC,KAAK,CAAC,OAAO,IAAI,aAAa,CAAC,CAAC;IACxF,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,SAAS,CAAC;IAEjG,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,+BAA+B,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5F,OAAO,OAAO,CACV,GAAG,EAAE,CAAC,CAAC;QACH,GAAG,KAAK;QACR,MAAM,EAAE,cAAc;QACtB,IAAI,EAAE,YAAY;QAClB,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,YAAY;QACpD,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,YAAY;QAC5C,MAAM;KACT,CAAC,EACF,CAAC,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,CAAC,CACjE,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAC3C,MAAuC;IAEvC,OAAO,uBAAuB,CAAC,0BAA0B,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrG,CAAC"}
@@ -2,6 +2,7 @@ import { type IColorPalette } from "@gooddata/sdk-model";
2
2
  import { type IPushData } from "@gooddata/sdk-ui";
3
3
  import { type IColorStrategy } from "@gooddata/sdk-ui-vis-commons";
4
4
  import { type IAvailableLegends } from "../../types/common/legends.js";
5
+ import { type GeoLayerType } from "../../types/layers/index.js";
5
6
  interface ILegendContext {
6
7
  availableLegends: IAvailableLegends;
7
8
  }
@@ -17,12 +18,13 @@ interface IUseGeoPushDataConfig<TProps extends IPushDataProps, TLegendContext ex
17
18
  useProps: () => TProps;
18
19
  useLegendContext: () => TLegendContext;
19
20
  getLegendVisibility?: (availableLegends: IAvailableLegends) => boolean;
21
+ geoLayerType: GeoLayerType;
20
22
  }
21
23
  /**
22
24
  * Shared implementation for Analytical Designer pushData updates.
23
25
  *
24
26
  * @internal
25
27
  */
26
- export declare function useGeoPushData<TProps extends IPushDataProps, TLegendContext extends ILegendContext>(colorStrategy: IColorStrategy | null, colorPalette: IColorPalette, { useProps, useLegendContext, getLegendVisibility }: IUseGeoPushDataConfig<TProps, TLegendContext>): void;
28
+ export declare function useGeoPushData<TProps extends IPushDataProps, TLegendContext extends ILegendContext>(colorStrategy: IColorStrategy | null, colorPalette: IColorPalette, { useProps, useLegendContext, getLegendVisibility, geoLayerType, }: IUseGeoPushDataConfig<TProps, TLegendContext>): void;
27
29
  export {};
28
30
  //# sourceMappingURL=useGeoPushData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGeoPushData.d.ts","sourceRoot":"","sources":["../../../../src/next/hooks/pushData/useGeoPushData.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,UAAU,cAAc;IACpB,gBAAgB,EAAE,iBAAiB,CAAC;CACvC;AAED;;;;GAIG;AACH,UAAU,cAAc;IACpB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACxC;AAED,UAAU,qBAAqB,CAAC,MAAM,SAAS,cAAc,EAAE,cAAc,SAAS,cAAc;IAChG,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,cAAc,CAAC;IACvC,mBAAmB,CAAC,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,KAAK,OAAO,CAAC;CAC1E;AAOD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,cAAc,EAAE,cAAc,SAAS,cAAc,EAC/F,aAAa,EAAE,cAAc,GAAG,IAAI,EACpC,YAAY,EAAE,aAAa,EAC3B,EAAE,QAAQ,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,EAAE,qBAAqB,CAAC,MAAM,EAAE,cAAc,CAAC,GACnG,IAAI,CAsCN"}
1
+ {"version":3,"file":"useGeoPushData.d.ts","sourceRoot":"","sources":["../../../../src/next/hooks/pushData/useGeoPushData.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAA+B,KAAK,SAAS,EAA6B,MAAM,kBAAkB,CAAC;AAC1G,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,UAAU,cAAc;IACpB,gBAAgB,EAAE,iBAAiB,CAAC;CACvC;AAED;;;;GAIG;AACH,UAAU,cAAc;IACpB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACxC;AAED,UAAU,qBAAqB,CAAC,MAAM,SAAS,cAAc,EAAE,cAAc,SAAS,cAAc;IAChG,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,cAAc,CAAC;IACvC,mBAAmB,CAAC,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,KAAK,OAAO,CAAC;IACvE,YAAY,EAAE,YAAY,CAAC;CAC9B;AAoCD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,cAAc,EAAE,cAAc,SAAS,cAAc,EAC/F,aAAa,EAAE,cAAc,GAAG,IAAI,EACpC,YAAY,EAAE,aAAa,EAC3B,EACI,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,GACf,EAAE,qBAAqB,CAAC,MAAM,EAAE,cAAc,CAAC,GACjD,IAAI,CAwCN"}
@@ -1,4 +1,4 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2025-2026 GoodData Corporation
2
2
  import { useEffect, useMemo } from "react";
3
3
  import { getMultiLayerDrillTargets } from "@gooddata/sdk-ui";
4
4
  import { useGeoLayers } from "../../context/GeoLayersContext.js";
@@ -7,12 +7,34 @@ const defaultLegendVisibility = (availableLegends) => {
7
7
  const hasSizeLegend = availableLegends.hasSizeLegend ?? false;
8
8
  return Boolean(availableLegends.hasCategoryLegend || availableLegends.hasColorLegend || hasSizeLegend);
9
9
  };
10
+ /**
11
+ * Maps geo layer type to the preferred display form type for drill-down targets.
12
+ */
13
+ function getGeoDisplayFormType(geoLayerType) {
14
+ return geoLayerType === "area" ? "GDC.geo.area" : undefined;
15
+ }
16
+ /**
17
+ * Enhances drill targets with geo-specific display form type preference.
18
+ */
19
+ function enhanceDrillTargetsWithGeoDisplayForm(drillTargets, geoLayerType) {
20
+ if (!drillTargets) {
21
+ return undefined;
22
+ }
23
+ const drillTargetDisplayFormType = getGeoDisplayFormType(geoLayerType);
24
+ return {
25
+ ...drillTargets,
26
+ attributes: drillTargets.attributes?.map((attr) => ({
27
+ ...attr,
28
+ drillTargetDisplayFormType,
29
+ })),
30
+ };
31
+ }
10
32
  /**
11
33
  * Shared implementation for Analytical Designer pushData updates.
12
34
  *
13
35
  * @internal
14
36
  */
15
- export function useGeoPushData(colorStrategy, colorPalette, { useProps, useLegendContext, getLegendVisibility }) {
37
+ export function useGeoPushData(colorStrategy, colorPalette, { useProps, useLegendContext, getLegendVisibility, geoLayerType, }) {
16
38
  const props = useProps();
17
39
  const { availableLegends } = useLegendContext();
18
40
  const { initialDataView } = useInitialExecution();
@@ -26,9 +48,11 @@ export function useGeoPushData(colorStrategy, colorPalette, { useProps, useLegen
26
48
  // Use fingerprints key as dependency
27
49
  // We can't use layers as dependency because they are not stable across renders resulting in infinite loop
28
50
  const availableDrillTargets = useMemo(() => {
29
- return getMultiLayerDrillTargets(layerDataViews, initialDataView);
51
+ const baseDrillTargets = getMultiLayerDrillTargets(layerDataViews, initialDataView);
52
+ // Enhance drill targets with geo-specific display form preference
53
+ return enhanceDrillTargetsWithGeoDisplayForm(baseDrillTargets, geoLayerType);
30
54
  // eslint-disable-next-line react-hooks/exhaustive-deps
31
- }, [fingerprintsKey, initialDataView]);
55
+ }, [fingerprintsKey, initialDataView, geoLayerType]);
32
56
  useEffect(() => {
33
57
  if (!pushData || !colorStrategy) {
34
58
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"useGeoPushData.js","sourceRoot":"","sources":["../../../../src/next/hooks/pushData/useGeoPushData.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG3C,OAAO,EAAkB,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAG7E,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAsB/E,MAAM,uBAAuB,GAAG,CAAC,gBAAmC,EAAW,EAAE;IAC7E,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,IAAI,KAAK,CAAC;IAC9D,OAAO,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,IAAI,gBAAgB,CAAC,cAAc,IAAI,aAAa,CAAC,CAAC;AAC3G,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC1B,aAAoC,EACpC,YAA2B,EAC3B,EAAE,QAAQ,EAAE,gBAAgB,EAAE,mBAAmB,EAAiD;IAElG,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAChD,MAAM,EAAE,eAAe,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAClD,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAClC,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3B,MAAM,wBAAwB,GAAG,mBAAmB,IAAI,uBAAuB,CAAC;IAEhF,MAAM,eAAe,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;IAEnE,0EAA0E;IAC1E,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE1F,qCAAqC;IACrC,0GAA0G;IAC1G,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,OAAO,yBAAyB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAClE,uDAAuD;IAC3D,CAAC,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9B,OAAO;QACX,CAAC;QAED,QAAQ,CAAC;YACL,QAAQ,EAAE,eAAe,EAAE,QAAQ;YACnC,qBAAqB;YACrB,cAAc,EAAE;gBACZ,cAAc,EAAE,eAAe;aAClC;YACD,MAAM,EAAE;gBACJ,gBAAgB,EAAE,aAAa,CAAC,kBAAkB,EAAE;gBACpD,YAAY;aACf;SACJ,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC,CAAC;AACzG,CAAC"}
1
+ {"version":3,"file":"useGeoPushData.js","sourceRoot":"","sources":["../../../../src/next/hooks/pushData/useGeoPushData.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/area/source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACjC,aAAa,EAAE,cAAc,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,KAAK,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC3F,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,EAAE,CAAC;AA8R/D;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,oBAAoB,GAAG,0BAA0B,CAUtG"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/area/source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACjC,aAAa,EAAE,cAAc,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,KAAK,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC3F,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,EAAE,CAAC;AAuR/D;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,oBAAoB,GAAG,0BAA0B,CAUtG"}