@zhenliang/sheet 0.0.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 (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/core/config.js +13 -0
  4. package/dist/core/editor/cascaderEditor/index.js +63 -0
  5. package/dist/core/editor/cascaderEditor/index.less +24 -0
  6. package/dist/core/editor/dateEditor/index.js +42 -0
  7. package/dist/core/editor/dateEditor/index.less +7 -0
  8. package/dist/core/editor/numberEditor/index.js +25 -0
  9. package/dist/core/editor/numberEditor/index.less +17 -0
  10. package/dist/core/editor/selectEditor/index.js +44 -0
  11. package/dist/core/editor/selectEditor/index.less +41 -0
  12. package/dist/core/reducers/index.js +36 -0
  13. package/dist/core/reducers/keyboardReducer.js +91 -0
  14. package/dist/core/reducers/mouseReducer.js +151 -0
  15. package/dist/core/reducers/sideEffectReducer.js +324 -0
  16. package/dist/core/reducers/stateReducer.js +140 -0
  17. package/dist/core/sheet/Cell.js +160 -0
  18. package/dist/core/sheet/DataEditor.js +21 -0
  19. package/dist/core/sheet/DefaultCell.js +31 -0
  20. package/dist/core/sheet/DefaultRow.js +25 -0
  21. package/dist/core/sheet/DefaultRowMapper.js +15 -0
  22. package/dist/core/sheet/DefaultShell.js +12 -0
  23. package/dist/core/sheet/Event.js +17 -0
  24. package/dist/core/sheet/ValueViewer.js +9 -0
  25. package/dist/core/sheet/index.js +201 -0
  26. package/dist/core/sheet/index.less +261 -0
  27. package/dist/core/sheet/useCellEvent.js +22 -0
  28. package/dist/core/sheet/useContextMenu.js +86 -0
  29. package/dist/core/sheet/useKeyBoardEvent.js +44 -0
  30. package/dist/core/sheet/useMouseEvent.js +298 -0
  31. package/dist/core/sheet/useVirtualList.js +74 -0
  32. package/dist/core/sheet/var.less +41 -0
  33. package/dist/core/shell/draggableShell/index.js +182 -0
  34. package/dist/core/shell/draggableShell/index.less +16 -0
  35. package/dist/core/shell/resizeShell.js +57 -0
  36. package/dist/core/shell/tableShell.js +105 -0
  37. package/dist/core/table/index.js +311 -0
  38. package/dist/core/table/useGroupConfig.js +32 -0
  39. package/dist/core/table/useRowSelection.js +24 -0
  40. package/dist/core/table/util.js +29 -0
  41. package/dist/core/util.js +363 -0
  42. package/dist/core/viewer/checkViewer/index.js +23 -0
  43. package/dist/core/viewer/groupViewer/index.js +28 -0
  44. package/dist/example/basic.js +120 -0
  45. package/dist/example/draggable.js +0 -0
  46. package/dist/example/ellipsis.js +63 -0
  47. package/dist/example/fixed.js +88 -0
  48. package/dist/example/group.js +84 -0
  49. package/dist/example/index.less +5 -0
  50. package/dist/example/selection.js +85 -0
  51. package/dist/example/sheet.js +356 -0
  52. package/dist/hooks/index.js +6 -0
  53. package/dist/hooks/useEventBus.js +17 -0
  54. package/dist/hooks/useKeyboard.js +108 -0
  55. package/dist/hooks/useMiddlewareReducer.js +47 -0
  56. package/dist/hooks/useMouse.js +52 -0
  57. package/dist/hooks/useSetState.js +27 -0
  58. package/dist/hooks/useSheetEvent.js +5 -0
  59. package/dist/index.js +3 -0
  60. package/dist/standardUtils/index.js +32 -0
  61. package/dist/typings/index.d.ts +1 -0
  62. package/dist/typings/sheet.d.ts +209 -0
  63. package/dist/typings/table.js +0 -0
  64. package/package.json +84 -0
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import Table from "../core/table";
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ var columns = [{
5
+ title: 'Name',
6
+ dataIndex: 'name',
7
+ key: 'name',
8
+ render: function render(_ref) {
9
+ var value = _ref.value;
10
+ return /*#__PURE__*/_jsx("a", {
11
+ children: value
12
+ });
13
+ },
14
+ width: 150
15
+ }, {
16
+ title: 'Age',
17
+ dataIndex: 'age',
18
+ key: 'age',
19
+ width: 80
20
+ }, {
21
+ title: 'Address',
22
+ dataIndex: 'address',
23
+ key: 'address 1'
24
+ }, {
25
+ title: 'Long Column',
26
+ dataIndex: 'address',
27
+ key: 'address 2'
28
+ }, {
29
+ title: 'Long Column Long Column',
30
+ dataIndex: 'address',
31
+ key: 'address 3'
32
+ }, {
33
+ title: 'Long Column',
34
+ dataIndex: 'address',
35
+ key: 'address 4'
36
+ }];
37
+ var data = [{
38
+ key: '1',
39
+ name: 'John Brown',
40
+ age: 32,
41
+ address: 'New York No. 1 Lake Park, New York No. 1 Lake Park',
42
+ tags: ['nice', 'developer']
43
+ }, {
44
+ key: '2',
45
+ name: 'Jim Green',
46
+ age: 42,
47
+ address: 'London No. 2 Lake Park, London No. 2 Lake Park',
48
+ tags: ['loser']
49
+ }, {
50
+ key: '3',
51
+ name: 'Joe Black',
52
+ age: 32,
53
+ address: 'Sidney No. 1 Lake Park, Sidney No. 1 Lake Park',
54
+ tags: ['cool', 'teacher']
55
+ }];
56
+ var App = function App() {
57
+ return /*#__PURE__*/_jsx(Table, {
58
+ columns: columns,
59
+ dataSource: data,
60
+ onChange: function onChange() {}
61
+ });
62
+ };
63
+ export default App;
@@ -0,0 +1,88 @@
1
+ import React from 'react';
2
+ import Table from "../core/table";
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ var columns = [{
5
+ title: 'Full Name',
6
+ width: 100,
7
+ dataIndex: 'name',
8
+ key: 'name',
9
+ fixed: 'left'
10
+ }, {
11
+ title: 'Age',
12
+ width: 100,
13
+ dataIndex: 'age',
14
+ key: 'age'
15
+ // fixed: 'left',
16
+ }, {
17
+ title: 'Column 1',
18
+ width: 200,
19
+ dataIndex: 'address',
20
+ key: '1'
21
+ }, {
22
+ title: 'Column 2',
23
+ width: 200,
24
+ dataIndex: 'address',
25
+ key: '2'
26
+ }, {
27
+ title: 'Column 3',
28
+ width: 200,
29
+ dataIndex: 'address',
30
+ key: '3'
31
+ }, {
32
+ title: 'Column 4',
33
+ width: 200,
34
+ dataIndex: 'address',
35
+ key: '4'
36
+ }, {
37
+ title: 'Column 5',
38
+ width: 200,
39
+ dataIndex: 'address',
40
+ key: '5'
41
+ }, {
42
+ title: 'Column 6',
43
+ width: 200,
44
+ dataIndex: 'address',
45
+ key: '6'
46
+ }, {
47
+ title: 'Column 7',
48
+ width: 200,
49
+ dataIndex: 'address',
50
+ key: '7'
51
+ }, {
52
+ title: 'Column 8',
53
+ width: 200,
54
+ dataIndex: 'address',
55
+ key: '8'
56
+ }, {
57
+ title: 'Action',
58
+ key: 'operation',
59
+ fixed: 'right',
60
+ width: 100,
61
+ render: function render() {
62
+ return /*#__PURE__*/_jsx("a", {
63
+ children: "action"
64
+ });
65
+ }
66
+ }];
67
+ var data = [{
68
+ key: '1',
69
+ name: 'John Brown',
70
+ age: 32,
71
+ address: 'New York Park'
72
+ }, {
73
+ key: '2',
74
+ name: 'Jim Green',
75
+ age: 40,
76
+ address: 'London Park'
77
+ }];
78
+ var App = function App() {
79
+ return /*#__PURE__*/_jsx(Table, {
80
+ columns: columns,
81
+ dataSource: data,
82
+ scroll: {
83
+ x: '100%'
84
+ },
85
+ onChange: function onChange() {}
86
+ });
87
+ };
88
+ export default App;
@@ -0,0 +1,84 @@
1
+ import Table from "../core/table";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ var columns = [{
4
+ title: 'Name',
5
+ dataIndex: 'name',
6
+ key: 'name'
7
+ }, {
8
+ title: 'Age',
9
+ dataIndex: 'age',
10
+ key: 'age'
11
+ }, {
12
+ title: 'Address',
13
+ readonly: function readonly(value, record, index) {
14
+ console.log(index);
15
+ return index % 2 === 0;
16
+ },
17
+ dataIndex: 'address',
18
+ key: 'address'
19
+ }, {
20
+ title: 'Action',
21
+ dataIndex: '',
22
+ key: 'x',
23
+ editable: false,
24
+ render: function render() {
25
+ return /*#__PURE__*/_jsx("a", {
26
+ children: "Delete"
27
+ });
28
+ }
29
+ }];
30
+ var data = [{
31
+ key: 1,
32
+ name: 'John Brown',
33
+ age: 32,
34
+ address: 'New York No. 1 Lake Park',
35
+ children: [{
36
+ key: '1-1'
37
+ }, {
38
+ key: '1-2'
39
+ }]
40
+ }, {
41
+ key: 2,
42
+ name: 'Jim Green',
43
+ age: 42,
44
+ address: 'London No. 1 Lake Park',
45
+ children: [{
46
+ key: '2-1'
47
+ }, {
48
+ key: '2-2'
49
+ }]
50
+ }, {
51
+ key: 3,
52
+ name: 'Not Expandable',
53
+ age: 29,
54
+ address: 'Jiangsu No. 1 Lake Park'
55
+ }, {
56
+ key: 4,
57
+ name: 'Joe Black',
58
+ age: 32,
59
+ address: 'Sidney No. 1 Lake Park',
60
+ children: [{
61
+ key: '4-1'
62
+ }, {
63
+ key: '4-2'
64
+ }]
65
+ }];
66
+ var App = function App() {
67
+ return /*#__PURE__*/_jsx(Table, {
68
+ draggable: true,
69
+ scroll: {
70
+ x: '100%'
71
+ },
72
+ columns: columns
73
+ // expandable={{
74
+ // expandedRowRender: (record) => (
75
+ // <p style={{ margin: 0 }}>{record.description}</p>
76
+ // ),
77
+ // rowExpandable: (record) => record.name !== 'Not Expandable',
78
+ // }}
79
+ ,
80
+ dataSource: data,
81
+ onChange: function onChange() {}
82
+ });
83
+ };
84
+ export default App;
@@ -0,0 +1,5 @@
1
+ .excel-sheet{
2
+ --row-height:30px;
3
+ --line-height:30px;
4
+ --cell-inner-height: 29px;
5
+ }
@@ -0,0 +1,85 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
+ 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; }
3
+ 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; }
4
+ 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; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
+ 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); }
7
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
8
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
10
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
11
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
12
+ 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."); }
13
+ 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); }
14
+ 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; }
15
+ 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; } }
16
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
17
+ import Table from "../core/table";
18
+ import 'antd/dist/antd.css';
19
+ import React, { useCallback, useState } from 'react';
20
+ import { jsx as _jsx } from "react/jsx-runtime";
21
+ var columns = [{
22
+ title: 'Name',
23
+ dataIndex: 'name',
24
+ render: function render(_ref) {
25
+ var value = _ref.value;
26
+ return /*#__PURE__*/_jsx("a", {
27
+ children: value
28
+ });
29
+ }
30
+ }, {
31
+ title: 'Age',
32
+ dataIndex: 'age'
33
+ }, {
34
+ title: 'Address',
35
+ dataIndex: 'address'
36
+ }];
37
+ var data = [{
38
+ key: '1',
39
+ name: 'John Brown',
40
+ age: 32,
41
+ address: 'New York No. 1 Lake Park'
42
+ }, {
43
+ key: '2',
44
+ name: 'Jim Green',
45
+ age: 42,
46
+ address: 'London No. 1 Lake Park'
47
+ }, {
48
+ key: '3',
49
+ name: 'Joe Black',
50
+ age: 32,
51
+ address: 'Sidney No. 1 Lake Park'
52
+ }, {
53
+ key: '4',
54
+ name: 'Disabled User',
55
+ age: 99,
56
+ address: 'Sidney No. 1 Lake Park'
57
+ }];
58
+ var App = function App() {
59
+ var _useState = useState(data),
60
+ _useState2 = _slicedToArray(_useState, 2),
61
+ dataSource = _useState2[0],
62
+ setData = _useState2[1];
63
+ var onChange = useCallback(function (changes) {
64
+ var newData = _toConsumableArray(dataSource);
65
+ changes.forEach(function (_ref2) {
66
+ var row = _ref2.row,
67
+ key = _ref2.key,
68
+ value = _ref2.value;
69
+ newData[row] = _objectSpread(_objectSpread({}, newData[row]), {}, _defineProperty({}, key, key === 'tags' ? value.split(',') : value));
70
+ });
71
+ setData(newData);
72
+ }, [dataSource]);
73
+ var handleRowChange = useCallback(function () {}, []);
74
+ return /*#__PURE__*/_jsx(Table, {
75
+ columns: columns,
76
+ rowKey: "key",
77
+ dataSource: dataSource,
78
+ onChange: onChange,
79
+ rowSelection: {
80
+ rowSelected: [],
81
+ onChange: handleRowChange
82
+ }
83
+ });
84
+ };
85
+ export default App;
@@ -0,0 +1,356 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
+ 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; }
3
+ 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; }
4
+ 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; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
+ 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); }
7
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
8
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
10
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
11
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
12
+ 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."); }
13
+ 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); }
14
+ 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; }
15
+ 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; } }
16
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
17
+ import { MinusCircleOutlined, PlusCircleOutlined } from '@ant-design/icons';
18
+ import { Sheet } from "./..";
19
+ import { Tooltip } from 'antd';
20
+ import { cloneDeep, isNil, random, range } from 'lodash';
21
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
22
+ import { SheetEvent } from "../core/sheet/Event";
23
+ import { DraggableShell } from "../core/shell/draggableShell";
24
+ import { changeGroupConfig } from "../core/util";
25
+ import { useSheetEvent } from "../hooks";
26
+ import "./index.less";
27
+ import { jsx as _jsx } from "react/jsx-runtime";
28
+ import { jsxs as _jsxs } from "react/jsx-runtime";
29
+ var ExcelIndexCell = function ExcelIndexCell(_ref) {
30
+ var value = _ref.value,
31
+ row = _ref.row,
32
+ record = _ref.record;
33
+ var eventBus = useSheetEvent();
34
+ var handleClick = useCallback(function () {
35
+ eventBus.emit('onCellClick', {
36
+ row: row
37
+ });
38
+ }, []);
39
+ return /*#__PURE__*/_jsxs("span", {
40
+ className: "excel-index-cell",
41
+ onClick: handleClick,
42
+ style: {
43
+ cursor: 'pointer',
44
+ color: record === null || record === void 0 ? void 0 : record.color
45
+ },
46
+ children: [!isNil(record === null || record === void 0 ? void 0 : record.open) ? record !== null && record !== void 0 && record.open ? /*#__PURE__*/_jsx(MinusCircleOutlined, {}) : /*#__PURE__*/_jsx(Tooltip, {
47
+ overlay: record.groups,
48
+ trigger: ['hover'],
49
+ children: /*#__PURE__*/_jsx(PlusCircleOutlined, {})
50
+ }) : null, value]
51
+ });
52
+ };
53
+ var grid = range(1, 120).map(function (row, rowIndex) {
54
+ return range(0, 26).map(function (i) {
55
+ return {
56
+ id: String(random(0, 1)),
57
+ readonly: i === 0 ? true : false,
58
+ fixed: i === 0 ? 'left' : undefined,
59
+ value: i === 0 ? row : row > 15 || i > 10 ? '' : "".concat(row, "-").concat(i),
60
+ valueViewer: i === 0 ? ExcelIndexCell : undefined,
61
+ record: [1, 7].includes(rowIndex) ? {
62
+ open: true,
63
+ color: 'inherit',
64
+ groups: rowIndex === 1 ? [1, 2, 3, 4, 5] : [7, 8, 9]
65
+ } : undefined,
66
+ align: 'center'
67
+ };
68
+ });
69
+ });
70
+ var BasicSheet = function BasicSheet() {
71
+ var _useState = useState(grid),
72
+ _useState2 = _slicedToArray(_useState, 2),
73
+ state = _useState2[0],
74
+ setState = _useState2[1];
75
+ var sheetInstance = useRef(null);
76
+ var _useState3 = useState({
77
+ groups: [{
78
+ groupStart: 1,
79
+ groupEnd: 5,
80
+ groupName: 'group1'
81
+ }, {
82
+ groupStart: 7,
83
+ groupEnd: 9,
84
+ groupName: 'group2'
85
+ }],
86
+ groupOpen: [true, true]
87
+ }),
88
+ _useState4 = _slicedToArray(_useState3, 2),
89
+ groupConfig = _useState4[0],
90
+ setGroupConfig = _useState4[1];
91
+ var handleNewRow = useCallback(function (index) {
92
+ var _sheetInstance$curren, _sheetInstance$curren2;
93
+ var newGrid = cloneDeep(state);
94
+ var newRow = cloneDeep(newGrid[0]);
95
+ newRow.forEach(function (item) {
96
+ item.value = '';
97
+ item.record = undefined;
98
+ });
99
+ newGrid.splice(index, 0, newRow);
100
+ newGrid.forEach(function (row, index) {
101
+ row[0].value = index + 1;
102
+ });
103
+ (_sheetInstance$curren = sheetInstance.current) === null || _sheetInstance$curren === void 0 ? void 0 : _sheetInstance$curren.pushToHistory({
104
+ type: 'NewRow',
105
+ changes: [],
106
+ rowInfo: {
107
+ newRow: index + 1
108
+ },
109
+ extraInfo: groupConfig
110
+ });
111
+ var newGroupConfig = changeGroupConfig(groupConfig, {
112
+ add: index
113
+ });
114
+ setState(newGrid);
115
+ setGroupConfig(newGroupConfig);
116
+ (_sheetInstance$curren2 = sheetInstance.current) === null || _sheetInstance$curren2 === void 0 ? void 0 : _sheetInstance$curren2.selectRow(index);
117
+ }, [state, groupConfig]);
118
+ var handleDeleteRow = useCallback(function (index) {
119
+ var _sheetInstance$curren3;
120
+ var newGrid = cloneDeep(state);
121
+ var deleteRow = newGrid.splice(index - 1, 1);
122
+ newGrid.forEach(function (row, index) {
123
+ row[0].value = index + 1;
124
+ });
125
+ var newGroupConfig = changeGroupConfig(groupConfig, {
126
+ remove: index
127
+ });
128
+ (_sheetInstance$curren3 = sheetInstance.current) === null || _sheetInstance$curren3 === void 0 ? void 0 : _sheetInstance$curren3.pushToHistory({
129
+ type: 'DeleteRow',
130
+ changes: deleteRow[0].map(function (item, col) {
131
+ return {
132
+ cell: item,
133
+ row: index,
134
+ col: col
135
+ };
136
+ }),
137
+ rowInfo: {
138
+ deleteRow: index
139
+ },
140
+ extraInfo: groupConfig
141
+ });
142
+ setGroupConfig(newGroupConfig);
143
+ setState(newGrid);
144
+ }, [state]);
145
+ var handleReverse = useCallback(function (value) {
146
+ var _ref2 = value,
147
+ type = _ref2.type,
148
+ changes = _ref2.changes,
149
+ rowInfo = _ref2.rowInfo,
150
+ extraInfo = _ref2.extraInfo;
151
+ var newGrid = _toConsumableArray(state);
152
+ if (type === 'NewRow') {
153
+ var _sheetInstance$curren4;
154
+ if (!(rowInfo !== null && rowInfo !== void 0 && rowInfo.newRow) && (rowInfo === null || rowInfo === void 0 ? void 0 : rowInfo.newRow) !== 0) return;
155
+ newGrid.splice(rowInfo.newRow - 1, 1);
156
+ newGrid.forEach(function (row, index) {
157
+ row[0].value = index + 1;
158
+ });
159
+ setState(newGrid);
160
+ setGroupConfig(extraInfo);
161
+ (_sheetInstance$curren4 = sheetInstance.current) === null || _sheetInstance$curren4 === void 0 ? void 0 : _sheetInstance$curren4.selectRow();
162
+ } else if (type === 'DeleteRow') {
163
+ if (!(rowInfo !== null && rowInfo !== void 0 && rowInfo.deleteRow) && (rowInfo === null || rowInfo === void 0 ? void 0 : rowInfo.deleteRow) !== 0) return;
164
+ newGrid.splice(rowInfo.deleteRow - 1, 0, changes.map(function (item) {
165
+ return item.cell;
166
+ }));
167
+ newGrid.forEach(function (row, index) {
168
+ row[0].value = index + 1;
169
+ });
170
+ setState(newGrid);
171
+ setGroupConfig(extraInfo);
172
+ } else if (type === 'Custom') {
173
+ var _ref3 = extraInfo,
174
+ _groupConfig = _ref3.groupConfig,
175
+ extraType = _ref3.extraType,
176
+ lastState = _ref3.state;
177
+ if (extraType === 'group') {
178
+ setGroupConfig(_groupConfig);
179
+ setState(lastState);
180
+ }
181
+ }
182
+ }, [state, groupConfig]);
183
+ var onCellsChanged = function onCellsChanged(changes) {
184
+ var newGrid = _toConsumableArray(state);
185
+ changes.forEach(function (_ref4) {
186
+ var row = _ref4.row,
187
+ col = _ref4.col,
188
+ value = _ref4.value;
189
+ var newRow = _toConsumableArray(newGrid[row]);
190
+ newRow[col] = _objectSpread(_objectSpread({}, newRow[col]), {}, {
191
+ value: value
192
+ });
193
+ newGrid[row] = newRow;
194
+ });
195
+ setState(newGrid);
196
+ };
197
+ var WrappedTableShell = useMemo(function () {
198
+ return DraggableShell({
199
+ columns: range(26).map(function (i) {
200
+ if (i > 26) return {
201
+ title: String.fromCharCode(64 + i / 26) + String.fromCharCode(64 + i % 26),
202
+ width: 100,
203
+ align: 'center'
204
+ };
205
+ return {
206
+ title: i === 0 ? '' : String.fromCharCode(64 + i),
207
+ fixed: i === 0 ? 'left' : undefined,
208
+ width: i === 0 ? 50 : 80,
209
+ align: 'center'
210
+ };
211
+ }),
212
+ className: 'baseTable'
213
+ });
214
+ }, []);
215
+ var MenuRender = useCallback(function (props) {
216
+ var position = props.position,
217
+ handleMenu = props.onContextMenu,
218
+ cell = props.cell;
219
+ var _ref5 = position || {},
220
+ top = _ref5.top,
221
+ left = _ref5.left;
222
+ if (!cell) return null;
223
+ return /*#__PURE__*/_jsxs("div", {
224
+ className: "harvest-menu",
225
+ style: {
226
+ top: top,
227
+ left: left,
228
+ background: 'white'
229
+ },
230
+ children: [/*#__PURE__*/_jsx("div", {
231
+ className: "harvest-menu-item",
232
+ onClick: function onClick() {
233
+ return handleMenu && handleMenu({
234
+ type: '1',
235
+ row: cell.row + 1
236
+ });
237
+ },
238
+ style: {
239
+ padding: '5px 10px'
240
+ },
241
+ children: "\u5411\u4E0B\u63D2\u5165\u884C"
242
+ }), /*#__PURE__*/_jsxs("div", {
243
+ className: "harvest-menu-item",
244
+ onClick: function onClick() {
245
+ return handleMenu && handleMenu({
246
+ type: '2',
247
+ row: cell.row + 1
248
+ });
249
+ },
250
+ children: ["\u5411\u4E0A\u63D2\u5165\u884C", ' ']
251
+ }), /*#__PURE__*/_jsx("div", {
252
+ className: "harvest-menu-item",
253
+ onClick: function onClick() {
254
+ return handleMenu && handleMenu({
255
+ type: '3',
256
+ row: cell.row + 1
257
+ });
258
+ },
259
+ children: "\u5220\u9664\u884C"
260
+ })]
261
+ });
262
+ }, [handleNewRow]);
263
+ var handleMenuClick = useCallback(function (e) {
264
+ var _ref6 = e,
265
+ type = _ref6.type,
266
+ row = _ref6.row;
267
+ console.log('click', state.length);
268
+ if (type === '1') {
269
+ handleNewRow(row);
270
+ }
271
+ if (type === '2') {
272
+ handleNewRow(row - 1);
273
+ }
274
+ if (type === '3') {
275
+ handleDeleteRow(row);
276
+ }
277
+ }, [state, groupConfig]);
278
+ console.log('render', performance.now());
279
+ useEffect(function () {
280
+ console.log('rendered', performance.now());
281
+ }, []);
282
+ console.log(state.length);
283
+ return /*#__PURE__*/_jsxs(Sheet, {
284
+ sheetInstance: sheetInstance,
285
+ className: "excel-sheet",
286
+ virtualized: true,
287
+ data: state,
288
+ groupConfig: groupConfig,
289
+ scroll: {
290
+ x: '100%',
291
+ y: '100vh'
292
+ },
293
+ sheetRenderer: WrappedTableShell,
294
+ menuRenderer: MenuRender,
295
+ onCellsChanged: onCellsChanged,
296
+ onContextMenu: handleMenuClick,
297
+ children: [/*#__PURE__*/_jsx(SheetEvent, {
298
+ name: "onCellClick",
299
+ handler: function handler(e) {
300
+ var _ref7 = e,
301
+ row = _ref7.row;
302
+ var index = groupConfig.groups.findIndex(function (item) {
303
+ return item.groupStart === row;
304
+ });
305
+ if (index >= 0) {
306
+ var _sheetInstance$curren5;
307
+ console.log('changed');
308
+ var groupOpen = _toConsumableArray(groupConfig.groupOpen);
309
+ groupOpen[index] = !groupConfig.groupOpen[index];
310
+ var newGrid = _toConsumableArray(state);
311
+ newGrid[row] = _toConsumableArray(newGrid[row]);
312
+ newGrid[row][0] = _objectSpread(_objectSpread({}, newGrid[row][0]), {}, {
313
+ record: {
314
+ open: !!groupOpen[index],
315
+ color: groupOpen[index] ? 'inherit' : 'green'
316
+ }
317
+ });
318
+ setGroupConfig(_objectSpread(_objectSpread({}, groupConfig), {}, {
319
+ groupOpen: groupOpen
320
+ }));
321
+ setState(newGrid);
322
+ (_sheetInstance$curren5 = sheetInstance.current) === null || _sheetInstance$curren5 === void 0 ? void 0 : _sheetInstance$curren5.pushToHistory({
323
+ type: 'Custom',
324
+ changes: [],
325
+ extraInfo: {
326
+ extraType: 'group',
327
+ groupConfig: groupConfig,
328
+ state: state
329
+ }
330
+ });
331
+ }
332
+ }
333
+ }), /*#__PURE__*/_jsx(SheetEvent, {
334
+ name: "reverse",
335
+ handler: handleReverse
336
+ }), /*#__PURE__*/_jsxs("div", {
337
+ style: {
338
+ display: 'flex'
339
+ },
340
+ children: [/*#__PURE__*/_jsx("div", {
341
+ onClick: function onClick() {
342
+ var _sheetInstance$curren6;
343
+ (_sheetInstance$curren6 = sheetInstance.current) === null || _sheetInstance$curren6 === void 0 ? void 0 : _sheetInstance$curren6.zoomTo(0);
344
+ },
345
+ children: "\u56DE\u5230\u9876\u90E8"
346
+ }), /*#__PURE__*/_jsx("div", {
347
+ onClick: function onClick() {
348
+ var _sheetInstance$curren7;
349
+ (_sheetInstance$curren7 = sheetInstance.current) === null || _sheetInstance$curren7 === void 0 ? void 0 : _sheetInstance$curren7.zoomTo();
350
+ },
351
+ children: "\u56DE\u5230\u7F16\u8F91\u884C"
352
+ })]
353
+ })]
354
+ });
355
+ };
356
+ export default BasicSheet;
@@ -0,0 +1,6 @@
1
+ export { useEventBus } from "./useEventBus";
2
+ export { useKeyBoard } from "./useKeyboard";
3
+ export { useMiddlewareReducer } from "./useMiddlewareReducer";
4
+ export { useMouse } from "./useMouse";
5
+ export { useSetState } from "./useSetState";
6
+ export { SheetEventContext, useSheetEvent } from "./useSheetEvent";