@fountain-ui/lab 2.0.0-beta.10 → 2.0.0-beta.11
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/build/commonjs/ViewPager/ChildrenMemoizedPage.js +90 -22
- package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +1 -1
- package/build/commonjs/ViewPager/ViewPagerNative.js +41 -34
- package/build/commonjs/ViewPager/ViewPagerNative.js.map +1 -1
- package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
- package/build/commonjs/ViewPager/ViewPagerWeb.js +32 -25
- package/build/commonjs/ViewPager/ViewPagerWeb.js.map +1 -1
- package/build/commonjs/ViewPager/index.js.map +1 -1
- package/build/commonjs/ViewPager/utils.js +3 -41
- package/build/commonjs/ViewPager/utils.js.map +1 -1
- package/build/module/ViewPager/ChildrenMemoizedPage.js +85 -23
- package/build/module/ViewPager/ChildrenMemoizedPage.js.map +1 -1
- package/build/module/ViewPager/ViewPagerNative.js +40 -34
- package/build/module/ViewPager/ViewPagerNative.js.map +1 -1
- package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
- package/build/module/ViewPager/ViewPagerWeb.js +26 -23
- package/build/module/ViewPager/ViewPagerWeb.js.map +1 -1
- package/build/module/ViewPager/index.js.map +1 -1
- package/build/module/ViewPager/utils.js +1 -32
- package/build/module/ViewPager/utils.js.map +1 -1
- package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +2 -1
- package/build/typescript/ViewPager/ViewPagerNative.d.ts +4 -1
- package/build/typescript/ViewPager/ViewPagerProps.d.ts +20 -19
- package/build/typescript/ViewPager/ViewPagerWeb.d.ts +4 -1
- package/build/typescript/ViewPager/index.d.ts +1 -1
- package/build/typescript/ViewPager/utils.d.ts +2 -19
- package/package.json +2 -2
- package/src/ViewPager/ChildrenMemoizedPage.tsx +91 -22
- package/src/ViewPager/ViewPagerNative.tsx +43 -38
- package/src/ViewPager/ViewPagerProps.ts +20 -19
- package/src/ViewPager/ViewPagerWeb.tsx +34 -29
- package/src/ViewPager/index.ts +1 -1
- package/src/ViewPager/utils.tsx +2 -55
|
@@ -5,44 +5,112 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var _react =
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
|
|
10
10
|
var _reactNative = require("react-native");
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
var _core = require("@fountain-ui/core");
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
+
|
|
18
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
+
|
|
20
|
+
const OFFSCREEN_RERENDER_LIMIT = 1;
|
|
21
|
+
|
|
22
|
+
const styles = _core.StyleSheet.create({
|
|
23
|
+
none: {
|
|
24
|
+
display: 'none'
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
function Page(props) {
|
|
17
29
|
const {
|
|
18
|
-
|
|
19
|
-
|
|
30
|
+
index,
|
|
31
|
+
children,
|
|
32
|
+
loading,
|
|
33
|
+
sharedIndex
|
|
20
34
|
} = props;
|
|
21
|
-
return /*#__PURE__*/_react.default.createElement(_reactNative.View, _extends({
|
|
22
|
-
collapsable: false
|
|
23
|
-
}, otherProps));
|
|
24
|
-
};
|
|
25
35
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} // isVisible is an important condition for determining memos on the web.
|
|
30
|
-
// Reference ViewPagerWeb's return.
|
|
36
|
+
const assumeInitialPageState = () => {
|
|
37
|
+
const activeIndex = sharedIndex.value;
|
|
38
|
+
const active = index === activeIndex;
|
|
31
39
|
|
|
40
|
+
if (_reactNative.Platform.OS === 'web') {
|
|
41
|
+
return {
|
|
42
|
+
active,
|
|
43
|
+
visited: active
|
|
44
|
+
};
|
|
45
|
+
}
|
|
32
46
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
47
|
+
if (loading === 'eager') {
|
|
48
|
+
return {
|
|
49
|
+
active,
|
|
50
|
+
visited: true
|
|
51
|
+
};
|
|
52
|
+
}
|
|
36
53
|
|
|
37
|
-
|
|
38
|
-
return
|
|
39
|
-
|
|
54
|
+
const visited = index >= activeIndex - OFFSCREEN_RERENDER_LIMIT && index <= activeIndex + OFFSCREEN_RERENDER_LIMIT;
|
|
55
|
+
return {
|
|
56
|
+
active,
|
|
57
|
+
visited
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const [pageState, setPageState] = (0, _react.useState)(assumeInitialPageState);
|
|
62
|
+
const content = pageState.visited ? children : null;
|
|
63
|
+
|
|
64
|
+
const updatePageState = (active, neighbor) => {
|
|
65
|
+
setPageState(prevState => {
|
|
66
|
+
if (prevState.active !== active) {
|
|
67
|
+
return {
|
|
68
|
+
active,
|
|
69
|
+
visited: active || prevState.visited
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (neighbor && !prevState.visited) {
|
|
74
|
+
return { ...prevState,
|
|
75
|
+
visited: true
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return prevState;
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
(0, _reactNativeReanimated.useAnimatedReaction)(() => {
|
|
84
|
+
const activeIndex = sharedIndex.value;
|
|
85
|
+
const willVisible = index >= activeIndex - OFFSCREEN_RERENDER_LIMIT && index <= activeIndex + OFFSCREEN_RERENDER_LIMIT;
|
|
86
|
+
const willActive = index === activeIndex;
|
|
87
|
+
const willNeighbor = _reactNative.Platform.OS === 'web' ? false : willVisible && !willActive;
|
|
88
|
+
return {
|
|
89
|
+
willActive,
|
|
90
|
+
willNeighbor
|
|
91
|
+
};
|
|
92
|
+
}, (nextState, prevState) => {
|
|
93
|
+
const activeStateChanged = nextState.willActive !== (prevState === null || prevState === void 0 ? void 0 : prevState.willActive);
|
|
94
|
+
const willNewNeighbor = nextState.willNeighbor && !(prevState !== null && prevState !== void 0 && prevState.willNeighbor);
|
|
95
|
+
|
|
96
|
+
if (activeStateChanged || willNewNeighbor) {
|
|
97
|
+
(0, _reactNativeReanimated.runOnJS)(updatePageState)(nextState.willActive, nextState.willNeighbor);
|
|
98
|
+
}
|
|
99
|
+
}, [index]);
|
|
100
|
+
const style = _reactNative.Platform.OS === 'web' ? pageState.active ? _core.StyleSheet.absoluteFill : styles.none : undefined;
|
|
101
|
+
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
102
|
+
children: content,
|
|
103
|
+
collapsable: false,
|
|
104
|
+
style: style
|
|
105
|
+
});
|
|
106
|
+
}
|
|
40
107
|
|
|
108
|
+
var _default = /*#__PURE__*/(0, _react.memo)(Page, (prevProps, nextProps) => {
|
|
41
109
|
if (prevProps.rerenderKey !== nextProps.rerenderKey) {
|
|
42
110
|
return false;
|
|
43
111
|
}
|
|
44
112
|
|
|
45
|
-
return prevProps.
|
|
113
|
+
return prevProps.index !== nextProps.index;
|
|
46
114
|
});
|
|
47
115
|
|
|
48
116
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Page","props","
|
|
1
|
+
{"version":3,"names":["OFFSCREEN_RERENDER_LIMIT","styles","StyleSheet","create","none","display","Page","props","index","children","loading","sharedIndex","assumeInitialPageState","activeIndex","value","active","Platform","OS","visited","pageState","setPageState","useState","content","updatePageState","neighbor","prevState","useAnimatedReaction","willVisible","willActive","willNeighbor","nextState","activeStateChanged","willNewNeighbor","runOnJS","style","absoluteFill","undefined","memo","prevProps","nextProps","rerenderKey"],"sources":["ChildrenMemoizedPage.tsx"],"sourcesContent":["import React, { memo, useState } from 'react';\nimport { Platform, View } from 'react-native';\nimport { runOnJS, useAnimatedReaction } from 'react-native-reanimated';\nimport { StyleSheet } from '@fountain-ui/core';\nimport type { PageProps } from './ViewPagerProps';\n\nconst OFFSCREEN_RERENDER_LIMIT = 1;\n\nconst styles = StyleSheet.create({\n none: { display: 'none' },\n});\n\ninterface PageState {\n active: boolean;\n visited: boolean;\n}\n\nfunction Page(props: PageProps) {\n const {\n index,\n children,\n loading,\n sharedIndex,\n } = props;\n\n const assumeInitialPageState = (): PageState => {\n const activeIndex = sharedIndex.value;\n\n const active = index === activeIndex;\n\n if (Platform.OS === 'web') {\n return { active, visited: active };\n }\n\n if (loading === 'eager') {\n return { active, visited: true };\n }\n\n const visited = index >= activeIndex - OFFSCREEN_RERENDER_LIMIT\n && index <= activeIndex + OFFSCREEN_RERENDER_LIMIT;\n\n return { active, visited };\n };\n\n const [pageState, setPageState] = useState<PageState>(assumeInitialPageState);\n\n const content = pageState.visited ? children : null;\n\n const updatePageState = (active: boolean, neighbor: boolean) => {\n setPageState(prevState => {\n if (prevState.active !== active) {\n return { active, visited: active || prevState.visited };\n }\n\n if (neighbor && !prevState.visited) {\n return { ...prevState, visited: true };\n }\n\n return prevState;\n });\n };\n\n useAnimatedReaction(\n () => {\n const activeIndex = sharedIndex.value;\n\n const willVisible = index >= activeIndex - OFFSCREEN_RERENDER_LIMIT\n && index <= activeIndex + OFFSCREEN_RERENDER_LIMIT;\n\n const willActive = index === activeIndex;\n const willNeighbor = Platform.OS === 'web' ? false : (willVisible && !willActive);\n\n return { willActive, willNeighbor };\n },\n (nextState, prevState) => {\n const activeStateChanged = nextState.willActive !== prevState?.willActive;\n const willNewNeighbor = nextState.willNeighbor && !prevState?.willNeighbor;\n\n if (activeStateChanged || willNewNeighbor) {\n runOnJS(updatePageState)(nextState.willActive, nextState.willNeighbor);\n }\n },\n [index],\n );\n\n const style = Platform.OS === 'web'\n ? (pageState.active ? StyleSheet.absoluteFill : styles.none)\n : undefined;\n\n return (\n <View\n children={content}\n collapsable={false}\n style={style}\n />\n );\n}\n\nexport default memo(Page, (prevProps, nextProps) => {\n if (prevProps.rerenderKey !== nextProps.rerenderKey) {\n return false;\n }\n\n return prevProps.index !== nextProps.index;\n});\n"],"mappings":"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"}
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default =
|
|
6
|
+
exports.default = void 0;
|
|
7
7
|
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
|
|
10
10
|
var _reactNativePagerView = _interopRequireDefault(require("react-native-pager-view"));
|
|
11
11
|
|
|
12
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
13
|
+
|
|
12
14
|
var _utils = require("./utils");
|
|
13
15
|
|
|
14
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -17,59 +19,64 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
17
19
|
|
|
18
20
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
21
|
|
|
20
|
-
function ViewPager(props) {
|
|
22
|
+
const ViewPager = /*#__PURE__*/(0, _react.forwardRef)(function ViewPager(props, ref) {
|
|
21
23
|
const {
|
|
22
24
|
children,
|
|
23
|
-
|
|
24
|
-
index,
|
|
25
|
+
initialPage = _utils.defaultInitialPage,
|
|
25
26
|
keyboardDismissMode = 'on-drag',
|
|
26
27
|
loading = _utils.defaultLoading,
|
|
27
28
|
onChange,
|
|
28
29
|
pageComponent = _utils.defaultPageComponent,
|
|
29
|
-
enableNeighborPageRerender = _utils.defaultEnableNeighborPageRerender,
|
|
30
30
|
pageForceRerenderKey,
|
|
31
31
|
scrollEnabled = true,
|
|
32
32
|
style
|
|
33
33
|
} = props;
|
|
34
|
-
const
|
|
34
|
+
const sharedIndex = (0, _reactNativeReanimated.useSharedValue)(initialPage);
|
|
35
35
|
const pagerRef = (0, _react.useRef)(null);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
36
|
+
|
|
37
|
+
const setPage = newIndex => {
|
|
38
|
+
requestAnimationFrame(() => {
|
|
39
|
+
var _pagerRef$current;
|
|
40
|
+
|
|
41
|
+
(_pagerRef$current = pagerRef.current) === null || _pagerRef$current === void 0 ? void 0 : _pagerRef$current.setPage(newIndex);
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
(0, _react.useImperativeHandle)(ref, () => ({
|
|
46
|
+
setPage
|
|
47
|
+
}), []);
|
|
44
48
|
const handlePageSelected = (0, _react.useCallback)(e => {
|
|
45
|
-
|
|
49
|
+
const currentIndex = sharedIndex.value;
|
|
50
|
+
const nextIndex = e.nativeEvent.position;
|
|
51
|
+
|
|
52
|
+
if (currentIndex === nextIndex) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
sharedIndex.value = nextIndex;
|
|
46
57
|
|
|
47
58
|
if (onChange) {
|
|
48
|
-
onChange(
|
|
59
|
+
onChange(nextIndex);
|
|
49
60
|
}
|
|
50
61
|
}, [onChange]);
|
|
51
|
-
|
|
52
|
-
const handleNumber = index !== indexRef.current ? requestAnimationFrame(() => {
|
|
53
|
-
var _pagerRef$current;
|
|
54
|
-
|
|
55
|
-
return (_pagerRef$current = pagerRef.current) === null || _pagerRef$current === void 0 ? void 0 : _pagerRef$current.setPage(index);
|
|
56
|
-
}) : undefined;
|
|
57
|
-
return () => {
|
|
58
|
-
if (handleNumber) {
|
|
59
|
-
cancelAnimationFrame(handleNumber);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}, [index]);
|
|
62
|
+
const PageComponent = pageComponent;
|
|
63
63
|
return /*#__PURE__*/_react.default.createElement(_reactNativePagerView.default, {
|
|
64
|
-
|
|
64
|
+
ref: pagerRef,
|
|
65
|
+
initialPage: initialPage,
|
|
65
66
|
keyboardDismissMode: keyboardDismissMode,
|
|
66
67
|
onPageSelected: handlePageSelected,
|
|
67
68
|
pageMargin: 8,
|
|
68
|
-
ref: pagerRef,
|
|
69
69
|
scrollEnabled: scrollEnabled,
|
|
70
70
|
style: style
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
}, _react.Children.map(children, (child, index) => /*#__PURE__*/_react.default.createElement(PageComponent, {
|
|
72
|
+
key: index,
|
|
73
|
+
children: child,
|
|
74
|
+
index: index,
|
|
75
|
+
loading: loading,
|
|
76
|
+
rerenderKey: pageForceRerenderKey,
|
|
77
|
+
sharedIndex: sharedIndex
|
|
78
|
+
})));
|
|
79
|
+
});
|
|
80
|
+
var _default = ViewPager;
|
|
81
|
+
exports.default = _default;
|
|
75
82
|
//# sourceMappingURL=ViewPagerNative.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ViewPager","props","
|
|
1
|
+
{"version":3,"names":["ViewPager","forwardRef","props","ref","children","initialPage","defaultInitialPage","keyboardDismissMode","loading","defaultLoading","onChange","pageComponent","defaultPageComponent","pageForceRerenderKey","scrollEnabled","style","sharedIndex","useSharedValue","pagerRef","useRef","setPage","newIndex","requestAnimationFrame","current","useImperativeHandle","handlePageSelected","useCallback","e","currentIndex","value","nextIndex","nativeEvent","position","PageComponent","Children","map","child","index"],"sources":["ViewPagerNative.tsx"],"sourcesContent":["import React, { Children, forwardRef, useCallback, useImperativeHandle, useRef } from 'react';\nimport type { ViewPagerOnPageSelectedEvent } from 'react-native-pager-view';\nimport RNViewPager from 'react-native-pager-view';\nimport { useSharedValue } from 'react-native-reanimated';\nimport type ViewPagerProps from './ViewPagerProps';\nimport type { ViewPagerInstance } from './ViewPagerProps';\nimport { defaultInitialPage, defaultLoading, defaultPageComponent } from './utils';\n\nconst ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPager(props, ref) {\n const {\n children,\n initialPage = defaultInitialPage,\n keyboardDismissMode = 'on-drag',\n loading = defaultLoading,\n onChange,\n pageComponent = defaultPageComponent,\n pageForceRerenderKey,\n scrollEnabled = true,\n style,\n } = props;\n\n const sharedIndex = useSharedValue<number>(initialPage);\n const pagerRef = useRef<RNViewPager | null>(null);\n\n const setPage = (newIndex: number) => {\n requestAnimationFrame(() => {\n pagerRef.current?.setPage(newIndex);\n });\n };\n\n useImperativeHandle(\n ref,\n () => ({ setPage }),\n [],\n );\n\n const handlePageSelected = useCallback((e: ViewPagerOnPageSelectedEvent) => {\n const currentIndex = sharedIndex.value;\n const nextIndex = e.nativeEvent.position;\n\n if (currentIndex === nextIndex) {\n return;\n }\n\n sharedIndex.value = nextIndex;\n\n if (onChange) {\n onChange(nextIndex);\n }\n }, [onChange]);\n\n const PageComponent = pageComponent;\n\n return (\n <RNViewPager\n ref={pagerRef}\n initialPage={initialPage}\n keyboardDismissMode={keyboardDismissMode}\n onPageSelected={handlePageSelected}\n pageMargin={8}\n scrollEnabled={scrollEnabled}\n style={style}\n >\n {Children.map(children, (child, index) => (\n <PageComponent\n key={index}\n children={child}\n index={index}\n loading={loading}\n rerenderKey={pageForceRerenderKey}\n sharedIndex={sharedIndex}\n />\n ))}\n </RNViewPager>\n );\n});\n\nexport default ViewPager;\n"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AAGA;;;;;;;;AAEA,MAAMA,SAAS,gBAAG,IAAAC,iBAAA,EAA8C,SAASD,SAAT,CAAmBE,KAAnB,EAA0BC,GAA1B,EAA+B;EAC3F,MAAM;IACFC,QADE;IAEFC,WAAW,GAAGC,yBAFZ;IAGFC,mBAAmB,GAAG,SAHpB;IAIFC,OAAO,GAAGC,qBAJR;IAKFC,QALE;IAMFC,aAAa,GAAGC,2BANd;IAOFC,oBAPE;IAQFC,aAAa,GAAG,IARd;IASFC;EATE,IAUFb,KAVJ;EAYA,MAAMc,WAAW,GAAG,IAAAC,qCAAA,EAAuBZ,WAAvB,CAApB;EACA,MAAMa,QAAQ,GAAG,IAAAC,aAAA,EAA2B,IAA3B,CAAjB;;EAEA,MAAMC,OAAO,GAAIC,QAAD,IAAsB;IAClCC,qBAAqB,CAAC,MAAM;MAAA;;MACxB,qBAAAJ,QAAQ,CAACK,OAAT,wEAAkBH,OAAlB,CAA0BC,QAA1B;IACH,CAFoB,CAArB;EAGH,CAJD;;EAMA,IAAAG,0BAAA,EACIrB,GADJ,EAEI,OAAO;IAAEiB;EAAF,CAAP,CAFJ,EAGI,EAHJ;EAMA,MAAMK,kBAAkB,GAAG,IAAAC,kBAAA,EAAaC,CAAD,IAAqC;IACxE,MAAMC,YAAY,GAAGZ,WAAW,CAACa,KAAjC;IACA,MAAMC,SAAS,GAAGH,CAAC,CAACI,WAAF,CAAcC,QAAhC;;IAEA,IAAIJ,YAAY,KAAKE,SAArB,EAAgC;MAC5B;IACH;;IAEDd,WAAW,CAACa,KAAZ,GAAoBC,SAApB;;IAEA,IAAIpB,QAAJ,EAAc;MACVA,QAAQ,CAACoB,SAAD,CAAR;IACH;EACJ,CAb0B,EAaxB,CAACpB,QAAD,CAbwB,CAA3B;EAeA,MAAMuB,aAAa,GAAGtB,aAAtB;EAEA,oBACI,6BAAC,6BAAD;IACI,GAAG,EAAEO,QADT;IAEI,WAAW,EAAEb,WAFjB;IAGI,mBAAmB,EAAEE,mBAHzB;IAII,cAAc,EAAEkB,kBAJpB;IAKI,UAAU,EAAE,CALhB;IAMI,aAAa,EAAEX,aANnB;IAOI,KAAK,EAAEC;EAPX,GASKmB,eAAA,CAASC,GAAT,CAAa/B,QAAb,EAAuB,CAACgC,KAAD,EAAQC,KAAR,kBACpB,6BAAC,aAAD;IACI,GAAG,EAAEA,KADT;IAEI,QAAQ,EAAED,KAFd;IAGI,KAAK,EAAEC,KAHX;IAII,OAAO,EAAE7B,OAJb;IAKI,WAAW,EAAEK,oBALjB;IAMI,WAAW,EAAEG;EANjB,EADH,CATL,CADJ;AAsBH,CAnEiB,CAAlB;eAqEehB,S"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["ViewPagerProps.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"names":[],"sources":["ViewPagerProps.ts"],"sourcesContent":["import type { ComponentType, PropsWithChildren, ReactNode, Ref } from 'react';\nimport type { ViewProps } from 'react-native';\nimport type { SharedValue } from 'react-native-reanimated';\nimport type { ComponentProps } from '@fountain-ui/core';\n\nexport type KeyboardDismissMode = 'none' | 'on-drag';\n\nexport type PageProps = PropsWithChildren<ViewProps> & {\n index: number;\n loading: ViewPagerProps['loading'];\n sharedIndex: SharedValue<number>;\n rerenderKey?: ViewPagerProps['pageForceRerenderKey'];\n};\n\nexport type PageComponent = ComponentType<PageProps>;\n\nexport type Loading = 'lazy' | 'eager';\n\nexport interface ViewPagerInstance {\n /**\n * Function to scroll to a specific page in the ViewPager. Invalid index is ignored.\n * @param index\n */\n setPage: (index: number) => void;\n}\n\nexport default interface ViewPagerProps extends ComponentProps<{\n ref?: Ref<ViewPagerInstance>;\n\n /**\n * Collection of ViewPager components.\n */\n children?: ReactNode;\n\n /**\n * Index of initial page that should be selected.\n * @default 0\n */\n initialPage?: number;\n\n /**\n * Whether to load the page immediately (`eager`) or on an as-needed basis (`lazy`).\n * @default 'lazy'\n */\n loading?: Loading;\n\n /**\n * Callback fired when an index is changed.\n */\n onChange?: (newIndex: number) => void,\n\n /**\n * The component used to render the wrapper of the page.\n * @default 'ChildrenMemoizedPage'\n */\n pageComponent?: PageComponent,\n\n /**\n * When this value is changed, page will be rerender.\n */\n pageForceRerenderKey?: any;\n\n /**\n * Mobile only. Should pager view scroll, when scroll enabled.\n * @default true\n */\n scrollEnabled?: boolean;\n\n /**\n * Mobile only. Determines whether the keyboard gets dismissed in response to a drag.\n * @default 'on-drag'\n */\n keyboardDismissMode?: KeyboardDismissMode;\n}> {}\n"],"mappings":""}
|
|
@@ -3,53 +3,60 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default =
|
|
6
|
+
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var _react =
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
|
|
10
10
|
var _reactNative = require("react-native");
|
|
11
11
|
|
|
12
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
13
|
+
|
|
14
|
+
var _core = require("@fountain-ui/core");
|
|
15
|
+
|
|
12
16
|
var _utils = require("./utils");
|
|
13
17
|
|
|
14
|
-
function
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
19
|
|
|
16
|
-
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
|
|
22
|
+
const styles = _core.StyleSheet.create({
|
|
17
23
|
root: {
|
|
18
24
|
// @ts-ignore
|
|
19
25
|
overflow: 'auto',
|
|
20
26
|
position: 'relative'
|
|
21
|
-
},
|
|
22
|
-
none: {
|
|
23
|
-
display: 'none'
|
|
24
27
|
}
|
|
25
28
|
});
|
|
26
29
|
|
|
27
|
-
function ViewPager(props) {
|
|
30
|
+
const ViewPager = /*#__PURE__*/(0, _react.forwardRef)(function ViewPager(props, ref) {
|
|
28
31
|
const {
|
|
29
32
|
children,
|
|
30
|
-
|
|
31
|
-
enableNeighborPageRerender = _utils.defaultEnableNeighborPageRerender,
|
|
32
|
-
index,
|
|
33
|
+
initialPage = _utils.defaultInitialPage,
|
|
33
34
|
loading = _utils.defaultLoading,
|
|
34
35
|
pageComponent = _utils.defaultPageComponent,
|
|
35
36
|
pageForceRerenderKey,
|
|
36
37
|
style
|
|
37
38
|
} = props;
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
const sharedIndex = (0, _reactNativeReanimated.useSharedValue)(initialPage);
|
|
40
|
+
|
|
41
|
+
const setPage = newIndex => {
|
|
42
|
+
sharedIndex.value = newIndex;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
(0, _react.useImperativeHandle)(ref, () => ({
|
|
46
|
+
setPage
|
|
47
|
+
}), []);
|
|
48
|
+
const PageComponent = pageComponent;
|
|
46
49
|
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
47
50
|
style: [styles.root, style]
|
|
48
|
-
}, _react.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
}, _react.Children.map(children, (child, index) => /*#__PURE__*/_react.default.createElement(PageComponent, {
|
|
52
|
+
key: index,
|
|
53
|
+
children: child,
|
|
54
|
+
index: index,
|
|
55
|
+
loading: loading,
|
|
56
|
+
rerenderKey: pageForceRerenderKey,
|
|
57
|
+
sharedIndex: sharedIndex
|
|
51
58
|
})));
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
;
|
|
59
|
+
});
|
|
60
|
+
var _default = ViewPager;
|
|
61
|
+
exports.default = _default;
|
|
55
62
|
//# sourceMappingURL=ViewPagerWeb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["styles","StyleSheet","create","root","overflow","position","
|
|
1
|
+
{"version":3,"names":["styles","StyleSheet","create","root","overflow","position","ViewPager","forwardRef","props","ref","children","initialPage","defaultInitialPage","loading","defaultLoading","pageComponent","defaultPageComponent","pageForceRerenderKey","style","sharedIndex","useSharedValue","setPage","newIndex","value","useImperativeHandle","PageComponent","Children","map","child","index"],"sources":["ViewPagerWeb.tsx"],"sourcesContent":["import React, { Children, forwardRef, useImperativeHandle } from 'react';\nimport { View } from 'react-native';\nimport { useSharedValue } from 'react-native-reanimated';\nimport { StyleSheet } from '@fountain-ui/core';\nimport type ViewPagerProps from './ViewPagerProps';\nimport type { ViewPagerInstance } from './ViewPagerProps';\nimport { defaultInitialPage, defaultLoading, defaultPageComponent } from './utils';\n\nconst styles = StyleSheet.create({\n root: {\n // @ts-ignore\n overflow: 'auto',\n position: 'relative',\n },\n});\n\nconst ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPager(props, ref) {\n const {\n children,\n initialPage = defaultInitialPage,\n loading = defaultLoading,\n pageComponent = defaultPageComponent,\n pageForceRerenderKey,\n style,\n } = props;\n\n const sharedIndex = useSharedValue<number>(initialPage);\n\n const setPage = (newIndex: number) => {\n sharedIndex.value = newIndex;\n };\n\n useImperativeHandle(\n ref,\n () => ({ setPage }),\n [],\n );\n\n const PageComponent = pageComponent;\n\n return (\n <View style={[styles.root, style]}>\n {Children.map(children, (child, index) => (\n <PageComponent\n key={index}\n children={child}\n index={index}\n loading={loading}\n rerenderKey={pageForceRerenderKey}\n sharedIndex={sharedIndex}\n />\n ))}\n </View>\n );\n});\n\nexport default ViewPager;\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAGA;;;;;;AAEA,MAAMA,MAAM,GAAGC,gBAAA,CAAWC,MAAX,CAAkB;EAC7BC,IAAI,EAAE;IACF;IACAC,QAAQ,EAAE,MAFR;IAGFC,QAAQ,EAAE;EAHR;AADuB,CAAlB,CAAf;;AAQA,MAAMC,SAAS,gBAAG,IAAAC,iBAAA,EAA8C,SAASD,SAAT,CAAmBE,KAAnB,EAA0BC,GAA1B,EAA+B;EAC3F,MAAM;IACFC,QADE;IAEFC,WAAW,GAAGC,yBAFZ;IAGFC,OAAO,GAAGC,qBAHR;IAIFC,aAAa,GAAGC,2BAJd;IAKFC,oBALE;IAMFC;EANE,IAOFV,KAPJ;EASA,MAAMW,WAAW,GAAG,IAAAC,qCAAA,EAAuBT,WAAvB,CAApB;;EAEA,MAAMU,OAAO,GAAIC,QAAD,IAAsB;IAClCH,WAAW,CAACI,KAAZ,GAAoBD,QAApB;EACH,CAFD;;EAIA,IAAAE,0BAAA,EACIf,GADJ,EAEI,OAAO;IAAEY;EAAF,CAAP,CAFJ,EAGI,EAHJ;EAMA,MAAMI,aAAa,GAAGV,aAAtB;EAEA,oBACI,6BAAC,iBAAD;IAAM,KAAK,EAAE,CAACf,MAAM,CAACG,IAAR,EAAce,KAAd;EAAb,GACKQ,eAAA,CAASC,GAAT,CAAajB,QAAb,EAAuB,CAACkB,KAAD,EAAQC,KAAR,kBACpB,6BAAC,aAAD;IACI,GAAG,EAAEA,KADT;IAEI,QAAQ,EAAED,KAFd;IAGI,KAAK,EAAEC,KAHX;IAII,OAAO,EAAEhB,OAJb;IAKI,WAAW,EAAEI,oBALjB;IAMI,WAAW,EAAEE;EANjB,EADH,CADL,CADJ;AAcH,CAtCiB,CAAlB;eAwCeb,S"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { default } from './ViewPagerWeb';\nexport type { default as ViewPagerProps } from './ViewPagerProps'
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { default } from './ViewPagerWeb';\nexport type { default as ViewPagerProps, ViewPagerInstance } from './ViewPagerProps';\n"],"mappings":";;;;;;;;;;;;AAAA"}
|
|
@@ -3,54 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
exports.defaultPageComponent = exports.defaultLoading = exports.defaultInitialPage = void 0;
|
|
9
7
|
|
|
10
8
|
var _ChildrenMemoizedPage = _interopRequireDefault(require("./ChildrenMemoizedPage"));
|
|
11
9
|
|
|
12
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
11
|
|
|
14
|
-
const
|
|
15
|
-
exports.
|
|
16
|
-
const defaultEnableNeighborPageRerender = false;
|
|
17
|
-
exports.defaultEnableNeighborPageRerender = defaultEnableNeighborPageRerender;
|
|
12
|
+
const defaultInitialPage = 0;
|
|
13
|
+
exports.defaultInitialPage = defaultInitialPage;
|
|
18
14
|
const defaultLoading = 'lazy';
|
|
19
15
|
exports.defaultLoading = defaultLoading;
|
|
20
16
|
const defaultPageComponent = _ChildrenMemoizedPage.default;
|
|
21
17
|
exports.defaultPageComponent = defaultPageComponent;
|
|
22
|
-
|
|
23
|
-
const usePageRenderer = _ref => {
|
|
24
|
-
let {
|
|
25
|
-
enableVisibleHint,
|
|
26
|
-
index: currentIndex,
|
|
27
|
-
loading,
|
|
28
|
-
pageComponent: PageComponent,
|
|
29
|
-
pageForceRerenderKey,
|
|
30
|
-
enableNeighborPageRerender
|
|
31
|
-
} = _ref;
|
|
32
|
-
|
|
33
|
-
const pagesStateRef = _react.default.useRef([]);
|
|
34
|
-
|
|
35
|
-
pagesStateRef.current[currentIndex] = { ...pagesStateRef.current[currentIndex],
|
|
36
|
-
visited: true
|
|
37
|
-
};
|
|
38
|
-
return children => _react.default.Children.map(children, (child, index) => {
|
|
39
|
-
var _pagesStateRef$curren;
|
|
40
|
-
|
|
41
|
-
const visited = ((_pagesStateRef$curren = pagesStateRef.current[index]) === null || _pagesStateRef$curren === void 0 ? void 0 : _pagesStateRef$curren.visited) ?? false;
|
|
42
|
-
const content = loading === 'eager' || visited ? child : null;
|
|
43
|
-
const isVisible = enableVisibleHint ? index === currentIndex : false;
|
|
44
|
-
const isNeighborIndex = index === currentIndex - 1 || index === currentIndex + 1;
|
|
45
|
-
return /*#__PURE__*/_react.default.createElement(PageComponent, {
|
|
46
|
-
key: index,
|
|
47
|
-
children: content,
|
|
48
|
-
isNeighbor: enableNeighborPageRerender && isNeighborIndex,
|
|
49
|
-
isVisible: isVisible,
|
|
50
|
-
rerenderKey: pageForceRerenderKey
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
exports.usePageRenderer = usePageRenderer;
|
|
56
18
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["defaultInitialPage","defaultLoading","defaultPageComponent","ChildrenMemoizedPage"],"sources":["utils.tsx"],"sourcesContent":["import React from 'react';\nimport { Loading, PageComponent } from './ViewPagerProps';\nimport ChildrenMemoizedPage from './ChildrenMemoizedPage';\n\nexport const defaultInitialPage: number = 0;\n\nexport const defaultLoading: Loading = 'lazy';\n\nexport const defaultPageComponent: PageComponent = ChildrenMemoizedPage;\n"],"mappings":";;;;;;;AAEA;;;;AAEO,MAAMA,kBAA0B,GAAG,CAAnC;;AAEA,MAAMC,cAAuB,GAAG,MAAhC;;AAEA,MAAMC,oBAAmC,GAAGC,6BAA5C"}
|
|
@@ -1,37 +1,99 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
1
|
+
import React, { memo, useState } from 'react';
|
|
2
|
+
import { Platform, View } from 'react-native';
|
|
3
|
+
import { runOnJS, useAnimatedReaction } from 'react-native-reanimated';
|
|
4
|
+
import { StyleSheet } from '@fountain-ui/core';
|
|
5
|
+
const OFFSCREEN_RERENDER_LIMIT = 1;
|
|
6
|
+
const styles = StyleSheet.create({
|
|
7
|
+
none: {
|
|
8
|
+
display: 'none'
|
|
9
|
+
}
|
|
10
|
+
});
|
|
5
11
|
|
|
6
|
-
|
|
12
|
+
function Page(props) {
|
|
7
13
|
const {
|
|
8
|
-
|
|
9
|
-
|
|
14
|
+
index,
|
|
15
|
+
children,
|
|
16
|
+
loading,
|
|
17
|
+
sharedIndex
|
|
10
18
|
} = props;
|
|
11
|
-
return /*#__PURE__*/React.createElement(View, _extends({
|
|
12
|
-
collapsable: false
|
|
13
|
-
}, otherProps));
|
|
14
|
-
};
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} // isVisible is an important condition for determining memos on the web.
|
|
20
|
-
// Reference ViewPagerWeb's return.
|
|
20
|
+
const assumeInitialPageState = () => {
|
|
21
|
+
const activeIndex = sharedIndex.value;
|
|
22
|
+
const active = index === activeIndex;
|
|
21
23
|
|
|
24
|
+
if (Platform.OS === 'web') {
|
|
25
|
+
return {
|
|
26
|
+
active,
|
|
27
|
+
visited: active
|
|
28
|
+
};
|
|
29
|
+
}
|
|
22
30
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
if (loading === 'eager') {
|
|
32
|
+
return {
|
|
33
|
+
active,
|
|
34
|
+
visited: true
|
|
35
|
+
};
|
|
36
|
+
}
|
|
26
37
|
|
|
27
|
-
|
|
28
|
-
return
|
|
29
|
-
|
|
38
|
+
const visited = index >= activeIndex - OFFSCREEN_RERENDER_LIMIT && index <= activeIndex + OFFSCREEN_RERENDER_LIMIT;
|
|
39
|
+
return {
|
|
40
|
+
active,
|
|
41
|
+
visited
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const [pageState, setPageState] = useState(assumeInitialPageState);
|
|
46
|
+
const content = pageState.visited ? children : null;
|
|
47
|
+
|
|
48
|
+
const updatePageState = (active, neighbor) => {
|
|
49
|
+
setPageState(prevState => {
|
|
50
|
+
if (prevState.active !== active) {
|
|
51
|
+
return {
|
|
52
|
+
active,
|
|
53
|
+
visited: active || prevState.visited
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (neighbor && !prevState.visited) {
|
|
58
|
+
return { ...prevState,
|
|
59
|
+
visited: true
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return prevState;
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
useAnimatedReaction(() => {
|
|
68
|
+
const activeIndex = sharedIndex.value;
|
|
69
|
+
const willVisible = index >= activeIndex - OFFSCREEN_RERENDER_LIMIT && index <= activeIndex + OFFSCREEN_RERENDER_LIMIT;
|
|
70
|
+
const willActive = index === activeIndex;
|
|
71
|
+
const willNeighbor = Platform.OS === 'web' ? false : willVisible && !willActive;
|
|
72
|
+
return {
|
|
73
|
+
willActive,
|
|
74
|
+
willNeighbor
|
|
75
|
+
};
|
|
76
|
+
}, (nextState, prevState) => {
|
|
77
|
+
const activeStateChanged = nextState.willActive !== (prevState === null || prevState === void 0 ? void 0 : prevState.willActive);
|
|
78
|
+
const willNewNeighbor = nextState.willNeighbor && !(prevState !== null && prevState !== void 0 && prevState.willNeighbor);
|
|
79
|
+
|
|
80
|
+
if (activeStateChanged || willNewNeighbor) {
|
|
81
|
+
runOnJS(updatePageState)(nextState.willActive, nextState.willNeighbor);
|
|
82
|
+
}
|
|
83
|
+
}, [index]);
|
|
84
|
+
const style = Platform.OS === 'web' ? pageState.active ? StyleSheet.absoluteFill : styles.none : undefined;
|
|
85
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
86
|
+
children: content,
|
|
87
|
+
collapsable: false,
|
|
88
|
+
style: style
|
|
89
|
+
});
|
|
90
|
+
}
|
|
30
91
|
|
|
92
|
+
export default /*#__PURE__*/memo(Page, (prevProps, nextProps) => {
|
|
31
93
|
if (prevProps.rerenderKey !== nextProps.rerenderKey) {
|
|
32
94
|
return false;
|
|
33
95
|
}
|
|
34
96
|
|
|
35
|
-
return prevProps.
|
|
97
|
+
return prevProps.index !== nextProps.index;
|
|
36
98
|
});
|
|
37
99
|
//# sourceMappingURL=ChildrenMemoizedPage.js.map
|