@zhenliang/sheet 0.1.87-beta → 0.1.87-beta.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.
@@ -35,7 +35,11 @@ export var sideEffectReducer = {
35
35
  cell: cell
36
36
  }
37
37
  });
38
- cellChangeHandler && cellChangeHandler([cell], undefined, 'Edit');
38
+ // 这里需要使用 Promise.resolve() 来确保 cellChangeHandler 在微任务队列中执行
39
+ // 以确保里面的 history 对象是最新
40
+ Promise.resolve().then(function () {
41
+ cellChangeHandler && cellChangeHandler([cell], undefined, 'Edit');
42
+ });
39
43
  });
40
44
  });
41
45
  eventBus.on('cell-create', function (_ref) {
@@ -143,17 +147,12 @@ export var sideEffectReducer = {
143
147
  });
144
148
  }
145
149
  },
146
- emitOpenGroup: function emitOpenGroup(d, getState) {
147
- var _getState7 = getState(),
148
- eventBus = _getState7.eventBus;
149
- eventBus === null || eventBus === void 0 || eventBus.emit('group-open-title', true);
150
- },
151
150
  copy: function copy(d, getState) {
152
- var _getState8 = getState(),
153
- start = _getState8.start,
154
- end = _getState8.end,
155
- data = _getState8.data,
156
- groupConfig = _getState8.groupConfig;
151
+ var _getState7 = getState(),
152
+ start = _getState7.start,
153
+ end = _getState7.end,
154
+ data = _getState7.data,
155
+ groupConfig = _getState7.groupConfig;
157
156
  if (!start || !end) {
158
157
  return;
159
158
  }
@@ -211,11 +210,11 @@ export var sideEffectReducer = {
211
210
  paste: function paste(dispatch, getState) {
212
211
  return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
213
212
  var _extChanges$;
214
- var _getState9, start, end, cellChangeHandler, history, _getState9$freePaste, freePaste, data, freeze, groupConfig, pasteData, changeInfo, changes, extChanges, legalChanges, lastRow, lastIndex, legalExtChanges, newHistory;
213
+ var _getState8, start, end, cellChangeHandler, history, _getState8$freePaste, freePaste, data, freeze, groupConfig, pasteData, changeInfo, changes, extChanges, legalChanges, lastRow, lastIndex, legalExtChanges, newHistory;
215
214
  return _regeneratorRuntime().wrap(function _callee$(_context) {
216
215
  while (1) switch (_context.prev = _context.next) {
217
216
  case 0:
218
- _getState9 = getState(), start = _getState9.start, end = _getState9.end, cellChangeHandler = _getState9.cellChangeHandler, history = _getState9.history, _getState9$freePaste = _getState9.freePaste, freePaste = _getState9$freePaste === void 0 ? false : _getState9$freePaste, data = _getState9.data, freeze = _getState9.freeze, groupConfig = _getState9.groupConfig;
217
+ _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, freeze = _getState8.freeze, groupConfig = _getState8.groupConfig;
219
218
  if (!(!start || !end || freeze)) {
220
219
  _context.next = 3;
221
220
  break;
@@ -321,14 +320,14 @@ export var sideEffectReducer = {
321
320
  }))();
322
321
  },
323
322
  delete: function _delete(dispatch, getState) {
324
- var _getState10 = getState(),
325
- cellChangeHandler = _getState10.cellChangeHandler,
326
- start = _getState10.start,
327
- end = _getState10.end,
328
- data = _getState10.data,
329
- history = _getState10.history,
330
- groupConfig = _getState10.groupConfig,
331
- editing = _getState10.editing;
323
+ var _getState9 = getState(),
324
+ cellChangeHandler = _getState9.cellChangeHandler,
325
+ start = _getState9.start,
326
+ end = _getState9.end,
327
+ data = _getState9.data,
328
+ history = _getState9.history,
329
+ groupConfig = _getState9.groupConfig,
330
+ editing = _getState9.editing;
332
331
  if (editing) return;
333
332
  var groupMap = groupConfigToGroupMap(groupConfig);
334
333
  var cellIndex = flatRowColIndex(start, end);
@@ -373,15 +372,15 @@ export var sideEffectReducer = {
373
372
  cellChangeHandler && cellChangeHandler(changes, undefined, 'Delete');
374
373
  },
375
374
  reverse: function reverse(dispatch, getState) {
376
- var _getState11 = getState(),
377
- start = _getState11.start,
378
- end = _getState11.end,
379
- history = _getState11.history,
380
- _getState11$recoverHi = _getState11.recoverHistory,
381
- recoverHistory = _getState11$recoverHi === void 0 ? [] : _getState11$recoverHi,
382
- cellChangeHandler = _getState11.cellChangeHandler,
383
- eventBus = _getState11.eventBus,
384
- data = _getState11.data;
375
+ var _getState10 = getState(),
376
+ start = _getState10.start,
377
+ end = _getState10.end,
378
+ history = _getState10.history,
379
+ _getState10$recoverHi = _getState10.recoverHistory,
380
+ recoverHistory = _getState10$recoverHi === void 0 ? [] : _getState10$recoverHi,
381
+ cellChangeHandler = _getState10.cellChangeHandler,
382
+ eventBus = _getState10.eventBus,
383
+ data = _getState10.data;
385
384
  if (!(history !== null && history !== void 0 && history.length)) return;
386
385
  var changeHistory = _toConsumableArray(history);
387
386
  var change = changeHistory.pop();
@@ -421,16 +420,16 @@ export var sideEffectReducer = {
421
420
  });
422
421
  },
423
422
  recover: function recover(dispatch, getState) {
424
- var _getState12 = getState(),
425
- eventBus = _getState12.eventBus,
426
- _getState12$recoverHi = _getState12.recoverHistory,
427
- recoverHistory = _getState12$recoverHi === void 0 ? [] : _getState12$recoverHi,
428
- _getState12$history = _getState12.history,
429
- history = _getState12$history === void 0 ? [] : _getState12$history,
430
- cellChangeHandler = _getState12.cellChangeHandler,
431
- start = _getState12.start,
432
- end = _getState12.end,
433
- data = _getState12.data;
423
+ var _getState11 = getState(),
424
+ eventBus = _getState11.eventBus,
425
+ _getState11$recoverHi = _getState11.recoverHistory,
426
+ recoverHistory = _getState11$recoverHi === void 0 ? [] : _getState11$recoverHi,
427
+ _getState11$history = _getState11.history,
428
+ history = _getState11$history === void 0 ? [] : _getState11$history,
429
+ cellChangeHandler = _getState11.cellChangeHandler,
430
+ start = _getState11.start,
431
+ end = _getState11.end,
432
+ data = _getState11.data;
434
433
  if (!(recoverHistory !== null && recoverHistory !== void 0 && recoverHistory.length)) return;
435
434
  var changeHistory = _toConsumableArray(recoverHistory);
436
435
  var change = changeHistory.pop();
@@ -8,6 +8,8 @@ interface ControlProps {
8
8
  backToEditRow: () => void;
9
9
  toTop: () => void;
10
10
  toBottom: () => void;
11
+ reverse: () => void;
12
+ recover: () => void;
11
13
  backEditStyle?: Partial<CSSProperties>;
12
14
  ControlContainer?: React.FC<any>;
13
15
  showBackEdit?: boolean;
@@ -16,6 +18,9 @@ interface ControlProps {
16
18
  end?: CellPosition;
17
19
  selecting?: boolean;
18
20
  };
21
+ showRecoverBtn: boolean;
22
+ recoverLength: number;
23
+ reverseLength: number;
19
24
  }
20
25
  export declare const Control: React.FC<ControlProps>;
21
26
  export {};
@@ -1,4 +1,4 @@
1
- import { EditOutlined, VerticalAlignBottomOutlined, VerticalAlignTopOutlined } from '@ant-design/icons';
1
+ import { EditOutlined, RedoOutlined, UndoOutlined, VerticalAlignBottomOutlined, VerticalAlignTopOutlined } from '@ant-design/icons';
2
2
  import { Button, Tooltip } from 'antd';
3
3
  import React, { useMemo } from 'react';
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -16,14 +16,35 @@ export var Control = function Control(props) {
16
16
  toTop = props.toTop,
17
17
  toBottom = props.toBottom,
18
18
  backToEditRow = props.backToEditRow,
19
+ reverse = props.reverse,
20
+ recover = props.recover,
19
21
  _props$backEditStyle = props.backEditStyle,
20
22
  backEditStyle = _props$backEditStyle === void 0 ? {
21
23
  bottom: 0,
22
24
  right: 0
23
25
  } : _props$backEditStyle,
24
- ControlContainer = props.ControlContainer;
26
+ ControlContainer = props.ControlContainer,
27
+ showRecoverBtn = props.showRecoverBtn,
28
+ recoverLength = props.recoverLength,
29
+ reverseLength = props.reverseLength;
25
30
  var btns = useMemo(function () {
26
31
  var tempBtns = [{
32
+ title: '撤销',
33
+ disabled: reverseLength === 0,
34
+ event: reverse,
35
+ icon: /*#__PURE__*/_jsx(UndoOutlined, {
36
+ style: itemStyle
37
+ }),
38
+ isShow: showRecoverBtn
39
+ }, {
40
+ title: '恢复',
41
+ disabled: recoverLength === 0,
42
+ event: recover,
43
+ icon: /*#__PURE__*/_jsx(RedoOutlined, {
44
+ style: itemStyle
45
+ }),
46
+ isShow: showRecoverBtn
47
+ }, {
27
48
  title: '置顶',
28
49
  disabled: firstRowVisible,
29
50
  event: toTop,
@@ -51,7 +72,7 @@ export var Control = function Control(props) {
51
72
  return tempBtns.filter(function (item) {
52
73
  return item.isShow;
53
74
  });
54
- }, [firstRowVisible, showQuickLocationBtn, lastRowVisible, startRowVisible, showBackEdit]);
75
+ }, [firstRowVisible, showQuickLocationBtn, lastRowVisible, startRowVisible, showBackEdit, recoverLength, reverseLength, reverse, recover]);
55
76
  if (!showBackEdit && !showQuickLocationBtn) return null;
56
77
  if (ControlContainer) {
57
78
  return /*#__PURE__*/_jsx(ControlContainer, {
@@ -20,6 +20,7 @@ import { Empty } from 'antd';
20
20
  import { isEmpty, isNil, isNumber } from 'lodash';
21
21
  import { SheetEventContext, useEventBus, useMiddlewareReducer } from "../../hooks";
22
22
  import sheetReducer from "../reducers";
23
+ import { sideEffectReducer } from "../reducers/sideEffectReducer";
23
24
  import { classNames, getRowHeight, rowToActualRow } from "../util";
24
25
  import { Control } from "./Control";
25
26
  import { DefaultRowMapper } from "./DefaultRowMapper";
@@ -394,6 +395,18 @@ var Sheet = function Sheet(props) {
394
395
  handleScroll();
395
396
  }
396
397
  }, []);
398
+ var _useMemo = useMemo(function () {
399
+ var history = state.history,
400
+ recoverHistory = state.recoverHistory;
401
+ var reverseLength = history ? history.length : 0;
402
+ var recoverLength = recoverHistory ? recoverHistory.length : 0;
403
+ return {
404
+ reverseLength: reverseLength,
405
+ recoverLength: recoverLength
406
+ };
407
+ }, [state]),
408
+ reverseLength = _useMemo.reverseLength,
409
+ recoverLength = _useMemo.recoverLength;
397
410
  return /*#__PURE__*/_jsx(SheetEventContext.Provider, {
398
411
  value: eventBus,
399
412
  children: /*#__PURE__*/_jsxs(_Fragment, {
@@ -432,6 +445,15 @@ var Sheet = function Sheet(props) {
432
445
  }), /*#__PURE__*/_jsxs("div", {
433
446
  className: "harvest-sheet-control",
434
447
  children: [/*#__PURE__*/_jsx(Control, {
448
+ showRecoverBtn: !freeze,
449
+ reverse: function reverse() {
450
+ dispatch(sideEffectReducer.reverse);
451
+ },
452
+ recover: function recover() {
453
+ dispatch(sideEffectReducer.recover);
454
+ },
455
+ reverseLength: reverseLength,
456
+ recoverLength: recoverLength,
435
457
  showBackEdit: showBackEdit,
436
458
  startRowVisible: startRowVisible,
437
459
  backToEditRow: function backToEditRow() {
@@ -82,7 +82,6 @@ export var useKeyBoardEvent = function useKeyBoardEvent(dispatch, elementRef) {
82
82
  },
83
83
  search: function search(e) {
84
84
  e.preventDefault();
85
- // dispatch(sideEffectReducer.emitOpenGroup)
86
85
  dispatch({
87
86
  type: 'openSearch'
88
87
  });
@@ -6,7 +6,6 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
6
6
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
7
  import { pick } from 'lodash';
8
8
  import { useCallback, useEffect } from 'react';
9
- import { sideEffectReducer } from "../reducers";
10
9
  export var useSearchInput = function useSearchInput(state, dispatch, handlerRef) {
11
10
  var goSearchResult = useCallback(function (value) {
12
11
  var _state$searchResultLi;
@@ -15,8 +14,8 @@ export var useSearchInput = function useSearchInput(state, dispatch, handlerRef)
15
14
  var index = (value < 0 ? value + searchTotal : value) % (searchTotal || 1);
16
15
  var result = (_state$searchResultLi = state.searchResultList) === null || _state$searchResultLi === void 0 ? void 0 : _state$searchResultLi[index];
17
16
  if (result) {
18
- var _handlerRef$current;
19
- dispatch(sideEffectReducer.emitOpenGroup);
17
+ var _state$eventBus, _handlerRef$current, _handlerRef$current2;
18
+ (_state$eventBus = state.eventBus) === null || _state$eventBus === void 0 || _state$eventBus.emit('group-open-title', true);
20
19
  dispatch({
21
20
  type: 'changes',
22
21
  payload: {
@@ -27,11 +26,7 @@ export var useSearchInput = function useSearchInput(state, dispatch, handlerRef)
27
26
  start: result,
28
27
  end: result
29
28
  });
30
- // 分组展开未更新到页面,需要当前事件循环结束再更新
31
- Promise.resolve().then(function () {
32
- var _handlerRef$current2;
33
- handlerRef === null || handlerRef === void 0 || (_handlerRef$current2 = handlerRef.current) === null || _handlerRef$current2 === void 0 || _handlerRef$current2.zoomTo();
34
- });
29
+ handlerRef === null || handlerRef === void 0 || (_handlerRef$current2 = handlerRef.current) === null || _handlerRef$current2 === void 0 || _handlerRef$current2.zoomTo();
35
30
  }
36
31
  }, [state.searchTotal, state.searchResultList]);
37
32
  var goNext = useCallback(function () {
@@ -108,6 +108,7 @@ export type SheetInstance = {
108
108
  }) => void;
109
109
  popHistory: () => OperateHistory;
110
110
  dropHistory: () => OperateHistory[];
111
+ dropRecover: () => OperateHistory[];
111
112
  call: (caller: (...args: any) => void, ...args: any) => void;
112
113
  };
113
114
  export type SheetProps = {
@@ -141,6 +142,7 @@ export type SheetProps = {
141
142
  showQuickLocationBtn?: boolean;
142
143
  showRemark?: boolean;
143
144
  ControlContainer?: React.FC;
145
+ showRecoverBtn?: boolean;
144
146
  };
145
147
  export type WidthConfigContext = {
146
148
  onChange?: (value: Record<number | string, number>) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhenliang/sheet",
3
- "version": "0.1.87-beta",
3
+ "version": "0.1.87-beta.0",
4
4
  "description": "A react library developed with dumi",
5
5
  "license": "MIT",
6
6
  "module": "dist/index.js",
@@ -85,4 +85,5 @@
85
85
  "fizz.zhou@ap.jll.com"
86
86
  ],
87
87
  "preid": "beta"
88
+
88
89
  }