@tarojs/components-advanced 3.6.10 → 3.6.11-alpha.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/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/virtual-list/index.d.ts +49 -30
- package/dist/components/virtual-list/index.js.map +1 -1
- package/dist/components/virtual-list/list-set.d.ts +4 -0
- package/dist/components/virtual-list/list-set.js +24 -59
- package/dist/components/virtual-list/list-set.js.map +1 -1
- package/dist/components/virtual-list/preset.d.ts +23 -8
- package/dist/components/virtual-list/preset.js +116 -60
- package/dist/components/virtual-list/preset.js.map +1 -1
- package/dist/components/virtual-list/react/index.d.ts +1 -1
- package/dist/components/virtual-list/react/index.js +8 -16
- package/dist/components/virtual-list/react/index.js.map +1 -1
- package/dist/components/virtual-list/react/list.d.ts +5 -4
- package/dist/components/virtual-list/react/list.js +138 -124
- package/dist/components/virtual-list/react/list.js.map +1 -1
- package/dist/components/virtual-list/react/validate.d.ts +1 -1
- package/dist/components/virtual-list/react/validate.js +8 -14
- package/dist/components/virtual-list/react/validate.js.map +1 -1
- package/dist/components/virtual-list/react/wrapper.d.ts +3 -0
- package/dist/components/virtual-list/react/wrapper.js +58 -0
- package/dist/components/virtual-list/react/wrapper.js.map +1 -0
- package/dist/components/virtual-list/utils.d.ts +1 -4
- package/dist/components/virtual-list/utils.js +1 -28
- package/dist/components/virtual-list/utils.js.map +1 -1
- package/dist/components/virtual-list/vue/list.d.ts +406 -50
- package/dist/components/virtual-list/vue/list.js +198 -169
- package/dist/components/virtual-list/vue/list.js.map +1 -1
- package/dist/components/virtual-waterfall/constants.d.ts +2 -0
- package/dist/components/virtual-waterfall/constants.js +4 -0
- package/dist/components/virtual-waterfall/constants.js.map +1 -0
- package/dist/components/virtual-waterfall/index.d.ts +249 -0
- package/dist/components/virtual-waterfall/index.js +6 -0
- package/dist/components/virtual-waterfall/index.js.map +1 -0
- package/dist/components/virtual-waterfall/list-map.d.ts +50 -0
- package/dist/components/virtual-waterfall/list-map.js +280 -0
- package/dist/components/virtual-waterfall/list-map.js.map +1 -0
- package/dist/components/virtual-waterfall/preset.d.ts +60 -0
- package/dist/components/virtual-waterfall/preset.js +170 -0
- package/dist/components/virtual-waterfall/preset.js.map +1 -0
- package/dist/components/virtual-waterfall/react/index.d.ts +4 -0
- package/dist/components/virtual-waterfall/react/index.js +26 -0
- package/dist/components/virtual-waterfall/react/index.js.map +1 -0
- package/dist/components/virtual-waterfall/react/waterfall.d.ts +42 -0
- package/dist/components/virtual-waterfall/react/waterfall.js +316 -0
- package/dist/components/virtual-waterfall/react/waterfall.js.map +1 -0
- package/dist/components/virtual-waterfall/react/wrapper.d.ts +3 -0
- package/dist/components/virtual-waterfall/react/wrapper.js +50 -0
- package/dist/components/virtual-waterfall/react/wrapper.js.map +1 -0
- package/dist/components/virtual-waterfall/vue/index.d.ts +17 -0
- package/dist/components/virtual-waterfall/vue/index.js +12 -0
- package/dist/components/virtual-waterfall/vue/index.js.map +1 -0
- package/dist/components/virtual-waterfall/vue/waterfall.d.ts +443 -0
- package/dist/components/virtual-waterfall/vue/waterfall.js +410 -0
- package/dist/components/virtual-waterfall/vue/waterfall.js.map +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/convert.d.ts +2 -2
- package/dist/utils/convert.js.map +1 -1
- package/dist/utils/dom.d.ts +7 -0
- package/dist/utils/dom.js +45 -0
- package/dist/utils/dom.js.map +1 -0
- package/dist/utils/helper.d.ts +10 -0
- package/dist/utils/helper.js +51 -0
- package/dist/utils/helper.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +3 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/lodash.d.ts +3 -1
- package/dist/utils/lodash.js +30 -1
- package/dist/utils/lodash.js.map +1 -1
- package/dist/utils/vue-render.d.ts +4 -0
- package/dist/{components/virtual-list/vue/render.js → utils/vue-render.js} +2 -2
- package/dist/utils/vue-render.js.map +1 -0
- package/package.json +8 -6
- package/dist/components/virtual-list/vue/render.d.ts +0 -4
- package/dist/components/virtual-list/vue/render.js.map +0 -1
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { isFunction, isNumber } from '@tarojs/shared';
|
|
2
|
+
import memoizeOne from 'memoize-one';
|
|
3
|
+
import '../../utils/index.js';
|
|
4
|
+
import { getOffsetForIndexAndAlignment } from '../../utils/helper.js';
|
|
5
|
+
|
|
6
|
+
class ListMap {
|
|
7
|
+
constructor(props, refresh) {
|
|
8
|
+
this.props = props;
|
|
9
|
+
this.refresh = refresh;
|
|
10
|
+
this._columnMap = []; // [itemIndex, itemSize]
|
|
11
|
+
this._items = []; // columnIndex-rowIndex
|
|
12
|
+
this.minItemSize = 0;
|
|
13
|
+
this.maxItemSize = 0;
|
|
14
|
+
this.defaultSize = 1;
|
|
15
|
+
this.wrapperHeight = 0;
|
|
16
|
+
this.wrapperWidth = 0;
|
|
17
|
+
this.columns = 2;
|
|
18
|
+
this.columnWidth = 0;
|
|
19
|
+
this.refreshCounter = 0;
|
|
20
|
+
this.getOffsetSizeCache = memoizeOne((column, row, _flag = this.refreshCounter) => {
|
|
21
|
+
return this.getOffsetSizeByPosition(column, row);
|
|
22
|
+
});
|
|
23
|
+
// Note: 不考虑列表模式切换情况,可能会导致列表抖动体验过差
|
|
24
|
+
if (this.props.unlimitedSize) {
|
|
25
|
+
this.mode = 'unlimited';
|
|
26
|
+
}
|
|
27
|
+
else if (isFunction(this.props.itemSize)) {
|
|
28
|
+
this.mode = 'function';
|
|
29
|
+
}
|
|
30
|
+
else if (isNumber(this.props.itemSize)) {
|
|
31
|
+
this.mode = 'normal';
|
|
32
|
+
}
|
|
33
|
+
this.defaultSize = (isFunction(this.props.itemSize) ? this.props.itemSize() : this.props.itemSize) || 1;
|
|
34
|
+
this.minItemSize = this.defaultSize;
|
|
35
|
+
this.maxItemSize = this.defaultSize;
|
|
36
|
+
this.update(props);
|
|
37
|
+
}
|
|
38
|
+
get isNormalMode() {
|
|
39
|
+
return this.mode === 'normal';
|
|
40
|
+
}
|
|
41
|
+
get isFunctionMode() {
|
|
42
|
+
return this.mode === 'function';
|
|
43
|
+
}
|
|
44
|
+
get isUnlimitedMode() {
|
|
45
|
+
return this.mode === 'unlimited';
|
|
46
|
+
}
|
|
47
|
+
get length() {
|
|
48
|
+
return this.props.itemCount || 100;
|
|
49
|
+
}
|
|
50
|
+
get overscan() {
|
|
51
|
+
return this.props.overscanDistance || 50;
|
|
52
|
+
}
|
|
53
|
+
get columnsSize() {
|
|
54
|
+
if (this.isNormalMode) {
|
|
55
|
+
return new Array(this._columns).fill(this.getColumnSize());
|
|
56
|
+
}
|
|
57
|
+
return new Array(this._columns).fill(0).map((_, i) => this.getColumnSize(i));
|
|
58
|
+
}
|
|
59
|
+
get maxColumnSize() {
|
|
60
|
+
if (this.isNormalMode)
|
|
61
|
+
return this.getColumnSize();
|
|
62
|
+
return Math.max(...this.columnsSize);
|
|
63
|
+
}
|
|
64
|
+
get minColumnSize() {
|
|
65
|
+
if (this.isNormalMode)
|
|
66
|
+
return this.getColumnSize();
|
|
67
|
+
return Math.min(...this.columnsSize);
|
|
68
|
+
}
|
|
69
|
+
get maxColumnIndex() {
|
|
70
|
+
if (this.isNormalMode)
|
|
71
|
+
return 0;
|
|
72
|
+
const list = this.columnsSize;
|
|
73
|
+
return list.indexOf(Math.max(...list));
|
|
74
|
+
}
|
|
75
|
+
get minColumnIndex() {
|
|
76
|
+
if (this.isNormalMode)
|
|
77
|
+
return 0;
|
|
78
|
+
const list = this.columnsSize;
|
|
79
|
+
return list.indexOf(Math.min(...list));
|
|
80
|
+
}
|
|
81
|
+
update(props) {
|
|
82
|
+
this.props = props;
|
|
83
|
+
const { column, columnWidth } = this.props;
|
|
84
|
+
if (typeof column === 'number' && column > 0) {
|
|
85
|
+
this.columns = column;
|
|
86
|
+
this.columnWidth = this.wrapperWidth / column;
|
|
87
|
+
}
|
|
88
|
+
else if (typeof columnWidth === 'number' && columnWidth > 0) {
|
|
89
|
+
this.columns = Math.floor(this.wrapperWidth / columnWidth);
|
|
90
|
+
this.columnWidth = columnWidth;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.columns = 2;
|
|
94
|
+
this.columnWidth = this.wrapperWidth / this.columns;
|
|
95
|
+
}
|
|
96
|
+
this.columnWidth || (this.columnWidth = `calc(100% / ${this.columns})`);
|
|
97
|
+
this.updateColumns(this.columns);
|
|
98
|
+
// this.updateItem(this.length - 1)
|
|
99
|
+
}
|
|
100
|
+
updateColumns(columns = 2) {
|
|
101
|
+
if (!this.isNormalMode && this._columns !== columns) {
|
|
102
|
+
this._columns = columns;
|
|
103
|
+
this._columnMap = new Array(this._columns).fill(0).map(() => []);
|
|
104
|
+
this._items = [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
updateItem(itemIndex) {
|
|
108
|
+
if (this.isNormalMode)
|
|
109
|
+
return;
|
|
110
|
+
if (itemIndex >= this.length)
|
|
111
|
+
return this.updateItem(this.length - 1);
|
|
112
|
+
for (let i = 0; i <= itemIndex; i++) {
|
|
113
|
+
const position = this.getItemPosition(i);
|
|
114
|
+
if (position)
|
|
115
|
+
continue;
|
|
116
|
+
const column = this.minColumnIndex;
|
|
117
|
+
const row = this.getColumnLength(column);
|
|
118
|
+
this._items[i] = `${column}-${row}`;
|
|
119
|
+
const itemSize = this.getSizeByPosition(column, row, i);
|
|
120
|
+
if (!this.compareSizeByPosition(column, row, itemSize)) {
|
|
121
|
+
this.setSizeByPosition(column, row, itemSize, i);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
setSizeByPosition(column = 0, row = 0, itemSize = this.defaultSize, itemIndex = this.getItemIndexByPosition(column, row)) {
|
|
126
|
+
var _a;
|
|
127
|
+
if (itemIndex >= 0) {
|
|
128
|
+
if (this.maxItemSize < itemSize || this.maxItemSize === 0) {
|
|
129
|
+
this.maxItemSize = itemSize;
|
|
130
|
+
}
|
|
131
|
+
if (this.minItemSize > itemSize || this.minItemSize === 0) {
|
|
132
|
+
this.minItemSize = itemSize;
|
|
133
|
+
}
|
|
134
|
+
this._columnMap[column][row] = [itemIndex, itemSize];
|
|
135
|
+
if (!this.isNormalMode) {
|
|
136
|
+
(_a = this.refresh) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
137
|
+
this.refreshCounter++;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
getSize(itemIndex = 0) {
|
|
142
|
+
const position = this.getItemPosition(itemIndex);
|
|
143
|
+
if (position) {
|
|
144
|
+
return this.getSizeByPosition(...position, itemIndex);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
return this.defaultSize;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
getSizeByPosition(column = 0, row = 0, itemIndex = this.getItemIndexByPosition(column, row)) {
|
|
151
|
+
var _a;
|
|
152
|
+
if (this.isNormalMode)
|
|
153
|
+
return this.defaultSize;
|
|
154
|
+
let itemSize = (_a = this.getColumnList(column)[row]) === null || _a === void 0 ? void 0 : _a[1];
|
|
155
|
+
if (typeof itemSize === 'number')
|
|
156
|
+
return itemSize;
|
|
157
|
+
itemSize = (isFunction(this.props.itemSize) ? this.props.itemSize(itemIndex, this.props.itemData) : this.props.itemSize) || this.defaultSize;
|
|
158
|
+
this.setSizeByPosition(column, row, itemSize);
|
|
159
|
+
return itemSize;
|
|
160
|
+
}
|
|
161
|
+
// 不支持 normal 模式
|
|
162
|
+
getColumnList(column) {
|
|
163
|
+
var _a;
|
|
164
|
+
(_a = this._columnMap)[column] || (_a[column] = []);
|
|
165
|
+
return this._columnMap[column];
|
|
166
|
+
}
|
|
167
|
+
getColumnLength(columnIndex) {
|
|
168
|
+
if (this.isNormalMode)
|
|
169
|
+
return Math.ceil(this.length / this._columns);
|
|
170
|
+
return this.getColumnList(columnIndex).length;
|
|
171
|
+
}
|
|
172
|
+
getColumnSize(columnIndex = 0) {
|
|
173
|
+
if (this.isNormalMode) {
|
|
174
|
+
return this.defaultSize * this.getColumnLength(columnIndex);
|
|
175
|
+
}
|
|
176
|
+
// Note: 不考虑未同步节点情况
|
|
177
|
+
return this.getOffsetSizeCache(columnIndex, this.getColumnLength(columnIndex));
|
|
178
|
+
}
|
|
179
|
+
getItemPosition(itemIndex) {
|
|
180
|
+
var _a;
|
|
181
|
+
if (this.isNormalMode) {
|
|
182
|
+
const column = itemIndex % this._columns;
|
|
183
|
+
const row = Math.floor(itemIndex / this._columns);
|
|
184
|
+
return [column, row];
|
|
185
|
+
}
|
|
186
|
+
return ((_a = this._items[itemIndex]) === null || _a === void 0 ? void 0 : _a.split('-').map(Number)) || false;
|
|
187
|
+
}
|
|
188
|
+
getItemIndexByPosition(column = 0, row = 0) {
|
|
189
|
+
if (this.isNormalMode) {
|
|
190
|
+
return row * this._columns + column;
|
|
191
|
+
}
|
|
192
|
+
const columnList = this.getColumnList(column);
|
|
193
|
+
const [itemIndex] = columnList[row] || [];
|
|
194
|
+
return itemIndex;
|
|
195
|
+
}
|
|
196
|
+
getOffsetSize(itemIndex) {
|
|
197
|
+
const [column, row] = this.getItemPosition(itemIndex) || [];
|
|
198
|
+
return this.getOffsetSizeCache(column, row);
|
|
199
|
+
}
|
|
200
|
+
getOffsetSizeByPosition(column = 0, row = 0) {
|
|
201
|
+
column = Math.max(0, column);
|
|
202
|
+
row = Math.max(0, row);
|
|
203
|
+
let sum = 0;
|
|
204
|
+
for (let i = 0; i < row; i++) {
|
|
205
|
+
sum += this.getSizeByPosition(column, i);
|
|
206
|
+
}
|
|
207
|
+
return sum;
|
|
208
|
+
}
|
|
209
|
+
getStartIndex(column, offset) {
|
|
210
|
+
if (offset <= 0)
|
|
211
|
+
return 0;
|
|
212
|
+
if (this.isNormalMode) {
|
|
213
|
+
const size = this.minItemSize || 1;
|
|
214
|
+
return Math.max(0, Math.floor(offset / size));
|
|
215
|
+
}
|
|
216
|
+
const columnList = this.getColumnList(column);
|
|
217
|
+
const columnLength = columnList.length - 1;
|
|
218
|
+
let x = Math.floor(offset / (this.maxItemSize || 1));
|
|
219
|
+
let y = Math.ceil(offset / (this.minItemSize || 1));
|
|
220
|
+
this.updateItem(this.getItemIndexByPosition(column, y));
|
|
221
|
+
x = Math.min(x, columnLength);
|
|
222
|
+
y = Math.min(y, columnLength);
|
|
223
|
+
while (this.getOffsetSizeCache(column, x - 1) < offset && this.getOffsetSizeCache(column, y - 1) > offset && x < y) {
|
|
224
|
+
x < columnLength && x++;
|
|
225
|
+
y > 0 && y--;
|
|
226
|
+
}
|
|
227
|
+
return Math.max(0, Math.min(this.getOffsetSizeCache(column, x - 1) > offset ? x : y, columnLength) - 1);
|
|
228
|
+
}
|
|
229
|
+
getStopIndex(column, offset, start = 0) {
|
|
230
|
+
if (offset <= 0)
|
|
231
|
+
return 0;
|
|
232
|
+
if (this.isNormalMode) {
|
|
233
|
+
const size = this.minItemSize || 1;
|
|
234
|
+
const count = Math.ceil(offset / size);
|
|
235
|
+
return Math.min(count, this.getColumnSize(column));
|
|
236
|
+
}
|
|
237
|
+
const columnList = this.getColumnList(column);
|
|
238
|
+
const columnLength = columnList.length - 1;
|
|
239
|
+
let x = Math.max(start, Math.floor(offset / (this.maxItemSize || 1)));
|
|
240
|
+
let y = Math.max(start, Math.ceil(offset / (this.minItemSize || 1)));
|
|
241
|
+
this.updateItem(this.getItemIndexByPosition(column, y));
|
|
242
|
+
x = Math.min(x, columnLength);
|
|
243
|
+
y = Math.min(y, columnLength);
|
|
244
|
+
while (this.getOffsetSizeCache(column, x) < offset && this.getOffsetSizeCache(column, y) > offset && x < y) {
|
|
245
|
+
x < columnLength && x++;
|
|
246
|
+
y > 0 && y--;
|
|
247
|
+
}
|
|
248
|
+
return Math.max(1, Math.min(this.getOffsetSizeCache(column, x) > offset ? x : y, columnLength) + 1);
|
|
249
|
+
}
|
|
250
|
+
getRangeToRender(direction, column, offset, block = false) {
|
|
251
|
+
if (this.length === 0)
|
|
252
|
+
return [0, 0];
|
|
253
|
+
const scrollSize = this.maxColumnSize;
|
|
254
|
+
const backwardDistance = !block || direction === 'backward' ? Math.max(0, this.overscan) : 0;
|
|
255
|
+
const forwardDistance = !block || direction === 'forward' ? Math.max(0, this.overscan) : 0;
|
|
256
|
+
const overscanBackward = this.getStartIndex(column, Math.max(0, offset - this.wrapperHeight - backwardDistance));
|
|
257
|
+
const overscanForward = this.getStopIndex(column, Math.max(0, Math.min(scrollSize, offset + this.wrapperHeight + forwardDistance)), overscanBackward);
|
|
258
|
+
return [overscanBackward, overscanForward];
|
|
259
|
+
}
|
|
260
|
+
getOffsetForIndexAndAlignment(index, align, scrollOffset) {
|
|
261
|
+
return getOffsetForIndexAndAlignment({
|
|
262
|
+
align,
|
|
263
|
+
containerSize: this.wrapperHeight,
|
|
264
|
+
currentOffset: scrollOffset,
|
|
265
|
+
scrollSize: this.getOffsetSize(this.length),
|
|
266
|
+
slideSize: this.getColumnSize(index),
|
|
267
|
+
targetOffset: this.getOffsetSize(index),
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
compareSizeByPosition(column = 0, row = 0, size = this.getSizeByPosition(column, row)) {
|
|
271
|
+
var _a, _b;
|
|
272
|
+
if (this.isNormalMode)
|
|
273
|
+
return true;
|
|
274
|
+
const origenSize = (_b = (_a = this._columnMap[column]) === null || _a === void 0 ? void 0 : _a[row]) === null || _b === void 0 ? void 0 : _b[1];
|
|
275
|
+
return typeof origenSize === 'number' && origenSize === size;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
export { ListMap as default };
|
|
280
|
+
//# sourceMappingURL=list-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-map.js","sources":["../../../src/components/virtual-waterfall/list-map.ts"],"sourcesContent":["import { isFunction, isNumber } from '@tarojs/shared'\nimport memoizeOne from 'memoize-one'\n\nimport { getOffsetForIndexAndAlignment } from '../../utils'\n\nimport type { IProps } from './preset'\n\ntype TProps = Pick<IProps, 'column' | 'columnWidth' | 'width' | 'height' | 'itemCount' | 'itemData' | 'itemSize' | 'overscanDistance' | 'unlimitedSize'>\n\nexport default class ListMap {\n _columns: number\n _columnMap: [number, number][][] = [] // [itemIndex, itemSize]\n _items: string[] = [] // columnIndex-rowIndex\n mode?: 'normal' | 'function' | 'unlimited'\n minItemSize = 0\n maxItemSize = 0\n defaultSize = 1\n\n wrapperHeight = 0\n wrapperWidth = 0\n columns = 2\n columnWidth: string | number = 0\n\n refreshCounter = 0\n\n constructor (protected props: TProps, protected refresh?: TFunc) {\n // Note: 不考虑列表模式切换情况,可能会导致列表抖动体验过差\n if (this.props.unlimitedSize) {\n this.mode = 'unlimited'\n } else if (isFunction(this.props.itemSize)) {\n this.mode = 'function'\n } else if (isNumber(this.props.itemSize)) {\n this.mode = 'normal'\n }\n\n this.defaultSize = (isFunction(this.props.itemSize) ? this.props.itemSize() : this.props.itemSize) || 1\n this.minItemSize = this.defaultSize\n this.maxItemSize = this.defaultSize\n this.update(props)\n }\n\n get isNormalMode () {\n return this.mode === 'normal'\n }\n\n get isFunctionMode () {\n return this.mode === 'function'\n }\n\n get isUnlimitedMode () {\n return this.mode === 'unlimited'\n }\n\n get length () {\n return this.props.itemCount || 100\n }\n\n get overscan () {\n return this.props.overscanDistance || 50\n }\n\n get columnsSize () {\n if (this.isNormalMode) {\n return new Array(this._columns).fill(this.getColumnSize())\n }\n\n return new Array(this._columns).fill(0).map((_, i) => this.getColumnSize(i))\n }\n\n get maxColumnSize () {\n if (this.isNormalMode) return this.getColumnSize()\n\n return Math.max(...this.columnsSize)\n }\n\n get minColumnSize () {\n if (this.isNormalMode) return this.getColumnSize()\n\n return Math.min(...this.columnsSize)\n }\n\n get maxColumnIndex () {\n if (this.isNormalMode) return 0\n\n const list = this.columnsSize\n return list.indexOf(Math.max(...list))\n }\n\n get minColumnIndex () {\n if (this.isNormalMode) return 0\n\n const list = this.columnsSize\n return list.indexOf(Math.min(...list))\n }\n\n update (props: TProps) {\n this.props = props\n\n const { column, columnWidth } = this.props\n if (typeof column === 'number' && column > 0) {\n this.columns = column\n this.columnWidth = this.wrapperWidth / column\n } else if (typeof columnWidth === 'number' && columnWidth > 0) {\n this.columns = Math.floor(this.wrapperWidth / columnWidth)\n this.columnWidth = columnWidth\n } else {\n this.columns = 2\n this.columnWidth = this.wrapperWidth / this.columns\n }\n this.columnWidth ||= `calc(100% / ${this.columns})`\n this.updateColumns(this.columns)\n // this.updateItem(this.length - 1)\n }\n\n updateColumns (columns = 2) {\n if (!this.isNormalMode && this._columns !== columns) {\n this._columns = columns\n this._columnMap = new Array(this._columns).fill(0).map(() => [])\n this._items = []\n }\n }\n\n updateItem (itemIndex: number) {\n if (this.isNormalMode) return\n if (itemIndex >= this.length) return this.updateItem(this.length - 1)\n\n for (let i = 0; i <= itemIndex; i++) {\n const position = this.getItemPosition(i)\n if (position) continue\n\n const column = this.minColumnIndex\n const row = this.getColumnLength(column)\n this._items[i] = `${column}-${row}`\n const itemSize = this.getSizeByPosition(column, row, i)\n if (!this.compareSizeByPosition(column, row, itemSize)) {\n this.setSizeByPosition(column, row, itemSize, i)\n }\n }\n }\n\n setSizeByPosition (column = 0, row = 0, itemSize = this.defaultSize, itemIndex = this.getItemIndexByPosition(column, row)) {\n if (itemIndex >= 0) {\n if (this.maxItemSize < itemSize || this.maxItemSize === 0) {\n this.maxItemSize = itemSize\n }\n if (this.minItemSize > itemSize || this.minItemSize === 0) {\n this.minItemSize = itemSize\n }\n this._columnMap[column][row] = [itemIndex, itemSize]\n if (!this.isNormalMode) {\n this.refresh?.()\n this.refreshCounter++\n }\n }\n }\n\n getSize (itemIndex = 0) {\n const position = this.getItemPosition(itemIndex)\n if (position) {\n return this.getSizeByPosition(...position, itemIndex)\n } else {\n return this.defaultSize\n }\n }\n\n getSizeByPosition (column = 0, row = 0, itemIndex = this.getItemIndexByPosition(column, row)) {\n if (this.isNormalMode) return this.defaultSize\n let itemSize = this.getColumnList(column)[row]?.[1]\n if (typeof itemSize === 'number') return itemSize\n\n itemSize = (isFunction(this.props.itemSize) ? this.props.itemSize(itemIndex, this.props.itemData) : this.props.itemSize) || this.defaultSize\n this.setSizeByPosition(column, row, itemSize)\n return itemSize\n }\n\n // 不支持 normal 模式\n getColumnList (column: number) {\n this._columnMap[column] ||= []\n return this._columnMap[column]\n }\n\n getColumnLength (columnIndex: number) {\n if (this.isNormalMode) return Math.ceil(this.length / this._columns)\n\n return this.getColumnList(columnIndex).length\n }\n\n getColumnSize (columnIndex = 0) {\n if (this.isNormalMode) {\n return this.defaultSize * this.getColumnLength(columnIndex)\n }\n\n // Note: 不考虑未同步节点情况\n return this.getOffsetSizeCache(columnIndex, this.getColumnLength(columnIndex))\n }\n\n getItemPosition (itemIndex: number) {\n if (this.isNormalMode) {\n const column = itemIndex % this._columns\n const row = Math.floor(itemIndex / this._columns)\n return [column, row]\n }\n\n return this._items[itemIndex]?.split('-').map(Number) || false\n }\n\n getItemIndexByPosition (column = 0, row = 0) {\n if (this.isNormalMode) {\n return row * this._columns + column\n }\n\n const columnList = this.getColumnList(column)\n const [itemIndex] = columnList[row] || []\n return itemIndex\n }\n\n getOffsetSize (itemIndex: number) {\n const [column, row] = this.getItemPosition(itemIndex) || []\n return this.getOffsetSizeCache(column, row)\n }\n\n getOffsetSizeByPosition (column = 0, row = 0) {\n column = Math.max(0, column)\n row = Math.max(0, row)\n let sum = 0\n for (let i = 0; i < row; i++) {\n sum += this.getSizeByPosition(column, i)\n }\n return sum\n }\n\n getOffsetSizeCache = memoizeOne((column, row, _flag = this.refreshCounter) => {\n return this.getOffsetSizeByPosition(column, row)\n })\n\n getStartIndex (column: number, offset: number) {\n if (offset <= 0) return 0\n if (this.isNormalMode) {\n const size = this.minItemSize || 1\n return Math.max(0, Math.floor(offset / size))\n }\n\n const columnList = this.getColumnList(column)\n const columnLength = columnList.length - 1\n let x = Math.floor(offset / (this.maxItemSize || 1))\n let y = Math.ceil(offset / (this.minItemSize || 1))\n this.updateItem(this.getItemIndexByPosition(column, y))\n x = Math.min(x, columnLength)\n y = Math.min(y, columnLength)\n while (this.getOffsetSizeCache(column, x - 1) < offset && this.getOffsetSizeCache(column, y - 1) > offset && x < y) {\n x < columnLength && x++\n y > 0 && y--\n }\n return Math.max(0, Math.min(this.getOffsetSizeCache(column, x - 1) > offset ? x : y, columnLength) - 1)\n }\n\n getStopIndex (column: number, offset: number, start = 0) {\n if (offset <= 0) return 0\n if (this.isNormalMode) {\n const size = this.minItemSize || 1\n const count = Math.ceil(offset / size)\n return Math.min(count, this.getColumnSize(column))\n }\n const columnList = this.getColumnList(column)\n const columnLength = columnList.length - 1\n let x = Math.max(start, Math.floor(offset / (this.maxItemSize || 1)))\n let y = Math.max(start, Math.ceil(offset / (this.minItemSize || 1)))\n this.updateItem(this.getItemIndexByPosition(column, y))\n x = Math.min(x, columnLength)\n y = Math.min(y, columnLength)\n while (this.getOffsetSizeCache(column, x) < offset && this.getOffsetSizeCache(column, y) > offset && x < y) {\n x < columnLength && x++\n y > 0 && y--\n }\n return Math.max(1, Math.min(this.getOffsetSizeCache(column, x) > offset ? x : y, columnLength) + 1)\n }\n\n getRangeToRender (direction: 'forward' | 'backward', column: number, offset: number, block = false) {\n if (this.length === 0) return [0, 0]\n\n const scrollSize = this.maxColumnSize\n const backwardDistance = !block || direction === 'backward' ? Math.max(0, this.overscan) : 0\n const forwardDistance = !block || direction === 'forward' ? Math.max(0, this.overscan) : 0\n\n const overscanBackward = this.getStartIndex(column, Math.max(0, offset - this.wrapperHeight - backwardDistance))\n const overscanForward = this.getStopIndex(column, Math.max(0, Math.min(scrollSize, offset + this.wrapperHeight + forwardDistance)), overscanBackward)\n return [overscanBackward, overscanForward]\n }\n\n getOffsetForIndexAndAlignment (index: number, align: string, scrollOffset: number) {\n return getOffsetForIndexAndAlignment({\n align,\n containerSize: this.wrapperHeight,\n currentOffset: scrollOffset,\n scrollSize: this.getOffsetSize(this.length),\n slideSize: this.getColumnSize(index),\n targetOffset: this.getOffsetSize(index),\n })\n }\n\n compareSizeByPosition (column = 0, row = 0, size = this.getSizeByPosition(column, row)) {\n if (this.isNormalMode) return true\n\n const origenSize = this._columnMap[column]?.[row]?.[1]\n return typeof origenSize === 'number' && origenSize === size\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { IntersectionObserver } from '@tarojs/taro';
|
|
2
|
+
import * as CSS from 'csstype';
|
|
3
|
+
import { defaultItemKey } from "../../utils/index.js";
|
|
4
|
+
import ListMap from "./list-map.js";
|
|
5
|
+
import { VirtualWaterfallProps } from "./index.js";
|
|
6
|
+
interface IProps extends Partial<VirtualWaterfallProps> {
|
|
7
|
+
children?: VirtualWaterfallProps['item'];
|
|
8
|
+
itemKey?: typeof defaultItemKey;
|
|
9
|
+
itemTagName?: string;
|
|
10
|
+
innerTagName?: string;
|
|
11
|
+
outerTagName?: string;
|
|
12
|
+
outerRef?: React.Ref<HTMLElement> | string;
|
|
13
|
+
onItemsRendered?: TFunc;
|
|
14
|
+
shouldResetStyleCacheOnItemSizeChange?: boolean;
|
|
15
|
+
outerWrapper?: React.FC;
|
|
16
|
+
}
|
|
17
|
+
declare class Preset {
|
|
18
|
+
protected props: IProps;
|
|
19
|
+
protected refresh?: TFunc;
|
|
20
|
+
itemMap: ListMap;
|
|
21
|
+
_id: string;
|
|
22
|
+
_observer: Record<string, IntersectionObserver>;
|
|
23
|
+
constructor(props: IProps, refresh?: TFunc);
|
|
24
|
+
_wrapperField: {
|
|
25
|
+
scrollLeft: number;
|
|
26
|
+
scrollTop: number;
|
|
27
|
+
scrollHeight: number;
|
|
28
|
+
scrollWidth: number;
|
|
29
|
+
clientHeight: number;
|
|
30
|
+
clientWidth: number;
|
|
31
|
+
diffOffset: number;
|
|
32
|
+
};
|
|
33
|
+
diffList: number[];
|
|
34
|
+
init(props: IProps): void;
|
|
35
|
+
update(props: IProps): void;
|
|
36
|
+
updateWrapper(id: string): Promise<void>;
|
|
37
|
+
set id(id: string);
|
|
38
|
+
get id(): string;
|
|
39
|
+
get isRelative(): boolean;
|
|
40
|
+
get isBrick(): boolean;
|
|
41
|
+
get placeholderCount(): number;
|
|
42
|
+
get outerElement(): string | import("react").ComponentType<{}>;
|
|
43
|
+
get innerElement(): string | import("react").ComponentType<{}>;
|
|
44
|
+
get itemElement(): string | import("react").ComponentType<{}>;
|
|
45
|
+
get field(): Record<string, number>;
|
|
46
|
+
set field(o: Record<string, number>);
|
|
47
|
+
get enhanced(): true;
|
|
48
|
+
isShaking(diff?: number): boolean;
|
|
49
|
+
resetCache(): void;
|
|
50
|
+
getItemStyleCache: import("memoize-one").MemoizedFn<(this: any, itemIndex?: number, itemSize?: IProps['itemSize'] | false, _flag?: any) => CSS.Properties<string | number, string & {}>>;
|
|
51
|
+
getItemStyle(itemIndex: number): CSS.Properties<string | number, string & {}>;
|
|
52
|
+
boundaryDetection(): void;
|
|
53
|
+
boundaryDetectionHelper({ component, event, id, }: {
|
|
54
|
+
component?: TaroGeneral.IAnyObject;
|
|
55
|
+
event?: () => void;
|
|
56
|
+
id: string;
|
|
57
|
+
}): IntersectionObserver;
|
|
58
|
+
dispose(): void;
|
|
59
|
+
}
|
|
60
|
+
export { IProps, Preset as default };
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { isWebPlatform } from '@tarojs/shared';
|
|
2
|
+
import { createSelectorQuery, getCurrentInstance, createIntersectionObserver } from '@tarojs/taro';
|
|
3
|
+
import memoizeOne from 'memoize-one';
|
|
4
|
+
import '../../utils/index.js';
|
|
5
|
+
import ListMap from './list-map.js';
|
|
6
|
+
import { convertNumber2PX } from '../../utils/convert.js';
|
|
7
|
+
import { getRectSizeSync } from '../../utils/dom.js';
|
|
8
|
+
import { isCosDistributing } from '../../utils/math.js';
|
|
9
|
+
import { throttle } from '../../utils/lodash.js';
|
|
10
|
+
|
|
11
|
+
const isWeb = isWebPlatform();
|
|
12
|
+
let INSTANCE_ID = 0;
|
|
13
|
+
class Preset {
|
|
14
|
+
constructor(props, refresh) {
|
|
15
|
+
this.props = props;
|
|
16
|
+
this.refresh = refresh;
|
|
17
|
+
this._observer = {};
|
|
18
|
+
this._wrapperField = {
|
|
19
|
+
scrollLeft: 0,
|
|
20
|
+
scrollTop: 0,
|
|
21
|
+
scrollHeight: 0,
|
|
22
|
+
scrollWidth: 0,
|
|
23
|
+
clientHeight: 0,
|
|
24
|
+
clientWidth: 0,
|
|
25
|
+
diffOffset: 0
|
|
26
|
+
};
|
|
27
|
+
this.diffList = [0, 0, 0];
|
|
28
|
+
this.getItemStyleCache = memoizeOne((itemIndex, itemSize, _flag = this.itemMap.refreshCounter) => {
|
|
29
|
+
itemSize = itemSize || this.itemMap.getSize(itemIndex);
|
|
30
|
+
const style = this.isRelative ? {} : {
|
|
31
|
+
position: 'absolute',
|
|
32
|
+
left: 0,
|
|
33
|
+
};
|
|
34
|
+
style.width = '100%';
|
|
35
|
+
style.height = convertNumber2PX(itemSize);
|
|
36
|
+
if (!this.isRelative) {
|
|
37
|
+
const nodeOffset = this.itemMap.getOffsetSize(itemIndex);
|
|
38
|
+
style.top = convertNumber2PX(nodeOffset);
|
|
39
|
+
}
|
|
40
|
+
return style;
|
|
41
|
+
});
|
|
42
|
+
this.init(this.props);
|
|
43
|
+
this.itemMap = new ListMap(props, refresh);
|
|
44
|
+
}
|
|
45
|
+
init(props) {
|
|
46
|
+
this.props = props;
|
|
47
|
+
}
|
|
48
|
+
update(props) {
|
|
49
|
+
this.props = props;
|
|
50
|
+
this.itemMap.update(props);
|
|
51
|
+
}
|
|
52
|
+
async updateWrapper(id) {
|
|
53
|
+
var _a;
|
|
54
|
+
var _b, _c;
|
|
55
|
+
this.id = id;
|
|
56
|
+
const { width = 0, height = 0 } = this.props;
|
|
57
|
+
const validWidth = typeof width === 'number' && width > 0;
|
|
58
|
+
const validHeight = typeof height === 'number' && height > 0;
|
|
59
|
+
if (validWidth) {
|
|
60
|
+
this.itemMap.wrapperWidth = width;
|
|
61
|
+
}
|
|
62
|
+
if (validHeight) {
|
|
63
|
+
this.itemMap.wrapperHeight = height;
|
|
64
|
+
}
|
|
65
|
+
if (!validHeight || !validWidth) {
|
|
66
|
+
const res = await getRectSizeSync(`#${id}`, 100);
|
|
67
|
+
(_b = this.itemMap).wrapperWidth || (_b.wrapperWidth = res.width);
|
|
68
|
+
(_c = this.itemMap).wrapperHeight || (_c.wrapperHeight = res.height);
|
|
69
|
+
(_a = this.refresh) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
70
|
+
}
|
|
71
|
+
this.itemMap.update(this.props);
|
|
72
|
+
}
|
|
73
|
+
set id(id) {
|
|
74
|
+
this._id = id;
|
|
75
|
+
}
|
|
76
|
+
get id() {
|
|
77
|
+
this._id || (this._id = `virtual-waterfall-${INSTANCE_ID++}`);
|
|
78
|
+
return this._id;
|
|
79
|
+
}
|
|
80
|
+
get isRelative() {
|
|
81
|
+
return this.props.position && this.props.position !== 'absolute';
|
|
82
|
+
}
|
|
83
|
+
get isBrick() {
|
|
84
|
+
return this.props.position === 'brick';
|
|
85
|
+
}
|
|
86
|
+
get placeholderCount() {
|
|
87
|
+
return this.props.placeholderCount || 0;
|
|
88
|
+
}
|
|
89
|
+
get outerElement() {
|
|
90
|
+
return this.props.outerElementType || this.props.outerTagName || 'div';
|
|
91
|
+
}
|
|
92
|
+
get innerElement() {
|
|
93
|
+
return this.props.innerElementType || this.props.innerTagName || 'div';
|
|
94
|
+
}
|
|
95
|
+
get itemElement() {
|
|
96
|
+
return this.props.itemElementType || this.props.itemTagName || 'div';
|
|
97
|
+
}
|
|
98
|
+
get field() {
|
|
99
|
+
return this._wrapperField;
|
|
100
|
+
}
|
|
101
|
+
set field(o) {
|
|
102
|
+
Object.assign(this._wrapperField, o);
|
|
103
|
+
}
|
|
104
|
+
get enhanced() {
|
|
105
|
+
return this.props.enhanced || true;
|
|
106
|
+
}
|
|
107
|
+
isShaking(diff) {
|
|
108
|
+
if (isWeb || this.props.enhanced)
|
|
109
|
+
return false;
|
|
110
|
+
const list = this.diffList.slice(-3);
|
|
111
|
+
this.diffList.push(diff);
|
|
112
|
+
return list.findIndex(e => Math.abs(e) === Math.abs(diff)) !== -1 || isCosDistributing(this.diffList.slice(-4));
|
|
113
|
+
}
|
|
114
|
+
resetCache() {
|
|
115
|
+
this.itemMap.refreshCounter++;
|
|
116
|
+
}
|
|
117
|
+
getItemStyle(itemIndex) {
|
|
118
|
+
const { shouldResetStyleCacheOnItemSizeChange } = this.props;
|
|
119
|
+
return this.getItemStyleCache(itemIndex, shouldResetStyleCacheOnItemSizeChange ? this.itemMap.getSize(itemIndex) : false);
|
|
120
|
+
}
|
|
121
|
+
boundaryDetection() {
|
|
122
|
+
if ([typeof this.props.onScrollToUpper, typeof this.props.onScrollToLower].every(e => e !== 'function'))
|
|
123
|
+
return;
|
|
124
|
+
createSelectorQuery().select(`#${this.id}`).node().exec(() => {
|
|
125
|
+
const upperObserver = this.boundaryDetectionHelper({
|
|
126
|
+
event: typeof this.props.onScrollToUpper === 'function' ? () => {
|
|
127
|
+
if (this.field.diffOffset >= 0)
|
|
128
|
+
this.props.onScrollToUpper();
|
|
129
|
+
} : undefined,
|
|
130
|
+
id: `${this.id}-top`,
|
|
131
|
+
});
|
|
132
|
+
if (upperObserver) {
|
|
133
|
+
this._observer.top = upperObserver;
|
|
134
|
+
}
|
|
135
|
+
const lowerObserver = this.boundaryDetectionHelper({
|
|
136
|
+
event: typeof this.props.onScrollToLower === 'function' ? () => {
|
|
137
|
+
if (this.field.diffOffset <= 0)
|
|
138
|
+
this.props.onScrollToLower();
|
|
139
|
+
} : undefined,
|
|
140
|
+
id: `${this.id}-bottom`,
|
|
141
|
+
});
|
|
142
|
+
if (lowerObserver) {
|
|
143
|
+
this._observer.bottom = lowerObserver;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
boundaryDetectionHelper({ component, event, id, }) {
|
|
148
|
+
if (typeof event !== 'function')
|
|
149
|
+
return;
|
|
150
|
+
const eventFunc = throttle(event);
|
|
151
|
+
component || (component = getCurrentInstance().page);
|
|
152
|
+
const observer = createIntersectionObserver(component, {
|
|
153
|
+
thresholds: [0.4],
|
|
154
|
+
});
|
|
155
|
+
observer
|
|
156
|
+
.relativeTo(`#${this.id}`, {
|
|
157
|
+
top: typeof this.props.lowerThreshold === 'number' ? this.props.lowerThreshold : 50,
|
|
158
|
+
bottom: typeof this.props.upperThreshold === 'number' ? this.props.upperThreshold : 50,
|
|
159
|
+
})
|
|
160
|
+
.observe(`#${id}`, eventFunc);
|
|
161
|
+
return observer;
|
|
162
|
+
}
|
|
163
|
+
dispose() {
|
|
164
|
+
Object.values(this._observer).forEach(e => { var _a; return (_a = e.disconnect) === null || _a === void 0 ? void 0 : _a.call(e); });
|
|
165
|
+
this._observer = {};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export { Preset as default };
|
|
170
|
+
//# sourceMappingURL=preset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.js","sources":["../../../src/components/virtual-waterfall/preset.ts"],"sourcesContent":["import { isWebPlatform } from '@tarojs/shared'\nimport { type IntersectionObserver, createIntersectionObserver, createSelectorQuery, getCurrentInstance } from '@tarojs/taro'\nimport * as CSS from 'csstype'\nimport memoizeOne from 'memoize-one'\n\nimport { convertNumber2PX, defaultItemKey, getRectSizeSync, isCosDistributing, throttle } from '../../utils'\nimport ListMap from './list-map'\n\nimport type { VirtualWaterfallProps } from './'\n\nconst isWeb = isWebPlatform()\n\nlet INSTANCE_ID = 0\n\nexport interface IProps extends Partial<VirtualWaterfallProps> {\n children?: VirtualWaterfallProps['item']\n itemKey?: typeof defaultItemKey\n itemTagName?: string\n innerTagName?: string\n outerTagName?: string\n outerRef?: React.Ref<HTMLElement> | string\n onItemsRendered?: TFunc\n shouldResetStyleCacheOnItemSizeChange?: boolean\n outerWrapper?: React.FC\n}\n\nexport default class Preset {\n itemMap: ListMap\n _id: string\n _observer: Record<string, IntersectionObserver> = {}\n\n constructor (protected props: IProps, protected refresh?: TFunc) {\n this.init(this.props)\n this.itemMap = new ListMap(props, refresh)\n }\n\n _wrapperField = {\n scrollLeft: 0,\n scrollTop: 0,\n scrollHeight: 0,\n scrollWidth: 0,\n clientHeight: 0,\n clientWidth: 0,\n diffOffset: 0\n }\n\n diffList: number[] = [0, 0, 0]\n\n init (props: IProps) {\n this.props = props\n }\n\n update (props: IProps) {\n this.props = props\n this.itemMap.update(props)\n }\n\n async updateWrapper (id: string) {\n this.id = id\n const { width = 0, height = 0 } = this.props\n const validWidth = typeof width === 'number' && width > 0\n const validHeight = typeof height === 'number' && height > 0\n if (validWidth) {\n this.itemMap.wrapperWidth = width\n }\n if (validHeight) {\n this.itemMap.wrapperHeight = height\n }\n\n if (!validHeight || !validWidth) {\n const res = await getRectSizeSync(`#${id}`, 100)\n this.itemMap.wrapperWidth ||= res.width\n this.itemMap.wrapperHeight ||= res.height\n this.refresh?.()\n }\n\n this.itemMap.update(this.props)\n }\n\n set id (id: string) {\n this._id = id\n }\n\n get id () {\n this._id ||= `virtual-waterfall-${INSTANCE_ID++}`\n return this._id\n }\n\n get isRelative () {\n return this.props.position && this.props.position !== 'absolute'\n }\n\n get isBrick () {\n return this.props.position === 'brick'\n }\n\n get placeholderCount () {\n return this.props.placeholderCount || 0\n }\n\n get outerElement () {\n return this.props.outerElementType || this.props.outerTagName || 'div'\n }\n\n get innerElement () {\n return this.props.innerElementType || this.props.innerTagName || 'div'\n }\n\n get itemElement () {\n return this.props.itemElementType || this.props.itemTagName || 'div'\n }\n\n get field () {\n return this._wrapperField\n }\n\n set field (o: Record<string, number>) {\n Object.assign(this._wrapperField, o)\n }\n\n get enhanced () {\n return this.props.enhanced || true\n }\n\n isShaking (diff?: number) {\n if (isWeb || this.props.enhanced) return false\n const list = this.diffList.slice(-3)\n this.diffList.push(diff)\n return list.findIndex(e => Math.abs(e) === Math.abs(diff)) !== -1 || isCosDistributing(this.diffList.slice(-4))\n }\n\n resetCache () {\n this.itemMap.refreshCounter++\n }\n\n getItemStyleCache = memoizeOne((\n itemIndex?: number,\n itemSize?: IProps['itemSize'] | false,\n _flag = this.itemMap.refreshCounter\n ) => {\n itemSize = itemSize || this.itemMap.getSize(itemIndex)\n const style: CSS.Properties<string | number> = this.isRelative ? {} : {\n position: 'absolute',\n left: 0,\n }\n style.width = '100%'\n style.height = convertNumber2PX(itemSize)\n if (!this.isRelative) {\n const nodeOffset = this.itemMap.getOffsetSize(itemIndex)\n style.top = convertNumber2PX(nodeOffset)\n }\n return style\n })\n\n getItemStyle (itemIndex: number) {\n const {\n shouldResetStyleCacheOnItemSizeChange\n } = this.props\n\n return this.getItemStyleCache(\n itemIndex,\n shouldResetStyleCacheOnItemSizeChange ? this.itemMap.getSize(itemIndex) : false,\n )\n }\n\n boundaryDetection () {\n if ([typeof this.props.onScrollToUpper, typeof this.props.onScrollToLower].every(e => e !== 'function')) return\n\n createSelectorQuery().select(`#${this.id}`).node().exec(() => {\n const upperObserver = this.boundaryDetectionHelper({\n event: typeof this.props.onScrollToUpper === 'function' ? () => {\n if (this.field.diffOffset >= 0) this.props.onScrollToUpper()\n } : undefined,\n id: `${this.id}-top`,\n })\n if (upperObserver) {\n this._observer.top = upperObserver\n }\n\n const lowerObserver = this.boundaryDetectionHelper({\n event: typeof this.props.onScrollToLower === 'function' ? () => {\n if (this.field.diffOffset <= 0) this.props.onScrollToLower()\n } : undefined,\n id: `${this.id}-bottom`,\n })\n if (lowerObserver) {\n this._observer.bottom = lowerObserver\n }\n })\n }\n\n boundaryDetectionHelper ({\n component,\n event,\n id,\n }: {\n component?: TaroGeneral.IAnyObject\n event?: () => void\n id: string\n }) {\n if (typeof event !== 'function') return\n const eventFunc = throttle(event)\n\n component ||= getCurrentInstance().page\n const observer = createIntersectionObserver(component, {\n thresholds: [0.4],\n })\n\n observer\n .relativeTo(`#${this.id}`, {\n top: typeof this.props.lowerThreshold === 'number' ? this.props.lowerThreshold : 50,\n bottom: typeof this.props.upperThreshold === 'number' ? this.props.upperThreshold : 50,\n })\n .observe(`#${id}`, eventFunc)\n\n return observer\n }\n\n dispose () {\n Object.values(this._observer).forEach(e => e.disconnect?.())\n this._observer = {}\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { __rest } from '../../../node_modules/.pnpm/registry.npmjs.org_tslib@2.5.0/node_modules/tslib/tslib.es6.js';
|
|
2
|
+
import { ScrollView, View } from '@tarojs/components';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import Waterfall from './waterfall.js';
|
|
5
|
+
import outerWrapper from './wrapper.js';
|
|
6
|
+
|
|
7
|
+
const VirtualWaterfall = React.forwardRef(function VirtualWaterfall(props, ref) {
|
|
8
|
+
const _a = props, { outerElementType = ScrollView, innerElementType = View, itemElementType = View, initialScrollOffset = 0, overscanDistance = 50 } = _a, rest = __rest(_a, ["outerElementType", "innerElementType", "itemElementType", "initialScrollOffset", "overscanDistance"]);
|
|
9
|
+
if ('children' in rest) {
|
|
10
|
+
console.warn('Taro(VirtualWaterfall): children props have been deprecated. ' + 'Please use the item props instead.');
|
|
11
|
+
rest.item = rest.children;
|
|
12
|
+
}
|
|
13
|
+
if (rest.item instanceof Array) {
|
|
14
|
+
console.warn('Taro(VirtualWaterfall): item should not be an array');
|
|
15
|
+
rest.item = rest.item[0];
|
|
16
|
+
}
|
|
17
|
+
return React.createElement(Waterfall, Object.assign(Object.assign({ ref }, rest), { outerElementType,
|
|
18
|
+
itemElementType,
|
|
19
|
+
innerElementType,
|
|
20
|
+
initialScrollOffset,
|
|
21
|
+
overscanDistance,
|
|
22
|
+
outerWrapper }));
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export { VirtualWaterfall as default };
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/virtual-waterfall/react/index.ts"],"sourcesContent":["import { ScrollView, View } from '@tarojs/components'\nimport React from 'react'\n\nimport Waterfall from './waterfall'\nimport outerWrapper from './wrapper'\n\nimport type { VirtualWaterfallProps } from '../'\nimport type { IProps } from '../preset'\n\nconst VirtualWaterfall = React.forwardRef(function VirtualWaterfall (props: VirtualWaterfallProps, ref) {\n const {\n outerElementType = ScrollView,\n innerElementType = View,\n itemElementType = View,\n initialScrollOffset = 0,\n overscanDistance = 50,\n ...rest\n } = props as IProps\n\n if ('children' in rest) {\n console.warn('Taro(VirtualWaterfall): children props have been deprecated. ' + 'Please use the item props instead.')\n rest.item = rest.children as IProps['item']\n }\n if (rest.item instanceof Array) {\n console.warn('Taro(VirtualWaterfall): item should not be an array')\n rest.item = rest.item[0]\n }\n return React.createElement(Waterfall, {\n ref,\n ...rest,\n outerElementType,\n itemElementType,\n innerElementType,\n initialScrollOffset,\n overscanDistance,\n outerWrapper,\n })\n})\n\nexport default VirtualWaterfall\n"],"names":[],"mappings":";;;;;;AASM,MAAA,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,gBAAgB,CAAE,KAA4B,EAAE,GAAG,EAAA;AACpG,IAAA,MAAM,EAOF,GAAA,KAAe,EAPb,EACJ,gBAAgB,GAAG,UAAU,EAC7B,gBAAgB,GAAG,IAAI,EACvB,eAAe,GAAG,IAAI,EACtB,mBAAmB,GAAG,CAAC,EACvB,gBAAgB,GAAG,EAAE,EAAA,GAAA,EAEJ,EADd,IAAI,GANH,MAAA,CAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,kBAAA,CAOL,CAAkB,CAAA;IAEnB,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,QAAA,OAAO,CAAC,IAAI,CAAC,+DAA+D,GAAG,oCAAoC,CAAC,CAAA;AACpH,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAA0B,CAAA;AAC5C,KAAA;AACD,IAAA,IAAI,IAAI,CAAC,IAAI,YAAY,KAAK,EAAE;AAC9B,QAAA,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;QACnE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACzB,KAAA;IACD,OAAO,KAAK,CAAC,aAAa,CAAC,SAAS,gCAClC,GAAG,EAAA,EACA,IAAI,CAAA,EAAA,EACP,gBAAgB;QAChB,eAAe;QACf,gBAAgB;QAChB,mBAAmB;QACnB,gBAAgB;AAChB,QAAA,YAAY,IACZ,CAAA;AACJ,CAAC;;;;"}
|