@nocobase/plugin-data-visualization 0.10.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 (108) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +88 -0
  3. package/client.d.ts +3 -0
  4. package/client.js +65 -0
  5. package/lib/client/Settings.d.ts +2 -0
  6. package/lib/client/Settings.js +81 -0
  7. package/lib/client/block/ChartBlock.d.ts +2 -0
  8. package/lib/client/block/ChartBlock.js +73 -0
  9. package/lib/client/block/ChartBlockDesigner.d.ts +2 -0
  10. package/lib/client/block/ChartBlockDesigner.js +35 -0
  11. package/lib/client/block/ChartBlockInitializer.d.ts +6 -0
  12. package/lib/client/block/ChartBlockInitializer.js +114 -0
  13. package/lib/client/block/ChartConfigure.d.ts +33 -0
  14. package/lib/client/block/ChartConfigure.js +501 -0
  15. package/lib/client/block/formatters.d.ts +15 -0
  16. package/lib/client/block/formatters.js +58 -0
  17. package/lib/client/block/index.d.ts +4 -0
  18. package/lib/client/block/index.js +49 -0
  19. package/lib/client/block/schemas/configure.d.ts +4 -0
  20. package/lib/client/block/schemas/configure.js +492 -0
  21. package/lib/client/block/transformers.d.ts +6 -0
  22. package/lib/client/block/transformers.js +69 -0
  23. package/lib/client/hooks.d.ts +312 -0
  24. package/lib/client/hooks.js +275 -0
  25. package/lib/client/index.d.ts +5 -0
  26. package/lib/client/index.js +70 -0
  27. package/lib/client/locale/en-US.d.ts +23 -0
  28. package/lib/client/locale/en-US.js +29 -0
  29. package/lib/client/locale/index.d.ts +3 -0
  30. package/lib/client/locale/index.js +39 -0
  31. package/lib/client/locale/ja-JP.d.ts +2 -0
  32. package/lib/client/locale/ja-JP.js +8 -0
  33. package/lib/client/locale/pt-BR.d.ts +23 -0
  34. package/lib/client/locale/pt-BR.js +29 -0
  35. package/lib/client/locale/ru-RU.d.ts +2 -0
  36. package/lib/client/locale/ru-RU.js +8 -0
  37. package/lib/client/locale/tr-TR.d.ts +2 -0
  38. package/lib/client/locale/tr-TR.js +8 -0
  39. package/lib/client/locale/zh-CN.d.ts +70 -0
  40. package/lib/client/locale/zh-CN.js +76 -0
  41. package/lib/client/renderer/ChartLibrary.d.ts +71 -0
  42. package/lib/client/renderer/ChartLibrary.js +140 -0
  43. package/lib/client/renderer/ChartRenderer.d.ts +7 -0
  44. package/lib/client/renderer/ChartRenderer.js +258 -0
  45. package/lib/client/renderer/ChartRendererProvider.d.ts +43 -0
  46. package/lib/client/renderer/ChartRendererProvider.js +38 -0
  47. package/lib/client/renderer/index.d.ts +4 -0
  48. package/lib/client/renderer/index.js +49 -0
  49. package/lib/client/renderer/library/AntdLibrary.d.ts +2 -0
  50. package/lib/client/renderer/library/AntdLibrary.js +123 -0
  51. package/lib/client/renderer/library/G2PlotLibrary.d.ts +2 -0
  52. package/lib/client/renderer/library/G2PlotLibrary.js +288 -0
  53. package/lib/client/renderer/library/index.d.ts +3 -0
  54. package/lib/client/renderer/library/index.js +15 -0
  55. package/lib/client/utils.d.ts +96 -0
  56. package/lib/client/utils.js +137 -0
  57. package/lib/index.d.ts +1 -0
  58. package/lib/index.js +13 -0
  59. package/lib/server/actions/formatter.d.ts +3 -0
  60. package/lib/server/actions/formatter.js +44 -0
  61. package/lib/server/actions/query.d.ts +86 -0
  62. package/lib/server/actions/query.js +326 -0
  63. package/lib/server/index.d.ts +1 -0
  64. package/lib/server/index.js +13 -0
  65. package/lib/server/plugin.d.ts +13 -0
  66. package/lib/server/plugin.js +64 -0
  67. package/package.json +23 -0
  68. package/server.d.ts +3 -0
  69. package/server.js +65 -0
  70. package/src/client/Settings.tsx +43 -0
  71. package/src/client/__tests__/chart-configure.test.tsx +14 -0
  72. package/src/client/__tests__/chart-library.test.ts +78 -0
  73. package/src/client/__tests__/chart-renderer.test.tsx +30 -0
  74. package/src/client/__tests__/hooks.test.ts +261 -0
  75. package/src/client/block/ChartBlock.tsx +22 -0
  76. package/src/client/block/ChartBlockDesigner.tsx +19 -0
  77. package/src/client/block/ChartBlockInitializer.tsx +83 -0
  78. package/src/client/block/ChartConfigure.tsx +450 -0
  79. package/src/client/block/formatters.ts +70 -0
  80. package/src/client/block/index.ts +4 -0
  81. package/src/client/block/schemas/configure.ts +474 -0
  82. package/src/client/block/transformers.ts +52 -0
  83. package/src/client/hooks.ts +239 -0
  84. package/src/client/index.tsx +41 -0
  85. package/src/client/locale/en-US.ts +23 -0
  86. package/src/client/locale/index.ts +19 -0
  87. package/src/client/locale/ja-JP.ts +1 -0
  88. package/src/client/locale/pt-BR.ts +23 -0
  89. package/src/client/locale/ru-RU.ts +1 -0
  90. package/src/client/locale/tr-TR.ts +1 -0
  91. package/src/client/locale/zh-CN.ts +71 -0
  92. package/src/client/renderer/ChartLibrary.tsx +178 -0
  93. package/src/client/renderer/ChartRenderer.tsx +201 -0
  94. package/src/client/renderer/ChartRendererProvider.tsx +58 -0
  95. package/src/client/renderer/index.ts +4 -0
  96. package/src/client/renderer/library/AntdLibrary.tsx +94 -0
  97. package/src/client/renderer/library/G2PlotLibrary.tsx +236 -0
  98. package/src/client/renderer/library/index.tsx +4 -0
  99. package/src/client/utils.ts +102 -0
  100. package/src/index.ts +1 -0
  101. package/src/server/__tests__/api.test.ts +105 -0
  102. package/src/server/__tests__/formatter.test.ts +49 -0
  103. package/src/server/__tests__/query.test.ts +220 -0
  104. package/src/server/actions/formatter.ts +49 -0
  105. package/src/server/actions/query.ts +285 -0
  106. package/src/server/collections/.gitkeep +0 -0
  107. package/src/server/index.ts +1 -0
  108. package/src/server/plugin.ts +37 -0
package/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # Data Visualization
2
+
3
+ 提供BI面板和数据可视化功能。
4
+
5
+ ## 介绍
6
+
7
+ 新版数据可视化插件以Collection为基础,提供了可视化的数据检索、图表配置面板,多个图表可以在同一区块内进行组织,支持以插件形式扩展和使用其他图表组件库。未来还计划支持SQL模式,单个及多个图表的时间、条件筛选,数据下钻,图表与数据区块联动等功能。
8
+
9
+ ## 图表区块
10
+
11
+ <img src="https://s2.loli.net/2023/06/30/vTKZt9EXxS4Im5L.png"/>
12
+
13
+ - 图表区块可以组织多个图表,区块中的图表可以像区块一样排列和拖拽。
14
+ - 区块标题可以编辑。
15
+ - 图表以Collection为基础,新建图表时需要选定一个Collection.
16
+ - 有查看权限的Collection才可以用于配置图表,否则将会在选项中被隐藏。
17
+ - 图表可以修改 (Configure), 复制 (Duplicate), 设置标题 (Edit block title).
18
+
19
+ ## 配置面板
20
+
21
+ <img src="https://s2.loli.net/2023/06/30/75GMbhCcypHitkE.png"/>
22
+
23
+ 配置面板整体上分为三个区块:数据配置,图表配置,图表预览。
24
+
25
+ ### 数据配置
26
+
27
+ <img src="https://s2.loli.net/2023/06/30/34fnM7i6SIPJgFm.png" width="500" />
28
+
29
+ - 顶部下拉框代表当前正在配置的Collection,通过下拉菜单可以切换。
30
+ - 配置完成后,点击"Run query"可以通过配置获取数据,"Data"面板会展示数据。
31
+
32
+ #### 度量
33
+
34
+ <img src="https://s2.loli.net/2023/06/30/xZwW6UR1klB4dCs.png" width="500" />
35
+
36
+ 度量字段,通常是图表需要展示的核心数据。度量数据可以通过聚合函数进行统计,支持常用的数据库统计函数`Sum`, `Count`, `Avg`, `Max`, `Min`. 度量字段可以有多个,可以设置别名。
37
+
38
+ #### 维度
39
+
40
+ <img src="https://s2.loli.net/2023/06/30/2eAHvGojmlL1YtQ.png" width="500" />
41
+
42
+ 维度字段,通常是图表数据分组的依据。对于日期类型字段,支持如图所示的格式化方式,格式化通过数据库函数实现(例如:MySQL对应`date_format`),其他类型数据格式化见[数据转换](数据转换)部分。
43
+
44
+ > **维度格式化 (Dimensions Format) VS 数据转换 (Transform)**
45
+ > - 维度格式化发生在获取最终数据之前,数据分组按照维度格式化后的值进行,通常在按时间段筛选数据时有此需求。
46
+ > - 数据转换对响应数据做进一步处理,诸如可读性处理,以展现恰当的数据,数据转换在前端进行。
47
+
48
+ #### 筛选
49
+
50
+ <img src="https://s2.loli.net/2023/06/30/kvbHO5Y1fsiMm3E.png" width="500" />
51
+
52
+ 此处配置将对分组前的数据进行过滤。
53
+
54
+ #### 排序 (Sort) 和限制 (Limit)
55
+
56
+ <img src="https://s2.loli.net/2023/06/30/HCpiQ4qATcLeKUE.png" width="500" />
57
+
58
+ 目前图表允许的数据集条数上限为2000.
59
+
60
+ #### 缓存
61
+
62
+ <img src="https://s2.loli.net/2023/06/30/OY6JephtbcH4run.png" width="300" />
63
+
64
+ 开启缓存后,图表将展示缓存的数据。
65
+
66
+ ### 图表配置
67
+
68
+ <img src="https://s2.loli.net/2023/06/30/KHaPvYsBxh7plGQ.png" width="500" />
69
+
70
+ - 图表类型 (Chart Type) - 用于展示的图表类型,目前按图表库分组。如何使用其他图表库?
71
+ - 基础配置 - 选择图表后,会出现相应的基础可视化配置,字段配置通常提供了下拉菜单供选择,选项中包含了Collection的基础字段和字段别名。
72
+ - JSON配置 - 当基础配置不满足要求时,可以使用JSON配置其他图表属性。
73
+
74
+ ### 数据转换
75
+
76
+ <img src="https://s2.loli.net/2023/06/30/yf82mYs6V1aCRIj.png" width="500" />
77
+
78
+ 使用数据转换可以对接口响应的数据做进一步处理,目前支持转换处理的数据类型为 `number`, `date`, `time`, `datetime`, 对于不属于支持的数据类型的字段,可以手动选择为这几个类型,以使用对应的转换方法。
79
+
80
+ ## 使用其他图表库
81
+
82
+ ```TypeScript
83
+ import { ChartLibraryProvider } from '@nocobase/plugin-charts-v2/client';
84
+ ```
85
+
86
+ 图表插件提供了ChartLibraryProvider组件,组件接收以下属性:
87
+ - name 图表库名字
88
+ - charts 图表组件列表,参考`packages/plugins/charts-v2/src/client/renderer/library/G2PlotLibrary.tsx`
package/client.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ // @ts-nocheck
2
+ export * from './lib/client';
3
+ export { default } from './lib/client';
package/client.js ADDED
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ function _getRequireWildcardCache(nodeInterop) {
4
+ if (typeof WeakMap !== 'function') return null;
5
+ var cacheBabelInterop = new WeakMap();
6
+ var cacheNodeInterop = new WeakMap();
7
+ return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {
8
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
9
+ })(nodeInterop);
10
+ }
11
+
12
+ function _interopRequireWildcard(obj, nodeInterop) {
13
+ if (!nodeInterop && obj && obj.__esModule) {
14
+ return obj;
15
+ }
16
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
17
+ return { default: obj };
18
+ }
19
+ var cache = _getRequireWildcardCache(nodeInterop);
20
+ if (cache && cache.has(obj)) {
21
+ return cache.get(obj);
22
+ }
23
+ var newObj = {};
24
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
25
+ for (var key in obj) {
26
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
27
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
28
+ if (desc && (desc.get || desc.set)) {
29
+ Object.defineProperty(newObj, key, desc);
30
+ } else {
31
+ newObj[key] = obj[key];
32
+ }
33
+ }
34
+ }
35
+ newObj.default = obj;
36
+ if (cache) {
37
+ cache.set(obj, newObj);
38
+ }
39
+ return newObj;
40
+ }
41
+
42
+ var _index = _interopRequireWildcard(require('./lib/client'));
43
+
44
+ Object.defineProperty(exports, '__esModule', {
45
+ value: true,
46
+ });
47
+ var _exportNames = {};
48
+ Object.defineProperty(exports, 'default', {
49
+ enumerable: true,
50
+ get: function get() {
51
+ return _index.default;
52
+ },
53
+ });
54
+
55
+ Object.keys(_index).forEach(function (key) {
56
+ if (key === 'default' || key === '__esModule') return;
57
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
58
+ if (key in exports && exports[key] === _index[key]) return;
59
+ Object.defineProperty(exports, key, {
60
+ enumerable: true,
61
+ get: function get() {
62
+ return _index[key];
63
+ },
64
+ });
65
+ });
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const Settings: () => React.JSX.Element;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Settings = void 0;
7
+ function _icons() {
8
+ const data = require("@ant-design/icons");
9
+ _icons = function _icons() {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _css() {
15
+ const data = require("@emotion/css");
16
+ _css = function _css() {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _antd() {
22
+ const data = require("@formily/antd");
23
+ _antd = function _antd() {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _antd2() {
29
+ const data = require("antd");
30
+ _antd2 = function _antd2() {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ function _classnames() {
36
+ const data = _interopRequireDefault(require("classnames"));
37
+ _classnames = function _classnames() {
38
+ return data;
39
+ };
40
+ return data;
41
+ }
42
+ function _react() {
43
+ const data = _interopRequireWildcard(require("react"));
44
+ _react = function _react() {
45
+ return data;
46
+ };
47
+ return data;
48
+ }
49
+ var _locale = require("./locale");
50
+ var _renderer = require("./renderer");
51
+ 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); }
52
+ 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; }
53
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
54
+ const Settings = () => {
55
+ const _useChartsTranslation = (0, _locale.useChartsTranslation)(),
56
+ t = _useChartsTranslation.t;
57
+ const libraries = (0, _react().useContext)(_renderer.ChartLibraryContext);
58
+ const _useToggleChartLibrar = (0, _renderer.useToggleChartLibrary)(),
59
+ toggle = _useToggleChartLibrar.toggle;
60
+ const list = Object.entries(libraries).map(([library, {
61
+ enabled
62
+ }]) => {
63
+ return _react().default.createElement(_antd2().Button, {
64
+ key: library,
65
+ icon: enabled ? _react().default.createElement(_icons().CheckOutlined, null) : '',
66
+ className: (0, _classnames().default)((0, _css().css)`
67
+ margin: 8px 8px 8px 0;
68
+ `, enabled ? (0, _css().css)`
69
+ color: #40a9ff;
70
+ border-color: #40a9ff;
71
+ ` : ''),
72
+ onClick: () => toggle(library)
73
+ }, library);
74
+ });
75
+ return _react().default.createElement(_antd2().Card, null, _react().default.createElement(_antd().Form, {
76
+ layout: "vertical"
77
+ }, _react().default.createElement(_antd().FormItem, {
78
+ label: t('Enabled Chart Library')
79
+ }, list)));
80
+ };
81
+ exports.Settings = Settings;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ChartV2Block: React.FC;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ChartV2Block = void 0;
7
+ function _client() {
8
+ const data = require("@nocobase/client");
9
+ _client = function _client() {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _react() {
15
+ const data = _interopRequireWildcard(require("react"));
16
+ _react = function _react() {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ var _ChartConfigure = require("./ChartConfigure");
22
+ 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); }
23
+ 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; }
24
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
25
+ 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."); }
26
+ 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); }
27
+ 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; }
28
+ 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; } }
29
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
30
+ const ChartV2Block = props => {
31
+ const _useDesignable = (0, _client().useDesignable)(),
32
+ insertAdjacent = _useDesignable.insertAdjacent;
33
+ const _useState = (0, _react().useState)(false),
34
+ _useState2 = _slicedToArray(_useState, 2),
35
+ visible = _useState2[0],
36
+ setVisible = _useState2[1];
37
+ const _useState3 = (0, _react().useState)({}),
38
+ _useState4 = _slicedToArray(_useState3, 2),
39
+ current = _useState4[0],
40
+ setCurrent = _useState4[1];
41
+ const _useState5 = (0, _react().useState)([]),
42
+ _useState6 = _slicedToArray(_useState5, 2),
43
+ data = _useState6[0],
44
+ setData = _useState6[1];
45
+ const _useState7 = (0, _react().useState)(false),
46
+ _useState8 = _slicedToArray(_useState7, 2),
47
+ initialVisible = _useState8[0],
48
+ setInitialVisible = _useState8[1];
49
+ const _useState9 = (0, _react().useState)(''),
50
+ _useState10 = _slicedToArray(_useState9, 2),
51
+ searchValue = _useState10[0],
52
+ setSearchValue = _useState10[1];
53
+ return _react().default.createElement(_client().SchemaInitializerButtonContext.Provider, {
54
+ value: {
55
+ visible: initialVisible,
56
+ setVisible: setInitialVisible,
57
+ searchValue,
58
+ setSearchValue
59
+ }
60
+ }, _react().default.createElement(_ChartConfigure.ChartConfigContext.Provider, {
61
+ value: {
62
+ visible,
63
+ setVisible,
64
+ current,
65
+ setCurrent,
66
+ data,
67
+ setData
68
+ }
69
+ }, props.children, _react().default.createElement(_ChartConfigure.ChartConfigure, {
70
+ insert: (schema, options) => insertAdjacent('beforeEnd', schema, options)
71
+ })));
72
+ };
73
+ exports.ChartV2Block = ChartV2Block;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ChartV2BlockDesigner: React.FC;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ChartV2BlockDesigner = void 0;
7
+ function _client() {
8
+ const data = require("@nocobase/client");
9
+ _client = function _client() {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _react() {
15
+ const data = _interopRequireDefault(require("react"));
16
+ _react = function _react() {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ var _locale = require("../locale");
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+ const ChartV2BlockDesigner = () => {
24
+ const _useChartsTranslation = (0, _locale.useChartsTranslation)(),
25
+ t = _useChartsTranslation.t;
26
+ return _react().default.createElement(_client().GeneralSchemaDesigner, {
27
+ title: t('Charts')
28
+ }, _react().default.createElement(_client().SchemaSettings.BlockTitleItem, null), _react().default.createElement(_client().SchemaSettings.Divider, null), _react().default.createElement(_client().SchemaSettings.Remove, {
29
+ removeParentsIfNoChildren: true,
30
+ breakRemoveOn: {
31
+ 'x-component': 'Grid'
32
+ }
33
+ }));
34
+ };
35
+ exports.ChartV2BlockDesigner = ChartV2BlockDesigner;
@@ -0,0 +1,6 @@
1
+ import { ISchema } from '@formily/react';
2
+ import React from 'react';
3
+ export declare const ChartInitializers: () => React.JSX.Element;
4
+ export declare const ChartV2BlockInitializer: React.FC<{
5
+ insert: (s: ISchema) => void;
6
+ }>;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ChartV2BlockInitializer = exports.ChartInitializers = void 0;
7
+ function _icons() {
8
+ const data = require("@ant-design/icons");
9
+ _icons = function _icons() {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _shared() {
15
+ const data = require("@formily/shared");
16
+ _shared = function _shared() {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _client() {
22
+ const data = require("@nocobase/client");
23
+ _client = function _client() {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _react() {
29
+ const data = _interopRequireWildcard(require("react"));
30
+ _react = function _react() {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ var _locale = require("../locale");
36
+ var _ChartConfigure = require("./ChartConfigure");
37
+ 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); }
38
+ 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; }
39
+ 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; }
40
+ 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; }
41
+ 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; }
42
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
43
+ 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); }
44
+ const itemWrap = _client().SchemaInitializer.itemWrap;
45
+ const ConfigureButton = itemWrap(props => {
46
+ const _useContext = (0, _react().useContext)(_ChartConfigure.ChartConfigContext),
47
+ setVisible = _useContext.setVisible,
48
+ setCurrent = _useContext.setCurrent,
49
+ setData = _useContext.setData;
50
+ return _react().default.createElement(_client().SchemaInitializer.Item, _objectSpread(_objectSpread({}, props), {}, {
51
+ onClick: () => {
52
+ var _props$item;
53
+ setCurrent({
54
+ schema: {},
55
+ field: null,
56
+ collection: (_props$item = props.item) === null || _props$item === void 0 ? void 0 : _props$item.name
57
+ });
58
+ setData([]);
59
+ setVisible(true);
60
+ }
61
+ }));
62
+ });
63
+ const ChartInitializers = () => {
64
+ const _useChartsTranslation = (0, _locale.useChartsTranslation)(),
65
+ t = _useChartsTranslation.t;
66
+ const collections = (0, _client().useCollectionDataSourceItems)('Chart');
67
+ const _useACLRoleContext = (0, _client().useACLRoleContext)(),
68
+ allowAll = _useACLRoleContext.allowAll,
69
+ parseAction = _useACLRoleContext.parseAction;
70
+ const children = collections[0].children.filter(item => {
71
+ if (allowAll) {
72
+ return true;
73
+ }
74
+ const params = parseAction(`${item.name}:list`);
75
+ return params;
76
+ }).map(item => _objectSpread(_objectSpread({}, item), {}, {
77
+ component: ConfigureButton
78
+ }));
79
+ if (!children.length) {
80
+ // Leave a blank item to show the filter component
81
+ children.push({});
82
+ }
83
+ collections[0].children = children;
84
+ return _react().default.createElement(_client().SchemaInitializer.Button, {
85
+ icon: 'PlusOutlined',
86
+ items: collections,
87
+ dropdown: {
88
+ placement: 'bottomLeft'
89
+ }
90
+ }, t('Add chart'));
91
+ };
92
+ exports.ChartInitializers = ChartInitializers;
93
+ const ChartV2BlockInitializer = props => {
94
+ const insert = props.insert;
95
+ return _react().default.createElement(_client().SchemaInitializer.Item, _objectSpread(_objectSpread({}, props), {}, {
96
+ icon: _react().default.createElement(_icons().LineChartOutlined, null),
97
+ onClick: () => {
98
+ insert({
99
+ type: 'void',
100
+ 'x-component': 'CardItem',
101
+ 'x-designer': 'ChartV2BlockDesigner',
102
+ properties: {
103
+ [(0, _shared().uid)()]: {
104
+ type: 'void',
105
+ 'x-component': 'Grid',
106
+ 'x-decorator': 'ChartV2Block',
107
+ 'x-initializer': 'ChartInitializers'
108
+ }
109
+ }
110
+ });
111
+ }
112
+ }));
113
+ };
114
+ exports.ChartV2BlockInitializer = ChartV2BlockInitializer;
@@ -0,0 +1,33 @@
1
+ import { ISchema } from '@formily/react';
2
+ import React from 'react';
3
+ export declare type ChartConfigCurrent = {
4
+ schema: ISchema;
5
+ field: any;
6
+ collection: string;
7
+ };
8
+ export declare type SelectedField = {
9
+ field: string | string[];
10
+ alias?: string;
11
+ };
12
+ export declare const ChartConfigContext: React.Context<{
13
+ visible: boolean;
14
+ setVisible?: (visible: boolean) => void;
15
+ current?: ChartConfigCurrent;
16
+ setCurrent?: (current: ChartConfigCurrent) => void;
17
+ data?: any[] | string;
18
+ setData?: (data: any[] | string) => void;
19
+ }>;
20
+ export declare const ChartConfigure: React.FC<{
21
+ insert: (s: ISchema, options: {
22
+ onSuccess: () => void;
23
+ wrap?: (schema: ISchema) => ISchema;
24
+ }) => void;
25
+ }> & {
26
+ Renderer: React.FC<{
27
+ runQuery?: any;
28
+ }>;
29
+ Config: React.FC;
30
+ Query: React.FC;
31
+ Transform: React.FC;
32
+ Data: React.FC;
33
+ };