plain-design 1.0.0-beta.19 → 1.0.0-beta.20
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/plain-design.commonjs.min.js +1 -1
- package/dist/plain-design.min.css +1 -1
- package/dist/plain-design.min.js +1 -1
- package/dist/report.html +2 -2
- package/package.json +1 -1
- package/src/packages/components/VirtualList/useVirtualList.tsx +47 -15
- package/src/packages/components/VirtualTable/index.tsx +2 -2
- package/src/packages/components/usePopup/PopupItem.tsx +1 -0
- package/src/packages/components/usePopup/popup-item.scss +4 -0
package/package.json
CHANGED
@@ -3,6 +3,7 @@ import {delay} from "plain-utils/utils/delay";
|
|
3
3
|
import './virtual-list.scss';
|
4
4
|
import Scroll from "../Scroll";
|
5
5
|
import {unit} from "plain-utils/string/unit";
|
6
|
+
import {createEnum} from "plain-utils/utils/createEnum";
|
6
7
|
|
7
8
|
interface DataNode {
|
8
9
|
top: number;
|
@@ -13,6 +14,8 @@ interface DataNode {
|
|
13
14
|
index: number;
|
14
15
|
}
|
15
16
|
|
17
|
+
const ScrollDirection = createEnum(['up', 'down', 'none'] as const);
|
18
|
+
|
16
19
|
export function useVirtualList(
|
17
20
|
{
|
18
21
|
props,
|
@@ -53,6 +56,7 @@ export function useVirtualList(
|
|
53
56
|
nodes: [] as DataNode[], // 格式化的data数组数据
|
54
57
|
scrollTop: 0, // 当前滚动scrollTop(非实时的)
|
55
58
|
pageSize: 0, // 页大小
|
59
|
+
scrollDirection: ScrollDirection.none as typeof ScrollDirection.TYPE,
|
56
60
|
});
|
57
61
|
|
58
62
|
/**
|
@@ -189,18 +193,37 @@ export function useVirtualList(
|
|
189
193
|
* @date 2020/12/14 22:44
|
190
194
|
*/
|
191
195
|
getPageIndex: (scrollTop: number, pageSize: number) => {
|
196
|
+
if (scrollTop < 0) {
|
197
|
+
scrollTop = 0;
|
198
|
+
}
|
192
199
|
const data = props.data || [];
|
193
200
|
/*当前scrollTop对应的数据中数据的索引*/
|
194
201
|
let scrollIndex = utils.getIndex(scrollTop);
|
195
202
|
let pageIndex = Math.floor(scrollIndex / pageSize);
|
196
|
-
let start =
|
197
|
-
|
203
|
+
let start = (() => {
|
204
|
+
if (state.scrollDirection === 'none') {
|
205
|
+
return scrollIndex - Math.floor(pageSize * 0.5);
|
206
|
+
} else if (state.scrollDirection === 'up') {
|
207
|
+
return scrollIndex - pageSize;
|
208
|
+
} else {
|
209
|
+
return scrollIndex;
|
210
|
+
}
|
211
|
+
})();
|
212
|
+
let end = start + pageSize * 2;
|
213
|
+
start -= 1;
|
214
|
+
end += 1;
|
215
|
+
if (start < 0) {
|
216
|
+
end -= start;
|
217
|
+
start = 0;
|
218
|
+
}
|
198
219
|
/*console.log({
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
220
|
+
scrollIndex,
|
221
|
+
pageIndex,
|
222
|
+
start,
|
223
|
+
end,
|
224
|
+
pageSize,
|
225
|
+
scrollDirection: state.scrollDirection
|
226
|
+
});*/
|
204
227
|
const exceed = end - data.length;
|
205
228
|
if (exceed > 0) {
|
206
229
|
end = data.length;
|
@@ -242,13 +265,13 @@ export function useVirtualList(
|
|
242
265
|
if (props.disabled) {
|
243
266
|
return;
|
244
267
|
}
|
245
|
-
|
268
|
+
const newScrollTop = (e.target as HTMLDivElement).scrollTop;
|
269
|
+
state.scrollDirection = newScrollTop > freezeState.scrollTop ? ScrollDirection.down : ScrollDirection.up;
|
270
|
+
freezeState.scrollTop = newScrollTop;
|
246
271
|
const current = utils.getPageIndex((e.target as HTMLDivElement).scrollTop, state.pageSize);
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
emit.onPageIndexChange(current);
|
251
|
-
}
|
272
|
+
state.scrollTop = (e.target as HTMLDivElement).scrollTop;
|
273
|
+
freezeState.current = current;
|
274
|
+
emit.onPageIndexChange(current);
|
252
275
|
}
|
253
276
|
};
|
254
277
|
|
@@ -265,8 +288,17 @@ export function useVirtualList(
|
|
265
288
|
});
|
266
289
|
|
267
290
|
onMounted(() => {
|
268
|
-
|
269
|
-
|
291
|
+
let hostHeight = refs.scroll!.refs.host!.offsetHeight;
|
292
|
+
const headEl = refs.scroll!.refs.host!.querySelector('[data-virtual-head]') as undefined | HTMLDivElement;
|
293
|
+
const footEl = refs.scroll!.refs.host!.querySelector('[data-virtual-foot]') as undefined | HTMLDivElement;
|
294
|
+
if (!!headEl) {
|
295
|
+
hostHeight -= headEl.offsetHeight;
|
296
|
+
}
|
297
|
+
if (!!footEl) {
|
298
|
+
hostHeight -= footEl.offsetHeight;
|
299
|
+
}
|
300
|
+
|
301
|
+
state.pageSize = Math.floor(hostHeight / props.size);
|
270
302
|
if (props.dynamicSize && !props.disabled) {
|
271
303
|
utils.resetData(props.data);
|
272
304
|
}
|
@@ -157,7 +157,7 @@ export const VirtualTable = designComponent({
|
|
157
157
|
<>
|
158
158
|
{!!headHeight.value && (
|
159
159
|
<div className="virtual-table-head-table-wrapper" ref={onRef.head}>
|
160
|
-
<table className="virtual-table-head-table" style={headTableStyles.value} {...PublicTableAttrs}>
|
160
|
+
<table className="virtual-table-head-table" style={headTableStyles.value} {...PublicTableAttrs} data-virtual-head>
|
161
161
|
{slots.headColgroup()}
|
162
162
|
<thead>{slots.head()}</thead>
|
163
163
|
</table>
|
@@ -175,7 +175,7 @@ export const VirtualTable = designComponent({
|
|
175
175
|
</div>
|
176
176
|
{!!props.summaryData?.length && (
|
177
177
|
<div className="virtual-table-summary-table-wrapper" ref={onRef.summary}>
|
178
|
-
<table className="virtual-table-summary-table" style={summaryTableStyles.value}{...PublicTableAttrs}>
|
178
|
+
<table className="virtual-table-summary-table" style={summaryTableStyles.value}{...PublicTableAttrs} data-virtual-foot>
|
179
179
|
{slots.colgroup()}
|
180
180
|
<tbody>{!props.summaryData ? null : props.summaryData.map((item, index) => scopeSlots.default({ item, index, virtualIndex: index }))}</tbody>
|
181
181
|
</table>
|
@@ -82,6 +82,7 @@ export const PopupItem = designComponent({
|
|
82
82
|
'popup-item-is-dark': !application.value.theme.dark && !state.option.status && !!state.option.dark,
|
83
83
|
[`popup-item-status-${state.option.status}`]: !!state.option.status,
|
84
84
|
'popup-item-dark-app': application.value.theme.dark,
|
85
|
+
'popup-item-no-interactive': !state.option.interactive,
|
85
86
|
}
|
86
87
|
]);
|
87
88
|
|
@@ -112,6 +112,10 @@
|
|
112
112
|
&.popup-item-no-border {
|
113
113
|
filter: none !important;
|
114
114
|
}
|
115
|
+
|
116
|
+
&.popup-item-no-interactive {
|
117
|
+
pointer-events: none;
|
118
|
+
}
|
115
119
|
/*---------------------------------------animation-------------------------------------------*/
|
116
120
|
|
117
121
|
&.popup-item-animation-fade {
|