@zhenliang/sheet 0.0.7 → 0.1.0

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 (145) hide show
  1. package/README.md +3 -2
  2. package/dist/core/config.js +1 -2
  3. package/dist/core/editor/cascaderEditor/index.js +14 -7
  4. package/dist/core/editor/dateEditor/index.d.ts +2 -1
  5. package/dist/core/editor/dateEditor/index.js +44 -36
  6. package/dist/core/editor/index.d.ts +1 -1
  7. package/dist/core/editor/index.js +2 -3
  8. package/dist/core/editor/numberEditor/index.d.ts +1 -1
  9. package/dist/core/editor/numberEditor/index.js +53 -5
  10. package/dist/core/editor/numberEditor/index.less +1 -0
  11. package/dist/core/editor/selectEditor/index.d.ts +1 -1
  12. package/dist/core/editor/selectEditor/index.js +34 -5
  13. package/dist/core/reducers/index.d.ts +1 -1
  14. package/dist/core/reducers/index.js +3 -2
  15. package/dist/core/reducers/keyboardReducer.js +2 -3
  16. package/dist/core/reducers/mouseReducer.js +1 -2
  17. package/dist/core/reducers/sideEffectReducer.js +61 -26
  18. package/dist/core/reducers/stateReducer.js +38 -9
  19. package/dist/core/sheet/Cell.js +37 -15
  20. package/dist/core/sheet/DataEditor.js +4 -2
  21. package/dist/core/sheet/DefaultCell.js +1 -2
  22. package/dist/core/sheet/DefaultRow.d.ts +1 -0
  23. package/dist/core/sheet/DefaultRow.js +5 -3
  24. package/dist/core/sheet/DefaultRowMapper.js +1 -2
  25. package/dist/core/sheet/DefaultShell.js +1 -2
  26. package/dist/core/sheet/Event.js +2 -3
  27. package/dist/core/sheet/ValueViewer.js +1 -2
  28. package/dist/core/sheet/index.js +60 -20
  29. package/dist/core/sheet/index.less +20 -11
  30. package/dist/core/sheet/useCellEvent.js +1 -2
  31. package/dist/core/sheet/useContextMenu.d.ts +1 -1
  32. package/dist/core/sheet/useContextMenu.js +2 -3
  33. package/dist/core/sheet/useKeyBoardEvent.js +15 -3
  34. package/dist/core/sheet/useMouseEvent.js +3 -4
  35. package/dist/core/sheet/useSelectVisible.d.ts +2 -0
  36. package/dist/core/sheet/useSelectVisible.js +48 -0
  37. package/dist/core/sheet/useVirtualList.d.ts +1 -1
  38. package/dist/core/sheet/useVirtualList.js +24 -12
  39. package/dist/core/shell/draggableShell/index.js +21 -13
  40. package/dist/core/shell/tableShell.js +9 -6
  41. package/dist/core/table/events.d.ts +15 -0
  42. package/dist/core/table/events.js +94 -0
  43. package/dist/core/table/index.js +91 -112
  44. package/dist/core/table/useGroupConfig.js +24 -7
  45. package/dist/core/table/useRowSelection.d.ts +2 -1
  46. package/dist/core/table/useRowSelection.js +1 -2
  47. package/dist/core/table/util.js +2 -3
  48. package/dist/core/util.d.ts +5 -2
  49. package/dist/core/util.js +97 -16
  50. package/dist/core/viewer/btnViewer/index.js +2 -3
  51. package/dist/core/viewer/cascaderViewer/index.d.ts +2 -0
  52. package/dist/core/viewer/cascaderViewer/index.js +11 -0
  53. package/dist/core/viewer/checkViewer/index.js +2 -3
  54. package/dist/core/viewer/editViewer/index.js +2 -3
  55. package/dist/core/viewer/groupViewer/index.js +5 -3
  56. package/dist/core/viewer/index.d.ts +1 -0
  57. package/dist/core/viewer/index.js +2 -2
  58. package/dist/core/viewer/selectorViewer/index.d.ts +2 -0
  59. package/dist/core/viewer/selectorViewer/index.js +12 -0
  60. package/dist/core/viewer/switchViewer/index.js +2 -3
  61. package/dist/example/antComponent.js +60 -14
  62. package/dist/example/basic.js +2 -3
  63. package/dist/example/ellipsis.js +1 -2
  64. package/dist/example/fixed.js +1 -2
  65. package/dist/example/group.js +42 -4
  66. package/dist/example/selection.js +2 -3
  67. package/dist/example/sheet.js +52 -16
  68. package/dist/example/valuationAnalyze.js +20 -18
  69. package/dist/hooks/index.d.ts +1 -0
  70. package/dist/hooks/index.js +1 -1
  71. package/dist/hooks/useEventBus.js +1 -2
  72. package/dist/hooks/useKeyboard.js +1 -2
  73. package/dist/hooks/useMiddlewareReducer.js +1 -2
  74. package/dist/hooks/useMouse.js +35 -20
  75. package/dist/hooks/useSetState.js +1 -2
  76. package/dist/hooks/useSheetEvent.js +1 -2
  77. package/dist/hooks/useWidthConfig.d.ts +4 -0
  78. package/dist/hooks/useWidthConfig.js +5 -0
  79. package/dist/index.d.ts +4 -0
  80. package/dist/index.js +4 -1
  81. package/dist/standardUtils/index.js +2 -3
  82. package/dist/type/index.js +1 -2
  83. package/dist/type/sheet.d.ts +14 -3
  84. package/dist/type/sheet.js +1 -2
  85. package/dist/type/sheetTable.d.ts +45 -16
  86. package/dist/type/sheetTable.js +1 -2
  87. package/package.json +1 -1
  88. package/dist/core/config.js.map +0 -1
  89. package/dist/core/editor/cascaderEditor/index.js.map +0 -1
  90. package/dist/core/editor/dateEditor/index.js.map +0 -1
  91. package/dist/core/editor/index.js.map +0 -1
  92. package/dist/core/editor/numberEditor/index.js.map +0 -1
  93. package/dist/core/editor/selectEditor/index.js.map +0 -1
  94. package/dist/core/reducers/index.js.map +0 -1
  95. package/dist/core/reducers/keyboardReducer.js.map +0 -1
  96. package/dist/core/reducers/mouseReducer.js.map +0 -1
  97. package/dist/core/reducers/sideEffectReducer.js.map +0 -1
  98. package/dist/core/reducers/stateReducer.js.map +0 -1
  99. package/dist/core/sheet/Cell.js.map +0 -1
  100. package/dist/core/sheet/DataEditor.js.map +0 -1
  101. package/dist/core/sheet/DefaultCell.js.map +0 -1
  102. package/dist/core/sheet/DefaultRow.js.map +0 -1
  103. package/dist/core/sheet/DefaultRowMapper.js.map +0 -1
  104. package/dist/core/sheet/DefaultShell.js.map +0 -1
  105. package/dist/core/sheet/Event.js.map +0 -1
  106. package/dist/core/sheet/ValueViewer.js.map +0 -1
  107. package/dist/core/sheet/index.js.map +0 -1
  108. package/dist/core/sheet/useCellEvent.js.map +0 -1
  109. package/dist/core/sheet/useContextMenu.js.map +0 -1
  110. package/dist/core/sheet/useKeyBoardEvent.js.map +0 -1
  111. package/dist/core/sheet/useMouseEvent.js.map +0 -1
  112. package/dist/core/sheet/useVirtualList.js.map +0 -1
  113. package/dist/core/shell/draggableShell/index.js.map +0 -1
  114. package/dist/core/shell/tableShell.js.map +0 -1
  115. package/dist/core/table/index.js.map +0 -1
  116. package/dist/core/table/useGroupConfig.js.map +0 -1
  117. package/dist/core/table/useRowSelection.js.map +0 -1
  118. package/dist/core/table/util.js.map +0 -1
  119. package/dist/core/util.js.map +0 -1
  120. package/dist/core/viewer/btnViewer/index.js.map +0 -1
  121. package/dist/core/viewer/checkViewer/index.js.map +0 -1
  122. package/dist/core/viewer/editViewer/index.js.map +0 -1
  123. package/dist/core/viewer/groupViewer/index.js.map +0 -1
  124. package/dist/core/viewer/index.js.map +0 -1
  125. package/dist/core/viewer/switchViewer/index.js.map +0 -1
  126. package/dist/example/antComponent.js.map +0 -1
  127. package/dist/example/basic.js.map +0 -1
  128. package/dist/example/ellipsis.js.map +0 -1
  129. package/dist/example/fixed.js.map +0 -1
  130. package/dist/example/group.js.map +0 -1
  131. package/dist/example/selection.js.map +0 -1
  132. package/dist/example/sheet.js.map +0 -1
  133. package/dist/example/valuationAnalyze.js.map +0 -1
  134. package/dist/hooks/index.js.map +0 -1
  135. package/dist/hooks/useEventBus.js.map +0 -1
  136. package/dist/hooks/useKeyboard.js.map +0 -1
  137. package/dist/hooks/useMiddlewareReducer.js.map +0 -1
  138. package/dist/hooks/useMouse.js.map +0 -1
  139. package/dist/hooks/useSetState.js.map +0 -1
  140. package/dist/hooks/useSheetEvent.js.map +0 -1
  141. package/dist/index.js.map +0 -1
  142. package/dist/standardUtils/index.js.map +0 -1
  143. package/dist/type/index.js.map +0 -1
  144. package/dist/type/sheet.js.map +0 -1
  145. package/dist/type/sheetTable.js.map +0 -1
package/README.md CHANGED
@@ -1,3 +1,4 @@
1
- # zsheet
1
+ # @zhenliang/sheet
2
2
 
3
- zsheet is a excel-like table component write in react
3
+
4
+ @zhenliang/sheet is a excel-like table component write in react
@@ -10,5 +10,4 @@ export var BACKSPACE_KEY = 8;
10
10
  export var Z_KEY = 90;
11
11
  export var C_KEY = 67;
12
12
  export var V_KEY = 86;
13
- export var X_KEY = 88;
14
- //# sourceMappingURL=config.js.map
13
+ export var X_KEY = 88;
@@ -1,7 +1,7 @@
1
1
  import { Cascader } from 'antd';
2
2
  import 'antd/es/cascader/style/index.css';
3
3
  import { useMemo } from 'react';
4
- import { optionsTransferToValue } from "../../util";
4
+ import { optionsToValuesFromLabelOrValue, valuesTransferToLabel } from "../../util";
5
5
  import "./index.less";
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
7
  var getCascaderEditor = function getCascaderEditor(options) {
@@ -9,10 +9,10 @@ var getCascaderEditor = function getCascaderEditor(options) {
9
9
  var value = props.value,
10
10
  onConfirm = props.onConfirm;
11
11
  var val = useMemo(function () {
12
- return optionsTransferToValue(options, value);
12
+ var res = optionsToValuesFromLabelOrValue(options, value);
13
+ return res;
13
14
  }, [value, options]);
14
15
  var handleChange = function handleChange(opt) {
15
- console.log(opt);
16
16
  onConfirm(opt ? opt[opt.length - 1] : null);
17
17
  };
18
18
  return /*#__PURE__*/_jsx(Cascader, {
@@ -35,11 +35,18 @@ var getCascaderEditor = function getCascaderEditor(options) {
35
35
  options: options
36
36
  });
37
37
  };
38
+ CascaderEditor.formatter = function (value) {
39
+ var res = optionsToValuesFromLabelOrValue(options, value);
40
+ return !(res !== null && res !== void 0 && res.length) ? '' : valuesTransferToLabel(options, res[res.length - 1]);
41
+ };
42
+ CascaderEditor.parser = function (value) {
43
+ var res = optionsToValuesFromLabelOrValue(options, value);
44
+ return res.length ? res[res.length - 1] : null;
45
+ };
38
46
  CascaderEditor.checker = function (value) {
39
- var res = optionsTransferToValue(options, value);
40
- return res && res.length > 0;
47
+ var res = optionsToValuesFromLabelOrValue(options, value);
48
+ return !!res.length;
41
49
  };
42
50
  return CascaderEditor;
43
51
  };
44
- export default getCascaderEditor;
45
- //# sourceMappingURL=index.js.map
52
+ export default getCascaderEditor;
@@ -1,4 +1,5 @@
1
+ import { DatePickerProps } from 'antd';
1
2
  import 'antd/es/date-picker/style/index.css';
2
3
  import type { SheetType } from "../../../type";
3
4
  import './index.less';
4
- export declare const DateEditor: SheetType.CellEditor;
5
+ export declare const getDateEditor: (dateProps?: Pick<DatePickerProps, 'disabledDate' | 'disabled' | 'allowClear' | 'placeholder'>) => SheetType.CellEditor;
@@ -1,43 +1,51 @@
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); }
1
7
  import { DatePicker } from 'antd';
2
8
  import 'antd/es/date-picker/style/index.css';
3
9
  import moment from 'moment';
4
10
  import { useEffect, useMemo, useRef } from 'react';
5
11
  import "./index.less";
6
12
  import { jsx as _jsx } from "react/jsx-runtime";
7
- export var DateEditor = function DateEditor(props) {
8
- var value = props.value,
9
- onChange = props.onChange,
10
- onConfirm = props.onConfirm;
11
- var dateRef = useRef(null);
12
- useEffect(function () {
13
- var _dateRef$current;
14
- dateRef === null || dateRef === void 0 ? void 0 : (_dateRef$current = dateRef.current) === null || _dateRef$current === void 0 ? void 0 : _dateRef$current.focus();
15
- }, []);
16
- var val = useMemo(function () {
17
- return value && moment(value);
18
- }, [value]);
19
- var handleChange = function handleChange(value) {
20
- onChange(value === null || value === void 0 ? void 0 : value.format('YYYY-MM-DD'));
21
- onConfirm(value === null || value === void 0 ? void 0 : value.format('YYYY-MM-DD'));
13
+ export var getDateEditor = function getDateEditor(dateProps) {
14
+ var DateEditor = function DateEditor(props) {
15
+ var value = props.value,
16
+ onChange = props.onChange,
17
+ onConfirm = props.onConfirm;
18
+ var dateRef = useRef(null);
19
+ useEffect(function () {
20
+ var _dateRef$current;
21
+ dateRef === null || dateRef === void 0 ? void 0 : (_dateRef$current = dateRef.current) === null || _dateRef$current === void 0 ? void 0 : _dateRef$current.focus();
22
+ }, []);
23
+ var val = useMemo(function () {
24
+ return value && moment(value);
25
+ }, [value]);
26
+ var handleChange = function handleChange(value) {
27
+ onChange(value === null || value === void 0 ? void 0 : value.format('YYYY-MM-DD'));
28
+ onConfirm(value === null || value === void 0 ? void 0 : value.format('YYYY-MM-DD'));
29
+ };
30
+ return /*#__PURE__*/_jsx(DatePicker, _objectSpread({
31
+ open: true,
32
+ ref: dateRef,
33
+ className: "date-editor",
34
+ value: val,
35
+ onMouseDown: function onMouseDown(e) {
36
+ return e.stopPropagation();
37
+ },
38
+ onChange: handleChange
39
+ }, dateProps));
22
40
  };
23
- return /*#__PURE__*/_jsx(DatePicker, {
24
- open: true,
25
- ref: dateRef,
26
- className: "date-editor",
27
- value: val,
28
- onMouseDown: function onMouseDown(e) {
29
- return e.stopPropagation();
30
- },
31
- onChange: handleChange
32
- });
33
- };
34
- DateEditor.checker = function (value) {
35
- var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/;
36
- return reg.test(value);
37
- };
38
- DateEditor.formatter = function (value) {
39
- var _DateEditor$checker;
40
- if (!(DateEditor !== null && DateEditor !== void 0 && (_DateEditor$checker = DateEditor.checker) !== null && _DateEditor$checker !== void 0 && _DateEditor$checker.call(DateEditor, value))) return null;
41
- return value.replace('/', '-').replace('/', '-');
42
- };
43
- //# sourceMappingURL=index.js.map
41
+ DateEditor.checker = function (value) {
42
+ var reg = /^[1-9]\d{3}(-|\/)(0[1-9]|1[0-2])(-|\/)(0[1-9]|[1-2][0-9]|3[0-1])$/;
43
+ return reg.test(value);
44
+ };
45
+ DateEditor.formatter = function (value) {
46
+ var _DateEditor$checker;
47
+ if (!(DateEditor !== null && DateEditor !== void 0 && (_DateEditor$checker = DateEditor.checker) !== null && _DateEditor$checker !== void 0 && _DateEditor$checker.call(DateEditor, value))) return null;
48
+ return value.replace('/', '-').replace('/', '-');
49
+ };
50
+ return DateEditor;
51
+ };
@@ -1,4 +1,4 @@
1
1
  export { default as getCascaderEditor } from './cascaderEditor';
2
- export { DateEditor } from './dateEditor';
2
+ export { getDateEditor } from './dateEditor';
3
3
  export { getNumberEditor, NumberEditor } from './numberEditor';
4
4
  export { default as getSelectEditor } from './selectEditor';
@@ -1,5 +1,4 @@
1
1
  export { default as getCascaderEditor } from "./cascaderEditor";
2
- export { DateEditor } from "./dateEditor";
2
+ export { getDateEditor } from "./dateEditor";
3
3
  export { getNumberEditor, NumberEditor } from "./numberEditor";
4
- export { default as getSelectEditor } from "./selectEditor";
5
- //# sourceMappingURL=index.js.map
4
+ export { default as getSelectEditor } from "./selectEditor";
@@ -3,4 +3,4 @@ import { InputNumberProps } from 'antd';
3
3
  import 'antd/es/input-number/style/index.css';
4
4
  import './index.less';
5
5
  export declare const NumberEditor: SheetType.CellEditor;
6
- export declare const getNumberEditor: (extraProps: Pick<InputNumberProps, 'max' | 'min' | 'addonBefore' | 'addonAfter' | 'precision'>) => SheetType.CellEditor;
6
+ export declare const getNumberEditor: (extraProps?: Pick<InputNumberProps, 'max' | 'min' | 'addonBefore' | 'addonAfter' | 'precision'>) => SheetType.CellEditor;
@@ -1,12 +1,17 @@
1
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
+ var _excluded = ["precision"];
2
3
  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
4
  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
5
  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
6
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
7
  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); }
8
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
9
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
10
+ import { formatPrecision } from "../../../standardUtils";
7
11
  import { InputNumber as AntInputNumber } from 'antd';
8
12
  import 'antd/es/input-number/style/index.css';
9
- import { useEffect, useRef } from 'react';
13
+ import { isNil } from 'lodash';
14
+ import { useCallback, useEffect, useRef } from 'react';
10
15
  import "./index.less";
11
16
  import { jsx as _jsx } from "react/jsx-runtime";
12
17
  export var NumberEditor = function NumberEditor(props) {
@@ -38,18 +43,61 @@ export var getNumberEditor = function getNumberEditor(extraProps) {
38
43
  var _inputNumberRef$curre2;
39
44
  inputNumberRef === null || inputNumberRef === void 0 ? void 0 : (_inputNumberRef$curre2 = inputNumberRef.current) === null || _inputNumberRef$curre2 === void 0 ? void 0 : _inputNumberRef$curre2.focus();
40
45
  }, []);
46
+ var _ref = extraProps || {},
47
+ precision = _ref.precision,
48
+ inputArgs = _objectWithoutProperties(_ref, _excluded);
49
+ var valueFormatter = useCallback(function (value) {
50
+ if (!value) {
51
+ return '';
52
+ }
53
+ if (typeof value === 'string') {
54
+ return value;
55
+ }
56
+ var hasDecimal = value - Math.floor(value) > 0;
57
+ if (hasDecimal) {
58
+ return formatPrecision(value, precision);
59
+ }
60
+ return String(value);
61
+ }, []);
62
+ var handleChange = useCallback(function (value) {
63
+ onChange && onChange(value ? value : null);
64
+ }, [onChange]);
41
65
  return /*#__PURE__*/_jsx(AntInputNumber, _objectSpread(_objectSpread({
42
66
  ref: inputNumberRef
43
- }, extraProps), {}, {
67
+ }, inputArgs), {}, {
68
+ formatter: valueFormatter,
44
69
  controls: false,
45
70
  className: "number-editor",
46
71
  onMouseDown: function onMouseDown(e) {
47
72
  return e.stopPropagation();
48
73
  },
49
74
  value: value,
50
- onChange: onChange
75
+ onChange: handleChange
51
76
  }));
52
77
  };
78
+ NumberEditor.formatter = function (value) {
79
+ var _String;
80
+ if (isNil(value) || isNaN(value)) {
81
+ return null;
82
+ }
83
+ var result = parseFloat((_String = String(value)) === null || _String === void 0 ? void 0 : _String.replace(/,/g, ''));
84
+ return result;
85
+ };
86
+ NumberEditor.parser = function (value) {
87
+ var _extraProps$precision;
88
+ if (isNil(value) || isNaN(value)) {
89
+ return null;
90
+ }
91
+ return Number(formatPrecision(value, (_extraProps$precision = extraProps === null || extraProps === void 0 ? void 0 : extraProps.precision) !== null && _extraProps$precision !== void 0 ? _extraProps$precision : 0));
92
+ };
93
+ NumberEditor.checker = function (value) {
94
+ var _String2;
95
+ // parse number with thousands separator
96
+ var result = parseFloat((_String2 = String(value)) === null || _String2 === void 0 ? void 0 : _String2.replace(/,/g, ''));
97
+ if (isNaN(result) || isNaN(value)) {
98
+ return false;
99
+ }
100
+ return true;
101
+ };
53
102
  return NumberEditor;
54
- };
55
- //# sourceMappingURL=index.js.map
103
+ };
@@ -3,6 +3,7 @@
3
3
  background: transparent !important;
4
4
  width:100%;
5
5
  height: 38px;
6
+ font-size: 12px;
6
7
  box-shadow: none !important;
7
8
  text-align: inherit !important;
8
9
 
@@ -1,5 +1,5 @@
1
1
  import type { SheetType } from "../../../type";
2
2
  import 'antd/es/select/style/index.css';
3
3
  import './index.less';
4
- export declare const getSelectEditor: (options: SheetType.Options[]) => SheetType.CellEditor;
4
+ export declare const getSelectEditor: (options: SheetType.Options[], valueKey?: string, extra?: React.ReactNode) => SheetType.CellEditor;
5
5
  export default getSelectEditor;
@@ -1,8 +1,15 @@
1
+ /* eslint-disable eqeqeq */
2
+
1
3
  import { Select } from 'antd';
2
4
  import 'antd/es/select/style/index.css';
5
+ import { isNil } from 'lodash';
3
6
  import "./index.less";
7
+ import { Fragment as _Fragment } from "react/jsx-runtime";
4
8
  import { jsx as _jsx } from "react/jsx-runtime";
9
+ import { jsxs as _jsxs } from "react/jsx-runtime";
5
10
  export var getSelectEditor = function getSelectEditor(options) {
11
+ var valueKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'value';
12
+ var extra = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : /*#__PURE__*/_jsx(_Fragment, {});
6
13
  var SelectEditor = function SelectEditor(props) {
7
14
  var value = props.value,
8
15
  onConfirm = props.onConfirm;
@@ -16,6 +23,11 @@ export var getSelectEditor = function getSelectEditor(options) {
16
23
  ev.persist();
17
24
  }
18
25
  };
26
+ var dropdown = function dropdown(menu) {
27
+ return /*#__PURE__*/_jsxs(_Fragment, {
28
+ children: [menu, extra]
29
+ });
30
+ };
19
31
  return /*#__PURE__*/_jsx(Select, {
20
32
  autoFocus: true,
21
33
  className: "select-editor",
@@ -25,21 +37,38 @@ export var getSelectEditor = function getSelectEditor(options) {
25
37
  onMouseDown: function onMouseDown(e) {
26
38
  e.stopPropagation();
27
39
  },
28
- value: value,
40
+ value: SelectEditor.formatter ? SelectEditor.formatter(value) : value,
29
41
  onChange: handleChange,
30
42
  onKeyDown: handleKeyDown,
31
43
  options: options,
32
- popupClassName: 'excelTablePopupClassName'
44
+ popupClassName: 'excelTablePopupClassName',
45
+ dropdownRender: dropdown
33
46
  });
34
47
  };
35
48
  SelectEditor.checker = function (value) {
49
+ if (isNil(value)) return true;
36
50
  return options.some(function (item) {
37
- return item.value === value;
51
+ return item.value == value;
38
52
  }) || options.some(function (item) {
39
53
  return item.label === value;
40
54
  });
41
55
  };
56
+ SelectEditor.parser = function (value) {
57
+ var _options$find, _options$find2;
58
+ return ((_options$find = options.find(function (item) {
59
+ return item.value == value;
60
+ })) === null || _options$find === void 0 ? void 0 : _options$find[valueKey]) || ((_options$find2 = options.find(function (item) {
61
+ return item.label === value;
62
+ })) === null || _options$find2 === void 0 ? void 0 : _options$find2[valueKey]);
63
+ };
64
+ SelectEditor.formatter = function (value) {
65
+ var _options$find3, _options$find4;
66
+ return ((_options$find3 = options.find(function (item) {
67
+ return item.value == value;
68
+ })) === null || _options$find3 === void 0 ? void 0 : _options$find3.label) || ((_options$find4 = options.find(function (item) {
69
+ return item.label === value;
70
+ })) === null || _options$find4 === void 0 ? void 0 : _options$find4.label);
71
+ };
42
72
  return SelectEditor;
43
73
  };
44
- export default getSelectEditor;
45
- //# sourceMappingURL=index.js.map
74
+ export default getSelectEditor;
@@ -1,5 +1,5 @@
1
1
  import type { SheetType } from "../../type";
2
- export declare type SheetAction = 'change' | 'changes' | 'rowMove' | 'colMove' | 'editFinish' | 'pushHistory' | 'selectRow' | 'clearSelect' | 'clearSelectIfNotSingleRow' | 'clearEdit' | 'mouseDown' | 'mouseOver' | 'mouseUp' | 'loseFocus' | 'doubleClick' | 'mouseLeaveInterval' | 'move' | 'escape' | 'reverse' | 'delete' | 'enter' | 'otherInput' | 'none';
2
+ export declare type SheetAction = 'change' | 'changes' | 'rowMove' | 'colMove' | 'editFinish' | 'pushHistory' | 'popHistory' | 'selectRow' | 'select' | 'clearSelect' | 'clearSelectIfNotSingleRow' | 'clearEdit' | 'mouseDown' | 'mouseOver' | 'mouseUp' | 'loseFocus' | 'doubleClick' | 'mouseLeaveInterval' | 'move' | 'escape' | 'reverse' | 'delete' | 'enter' | 'otherInput' | 'none';
3
3
  export declare type reducerAction = (type: Partial<SheetType.UpdateStateType>, payload?: unknown) => Partial<SheetType.UpdateStateType>;
4
4
  declare const sheetReducer: (state: Partial<SheetType.UpdateStateType>, action: {
5
5
  type: SheetAction;
@@ -9,7 +9,9 @@ var sheetReducer = function sheetReducer(state, action) {
9
9
  case 'colMove':
10
10
  case 'editFinish':
11
11
  case 'pushHistory':
12
+ case 'popHistory':
12
13
  case 'selectRow':
14
+ case 'select':
13
15
  case 'clearSelect':
14
16
  case 'clearSelectIfNotSingleRow':
15
17
  case 'clearEdit':
@@ -33,5 +35,4 @@ var sheetReducer = function sheetReducer(state, action) {
33
35
  }
34
36
  };
35
37
  export default sheetReducer;
36
- export { sideEffectReducer } from "./sideEffectReducer";
37
- //# sourceMappingURL=index.js.map
38
+ export { sideEffectReducer } from "./sideEffectReducer";
@@ -17,7 +17,7 @@ export var keyboardReducer = {
17
17
  data = _state$data === void 0 ? [] : _state$data;
18
18
  var newRow = (((_state$start = state.start) === null || _state$start === void 0 ? void 0 : _state$start.row) || 0) + row;
19
19
  if (groupConfig) {
20
- newRow = getNextVisibleRow(newRow, data.length, groupConfigToGroupMap(groupConfig));
20
+ newRow = getNextVisibleRow(newRow, data.length, groupConfigToGroupMap(groupConfig), row < 0 ? -1 : 1);
21
21
  }
22
22
  var currentPos = {
23
23
  row: newRow,
@@ -90,5 +90,4 @@ export var keyboardReducer = {
90
90
  if (state.editing) return state;
91
91
  return keyboardReducer.enter(state, payload);
92
92
  }
93
- };
94
- //# sourceMappingURL=keyboardReducer.js.map
93
+ };
@@ -161,5 +161,4 @@ export var mouseReducer = {
161
161
  end: end
162
162
  });
163
163
  }
164
- };
165
- //# sourceMappingURL=mouseReducer.js.map
164
+ };
@@ -23,13 +23,13 @@ export var sideEffectReducer = {
23
23
  dispatch(function () {
24
24
  var _getState2 = getState(),
25
25
  cellChangeHandler = _getState2.cellChangeHandler;
26
- cellChangeHandler && cellChangeHandler([cell]);
27
26
  dispatch({
28
27
  type: 'editFinish',
29
28
  payload: {
30
29
  cell: cell
31
30
  }
32
31
  });
32
+ cellChangeHandler && cellChangeHandler([cell]);
33
33
  });
34
34
  });
35
35
  eventBus.on('cell-create', function (_ref) {
@@ -131,9 +131,13 @@ export var sideEffectReducer = {
131
131
  end = _getState7.end,
132
132
  data = _getState7.data,
133
133
  groupConfig = _getState7.groupConfig;
134
+ if (!start || !end) {
135
+ return;
136
+ }
134
137
  var cellIndex = flatRowColIndex(start, end);
135
138
  var groupMap = groupConfigToGroupMap(groupConfig);
136
139
  var copyData = cellIndex.reduce(function (left, _ref3) {
140
+ var _data$row$col$dataEdi, _data$row$col$dataEdi2, _data$row$col$dataEdi3;
137
141
  var _ref3$row = _ref3.row,
138
142
  row = _ref3$row === void 0 ? 0 : _ref3$row,
139
143
  _ref3$col = _ref3.col,
@@ -150,7 +154,9 @@ export var sideEffectReducer = {
150
154
  };
151
155
  }
152
156
  }
153
- var currentValue = "".concat(value).concat(currentRow === row ? '\t' : '\n', " ").concat(defaultValueRenderer(data[row][col]));
157
+
158
+ // 复制到剪贴板的时候执行 formatter
159
+ var currentValue = "".concat(value).concat(currentRow === row ? '\t' : '\n', " ").concat((_data$row$col$dataEdi = data[row][col].dataEditor) !== null && _data$row$col$dataEdi !== void 0 && _data$row$col$dataEdi.formatter ? (_data$row$col$dataEdi2 = data[row][col].dataEditor) === null || _data$row$col$dataEdi2 === void 0 ? void 0 : (_data$row$col$dataEdi3 = _data$row$col$dataEdi2.formatter) === null || _data$row$col$dataEdi3 === void 0 ? void 0 : _data$row$col$dataEdi3.call(_data$row$col$dataEdi2, data[row][col].value) : defaultValueRenderer(data[row][col]));
154
160
  return {
155
161
  currentRow: row,
156
162
  value: currentValue
@@ -164,14 +170,21 @@ export var sideEffectReducer = {
164
170
  },
165
171
  paste: function paste(dispatch, getState) {
166
172
  return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
167
- var _getState8, start, end, cellChangeHandler, history, _getState8$freePaste, freePaste, data, groupConfig, pasteData, changeInfo, changes, extChanges, legalChanges, legalExtChanges, newHistory;
173
+ var _extChanges$;
174
+ var _getState8, start, end, cellChangeHandler, history, _getState8$freePaste, freePaste, data, groupConfig, pasteData, changeInfo, changes, extChanges, legalChanges, lastRow, lastIndex, legalExtChanges, newHistory;
168
175
  return _regeneratorRuntime().wrap(function _callee$(_context) {
169
176
  while (1) switch (_context.prev = _context.next) {
170
177
  case 0:
171
178
  _getState8 = getState(), start = _getState8.start, end = _getState8.end, cellChangeHandler = _getState8.cellChangeHandler, history = _getState8.history, _getState8$freePaste = _getState8.freePaste, freePaste = _getState8$freePaste === void 0 ? false : _getState8$freePaste, data = _getState8.data, groupConfig = _getState8.groupConfig;
172
- _context.next = 3;
173
- return clipboardDataToString();
179
+ if (!(!start || !end)) {
180
+ _context.next = 3;
181
+ break;
182
+ }
183
+ return _context.abrupt("return");
174
184
  case 3:
185
+ _context.next = 5;
186
+ return clipboardDataToString();
187
+ case 5:
175
188
  pasteData = _context.sent;
176
189
  changeInfo = formatDataToCell(_objectSpread(_objectSpread({}, pick(getState(), ['data', 'start', 'end', 'editing'])), {}, {
177
190
  pasteData: pasteData,
@@ -179,11 +192,11 @@ export var sideEffectReducer = {
179
192
  freePaste: freePaste
180
193
  }));
181
194
  if (changeInfo) {
182
- _context.next = 7;
195
+ _context.next = 9;
183
196
  break;
184
197
  }
185
198
  return _context.abrupt("return");
186
- case 7:
199
+ case 9:
187
200
  changes = changeInfo.changes, extChanges = changeInfo.extChanges;
188
201
  legalChanges = changes.filter(function (_ref4) {
189
202
  var row = _ref4.row,
@@ -191,20 +204,49 @@ export var sideEffectReducer = {
191
204
  value = _ref4.value;
192
205
  var editor = data[row][col].dataEditor;
193
206
  if (editor && editor.checker) {
194
- return editor.checker(value);
207
+ return editor.checker(value, data[row][col].record);
195
208
  }
196
209
  return true;
210
+ }).map(function (_ref5) {
211
+ var _data$row$col, _editor$parser;
212
+ var row = _ref5.row,
213
+ col = _ref5.col,
214
+ value = _ref5.value;
215
+ var editor = data[row][col].dataEditor;
216
+ return {
217
+ row: row,
218
+ col: col,
219
+ id: (_data$row$col = data[row][col]) === null || _data$row$col === void 0 ? void 0 : _data$row$col.id,
220
+ value: editor !== null && editor !== void 0 && editor.parser ? editor === null || editor === void 0 ? void 0 : (_editor$parser = editor.parser) === null || _editor$parser === void 0 ? void 0 : _editor$parser.call(editor, value) : value
221
+ };
197
222
  });
198
- legalExtChanges = extChanges === null || extChanges === void 0 ? void 0 : extChanges.filter(function (_ref5) {
199
- var value = _ref5.value,
200
- col = _ref5.col;
223
+ lastRow = extChanges === null || extChanges === void 0 ? void 0 : (_extChanges$ = extChanges[0]) === null || _extChanges$ === void 0 ? void 0 : _extChanges$.row;
224
+ lastIndex = 1;
225
+ legalExtChanges = extChanges === null || extChanges === void 0 ? void 0 : extChanges.filter(function (_ref6) {
226
+ var value = _ref6.value,
227
+ col = _ref6.col;
201
228
  var editor = data[0][col].dataEditor;
202
229
  if (editor && editor.checker) {
203
230
  return editor.checker(value);
204
231
  }
205
232
  return true;
233
+ }).map(function (_ref7) {
234
+ var _editor$parser2;
235
+ var row = _ref7.row,
236
+ col = _ref7.col,
237
+ value = _ref7.value;
238
+ var editor = data[0][col].dataEditor;
239
+ if (lastRow !== row) {
240
+ lastRow = row;
241
+ lastIndex++;
242
+ }
243
+ return {
244
+ row: row,
245
+ col: col,
246
+ value: editor !== null && editor !== void 0 && editor.parser ? editor === null || editor === void 0 ? void 0 : (_editor$parser2 = editor.parser) === null || _editor$parser2 === void 0 ? void 0 : _editor$parser2.call(editor, value) : value,
247
+ id: -lastIndex
248
+ };
206
249
  });
207
- cellChangeHandler && cellChangeHandler(legalChanges, legalExtChanges);
208
250
  newHistory = _toConsumableArray(history || []);
209
251
  newHistory.push({
210
252
  changes: legalChanges.map(function (item) {
@@ -226,7 +268,8 @@ export var sideEffectReducer = {
226
268
  }
227
269
  }
228
270
  });
229
- case 14:
271
+ cellChangeHandler && cellChangeHandler(legalChanges, freePaste ? legalExtChanges : []);
272
+ case 18:
230
273
  case "end":
231
274
  return _context.stop();
232
275
  }
@@ -254,12 +297,13 @@ export var sideEffectReducer = {
254
297
  var _groupMap$get3, _groupMap$get4;
255
298
  return !(groupMap.get(item.row) && !((_groupMap$get3 = groupMap.get(item.row)) !== null && _groupMap$get3 !== void 0 && _groupMap$get3.isStart) && !((_groupMap$get4 = groupMap.get(item.row)) !== null && _groupMap$get4 !== void 0 && _groupMap$get4.isOpen));
256
299
  }).map(function (item) {
257
- var _data$item$row2;
300
+ var _data$item$row2, _data$item$row3;
258
301
  return {
259
302
  cell: data === null || data === void 0 ? void 0 : (_data$item$row2 = data[item.row]) === null || _data$item$row2 === void 0 ? void 0 : _data$item$row2[item.col],
260
303
  row: item.row,
261
304
  col: item.col,
262
- value: ''
305
+ value: null,
306
+ id: data === null || data === void 0 ? void 0 : (_data$item$row3 = data[item.row]) === null || _data$item$row3 === void 0 ? void 0 : _data$item$row3[item.col].id
263
307
  };
264
308
  });
265
309
  var newHistory = _toConsumableArray(history || []);
@@ -271,13 +315,13 @@ export var sideEffectReducer = {
271
315
  }),
272
316
  type: 'Delete'
273
317
  });
274
- cellChangeHandler && cellChangeHandler(changes);
275
318
  dispatch({
276
319
  type: 'changes',
277
320
  payload: {
278
321
  history: newHistory
279
322
  }
280
323
  });
324
+ cellChangeHandler && cellChangeHandler(changes);
281
325
  },
282
326
  reverse: function reverse(dispatch, getState) {
283
327
  var _getState10 = getState(),
@@ -287,19 +331,11 @@ export var sideEffectReducer = {
287
331
  cellChangeHandler = _getState10.cellChangeHandler,
288
332
  eventBus = _getState10.eventBus;
289
333
  if (!(history !== null && history !== void 0 && history.length)) return;
290
- console.log(history.length);
291
334
  var changeHistory = _toConsumableArray(history);
292
335
  var change = changeHistory.pop();
293
336
  var type = change.type;
294
337
  if (!['Edit', 'Paste', 'Delete'].includes(type)) {
295
338
  eventBus.emit('reverse', change);
296
- if (type === 'DeleteRow') {
297
- // console.log(change.rowInfo?.deleteRow);
298
- // dispatch({
299
- // type: 'selectRow',
300
- // payload: change.rowInfo?.deleteRow as number,
301
- // });
302
- }
303
339
  dispatch({
304
340
  type: 'changes',
305
341
  payload: {
@@ -322,5 +358,4 @@ export var sideEffectReducer = {
322
358
  }
323
359
  });
324
360
  }
325
- };
326
- //# sourceMappingURL=sideEffectReducer.js.map
361
+ };