@nocobase/plugin-data-visualization 0.10.1-alpha.1 → 0.11.1-alpha.1

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 (41) hide show
  1. package/lib/client/Settings.js +13 -13
  2. package/lib/client/block/ChartBlock.js +16 -15
  3. package/lib/client/block/ChartBlockInitializer.js +4 -4
  4. package/lib/client/block/ChartConfigure.d.ts +6 -7
  5. package/lib/client/block/ChartConfigure.js +140 -125
  6. package/lib/client/block/schemas/configure.js +7 -7
  7. package/lib/client/block/transformers.js +18 -19
  8. package/lib/client/hooks.d.ts +1 -1
  9. package/lib/client/index.d.ts +5 -3
  10. package/lib/client/index.js +12 -2
  11. package/lib/client/locale/index.d.ts +2 -2
  12. package/lib/client/locale/index.js +3 -5
  13. package/lib/client/locale/zh-CN.d.ts +1 -0
  14. package/lib/client/locale/zh-CN.js +2 -1
  15. package/lib/client/renderer/ChartLibrary.d.ts +5 -4
  16. package/lib/client/renderer/ChartLibrary.js +9 -3
  17. package/lib/client/renderer/ChartRenderer.d.ts +1 -4
  18. package/lib/client/renderer/ChartRenderer.js +28 -103
  19. package/lib/client/renderer/ChartRendererProvider.d.ts +16 -6
  20. package/lib/client/renderer/ChartRendererProvider.js +75 -8
  21. package/lib/client/renderer/library/AntdLibrary.js +1 -1
  22. package/lib/client/renderer/library/G2PlotLibrary.js +24 -25
  23. package/lib/server/actions/query.d.ts +4 -4
  24. package/lib/server/actions/query.js +6 -1
  25. package/package.json +28 -16
  26. package/src/client/Settings.tsx +2 -2
  27. package/src/client/__tests__/hooks.test.ts +3 -2
  28. package/src/client/block/ChartBlock.tsx +5 -3
  29. package/src/client/block/ChartBlockInitializer.tsx +2 -3
  30. package/src/client/block/ChartConfigure.tsx +110 -89
  31. package/src/client/block/schemas/configure.ts +7 -7
  32. package/src/client/block/transformers.ts +1 -1
  33. package/src/client/index.tsx +9 -3
  34. package/src/client/locale/index.ts +2 -3
  35. package/src/client/locale/zh-CN.ts +1 -0
  36. package/src/client/renderer/ChartLibrary.tsx +6 -1
  37. package/src/client/renderer/ChartRenderer.tsx +22 -90
  38. package/src/client/renderer/ChartRendererProvider.tsx +69 -4
  39. package/src/client/renderer/library/G2PlotLibrary.tsx +24 -25
  40. package/src/server/__tests__/api.test.ts +47 -50
  41. package/src/server/actions/query.ts +6 -1
@@ -168,7 +168,7 @@ const querySchema = {
168
168
  'x-component-props': {
169
169
  options: '{{ collectionOptions }}',
170
170
  onChange: '{{ onCollectionChange }}',
171
- placeholder: (0, _locale.lang)('Collection')
171
+ placeholder: '{{t("Collection")}}'
172
172
  }
173
173
  }
174
174
  }
@@ -219,19 +219,19 @@ const querySchema = {
219
219
  placeholder: '{{t("Aggregation")}}'
220
220
  },
221
221
  enum: [{
222
- label: (0, _locale.lang)('Sum'),
222
+ label: '{{t("Sum")}}',
223
223
  value: 'sum'
224
224
  }, {
225
- label: (0, _locale.lang)('Count'),
225
+ label: '{{t("Count")}}',
226
226
  value: 'count'
227
227
  }, {
228
- label: (0, _locale.lang)('Avg'),
228
+ label: '{{t("Avg")}}',
229
229
  value: 'avg'
230
230
  }, {
231
- label: (0, _locale.lang)('Max'),
231
+ label: '{{t("Max")}}',
232
232
  value: 'max'
233
233
  }, {
234
- label: (0, _locale.lang)('Min'),
234
+ label: '{{t("Min")}}',
235
235
  value: 'min'
236
236
  }]
237
237
  },
@@ -309,7 +309,7 @@ const querySchema = {
309
309
  'x-decorator': 'FormItem',
310
310
  'x-decorator-props': {
311
311
  style: {
312
- overflow: 'scroll'
312
+ overflow: 'auto'
313
313
  }
314
314
  },
315
315
  'x-component': 'Filter',
@@ -4,35 +4,34 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- function _dayjs() {
8
- const data = _interopRequireDefault(require("dayjs"));
9
- _dayjs = function _dayjs() {
7
+ function _client() {
8
+ const data = require("@nocobase/utils/client");
9
+ _client = function _client() {
10
10
  return data;
11
11
  };
12
12
  return data;
13
13
  }
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
14
  const transformers = {
16
15
  datetime: {
17
- YYYY: val => (0, _dayjs().default)(val).format('YYYY'),
18
- MM: val => (0, _dayjs().default)(val).format('MM'),
19
- DD: val => (0, _dayjs().default)(val).format('DD'),
20
- 'YYYY-MM': val => (0, _dayjs().default)(val).format('YYYY-MM'),
21
- 'YYYY-MM-DD': val => (0, _dayjs().default)(val).format('YYYY-MM-DD'),
22
- 'YYYY-MM-DD hh:mm': val => (0, _dayjs().default)(val).format('YYYY-MM-DD hh:mm'),
23
- 'YYYY-MM-DD hh:mm:ss': val => (0, _dayjs().default)(val).format('YYYY-MM-DD hh:mm:ss')
16
+ YYYY: val => (0, _client().dayjs)(val).format('YYYY'),
17
+ MM: val => (0, _client().dayjs)(val).format('MM'),
18
+ DD: val => (0, _client().dayjs)(val).format('DD'),
19
+ 'YYYY-MM': val => (0, _client().dayjs)(val).format('YYYY-MM'),
20
+ 'YYYY-MM-DD': val => (0, _client().dayjs)(val).format('YYYY-MM-DD'),
21
+ 'YYYY-MM-DD hh:mm': val => (0, _client().dayjs)(val).format('YYYY-MM-DD hh:mm'),
22
+ 'YYYY-MM-DD hh:mm:ss': val => (0, _client().dayjs)(val).format('YYYY-MM-DD hh:mm:ss')
24
23
  },
25
24
  date: {
26
- YYYY: val => (0, _dayjs().default)(val).format('YYYY'),
27
- MM: val => (0, _dayjs().default)(val).format('MM'),
28
- DD: val => (0, _dayjs().default)(val).format('DD'),
29
- 'YYYY-MM': val => (0, _dayjs().default)(val).format('YYYY-MM'),
30
- 'YYYY-MM-DD': val => (0, _dayjs().default)(val).format('YYYY-MM-DD')
25
+ YYYY: val => (0, _client().dayjs)(val).format('YYYY'),
26
+ MM: val => (0, _client().dayjs)(val).format('MM'),
27
+ DD: val => (0, _client().dayjs)(val).format('DD'),
28
+ 'YYYY-MM': val => (0, _client().dayjs)(val).format('YYYY-MM'),
29
+ 'YYYY-MM-DD': val => (0, _client().dayjs)(val).format('YYYY-MM-DD')
31
30
  },
32
31
  time: {
33
- 'hh:mm:ss': val => (0, _dayjs().default)(val).format('hh:mm:ss'),
34
- 'hh:mm': val => (0, _dayjs().default)(val).format('hh:mm'),
35
- hh: val => (0, _dayjs().default)(val).format('hh')
32
+ 'hh:mm:ss': val => (0, _client().dayjs)(val).format('hh:mm:ss'),
33
+ 'hh:mm': val => (0, _client().dayjs)(val).format('hh:mm'),
34
+ hh: val => (0, _client().dayjs)(val).format('hh')
36
35
  },
37
36
  number: {
38
37
  Percent: val => new Intl.NumberFormat('en-US', {
@@ -1,7 +1,7 @@
1
1
  import { ArrayField } from '@formily/core';
2
2
  import { ISchema } from '@formily/react';
3
3
  import { ChartRendererProps } from './renderer';
4
- export declare type FieldOption = {
4
+ export type FieldOption = {
5
5
  value: string;
6
6
  label: string;
7
7
  key: string;
@@ -1,5 +1,7 @@
1
- import React from 'react';
1
+ import { Plugin } from '@nocobase/client';
2
2
  import { ChartLibraryProvider } from './renderer/ChartLibrary';
3
- declare const Chart: React.FC;
4
- export default Chart;
3
+ declare class DataVisualizationPlugin extends Plugin {
4
+ load(): Promise<void>;
5
+ }
6
+ export default DataVisualizationPlugin;
5
7
  export { ChartLibraryProvider };
@@ -30,6 +30,8 @@ var _renderer = require("./renderer");
30
30
  var _ChartLibrary = require("./renderer/ChartLibrary");
31
31
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
32
32
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
34
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
33
35
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
34
36
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
35
37
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -45,7 +47,7 @@ const Chart = props => {
45
47
  children.push({
46
48
  key: 'chart-v2',
47
49
  type: 'item',
48
- title: t('Chart'),
50
+ title: t('Charts'),
49
51
  component: 'ChartV2BlockInitializer'
50
52
  });
51
53
  }
@@ -66,5 +68,13 @@ const Chart = props => {
66
68
  charts: _renderer.InternalLibrary
67
69
  }, props.children)));
68
70
  };
69
- var _default = Chart;
71
+ class DataVisualizationPlugin extends _client().Plugin {
72
+ load() {
73
+ var _this = this;
74
+ return _asyncToGenerator(function* () {
75
+ _this.app.addProvider(Chart);
76
+ })();
77
+ }
78
+ }
79
+ var _default = DataVisualizationPlugin;
70
80
  exports.default = _default;
@@ -1,3 +1,3 @@
1
- export declare const NAMESPACE = "charts-v2";
1
+ export declare const NAMESPACE = "data-visualization";
2
2
  export declare function lang(key: string): string;
3
- export declare function useChartsTranslation(): import("react-i18next").UseTranslationResponse<"charts-v2", undefined>;
3
+ export declare function useChartsTranslation(): import("react-i18next").UseTranslationResponse<"data-visualization", undefined>;
@@ -20,15 +20,13 @@ function _reactI18next() {
20
20
  };
21
21
  return data;
22
22
  }
23
- var _zhCN = _interopRequireDefault(require("./zh-CN"));
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
- const NAMESPACE = 'charts-v2';
26
- exports.NAMESPACE = NAMESPACE;
27
- _client().i18n.addResources('zh-CN', NAMESPACE, _zhCN.default);
23
+ const NAMESPACE = 'data-visualization';
24
+ // i18n.addResources('zh-CN', NAMESPACE, zhCN);
28
25
  // i18n.addResources('en-US', NAMESPACE, enUS);
29
26
  // i18n.addResources('ja-JP', NAMESPACE, jaJP);
30
27
  // i18n.addResources('ru-RU', NAMESPACE, ruRU);
31
28
  // i18n.addResources('tr-TR', NAMESPACE, trTR);
29
+ exports.NAMESPACE = NAMESPACE;
32
30
  function lang(key) {
33
31
  return _client().i18n.t(key, {
34
32
  ns: NAMESPACE
@@ -66,5 +66,6 @@ declare const _default: {
66
66
  Min: string;
67
67
  Max: string;
68
68
  'Please select a chart type.': string;
69
+ Collection: string;
69
70
  };
70
71
  export default _default;
@@ -71,6 +71,7 @@ var _default = {
71
71
  Count: '计数',
72
72
  Min: '最小值',
73
73
  Max: '最大值',
74
- 'Please select a chart type.': '请选择图表类型'
74
+ 'Please select a chart type.': '请选择图表类型',
75
+ Collection: '数据表'
75
76
  };
76
77
  exports.default = _default;
@@ -6,7 +6,7 @@ import { QueryProps } from './ChartRendererProvider';
6
6
  * @params {usePropsFunc} useProps - Accept the information that the chart component needs to render,
7
7
  * process it and return the props of the chart component.
8
8
  */
9
- export declare type usePropsFunc = (props: {
9
+ export type usePropsFunc = (props: {
10
10
  data: any[];
11
11
  fieldProps: {
12
12
  [field: string]: FieldOption & {
@@ -16,7 +16,7 @@ export declare type usePropsFunc = (props: {
16
16
  general: any;
17
17
  advanced: any;
18
18
  }) => any;
19
- export declare type ChartProps = {
19
+ export type ChartProps = {
20
20
  name: string;
21
21
  component: React.FC<any>;
22
22
  schema?: ISchema;
@@ -33,10 +33,10 @@ export declare type ChartProps = {
33
33
  link: string;
34
34
  };
35
35
  };
36
- export declare type Charts = {
36
+ export type Charts = {
37
37
  [type: string]: ChartProps;
38
38
  };
39
- export declare type ChartLibraries = {
39
+ export type ChartLibraries = {
40
40
  [library: string]: {
41
41
  enabled: boolean;
42
42
  charts: Charts;
@@ -52,6 +52,7 @@ export declare const useChartTypes: () => {
52
52
  value: string;
53
53
  })[];
54
54
  }[];
55
+ export declare const useDefaultChartType: () => string;
55
56
  export declare const useToggleChartLibrary: () => {
56
57
  toggle: (library: string) => void;
57
58
  };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useToggleChartLibrary = exports.useCharts = exports.useChartTypes = exports.infer = exports.commonInit = exports.ChartLibraryProvider = exports.ChartLibraryContext = void 0;
6
+ exports.useToggleChartLibrary = exports.useDefaultChartType = exports.useCharts = exports.useChartTypes = exports.infer = exports.commonInit = exports.ChartLibraryProvider = exports.ChartLibraryContext = void 0;
7
7
  function _react() {
8
8
  const data = _interopRequireWildcard(require("react"));
9
9
  _react = function _react() {
@@ -32,7 +32,7 @@ const useChartTypes = () => {
32
32
  return Object.entries(library).filter(([_, l]) => l.enabled).reduce((charts, [name, l]) => {
33
33
  const children = Object.entries(l.charts).map(([type, chart]) => _objectSpread(_objectSpread({}, chart), {}, {
34
34
  key: type,
35
- label: chart.name,
35
+ label: (0, _locale.lang)(chart.name),
36
36
  value: type
37
37
  }));
38
38
  return [...charts, {
@@ -42,6 +42,12 @@ const useChartTypes = () => {
42
42
  }, []);
43
43
  };
44
44
  exports.useChartTypes = useChartTypes;
45
+ const useDefaultChartType = () => {
46
+ var _chartTypes$, _chartTypes$$children, _chartTypes$$children2;
47
+ const chartTypes = useChartTypes();
48
+ return (_chartTypes$ = chartTypes[0]) === null || _chartTypes$ === void 0 ? void 0 : (_chartTypes$$children = _chartTypes$.children) === null || _chartTypes$$children === void 0 ? void 0 : (_chartTypes$$children2 = _chartTypes$$children[0]) === null || _chartTypes$$children2 === void 0 ? void 0 : _chartTypes$$children2.value;
49
+ };
50
+ exports.useDefaultChartType = useDefaultChartType;
45
51
  const useToggleChartLibrary = () => {
46
52
  const ctx = (0, _react().useContext)(ChartLibraryContext);
47
53
  return {
@@ -83,7 +89,7 @@ const infer = (fields, {
83
89
  alias = _parseField.alias;
84
90
  return fields.find(f => f.value === alias);
85
91
  };
86
- if (measures === null || measures === void 0 ? void 0 : measures.length) {
92
+ if (measures !== null && measures !== void 0 && measures.length) {
87
93
  yField = getField(fields, measures[0]);
88
94
  yFields = measures.map(m => getField(fields, m));
89
95
  }
@@ -1,7 +1,4 @@
1
1
  import React from 'react';
2
- export declare const ChartRenderer: React.FC<{
3
- configuring?: boolean;
4
- runQuery?: any;
5
- }> & {
2
+ export declare const ChartRenderer: React.FC & {
6
3
  Designer: React.FC;
7
4
  };
@@ -47,115 +47,30 @@ var _ChartLibrary = require("./ChartLibrary");
47
47
  var _ChartRendererProvider = require("./ChartRendererProvider");
48
48
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
49
49
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
50
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
51
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
52
50
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
53
51
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
54
52
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
55
53
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
56
54
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
57
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
58
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
59
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
60
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
61
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
62
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
63
55
  const Paragraph = _antd().Typography.Paragraph,
64
56
  Text = _antd().Typography.Text;
65
57
  const ChartRenderer = props => {
66
58
  var _chart$useProps;
67
59
  const _useChartsTranslation = (0, _locale.useChartsTranslation)(),
68
60
  t = _useChartsTranslation.t;
69
- const _useContext = (0, _react2().useContext)(_block.ChartConfigContext),
70
- setQueryData = _useContext.setData,
71
- current = _useContext.current;
72
- const _useContext2 = (0, _react2().useContext)(_ChartRendererProvider.ChartRendererContext),
73
- query = _useContext2.query,
74
- config = _useContext2.config,
75
- collection = _useContext2.collection,
76
- transform = _useContext2.transform;
77
- const configuring = props.configuring,
78
- runQuery = props.runQuery;
61
+ const ctx = (0, _react2().useContext)(_ChartRendererProvider.ChartRendererContext);
62
+ const config = ctx.config,
63
+ transform = ctx.transform,
64
+ collection = ctx.collection,
65
+ service = ctx.service,
66
+ _data = ctx.data;
67
+ const fields = (0, _hooks.useFieldsWithAssociation)(collection);
68
+ const data = (0, _utils.processData)(fields, (service === null || service === void 0 ? void 0 : service.data) || _data || [], {
69
+ t
70
+ });
79
71
  const general = (config === null || config === void 0 ? void 0 : config.general) || {};
80
72
  const advanced = (config === null || config === void 0 ? void 0 : config.advanced) || {};
81
- const schema = (0, _react().useFieldSchema)();
82
- const currentSchema = schema || (current === null || current === void 0 ? void 0 : current.schema);
83
- const fields = (0, _hooks.useFieldsWithAssociation)(collection);
84
73
  const api = (0, _client().useAPIClient)();
85
- const _useState = (0, _react2().useState)([]),
86
- _useState2 = _slicedToArray(_useState, 2),
87
- data = _useState2[0],
88
- setData = _useState2[1];
89
- const _useRequest = (0, _client().useRequest)(query => api.request({
90
- url: 'charts:query',
91
- method: 'POST',
92
- data: _objectSpread(_objectSpread({
93
- uid: currentSchema === null || currentSchema === void 0 ? void 0 : currentSchema['x-uid'],
94
- collection
95
- }, query), {}, {
96
- dimensions: ((query === null || query === void 0 ? void 0 : query.dimensions) || []).map(item => {
97
- const dimension = _objectSpread({}, item);
98
- if (item.format && !item.alias) {
99
- const _parseField = (0, _utils.parseField)(item.field),
100
- alias = _parseField.alias;
101
- dimension.alias = alias;
102
- }
103
- return dimension;
104
- }),
105
- measures: ((query === null || query === void 0 ? void 0 : query.measures) || []).map(item => {
106
- const measure = _objectSpread({}, item);
107
- if (item.aggregation && !item.alias) {
108
- const _parseField2 = (0, _utils.parseField)(item.field),
109
- alias = _parseField2.alias;
110
- measure.alias = alias;
111
- }
112
- return measure;
113
- })
114
- })
115
- }).then(res => {
116
- var _res$data;
117
- const data = (res === null || res === void 0 ? void 0 : (_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.data) || [];
118
- return (0, _utils.processData)(fields, data, {
119
- t
120
- });
121
- }), {
122
- manual: true,
123
- onSuccess: data => {
124
- setData(data);
125
- },
126
- onFinally(params, data, error) {
127
- if (!configuring) {
128
- return;
129
- }
130
- if (error) {
131
- var _error$response, _error$response$data, _error$response$data$, _error$response$data$2;
132
- const message = error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : (_error$response$data$ = _error$response$data.errors) === null || _error$response$data$ === void 0 ? void 0 : (_error$response$data$2 = _error$response$data$.map) === null || _error$response$data$2 === void 0 ? void 0 : _error$response$data$2.call(_error$response$data$, error => error.message).join('\n');
133
- setQueryData(message || error.message);
134
- return;
135
- }
136
- setQueryData(data);
137
- }
138
- }),
139
- runAsync = _useRequest.runAsync;
140
- (0, _react2().useEffect)(() => {
141
- setData([]);
142
- const run = /*#__PURE__*/function () {
143
- var _ref = _asyncToGenerator(function* (query) {
144
- var _query$measures;
145
- if (query === null || query === void 0 ? void 0 : (_query$measures = query.measures) === null || _query$measures === void 0 ? void 0 : _query$measures.length // || (query?.sql?.fields && query?.sql?.clauses)
146
- ) {
147
- yield runAsync(query);
148
- }
149
- });
150
- return function run(_x2) {
151
- return _ref.apply(this, arguments);
152
- };
153
- }();
154
- if (runQuery) {
155
- runQuery.current = run;
156
- }
157
- run(query);
158
- }, [query, runAsync, runQuery]);
159
74
  const charts = (0, _ChartLibrary.useCharts)();
160
75
  const chart = charts[config === null || config === void 0 ? void 0 : config.chartType];
161
76
  const Component = chart === null || chart === void 0 ? void 0 : chart.component;
@@ -187,18 +102,26 @@ const ChartRenderer = props => {
187
102
  image: _antd().Empty.PRESENTED_IMAGE_SIMPLE,
188
103
  description: t('Please configure chart')
189
104
  });
190
- return data && data.length ? _react2().default.createElement(C, null) : _react2().default.createElement(_antd().Empty, {
191
- image: _antd().Empty.PRESENTED_IMAGE_SIMPLE,
192
- description: t('Please configure and run query')
193
- });
105
+ if (service.loading) {
106
+ return _react2().default.createElement(_antd().Spin, null);
107
+ }
108
+ if (!(data && data.length)) {
109
+ return _react2().default.createElement(_antd().Empty, {
110
+ image: _antd().Empty.PRESENTED_IMAGE_SIMPLE,
111
+ description: t('Please configure and run query')
112
+ });
113
+ }
114
+ return _react2().default.createElement(C, null);
194
115
  };
195
116
  exports.ChartRenderer = ChartRenderer;
196
117
  ChartRenderer.Designer = function Designer() {
197
118
  const _useChartsTranslation2 = (0, _locale.useChartsTranslation)(),
198
119
  t = _useChartsTranslation2.t;
199
- const _useContext3 = (0, _react2().useContext)(_block.ChartConfigContext),
200
- setVisible = _useContext3.setVisible,
201
- setCurrent = _useContext3.setCurrent;
120
+ const _useContext = (0, _react2().useContext)(_block.ChartConfigContext),
121
+ setVisible = _useContext.setVisible,
122
+ setCurrent = _useContext.setCurrent;
123
+ const _useContext2 = (0, _react2().useContext)(_ChartRendererProvider.ChartRendererContext),
124
+ service = _useContext2.service;
202
125
  const field = (0, _react().useField)();
203
126
  const schema = (0, _react().useFieldSchema)();
204
127
  const _useDesignable = (0, _client().useDesignable)(),
@@ -215,7 +138,9 @@ ChartRenderer.Designer = function Designer() {
215
138
  setCurrent({
216
139
  schema,
217
140
  field,
218
- collection: name
141
+ collection: name,
142
+ service,
143
+ data: service === null || service === void 0 ? void 0 : service.data
219
144
  });
220
145
  setVisible(true);
221
146
  }
@@ -1,20 +1,20 @@
1
1
  import React from 'react';
2
- export declare type MeasureProps = {
2
+ export type MeasureProps = {
3
3
  field: string | string[];
4
4
  aggregation?: string;
5
5
  alias?: string;
6
6
  };
7
- export declare type DimensionProps = {
7
+ export type DimensionProps = {
8
8
  field: string | string[];
9
9
  alias?: string;
10
10
  format?: string;
11
11
  };
12
- export declare type TransformProps = {
12
+ export type TransformProps = {
13
13
  field: string;
14
14
  type: string;
15
15
  format: string;
16
16
  };
17
- export declare type QueryProps = Partial<{
17
+ export type QueryProps = Partial<{
18
18
  measures: MeasureProps[];
19
19
  dimensions: DimensionProps[];
20
20
  orders: {
@@ -28,7 +28,7 @@ export declare type QueryProps = Partial<{
28
28
  clauses?: string;
29
29
  };
30
30
  }>;
31
- export declare type ChartRendererProps = {
31
+ export type ChartRendererProps = {
32
32
  collection: string;
33
33
  query?: QueryProps;
34
34
  config?: {
@@ -39,5 +39,15 @@ export declare type ChartRendererProps = {
39
39
  transform?: TransformProps[];
40
40
  mode?: 'builder' | 'sql';
41
41
  };
42
- export declare const ChartRendererContext: React.Context<ChartRendererProps>;
42
+ export declare const ChartRendererContext: React.Context<{
43
+ collection: string;
44
+ config?: {
45
+ chartType: string;
46
+ general: any;
47
+ advanced: any;
48
+ };
49
+ transform?: TransformProps[];
50
+ service: any;
51
+ data?: any[];
52
+ }>;
43
53
  export declare const ChartRendererProvider: React.FC<ChartRendererProps>;
@@ -4,6 +4,20 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ChartRendererProvider = exports.ChartRendererContext = void 0;
7
+ function _css() {
8
+ const data = require("@emotion/css");
9
+ _css = function _css() {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _react() {
15
+ const data = require("@formily/react");
16
+ _react = function _react() {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
7
21
  function _client() {
8
22
  const data = require("@nocobase/client");
9
23
  _client = function _client() {
@@ -11,13 +25,14 @@ function _client() {
11
25
  };
12
26
  return data;
13
27
  }
14
- function _react() {
28
+ function _react2() {
15
29
  const data = _interopRequireWildcard(require("react"));
16
- _react = function _react() {
30
+ _react2 = function _react2() {
17
31
  return data;
18
32
  };
19
33
  return data;
20
34
  }
35
+ var _utils = require("../utils");
21
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
22
37
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
38
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -25,14 +40,66 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
25
40
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
26
41
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
27
42
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
28
- const ChartRendererContext = (0, _react().createContext)({});
43
+ const ChartRendererContext = (0, _react2().createContext)({});
29
44
  exports.ChartRendererContext = ChartRendererContext;
30
45
  const ChartRendererProvider = props => {
31
- const collection = props.collection;
32
- return _react().default.createElement(_client().MaybeCollectionProvider, {
46
+ const query = props.query,
47
+ config = props.config,
48
+ collection = props.collection,
49
+ transform = props.transform;
50
+ const schema = (0, _react().useFieldSchema)();
51
+ const api = (0, _client().useAPIClient)();
52
+ const service = (0, _client().useRequest)((collection, query) => new Promise((resolve, reject) => {
53
+ var _query$measures;
54
+ if (!(collection && query !== null && query !== void 0 && (_query$measures = query.measures) !== null && _query$measures !== void 0 && _query$measures.length)) return resolve(undefined);
55
+ api.request({
56
+ url: 'charts:query',
57
+ method: 'POST',
58
+ data: _objectSpread(_objectSpread({
59
+ uid: schema === null || schema === void 0 ? void 0 : schema['x-uid'],
60
+ collection
61
+ }, query), {}, {
62
+ dimensions: ((query === null || query === void 0 ? void 0 : query.dimensions) || []).map(item => {
63
+ const dimension = _objectSpread({}, item);
64
+ if (item.format && !item.alias) {
65
+ const _parseField = (0, _utils.parseField)(item.field),
66
+ alias = _parseField.alias;
67
+ dimension.alias = alias;
68
+ }
69
+ return dimension;
70
+ }),
71
+ measures: ((query === null || query === void 0 ? void 0 : query.measures) || []).map(item => {
72
+ const measure = _objectSpread({}, item);
73
+ if (item.aggregation && !item.alias) {
74
+ const _parseField2 = (0, _utils.parseField)(item.field),
75
+ alias = _parseField2.alias;
76
+ measure.alias = alias;
77
+ }
78
+ return measure;
79
+ })
80
+ })
81
+ }).then(res => {
82
+ var _res$data;
83
+ resolve(res === null || res === void 0 ? void 0 : (_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.data);
84
+ }).catch(reject);
85
+ }), {
86
+ defaultParams: [collection, query]
87
+ });
88
+ return _react2().default.createElement(_client().MaybeCollectionProvider, {
33
89
  collection: collection
34
- }, _react().default.createElement(ChartRendererContext.Provider, {
35
- value: _objectSpread({}, props)
36
- }, props.children));
90
+ }, _react2().default.createElement("div", {
91
+ className: (0, _css().css)`
92
+ .ant-card {
93
+ box-shadow: none;
94
+ }
95
+ `
96
+ }, _react2().default.createElement(ChartRendererContext.Provider, {
97
+ value: {
98
+ collection,
99
+ config,
100
+ transform,
101
+ service
102
+ }
103
+ }, props.children)));
37
104
  };
38
105
  exports.ChartRendererProvider = ChartRendererProvider;
@@ -97,7 +97,7 @@ const AntdLibrary = {
97
97
  const dataSource = data.map(item => {
98
98
  Object.keys(item).map(key => {
99
99
  const props = fieldProps[key];
100
- if (props === null || props === void 0 ? void 0 : props.transformer) {
100
+ if (props !== null && props !== void 0 && props.transformer) {
101
101
  item[key] = props.transformer(item[key]);
102
102
  }
103
103
  });