@sheinx/hooks 3.9.6-beta.8 → 3.9.6-beta.9
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-table-row.d.ts","sourceRoot":"","sources":["use-table-row.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtE,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;IACV,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4CD;;;;GAIG;AACH,QAAA,MAAM,WAAW,UAAW,aAAa;;gCASS,MAAM;;;
|
|
1
|
+
{"version":3,"file":"use-table-row.d.ts","sourceRoot":"","sources":["use-table-row.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtE,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;IACV,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4CD;;;;GAIG;AACH,QAAA,MAAM,WAAW,UAAW,aAAa;;gCASS,MAAM;;;CA2FvD,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -71,6 +71,32 @@ var useTableRow = function useTableRow(props) {
|
|
|
71
71
|
}
|
|
72
72
|
setHoverIndex(hoverIndex);
|
|
73
73
|
});
|
|
74
|
+
|
|
75
|
+
// 为虚拟滚动场景预计算 checkbox 列的 rowSpan 索引数组(缓存以提升性能)
|
|
76
|
+
var checkboxRowSpanIndexArray = (0, _react.useMemo)(function () {
|
|
77
|
+
var columns = props.columns || [];
|
|
78
|
+
var checkCol = columns.find(function (col) {
|
|
79
|
+
return col.type === 'checkbox';
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// 只在虚拟滚动 + checkbox 有 rowSpan 时才需要计算
|
|
83
|
+
if (!(checkCol !== null && checkCol !== void 0 && checkCol.rowSpan) || !props.rowSpanIndexArray || !props.originData) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
var originData = props.originData;
|
|
87
|
+
var indexArray = [];
|
|
88
|
+
for (var i = 0; i < originData.length; i++) {
|
|
89
|
+
if (indexArray[i] === undefined) {
|
|
90
|
+
indexArray[i] = i;
|
|
91
|
+
}
|
|
92
|
+
// 检查当前行是否应该和下一行合并
|
|
93
|
+
if (i < originData.length - 1 && checkCol.rowSpan(originData[i], originData[i + 1])) {
|
|
94
|
+
// 下一行应该指向当前行的起始索引
|
|
95
|
+
indexArray[i + 1] = indexArray[i];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return indexArray;
|
|
99
|
+
}, [props.columns, props.originData, props.rowSpanIndexArray]);
|
|
74
100
|
var rowData = (0, _react.useMemo)(function () {
|
|
75
101
|
var rows = [];
|
|
76
102
|
context.rowSelectMergeStartData = [];
|
|
@@ -81,29 +107,26 @@ var useTableRow = function useTableRow(props) {
|
|
|
81
107
|
});
|
|
82
108
|
|
|
83
109
|
// 计算 rowSelectMergeStartData
|
|
84
|
-
if (
|
|
85
|
-
// checkbox
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
var
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
110
|
+
if (checkboxRowSpanIndexArray && props.originData) {
|
|
111
|
+
// 虚拟滚动 + checkbox 有 rowSpan:使用预计算的 checkbox 专属索引数组
|
|
112
|
+
var originData = props.originData;
|
|
113
|
+
for (var i = 0; i < data.length; i++) {
|
|
114
|
+
var globalIndex = currentIndex + i;
|
|
115
|
+
var startIndex = checkboxRowSpanIndexArray[globalIndex];
|
|
116
|
+
context.rowSelectMergeStartData[i] = originData[startIndex] || data[i];
|
|
117
|
+
}
|
|
118
|
+
} else if (checkCol !== null && checkCol !== void 0 && checkCol.rowSpan) {
|
|
119
|
+
// 非虚拟滚动 + checkbox 有 rowSpan:基于当前数据计算
|
|
120
|
+
for (var _i = 0; _i < data.length; _i++) {
|
|
121
|
+
var currentData = data[_i];
|
|
122
|
+
// 如果当前行还没有被设置起始数据,说明它是一个新的合并组的起始
|
|
123
|
+
if (context.rowSelectMergeStartData[_i] === undefined) {
|
|
124
|
+
context.rowSelectMergeStartData[_i] = currentData;
|
|
93
125
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
// 如果当前行还没有被设置起始数据,说明它是一个新的合并组的起始
|
|
99
|
-
if (context.rowSelectMergeStartData[_i] === undefined) {
|
|
100
|
-
context.rowSelectMergeStartData[_i] = currentData;
|
|
101
|
-
}
|
|
102
|
-
// 检查当前行是否应该和下一行合并
|
|
103
|
-
if (_i < data.length - 1 && checkCol.rowSpan(currentData, data[_i + 1])) {
|
|
104
|
-
// 下一行应该指向当前行的起始数据
|
|
105
|
-
context.rowSelectMergeStartData[_i + 1] = context.rowSelectMergeStartData[_i];
|
|
106
|
-
}
|
|
126
|
+
// 检查当前行是否应该和下一行合并
|
|
127
|
+
if (_i < data.length - 1 && checkCol.rowSpan(currentData, data[_i + 1])) {
|
|
128
|
+
// 下一行应该指向当前行的起始数据
|
|
129
|
+
context.rowSelectMergeStartData[_i + 1] = context.rowSelectMergeStartData[_i];
|
|
107
130
|
}
|
|
108
131
|
}
|
|
109
132
|
} else {
|
|
@@ -120,7 +143,7 @@ var useTableRow = function useTableRow(props) {
|
|
|
120
143
|
}));
|
|
121
144
|
}
|
|
122
145
|
return rows;
|
|
123
|
-
}, [props.columns, props.data, props.originData, props.rowSpanIndexArray, currentIndex]);
|
|
146
|
+
}, [props.columns, props.data, props.originData, props.rowSpanIndexArray, currentIndex, checkboxRowSpanIndexArray]);
|
|
124
147
|
return {
|
|
125
148
|
rowData: rowData,
|
|
126
149
|
handleCellHover: handleCellHover,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-table-row.d.ts","sourceRoot":"","sources":["use-table-row.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtE,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;IACV,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4CD;;;;GAIG;AACH,QAAA,MAAM,WAAW,UAAW,aAAa;;gCASS,MAAM;;;
|
|
1
|
+
{"version":3,"file":"use-table-row.d.ts","sourceRoot":"","sources":["use-table-row.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtE,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;IACV,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4CD;;;;GAIG;AACH,QAAA,MAAM,WAAW,UAAW,aAAa;;gCASS,MAAM;;;CA2FvD,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -65,6 +65,32 @@ var useTableRow = function useTableRow(props) {
|
|
|
65
65
|
}
|
|
66
66
|
setHoverIndex(hoverIndex);
|
|
67
67
|
});
|
|
68
|
+
|
|
69
|
+
// 为虚拟滚动场景预计算 checkbox 列的 rowSpan 索引数组(缓存以提升性能)
|
|
70
|
+
var checkboxRowSpanIndexArray = useMemo(function () {
|
|
71
|
+
var columns = props.columns || [];
|
|
72
|
+
var checkCol = columns.find(function (col) {
|
|
73
|
+
return col.type === 'checkbox';
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// 只在虚拟滚动 + checkbox 有 rowSpan 时才需要计算
|
|
77
|
+
if (!(checkCol !== null && checkCol !== void 0 && checkCol.rowSpan) || !props.rowSpanIndexArray || !props.originData) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
var originData = props.originData;
|
|
81
|
+
var indexArray = [];
|
|
82
|
+
for (var i = 0; i < originData.length; i++) {
|
|
83
|
+
if (indexArray[i] === undefined) {
|
|
84
|
+
indexArray[i] = i;
|
|
85
|
+
}
|
|
86
|
+
// 检查当前行是否应该和下一行合并
|
|
87
|
+
if (i < originData.length - 1 && checkCol.rowSpan(originData[i], originData[i + 1])) {
|
|
88
|
+
// 下一行应该指向当前行的起始索引
|
|
89
|
+
indexArray[i + 1] = indexArray[i];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return indexArray;
|
|
93
|
+
}, [props.columns, props.originData, props.rowSpanIndexArray]);
|
|
68
94
|
var rowData = useMemo(function () {
|
|
69
95
|
var rows = [];
|
|
70
96
|
context.rowSelectMergeStartData = [];
|
|
@@ -75,29 +101,26 @@ var useTableRow = function useTableRow(props) {
|
|
|
75
101
|
});
|
|
76
102
|
|
|
77
103
|
// 计算 rowSelectMergeStartData
|
|
78
|
-
if (
|
|
79
|
-
// checkbox
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
var
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
104
|
+
if (checkboxRowSpanIndexArray && props.originData) {
|
|
105
|
+
// 虚拟滚动 + checkbox 有 rowSpan:使用预计算的 checkbox 专属索引数组
|
|
106
|
+
var originData = props.originData;
|
|
107
|
+
for (var i = 0; i < data.length; i++) {
|
|
108
|
+
var globalIndex = currentIndex + i;
|
|
109
|
+
var startIndex = checkboxRowSpanIndexArray[globalIndex];
|
|
110
|
+
context.rowSelectMergeStartData[i] = originData[startIndex] || data[i];
|
|
111
|
+
}
|
|
112
|
+
} else if (checkCol !== null && checkCol !== void 0 && checkCol.rowSpan) {
|
|
113
|
+
// 非虚拟滚动 + checkbox 有 rowSpan:基于当前数据计算
|
|
114
|
+
for (var _i = 0; _i < data.length; _i++) {
|
|
115
|
+
var currentData = data[_i];
|
|
116
|
+
// 如果当前行还没有被设置起始数据,说明它是一个新的合并组的起始
|
|
117
|
+
if (context.rowSelectMergeStartData[_i] === undefined) {
|
|
118
|
+
context.rowSelectMergeStartData[_i] = currentData;
|
|
87
119
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
// 如果当前行还没有被设置起始数据,说明它是一个新的合并组的起始
|
|
93
|
-
if (context.rowSelectMergeStartData[_i] === undefined) {
|
|
94
|
-
context.rowSelectMergeStartData[_i] = currentData;
|
|
95
|
-
}
|
|
96
|
-
// 检查当前行是否应该和下一行合并
|
|
97
|
-
if (_i < data.length - 1 && checkCol.rowSpan(currentData, data[_i + 1])) {
|
|
98
|
-
// 下一行应该指向当前行的起始数据
|
|
99
|
-
context.rowSelectMergeStartData[_i + 1] = context.rowSelectMergeStartData[_i];
|
|
100
|
-
}
|
|
120
|
+
// 检查当前行是否应该和下一行合并
|
|
121
|
+
if (_i < data.length - 1 && checkCol.rowSpan(currentData, data[_i + 1])) {
|
|
122
|
+
// 下一行应该指向当前行的起始数据
|
|
123
|
+
context.rowSelectMergeStartData[_i + 1] = context.rowSelectMergeStartData[_i];
|
|
101
124
|
}
|
|
102
125
|
}
|
|
103
126
|
} else {
|
|
@@ -114,7 +137,7 @@ var useTableRow = function useTableRow(props) {
|
|
|
114
137
|
}));
|
|
115
138
|
}
|
|
116
139
|
return rows;
|
|
117
|
-
}, [props.columns, props.data, props.originData, props.rowSpanIndexArray, currentIndex]);
|
|
140
|
+
}, [props.columns, props.data, props.originData, props.rowSpanIndexArray, currentIndex, checkboxRowSpanIndexArray]);
|
|
118
141
|
return {
|
|
119
142
|
rowData: rowData,
|
|
120
143
|
handleCellHover: handleCellHover,
|