@aloudata/aloudata-design 2.17.2 → 2.17.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.
- package/dist/MemberPicker/index.js +1 -1
- package/dist/Steps/style/index.less +3 -3
- package/dist/Table/helper.d.ts +2 -1
- package/dist/Table/helper.js +5 -0
- package/dist/Table/hooks/useRowDnd.d.ts +10 -0
- package/dist/Table/hooks/useRowDnd.js +252 -0
- package/dist/Table/hooks/useRowSelection.js +3 -2
- package/dist/Table/index.js +26 -7
- package/dist/Table/style/index.less +20 -0
- package/dist/Table/types.d.ts +4 -0
- package/dist/ald.min.css +1 -1
- package/package.json +1 -1
|
@@ -342,7 +342,7 @@ var Component = function Component(props) {
|
|
|
342
342
|
size: 20,
|
|
343
343
|
src: item.photo,
|
|
344
344
|
type: item.type === EUserType.USER ? 'user' : 'userGroup'
|
|
345
|
-
}, item.nickname || item.name || item.userId))
|
|
345
|
+
}, item.nickname || item.name || item.userId), item.nickname || item.name || item.userId)
|
|
346
346
|
};
|
|
347
347
|
}),
|
|
348
348
|
optionLabelProp: multiple ? 'label' : 'tag',
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
flex-direction: column;
|
|
16
16
|
align-items: center;
|
|
17
17
|
margin: 0 4px;
|
|
18
|
-
font-size:
|
|
18
|
+
font-size: 14px;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
.ant-steps-item-custom
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
.ant-steps-item-title {
|
|
52
52
|
height: 20px;
|
|
53
53
|
font-weight: 500;
|
|
54
|
-
font-size:
|
|
54
|
+
font-size: 14px;
|
|
55
55
|
font-style: normal;
|
|
56
56
|
line-height: 20px;
|
|
57
57
|
}
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
.ant-steps-item-title {
|
|
82
82
|
color: #9ca3af;
|
|
83
83
|
font-weight: 500;
|
|
84
|
-
font-size:
|
|
84
|
+
font-size: 14px;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
.ant-steps-item-description {
|
package/dist/Table/helper.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export declare function getTableColumns<TDataItem extends object>({ columns, con
|
|
|
23
23
|
render?: ((text: any, record: TDataItem, rowIndex: number) => import("react").ReactNode) | undefined;
|
|
24
24
|
ellipsis?: boolean | undefined;
|
|
25
25
|
noPadding?: boolean | undefined;
|
|
26
|
-
align?: "
|
|
26
|
+
align?: "left" | "center" | "right" | undefined;
|
|
27
27
|
fixed?: "left" | "right" | undefined;
|
|
28
28
|
sortOrder?: "ascend" | "descend" | null | undefined;
|
|
29
29
|
};
|
|
@@ -41,3 +41,4 @@ export declare function getNumberFromPercentageStr(str: string): number;
|
|
|
41
41
|
export declare function isPercentage(str: string): boolean;
|
|
42
42
|
export declare function prefixCls(className: string): string;
|
|
43
43
|
export declare function getRowKey<TDataItem extends object>(row: TDataItem, rowKey: ITableProps<TDataItem>['rowKey'], defaultKey?: string | number): string;
|
|
44
|
+
export declare function hasFixedLeftColumn<TDataItem extends object>(columns: ITableColumn<TDataItem>[]): boolean;
|
package/dist/Table/helper.js
CHANGED
|
@@ -155,4 +155,9 @@ export function getRowKey(row, rowKey, defaultKey) {
|
|
|
155
155
|
rowKeyStr = _.get(row, rowKey);
|
|
156
156
|
}
|
|
157
157
|
return _.toString(rowKeyStr);
|
|
158
|
+
}
|
|
159
|
+
export function hasFixedLeftColumn(columns) {
|
|
160
|
+
return columns.some(function (col) {
|
|
161
|
+
return col.fixed === 'left';
|
|
162
|
+
});
|
|
158
163
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ITableProps } from '../types';
|
|
3
|
+
export default function useRowDnd<TDataItem extends object>(props: ITableProps<TDataItem>): IRowDndInfo<TDataItem>;
|
|
4
|
+
interface IRowDndInfo<TDataItem extends object> {
|
|
5
|
+
columns: ITableProps<TDataItem>['columns'];
|
|
6
|
+
getRowRef: (record: TDataItem, rowIndex: number) => React.MutableRefObject<HTMLDivElement> | undefined;
|
|
7
|
+
draggingRowId: string | null;
|
|
8
|
+
tableData: TDataItem[];
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
2
|
+
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."); }
|
|
3
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
4
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
5
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
6
|
+
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."); }
|
|
7
|
+
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); }
|
|
8
|
+
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; }
|
|
9
|
+
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; } }
|
|
10
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
|
+
import DragLightLineSvg from "../../Icon/components/DragLightLine";
|
|
12
|
+
import React, { useCallback, useMemo, useRef, useState } from 'react';
|
|
13
|
+
import { useDrag, useDrop } from 'react-dnd';
|
|
14
|
+
import { getEmptyImage } from 'react-dnd-html5-backend';
|
|
15
|
+
import { getRowKey, hasFixedLeftColumn, prefixCls } from "../helper";
|
|
16
|
+
// 定义拖拽项类型
|
|
17
|
+
var ROW_DND_TYPE = 'ALD_TABLE_ROW_DND_TYPE';
|
|
18
|
+
// 拖拽手柄组件
|
|
19
|
+
var DragHandle = function DragHandle(_ref) {
|
|
20
|
+
var index = _ref.index,
|
|
21
|
+
id = _ref.id,
|
|
22
|
+
onDragging = _ref.onDragging,
|
|
23
|
+
rowRef = _ref.rowRef,
|
|
24
|
+
onDragStart = _ref.onDragStart,
|
|
25
|
+
onDragComplete = _ref.onDragComplete;
|
|
26
|
+
var ref = useRef(null);
|
|
27
|
+
|
|
28
|
+
// 使用 ref 来跟踪是否已经通知拖动开始
|
|
29
|
+
var dragStartedRef = useRef(false);
|
|
30
|
+
var _useDrag = useDrag({
|
|
31
|
+
type: ROW_DND_TYPE,
|
|
32
|
+
item: function item() {
|
|
33
|
+
// 只在拖拽真正开始且尚未通知时触发一次
|
|
34
|
+
if (!dragStartedRef.current) {
|
|
35
|
+
// 通知开始拖动,传递行的ID
|
|
36
|
+
onDragStart(id);
|
|
37
|
+
dragStartedRef.current = true;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
index: index,
|
|
41
|
+
id: id
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
collect: function collect(monitor) {
|
|
45
|
+
return {
|
|
46
|
+
isDragging: monitor.isDragging()
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
end: function end() {
|
|
50
|
+
// 拖拽结束时清除拖动状态和重置标志
|
|
51
|
+
onDragComplete();
|
|
52
|
+
dragStartedRef.current = false;
|
|
53
|
+
}
|
|
54
|
+
}),
|
|
55
|
+
_useDrag2 = _slicedToArray(_useDrag, 3),
|
|
56
|
+
isDragging = _useDrag2[0].isDragging,
|
|
57
|
+
drag = _useDrag2[1],
|
|
58
|
+
preview = _useDrag2[2];
|
|
59
|
+
var _useDrop = useDrop({
|
|
60
|
+
accept: ROW_DND_TYPE,
|
|
61
|
+
// @ts-ignore - react-dnd类型定义有时与实际用法不一致
|
|
62
|
+
hover: function hover(item, monitor) {
|
|
63
|
+
// 如果有行引用并且行引用有值,使用行引用来判断位置
|
|
64
|
+
var dropRef = rowRef === null || rowRef === void 0 ? void 0 : rowRef.current;
|
|
65
|
+
if (!dropRef) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
var dragIndex = item.index;
|
|
69
|
+
var hoverIndex = index;
|
|
70
|
+
|
|
71
|
+
// 如果拖动的是自己,不做任何事
|
|
72
|
+
if (dragIndex === hoverIndex) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// 确定鼠标位置
|
|
77
|
+
var hoverBoundingRect = dropRef.getBoundingClientRect();
|
|
78
|
+
var hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;
|
|
79
|
+
var clientOffset = monitor.getClientOffset();
|
|
80
|
+
if (!clientOffset) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
var hoverClientY = clientOffset.y - hoverBoundingRect.top;
|
|
84
|
+
|
|
85
|
+
// 向下拖动,但鼠标还没过半
|
|
86
|
+
if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// 向上拖动,但鼠标还没过半
|
|
91
|
+
if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// 执行排序
|
|
96
|
+
onDragging(dragIndex, hoverIndex);
|
|
97
|
+
|
|
98
|
+
// 更新拖拽项的索引,react-dnd 官方示例推荐这样做以提高性能并避免奇怪行为
|
|
99
|
+
item.index = hoverIndex;
|
|
100
|
+
}
|
|
101
|
+
}),
|
|
102
|
+
_useDrop2 = _slicedToArray(_useDrop, 2),
|
|
103
|
+
drop = _useDrop2[1];
|
|
104
|
+
|
|
105
|
+
// 将 drag 连接到手柄 ref 上
|
|
106
|
+
drag(ref);
|
|
107
|
+
|
|
108
|
+
// 设置放置目标
|
|
109
|
+
if (rowRef !== null && rowRef !== void 0 && rowRef.current) {
|
|
110
|
+
drop(rowRef.current);
|
|
111
|
+
}
|
|
112
|
+
preview(getEmptyImage());
|
|
113
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
114
|
+
ref: ref,
|
|
115
|
+
className: prefixCls('row-dnd-item'),
|
|
116
|
+
style: {
|
|
117
|
+
cursor: 'move',
|
|
118
|
+
opacity: isDragging ? 0.5 : 1
|
|
119
|
+
}
|
|
120
|
+
}, /*#__PURE__*/React.createElement(DragLightLineSvg, null));
|
|
121
|
+
};
|
|
122
|
+
export default function useRowDnd(props) {
|
|
123
|
+
var columns = props.columns,
|
|
124
|
+
rowDnd = props.rowDnd,
|
|
125
|
+
data = props.data,
|
|
126
|
+
rowKey = props.rowKey;
|
|
127
|
+
// 跟踪当前正在拖动的行的ID
|
|
128
|
+
var _useState = useState(null),
|
|
129
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
130
|
+
draggingRowId = _useState2[0],
|
|
131
|
+
setDraggingRowId = _useState2[1];
|
|
132
|
+
|
|
133
|
+
// 为每一行创建一个 ref,使用 useMemo 缓存 Map 实例
|
|
134
|
+
var rowRefs = useMemo(function () {
|
|
135
|
+
return new Map();
|
|
136
|
+
}, []);
|
|
137
|
+
|
|
138
|
+
// 当拖拽过程中,临时存储数据
|
|
139
|
+
var _useState3 = useState(data),
|
|
140
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
141
|
+
draggingTempData = _useState4[0],
|
|
142
|
+
setDraggingTempData = _useState4[1];
|
|
143
|
+
var tableData = useMemo(function () {
|
|
144
|
+
// 拖拽过程中,使用临时数据,这样外部调用方可以不用关心拖拽过程中的数据变化
|
|
145
|
+
if (draggingRowId) {
|
|
146
|
+
return draggingTempData;
|
|
147
|
+
}
|
|
148
|
+
return data;
|
|
149
|
+
}, [data, draggingRowId, draggingTempData]);
|
|
150
|
+
|
|
151
|
+
// 获取行的 ref,用于设置拖拽预览
|
|
152
|
+
var getRowRef = useCallback(function (record) {
|
|
153
|
+
var key = getRowKey(record, rowKey);
|
|
154
|
+
if (!rowRefs.has(key)) {
|
|
155
|
+
rowRefs.set(key, /*#__PURE__*/React.createRef());
|
|
156
|
+
}
|
|
157
|
+
return rowRefs.get(key);
|
|
158
|
+
}, [rowKey, rowRefs]);
|
|
159
|
+
var defaultInfo = useMemo(function () {
|
|
160
|
+
return {
|
|
161
|
+
columns: columns,
|
|
162
|
+
getRowRef: function getRowRef() {
|
|
163
|
+
return undefined;
|
|
164
|
+
},
|
|
165
|
+
draggingRowId: null,
|
|
166
|
+
tableData: data
|
|
167
|
+
};
|
|
168
|
+
}, [columns, data]);
|
|
169
|
+
if (!rowDnd) {
|
|
170
|
+
return defaultInfo;
|
|
171
|
+
}
|
|
172
|
+
if (props.expandable) {
|
|
173
|
+
console.error('rowDnd and expandable mode cannot be used together');
|
|
174
|
+
return defaultInfo;
|
|
175
|
+
}
|
|
176
|
+
if (!props.rowKey) {
|
|
177
|
+
// 如果rowKey没有设置,则无法进行拖拽,因为必须知道每行的唯一标识
|
|
178
|
+
console.error('rowKey is required in rowDnd mode');
|
|
179
|
+
return defaultInfo;
|
|
180
|
+
}
|
|
181
|
+
var rowDndFixed = rowDnd.fixed,
|
|
182
|
+
onChange = rowDnd.onChange;
|
|
183
|
+
var fixed = rowDndFixed || hasFixedLeftColumn(columns);
|
|
184
|
+
var handleDragging = function handleDragging(dragIndex, hoverIndex) {
|
|
185
|
+
// 使用函数式更新,确保基于最新的状态进行操作
|
|
186
|
+
setDraggingTempData(function (currentData) {
|
|
187
|
+
var newData = _toConsumableArray(currentData);
|
|
188
|
+
|
|
189
|
+
// 确保 dragIndex 在有效范围内
|
|
190
|
+
if (dragIndex < 0 || dragIndex >= newData.length) {
|
|
191
|
+
console.warn("Drag index ".concat(dragIndex, " out of bounds for data length ").concat(newData.length));
|
|
192
|
+
return currentData; // 返回当前状态,不作修改
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// 保存被拖拽的行
|
|
196
|
+
var draggedRow = newData.splice(dragIndex, 1)[0];
|
|
197
|
+
|
|
198
|
+
// 如果因为某些原因未能获取到拖拽的行(理论上不应发生)
|
|
199
|
+
if (draggedRow === undefined) {
|
|
200
|
+
console.warn("Dragged item at index ".concat(dragIndex, " was undefined during splice."));
|
|
201
|
+
return currentData; // 返回当前状态,不作修改
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// 插入到新位置
|
|
205
|
+
newData.splice(hoverIndex, 0, draggedRow);
|
|
206
|
+
return newData;
|
|
207
|
+
});
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
// 记录拖动开始
|
|
211
|
+
var handleDragStart = function handleDragStart(id) {
|
|
212
|
+
setDraggingRowId(id);
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
// 记录拖动结束
|
|
216
|
+
var handleDragComplete = function handleDragComplete() {
|
|
217
|
+
var draggingRow = tableData.find(function (item) {
|
|
218
|
+
return getRowKey(item, rowKey) === draggingRowId;
|
|
219
|
+
});
|
|
220
|
+
setDraggingRowId(null);
|
|
221
|
+
if (!draggingRow) {
|
|
222
|
+
// 不应该出现这种情况
|
|
223
|
+
console.error('draggingRow is not found');
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
onChange(tableData, draggingRow);
|
|
227
|
+
};
|
|
228
|
+
var dndColumn = {
|
|
229
|
+
dataIndex: '',
|
|
230
|
+
title: '',
|
|
231
|
+
width: 48,
|
|
232
|
+
render: function render(text, record, rowIndex) {
|
|
233
|
+
var key = getRowKey(record, rowKey);
|
|
234
|
+
var rowRef = getRowRef(record);
|
|
235
|
+
return /*#__PURE__*/React.createElement(DragHandle, {
|
|
236
|
+
index: rowIndex,
|
|
237
|
+
id: key,
|
|
238
|
+
onDragging: handleDragging,
|
|
239
|
+
onDragStart: handleDragStart,
|
|
240
|
+
onDragComplete: handleDragComplete,
|
|
241
|
+
rowRef: rowRef
|
|
242
|
+
});
|
|
243
|
+
},
|
|
244
|
+
fixed: fixed ? 'left' : undefined
|
|
245
|
+
};
|
|
246
|
+
return {
|
|
247
|
+
columns: [dndColumn].concat(_toConsumableArray(columns)),
|
|
248
|
+
getRowRef: getRowRef,
|
|
249
|
+
draggingRowId: draggingRowId,
|
|
250
|
+
tableData: tableData
|
|
251
|
+
};
|
|
252
|
+
}
|
|
@@ -17,7 +17,7 @@ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefine
|
|
|
17
17
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
18
18
|
import React, { useCallback, useState } from 'react';
|
|
19
19
|
import Checkbox from "../../Checkbox";
|
|
20
|
-
import { getRowKey, prefixCls } from "../helper";
|
|
20
|
+
import { getRowKey, hasFixedLeftColumn, prefixCls } from "../helper";
|
|
21
21
|
export default function useRowSelection(props) {
|
|
22
22
|
var _rowSelection$items;
|
|
23
23
|
var columns = props.columns,
|
|
@@ -97,6 +97,7 @@ export default function useRowSelection(props) {
|
|
|
97
97
|
if (!rowKey) {
|
|
98
98
|
throw new Error('rowKey is required when rowSelection is enabled');
|
|
99
99
|
}
|
|
100
|
+
var fixed = !!rowSelection.fixed || hasFixedLeftColumn(columns);
|
|
100
101
|
var rowSelectionColumn = {
|
|
101
102
|
dataIndex: '',
|
|
102
103
|
title: /*#__PURE__*/React.createElement("div", {
|
|
@@ -115,7 +116,7 @@ export default function useRowSelection(props) {
|
|
|
115
116
|
checked: isChecked
|
|
116
117
|
}, checkboxProps)));
|
|
117
118
|
},
|
|
118
|
-
fixed:
|
|
119
|
+
fixed: fixed ? 'left' : undefined
|
|
119
120
|
};
|
|
120
121
|
var selectedRowKeysInCurrPage = getDataWithoutDisabled(data, rowSelection.getCheckboxProps).map(function (record) {
|
|
121
122
|
return getRowKey(record, rowKey);
|
package/dist/Table/index.js
CHANGED
|
@@ -17,6 +17,8 @@ import _ from 'lodash';
|
|
|
17
17
|
import ResizeObserver from 'rc-resize-observer';
|
|
18
18
|
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useState } from 'react';
|
|
19
19
|
import { Empty, Spin } from '..';
|
|
20
|
+
import { DndProvider } from 'react-dnd';
|
|
21
|
+
import { HTML5Backend } from 'react-dnd-html5-backend';
|
|
20
22
|
import ExpandCell from "./components/ExpandCell";
|
|
21
23
|
import Footer from "./components/Footer";
|
|
22
24
|
import { getRowKey, getTableColumns, prefixCls } from "./helper";
|
|
@@ -24,6 +26,7 @@ import useExpandable, { getExpandableConfig } from "./hooks/useExpandable";
|
|
|
24
26
|
import useFixed from "./hooks/useFixed";
|
|
25
27
|
import useRowSelection from "./hooks/useRowSelection";
|
|
26
28
|
import useScroll from "./hooks/useScroll";
|
|
29
|
+
import useRowDnd from "./hooks/useRowDnd";
|
|
27
30
|
var HEADER_HEIGHT = 41;
|
|
28
31
|
var FOOTER_HEIGHT = 52;
|
|
29
32
|
function Table(props, ref) {
|
|
@@ -47,7 +50,8 @@ function Table(props, ref) {
|
|
|
47
50
|
onRowClick = props.onRowClick,
|
|
48
51
|
onError = props.onError,
|
|
49
52
|
onSort = props.onSort,
|
|
50
|
-
expandable = props.expandable
|
|
53
|
+
expandable = props.expandable,
|
|
54
|
+
rowDnd = props.rowDnd;
|
|
51
55
|
var _useState = useState(null),
|
|
52
56
|
_useState2 = _slicedToArray(_useState, 2),
|
|
53
57
|
totalSize = _useState2[0],
|
|
@@ -87,18 +91,22 @@ function Table(props, ref) {
|
|
|
87
91
|
});
|
|
88
92
|
var expandableConfig = getExpandableConfig(expandable);
|
|
89
93
|
var rowSelectionInfo = useRowSelection(props);
|
|
94
|
+
var rowDndInfo = useRowDnd(_objectSpread(_objectSpread({}, props), {}, {
|
|
95
|
+
columns: rowSelectionInfo.columns,
|
|
96
|
+
data: expandableInfo.data
|
|
97
|
+
}));
|
|
90
98
|
var tableColumns = useMemo(function () {
|
|
91
99
|
return getTableColumns({
|
|
92
|
-
columns:
|
|
100
|
+
columns: rowDndInfo.columns,
|
|
93
101
|
containerWidth: containerWidth || 0,
|
|
94
102
|
onError: onError,
|
|
95
103
|
onSort: onSort
|
|
96
104
|
});
|
|
97
|
-
}, [containerWidth, onError, onSort,
|
|
105
|
+
}, [containerWidth, onError, onSort, rowDndInfo.columns]);
|
|
98
106
|
var tableInstance = useReactTable({
|
|
99
107
|
columns: tableColumns,
|
|
100
108
|
// 排除掉被折叠的行
|
|
101
|
-
data:
|
|
109
|
+
data: rowDndInfo.tableData,
|
|
102
110
|
getCoreRowModel: getCoreRowModel(),
|
|
103
111
|
getRowId: function getRowId(row, index) {
|
|
104
112
|
return getRowKey(row, rowKey, index);
|
|
@@ -393,9 +401,18 @@ function Table(props, ref) {
|
|
|
393
401
|
var rowNode = /*#__PURE__*/React.createElement("div", {
|
|
394
402
|
key: rowId,
|
|
395
403
|
"data-index": virtual ? rowData.index : rowIndex,
|
|
396
|
-
className: classnames(prefixCls('tr'), (_classnames4 = {}, _defineProperty(_classnames4, prefixCls('row-hover'), hoverRowId === rowId), _defineProperty(_classnames4, prefixCls('no-border-tr'), isShowPagination && rowIndex === rows.length - 1), _classnames4), rowClassName(row.original, rowIndex)),
|
|
404
|
+
className: classnames(prefixCls('tr'), (_classnames4 = {}, _defineProperty(_classnames4, prefixCls('row-hover'), rowDndInfo.draggingRowId ? undefined : hoverRowId === rowId), _defineProperty(_classnames4, prefixCls('row-dragging'), rowDndInfo.draggingRowId === rowId), _defineProperty(_classnames4, prefixCls('no-border-tr'), isShowPagination && rowIndex === rows.length - 1), _classnames4), rowClassName(row.original, rowIndex)),
|
|
397
405
|
ref: function ref(node) {
|
|
398
|
-
|
|
406
|
+
// 将引用同时传递给 rowVirtualizer 和 rowDnd
|
|
407
|
+
rowVirtualizer.measureElement(node);
|
|
408
|
+
|
|
409
|
+
// 如果启用了行拖拽,则设置行引用
|
|
410
|
+
if (rowDnd && node) {
|
|
411
|
+
var rowRef = rowDndInfo.getRowRef(row.original, rowIndex);
|
|
412
|
+
if (rowRef) {
|
|
413
|
+
rowRef.current = node;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
399
416
|
},
|
|
400
417
|
onClick: onClickRow(row.original, rowIndex),
|
|
401
418
|
onMouseEnter: function onMouseEnter() {
|
|
@@ -474,6 +491,8 @@ function Table(props, ref) {
|
|
|
474
491
|
}
|
|
475
492
|
}, /*#__PURE__*/React.createElement("div", {
|
|
476
493
|
className: classnames(prefixCls('main'), (_classnames7 = {}, _defineProperty(_classnames7, prefixCls('overflow-hidden'), !!y), _defineProperty(_classnames7, prefixCls('ping-left'), isPingLeft), _defineProperty(_classnames7, prefixCls('ping-right'), isPingRight), _classnames7))
|
|
477
|
-
},
|
|
494
|
+
}, rowDnd ? /*#__PURE__*/React.createElement(DndProvider, {
|
|
495
|
+
backend: HTML5Backend
|
|
496
|
+
}, tableContent) : tableContent)));
|
|
478
497
|
}
|
|
479
498
|
export default /*#__PURE__*/forwardRef(Table);
|
|
@@ -226,6 +226,12 @@
|
|
|
226
226
|
background-color: #f9fafb;
|
|
227
227
|
}
|
|
228
228
|
}
|
|
229
|
+
|
|
230
|
+
&.ald-table-row-dragging {
|
|
231
|
+
.ald-table-td {
|
|
232
|
+
background-color: #f9fafb;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
229
235
|
}
|
|
230
236
|
}
|
|
231
237
|
|
|
@@ -399,3 +405,17 @@
|
|
|
399
405
|
flex-shrink: 0;
|
|
400
406
|
flex-grow: 0;
|
|
401
407
|
}
|
|
408
|
+
|
|
409
|
+
/** 行拖拽 **/
|
|
410
|
+
.ald-table-row-dnd-item {
|
|
411
|
+
display: flex;
|
|
412
|
+
align-items: center;
|
|
413
|
+
justify-content: center;
|
|
414
|
+
width: 100%;
|
|
415
|
+
height: 100%;
|
|
416
|
+
cursor: grab;
|
|
417
|
+
|
|
418
|
+
&:active {
|
|
419
|
+
cursor: grabbing;
|
|
420
|
+
}
|
|
421
|
+
}
|
package/dist/Table/types.d.ts
CHANGED
|
@@ -21,6 +21,10 @@ export interface ITableProps<TDataItem extends object> {
|
|
|
21
21
|
rowSelection?: IRowSelection<TDataItem>;
|
|
22
22
|
bordered?: boolean;
|
|
23
23
|
virtual?: boolean;
|
|
24
|
+
rowDnd?: {
|
|
25
|
+
fixed?: boolean;
|
|
26
|
+
onChange: (data: TDataItem[], dataItem: TDataItem) => void;
|
|
27
|
+
};
|
|
24
28
|
}
|
|
25
29
|
export type TRowKey<TDataItem extends object> = string | ((record: TDataItem) => string | number);
|
|
26
30
|
export interface ITableCellErrorInfo {
|