@datawheel/data-explorer 0.3.9 → 0.3.10

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 +197 -1016
  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
  }
@@ -1916,14 +1918,16 @@ function willFetchQuery(params) {
1916
1918
  const { limit = 0, offset = 0 } = params || {};
1917
1919
  return (dispatch, getState, { tesseract }) => {
1918
1920
  const state = getState();
1919
- const params2 = selectCurrentQueryParams(state);
1920
- const cube = selectOlapCubeMap(state)[params2.cube];
1921
- if (!isValidQuery(params2) || !cube) {
1921
+ const queryParams = selectCurrentQueryParams(state);
1922
+ const cube = selectOlapCubeMap(state)[queryParams.cube];
1923
+ if (!isValidQuery(queryParams) || !cube) {
1922
1924
  return Promise.reject(new Error("Invalid query"));
1923
1925
  }
1924
- const request = queryParamsToRequest(params2);
1926
+ const request = queryParamsToRequest(queryParams);
1925
1927
  if (limit || offset) {
1926
1928
  request.limit = `${limit},${offset}`;
1929
+ } else if (params == null ? void 0 : params.withoutPagination) {
1930
+ request.limit = "0,0";
1927
1931
  }
1928
1932
  return tesseract.fetchData({ request, format: "jsonrecords" }).then(
1929
1933
  (response) => response.json().then((content) => {
@@ -1933,7 +1937,7 @@ function willFetchQuery(params) {
1933
1937
  return {
1934
1938
  data: content.data,
1935
1939
  page: content.page,
1936
- types: describeData(cube, params2, content),
1940
+ types: describeData(cube, queryParams, content),
1937
1941
  headers: Object.fromEntries(response.headers),
1938
1942
  status: response.status || 200,
1939
1943
  url: response.url
@@ -2574,14 +2578,14 @@ var SelectObject = forwardRef(function(props, ref) {
2574
2578
  var _a;
2575
2579
  const {
2576
2580
  getLabel,
2577
- getValue: getValue2 = identity,
2581
+ getValue = identity,
2578
2582
  items,
2579
2583
  onItemSelect,
2580
2584
  selectedItem,
2581
2585
  selectProps = {}
2582
2586
  } = props;
2583
2587
  const [itemList, itemMap] = useMemo(() => {
2584
- const valueAccessor = accesorFactory(getValue2);
2588
+ const valueAccessor = accesorFactory(getValue);
2585
2589
  const labelAccessor = getLabel ? accesorFactory(getLabel) : valueAccessor;
2586
2590
  const list = items.map((item) => ({
2587
2591
  label: labelAccessor(item),
@@ -2589,13 +2593,13 @@ var SelectObject = forwardRef(function(props, ref) {
2589
2593
  item
2590
2594
  }));
2591
2595
  return [list, keyBy(list, (option) => option.value)];
2592
- }, [items, getLabel, getValue2]);
2596
+ }, [items, getLabel, getValue]);
2593
2597
  const selected = useMemo(() => {
2594
2598
  if (selectedItem == null) return null;
2595
2599
  if (typeof selectedItem === "string") return selectedItem;
2596
- const valueAccessor = accesorFactory(getValue2);
2600
+ const valueAccessor = accesorFactory(getValue);
2597
2601
  return valueAccessor(selectedItem);
2598
- }, [selectedItem, getValue2]);
2602
+ }, [selectedItem, getValue]);
2599
2603
  const itemSelectHandler = (value) => {
2600
2604
  onItemSelect && onItemSelect(itemMap[value].item);
2601
2605
  };
@@ -3311,7 +3315,7 @@ function AccordionControl(props) {
3311
3315
  }
3312
3316
  function getKeys2(items, k, locale, filter) {
3313
3317
  let cubes = items;
3314
- const keys2 = cubes.reduce((prev, curr) => {
3318
+ const keys = cubes.reduce((prev, curr) => {
3315
3319
  const key = getAnnotation(curr, k, locale);
3316
3320
  if (key) {
3317
3321
  prev.add(key);
@@ -3319,7 +3323,7 @@ function getKeys2(items, k, locale, filter) {
3319
3323
  }
3320
3324
  return prev;
3321
3325
  }, /* @__PURE__ */ new Set());
3322
- return Array.from(keys2);
3326
+ return Array.from(keys);
3323
3327
  }
3324
3328
  function isSelected(selectedItem, currentItem) {
3325
3329
  if (selectedItem && currentItem) {
@@ -3908,7 +3912,8 @@ function useTableData({ columns, pagination, cube }) {
3908
3912
  return result;
3909
3913
  }),
3910
3914
  staleTime: 3e5,
3911
- enabled: enabled && !!filterKeydebouced
3915
+ enabled: enabled && !!filterKeydebouced,
3916
+ retry: false
3912
3917
  });
3913
3918
  const client = useQueryClient();
3914
3919
  const cachedData = client.getQueryData(["table", filterKeydebouced]);
@@ -5283,12 +5288,17 @@ var useStyles4 = createStyles((theme, params) => ({
5283
5288
  }));
5284
5289
  function ExplorerContent(props) {
5285
5290
  const translation = useTranslation();
5286
- useSetup(
5287
- props.serverURL,
5288
- props.serverConfig || {},
5289
- props.defaultDataLocale,
5290
- props.defaultCube
5291
- );
5291
+ const serverConfig = useMemo(() => {
5292
+ return props.serverConfig !== void 0 ? props.serverConfig : {};
5293
+ }, [props.serverConfig]);
5294
+ useEffect(() => {
5295
+ useSetup(
5296
+ props.serverURL,
5297
+ serverConfig,
5298
+ props.defaultDataLocale,
5299
+ props.defaultCube
5300
+ );
5301
+ }, [props.serverURL, serverConfig, props.defaultDataLocale, props.defaultCube]);
5292
5302
  const { classes } = useStyles4({ height: props.height });
5293
5303
  useEffect(() => {
5294
5304
  if (props.locale) translation.setLocale(props.locale);
@@ -6413,12 +6423,6 @@ function buildColumn(cube, name4, columns) {
6413
6423
  }
6414
6424
  throw new Error(`Missing entity in cube '${cube.name}': ${nameWithoutID}`);
6415
6425
  }
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
6426
 
6423
6427
  // src/vizbuilder/components/Vizbuilder.tsx
6424
6428
  init_esm_shims();
@@ -7270,660 +7274,83 @@ function saveElement_default(elem) {
7270
7274
  // src/vizbuilder/hooks/useD3plusConfig.ts
7271
7275
  init_esm_shims();
7272
7276
 
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
7277
+ // node_modules/d3plus-common/es/index.js
7280
7278
  init_esm_shims();
7281
7279
 
7282
- // node_modules/lodash-es/_root.js
7280
+ // node_modules/d3plus-common/es/src/assign.js
7283
7281
  init_esm_shims();
7284
7282
 
7285
- // node_modules/lodash-es/_freeGlobal.js
7283
+ // node_modules/d3plus-common/es/src/isObject.js
7286
7284
  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;
7285
+ function _typeof(obj) {
7286
+ "@babel/helpers - typeof";
7287
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) {
7288
+ return typeof obj2;
7289
+ } : function(obj2) {
7290
+ return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
7291
+ }, _typeof(obj);
7321
7292
  }
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);
7293
+ function isObject_default(item) {
7294
+ return item && _typeof(item) === "object" && (typeof window === "undefined" || item !== window && item !== window.document && !(item instanceof Element)) && !Array.isArray(item) ? true : false;
7330
7295
  }
7331
- var objectToString_default = objectToString;
7332
7296
 
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);
7297
+ // node_modules/d3plus-common/es/src/assign.js
7298
+ function validObject(obj) {
7299
+ if (typeof window === "undefined") return true;
7300
+ else return obj !== window && obj !== document;
7342
7301
  }
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
7376
- init_esm_shims();
7377
-
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
7450
- init_esm_shims();
7451
- function getValue(object, key) {
7452
- return object == null ? void 0 : object[key];
7453
- }
7454
- var getValue_default = getValue;
7455
-
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
7481
- 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
- };
7499
- }
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
- };
7514
- }
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
-
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);
7552
- }
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
7302
+ function assign() {
7303
+ var _arguments = arguments;
7304
+ var target = arguments.length <= 0 ? void 0 : arguments[0];
7305
+ var _loop = function _loop2() {
7306
+ var source = i < 0 || _arguments.length <= i ? void 0 : _arguments[i];
7307
+ if (!isObject_default(source)) return "continue";
7308
+ Object.keys(source).forEach(function(prop) {
7309
+ var value = source[prop];
7310
+ if (isObject_default(value) && validObject(value)) {
7311
+ if (Object.prototype.hasOwnProperty.call(target, prop) && isObject_default(target[prop])) target[prop] = assign({}, target[prop], value);
7312
+ else target[prop] = assign({}, value);
7313
+ } else if (Array.isArray(value)) target[prop] = value.slice();
7314
+ else target[prop] = value;
7570
7315
  });
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
- };
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;
7674
- }
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
7316
  };
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) {
7317
+ for (var i = 1; i < arguments.length; i++) {
7318
+ var _ret = _loop();
7319
+ if (_ret === "continue") continue;
7831
7320
  }
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);
7321
+ return target;
7897
7322
  }
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
7323
  var assign_default = assign;
7324
+ var buildCommon = d3plusConfigBuilder.common;
7325
+ var buildBarchart = d3plusConfigBuilder.barchart;
7326
+ var buildChoropleth = d3plusConfigBuilder.choropleth;
7327
+ var buildDonut = d3plusConfigBuilder.donut;
7328
+ var buildLineplot = d3plusConfigBuilder.lineplot;
7329
+ var buildStackedarea = d3plusConfigBuilder.stackedarea;
7330
+ var buildTreemap = d3plusConfigBuilder.treemap;
7331
+ d3plusConfigBuilder.common = (chart, params) => {
7332
+ const config = buildCommon(chart, params);
7333
+ return config;
7334
+ };
7915
7335
  function useD3plusConfig(chart, params) {
7916
7336
  const { fullMode, getMeasureConfig, showConfidenceInt, t } = params;
7917
7337
  const { getFormatter } = useFormatter();
7918
7338
  return useMemo(() => {
7919
- if (!chart) return [null, { data: "", locale: "" }];
7920
- const params2 = { fullMode, getFormatter, getMeasureConfig, showConfidenceInt, t };
7921
- const { locale } = chart.datagroup;
7339
+ if (!chart) return [null, { data: [], locale: "" }];
7340
+ const params2 = {
7341
+ fullMode,
7342
+ getFormatter,
7343
+ getMeasureConfig,
7344
+ showConfidenceInt,
7345
+ t: (template, data) => t(`vizbuilder.${template}`, data)
7346
+ };
7922
7347
  if (chart.type === "barchart") {
7923
7348
  return [BarChart, buildBarchartConfig(chart, params2)];
7924
7349
  }
7925
7350
  if (chart.type === "choropleth") {
7926
- return [Geomap, buildChoroplethConfig(chart, params2)];
7351
+ const config = buildChoroplethConfig(chart, params2);
7352
+ if (chart.extraConfig.d3plus) assign_default(config, chart.extraConfig.d3plus);
7353
+ return [Geomap, config];
7927
7354
  }
7928
7355
  if (chart.type === "donut") {
7929
7356
  return [Donut, buildDonutConfig(chart, params2)];
@@ -7937,316 +7364,33 @@ function useD3plusConfig(chart, params) {
7937
7364
  if (chart.type === "treemap") {
7938
7365
  return [Treemap, buildTreemapConfig(chart, params2)];
7939
7366
  }
7940
- return [null, { data: "", locale }];
7367
+ return [null, { data: [], locale: "" }];
7941
7368
  }, [chart, fullMode, getFormatter, getMeasureConfig, showConfidenceInt, t]);
7942
7369
  }
7943
7370
  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
- }
7371
+ const config = buildBarchart(chart, params);
8005
7372
  return config;
8006
7373
  }
8007
7374
  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);
7375
+ const config = buildChoropleth(chart, params);
8055
7376
  return config;
8056
7377
  }
8057
7378
  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
- };
7379
+ const config = buildDonut(chart, params);
8085
7380
  return config;
8086
7381
  }
8087
7382
  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
- };
7383
+ const config = buildLineplot(chart, params);
8130
7384
  return config;
8131
7385
  }
8132
7386
  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
- };
7387
+ const config = buildStackedarea(chart, params);
8153
7388
  return config;
8154
7389
  }
8155
7390
  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
- };
7391
+ const config = buildTreemap(chart, params);
8179
7392
  return config;
8180
7393
  }
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
7394
 
8251
7395
  // src/vizbuilder/components/ErrorBoundary.tsx
8252
7396
  init_esm_shims();
@@ -8540,6 +7684,52 @@ function Vizbuilder(props) {
8540
7684
  ));
8541
7685
  }
8542
7686
 
7687
+ // src/vizbuilder/hooks/useVizbuilderData.ts
7688
+ init_esm_shims();
7689
+ function useFinalUniqueKeys() {
7690
+ const drilldowns = useSelector$1(selectDrilldownItems);
7691
+ const measures = useSelector$1(selectMeasureItems);
7692
+ const finalUniqueKeys = useMemo(
7693
+ () => [
7694
+ ...measures.map((m) => m.active ? m.name : null),
7695
+ ...drilldowns.map((d) => d.active ? d.level : null)
7696
+ ].filter((a) => a !== null),
7697
+ [measures, drilldowns]
7698
+ );
7699
+ return finalUniqueKeys;
7700
+ }
7701
+ function useVizbuilderData() {
7702
+ const columns = useFinalUniqueKeys();
7703
+ const { code: locale } = useSelector$1(selectLocale);
7704
+ const permaKey = useKey();
7705
+ const loadingState = useSelector$1(selectLoadingState);
7706
+ const actions2 = useActions();
7707
+ const enabled = Boolean(columns.length);
7708
+ const initialKey = permaKey ? [permaKey] : permaKey;
7709
+ const [filterKeydebouced, setDebouncedTerm] = useState(initialKey);
7710
+ useEffect(() => {
7711
+ if (!enabled && permaKey) return;
7712
+ const handler = debounce(
7713
+ () => {
7714
+ const term = [permaKey];
7715
+ setDebouncedTerm(term);
7716
+ },
7717
+ loadingState.loading ? 0 : 800
7718
+ );
7719
+ handler();
7720
+ return () => handler.cancel();
7721
+ }, [enabled, locale, loadingState.loading, permaKey]);
7722
+ const query = useQuery({
7723
+ queryKey: ["table", filterKeydebouced],
7724
+ queryFn: () => actions2.willFetchQuery({ withoutPagination: true }).then((result) => {
7725
+ return result;
7726
+ }),
7727
+ staleTime: 3e5,
7728
+ enabled: enabled && !!filterKeydebouced
7729
+ });
7730
+ return query;
7731
+ }
7732
+
8543
7733
  // src/vizbuilder/components/VizbuilderView.tsx
8544
7734
  var CHART_LIMITS = {
8545
7735
  BARCHART_MAX_BARS: 20,
@@ -8555,17 +7745,19 @@ var CHART_LIMITS = {
8555
7745
  var DOWNLOAD_FORMATS = ["SVG", "PNG"];
8556
7746
  function VizbuilderView(props) {
8557
7747
  const { cube, params, result } = props;
7748
+ const query = useVizbuilderData();
8558
7749
  const dataset = useMemo(() => {
7750
+ var _a;
8559
7751
  const columns = Object.keys(result.types);
8560
7752
  return {
8561
7753
  columns: Object.fromEntries(
8562
7754
  columns.map((columnName) => [columnName, buildColumn(cube, columnName, columns)])
8563
7755
  ),
8564
- data: result.data,
7756
+ data: ((_a = query.data) == null ? void 0 : _a.data) || [],
8565
7757
  locale: params.locale || "en"
8566
7758
  };
8567
7759
  }, [cube, result, params.locale]);
8568
- return /* @__PURE__ */ React19__default.createElement(
7760
+ return !query.isLoading && /* @__PURE__ */ React19__default.createElement(
8569
7761
  Vizbuilder,
8570
7762
  {
8571
7763
  datasets: dataset,
@@ -8578,17 +7770,6 @@ function VizbuilderView(props) {
8578
7770
 
8579
7771
  file-saver/FileSaver.js:
8580
7772
  (*! @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
7773
  */
8593
7774
 
8594
7775
  export { DebugView, ExplorerComponent as Explorer, PivotView, SettingsConsumer, TableView, ToolbarButton, TourStep, TranslationConsumer, VizbuilderView, reducer as explorerReducer, thunkExtraArg as explorerThunkExtraArg, defaultTranslation as translationDict, useSettings, useTranslation };