@tarojs/components-advanced 3.6.0-canary.9 → 3.6.1-alpha.0
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/LICENSE +119 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/virtual-list/constants.d.ts +2 -0
- package/dist/components/virtual-list/constants.js +4 -0
- package/dist/components/virtual-list/constants.js.map +1 -0
- package/dist/components/virtual-list/dom-helpers.d.ts +2 -0
- package/dist/components/virtual-list/dom-helpers.js +41 -0
- package/dist/components/virtual-list/dom-helpers.js.map +1 -0
- package/dist/components/virtual-list/index.d.ts +193 -0
- package/dist/components/virtual-list/index.js +6 -0
- package/dist/components/virtual-list/index.js.map +1 -0
- package/dist/components/virtual-list/list-set.d.ts +27 -0
- package/dist/components/virtual-list/list-set.js +183 -0
- package/dist/components/virtual-list/list-set.js.map +1 -0
- package/dist/components/virtual-list/preset.d.ts +49 -0
- package/dist/components/virtual-list/preset.js +135 -0
- package/dist/components/virtual-list/preset.js.map +1 -0
- package/dist/components/virtual-list/react/index.d.ts +4 -0
- package/dist/components/virtual-list/react/index.js +35 -0
- package/dist/components/virtual-list/react/index.js.map +1 -0
- package/dist/components/virtual-list/react/list.d.ts +44 -0
- package/dist/components/virtual-list/react/list.js +399 -0
- package/dist/components/virtual-list/react/list.js.map +1 -0
- package/dist/components/virtual-list/react/validate.d.ts +4 -0
- package/dist/components/virtual-list/react/validate.js +64 -0
- package/dist/components/virtual-list/react/validate.js.map +1 -0
- package/dist/components/virtual-list/utils.d.ts +13 -0
- package/dist/components/virtual-list/utils.js +36 -0
- package/dist/components/virtual-list/utils.js.map +1 -0
- package/dist/components/virtual-list/vue/index.d.ts +17 -0
- package/dist/components/virtual-list/vue/index.js +12 -0
- package/dist/components/virtual-list/vue/index.js.map +1 -0
- package/dist/components/virtual-list/vue/list.d.ts +120 -0
- package/dist/components/virtual-list/vue/list.js +468 -0
- package/dist/components/virtual-list/vue/list.js.map +1 -0
- package/dist/components/virtual-list/vue/render.d.ts +4 -0
- package/dist/components/virtual-list/vue/render.js +18 -0
- package/dist/components/virtual-list/vue/render.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/convert.d.ts +6 -0
- package/dist/utils/convert.js +20 -0
- package/dist/utils/convert.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/lodash.d.ts +2 -0
- package/dist/utils/lodash.js +10 -0
- package/dist/utils/lodash.js.map +1 -0
- package/dist/utils/math.d.ts +3 -0
- package/dist/utils/math.js +15 -0
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/timer.d.ts +6 -0
- package/dist/utils/timer.js +24 -0
- package/dist/utils/timer.js.map +1 -0
- package/package.json +18 -9
- package/typings/global.d.ts +1 -0
- package/typings/vue.d.ts +7 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-set.js","sources":["../../../src/components/virtual-list/list-set.ts"],"sourcesContent":["import { isFunction } from '@tarojs/shared'\n\nimport { isHorizontalFunc } from './utils'\n\nimport type { IProps } from './preset'\n\ntype TProps = Pick<IProps, 'width' | 'height' | 'unlimitedSize' | 'itemCount' | 'itemData' | 'itemSize' | 'overscanCount' | 'direction' | 'layout'>\n\nexport default class ListSet {\n list: number[] = []\n mode?: 'normal' | 'function' | 'unlimited'\n defaultSize = 1\n\n constructor (protected props: TProps, protected refresh?: TFunc) {\n this.update(props)\n\n // Note: 不考虑列表模式切换情况,可能会导致列表抖动体验过差\n if (this.props.unlimitedSize) {\n this.mode = 'unlimited'\n } else if (isFunction(this.props.itemSize)) {\n this.mode = 'function'\n } else {\n this.mode = 'normal'\n }\n\n this.defaultSize = (isFunction(this.props.itemSize) ? this.props.itemSize() : this.props.itemSize) || 1\n\n if (!this.isNormalMode) {\n this.list = new Array(this.length).fill(-1)\n }\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.overscanCount || 0\n }\n\n get wrapperSize () {\n const { height, width } = this.props\n const isHorizontal = isHorizontalFunc(this.props)\n const size = (isHorizontal ? width : height) as number\n if (process.env.NODE_ENV !== 'production' && typeof size !== 'number') {\n console.warn(`In mode ${isHorizontal ? 'horizontal, width' : 'vertical, height'} parameter should be a number, but got ${typeof size}.`)\n }\n return size\n }\n\n update (props: TProps) {\n this.props = props\n\n if (this.length > this.list.length) {\n const arr = new Array(this.length - this.list.length).fill(-1)\n this.list.push(...arr)\n } else if (this.length < this.list.length) {\n this.list.length = this.length\n }\n }\n\n setSize (i = 0, size = this.defaultSize) {\n this.list[i] = size\n this.refresh?.()\n }\n\n getSize (i = 0) {\n const size = this.props.itemSize\n const item = this.list[i]\n if (item >= 0) return item\n\n if (this.isFunctionMode && isFunction(size)) {\n const itemSize = size(i, this.props.itemData)\n this.setSize(i, itemSize)\n return itemSize\n }\n return this.defaultSize\n }\n\n getOffsetSize (i = this.list.length) {\n if (this.isNormalMode) return i * this.defaultSize\n return this.list.slice(0, i).reduce((sum, _, idx) => sum + this.getSize(idx), 0)\n }\n\n getSizeCount (offset = 0) {\n if (offset === 0) {\n return 0\n }\n // if (this.isNormalMode) {\n // return Math.min(this.length - 1, Math.floor(offset / this.length))\n // }\n let offsetSize = 0\n const count = this.list.reduce((sum, _, idx) => {\n if (offsetSize < offset) {\n offsetSize += this.getSize(idx)\n return ++sum\n }\n return sum\n }, 0)\n return count - 1\n }\n\n getStartIndex (scrollOffset = 0) {\n return Math.max(0, this.getSizeCount(scrollOffset) - 1)\n }\n\n getStopIndex (wrapperSize = 0, scrollOffset = 0, startIndex = 0) {\n // const visibleOffset = this.getOffsetSize(startIndex)\n // if (this.isNormalMode) {\n // const numVisibleItems = Math.ceil((wrapperSize + scrollOffset - visibleOffset) / this.length)\n // /** -1 is because stop index is inclusive */\n // return Math.max(startIndex, Math.min(this.length - 1, startIndex + numVisibleItems - 1))\n // }\n return Math.max(startIndex, Math.min(this.length - 1, this.getSizeCount(wrapperSize + scrollOffset)))\n }\n\n getRangeToRender (direction: 'forward' | 'backward', scrollOffset = 0, block = false) {\n if (this.length === 0) {\n return [0, 0, 0, 0]\n }\n\n const wrapperSize = this.wrapperSize\n const startIndex = this.getStartIndex(scrollOffset)\n const stopIndex = this.getStopIndex(wrapperSize, scrollOffset, startIndex)\n\n // Overscan by one item in each direction so that tab/focus works. If there isn't at least one extra item, tab loops back around.\n const overscanBackward = !block || direction === 'backward' ? Math.max(1, this.overscan) : 1\n const overscanForward = !block || direction === 'forward' ? Math.max(1, this.overscan) : 1\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(this.length - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex\n ]\n }\n\n getOffsetForIndexAndAlignment (index: number, align: string, scrollOffset: number) {\n const wrapperSize = this.wrapperSize\n const itemSize = this.getSize(index)\n const lastItemOffset = Math.max(0, this.getOffsetSize(this.props.itemCount) - wrapperSize)\n const maxOffset = Math.min(lastItemOffset, this.getOffsetSize(index))\n const minOffset = Math.max(0, this.getOffsetSize(index) - wrapperSize + itemSize)\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - wrapperSize && scrollOffset <= maxOffset + wrapperSize) {\n align = 'auto'\n } else {\n align = 'center'\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset\n\n case 'end':\n return minOffset\n\n case 'center':\n {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2)\n\n if (middleOffset < Math.ceil(wrapperSize / 2)) {\n return 0 // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(wrapperSize / 2)) {\n return lastItemOffset // near the end\n } else {\n return middleOffset\n }\n }\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset\n } else if (scrollOffset < minOffset) {\n return minOffset\n } else {\n return maxOffset\n }\n }\n }\n\n compareSize (i = 0, size = 0) {\n if (this.isNormalMode) return true\n return this.getSize(i) === size\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import ListSet from "./list-set";
|
|
2
|
+
import { defaultItemKey } from "./utils";
|
|
3
|
+
import { VirtualListProps } from "./index";
|
|
4
|
+
interface IProps extends Partial<VirtualListProps> {
|
|
5
|
+
children?: VirtualListProps['item'];
|
|
6
|
+
direction?: 'ltr' | 'rtl' | 'horizontal' | 'vertical';
|
|
7
|
+
itemKey?: typeof defaultItemKey;
|
|
8
|
+
itemTagName?: string;
|
|
9
|
+
innerTagName?: string;
|
|
10
|
+
outerTagName?: string;
|
|
11
|
+
itemElementType?: React.ComponentType | string;
|
|
12
|
+
outerElementType?: React.ComponentType | string;
|
|
13
|
+
innerRef?: React.Ref<HTMLElement> | string;
|
|
14
|
+
outerRef?: React.Ref<HTMLElement> | string;
|
|
15
|
+
onItemsRendered?: TFunc;
|
|
16
|
+
shouldResetStyleCacheOnItemSizeChange?: boolean;
|
|
17
|
+
}
|
|
18
|
+
declare class Preset {
|
|
19
|
+
protected props: IProps;
|
|
20
|
+
protected refresh?: TFunc;
|
|
21
|
+
itemList: ListSet;
|
|
22
|
+
constructor(props: IProps, refresh?: TFunc);
|
|
23
|
+
wrapperField: {
|
|
24
|
+
scrollLeft: number;
|
|
25
|
+
scrollTop: number;
|
|
26
|
+
scrollHeight: number;
|
|
27
|
+
scrollWidth: number;
|
|
28
|
+
clientHeight: number;
|
|
29
|
+
clientWidth: number;
|
|
30
|
+
diffOffset: number;
|
|
31
|
+
};
|
|
32
|
+
diffList: number[];
|
|
33
|
+
init(props: IProps): void;
|
|
34
|
+
update(props: IProps): void;
|
|
35
|
+
get id(): string;
|
|
36
|
+
get isHorizontal(): boolean;
|
|
37
|
+
get isRtl(): boolean;
|
|
38
|
+
get isRelative(): boolean;
|
|
39
|
+
get placeholderCount(): number;
|
|
40
|
+
get outerTagName(): string | import("react").ComponentType<{}>;
|
|
41
|
+
get innerTagName(): string | import("react").ComponentType<{}>;
|
|
42
|
+
get itemTagName(): string | import("react").ComponentType<{}>;
|
|
43
|
+
get field(): Record<string, number>;
|
|
44
|
+
set field(o: Record<string, number>);
|
|
45
|
+
isShaking(diff?: number): boolean;
|
|
46
|
+
getItemStyleCache: import("memoize-one").MemoizedFn<(_itemSize?: IProps['itemSize'] | false, _layout?: IProps['layout'] | false, _direction?: IProps['direction'] | false) => {}>;
|
|
47
|
+
getItemStyle(index: number): any;
|
|
48
|
+
}
|
|
49
|
+
export { IProps, Preset as default };
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import memoizeOne from 'memoize-one';
|
|
2
|
+
import '../../utils/index.js';
|
|
3
|
+
import ListSet from './list-set.js';
|
|
4
|
+
import { isHorizontalFunc, isRtlFunc } from './utils.js';
|
|
5
|
+
import { isCosDistributing } from '../../utils/math.js';
|
|
6
|
+
import { convertNumber2PX } from '../../utils/convert.js';
|
|
7
|
+
|
|
8
|
+
let INSTANCE_ID = 0;
|
|
9
|
+
class Preset {
|
|
10
|
+
constructor(props, refresh) {
|
|
11
|
+
this.props = props;
|
|
12
|
+
this.refresh = refresh;
|
|
13
|
+
this.wrapperField = {
|
|
14
|
+
scrollLeft: 0,
|
|
15
|
+
scrollTop: 0,
|
|
16
|
+
scrollHeight: 0,
|
|
17
|
+
scrollWidth: 0,
|
|
18
|
+
clientHeight: 0,
|
|
19
|
+
clientWidth: 0,
|
|
20
|
+
diffOffset: 0
|
|
21
|
+
};
|
|
22
|
+
this.diffList = [0, 0, 0];
|
|
23
|
+
this.getItemStyleCache = memoizeOne((_itemSize, _layout, _direction) => {
|
|
24
|
+
// TODO: Cache of item styles, keyed by item index.
|
|
25
|
+
return {};
|
|
26
|
+
});
|
|
27
|
+
this.init(this.props);
|
|
28
|
+
this.itemList = new ListSet(props, refresh);
|
|
29
|
+
}
|
|
30
|
+
init(props) {
|
|
31
|
+
this.props = props;
|
|
32
|
+
}
|
|
33
|
+
update(props) {
|
|
34
|
+
this.props = props;
|
|
35
|
+
this.itemList.update(props);
|
|
36
|
+
}
|
|
37
|
+
get id() {
|
|
38
|
+
return `virtual-list-${INSTANCE_ID++}`;
|
|
39
|
+
}
|
|
40
|
+
get isHorizontal() {
|
|
41
|
+
return isHorizontalFunc(this.props);
|
|
42
|
+
}
|
|
43
|
+
get isRtl() {
|
|
44
|
+
return isRtlFunc(this.props);
|
|
45
|
+
}
|
|
46
|
+
get isRelative() {
|
|
47
|
+
return this.props.position === 'relative';
|
|
48
|
+
}
|
|
49
|
+
get placeholderCount() {
|
|
50
|
+
return this.props.placeholderCount >= 0 ? this.props.placeholderCount : this.props.overscanCount;
|
|
51
|
+
}
|
|
52
|
+
get outerTagName() {
|
|
53
|
+
return this.props.outerElementType || this.props.outerTagName || 'div';
|
|
54
|
+
}
|
|
55
|
+
get innerTagName() {
|
|
56
|
+
return this.props.innerElementType || this.props.innerTagName || 'div';
|
|
57
|
+
}
|
|
58
|
+
get itemTagName() {
|
|
59
|
+
return this.props.itemElementType || this.props.itemTagName || 'div';
|
|
60
|
+
}
|
|
61
|
+
get field() {
|
|
62
|
+
return this.wrapperField;
|
|
63
|
+
}
|
|
64
|
+
set field(o) {
|
|
65
|
+
Object.assign(this.wrapperField, o);
|
|
66
|
+
// Object.keys(o).forEach(key => {
|
|
67
|
+
// if (typeof o[key] === 'number' && typeof this.wrapperField[key] === 'number') {
|
|
68
|
+
// this.wrapperField[key] = o[key]
|
|
69
|
+
// }
|
|
70
|
+
// })
|
|
71
|
+
}
|
|
72
|
+
isShaking(diff) {
|
|
73
|
+
const list = this.diffList.slice(-3);
|
|
74
|
+
this.diffList.push(diff);
|
|
75
|
+
return list.findIndex(e => Math.abs(e) === Math.abs(diff)) !== -1 || isCosDistributing(this.diffList.slice(-4));
|
|
76
|
+
}
|
|
77
|
+
getItemStyle(index) {
|
|
78
|
+
const { direction, itemSize, layout, shouldResetStyleCacheOnItemSizeChange } = this.props;
|
|
79
|
+
const itemStyleCache = this.getItemStyleCache(shouldResetStyleCacheOnItemSizeChange ? itemSize : false, shouldResetStyleCacheOnItemSizeChange ? layout : false, shouldResetStyleCacheOnItemSizeChange ? direction : false);
|
|
80
|
+
let style;
|
|
81
|
+
const offset = convertNumber2PX(this.itemList.getOffsetSize(index));
|
|
82
|
+
const size = convertNumber2PX(this.itemList.getSize(index));
|
|
83
|
+
const isHorizontal = this.isHorizontal;
|
|
84
|
+
const isRtl = this.isRtl;
|
|
85
|
+
if (itemStyleCache.hasOwnProperty(index)) {
|
|
86
|
+
// Note: style is frozen.
|
|
87
|
+
style = Object.assign({}, itemStyleCache[index]);
|
|
88
|
+
if (isHorizontal) {
|
|
89
|
+
style.width = size;
|
|
90
|
+
if (!this.isRelative) {
|
|
91
|
+
if (isRtl) {
|
|
92
|
+
style.right = offset;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
style.left = offset;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
style.height = size;
|
|
101
|
+
if (!this.isRelative) {
|
|
102
|
+
style.top = offset;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
if (this.isRelative) {
|
|
108
|
+
itemStyleCache[index] = style = {
|
|
109
|
+
height: !isHorizontal ? size : '100%',
|
|
110
|
+
width: isHorizontal ? size : '100%'
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const offsetHorizontal = isHorizontal ? offset : 0;
|
|
115
|
+
itemStyleCache[index] = style = {
|
|
116
|
+
position: 'absolute',
|
|
117
|
+
left: !isRtl ? offsetHorizontal : undefined,
|
|
118
|
+
right: isRtl ? offsetHorizontal : undefined,
|
|
119
|
+
top: !isHorizontal ? offset : 0,
|
|
120
|
+
height: !isHorizontal ? size : '100%',
|
|
121
|
+
width: isHorizontal ? size : '100%'
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
for (const k in style) {
|
|
126
|
+
if (style.hasOwnProperty(k)) {
|
|
127
|
+
style[k] = convertNumber2PX(style[k]);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return style;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export { Preset as default };
|
|
135
|
+
//# sourceMappingURL=preset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.js","sources":["../../../src/components/virtual-list/preset.ts"],"sourcesContent":["import memoizeOne from 'memoize-one'\n\nimport { convertNumber2PX, isCosDistributing } from '../../utils'\nimport ListSet from './list-set'\nimport { defaultItemKey, isHorizontalFunc, isRtlFunc } from './utils'\n\nimport type { VirtualListProps } from './'\n\nlet INSTANCE_ID = 0\n\nexport interface IProps extends Partial<VirtualListProps> {\n children?: VirtualListProps['item']\n direction?: 'ltr' | 'rtl' | 'horizontal' | 'vertical'\n itemKey?: typeof defaultItemKey\n itemTagName?: string\n innerTagName?: string\n outerTagName?: string\n itemElementType?: React.ComponentType | string\n outerElementType?: React.ComponentType | string\n innerRef?: React.Ref<HTMLElement> | string\n outerRef?: React.Ref<HTMLElement> | string\n onItemsRendered?: TFunc\n shouldResetStyleCacheOnItemSizeChange?: boolean\n}\n\nexport default class Preset {\n itemList: ListSet\n\n constructor (protected props: IProps, protected refresh?: TFunc) {\n this.init(this.props)\n this.itemList = new ListSet(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.itemList.update(props)\n }\n\n get id () {\n return `virtual-list-${INSTANCE_ID++}`\n }\n\n get isHorizontal () {\n return isHorizontalFunc(this.props)\n }\n\n get isRtl () {\n return isRtlFunc(this.props)\n }\n\n get isRelative () {\n return this.props.position === 'relative'\n }\n\n get placeholderCount () {\n return this.props.placeholderCount >= 0 ? this.props.placeholderCount : this.props.overscanCount\n }\n\n get outerTagName () {\n return this.props.outerElementType || this.props.outerTagName || 'div'\n }\n\n get innerTagName () {\n return this.props.innerElementType || this.props.innerTagName || 'div'\n }\n\n get itemTagName () {\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 // Object.keys(o).forEach(key => {\n // if (typeof o[key] === 'number' && typeof this.wrapperField[key] === 'number') {\n // this.wrapperField[key] = o[key]\n // }\n // })\n }\n\n isShaking (diff?: number) {\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 getItemStyleCache = memoizeOne((\n _itemSize?: IProps['itemSize'] | false,\n _layout?: IProps['layout'] | false,\n _direction?: IProps['direction'] | false\n ) => {\n // TODO: Cache of item styles, keyed by item index.\n return {}\n })\n\n getItemStyle (index: number) {\n const {\n direction,\n itemSize,\n layout,\n shouldResetStyleCacheOnItemSizeChange\n } = this.props\n\n const itemStyleCache = this.getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange ? itemSize : false,\n shouldResetStyleCacheOnItemSizeChange ? layout : false,\n shouldResetStyleCacheOnItemSizeChange ? direction : false\n )\n\n let style\n\n const offset = convertNumber2PX(this.itemList.getOffsetSize(index))\n const size = convertNumber2PX(this.itemList.getSize(index))\n const isHorizontal = this.isHorizontal\n const isRtl = this.isRtl\n if (itemStyleCache.hasOwnProperty(index)) {\n // Note: style is frozen.\n style = { ...itemStyleCache[index] }\n if (isHorizontal) {\n style.width = size\n if (!this.isRelative) {\n if (isRtl) {\n style.right = offset\n } else {\n style.left = offset\n }\n }\n } else {\n style.height = size\n if (!this.isRelative) {\n style.top = offset\n }\n }\n } else {\n if (this.isRelative) {\n itemStyleCache[index] = style = {\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n }\n } else {\n const offsetHorizontal = isHorizontal ? offset : 0\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: !isRtl ? offsetHorizontal : undefined,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n }\n }\n }\n\n for (const k in style) {\n if (style.hasOwnProperty(k)) {\n style[k] = convertNumber2PX(style[k])\n }\n }\n\n return style\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { VirtualListProps } from "../index";
|
|
3
|
+
declare const VirtualList: React.ForwardRefExoticComponent<Pick<VirtualListProps, "id" | "className" | "style" | "key" | "hidden" | "animation" | "dangerouslySetInnerHTML" | "onTouchStart" | "onTouchMove" | "onTouchCancel" | "onTouchEnd" | "onClick" | "onLongPress" | "onLongClick" | "onTransitionEnd" | "onAnimationStart" | "onAnimationIteration" | "onAnimationEnd" | "onTouchForceChange" | "height" | "width" | "item" | "itemCount" | "itemData" | "itemSize" | "unlimitedSize" | "position" | "initialScrollOffset" | "innerElementType" | "enhanced" | "renderTop" | "renderBottom" | "layout" | "onScroll" | "onScrollNative" | "overscanCount" | "placeholderCount" | "useIsScrolling"> & React.RefAttributes<unknown>>;
|
|
4
|
+
export { VirtualList as default };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { __rest } from 'tslib';
|
|
2
|
+
import { ScrollView, View } from '@tarojs/components';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { convertPX2Int } from '../../../utils/convert.js';
|
|
5
|
+
import List from './list.js';
|
|
6
|
+
|
|
7
|
+
const OuterScrollView = React.forwardRef(function OuterScrollView(props, ref) {
|
|
8
|
+
const _a = props, { style, onScroll, onScrollNative, layout } = _a, rest = __rest(_a, ["style", "onScroll", "onScrollNative", "layout"]);
|
|
9
|
+
const handleScroll = (event) => {
|
|
10
|
+
onScroll(Object.assign(Object.assign({}, event), { currentTarget: Object.assign(Object.assign({}, event.detail), { clientWidth: convertPX2Int(style.width), clientHeight: convertPX2Int(style.height) }) }));
|
|
11
|
+
if (typeof onScrollNative === 'function') {
|
|
12
|
+
onScrollNative(event);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
return React.createElement(ScrollView, Object.assign({ ref,
|
|
16
|
+
style, scrollY: layout === 'vertical', scrollX: layout === 'horizontal', onScroll: handleScroll }, rest));
|
|
17
|
+
});
|
|
18
|
+
const VirtualList = React.forwardRef(function VirtualList(props, ref) {
|
|
19
|
+
const _a = props, { direction = 'ltr', innerElementType = View, itemElementType = View, initialScrollOffset = 0, overscanCount = 1 } = _a, rest = __rest(_a, ["direction", "innerElementType", "itemElementType", "initialScrollOffset", "overscanCount"]);
|
|
20
|
+
if ('children' in rest) {
|
|
21
|
+
console.warn('Taro(VirtualList): children props have been deprecated. ' + 'Please use the item props instead.');
|
|
22
|
+
rest.item = rest.children;
|
|
23
|
+
}
|
|
24
|
+
if (rest.item instanceof Array) {
|
|
25
|
+
console.warn('Taro(VirtualList): item should not be an array');
|
|
26
|
+
rest.item = rest.item[0];
|
|
27
|
+
}
|
|
28
|
+
return React.createElement(List, Object.assign(Object.assign({ ref }, rest), { itemElementType,
|
|
29
|
+
innerElementType, outerElementType: OuterScrollView, direction,
|
|
30
|
+
initialScrollOffset,
|
|
31
|
+
overscanCount }));
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
export { VirtualList as default };
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/virtual-list/react/index.ts"],"sourcesContent":["import { ScrollView, View } from '@tarojs/components'\nimport React from 'react'\n\nimport { convertPX2Int } from '../../../utils/convert'\nimport List from './list'\n\nimport type { BaseEventOrig } from '@tarojs/components'\nimport type { VirtualListProps } from '../'\nimport type { IProps } from '../preset'\n\nconst OuterScrollView = React.forwardRef(\n function OuterScrollView (props, ref) {\n const { style, onScroll, onScrollNative, layout, ...rest } = props as IProps\n const handleScroll = (event: BaseEventOrig<VirtualListProps.IVirtualListEventDetail>) => {\n onScroll({\n ...event as any,\n currentTarget: {\n ...event.detail,\n clientWidth: convertPX2Int(style.width),\n clientHeight: convertPX2Int(style.height)\n } as any\n })\n\n if (typeof onScrollNative === 'function') {\n onScrollNative(event)\n }\n }\n\n return React.createElement<any>(ScrollView, {\n ref,\n style,\n scrollY: layout === 'vertical',\n scrollX: layout === 'horizontal',\n onScroll: handleScroll,\n ...rest\n })\n }\n)\n\nconst VirtualList = React.forwardRef(function VirtualList (props: VirtualListProps, ref) {\n const {\n direction = 'ltr',\n innerElementType = View,\n itemElementType = View,\n initialScrollOffset = 0,\n overscanCount = 1,\n ...rest\n } = props as IProps\n\n if ('children' in rest) {\n console.warn('Taro(VirtualList): 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(VirtualList): item should not be an array')\n rest.item = rest.item[0]\n }\n return React.createElement(List, {\n ref,\n ...rest,\n itemElementType,\n innerElementType,\n outerElementType: OuterScrollView,\n direction,\n initialScrollOffset,\n overscanCount\n })\n})\n\nexport default VirtualList\n"],"names":[],"mappings":";;;;;;AAUA,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CACtC,SAAS,eAAe,CAAE,KAAK,EAAE,GAAG,EAAA;AAClC,IAAA,MAAM,KAAuD,KAAe,EAAtE,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAA6B,GAAA,EAAA,EAAxB,IAAI,GAAlD,MAAA,CAAA,EAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,CAAoD,CAAkB,CAAA;AAC5E,IAAA,MAAM,YAAY,GAAG,CAAC,KAA8D,KAAI;AACtF,QAAA,QAAQ,CACH,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAY,CACf,EAAA,EAAA,aAAa,EAAE,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACV,KAAK,CAAC,MAAM,CAAA,EAAA,EACf,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EACvC,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,EAAA,CACnC,IACR,CAAA;AAEF,QAAA,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;YACxC,cAAc,CAAC,KAAK,CAAC,CAAA;AACtB,SAAA;AACH,KAAC,CAAA;AAED,IAAA,OAAO,KAAK,CAAC,aAAa,CAAM,UAAU,kBACxC,GAAG;AACH,QAAA,KAAK,EACL,OAAO,EAAE,MAAM,KAAK,UAAU,EAC9B,OAAO,EAAE,MAAM,KAAK,YAAY,EAChC,QAAQ,EAAE,YAAY,EACnB,EAAA,IAAI,EACP,CAAA;AACJ,CAAC,CACF,CAAA;AAEK,MAAA,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,WAAW,CAAE,KAAuB,EAAE,GAAG,EAAA;AACrF,IAAA,MAAM,EAOF,GAAA,KAAe,EAPb,EACJ,SAAS,GAAG,KAAK,EACjB,gBAAgB,GAAG,IAAI,EACvB,eAAe,GAAG,IAAI,EACtB,mBAAmB,GAAG,CAAC,EACvB,aAAa,GAAG,CAAC,EAAA,GAAA,EAEA,EADd,IAAI,GANH,MAAA,CAAA,EAAA,EAAA,CAAA,WAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,eAAA,CAOL,CAAkB,CAAA;IAEnB,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,QAAA,OAAO,CAAC,IAAI,CAAC,0DAA0D,GAAG,oCAAoC,CAAC,CAAA;AAC/G,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,gDAAgD,CAAC,CAAA;QAC9D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACzB,KAAA;IACD,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,gCAC7B,GAAG,EAAA,EACA,IAAI,CAAA,EAAA,EACP,eAAe;AACf,QAAA,gBAAgB,EAChB,gBAAgB,EAAE,eAAe,EACjC,SAAS;QACT,mBAAmB;AACnB,QAAA,aAAa,IACb,CAAA;AACJ,CAAC;;;;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ListSet from "../list-set";
|
|
3
|
+
import Preset from "../preset";
|
|
4
|
+
import { IProps } from "../preset";
|
|
5
|
+
interface IState {
|
|
6
|
+
id: string;
|
|
7
|
+
instance: List;
|
|
8
|
+
isScrolling: boolean;
|
|
9
|
+
scrollDirection: 'forward' | 'backward';
|
|
10
|
+
scrollOffset: number;
|
|
11
|
+
scrollUpdateWasRequested: boolean;
|
|
12
|
+
refreshCount: number;
|
|
13
|
+
}
|
|
14
|
+
declare class List extends React.PureComponent<IProps, IState> {
|
|
15
|
+
static defaultProps: IProps;
|
|
16
|
+
static getDerivedStateFromProps(nextProps: IProps, prevState: IState): any;
|
|
17
|
+
itemList: ListSet;
|
|
18
|
+
preset: Preset;
|
|
19
|
+
constructor(props: IProps);
|
|
20
|
+
refresh: () => void;
|
|
21
|
+
_outerRef: any;
|
|
22
|
+
_resetIsScrollingTimeoutId: any;
|
|
23
|
+
_callOnItemsRendered: import("memoize-one").MemoizedFn<(this: any, overscanStartIndex: any, overscanStopIndex: any, visibleStartIndex: any, visibleStopIndex: any) => any>;
|
|
24
|
+
_callOnScroll: import("memoize-one").MemoizedFn<(this: any, scrollDirection: any, scrollOffset: any, scrollUpdateWasRequested: any, detail: any) => void>;
|
|
25
|
+
_callPropsCallbacks(prevProps?: any, prevState?: any): void;
|
|
26
|
+
_getSizeUploadSync: (index: number, isHorizontal: boolean) => Promise<unknown>;
|
|
27
|
+
// Lazily create and cache item styles while scrolling,
|
|
28
|
+
// So that pure component sCU will prevent re-renders.
|
|
29
|
+
// We maintain this cache, and pass a style prop rather than index,
|
|
30
|
+
// So that List can clear cached styles and force item re-render if necessary.
|
|
31
|
+
_getRangeToRender(): number[];
|
|
32
|
+
_onScrollHorizontal: (event: any) => void;
|
|
33
|
+
_onScrollVertical: (event: any) => void;
|
|
34
|
+
_outerRefSetter: (ref: any) => void;
|
|
35
|
+
_resetIsScrollingDebounced: () => void;
|
|
36
|
+
_resetIsScrolling: () => void;
|
|
37
|
+
scrollTo(scrollOffset?: number): Promise<any>;
|
|
38
|
+
scrollToItem(index: number, align?: string): void;
|
|
39
|
+
componentDidMount(): void;
|
|
40
|
+
componentDidUpdate(prevProps: IProps, prevState: IState): void;
|
|
41
|
+
componentWillUnmount(): void;
|
|
42
|
+
render(): React.ReactElement<{}, string | React.JSXElementConstructor<any>>;
|
|
43
|
+
}
|
|
44
|
+
export { IState, List as default };
|