@datawheel/data-explorer 0.3.9 → 0.3.11

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 (3) hide show
  1. package/dist/main.d.mts +276 -18
  2. package/dist/main.mjs +190 -1013
  3. package/package.json +2 -2
package/dist/main.mjs CHANGED
@@ -7,7 +7,7 @@ import { translationFactory } from '@datawheel/use-translation';
7
7
  import { createSlice, createSelector, combineReducers, bindActionCreators, configureStore } from '@reduxjs/toolkit';
8
8
  import { useSelector as useSelector$1, useStore, Provider as Provider$1 } from 'react-redux';
9
9
  import ISO6391 from 'iso-639-1';
10
- import { QueryClient, QueryClientProvider, useQuery, useQueryClient } from '@tanstack/react-query';
10
+ import { QueryClient, useQuery, QueryClientProvider, useQueryClient } from '@tanstack/react-query';
11
11
  import debounce from 'lodash.debounce';
12
12
  import { MRT_ProgressBar, flexRender, MRT_TableBodyCell, MRT_ToolbarAlertBanner, useMantineReactTable, MantineReactTable, MRT_TablePagination } from 'mantine-react-table';
13
13
  import { formatAbbreviate, format } from 'd3plus-format';
@@ -15,6 +15,7 @@ import yn from 'yn';
15
15
  import { matchSorter } from 'match-sorter';
16
16
  import { TourProvider, useTour } from '@reactour/tour';
17
17
  import { generateCharts } from '@datawheel/vizbuilder';
18
+ import { d3plusConfigBuilder } from '@datawheel/vizbuilder/react';
18
19
  import { BarChart, Geomap, Donut, LinePlot, StackedArea, Treemap } from 'd3plus-react';
19
20
 
20
21
  var __create = Object.create;
@@ -58,7 +59,7 @@ var init_esm_shims = __esm({
58
59
 
59
60
  // node_modules/file-saver/FileSaver.js
60
61
  var require_FileSaver = __commonJS({
61
- "node_modules/file-saver/FileSaver.js"(exports2, module2) {
62
+ "node_modules/file-saver/FileSaver.js"(exports, module) {
62
63
  init_esm_shims();
63
64
  var saveAs2 = saveAs2 || function(view) {
64
65
  if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
@@ -170,10 +171,10 @@ var require_FileSaver = __commonJS({
170
171
  FS_proto.error = FS_proto.onwritestart = FS_proto.onprogress = FS_proto.onwrite = FS_proto.onabort = FS_proto.onerror = FS_proto.onwriteend = null;
171
172
  return saveAs3;
172
173
  }(
173
- typeof self !== "undefined" && self || typeof window !== "undefined" && window || exports2.content
174
+ typeof self !== "undefined" && self || typeof window !== "undefined" && window || exports.content
174
175
  );
175
- if (typeof module2 !== "undefined" && module2.exports) {
176
- module2.exports.saveAs = saveAs2;
176
+ if (typeof module !== "undefined" && module.exports) {
177
+ module.exports.saveAs = saveAs2;
177
178
  } else if (typeof define !== "undefined" && define !== null && define.amd !== null) {
178
179
  define("FileSaver.js", function() {
179
180
  return saveAs2;
@@ -190,7 +191,7 @@ init_esm_shims();
190
191
 
191
192
  // src/hooks/translation.ts
192
193
  init_esm_shims();
193
- var defaultTranslation = {
194
+ var explorerTranslation = {
194
195
  action_copy: "Copy",
195
196
  action_copy_done: "Copied",
196
197
  action_download: "Download",
@@ -440,52 +441,60 @@ var defaultTranslation = {
440
441
  unselect_filtered: "Unselect filtered",
441
442
  selected_items: "Selected items",
442
443
  unselected_items: "Unselected items"
444
+ }
445
+ };
446
+ var vizbuilderTranslation = {
447
+ action_close: "Close",
448
+ action_share: "Share",
449
+ share_copied: "Copied",
450
+ action_enlarge: "Enlarge",
451
+ action_fileissue: "Report an issue",
452
+ action_retry: "Retry",
453
+ aggregator: {
454
+ average: "Average {{measure}}",
455
+ max: "Max {{measure}}",
456
+ min: "Min {{measure}}",
457
+ sum: "{{measure}}"
443
458
  },
444
- vizbuilder: {
445
- action_close: "Close",
446
- action_share: "Share",
447
- share_copied: "Copied",
448
- action_enlarge: "Enlarge",
449
- action_fileissue: "Report an issue",
450
- action_retry: "Retry",
451
- aggregator: {
452
- average: "Average {{measure}}",
453
- max: "Max {{measure}}",
454
- min: "Min {{measure}}"
455
- },
456
- chart_labels: {
457
- ci: "Confidence Interval",
458
- moe: "Margin of Error",
459
- source: "Source",
460
- collection: "Collection"
461
- },
462
- error: {
463
- detail: "",
464
- message: 'Details: "{{message}}".',
465
- title: "Error"
466
- },
467
- list: {
468
- join: ", ",
469
- suffix: "{{rest}}, and {{item}}",
470
- prefix: "{{list}}"
471
- },
472
- title: {
473
- series: "{{series}}",
474
- series_members: "{{series}} ({{members}})",
475
- main: "{{values}} by {{series}}",
476
- measure_over_period: "{{values}} over {{time}}",
477
- main_over_period: "{{values}} by {{series}} over {{time}}",
478
- main_on_period: "{{values}} by {{series}} on {{time_period}}",
479
- measure_on_period: "{{measure}} on {{period}}",
480
- total: "Total: {{value}}"
481
- },
482
- transient: {
483
- title_loading: "Generating charts...",
484
- title_empty: "No results",
485
- description_empty: "The selected combination of parameters can't be used to generate a meaningful set of charts. Try changing some parameters (maybe applying some restriction in a column) and generating charts again."
486
- }
459
+ chart_labels: {
460
+ ci: "Confidence Interval",
461
+ moe: "Margin of Error",
462
+ source: "Source",
463
+ collection: "Collection"
464
+ },
465
+ error: {
466
+ detail: "",
467
+ message: 'Details: "{{message}}".',
468
+ title: "Error"
469
+ },
470
+ list: {
471
+ join: ", ",
472
+ suffix: "{{rest}}, and {{item}}",
473
+ prefix: "{{list}}",
474
+ n_more: "{{n}} more"
475
+ },
476
+ title: {
477
+ main_on_period: "{{values}} by {{series}} on {{time_period}}",
478
+ main_over_period: "{{values}} by {{series}} over {{time}}",
479
+ main: "{{values}} by {{series}}",
480
+ measure_on_period: "{{measure}} on {{period}}",
481
+ measure_over_period: "{{values}} over {{time}}",
482
+ nonidealstate: "No results",
483
+ series_members: "{{series}} ({{members}})",
484
+ series: "{{series}}",
485
+ time_range: "in {{from}}-{{to}}",
486
+ total: "Total: {{value}}"
487
+ },
488
+ transient: {
489
+ title_loading: "Generating charts...",
490
+ title_empty: "No results",
491
+ description_empty: "The selected combination of parameters can't be used to generate a meaningful set of charts. Try changing some parameters (maybe applying some restriction in a column) and generating charts again."
487
492
  }
488
493
  };
494
+ var defaultTranslation = {
495
+ ...explorerTranslation,
496
+ vizbuilder: vizbuilderTranslation
497
+ };
489
498
  var { useTranslation, TranslationConsumer, TranslationProvider } = translationFactory({
490
499
  defaultLocale: "en",
491
500
  defaultTranslation
@@ -592,10 +601,6 @@ function next(iterable, condition) {
592
601
  result = iterable.next();
593
602
  }
594
603
  }
595
- function getLast(array) {
596
- if (array.length === 0) throw new Error("Attempt to get last element from empty array");
597
- return array[array.length - 1];
598
- }
599
604
 
600
605
  // src/utils/structs.ts
601
606
  init_esm_shims();
@@ -1020,9 +1025,6 @@ function yieldMeasures(cube) {
1020
1025
  init_esm_shims();
1021
1026
  function noop() {
1022
1027
  }
1023
- function isOneOf(str, options) {
1024
- return options.includes(str);
1025
- }
1026
1028
  function hasProperty(container, property) {
1027
1029
  return typeof container === "object" && container != null && Object.hasOwn(container, property);
1028
1030
  }
@@ -1714,7 +1716,6 @@ function serializePermalink(item) {
1714
1716
  function parsePermalink(cube, value) {
1715
1717
  const search = new URLSearchParams(value);
1716
1718
  const params = requestToQueryParams(cube, search);
1717
- console.log(search.get("chart"));
1718
1719
  return buildQuery({
1719
1720
  panel: search.get("panel") || "table",
1720
1721
  chart: search.get("chart") || "",
@@ -1774,7 +1775,6 @@ function useUpdatePermaLink({
1774
1775
  }
1775
1776
  function useKey(params = {}) {
1776
1777
  const queryItem = useSelector(selectCurrentQueryItem);
1777
- console.log(queryItem);
1778
1778
  if (isValidQuery(queryItem.params)) {
1779
1779
  return serializePermalink({ ...queryItem, params: { ...queryItem.params, ...params } });
1780
1780
  }
@@ -1916,14 +1916,16 @@ function willFetchQuery(params) {
1916
1916
  const { limit = 0, offset = 0 } = params || {};
1917
1917
  return (dispatch, getState, { tesseract }) => {
1918
1918
  const state = getState();
1919
- const params2 = selectCurrentQueryParams(state);
1920
- const cube = selectOlapCubeMap(state)[params2.cube];
1921
- if (!isValidQuery(params2) || !cube) {
1919
+ const queryParams = selectCurrentQueryParams(state);
1920
+ const cube = selectOlapCubeMap(state)[queryParams.cube];
1921
+ if (!isValidQuery(queryParams) || !cube) {
1922
1922
  return Promise.reject(new Error("Invalid query"));
1923
1923
  }
1924
- const request = queryParamsToRequest(params2);
1924
+ const request = queryParamsToRequest(queryParams);
1925
1925
  if (limit || offset) {
1926
1926
  request.limit = `${limit},${offset}`;
1927
+ } else if (params == null ? void 0 : params.withoutPagination) {
1928
+ request.limit = "0,0";
1927
1929
  }
1928
1930
  return tesseract.fetchData({ request, format: "jsonrecords" }).then(
1929
1931
  (response) => response.json().then((content) => {
@@ -1933,7 +1935,7 @@ function willFetchQuery(params) {
1933
1935
  return {
1934
1936
  data: content.data,
1935
1937
  page: content.page,
1936
- types: describeData(cube, params2, content),
1938
+ types: describeData(cube, queryParams, content),
1937
1939
  headers: Object.fromEntries(response.headers),
1938
1940
  status: response.status || 200,
1939
1941
  url: response.url
@@ -2574,14 +2576,14 @@ var SelectObject = forwardRef(function(props, ref) {
2574
2576
  var _a;
2575
2577
  const {
2576
2578
  getLabel,
2577
- getValue: getValue2 = identity,
2579
+ getValue = identity,
2578
2580
  items,
2579
2581
  onItemSelect,
2580
2582
  selectedItem,
2581
2583
  selectProps = {}
2582
2584
  } = props;
2583
2585
  const [itemList, itemMap] = useMemo(() => {
2584
- const valueAccessor = accesorFactory(getValue2);
2586
+ const valueAccessor = accesorFactory(getValue);
2585
2587
  const labelAccessor = getLabel ? accesorFactory(getLabel) : valueAccessor;
2586
2588
  const list = items.map((item) => ({
2587
2589
  label: labelAccessor(item),
@@ -2589,13 +2591,13 @@ var SelectObject = forwardRef(function(props, ref) {
2589
2591
  item
2590
2592
  }));
2591
2593
  return [list, keyBy(list, (option) => option.value)];
2592
- }, [items, getLabel, getValue2]);
2594
+ }, [items, getLabel, getValue]);
2593
2595
  const selected = useMemo(() => {
2594
2596
  if (selectedItem == null) return null;
2595
2597
  if (typeof selectedItem === "string") return selectedItem;
2596
- const valueAccessor = accesorFactory(getValue2);
2598
+ const valueAccessor = accesorFactory(getValue);
2597
2599
  return valueAccessor(selectedItem);
2598
- }, [selectedItem, getValue2]);
2600
+ }, [selectedItem, getValue]);
2599
2601
  const itemSelectHandler = (value) => {
2600
2602
  onItemSelect && onItemSelect(itemMap[value].item);
2601
2603
  };
@@ -3311,7 +3313,7 @@ function AccordionControl(props) {
3311
3313
  }
3312
3314
  function getKeys2(items, k, locale, filter) {
3313
3315
  let cubes = items;
3314
- const keys2 = cubes.reduce((prev, curr) => {
3316
+ const keys = cubes.reduce((prev, curr) => {
3315
3317
  const key = getAnnotation(curr, k, locale);
3316
3318
  if (key) {
3317
3319
  prev.add(key);
@@ -3319,7 +3321,7 @@ function getKeys2(items, k, locale, filter) {
3319
3321
  }
3320
3322
  return prev;
3321
3323
  }, /* @__PURE__ */ new Set());
3322
- return Array.from(keys2);
3324
+ return Array.from(keys);
3323
3325
  }
3324
3326
  function isSelected(selectedItem, currentItem) {
3325
3327
  if (selectedItem && currentItem) {
@@ -3908,7 +3910,8 @@ function useTableData({ columns, pagination, cube }) {
3908
3910
  return result;
3909
3911
  }),
3910
3912
  staleTime: 3e5,
3911
- enabled: enabled && !!filterKeydebouced
3913
+ enabled: enabled && !!filterKeydebouced,
3914
+ retry: false
3912
3915
  });
3913
3916
  const client = useQueryClient();
3914
3917
  const cachedData = client.getQueryData(["table", filterKeydebouced]);
@@ -5283,9 +5286,12 @@ var useStyles4 = createStyles((theme, params) => ({
5283
5286
  }));
5284
5287
  function ExplorerContent(props) {
5285
5288
  const translation = useTranslation();
5289
+ const serverConfig = useMemo(() => {
5290
+ return props.serverConfig !== void 0 ? props.serverConfig : {};
5291
+ }, [props.serverConfig]);
5286
5292
  useSetup(
5287
5293
  props.serverURL,
5288
- props.serverConfig || {},
5294
+ serverConfig,
5289
5295
  props.defaultDataLocale,
5290
5296
  props.defaultCube
5291
5297
  );
@@ -6413,12 +6419,6 @@ function buildColumn(cube, name4, columns) {
6413
6419
  }
6414
6420
  throw new Error(`Missing entity in cube '${cube.name}': ${nameWithoutID}`);
6415
6421
  }
6416
- function getColumnEntity(column) {
6417
- if (column.type === "measure") return column.measure;
6418
- if (column.type === "level") return column.level;
6419
- if (column.type === "property") return column.property;
6420
- throw new Error("Invalid column object");
6421
- }
6422
6422
 
6423
6423
  // src/vizbuilder/components/Vizbuilder.tsx
6424
6424
  init_esm_shims();
@@ -7270,660 +7270,83 @@ function saveElement_default(elem) {
7270
7270
  // src/vizbuilder/hooks/useD3plusConfig.ts
7271
7271
  init_esm_shims();
7272
7272
 
7273
- // node_modules/lodash-es/lodash.js
7274
- init_esm_shims();
7275
-
7276
- // node_modules/lodash-es/_baseGetTag.js
7277
- init_esm_shims();
7278
-
7279
- // node_modules/lodash-es/_Symbol.js
7280
- init_esm_shims();
7281
-
7282
- // node_modules/lodash-es/_root.js
7283
- init_esm_shims();
7284
-
7285
- // node_modules/lodash-es/_freeGlobal.js
7286
- init_esm_shims();
7287
- var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
7288
- var freeGlobal_default = freeGlobal;
7289
-
7290
- // node_modules/lodash-es/_root.js
7291
- var freeSelf = typeof self == "object" && self && self.Object === Object && self;
7292
- var root = freeGlobal_default || freeSelf || Function("return this")();
7293
- var root_default = root;
7294
-
7295
- // node_modules/lodash-es/_Symbol.js
7296
- var Symbol2 = root_default.Symbol;
7297
- var Symbol_default = Symbol2;
7298
-
7299
- // node_modules/lodash-es/_getRawTag.js
7300
- init_esm_shims();
7301
- var objectProto = Object.prototype;
7302
- var hasOwnProperty2 = objectProto.hasOwnProperty;
7303
- var nativeObjectToString = objectProto.toString;
7304
- var symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0;
7305
- function getRawTag(value) {
7306
- var isOwn = hasOwnProperty2.call(value, symToStringTag), tag = value[symToStringTag];
7307
- try {
7308
- value[symToStringTag] = void 0;
7309
- var unmasked = true;
7310
- } catch (e) {
7311
- }
7312
- var result = nativeObjectToString.call(value);
7313
- if (unmasked) {
7314
- if (isOwn) {
7315
- value[symToStringTag] = tag;
7316
- } else {
7317
- delete value[symToStringTag];
7318
- }
7319
- }
7320
- return result;
7321
- }
7322
- var getRawTag_default = getRawTag;
7323
-
7324
- // node_modules/lodash-es/_objectToString.js
7325
- init_esm_shims();
7326
- var objectProto2 = Object.prototype;
7327
- var nativeObjectToString2 = objectProto2.toString;
7328
- function objectToString(value) {
7329
- return nativeObjectToString2.call(value);
7330
- }
7331
- var objectToString_default = objectToString;
7332
-
7333
- // node_modules/lodash-es/_baseGetTag.js
7334
- var nullTag = "[object Null]";
7335
- var undefinedTag = "[object Undefined]";
7336
- var symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0;
7337
- function baseGetTag(value) {
7338
- if (value == null) {
7339
- return value === void 0 ? undefinedTag : nullTag;
7340
- }
7341
- return symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag_default(value) : objectToString_default(value);
7342
- }
7343
- var baseGetTag_default = baseGetTag;
7344
-
7345
- // node_modules/lodash-es/isObjectLike.js
7346
- init_esm_shims();
7347
- function isObjectLike(value) {
7348
- return value != null && typeof value == "object";
7349
- }
7350
- var isObjectLike_default = isObjectLike;
7351
-
7352
- // node_modules/lodash-es/isArray.js
7353
- init_esm_shims();
7354
- var isArray = Array.isArray;
7355
- var isArray_default = isArray;
7356
-
7357
- // node_modules/lodash-es/isObject.js
7358
- init_esm_shims();
7359
- function isObject(value) {
7360
- var type = typeof value;
7361
- return value != null && (type == "object" || type == "function");
7362
- }
7363
- var isObject_default = isObject;
7364
-
7365
- // node_modules/lodash-es/identity.js
7366
- init_esm_shims();
7367
- function identity2(value) {
7368
- return value;
7369
- }
7370
- var identity_default = identity2;
7371
-
7372
- // node_modules/lodash-es/_getNative.js
7373
- init_esm_shims();
7374
-
7375
- // node_modules/lodash-es/_baseIsNative.js
7273
+ // node_modules/d3plus-common/es/index.js
7376
7274
  init_esm_shims();
7377
7275
 
7378
- // node_modules/lodash-es/isFunction.js
7379
- init_esm_shims();
7380
- var asyncTag = "[object AsyncFunction]";
7381
- var funcTag = "[object Function]";
7382
- var genTag = "[object GeneratorFunction]";
7383
- var proxyTag = "[object Proxy]";
7384
- function isFunction(value) {
7385
- if (!isObject_default(value)) {
7386
- return false;
7387
- }
7388
- var tag = baseGetTag_default(value);
7389
- return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
7390
- }
7391
- var isFunction_default = isFunction;
7392
-
7393
- // node_modules/lodash-es/_isMasked.js
7394
- init_esm_shims();
7395
-
7396
- // node_modules/lodash-es/_coreJsData.js
7397
- init_esm_shims();
7398
- var coreJsData = root_default["__core-js_shared__"];
7399
- var coreJsData_default = coreJsData;
7400
-
7401
- // node_modules/lodash-es/_isMasked.js
7402
- var maskSrcKey = function() {
7403
- var uid = /[^.]+$/.exec(coreJsData_default && coreJsData_default.keys && coreJsData_default.keys.IE_PROTO || "");
7404
- return uid ? "Symbol(src)_1." + uid : "";
7405
- }();
7406
- function isMasked(func) {
7407
- return !!maskSrcKey && maskSrcKey in func;
7408
- }
7409
- var isMasked_default = isMasked;
7410
-
7411
- // node_modules/lodash-es/_toSource.js
7412
- init_esm_shims();
7413
- var funcProto = Function.prototype;
7414
- var funcToString = funcProto.toString;
7415
- function toSource(func) {
7416
- if (func != null) {
7417
- try {
7418
- return funcToString.call(func);
7419
- } catch (e) {
7420
- }
7421
- try {
7422
- return func + "";
7423
- } catch (e) {
7424
- }
7425
- }
7426
- return "";
7427
- }
7428
- var toSource_default = toSource;
7429
-
7430
- // node_modules/lodash-es/_baseIsNative.js
7431
- var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
7432
- var reIsHostCtor = /^\[object .+?Constructor\]$/;
7433
- var funcProto2 = Function.prototype;
7434
- var objectProto3 = Object.prototype;
7435
- var funcToString2 = funcProto2.toString;
7436
- var hasOwnProperty3 = objectProto3.hasOwnProperty;
7437
- var reIsNative = RegExp(
7438
- "^" + funcToString2.call(hasOwnProperty3).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
7439
- );
7440
- function baseIsNative(value) {
7441
- if (!isObject_default(value) || isMasked_default(value)) {
7442
- return false;
7443
- }
7444
- var pattern = isFunction_default(value) ? reIsNative : reIsHostCtor;
7445
- return pattern.test(toSource_default(value));
7446
- }
7447
- var baseIsNative_default = baseIsNative;
7448
-
7449
- // node_modules/lodash-es/_getValue.js
7276
+ // node_modules/d3plus-common/es/src/assign.js
7450
7277
  init_esm_shims();
7451
- function getValue(object, key) {
7452
- return object == null ? void 0 : object[key];
7453
- }
7454
- var getValue_default = getValue;
7455
7278
 
7456
- // node_modules/lodash-es/_getNative.js
7457
- function getNative(object, key) {
7458
- var value = getValue_default(object, key);
7459
- return baseIsNative_default(value) ? value : void 0;
7460
- }
7461
- var getNative_default = getNative;
7462
-
7463
- // node_modules/lodash-es/_apply.js
7464
- init_esm_shims();
7465
- function apply(func, thisArg, args) {
7466
- switch (args.length) {
7467
- case 0:
7468
- return func.call(thisArg);
7469
- case 1:
7470
- return func.call(thisArg, args[0]);
7471
- case 2:
7472
- return func.call(thisArg, args[0], args[1]);
7473
- case 3:
7474
- return func.call(thisArg, args[0], args[1], args[2]);
7475
- }
7476
- return func.apply(thisArg, args);
7477
- }
7478
- var apply_default = apply;
7479
-
7480
- // node_modules/lodash-es/_shortOut.js
7279
+ // node_modules/d3plus-common/es/src/isObject.js
7481
7280
  init_esm_shims();
7482
- var HOT_COUNT = 800;
7483
- var HOT_SPAN = 16;
7484
- var nativeNow = Date.now;
7485
- function shortOut(func) {
7486
- var count = 0, lastCalled = 0;
7487
- return function() {
7488
- var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
7489
- lastCalled = stamp;
7490
- if (remaining > 0) {
7491
- if (++count >= HOT_COUNT) {
7492
- return arguments[0];
7493
- }
7494
- } else {
7495
- count = 0;
7496
- }
7497
- return func.apply(void 0, arguments);
7498
- };
7281
+ function _typeof(obj) {
7282
+ "@babel/helpers - typeof";
7283
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) {
7284
+ return typeof obj2;
7285
+ } : function(obj2) {
7286
+ return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
7287
+ }, _typeof(obj);
7499
7288
  }
7500
- var shortOut_default = shortOut;
7501
-
7502
- // node_modules/lodash-es/_setToString.js
7503
- init_esm_shims();
7504
-
7505
- // node_modules/lodash-es/_baseSetToString.js
7506
- init_esm_shims();
7507
-
7508
- // node_modules/lodash-es/constant.js
7509
- init_esm_shims();
7510
- function constant(value) {
7511
- return function() {
7512
- return value;
7513
- };
7289
+ function isObject_default(item) {
7290
+ return item && _typeof(item) === "object" && (typeof window === "undefined" || item !== window && item !== window.document && !(item instanceof Element)) && !Array.isArray(item) ? true : false;
7514
7291
  }
7515
- var constant_default = constant;
7516
-
7517
- // node_modules/lodash-es/_defineProperty.js
7518
- init_esm_shims();
7519
- var defineProperty = function() {
7520
- try {
7521
- var func = getNative_default(Object, "defineProperty");
7522
- func({}, "", {});
7523
- return func;
7524
- } catch (e) {
7525
- }
7526
- }();
7527
- var defineProperty_default = defineProperty;
7528
-
7529
- // node_modules/lodash-es/_baseSetToString.js
7530
- var baseSetToString = !defineProperty_default ? identity_default : function(func, string) {
7531
- return defineProperty_default(func, "toString", {
7532
- "configurable": true,
7533
- "enumerable": false,
7534
- "value": constant_default(string),
7535
- "writable": true
7536
- });
7537
- };
7538
- var baseSetToString_default = baseSetToString;
7539
-
7540
- // node_modules/lodash-es/_setToString.js
7541
- var setToString = shortOut_default(baseSetToString_default);
7542
- var setToString_default = setToString;
7543
7292
 
7544
- // node_modules/lodash-es/_isIndex.js
7545
- init_esm_shims();
7546
- var MAX_SAFE_INTEGER = 9007199254740991;
7547
- var reIsUint = /^(?:0|[1-9]\d*)$/;
7548
- function isIndex(value, length) {
7549
- var type = typeof value;
7550
- length = length == null ? MAX_SAFE_INTEGER : length;
7551
- return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
7293
+ // node_modules/d3plus-common/es/src/assign.js
7294
+ function validObject(obj) {
7295
+ if (typeof window === "undefined") return true;
7296
+ else return obj !== window && obj !== document;
7552
7297
  }
7553
- var isIndex_default = isIndex;
7554
-
7555
- // node_modules/lodash-es/assign.js
7556
- init_esm_shims();
7557
-
7558
- // node_modules/lodash-es/_assignValue.js
7559
- init_esm_shims();
7560
-
7561
- // node_modules/lodash-es/_baseAssignValue.js
7562
- init_esm_shims();
7563
- function baseAssignValue(object, key, value) {
7564
- if (key == "__proto__" && defineProperty_default) {
7565
- defineProperty_default(object, key, {
7566
- "configurable": true,
7567
- "enumerable": true,
7568
- "value": value,
7569
- "writable": true
7298
+ function assign() {
7299
+ var _arguments = arguments;
7300
+ var target = arguments.length <= 0 ? void 0 : arguments[0];
7301
+ var _loop = function _loop2() {
7302
+ var source = i < 0 || _arguments.length <= i ? void 0 : _arguments[i];
7303
+ if (!isObject_default(source)) return "continue";
7304
+ Object.keys(source).forEach(function(prop) {
7305
+ var value = source[prop];
7306
+ if (isObject_default(value) && validObject(value)) {
7307
+ if (Object.prototype.hasOwnProperty.call(target, prop) && isObject_default(target[prop])) target[prop] = assign({}, target[prop], value);
7308
+ else target[prop] = assign({}, value);
7309
+ } else if (Array.isArray(value)) target[prop] = value.slice();
7310
+ else target[prop] = value;
7570
7311
  });
7571
- } else {
7572
- object[key] = value;
7573
- }
7574
- }
7575
- var baseAssignValue_default = baseAssignValue;
7576
-
7577
- // node_modules/lodash-es/eq.js
7578
- init_esm_shims();
7579
- function eq(value, other) {
7580
- return value === other || value !== value && other !== other;
7581
- }
7582
- var eq_default = eq;
7583
-
7584
- // node_modules/lodash-es/_assignValue.js
7585
- var objectProto4 = Object.prototype;
7586
- var hasOwnProperty4 = objectProto4.hasOwnProperty;
7587
- function assignValue(object, key, value) {
7588
- var objValue = object[key];
7589
- if (!(hasOwnProperty4.call(object, key) && eq_default(objValue, value)) || value === void 0 && !(key in object)) {
7590
- baseAssignValue_default(object, key, value);
7591
- }
7592
- }
7593
- var assignValue_default = assignValue;
7594
-
7595
- // node_modules/lodash-es/_copyObject.js
7596
- init_esm_shims();
7597
- function copyObject(source, props, object, customizer) {
7598
- var isNew = !object;
7599
- object || (object = {});
7600
- var index = -1, length = props.length;
7601
- while (++index < length) {
7602
- var key = props[index];
7603
- var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
7604
- if (newValue === void 0) {
7605
- newValue = source[key];
7606
- }
7607
- if (isNew) {
7608
- baseAssignValue_default(object, key, newValue);
7609
- } else {
7610
- assignValue_default(object, key, newValue);
7611
- }
7612
- }
7613
- return object;
7614
- }
7615
- var copyObject_default = copyObject;
7616
-
7617
- // node_modules/lodash-es/_createAssigner.js
7618
- init_esm_shims();
7619
-
7620
- // node_modules/lodash-es/_baseRest.js
7621
- init_esm_shims();
7622
-
7623
- // node_modules/lodash-es/_overRest.js
7624
- init_esm_shims();
7625
- var nativeMax = Math.max;
7626
- function overRest(func, start, transform) {
7627
- start = nativeMax(start === void 0 ? func.length - 1 : start, 0);
7628
- return function() {
7629
- var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length);
7630
- while (++index < length) {
7631
- array[index] = args[start + index];
7632
- }
7633
- index = -1;
7634
- var otherArgs = Array(start + 1);
7635
- while (++index < start) {
7636
- otherArgs[index] = args[index];
7637
- }
7638
- otherArgs[start] = transform(array);
7639
- return apply_default(func, this, otherArgs);
7640
7312
  };
7641
- }
7642
- var overRest_default = overRest;
7643
-
7644
- // node_modules/lodash-es/_baseRest.js
7645
- function baseRest(func, start) {
7646
- return setToString_default(overRest_default(func, start, identity_default), func + "");
7647
- }
7648
- var baseRest_default = baseRest;
7649
-
7650
- // node_modules/lodash-es/_isIterateeCall.js
7651
- init_esm_shims();
7652
-
7653
- // node_modules/lodash-es/isArrayLike.js
7654
- init_esm_shims();
7655
-
7656
- // node_modules/lodash-es/isLength.js
7657
- init_esm_shims();
7658
- var MAX_SAFE_INTEGER2 = 9007199254740991;
7659
- function isLength(value) {
7660
- return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2;
7661
- }
7662
- var isLength_default = isLength;
7663
-
7664
- // node_modules/lodash-es/isArrayLike.js
7665
- function isArrayLike(value) {
7666
- return value != null && isLength_default(value.length) && !isFunction_default(value);
7667
- }
7668
- var isArrayLike_default = isArrayLike;
7669
-
7670
- // node_modules/lodash-es/_isIterateeCall.js
7671
- function isIterateeCall(value, index, object) {
7672
- if (!isObject_default(object)) {
7673
- return false;
7313
+ for (var i = 1; i < arguments.length; i++) {
7314
+ var _ret = _loop();
7315
+ if (_ret === "continue") continue;
7674
7316
  }
7675
- var type = typeof index;
7676
- if (type == "number" ? isArrayLike_default(object) && isIndex_default(index, object.length) : type == "string" && index in object) {
7677
- return eq_default(object[index], value);
7678
- }
7679
- return false;
7680
- }
7681
- var isIterateeCall_default = isIterateeCall;
7682
-
7683
- // node_modules/lodash-es/_createAssigner.js
7684
- function createAssigner(assigner) {
7685
- return baseRest_default(function(object, sources) {
7686
- var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
7687
- customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
7688
- if (guard && isIterateeCall_default(sources[0], sources[1], guard)) {
7689
- customizer = length < 3 ? void 0 : customizer;
7690
- length = 1;
7691
- }
7692
- object = Object(object);
7693
- while (++index < length) {
7694
- var source = sources[index];
7695
- if (source) {
7696
- assigner(object, source, index, customizer);
7697
- }
7698
- }
7699
- return object;
7700
- });
7701
- }
7702
- var createAssigner_default = createAssigner;
7703
-
7704
- // node_modules/lodash-es/_isPrototype.js
7705
- init_esm_shims();
7706
- var objectProto5 = Object.prototype;
7707
- function isPrototype(value) {
7708
- var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto5;
7709
- return value === proto;
7710
- }
7711
- var isPrototype_default = isPrototype;
7712
-
7713
- // node_modules/lodash-es/keys.js
7714
- init_esm_shims();
7715
-
7716
- // node_modules/lodash-es/_arrayLikeKeys.js
7717
- init_esm_shims();
7718
-
7719
- // node_modules/lodash-es/_baseTimes.js
7720
- init_esm_shims();
7721
- function baseTimes(n, iteratee) {
7722
- var index = -1, result = Array(n);
7723
- while (++index < n) {
7724
- result[index] = iteratee(index);
7725
- }
7726
- return result;
7727
- }
7728
- var baseTimes_default = baseTimes;
7729
-
7730
- // node_modules/lodash-es/isArguments.js
7731
- init_esm_shims();
7732
-
7733
- // node_modules/lodash-es/_baseIsArguments.js
7734
- init_esm_shims();
7735
- var argsTag = "[object Arguments]";
7736
- function baseIsArguments(value) {
7737
- return isObjectLike_default(value) && baseGetTag_default(value) == argsTag;
7738
- }
7739
- var baseIsArguments_default = baseIsArguments;
7740
-
7741
- // node_modules/lodash-es/isArguments.js
7742
- var objectProto6 = Object.prototype;
7743
- var hasOwnProperty5 = objectProto6.hasOwnProperty;
7744
- var propertyIsEnumerable = objectProto6.propertyIsEnumerable;
7745
- var isArguments = baseIsArguments_default(/* @__PURE__ */ function() {
7746
- return arguments;
7747
- }()) ? baseIsArguments_default : function(value) {
7748
- return isObjectLike_default(value) && hasOwnProperty5.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
7749
- };
7750
- var isArguments_default = isArguments;
7751
-
7752
- // node_modules/lodash-es/isBuffer.js
7753
- init_esm_shims();
7754
-
7755
- // node_modules/lodash-es/stubFalse.js
7756
- init_esm_shims();
7757
- function stubFalse() {
7758
- return false;
7759
- }
7760
- var stubFalse_default = stubFalse;
7761
-
7762
- // node_modules/lodash-es/isBuffer.js
7763
- var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports;
7764
- var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module;
7765
- var moduleExports = freeModule && freeModule.exports === freeExports;
7766
- var Buffer2 = moduleExports ? root_default.Buffer : void 0;
7767
- var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;
7768
- var isBuffer = nativeIsBuffer || stubFalse_default;
7769
- var isBuffer_default = isBuffer;
7770
-
7771
- // node_modules/lodash-es/isTypedArray.js
7772
- init_esm_shims();
7773
-
7774
- // node_modules/lodash-es/_baseIsTypedArray.js
7775
- init_esm_shims();
7776
- var argsTag2 = "[object Arguments]";
7777
- var arrayTag = "[object Array]";
7778
- var boolTag = "[object Boolean]";
7779
- var dateTag = "[object Date]";
7780
- var errorTag = "[object Error]";
7781
- var funcTag2 = "[object Function]";
7782
- var mapTag = "[object Map]";
7783
- var numberTag = "[object Number]";
7784
- var objectTag = "[object Object]";
7785
- var regexpTag = "[object RegExp]";
7786
- var setTag = "[object Set]";
7787
- var stringTag = "[object String]";
7788
- var weakMapTag = "[object WeakMap]";
7789
- var arrayBufferTag = "[object ArrayBuffer]";
7790
- var dataViewTag = "[object DataView]";
7791
- var float32Tag = "[object Float32Array]";
7792
- var float64Tag = "[object Float64Array]";
7793
- var int8Tag = "[object Int8Array]";
7794
- var int16Tag = "[object Int16Array]";
7795
- var int32Tag = "[object Int32Array]";
7796
- var uint8Tag = "[object Uint8Array]";
7797
- var uint8ClampedTag = "[object Uint8ClampedArray]";
7798
- var uint16Tag = "[object Uint16Array]";
7799
- var uint32Tag = "[object Uint32Array]";
7800
- var typedArrayTags = {};
7801
- typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
7802
- typedArrayTags[argsTag2] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag2] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
7803
- function baseIsTypedArray(value) {
7804
- return isObjectLike_default(value) && isLength_default(value.length) && !!typedArrayTags[baseGetTag_default(value)];
7805
- }
7806
- var baseIsTypedArray_default = baseIsTypedArray;
7807
-
7808
- // node_modules/lodash-es/_baseUnary.js
7809
- init_esm_shims();
7810
- function baseUnary(func) {
7811
- return function(value) {
7812
- return func(value);
7813
- };
7814
- }
7815
- var baseUnary_default = baseUnary;
7816
-
7817
- // node_modules/lodash-es/_nodeUtil.js
7818
- init_esm_shims();
7819
- var freeExports2 = typeof exports == "object" && exports && !exports.nodeType && exports;
7820
- var freeModule2 = freeExports2 && typeof module == "object" && module && !module.nodeType && module;
7821
- var moduleExports2 = freeModule2 && freeModule2.exports === freeExports2;
7822
- var freeProcess = moduleExports2 && freeGlobal_default.process;
7823
- var nodeUtil = function() {
7824
- try {
7825
- var types = freeModule2 && freeModule2.require && freeModule2.require("util").types;
7826
- if (types) {
7827
- return types;
7828
- }
7829
- return freeProcess && freeProcess.binding && freeProcess.binding("util");
7830
- } catch (e) {
7831
- }
7832
- }();
7833
- var nodeUtil_default = nodeUtil;
7834
-
7835
- // node_modules/lodash-es/isTypedArray.js
7836
- var nodeIsTypedArray = nodeUtil_default && nodeUtil_default.isTypedArray;
7837
- var isTypedArray = nodeIsTypedArray ? baseUnary_default(nodeIsTypedArray) : baseIsTypedArray_default;
7838
- var isTypedArray_default = isTypedArray;
7839
-
7840
- // node_modules/lodash-es/_arrayLikeKeys.js
7841
- var objectProto7 = Object.prototype;
7842
- var hasOwnProperty6 = objectProto7.hasOwnProperty;
7843
- function arrayLikeKeys(value, inherited) {
7844
- var isArr = isArray_default(value), isArg = !isArr && isArguments_default(value), isBuff = !isArr && !isArg && isBuffer_default(value), isType = !isArr && !isArg && !isBuff && isTypedArray_default(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes_default(value.length, String) : [], length = result.length;
7845
- for (var key in value) {
7846
- if ((inherited || hasOwnProperty6.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
7847
- (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
7848
- isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
7849
- isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
7850
- isIndex_default(key, length)))) {
7851
- result.push(key);
7852
- }
7853
- }
7854
- return result;
7855
- }
7856
- var arrayLikeKeys_default = arrayLikeKeys;
7857
-
7858
- // node_modules/lodash-es/_baseKeys.js
7859
- init_esm_shims();
7860
-
7861
- // node_modules/lodash-es/_nativeKeys.js
7862
- init_esm_shims();
7863
-
7864
- // node_modules/lodash-es/_overArg.js
7865
- init_esm_shims();
7866
- function overArg(func, transform) {
7867
- return function(arg) {
7868
- return func(transform(arg));
7869
- };
7870
- }
7871
- var overArg_default = overArg;
7872
-
7873
- // node_modules/lodash-es/_nativeKeys.js
7874
- var nativeKeys = overArg_default(Object.keys, Object);
7875
- var nativeKeys_default = nativeKeys;
7876
-
7877
- // node_modules/lodash-es/_baseKeys.js
7878
- var objectProto8 = Object.prototype;
7879
- var hasOwnProperty7 = objectProto8.hasOwnProperty;
7880
- function baseKeys(object) {
7881
- if (!isPrototype_default(object)) {
7882
- return nativeKeys_default(object);
7883
- }
7884
- var result = [];
7885
- for (var key in Object(object)) {
7886
- if (hasOwnProperty7.call(object, key) && key != "constructor") {
7887
- result.push(key);
7888
- }
7889
- }
7890
- return result;
7891
- }
7892
- var baseKeys_default = baseKeys;
7893
-
7894
- // node_modules/lodash-es/keys.js
7895
- function keys(object) {
7896
- return isArrayLike_default(object) ? arrayLikeKeys_default(object) : baseKeys_default(object);
7317
+ return target;
7897
7318
  }
7898
- var keys_default = keys;
7899
-
7900
- // node_modules/lodash-es/assign.js
7901
- var objectProto9 = Object.prototype;
7902
- var hasOwnProperty8 = objectProto9.hasOwnProperty;
7903
- var assign = createAssigner_default(function(object, source) {
7904
- if (isPrototype_default(source) || isArrayLike_default(source)) {
7905
- copyObject_default(source, keys_default(source), object);
7906
- return;
7907
- }
7908
- for (var key in source) {
7909
- if (hasOwnProperty8.call(source, key)) {
7910
- assignValue_default(object, key, source[key]);
7911
- }
7912
- }
7913
- });
7914
7319
  var assign_default = assign;
7320
+ var buildCommon = d3plusConfigBuilder.common;
7321
+ var buildBarchart = d3plusConfigBuilder.barchart;
7322
+ var buildChoropleth = d3plusConfigBuilder.choropleth;
7323
+ var buildDonut = d3plusConfigBuilder.donut;
7324
+ var buildLineplot = d3plusConfigBuilder.lineplot;
7325
+ var buildStackedarea = d3plusConfigBuilder.stackedarea;
7326
+ var buildTreemap = d3plusConfigBuilder.treemap;
7327
+ d3plusConfigBuilder.common = (chart, params) => {
7328
+ const config = buildCommon(chart, params);
7329
+ return config;
7330
+ };
7915
7331
  function useD3plusConfig(chart, params) {
7916
7332
  const { fullMode, getMeasureConfig, showConfidenceInt, t } = params;
7917
7333
  const { getFormatter } = useFormatter();
7918
7334
  return useMemo(() => {
7919
- if (!chart) return [null, { data: "", locale: "" }];
7920
- const params2 = { fullMode, getFormatter, getMeasureConfig, showConfidenceInt, t };
7921
- const { locale } = chart.datagroup;
7335
+ if (!chart) return [null, { data: [], locale: "" }];
7336
+ const params2 = {
7337
+ fullMode,
7338
+ getFormatter,
7339
+ getMeasureConfig,
7340
+ showConfidenceInt,
7341
+ t: (template, data) => t(`vizbuilder.${template}`, data)
7342
+ };
7922
7343
  if (chart.type === "barchart") {
7923
7344
  return [BarChart, buildBarchartConfig(chart, params2)];
7924
7345
  }
7925
7346
  if (chart.type === "choropleth") {
7926
- return [Geomap, buildChoroplethConfig(chart, params2)];
7347
+ const config = buildChoroplethConfig(chart, params2);
7348
+ if (chart.extraConfig.d3plus) assign_default(config, chart.extraConfig.d3plus);
7349
+ return [Geomap, config];
7927
7350
  }
7928
7351
  if (chart.type === "donut") {
7929
7352
  return [Donut, buildDonutConfig(chart, params2)];
@@ -7937,316 +7360,33 @@ function useD3plusConfig(chart, params) {
7937
7360
  if (chart.type === "treemap") {
7938
7361
  return [Treemap, buildTreemapConfig(chart, params2)];
7939
7362
  }
7940
- return [null, { data: "", locale }];
7363
+ return [null, { data: [], locale: "" }];
7941
7364
  }, [chart, fullMode, getFormatter, getMeasureConfig, showConfidenceInt, t]);
7942
7365
  }
7943
7366
  function buildBarchartConfig(chart, params) {
7944
- const { fullMode, getFormatter, t } = params;
7945
- const { datagroup, values, series, timeline, orientation } = chart;
7946
- const { columns, dataset, locale } = datagroup;
7947
- const [mainSeries, stackedSeries] = series;
7948
- const collate = new Intl.Collator(locale, { numeric: true, ignorePunctuation: true });
7949
- const measureFormatter = getFormatter(values.measure);
7950
- const measureAggregator = values.measure.annotations.aggregation_method || values.measure.aggregator;
7951
- const measureUnits = values.measure.annotations.units_of_measurement || "";
7952
- const isPercentage = ["Percentage", "Rate"].includes(measureUnits);
7953
- const config = {
7954
- barPadding: fullMode ? 5 : 1,
7955
- data: dataset,
7956
- discrete: chart.orientation === "horizontal" ? "y" : "x",
7957
- groupBy: stackedSeries == null ? void 0 : stackedSeries.name,
7958
- groupPadding: fullMode ? 5 : 1,
7959
- label: (d) => series.map((series2) => d[series2.level.name]).join("\n"),
7960
- legend: fullMode,
7961
- locale,
7962
- stacked: stackedSeries && isOneOf(measureAggregator.toUpperCase(), ["COUNT", "SUM"]) || isPercentage,
7963
- time: (timeline == null ? void 0 : timeline.name) === "Quarter ID" ? timeline.level.name : timeline == null ? void 0 : timeline.name,
7964
- timeline: timeline && fullMode,
7965
- timelineConfig: {
7966
- brushing: false,
7967
- playButton: false
7968
- },
7969
- title: _buildTitle(t, chart),
7970
- titleConfig: {
7971
- fontSize: fullMode ? 20 : 10
7972
- },
7973
- tooltipConfig: {
7974
- tbody: _buildTooltipTbody(columns, values.measure, measureFormatter, locale)
7975
- },
7976
- total: !timeline,
7977
- totalFormat: (d) => t("vizbuilder.title.total", { value: measureFormatter(d, locale) })
7978
- };
7979
- if (orientation === "horizontal") {
7980
- Object.assign(config, {
7981
- x: values.measure.name,
7982
- xConfig: {
7983
- title: values.measure.caption,
7984
- tickFormat: (d) => measureFormatter(d, locale)
7985
- },
7986
- y: mainSeries.level.name,
7987
- yConfig: {
7988
- title: mainSeries.level.caption
7989
- },
7990
- ySort: collate.compare
7991
- });
7992
- } else {
7993
- Object.assign(config, {
7994
- x: mainSeries.level.name,
7995
- xConfig: {
7996
- title: mainSeries.level.caption
7997
- },
7998
- y: values.measure.name,
7999
- yConfig: {
8000
- title: values.measure.caption,
8001
- tickFormat: (d) => measureFormatter(d, locale)
8002
- }
8003
- });
8004
- }
7367
+ const config = buildBarchart(chart, params);
8005
7368
  return config;
8006
7369
  }
8007
7370
  function buildChoroplethConfig(chart, params) {
8008
- const { datagroup, values, series, timeline } = chart;
8009
- const { fullMode, getFormatter, t } = params;
8010
- const { columns, dataset, locale } = datagroup;
8011
- const { members: firstSeriesMembers } = series[0];
8012
- const lastSeries = getLast(series);
8013
- const measureFormatter = getFormatter(values.measure);
8014
- const config = {
8015
- colorScale: values.measure.name,
8016
- colorScaleConfig: {
8017
- axisConfig: {
8018
- tickFormat: (d) => measureFormatter(d, locale)
8019
- },
8020
- scale: "jenks"
8021
- },
8022
- colorScalePosition: fullMode ? "right" : false,
8023
- data: dataset,
8024
- fitFilter: (d) => {
8025
- var _a;
8026
- return firstSeriesMembers.includes((_a = d.id) != null ? _a : d.properties.id);
8027
- },
8028
- groupBy: series.map((series2) => series2.name),
8029
- label: (d) => series.map((series2) => d[series2.level.name]).join("\n"),
8030
- locale,
8031
- ocean: "transparent",
8032
- projectionRotate: [0, 0],
8033
- tiles: false,
8034
- time: timeline == null ? void 0 : timeline.level.name,
8035
- timeline: fullMode && (timeline == null ? void 0 : timeline.level.name),
8036
- timelineConfig: {
8037
- brushing: false,
8038
- playButton: false
8039
- },
8040
- title: _buildTitle(t, chart),
8041
- titleConfig: {
8042
- fontSize: fullMode ? 20 : 10
8043
- },
8044
- tooltip: true,
8045
- tooltipConfig: {
8046
- title(d) {
8047
- return d[lastSeries.level.name];
8048
- },
8049
- tbody: _buildTooltipTbody(columns, values.measure, measureFormatter, locale)
8050
- },
8051
- totalFormat: (d) => t("vizbuilder.title.total", { value: measureFormatter(d, locale) }),
8052
- zoomScroll: false
8053
- };
8054
- assign_default(config, chart.extraConfig);
7371
+ const config = buildChoropleth(chart, params);
8055
7372
  return config;
8056
7373
  }
8057
7374
  function buildDonutConfig(chart, params) {
8058
- const { datagroup, series, timeline, values } = chart;
8059
- const { fullMode, getFormatter, t } = params;
8060
- const { columns, dataset, locale } = datagroup;
8061
- const [mainSeries] = series;
8062
- const measureFormatter = getFormatter(values.measure);
8063
- const config = {
8064
- data: dataset,
8065
- groupBy: [mainSeries.name],
8066
- label: (d) => d[mainSeries.level.name],
8067
- locale,
8068
- time: timeline == null ? void 0 : timeline.name,
8069
- timeline: fullMode && timeline,
8070
- timelineConfig: {
8071
- brushing: false,
8072
- playButton: false
8073
- },
8074
- title: _buildTitle(t, chart),
8075
- titleConfig: {
8076
- fontSize: fullMode ? 20 : 10
8077
- },
8078
- tooltipConfig: {
8079
- tbody: _buildTooltipTbody(columns, values.measure, measureFormatter, locale)
8080
- },
8081
- total: !timeline,
8082
- totalFormat: (d) => t("vizbuilder.title.total", { value: measureFormatter(d, locale) }),
8083
- value: values.measure.name
8084
- };
7375
+ const config = buildDonut(chart, params);
8085
7376
  return config;
8086
7377
  }
8087
7378
  function buildLineplotConfig(chart, params) {
8088
- const { datagroup, values, series, timeline } = chart;
8089
- const { fullMode, getFormatter, t } = params;
8090
- const { columns, dataset, locale } = datagroup;
8091
- const measureFormatter = getFormatter(values.measure);
8092
- const config = {
8093
- data: dataset,
8094
- discrete: "x",
8095
- label: (d) => {
8096
- return series.map((series2) => d[series2.level.name]).join("\n") || t("vizbuilder.title.measure_on_period", {
8097
- measure: values.measure.caption,
8098
- period: d[timeline.level.name]
8099
- });
8100
- },
8101
- legend: fullMode,
8102
- locale,
8103
- groupBy: series.length ? series.map((series2) => series2.name) : void 0,
8104
- time: timeline.level.name,
8105
- timeline: fullMode,
8106
- timelineConfig: {
8107
- brushing: true,
8108
- playButton: false
8109
- },
8110
- title: _buildTitle(t, chart),
8111
- titleConfig: {
8112
- fontSize: fullMode ? 20 : 10
8113
- },
8114
- tooltipConfig: {
8115
- tbody: _buildTooltipTbody(columns, values.measure, measureFormatter, locale)
8116
- },
8117
- total: false,
8118
- totalFormat: (d) => t("vizbuilder.title.total", { value: measureFormatter(d, locale) }),
8119
- x: timeline.level.name,
8120
- xConfig: {
8121
- title: timeline.level.caption
8122
- },
8123
- y: values.measure.name,
8124
- yConfig: {
8125
- scale: "auto",
8126
- tickFormat: (d) => measureFormatter(d, locale),
8127
- title: values.measure.caption
8128
- }
8129
- };
7379
+ const config = buildLineplot(chart, params);
8130
7380
  return config;
8131
7381
  }
8132
7382
  function buildStackedareaConfig(chart, params) {
8133
- const { datagroup, series, timeline, values } = chart;
8134
- const { fullMode, getFormatter, t } = params;
8135
- const { columns, dataset, locale } = datagroup;
8136
- const measureFormatter = getFormatter(values.measure);
8137
- const config = {
8138
- data: dataset,
8139
- groupBy: series.map((series2) => series2.name),
8140
- locale,
8141
- time: timeline == null ? void 0 : timeline.name,
8142
- timeline: timeline && fullMode,
8143
- title: _buildTitle(t, chart),
8144
- titleConfig: {
8145
- fontSize: fullMode ? 20 : 10
8146
- },
8147
- tooltipConfig: {
8148
- tbody: _buildTooltipTbody(columns, values.measure, measureFormatter, locale)
8149
- },
8150
- totalFormat: (d) => t("vizbuilder.title.total", { value: measureFormatter(d, locale) }),
8151
- value: values.measure.name
8152
- };
7383
+ const config = buildStackedarea(chart, params);
8153
7384
  return config;
8154
7385
  }
8155
7386
  function buildTreemapConfig(chart, params) {
8156
- const { datagroup, series, timeline, values } = chart;
8157
- const { fullMode, getFormatter, t } = params;
8158
- const { columns, dataset, locale } = datagroup;
8159
- const measureFormatter = getFormatter(values.measure);
8160
- const config = {
8161
- data: dataset,
8162
- label: (d) => series.map((series2) => d[series2.level.name]).join("\n"),
8163
- locale,
8164
- groupBy: series.map((series2) => series2.name),
8165
- sum: values.measure.name,
8166
- threshold: 5e-3,
8167
- thresholdName: series[0].name,
8168
- time: timeline == null ? void 0 : timeline.name,
8169
- timeline: timeline && fullMode,
8170
- title: _buildTitle(t, chart),
8171
- titleConfig: {
8172
- fontSize: fullMode ? 20 : 10
8173
- },
8174
- tooltipConfig: {
8175
- tbody: _buildTooltipTbody(columns, values.measure, measureFormatter, locale)
8176
- },
8177
- totalFormat: (d) => t("vizbuilder.title.total", { value: measureFormatter(d, locale) })
8178
- };
7387
+ const config = buildTreemap(chart, params);
8179
7388
  return config;
8180
7389
  }
8181
- function _buildTooltipTbody(columns, measure, measureFormatter, locale) {
8182
- return (d) => {
8183
- const { caption: meaCaption, name: meaName } = measure;
8184
- return filterMap(Object.values(columns), (column) => {
8185
- if (column.type === "measure") return null;
8186
- if (column.type === "level" && column.hasID && column.isID) return null;
8187
- const { caption, name: name4 } = getColumnEntity(column);
8188
- if (Array.isArray(d[name4])) return null;
8189
- return [caption, d[name4]];
8190
- }).concat([[meaCaption, measureFormatter(d[meaName], locale)]]);
8191
- };
8192
- }
8193
- function _buildTitle(t, chart) {
8194
- const { series, values } = chart;
8195
- const [mainSeries, otherSeries] = series;
8196
- const { measure } = values;
8197
- const timeline = chart.timeline || chart.time;
8198
- const seriesStr = (series2) => {
8199
- if (!series2) return "";
8200
- const { members } = series2.captions[series2.level.name];
8201
- if (series2.members.length < 5) {
8202
- return t("vizbuilder.title.series_members", {
8203
- series: series2.level.caption,
8204
- members: _buildTranslatedList(t, members)
8205
- });
8206
- }
8207
- return t("vizbuilder.title.series", {
8208
- series: series2.level.caption
8209
- });
8210
- };
8211
- const getMembers = (data, series2) => {
8212
- if (!data) return series2.members;
8213
- return [...new Set(data.map((d) => d[series2.name]))].sort();
8214
- };
8215
- return (data) => {
8216
- const aggregator = measure.annotations.aggregation_method || measure.aggregator;
8217
- const valuesKey = `vizbuilder.aggregator.${aggregator.toLowerCase()}`;
8218
- const values2 = otherSeries ? t(valuesKey, { measure: measure.caption }) : measure.caption;
8219
- const config = {
8220
- values: values2 === valuesKey ? measure.caption : values2,
8221
- measure: values2 === valuesKey ? measure.caption : values2,
8222
- series: otherSeries ? _buildTranslatedList(t, [seriesStr(mainSeries), seriesStr(otherSeries)]) : seriesStr(mainSeries),
8223
- time: timeline == null ? void 0 : timeline.level.caption,
8224
- period: timeline == null ? void 0 : timeline.level.caption,
8225
- time_period: timeline ? getLast(getMembers(data, timeline)) : ""
8226
- };
8227
- if (isOneOf(chart.type, ["lineplot", "stackedarea"])) {
8228
- if (!series.length) return t("vizbuilder.title.measure_over_period", config);
8229
- return t("vizbuilder.title.main_over_period", config);
8230
- }
8231
- if (timeline) return t("vizbuilder.title.main_on_period", config);
8232
- return t("vizbuilder.title.main", config);
8233
- };
8234
- }
8235
- function _buildTranslatedList(t, list) {
8236
- return t("vizbuilder.list.suffix", {
8237
- n: list.length,
8238
- nlessone: list.length - 1,
8239
- item: getLast(list),
8240
- rest: t("vizbuilder.list.prefix", {
8241
- n: list.length - 1,
8242
- nlessone: list.length - 2,
8243
- item: list[0],
8244
- rest: list.slice(1, -1).join(t("vizbuilder.list.join")),
8245
- list: list.slice(0, -1).join(t("vizbuilder.list.join"))
8246
- }),
8247
- list: list.join(t("vizbuilder.list.join"))
8248
- });
8249
- }
8250
7390
 
8251
7391
  // src/vizbuilder/components/ErrorBoundary.tsx
8252
7392
  init_esm_shims();
@@ -8540,6 +7680,52 @@ function Vizbuilder(props) {
8540
7680
  ));
8541
7681
  }
8542
7682
 
7683
+ // src/vizbuilder/hooks/useVizbuilderData.ts
7684
+ init_esm_shims();
7685
+ function useFinalUniqueKeys() {
7686
+ const drilldowns = useSelector$1(selectDrilldownItems);
7687
+ const measures = useSelector$1(selectMeasureItems);
7688
+ const finalUniqueKeys = useMemo(
7689
+ () => [
7690
+ ...measures.map((m) => m.active ? m.name : null),
7691
+ ...drilldowns.map((d) => d.active ? d.level : null)
7692
+ ].filter((a) => a !== null),
7693
+ [measures, drilldowns]
7694
+ );
7695
+ return finalUniqueKeys;
7696
+ }
7697
+ function useVizbuilderData() {
7698
+ const columns = useFinalUniqueKeys();
7699
+ const { code: locale } = useSelector$1(selectLocale);
7700
+ const permaKey = useKey();
7701
+ const loadingState = useSelector$1(selectLoadingState);
7702
+ const actions2 = useActions();
7703
+ const enabled = Boolean(columns.length);
7704
+ const initialKey = permaKey ? [permaKey] : permaKey;
7705
+ const [filterKeydebouced, setDebouncedTerm] = useState(initialKey);
7706
+ useEffect(() => {
7707
+ if (!enabled && permaKey) return;
7708
+ const handler = debounce(
7709
+ () => {
7710
+ const term = [permaKey];
7711
+ setDebouncedTerm(term);
7712
+ },
7713
+ loadingState.loading ? 0 : 800
7714
+ );
7715
+ handler();
7716
+ return () => handler.cancel();
7717
+ }, [enabled, locale, loadingState.loading, permaKey]);
7718
+ const query = useQuery({
7719
+ queryKey: ["table", filterKeydebouced],
7720
+ queryFn: () => actions2.willFetchQuery({ withoutPagination: true }).then((result) => {
7721
+ return result;
7722
+ }),
7723
+ staleTime: 3e5,
7724
+ enabled: enabled && !!filterKeydebouced
7725
+ });
7726
+ return query;
7727
+ }
7728
+
8543
7729
  // src/vizbuilder/components/VizbuilderView.tsx
8544
7730
  var CHART_LIMITS = {
8545
7731
  BARCHART_MAX_BARS: 20,
@@ -8555,17 +7741,19 @@ var CHART_LIMITS = {
8555
7741
  var DOWNLOAD_FORMATS = ["SVG", "PNG"];
8556
7742
  function VizbuilderView(props) {
8557
7743
  const { cube, params, result } = props;
7744
+ const query = useVizbuilderData();
8558
7745
  const dataset = useMemo(() => {
7746
+ var _a;
8559
7747
  const columns = Object.keys(result.types);
8560
7748
  return {
8561
7749
  columns: Object.fromEntries(
8562
7750
  columns.map((columnName) => [columnName, buildColumn(cube, columnName, columns)])
8563
7751
  ),
8564
- data: result.data,
7752
+ data: ((_a = query.data) == null ? void 0 : _a.data) || [],
8565
7753
  locale: params.locale || "en"
8566
7754
  };
8567
7755
  }, [cube, result, params.locale]);
8568
- return /* @__PURE__ */ React19__default.createElement(
7756
+ return !query.isLoading && /* @__PURE__ */ React19__default.createElement(
8569
7757
  Vizbuilder,
8570
7758
  {
8571
7759
  datasets: dataset,
@@ -8578,17 +7766,6 @@ function VizbuilderView(props) {
8578
7766
 
8579
7767
  file-saver/FileSaver.js:
8580
7768
  (*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js *)
8581
-
8582
- lodash-es/lodash.js:
8583
- (**
8584
- * @license
8585
- * Lodash (Custom Build) <https://lodash.com/>
8586
- * Build: `lodash modularize exports="es" -o ./`
8587
- * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
8588
- * Released under MIT license <https://lodash.com/license>
8589
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
8590
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
8591
- *)
8592
7769
  */
8593
7770
 
8594
7771
  export { DebugView, ExplorerComponent as Explorer, PivotView, SettingsConsumer, TableView, ToolbarButton, TourStep, TranslationConsumer, VizbuilderView, reducer as explorerReducer, thunkExtraArg as explorerThunkExtraArg, defaultTranslation as translationDict, useSettings, useTranslation };