@zhenliang/sheet 0.0.2 → 0.0.4

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.
@@ -1,5 +1,5 @@
1
1
  import type { SheetType } from "../../../type";
2
2
  import 'antd/es/cascader/style/index.css';
3
3
  import './index.less';
4
- declare const getCascaderEditor: (options: SheetType.OptionsType[]) => void;
4
+ declare const getCascaderEditor: (options: SheetType.OptionsType[]) => SheetType.CellEditor;
5
5
  export default getCascaderEditor;
@@ -39,5 +39,6 @@ var getCascaderEditor = function getCascaderEditor(options) {
39
39
  var res = optionsTransferToValue(options, value);
40
40
  return res && res.length > 0;
41
41
  };
42
+ return CascaderEditor;
42
43
  };
43
44
  export default getCascaderEditor;
@@ -4,4 +4,8 @@
4
4
  box-shadow: none !important;
5
5
  background: transparent !important;
6
6
  height: 20px;
7
+
8
+ input{
9
+ font-size: var(--cell-font-size);
10
+ }
7
11
  }
@@ -1,4 +1,4 @@
1
1
  export { default as getCascaderEditor } from './cascaderEditor';
2
2
  export { DateEditor } from './dateEditor';
3
- export { NumberEditor } from './numberEditor';
3
+ export { getNumberEditor, NumberEditor } from './numberEditor';
4
4
  export { default as getSelectEditor } from './selectEditor';
@@ -1,4 +1,4 @@
1
1
  export { default as getCascaderEditor } from "./cascaderEditor";
2
2
  export { DateEditor } from "./dateEditor";
3
- export { NumberEditor } from "./numberEditor";
3
+ export { getNumberEditor, NumberEditor } from "./numberEditor";
4
4
  export { default as getSelectEditor } from "./selectEditor";
@@ -1,4 +1,6 @@
1
1
  import type { SheetType } from "../../../type";
2
+ import { InputNumberProps } from 'antd';
2
3
  import 'antd/es/input-number/style/index.css';
3
4
  import './index.less';
4
5
  export declare const NumberEditor: SheetType.CellEditor;
6
+ export declare const getNumberEditor: (extraProps: Pick<InputNumberProps, 'max' | 'min' | 'addonBefore' | 'addonAfter' | 'precision'>) => SheetType.CellEditor;
@@ -1,3 +1,9 @@
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 { InputNumber as AntInputNumber } from 'antd';
2
8
  import 'antd/es/input-number/style/index.css';
3
9
  import { useEffect, useRef } from 'react';
@@ -22,4 +28,27 @@ export var NumberEditor = function NumberEditor(props) {
22
28
  addonAfter: "%",
23
29
  onChange: onChange
24
30
  });
31
+ };
32
+ export var getNumberEditor = function getNumberEditor(extraProps) {
33
+ var NumberEditor = function NumberEditor(props) {
34
+ var value = props.value,
35
+ onChange = props.onChange;
36
+ var inputNumberRef = useRef(null);
37
+ useEffect(function () {
38
+ var _inputNumberRef$curre2;
39
+ inputNumberRef === null || inputNumberRef === void 0 ? void 0 : (_inputNumberRef$curre2 = inputNumberRef.current) === null || _inputNumberRef$curre2 === void 0 ? void 0 : _inputNumberRef$curre2.focus();
40
+ }, []);
41
+ return /*#__PURE__*/_jsx(AntInputNumber, _objectSpread(_objectSpread({
42
+ ref: inputNumberRef
43
+ }, extraProps), {}, {
44
+ controls: false,
45
+ className: "number-editor",
46
+ onMouseDown: function onMouseDown(e) {
47
+ return e.stopPropagation();
48
+ },
49
+ value: value,
50
+ onChange: onChange
51
+ }));
52
+ };
53
+ return NumberEditor;
25
54
  };
@@ -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: any) => SheetType.CellEditor;
4
+ export declare const getSelectEditor: (options: SheetType.Options[]) => SheetType.CellEditor;
5
5
  export default getSelectEditor;
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
2
  export declare const SheetEvent: FC<{
3
- handler: (value: unknown) => void;
3
+ handler?: (value: unknown) => void;
4
4
  name: string;
5
5
  }>;
@@ -5,7 +5,7 @@ export var SheetEvent = function SheetEvent(_ref) {
5
5
  name = _ref.name;
6
6
  var eventBus = useSheetEvent();
7
7
  useEffect(function () {
8
- if (!eventBus) {
8
+ if (!eventBus || !handler) {
9
9
  return;
10
10
  }
11
11
  eventBus.on(name, handler);
@@ -41,7 +41,10 @@ span.harvest-sheet-container, span.harvest-sheet-container:focus {
41
41
  .harvest-sheet-container .harvest-sheet .cell {
42
42
  height: 17px;
43
43
  font-size: var(--cell-font-size);
44
- padding:var(--cell-padding-vertical);
44
+ padding-left:var(--cell-padding-horizontal);
45
+ padding-right:var(--cell-padding-horizontal);
46
+ padding-top:var(--cell-padding-vertical);
47
+ padding-bottom:var(--cell-padding-vertical);
45
48
  border: 1px solid var(--cell-border-color);
46
49
  background-color: var(--cell-background-color);
47
50
  cursor: cell;
@@ -143,6 +146,7 @@ span.harvest-sheet-container, span.harvest-sheet-container:focus {
143
146
  .harvest-sheet-container .harvest-sheet .cell.sheet-control{
144
147
  border-right: 1px solid transparent;
145
148
  background: var(--cell-background-color) ;
149
+ color:var(--read-color);
146
150
  // position: relative !important;
147
151
  }
148
152
 
@@ -176,6 +180,7 @@ span.harvest-sheet-container, span.harvest-sheet-container:focus {
176
180
  .harvest-sheet-container .harvest-sheet .cell > input {
177
181
  display: block;
178
182
  width: calc(100% - 6px);
183
+ font-size: var(--cell-font-size);
179
184
  height: 11px;
180
185
  border: 2px solid rgb(33, 133, 208);
181
186
  background: none;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
- import type { SheetTableType } from "../../type";
2
+ import { SheetTableType } from "../../type";
3
3
  declare const Table: React.FC<SheetTableType.TableProps>;
4
4
  export default Table;
@@ -1,5 +1,5 @@
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 = ["columns", "dataSource", "rowKey", "rowSelection", "groupConfig", "onChange", "draggable"];
2
+ var _excluded = ["sheetInstance", "columns", "dataSource", "rowKey", "rowSelection", "groupConfig", "onChange", "handleAdd", "draggable", "eventHandler"];
3
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; }
4
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; }
5
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; }
@@ -18,6 +18,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
18
18
  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; }
19
19
  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; }
20
20
  import { Sheet } from "../..";
21
+ import { Button } from 'antd';
21
22
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
22
23
  import { SheetEvent } from "../sheet/Event";
23
24
  import { DraggableShell } from "../shell/draggableShell";
@@ -30,19 +31,23 @@ import { useRowSelection } from "./useRowSelection";
30
31
  import { jsx as _jsx } from "react/jsx-runtime";
31
32
  import { jsxs as _jsxs } from "react/jsx-runtime";
32
33
  var Table = function Table(_ref) {
33
- var columns = _ref.columns,
34
+ var sheetRef = _ref.sheetInstance,
35
+ columns = _ref.columns,
34
36
  dataSource = _ref.dataSource,
35
37
  rowKey = _ref.rowKey,
36
38
  rowSelection = _ref.rowSelection,
37
39
  groupConfig = _ref.groupConfig,
38
40
  onChange = _ref.onChange,
41
+ handleAdd = _ref.handleAdd,
39
42
  draggable = _ref.draggable,
43
+ eventHandler = _ref.eventHandler,
40
44
  args = _objectWithoutProperties(_ref, _excluded);
41
45
  var _useState = useState([[]]),
42
46
  _useState2 = _slicedToArray(_useState, 2),
43
47
  data = _useState2[0],
44
48
  setData = _useState2[1];
45
- var sheetInstance = useRef(null);
49
+ var _sheetInstance = useRef(null);
50
+ var sheetInstance = sheetRef || _sheetInstance;
46
51
  var hasChildren = dataSource === null || dataSource === void 0 ? void 0 : dataSource.some(function (item) {
47
52
  var _item$children;
48
53
  return (item === null || item === void 0 ? void 0 : (_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) > 0;
@@ -90,8 +95,8 @@ var Table = function Table(_ref) {
90
95
  id: rowId,
91
96
  row: currentIndex,
92
97
  col: -1,
93
- readonly: true,
94
98
  editable: false,
99
+ align: 'center',
95
100
  value: groupMap.get(currentIndex) && ((_groupMap$get = groupMap.get(currentIndex)) === null || _groupMap$get === void 0 ? void 0 : _groupMap$get.isStart),
96
101
  record: {
97
102
  open: groupMap.get(currentIndex) && ((_groupMap$get2 = groupMap.get(currentIndex)) === null || _groupMap$get2 === void 0 ? void 0 : _groupMap$get2.isOpen)
@@ -140,6 +145,7 @@ var Table = function Table(_ref) {
140
145
  row: row,
141
146
  col: -1,
142
147
  readonly: true,
148
+ align: 'center',
143
149
  value: checkedRow[row],
144
150
  valueViewer: CheckViewer,
145
151
  className: 'sheet-control'
@@ -305,7 +311,20 @@ var Table = function Table(_ref) {
305
311
  }, "group-open-title")] : null, /*#__PURE__*/_jsx(SheetEvent, {
306
312
  name: "reverse",
307
313
  handler: handleReverse
308
- })]
314
+ }, "_reverse"), Object.keys(eventHandler || {}).map(function (key) {
315
+ return /*#__PURE__*/_jsx(SheetEvent, {
316
+ name: key,
317
+ handler: eventHandler === null || eventHandler === void 0 ? void 0 : eventHandler[key]
318
+ }, key);
319
+ }), handleAdd ? /*#__PURE__*/_jsx(Button, {
320
+ type: "dashed",
321
+ style: {
322
+ width: '100%',
323
+ height: 32
324
+ },
325
+ onClick: handleAdd,
326
+ children: "+ \u6DFB\u52A0"
327
+ }) : null]
309
328
  }));
310
329
  };
311
330
  export default Table;
@@ -0,0 +1,2 @@
1
+ import type { SheetType } from "../../../type";
2
+ export declare const BtnViewer: SheetType.CellViewer;
@@ -0,0 +1,37 @@
1
+ import { useSheetEvent } from "../../../hooks";
2
+ import { Button, Divider } from 'antd';
3
+ import { useCallback } from 'react';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
+ export var BtnViewer = function BtnViewer(props) {
7
+ var value = props.value,
8
+ row = props.row,
9
+ record = props.record;
10
+ var eventBus = useSheetEvent();
11
+ var handleClick = useCallback(function (event) {
12
+ eventBus && eventBus.emit('btn-click', event);
13
+ }, [eventBus, row, record, value]);
14
+ return /*#__PURE__*/_jsxs("div", {
15
+ children: [/*#__PURE__*/_jsx(Button, {
16
+ type: "link",
17
+ onClick: function onClick() {
18
+ return handleClick({
19
+ row: row,
20
+ type: 'copy'
21
+ });
22
+ },
23
+ children: "\u590D\u5236"
24
+ }, "copy"), /*#__PURE__*/_jsx(Divider, {
25
+ type: "vertical"
26
+ }), /*#__PURE__*/_jsx(Button, {
27
+ type: "link",
28
+ onClick: function onClick() {
29
+ return handleClick({
30
+ row: row,
31
+ type: 'delete'
32
+ });
33
+ },
34
+ children: "\u5220\u9664"
35
+ }, "delete")]
36
+ });
37
+ };
@@ -0,0 +1,2 @@
1
+ import type { SheetType } from "../../../type";
2
+ export declare const EditViewer: SheetType.CellViewer;
@@ -0,0 +1,31 @@
1
+ import { EditFilled } from '@ant-design/icons';
2
+ import { useSheetEvent } from "../../../hooks";
3
+ import { useCallback } from 'react';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
+ export var EditViewer = function EditViewer(props) {
7
+ var value = props.value,
8
+ row = props.row,
9
+ record = props.record;
10
+ var eventBus = useSheetEvent();
11
+ var handleClick = useCallback(function () {
12
+ if (!eventBus) return;
13
+ eventBus.emit('cell-edit', {
14
+ row: row,
15
+ record: record,
16
+ value: value
17
+ });
18
+ }, [eventBus, row, record, value]);
19
+ return /*#__PURE__*/_jsxs("span", {
20
+ style: {
21
+ display: 'flex',
22
+ justifyContent: 'space-between',
23
+ color: 'green'
24
+ },
25
+ children: [/*#__PURE__*/_jsx("span", {
26
+ children: value
27
+ }), /*#__PURE__*/_jsx(EditFilled, {
28
+ onClick: handleClick
29
+ })]
30
+ });
31
+ };
@@ -0,0 +1,5 @@
1
+ export { BtnViewer } from './btnViewer';
2
+ export { CheckViewer } from './checkViewer';
3
+ export { EditViewer } from './editViewer';
4
+ export { GroupViewer } from './groupViewer';
5
+ export { SwitchViewer } from './switchViewer';
@@ -0,0 +1,5 @@
1
+ export { BtnViewer } from "./btnViewer";
2
+ export { CheckViewer } from "./checkViewer";
3
+ export { EditViewer } from "./editViewer";
4
+ export { GroupViewer } from "./groupViewer";
5
+ export { SwitchViewer } from "./switchViewer";
@@ -0,0 +1,2 @@
1
+ import type { SheetType } from "../../../type";
2
+ export declare const SwitchViewer: SheetType.CellViewer;
@@ -0,0 +1,22 @@
1
+ import { useSheetEvent } from "../../../hooks";
2
+ import { Switch } from 'antd';
3
+ import { useCallback } from 'react';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ export var SwitchViewer = function SwitchViewer(props) {
6
+ var value = props.value,
7
+ row = props.row,
8
+ record = props.record;
9
+ var eventBus = useSheetEvent();
10
+ var handleChange = useCallback(function () {
11
+ if (!eventBus) return;
12
+ eventBus.emit('cell-switch', {
13
+ row: row,
14
+ record: record,
15
+ value: value
16
+ });
17
+ }, [eventBus, row, record, value]);
18
+ return /*#__PURE__*/_jsx(Switch, {
19
+ checked: value,
20
+ onChange: handleChange
21
+ });
22
+ };
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const App: React.FC;
3
+ export default App;
@@ -0,0 +1,264 @@
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 { Modal } from 'antd';
18
+ import { cloneDeep, random } from 'lodash';
19
+ import React, { useCallback, useRef, useState } from 'react';
20
+ import { DateEditor, getCascaderEditor, getNumberEditor, getSelectEditor } from "../core/editor";
21
+ import Table from "../core/table";
22
+ import { BtnViewer } from "../core/viewer/btnViewer";
23
+ import { EditViewer } from "../core/viewer/editViewer";
24
+ import { SwitchViewer } from "../core/viewer/switchViewer";
25
+ import { jsx as _jsx } from "react/jsx-runtime";
26
+ var Precision2MoneyEditor = getNumberEditor({
27
+ max: 1000,
28
+ min: 0,
29
+ precision: 2,
30
+ addonAfter: '元'
31
+ });
32
+ var Precision2Number = getNumberEditor({
33
+ max: 1000,
34
+ min: 0,
35
+ precision: 2
36
+ });
37
+ var TypeSelector = getSelectEditor([{
38
+ value: '1',
39
+ label: '111111'
40
+ }, {
41
+ value: '2',
42
+ label: '222222'
43
+ }, {
44
+ value: '3',
45
+ label: '333333'
46
+ }]);
47
+ var CascaderSelector = getCascaderEditor([{
48
+ value: 'zhejiang',
49
+ label: 'Zhejiang',
50
+ children: [{
51
+ value: 'hangzhou',
52
+ label: 'Hangzhou',
53
+ children: [{
54
+ value: 'xihu',
55
+ label: 'West Lake'
56
+ }]
57
+ }]
58
+ }, {
59
+ value: 'jiangsu',
60
+ label: 'Jiangsu',
61
+ children: [{
62
+ value: 'nanjing',
63
+ label: 'Nanjing',
64
+ children: [{
65
+ value: 'zhonghuamen',
66
+ label: 'Zhong Hua Men'
67
+ }]
68
+ }]
69
+ }]);
70
+ var columns = [{
71
+ title: 'Full Name',
72
+ width: 100,
73
+ dataIndex: 'open',
74
+ key: 'open',
75
+ fixed: 'left',
76
+ render: SwitchViewer
77
+ }, {
78
+ title: 'Age',
79
+ width: 100,
80
+ dataIndex: 'age',
81
+ key: 'age',
82
+ editor: Precision2Number,
83
+ readonly: function readonly(value, record, row) {
84
+ return row === 1;
85
+ }
86
+ // fixed: 'left',
87
+ }, {
88
+ title: 'price',
89
+ width: 100,
90
+ dataIndex: 'price',
91
+ key: 'price',
92
+ editor: Precision2MoneyEditor,
93
+ readonly: function readonly(value, record, row) {
94
+ return row === 1;
95
+ }
96
+ // fixed: 'left',
97
+ }, {
98
+ title: 'date',
99
+ width: 150,
100
+ dataIndex: 'date',
101
+ key: 'date',
102
+ editor: DateEditor
103
+ // fixed: 'left',
104
+ }, {
105
+ title: 'select',
106
+ width: 200,
107
+ dataIndex: 'select',
108
+ editor: TypeSelector
109
+ }, {
110
+ title: 'Column 2',
111
+ width: 200,
112
+ dataIndex: 'address1',
113
+ key: '2',
114
+ editor: CascaderSelector
115
+ }, {
116
+ title: 'Column 3',
117
+ width: 200,
118
+ dataIndex: 'address2',
119
+ key: '3',
120
+ editable: false,
121
+ render: EditViewer
122
+ }, {
123
+ title: 'Column 4',
124
+ width: 200,
125
+ dataIndex: 'address3',
126
+ key: '4'
127
+ }, {
128
+ title: 'Column 5',
129
+ width: 200,
130
+ dataIndex: 'address4',
131
+ key: '5'
132
+ }, {
133
+ title: 'Column 6',
134
+ width: 200,
135
+ dataIndex: 'address5',
136
+ key: '6'
137
+ }, {
138
+ title: 'Column 7',
139
+ width: 200,
140
+ dataIndex: 'address6',
141
+ key: '7'
142
+ }, {
143
+ title: 'Column 8',
144
+ width: 200,
145
+ dataIndex: 'address7',
146
+ key: '8'
147
+ }, {
148
+ title: 'Action',
149
+ align: 'center',
150
+ key: 'operation',
151
+ fixed: 'right',
152
+ width: 150,
153
+ render: BtnViewer
154
+ }];
155
+ var data = [{
156
+ key: '1',
157
+ name: 'John Brown',
158
+ date: '2020-01-01',
159
+ open: true,
160
+ age: 32,
161
+ address1: 'West Lake',
162
+ address2: '打开对话框1',
163
+ select: '111111',
164
+ address: 'New York Park'
165
+ }, {
166
+ key: '2',
167
+ name: 'Jim Green',
168
+ open: false,
169
+ date: '1990-01-01',
170
+ address2: '打开对话框2',
171
+ age: 40,
172
+ select: '222222',
173
+ address: 'London Park'
174
+ }];
175
+ var App = function App() {
176
+ var _useState = useState(data),
177
+ _useState2 = _slicedToArray(_useState, 2),
178
+ state = _useState2[0],
179
+ setState = _useState2[1];
180
+ var sheetInstance = useRef(null);
181
+ var handleChange = useCallback(function (changes) {
182
+ var newState = cloneDeep(state);
183
+ changes.forEach(function (change) {
184
+ var row = change.row,
185
+ key = change.key,
186
+ value = change.value;
187
+ newState[row][key] = value;
188
+ });
189
+ setState(newState);
190
+ }, [state]);
191
+ var handleAdd = useCallback(function () {
192
+ var _sheetInstance$curren;
193
+ var newState = cloneDeep(state);
194
+ (_sheetInstance$curren = sheetInstance.current) === null || _sheetInstance$curren === void 0 ? void 0 : _sheetInstance$curren.pushToHistory({
195
+ type: 'NewRow',
196
+ changes: [],
197
+ rowInfo: {
198
+ newRow: newState.length
199
+ }
200
+ });
201
+ setState([].concat(_toConsumableArray(newState), [{
202
+ key: String(random()),
203
+ name: 'new',
204
+ open: false,
205
+ date: '1990-01-01',
206
+ address2: "\u6253\u5F00\u5BF9\u8BDD\u68462".concat(newState.length + 2),
207
+ age: 40 + newState.length,
208
+ select: '111111',
209
+ address: 'London Park'
210
+ }]));
211
+ }, [state]);
212
+ return /*#__PURE__*/_jsx(Table, {
213
+ sheetInstance: sheetInstance,
214
+ columns: columns,
215
+ dataSource: state,
216
+ scroll: {
217
+ x: '100%'
218
+ },
219
+ onChange: handleChange,
220
+ handleAdd: handleAdd,
221
+ eventHandler: {
222
+ reverse: function reverse(value) {
223
+ // 处理 行列删除自定义事件
224
+ var _ref = value,
225
+ type = _ref.type,
226
+ rowInfo = _ref.rowInfo;
227
+ if (type === 'Custom') {
228
+ console.log('操作');
229
+ } else if (type === 'NewRow') {
230
+ var newState = _toConsumableArray(state);
231
+ newState.splice(rowInfo === null || rowInfo === void 0 ? void 0 : rowInfo.newRow, 1);
232
+ setState(newState);
233
+ }
234
+ },
235
+ 'cell-edit': function cellEdit(value) {
236
+ var _ref2 = value,
237
+ row = _ref2.row,
238
+ cellValue = _ref2.value;
239
+ Modal.confirm({
240
+ title: "".concat(row, " - ").concat(cellValue, "\u7F16\u8F91\u70B9\u4EC0\u4E48")
241
+ });
242
+ },
243
+ 'btn-click': function btnClick(value) {
244
+ var _ref3 = value,
245
+ row = _ref3.row,
246
+ type = _ref3.type;
247
+ Modal.confirm({
248
+ title: "".concat(row, " - ").concat(type, "\u63D0\u793A\u70B9\u4EC0\u4E48")
249
+ });
250
+ },
251
+ 'cell-switch': function cellSwitch(value) {
252
+ var _ref4 = value,
253
+ row = _ref4.row,
254
+ cellValue = _ref4.value;
255
+ var newState = _toConsumableArray(state);
256
+ newState[row] = _objectSpread(_objectSpread({}, newState[row]), {}, {
257
+ open: !cellValue
258
+ });
259
+ setState(newState);
260
+ }
261
+ }
262
+ });
263
+ };
264
+ export default App;
@@ -0,0 +1,2 @@
1
+ declare const _default: () => import("react/jsx-runtime").JSX.Element;
2
+ export default _default;
@@ -0,0 +1,224 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ 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."); }
3
+ 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); }
4
+ 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; }
5
+ 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; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
+ import { getNumberEditor, getSelectEditor, Table } from "./..";
8
+ import { useCallback, useState } from 'react';
9
+ import { SwitchViewer } from "../core/viewer";
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ var RateValueInput = getNumberEditor({
12
+ addonAfter: '%',
13
+ min: 0,
14
+ max: 100
15
+ });
16
+ var ValueInput = getNumberEditor({
17
+ min: 0,
18
+ max: 100000000
19
+ });
20
+ var RateViewer = function RateViewer(props) {
21
+ var value = props.value;
22
+ return /*#__PURE__*/_jsx("span", {
23
+ children: value ? value + '%' : '-'
24
+ });
25
+ };
26
+ var data = [{
27
+ id: 2443,
28
+ draftId: '101601',
29
+ valuationType: 2,
30
+ termDiscountRate: null,
31
+ reversionDiscountRate: null,
32
+ vacancyDiscountRate: null,
33
+ discountRate: 8.5,
34
+ exitCapRate: 4.5,
35
+ gfaUnitPrice: 107350.31545913525,
36
+ nlaUnitPrice: 90130.38038659678,
37
+ totalValuation: 1622707368.4802885,
38
+ isEnabled: true
39
+ }, {
40
+ id: 2444,
41
+ draftId: '101601',
42
+ valuationType: 5,
43
+ termDiscountRate: 4.5,
44
+ reversionDiscountRate: 5.5,
45
+ vacancyDiscountRate: 5.5,
46
+ discountRate: null,
47
+ exitCapRate: null,
48
+ gfaUnitPrice: 89327.04427210477,
49
+ nlaUnitPrice: 89327.04427210477,
50
+ totalValuation: 1429232708.3536763,
51
+ isEnabled: false
52
+ }];
53
+ export default (function () {
54
+ var evaluateMethods = [{
55
+ label: 'DCF',
56
+ value: 2
57
+ }, {
58
+ label: 'T&R',
59
+ value: 5
60
+ }];
61
+ var _useState = useState(data),
62
+ _useState2 = _slicedToArray(_useState, 1),
63
+ state = _useState2[0];
64
+ var columns = [{
65
+ title: '默认使用',
66
+ dataIndex: 'isEnabled',
67
+ width: 66,
68
+ // cellType: 'operate',
69
+ readonly: function readonly(value, record) {
70
+ return !!record.valuationType;
71
+ },
72
+ render: SwitchViewer
73
+ // component: (record: any, row: number, col: number) => (
74
+ // <Switch
75
+ // disabled={isNil(record.valuationType)}
76
+ // checked={record.isEnabled}
77
+ // onChange={handleSwitchChange(record, row)}
78
+ // />
79
+ // ),
80
+ }, {
81
+ title: '评估方法',
82
+ dataIndex: 'valuationType',
83
+ width: 134,
84
+ readonly: function readonly(value, record, row) {
85
+ return !row;
86
+ },
87
+ render: function (props) {
88
+ var _evaluateMethods$find;
89
+ return /*#__PURE__*/_jsx("span", {
90
+ children: (_evaluateMethods$find = evaluateMethods.find(function (item) {
91
+ return item.value === props.value;
92
+ })) === null || _evaluateMethods$find === void 0 ? void 0 : _evaluateMethods$find.label
93
+ });
94
+ },
95
+ editor: getSelectEditor(evaluateMethods)
96
+ // calcReadOnly: (record, rowIndex) => !rowIndex,
97
+ // getSelectOptions: (record: any) => {
98
+ // if (record.valuationType === 2) {
99
+ // return evaluateMethods.slice(0, 1);
100
+ // }
101
+ // return evaluateMethods.slice(1);
102
+ // },
103
+ }, {
104
+ title: '租期内折现率',
105
+ dataIndex: 'termDiscountRate',
106
+ width: 134,
107
+ editor: RateValueInput,
108
+ viewer: RateViewer,
109
+ readonly: function readonly(value, record, row) {
110
+ return !row || isNil(record.valuationType);
111
+ }
112
+ // calcReadOnly: (record, rowIndex) => !rowIndex || isNil(record.valuationType),
113
+ }, {
114
+ title: '租期外折现率',
115
+ dataIndex: 'reversionDiscountRate',
116
+ width: 134,
117
+ viewer: RateViewer,
118
+ editor: RateValueInput,
119
+ readonly: function readonly(value, record, row) {
120
+ return !row || isNil(record.valuationType);
121
+ }
122
+ }, {
123
+ title: '空置面积折现率',
124
+ dataIndex: 'vacancyDiscountRate',
125
+ width: 134,
126
+ viewer: RateViewer,
127
+ editor: RateValueInput,
128
+ readonly: function readonly(value, record, row) {
129
+ return !row || isNil(record.valuationType);
130
+ }
131
+ }, {
132
+ title: '折现率',
133
+ dataIndex: 'discountRate',
134
+ width: 134,
135
+ viewer: RateViewer,
136
+ editor: RateValueInput,
137
+ readonly: function readonly(value, record, row) {
138
+ return !row || isNil(record.valuationType);
139
+ }
140
+ }, {
141
+ title: '退出资本化率',
142
+ dataIndex: 'exitCapRate',
143
+ width: 134,
144
+ viewer: RateViewer,
145
+ editor: RateValueInput,
146
+ readonly: function readonly(value, record, row) {
147
+ return !row || isNil(record.valuationType);
148
+ }
149
+ }, {
150
+ title: '估值单价/GFA',
151
+ dataIndex: 'gfaUnitPrice',
152
+ width: 134,
153
+ editor: ValueInput,
154
+ readonly: true
155
+ }, {
156
+ title: '估值单价/NLA',
157
+ dataIndex: 'nlaUnitPrice',
158
+ width: 134,
159
+ editor: ValueInput,
160
+ readonly: true
161
+ }, {
162
+ title: '估值',
163
+ dataIndex: 'totalValuation',
164
+ width: 134,
165
+ editor: ValueInput,
166
+ readonly: true
167
+ }, {
168
+ title: '操作',
169
+ width: 62,
170
+ dataIndex: 'id',
171
+ cellType: 'operate',
172
+ editable: false,
173
+ render: function (props) {
174
+ var row = props.row,
175
+ record = props.record;
176
+ if (row) {
177
+ return /*#__PURE__*/_jsx("div", {
178
+ children: /*#__PURE__*/_jsx(Button, {
179
+ type: "link",
180
+ onClick: function onClick() {
181
+ handleDelete(record.id);
182
+ // const infos = [{ id: record.id, row, extra: record }];
183
+ // operateCb && operateCb(4, { row, infos });
184
+ },
185
+
186
+ size: "small",
187
+ children: "\u5220\u9664"
188
+ })
189
+ });
190
+ }
191
+ return /*#__PURE__*/_jsx("div", {
192
+ className: "value-viewer number-value-viewer"
193
+ });
194
+ }
195
+
196
+ // component: (record: any, row: number, col: number, operateCb?: ExcelTableType.OperateCollector) => {
197
+ // if (row) {
198
+ // return (
199
+ // <div>
200
+ // <Button
201
+ // type="link"
202
+ // onClick={() => {
203
+ // handleDelete(record.id);
204
+ // const infos = [{ id: record.id, row, extra: record }];
205
+ // operateCb && operateCb(4, { row, infos });
206
+ // }}
207
+ // size="small"
208
+ // >
209
+ // 删除
210
+ // </Button>
211
+ // </div>
212
+ // );
213
+ // }
214
+ // return <div className="value-viewer number-value-viewer" />;
215
+ // },
216
+ }];
217
+
218
+ var handleChange = useCallback(function () {}, [state]);
219
+ return /*#__PURE__*/_jsx(Table, {
220
+ columns: columns,
221
+ dataSource: state,
222
+ onChange: handleChange
223
+ });
224
+ });
@@ -2,6 +2,11 @@
2
2
  /// <reference types="node" />
3
3
  import type { EventEmitter } from 'events';
4
4
  import { SheetTableType } from '.';
5
+ export declare enum CellAlign {
6
+ left = "left",
7
+ center = "center",
8
+ right = "right"
9
+ }
5
10
  export declare type Cell = {
6
11
  id: string;
7
12
  key?: string;
@@ -16,23 +21,23 @@ export declare type Cell = {
16
21
  dataEditor?: CellEditor;
17
22
  valueViewer?: CellViewer;
18
23
  className?: string;
19
- align?: 'left' | 'center' | 'right';
20
- fixed?: 'left' | 'right';
24
+ align?: CellAlign;
25
+ fixed?: Omit<CellAlign, 'center'>;
21
26
  value?: string | number | null;
22
27
  };
23
- export declare type CellEditorProps = {
24
- value: unknown;
25
- cell?: Cell;
26
- onChange: (value: unknown) => void;
27
- onConfirm: (value: unknown) => void;
28
- };
29
28
  export declare type CellViewerProps = {
30
29
  value: unknown;
31
30
  record?: Record<string, unknown>;
32
- row: number;
33
- col: number;
31
+ row?: number;
32
+ col?: number;
34
33
  cell?: Cell;
35
34
  };
35
+ export declare type CellEditorProps = {
36
+ value: unknown;
37
+ cell?: Cell;
38
+ onChange: (value: unknown) => void;
39
+ onConfirm: (value: unknown) => void;
40
+ } & CellViewerProps;
36
41
  export declare type CellEditor = React.FC<CellEditorProps> & {
37
42
  checker?: (value: unknown) => boolean;
38
43
  formatter?: (value: unknown) => unknown;
@@ -166,15 +171,13 @@ export declare type UpdateStateType = {
166
171
  cellChangeHandler: (cells: CellData[], additions?: CellData[]) => void;
167
172
  };
168
173
  export declare type UpdateFocus = (start: CellPosition, end: CellPosition) => void;
169
- export declare type Options<T> = {
174
+ export declare type Options<T = any> = {
170
175
  value: string;
171
176
  label: string;
172
177
  } & T;
173
178
  export declare type OptionsType = Options<{
174
179
  disabled?: boolean;
175
- children?: Options<{
176
- children?: Options<Record<string, unknown>>;
177
- }>;
180
+ children?: OptionsType[];
178
181
  }>;
179
182
  export declare type OperateHistory = {
180
183
  changes: Partial<CellData>[];
@@ -1 +1,8 @@
1
- export {};
1
+ export var CellAlign = /*#__PURE__*/function (CellAlign) {
2
+ CellAlign["left"] = "left";
3
+ CellAlign["center"] = "center";
4
+ CellAlign["right"] = "right";
5
+ return CellAlign;
6
+ }({});
7
+
8
+ // todo
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { SheetType } from '.';
2
3
  export declare type refAssertion = {
3
4
  contains?: (target: EventTarget | null) => boolean;
@@ -30,6 +31,8 @@ export declare type TableGroupConfig = {
30
31
  defaultOpen: boolean;
31
32
  };
32
33
  export declare type TableProps = {
34
+ className?: string;
35
+ sheetInstance?: React.MutableRefObject<SheetType.SheetInstance | null>;
33
36
  columns: ColumnProps[];
34
37
  virtualized?: boolean;
35
38
  dataSource: Record<string, unknown>[];
@@ -50,4 +53,6 @@ export declare type TableProps = {
50
53
  onChange: (value: TableGroupConfig) => void;
51
54
  };
52
55
  onChange: (changes: TableChange[]) => void;
56
+ handleAdd?: () => void;
57
+ eventHandler?: Record<'btn-click' | 'cell-edit' | 'cell-switch' | string, undefined | ((value: unknown) => void)>;
53
58
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhenliang/sheet",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "A react library developed with dumi",
5
5
  "license": "MIT",
6
6
  "module": "dist/index.js",