ztxkui 4.3.13 → 4.3.14
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.
- package/dist/components/ProTable/hooks.d.ts +18 -0
- package/dist/components/ProTable/hooks.js +178 -0
- package/dist/components/ProTable/index.d.ts +8 -0
- package/dist/components/ProTable/index.js +66 -0
- package/dist/components/ProTable/interface.d.ts +31 -0
- package/dist/components/ProTable/interface.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare function useDataSourceRef<D>(dataSource: D[]): import("react").MutableRefObject<D[]>;
|
|
3
|
+
export declare function useAddAndDelRow(showAddIcon: any, showDelIcon: any, dataSourceRef: any, addDataMode: any, onChange: any, rowKey: any, refreshScuCell: any): {
|
|
4
|
+
needAddAndDel: any;
|
|
5
|
+
onAddAndDelHandle: (type: 'add' | 'del', index: number) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare function useMoveRow(onChange: any, dataSourceRef: any, refreshScuCell: any): (dragIndex: number, hoverIndex: number) => void;
|
|
8
|
+
export declare function useEditRow(onChange: any, dataSourceRef: any, { onBatchPastePre, onBatchPastePost }: {
|
|
9
|
+
onBatchPastePre: any;
|
|
10
|
+
onBatchPastePost: any;
|
|
11
|
+
}): {
|
|
12
|
+
onEditableSaveHandle: (record: any, index: number | undefined, _dataIndex?: string) => void;
|
|
13
|
+
onBatchPasteHandle: (records: any, startIndex: any) => void;
|
|
14
|
+
};
|
|
15
|
+
export declare function useScuRfresh(): {
|
|
16
|
+
refreshScuCell: () => void;
|
|
17
|
+
getRefreshScuCell: () => boolean;
|
|
18
|
+
};
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
13
|
+
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
14
|
+
to[j] = from[i];
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
import { useRef, useEffect, useMemo, useCallback } from 'react';
|
|
18
|
+
import update from 'immutability-helper';
|
|
19
|
+
// 设置数据源临时Ref对象
|
|
20
|
+
export function useDataSourceRef(dataSource) {
|
|
21
|
+
var dataSourceRef = useRef(dataSource);
|
|
22
|
+
useEffect(function () {
|
|
23
|
+
dataSourceRef.current = dataSource;
|
|
24
|
+
}, [dataSource]);
|
|
25
|
+
return dataSourceRef;
|
|
26
|
+
}
|
|
27
|
+
// 加减行相关
|
|
28
|
+
export function useAddAndDelRow(showAddIcon, showDelIcon, dataSourceRef, addDataMode, onChange, rowKey, refreshScuCell) {
|
|
29
|
+
var needAddAndDel = useMemo(function () {
|
|
30
|
+
return showAddIcon || showDelIcon;
|
|
31
|
+
}, [showAddIcon, showDelIcon]);
|
|
32
|
+
// 增减行回调
|
|
33
|
+
var onAddAndDelHandle = useCallback(function (type, index) {
|
|
34
|
+
var _a, _b;
|
|
35
|
+
if (typeof addDataMode === 'function') {
|
|
36
|
+
var newDataSource_1 = addDataMode(index, dataSourceRef.current);
|
|
37
|
+
onChange && onChange(newDataSource_1);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
var newDataSource = __spreadArray([], dataSourceRef.current);
|
|
41
|
+
var newRecord = {};
|
|
42
|
+
if (type === 'add') {
|
|
43
|
+
if (addDataMode === 'blank') {
|
|
44
|
+
// 生成一条空白数据
|
|
45
|
+
newRecord = (_a = {},
|
|
46
|
+
_a[rowKey] = Date.now() + "-" + index,
|
|
47
|
+
_a.__INNER__ADD__DATA = true,
|
|
48
|
+
_a);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// 复制当前这条数据
|
|
52
|
+
var currentRecord = newDataSource[index];
|
|
53
|
+
newRecord = __assign(__assign({}, currentRecord), (_b = {}, _b[rowKey] = Date.now() + "-" + index, _b.__INNER__ADD__DATA = true, _b));
|
|
54
|
+
}
|
|
55
|
+
newDataSource.splice(index + 1, 0, newRecord);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
newDataSource.splice(index, 1);
|
|
59
|
+
}
|
|
60
|
+
refreshScuCell();
|
|
61
|
+
onChange && onChange(newDataSource);
|
|
62
|
+
}, [addDataMode, onChange, dataSourceRef, rowKey, refreshScuCell]);
|
|
63
|
+
return {
|
|
64
|
+
needAddAndDel: needAddAndDel,
|
|
65
|
+
onAddAndDelHandle: onAddAndDelHandle,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// 拖拽行相关
|
|
69
|
+
export function useMoveRow(onChange, dataSourceRef, refreshScuCell) {
|
|
70
|
+
var onMoveRowHandle = useCallback(function (dragIndex, hoverIndex) {
|
|
71
|
+
var copyDataSource = __spreadArray([], dataSourceRef.current);
|
|
72
|
+
var dragRow = copyDataSource[dragIndex];
|
|
73
|
+
var newDataSource = update(copyDataSource, {
|
|
74
|
+
$splice: [
|
|
75
|
+
[dragIndex, 1],
|
|
76
|
+
[hoverIndex, 0, dragRow],
|
|
77
|
+
],
|
|
78
|
+
});
|
|
79
|
+
refreshScuCell();
|
|
80
|
+
onChange && onChange(newDataSource);
|
|
81
|
+
}, [onChange, dataSourceRef, refreshScuCell]);
|
|
82
|
+
return onMoveRowHandle;
|
|
83
|
+
}
|
|
84
|
+
// 编辑行相关
|
|
85
|
+
function objIsEqual(newObj, oldObj) {
|
|
86
|
+
var keys = Object.keys(newObj);
|
|
87
|
+
for (var i = 0; i < keys.length; i++) {
|
|
88
|
+
var key = keys[i];
|
|
89
|
+
if (oldObj[key] !== newObj[key]) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
export function useEditRow(onChange, dataSourceRef, _a) {
|
|
96
|
+
var onBatchPastePre = _a.onBatchPastePre, onBatchPastePost = _a.onBatchPastePost;
|
|
97
|
+
var onEditableSaveHandle = useCallback(function (record, index, _dataIndex) {
|
|
98
|
+
var _a;
|
|
99
|
+
if (_dataIndex === void 0) { _dataIndex = ''; }
|
|
100
|
+
if (typeof index === 'number') {
|
|
101
|
+
var newDataSource = __spreadArray([], dataSourceRef.current);
|
|
102
|
+
var oldRecord = newDataSource[index];
|
|
103
|
+
// 如果新的record里面的值 老的Record里面有 那么不需要触发onChange
|
|
104
|
+
// 这里主要是为了优化物料组件带来的多次rerender导致的一些问题
|
|
105
|
+
if (objIsEqual(record, oldRecord)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
var newRecord = _dataIndex
|
|
109
|
+
? __assign(__assign(__assign({}, record), oldRecord), (_a = {}, _a[_dataIndex] = record[_dataIndex], _a)) : __assign(__assign({}, oldRecord), record);
|
|
110
|
+
newDataSource.splice(index, 1, newRecord);
|
|
111
|
+
onChange && onChange(newDataSource);
|
|
112
|
+
}
|
|
113
|
+
}, [dataSourceRef, onChange]);
|
|
114
|
+
var onBatchPasteHandle = useCallback(function (records, startIndex) {
|
|
115
|
+
if (!Array.isArray(records)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// 前置处理
|
|
119
|
+
var pasteRecords = onBatchPastePre ? onBatchPastePre(records) : records;
|
|
120
|
+
// 计算结束位置
|
|
121
|
+
var endIndex = startIndex + pasteRecords.length - 1;
|
|
122
|
+
var currentRecords = Array.isArray(dataSourceRef.current)
|
|
123
|
+
? dataSourceRef.current.slice()
|
|
124
|
+
: [];
|
|
125
|
+
if (endIndex > currentRecords.length - 1) {
|
|
126
|
+
endIndex = currentRecords.length - 1;
|
|
127
|
+
}
|
|
128
|
+
// 从开始位置开始,替换对应的值
|
|
129
|
+
var currentIndex = 0;
|
|
130
|
+
var dataSource = currentRecords.map(function (record, index) {
|
|
131
|
+
if (index >= startIndex && index <= endIndex) {
|
|
132
|
+
var obj = __assign(__assign({}, record), pasteRecords[currentIndex]);
|
|
133
|
+
currentIndex++;
|
|
134
|
+
return obj;
|
|
135
|
+
}
|
|
136
|
+
return record;
|
|
137
|
+
});
|
|
138
|
+
// 后置处理
|
|
139
|
+
var newDataSource = onBatchPastePost
|
|
140
|
+
? onBatchPastePost(dataSource)
|
|
141
|
+
: dataSource;
|
|
142
|
+
// 触发onChange事件
|
|
143
|
+
onChange && onChange(newDataSource);
|
|
144
|
+
}, [dataSourceRef, onChange, onBatchPastePre, onBatchPastePost]);
|
|
145
|
+
return {
|
|
146
|
+
onEditableSaveHandle: onEditableSaveHandle,
|
|
147
|
+
onBatchPasteHandle: onBatchPasteHandle,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// SCU刷新逻辑
|
|
151
|
+
// 这么写的原因是 如果拖拽行 增减行后,并不能触发column的scu
|
|
152
|
+
// 之前的写法是,通过useState刷新。但是 setState会触发整个组件的刷新
|
|
153
|
+
// 设置数据后,本身会触发setState。导致执行两次rerender。每个单元格都会执行rerender
|
|
154
|
+
// 通过Ref并不会触发 setState 通过setTimeout也不会导致每一个单元格的刷新出现问题
|
|
155
|
+
export function useScuRfresh() {
|
|
156
|
+
var timeOutRef = useRef(null);
|
|
157
|
+
var tableSCURefreshRef = useRef();
|
|
158
|
+
var refreshScuCell = useCallback(function () {
|
|
159
|
+
tableSCURefreshRef.current = true;
|
|
160
|
+
}, []);
|
|
161
|
+
var getRefreshScuCell = useCallback(function () {
|
|
162
|
+
if (tableSCURefreshRef.current) {
|
|
163
|
+
if (timeOutRef.current) {
|
|
164
|
+
clearTimeout(timeOutRef.current);
|
|
165
|
+
timeOutRef.current = null;
|
|
166
|
+
}
|
|
167
|
+
timeOutRef.current = setTimeout(function () {
|
|
168
|
+
tableSCURefreshRef.current = false;
|
|
169
|
+
});
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
}, []);
|
|
174
|
+
return {
|
|
175
|
+
refreshScuCell: refreshScuCell,
|
|
176
|
+
getRefreshScuCell: getRefreshScuCell,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
+
var t = {};
|
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
+
t[p] = s[p];
|
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
+
t[p[i]] = s[p[i]];
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* 业务封装可编辑表格组件
|
|
25
|
+
*/
|
|
26
|
+
import React, { memo, useRef, useImperativeHandle } from 'react';
|
|
27
|
+
import { Table } from '../../index';
|
|
28
|
+
import { useDataSourceRef, useAddAndDelRow, useScuRfresh, useMoveRow, useEditRow, } from './hooks';
|
|
29
|
+
function ProEditTable(props) {
|
|
30
|
+
var rowKey = props.rowKey, dataSource = props.dataSource, columns = props.columns, onChange = props.onChange, showAddIcon = props.showAddIcon, showDelIcon = props.showDelIcon, _a = props.addDataMode, addDataMode = _a === void 0 ? 'blank' : _a, isMove = props.isMove, isEdit = props.isEdit, isPaste = props.isPaste, tableHandleRef = props.tableHandleRef, onBatchPastePre = props.onBatchPastePre, onBatchPastePost = props.onBatchPastePost, restProps = __rest(props, ["rowKey", "dataSource", "columns", "onChange", "showAddIcon", "showDelIcon", "addDataMode", "isMove", "isEdit", "isPaste", "tableHandleRef", "onBatchPastePre", "onBatchPastePost"]);
|
|
31
|
+
var tableColumns = columns.map(function (item) {
|
|
32
|
+
if (item.shouldCellUpdate) {
|
|
33
|
+
var fn_1 = item.shouldCellUpdate;
|
|
34
|
+
item.shouldCellUpdate = function (record, preRecord) {
|
|
35
|
+
if (getRefreshScuCell()) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return fn_1(record, preRecord);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return item;
|
|
42
|
+
});
|
|
43
|
+
// 保存dataSource值存为Ref
|
|
44
|
+
var dataSourceRef = useDataSourceRef(dataSource);
|
|
45
|
+
// SCU逻辑
|
|
46
|
+
var _b = useScuRfresh(), refreshScuCell = _b.refreshScuCell, getRefreshScuCell = _b.getRefreshScuCell;
|
|
47
|
+
// 增减行相关hook
|
|
48
|
+
var _c = useAddAndDelRow(showAddIcon, showDelIcon, dataSourceRef, addDataMode, onChange, rowKey, refreshScuCell), needAddAndDel = _c.needAddAndDel, onAddAndDelHandle = _c.onAddAndDelHandle;
|
|
49
|
+
// 拖拽行相关hook
|
|
50
|
+
var onMoveRowHandle = useMoveRow(onChange, dataSourceRef, refreshScuCell);
|
|
51
|
+
// 修改行相关hook
|
|
52
|
+
var _d = useEditRow(onChange, dataSourceRef, {
|
|
53
|
+
onBatchPastePre: onBatchPastePre,
|
|
54
|
+
onBatchPastePost: onBatchPastePost,
|
|
55
|
+
}), onEditableSaveHandle = _d.onEditableSaveHandle, onBatchPasteHandle = _d.onBatchPasteHandle;
|
|
56
|
+
var innerTableHandleRef = useRef();
|
|
57
|
+
useImperativeHandle(tableHandleRef, function () { return ({
|
|
58
|
+
validate: innerTableHandleRef.current.validate,
|
|
59
|
+
clearErrorClass: innerTableHandleRef.current.clearErrorClass,
|
|
60
|
+
getCurrentPage: innerTableHandleRef.current.getCurrentPage,
|
|
61
|
+
getRealyIndex: innerTableHandleRef.current.getRealyIndex,
|
|
62
|
+
onEditableSaveHandle: onEditableSaveHandle,
|
|
63
|
+
}); });
|
|
64
|
+
return (React.createElement(Table, __assign({ rowKey: rowKey, dataSource: dataSource, columns: tableColumns, hideAddIcon: !showAddIcon, hideDelIcon: !showDelIcon, onAddAndDelHandle: needAddAndDel ? onAddAndDelHandle : undefined, onMoveRow: isMove ? onMoveRowHandle : undefined, onEditableSave: isEdit ? onEditableSaveHandle : undefined, tableHandleRef: innerTableHandleRef, onTableChange: isPaste ? onBatchPasteHandle : undefined }, restProps)));
|
|
65
|
+
}
|
|
66
|
+
export default memo(ProEditTable);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ColumnsType } from '../../components/Table';
|
|
3
|
+
import { IProps as TableIProps } from '../../components/Table/table';
|
|
4
|
+
export interface IProps<RecordType> extends Omit<TableIProps<RecordType>, 'columns' | 'onChange' | 'onEditableSave'> {
|
|
5
|
+
dataSource: any[];
|
|
6
|
+
columns: ColumnsType<any>;
|
|
7
|
+
rowKey: string;
|
|
8
|
+
onChange?: (dataSource: any[]) => void;
|
|
9
|
+
showAddIcon?: boolean;
|
|
10
|
+
showDelIcon?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* 增加数据的模式 blank add空白数据; copy add复制数据; 自定义增加
|
|
13
|
+
*/
|
|
14
|
+
addDataMode?: 'blank' | 'copy' | ((index: number, dataSource: any[]) => any[]);
|
|
15
|
+
isMove?: boolean;
|
|
16
|
+
isEdit?: boolean;
|
|
17
|
+
isPaste?: boolean;
|
|
18
|
+
onBatchPastePre?: (data: any[]) => any[];
|
|
19
|
+
onBatchPastePost?: (data: any[]) => any[];
|
|
20
|
+
tableHandleRef?: React.Ref<{
|
|
21
|
+
validate: () => Promise<any>;
|
|
22
|
+
clearErrorClass: (index: number) => void;
|
|
23
|
+
getCurrentPage: () => {
|
|
24
|
+
page: number;
|
|
25
|
+
pageSize: number;
|
|
26
|
+
} | null;
|
|
27
|
+
getRealyIndex: (index: number) => number;
|
|
28
|
+
onEditableSaveHandle: (record: any, index: number | undefined, _dataIndex: string) => void;
|
|
29
|
+
[prop: string]: any;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export { default as Tabs } from './components/Tabs';
|
|
|
17
17
|
export { default as Modal } from './components/Modal';
|
|
18
18
|
export { default as Pagination } from './components/Pagination';
|
|
19
19
|
export { default as Table } from './components/Table';
|
|
20
|
+
export { default as ProTable } from './components/ProTable';
|
|
20
21
|
export { default as Sortable } from './components/Sortable';
|
|
21
22
|
export { default as SortableCancel } from './components/SortableCancel';
|
|
22
23
|
export { default as Container } from './components/business/Container';
|
package/dist/index.js
CHANGED
|
@@ -145,6 +145,7 @@ export { default as Tabs } from './components/Tabs';
|
|
|
145
145
|
export { default as Modal } from './components/Modal';
|
|
146
146
|
export { default as Pagination } from './components/Pagination';
|
|
147
147
|
export { default as Table } from './components/Table';
|
|
148
|
+
export { default as ProTable } from './components/ProTable';
|
|
148
149
|
export { default as Sortable } from './components/Sortable';
|
|
149
150
|
export { default as SortableCancel } from './components/SortableCancel';
|
|
150
151
|
export { default as Container } from './components/business/Container';
|