@fountain-ui/lab 2.0.0-beta.20 → 2.0.0-beta.21
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/FluxContext.js +13 -0
- package/build/commonjs/ViewPager/FluxContext.js.map +1 -0
- package/build/commonjs/ViewPager/PageStateContext.js +1 -7
- package/build/commonjs/ViewPager/PageStateContext.js.map +1 -1
- package/build/commonjs/ViewPager/{ViewPagerWeb.js → ViewPager.js} +6 -6
- package/build/commonjs/ViewPager/ViewPager.js.map +1 -0
- package/build/commonjs/ViewPager/{ViewPagerNative.js → ViewPager.native.js} +7 -7
- package/build/commonjs/ViewPager/ViewPager.native.js.map +1 -0
- package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
- package/build/commonjs/ViewPager/{ChildrenMemoizedPage.js → components/ChildrenMemoizedPage.js} +5 -3
- package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
- package/build/commonjs/ViewPager/components/FluxStoreProvider.js +37 -0
- package/build/commonjs/ViewPager/components/FluxStoreProvider.js.map +1 -0
- package/build/commonjs/ViewPager/components/index.js +24 -0
- package/build/commonjs/ViewPager/components/index.js.map +1 -0
- package/build/commonjs/ViewPager/hooks/index.js +56 -0
- package/build/commonjs/ViewPager/hooks/index.js.map +1 -0
- package/build/commonjs/ViewPager/hooks/useDispatch.js +22 -0
- package/build/commonjs/ViewPager/hooks/useDispatch.js.map +1 -0
- package/build/commonjs/ViewPager/hooks/useForceRender.js +16 -0
- package/build/commonjs/ViewPager/hooks/useForceRender.js.map +1 -0
- package/build/commonjs/ViewPager/hooks/useLazyState.js +45 -0
- package/build/commonjs/ViewPager/hooks/useLazyState.js.map +1 -0
- package/build/commonjs/ViewPager/{usePageStore.js → hooks/usePageStore.js} +0 -0
- package/build/commonjs/ViewPager/{usePageStore.js.map → hooks/usePageStore.js.map} +0 -0
- package/build/commonjs/ViewPager/hooks/useStore.js +26 -0
- package/build/commonjs/ViewPager/hooks/useStore.js.map +1 -0
- package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js +19 -0
- package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
- package/build/commonjs/ViewPager/index.js +30 -4
- package/build/commonjs/ViewPager/index.js.map +1 -1
- package/build/commonjs/ViewPager/types.js +0 -4
- package/build/commonjs/ViewPager/types.js.map +1 -1
- package/build/commonjs/ViewPager/utils.js +5 -8
- package/build/commonjs/ViewPager/utils.js.map +1 -1
- package/build/module/ViewPager/FluxContext.js +4 -0
- package/build/module/ViewPager/FluxContext.js.map +1 -0
- package/build/module/ViewPager/PageStateContext.js +1 -4
- package/build/module/ViewPager/PageStateContext.js.map +1 -1
- package/build/module/ViewPager/{ViewPagerWeb.js → ViewPager.js} +5 -6
- package/build/module/ViewPager/ViewPager.js.map +1 -0
- package/build/module/ViewPager/{ViewPagerNative.js → ViewPager.native.js} +5 -6
- package/build/module/ViewPager/ViewPager.native.js.map +1 -0
- package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
- package/build/module/ViewPager/{ChildrenMemoizedPage.js → components/ChildrenMemoizedPage.js} +5 -4
- package/build/module/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
- package/build/module/ViewPager/components/FluxStoreProvider.js +20 -0
- package/build/module/ViewPager/components/FluxStoreProvider.js.map +1 -0
- package/build/module/ViewPager/components/index.js +3 -0
- package/build/module/ViewPager/components/index.js.map +1 -0
- package/build/module/ViewPager/hooks/index.js +7 -0
- package/build/module/ViewPager/hooks/index.js.map +1 -0
- package/build/module/ViewPager/hooks/useDispatch.js +10 -0
- package/build/module/ViewPager/hooks/useDispatch.js.map +1 -0
- package/build/module/ViewPager/hooks/useForceRender.js +7 -0
- package/build/module/ViewPager/hooks/useForceRender.js.map +1 -0
- package/build/module/ViewPager/hooks/useLazyState.js +30 -0
- package/build/module/ViewPager/hooks/useLazyState.js.map +1 -0
- package/build/module/ViewPager/{usePageStore.js → hooks/usePageStore.js} +0 -0
- package/build/module/ViewPager/{usePageStore.js.map → hooks/usePageStore.js.map} +0 -0
- package/build/module/ViewPager/hooks/useStore.js +14 -0
- package/build/module/ViewPager/hooks/useStore.js.map +1 -0
- package/build/module/ViewPager/hooks/useViewPagerPageState.js +7 -0
- package/build/module/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
- package/build/module/ViewPager/index.js +3 -2
- package/build/module/ViewPager/index.js.map +1 -1
- package/build/module/ViewPager/types.js +1 -1
- package/build/module/ViewPager/types.js.map +1 -1
- package/build/module/ViewPager/utils.js +1 -2
- package/build/module/ViewPager/utils.js.map +1 -1
- package/build/typescript/ViewPager/FluxContext.d.ts +5 -0
- package/build/typescript/ViewPager/PageStateContext.d.ts +1 -2
- package/build/typescript/ViewPager/{ViewPagerNative.d.ts → ViewPager.d.ts} +1 -1
- package/build/typescript/ViewPager/{ViewPagerWeb.d.ts → ViewPager.native.d.ts} +1 -1
- package/build/typescript/ViewPager/ViewPagerProps.d.ts +1 -6
- package/build/typescript/ViewPager/components/ChildrenMemoizedPage.d.ts +14 -0
- package/build/typescript/ViewPager/components/FluxStoreProvider.d.ts +6 -0
- package/build/typescript/ViewPager/components/index.d.ts +2 -0
- package/build/typescript/ViewPager/hooks/index.d.ts +6 -0
- package/build/typescript/ViewPager/hooks/useDispatch.d.ts +1 -0
- package/build/typescript/ViewPager/hooks/useForceRender.d.ts +2 -0
- package/build/typescript/ViewPager/hooks/useLazyState.d.ts +2 -0
- package/build/typescript/ViewPager/{usePageStore.d.ts → hooks/usePageStore.d.ts} +0 -0
- package/build/typescript/ViewPager/hooks/useStore.d.ts +2 -0
- package/build/typescript/ViewPager/hooks/useViewPagerPageState.d.ts +1 -0
- package/build/typescript/ViewPager/index.d.ts +3 -2
- package/build/typescript/ViewPager/types.d.ts +3 -10
- package/build/typescript/ViewPager/utils.d.ts +2 -2
- package/package.json +2 -2
- package/src/ViewPager/FluxContext.ts +8 -0
- package/src/ViewPager/PageStateContext.ts +2 -6
- package/src/ViewPager/{ViewPagerNative.tsx → ViewPager.native.tsx} +4 -6
- package/src/ViewPager/{ViewPagerWeb.tsx → ViewPager.tsx} +4 -6
- package/src/ViewPager/ViewPagerProps.ts +1 -7
- package/src/ViewPager/{ChildrenMemoizedPage.tsx → components/ChildrenMemoizedPage.tsx} +16 -5
- package/src/ViewPager/components/FluxStoreProvider.tsx +27 -0
- package/src/ViewPager/components/index.ts +2 -0
- package/src/ViewPager/hooks/index.ts +6 -0
- package/src/ViewPager/hooks/useDispatch.ts +11 -0
- package/src/ViewPager/hooks/useForceRender.ts +7 -0
- package/src/ViewPager/hooks/useLazyState.ts +32 -0
- package/src/ViewPager/{usePageStore.ts → hooks/usePageStore.ts} +0 -0
- package/src/ViewPager/hooks/useStore.ts +15 -0
- package/src/ViewPager/hooks/useViewPagerPageState.ts +6 -0
- package/src/ViewPager/index.ts +3 -2
- package/src/ViewPager/types.ts +4 -13
- package/src/ViewPager/utils.tsx +2 -3
- package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +0 -1
- package/build/commonjs/ViewPager/ViewPagerNative.js.map +0 -1
- package/build/commonjs/ViewPager/ViewPagerWeb.js.map +0 -1
- package/build/commonjs/ViewPager/index.native.js +0 -24
- package/build/commonjs/ViewPager/index.native.js.map +0 -1
- package/build/module/ViewPager/ChildrenMemoizedPage.js.map +0 -1
- package/build/module/ViewPager/ViewPagerNative.js.map +0 -1
- package/build/module/ViewPager/ViewPagerWeb.js.map +0 -1
- package/build/module/ViewPager/index.native.js +0 -3
- package/build/module/ViewPager/index.native.js.map +0 -1
- package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +0 -5
- package/build/typescript/ViewPager/index.native.d.ts +0 -2
- package/src/ViewPager/index.native.ts +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createContext
|
|
1
|
+
import { createContext } from 'react';
|
|
2
2
|
|
|
3
|
-
interface PageState {
|
|
3
|
+
export interface PageState {
|
|
4
4
|
isActive: boolean;
|
|
5
5
|
}
|
|
6
6
|
|
|
@@ -8,8 +8,4 @@ const initialPageState: Readonly<PageState> = { isActive: false };
|
|
|
8
8
|
|
|
9
9
|
const PageStateContext = createContext<PageState>(initialPageState);
|
|
10
10
|
|
|
11
|
-
export const useViewPagerPageState = () => {
|
|
12
|
-
return useContext(PageStateContext);
|
|
13
|
-
};
|
|
14
|
-
|
|
15
11
|
export default PageStateContext;
|
|
@@ -2,10 +2,11 @@ import React, { Children, forwardRef, useCallback, useEffect, useImperativeHandl
|
|
|
2
2
|
import type { ViewPagerOnPageSelectedEvent } from 'react-native-pager-view';
|
|
3
3
|
import RNViewPager from 'react-native-pager-view';
|
|
4
4
|
import { useSyncAnimatedValue } from '@fountain-ui/core';
|
|
5
|
+
import { ChildrenMemoizedPage } from './components';
|
|
5
6
|
import type ViewPagerProps from './ViewPagerProps';
|
|
6
7
|
import type { ViewPagerInstance } from './types';
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
8
|
+
import { usePageStore } from './hooks';
|
|
9
|
+
import { defaultInitialPage, defaultLoading, defaultOffscreenPageRerenderLimit } from './utils';
|
|
9
10
|
import InternalContext from './InternalContext';
|
|
10
11
|
|
|
11
12
|
const ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPager(props, ref) {
|
|
@@ -16,7 +17,6 @@ const ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPag
|
|
|
16
17
|
loading = defaultLoading,
|
|
17
18
|
offscreenPageRerenderLimit = defaultOffscreenPageRerenderLimit,
|
|
18
19
|
onChange,
|
|
19
|
-
pageComponent = defaultPageComponent,
|
|
20
20
|
pageForceRerenderKey,
|
|
21
21
|
scrollEnabled = true,
|
|
22
22
|
style,
|
|
@@ -119,8 +119,6 @@ const ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPag
|
|
|
119
119
|
|
|
120
120
|
const contextValue = useMemo(() => ({ pageStore }), [pageStore]);
|
|
121
121
|
|
|
122
|
-
const PageComponent = pageComponent;
|
|
123
|
-
|
|
124
122
|
return (
|
|
125
123
|
<InternalContext.Provider value={contextValue}>
|
|
126
124
|
<RNViewPager
|
|
@@ -133,7 +131,7 @@ const ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPag
|
|
|
133
131
|
style={style}
|
|
134
132
|
>
|
|
135
133
|
{Children.map(children, (child, index) => (
|
|
136
|
-
<
|
|
134
|
+
<ChildrenMemoizedPage
|
|
137
135
|
key={index}
|
|
138
136
|
children={child}
|
|
139
137
|
index={index}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import React, { Children, forwardRef, useCallback, useImperativeHandle, useMemo } from 'react';
|
|
2
2
|
import { View } from 'react-native';
|
|
3
3
|
import { StyleSheet, useSyncAnimatedValue } from '@fountain-ui/core';
|
|
4
|
+
import { ChildrenMemoizedPage } from './components';
|
|
4
5
|
import type ViewPagerProps from './ViewPagerProps';
|
|
5
6
|
import type { ViewPagerInstance } from './types';
|
|
6
|
-
import { defaultInitialPage, defaultLoading
|
|
7
|
-
import usePageStore from './
|
|
7
|
+
import { defaultInitialPage, defaultLoading } from './utils';
|
|
8
|
+
import { usePageStore } from './hooks';
|
|
8
9
|
import InternalContext from './InternalContext';
|
|
9
10
|
|
|
10
11
|
const styles = StyleSheet.create({
|
|
@@ -20,7 +21,6 @@ const ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPag
|
|
|
20
21
|
children,
|
|
21
22
|
initialPage = defaultInitialPage,
|
|
22
23
|
loading = defaultLoading,
|
|
23
|
-
pageComponent = defaultPageComponent,
|
|
24
24
|
pageForceRerenderKey,
|
|
25
25
|
style,
|
|
26
26
|
UNSTABLE_sharedPage,
|
|
@@ -44,13 +44,11 @@ const ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPag
|
|
|
44
44
|
|
|
45
45
|
const contextValue = useMemo(() => ({ pageStore }), [pageStore]);
|
|
46
46
|
|
|
47
|
-
const PageComponent = pageComponent;
|
|
48
|
-
|
|
49
47
|
return (
|
|
50
48
|
<InternalContext.Provider value={contextValue}>
|
|
51
49
|
<View style={[styles.root, style]}>
|
|
52
50
|
{Children.map(children, (child, index) => (
|
|
53
|
-
<
|
|
51
|
+
<ChildrenMemoizedPage
|
|
54
52
|
key={index}
|
|
55
53
|
children={child}
|
|
56
54
|
index={index}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ReactNode, Ref } from 'react';
|
|
2
2
|
import type { ComponentProps, SyncAnimatedValue } from '@fountain-ui/core';
|
|
3
|
-
import type { KeyboardDismissMode, Loading,
|
|
3
|
+
import type { KeyboardDismissMode, Loading, ViewPagerInstance } from './types';
|
|
4
4
|
|
|
5
5
|
export default interface ViewPagerProps extends ComponentProps<{
|
|
6
6
|
ref?: Ref<ViewPagerInstance>;
|
|
@@ -34,12 +34,6 @@ export default interface ViewPagerProps extends ComponentProps<{
|
|
|
34
34
|
*/
|
|
35
35
|
onChange?: (newIndex: number) => void,
|
|
36
36
|
|
|
37
|
-
/**
|
|
38
|
-
* The component used to render the wrapper of the page.
|
|
39
|
-
* @default 'ChildrenMemoizedPage'
|
|
40
|
-
*/
|
|
41
|
-
pageComponent?: PageComponent,
|
|
42
|
-
|
|
43
37
|
/**
|
|
44
38
|
* When this value is changed, page will be rerender.
|
|
45
39
|
*/
|
|
@@ -1,15 +1,26 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { PropsWithChildren } from 'react';
|
|
2
|
+
import React, { memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import type { ViewProps } from 'react-native';
|
|
2
4
|
import { Platform, View } from 'react-native';
|
|
3
5
|
import { StyleSheet } from '@fountain-ui/core';
|
|
4
|
-
import type {
|
|
5
|
-
import
|
|
6
|
-
import
|
|
6
|
+
import type { Loading } from '../types';
|
|
7
|
+
import { useForceRender } from '../hooks';
|
|
8
|
+
import PageStateContext from '../PageStateContext';
|
|
9
|
+
import InternalContext from '../InternalContext';
|
|
7
10
|
|
|
8
11
|
const styles = StyleSheet.create({
|
|
9
12
|
fill: { width: '100%', height: '100%' },
|
|
10
13
|
none: { display: 'none' },
|
|
11
14
|
});
|
|
12
15
|
|
|
16
|
+
export type PageProps = PropsWithChildren<ViewProps> & {
|
|
17
|
+
index: number;
|
|
18
|
+
initialPage: number;
|
|
19
|
+
loading: Loading;
|
|
20
|
+
offscreenPageRerenderLimit: number;
|
|
21
|
+
rerenderKey?: any;
|
|
22
|
+
};
|
|
23
|
+
|
|
13
24
|
interface InternalPageDescription {
|
|
14
25
|
isActive: boolean;
|
|
15
26
|
becomeNeighbor: boolean;
|
|
@@ -56,7 +67,7 @@ function Page(props: PageProps) {
|
|
|
56
67
|
|
|
57
68
|
// `Bailing out of a state update` is not working as expected.
|
|
58
69
|
const pageStateRef = useRef<InternalPageState>(initialState);
|
|
59
|
-
const
|
|
70
|
+
const forceRender = useForceRender();
|
|
60
71
|
|
|
61
72
|
const { active, loaded } = pageStateRef.current;
|
|
62
73
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React, { useEffect, useRef } from 'react';
|
|
2
|
+
import { SimpleStore } from '@fountain-ui/core';
|
|
3
|
+
import type { FluxStore } from '../FluxContext';
|
|
4
|
+
import FluxContext from '../FluxContext';
|
|
5
|
+
|
|
6
|
+
export interface FluxStoreProviderProps<State> {
|
|
7
|
+
children: React.ReactElement;
|
|
8
|
+
initialState: State;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export default function FluxStoreProvider<State>(props: FluxStoreProviderProps<State>) {
|
|
12
|
+
const { children, initialState } = props;
|
|
13
|
+
|
|
14
|
+
const store = useRef<FluxStore<State>>(new SimpleStore(initialState)).current;
|
|
15
|
+
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
return () => {
|
|
18
|
+
store.removeAllListeners();
|
|
19
|
+
};
|
|
20
|
+
}, [store]);
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<FluxContext.Provider value={store}>
|
|
24
|
+
{children}
|
|
25
|
+
</FluxContext.Provider>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as useDispatch } from './useDispatch';
|
|
2
|
+
export { default as useForceRender } from './useForceRender';
|
|
3
|
+
export { default as useLazyState } from './useLazyState';
|
|
4
|
+
export { default as usePageStore } from './usePageStore';
|
|
5
|
+
export { default as useStore } from './useStore';
|
|
6
|
+
export { default as useViewPagerPageState } from './useViewPagerPageState';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import type { EqualityFunction } from '../types';
|
|
3
|
+
import { refEqual } from '../utils';
|
|
4
|
+
import useForceRender from './useForceRender';
|
|
5
|
+
import useViewPagerPageState from './useViewPagerPageState';
|
|
6
|
+
import useStore from './useStore';
|
|
7
|
+
|
|
8
|
+
export default function useLazyState<State>(equalityFn: EqualityFunction<State> = refEqual): State {
|
|
9
|
+
const store = useStore<State>();
|
|
10
|
+
|
|
11
|
+
const stateRef = useRef<State>(store.getState());
|
|
12
|
+
|
|
13
|
+
const forceRender = useForceRender();
|
|
14
|
+
|
|
15
|
+
const { isActive } = useViewPagerPageState();
|
|
16
|
+
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
return store.subscribe(newState => {
|
|
19
|
+
if (equalityFn(stateRef.current, newState)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
stateRef.current = newState;
|
|
24
|
+
|
|
25
|
+
if (isActive) {
|
|
26
|
+
forceRender();
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}, [store, isActive]);
|
|
30
|
+
|
|
31
|
+
return stateRef.current;
|
|
32
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import type { FluxStore } from '../FluxContext';
|
|
3
|
+
import FluxContext from '../FluxContext';
|
|
4
|
+
|
|
5
|
+
export default function useStore<State>(): FluxStore<State> {
|
|
6
|
+
// @ts-ignore
|
|
7
|
+
const store = useContext<FluxStore<State>>(FluxContext);
|
|
8
|
+
if (store == null) {
|
|
9
|
+
throw new Error(
|
|
10
|
+
'You should wrap your parent component with `FluxStoreProvider`',
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return store;
|
|
15
|
+
};
|
package/src/ViewPager/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { default } from './
|
|
1
|
+
export { default } from './ViewPager';
|
|
2
2
|
export type { default as ViewPagerProps } from './ViewPagerProps';
|
|
3
3
|
export type { ViewPagerInstance } from './types';
|
|
4
|
-
export { useViewPagerPageState } from './
|
|
4
|
+
export { useViewPagerPageState, useDispatch as useFluxDispatch, useLazyState, useStore as useFluxStore } from './hooks';
|
|
5
|
+
export { FluxStoreProvider } from './components';
|
package/src/ViewPager/types.ts
CHANGED
|
@@ -1,20 +1,11 @@
|
|
|
1
|
-
import type { ComponentType, PropsWithChildren } from 'react';
|
|
2
|
-
import type { ViewProps } from 'react-native';
|
|
3
|
-
|
|
4
|
-
export type PageProps = PropsWithChildren<ViewProps> & {
|
|
5
|
-
index: number;
|
|
6
|
-
initialPage: number;
|
|
7
|
-
loading: Loading;
|
|
8
|
-
offscreenPageRerenderLimit: number;
|
|
9
|
-
rerenderKey?: any;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
1
|
export type KeyboardDismissMode = 'none' | 'on-drag';
|
|
13
2
|
|
|
14
|
-
export type PageComponent = ComponentType<PageProps>;
|
|
15
|
-
|
|
16
3
|
export type Loading = 'lazy' | 'eager';
|
|
17
4
|
|
|
5
|
+
export interface EqualityFunction<State> {
|
|
6
|
+
(a: State, b: State): boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
18
9
|
export interface ViewPagerInstance {
|
|
19
10
|
/**
|
|
20
11
|
* Function to scroll to a specific page in the ViewPager. Invalid index is ignored.
|
package/src/ViewPager/utils.tsx
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { Loading, PageComponent } from './types';
|
|
1
|
+
import type { EqualityFunction, Loading } from './types';
|
|
3
2
|
|
|
4
3
|
export const defaultInitialPage: number = 0;
|
|
5
4
|
|
|
@@ -7,4 +6,4 @@ export const defaultLoading: Loading = 'lazy';
|
|
|
7
6
|
|
|
8
7
|
export const defaultOffscreenPageRerenderLimit: number = 0;
|
|
9
8
|
|
|
10
|
-
export const
|
|
9
|
+
export const refEqual: EqualityFunction<any> = (a: any, b: any) => a === b;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["styles","StyleSheet","create","fill","width","height","none","display","Page","props","index","initialPage","children","loading","offscreenPageRerenderLimit","pageStore","useContext","InternalContext","computePageDescription","useCallback","page","activeIndex","isActive","shouldRerender","becomeNeighbor","initialState","useState","active","loaded","pageStateRef","useRef","forceRender","useReducer","s","current","content","useEffect","subscribe","newPage","currentState","newState","contextValue","useMemo","style","Platform","OS","absoluteFill","memo","prevProps","nextProps","rerenderKey"],"sources":["ChildrenMemoizedPage.tsx"],"sourcesContent":["import React, { memo, useCallback, useContext, useEffect, useMemo, useReducer, useRef, useState } from 'react';\nimport { Platform, View } from 'react-native';\nimport { StyleSheet } from '@fountain-ui/core';\nimport type { PageProps } from './types';\nimport PageStateContext from './PageStateContext';\nimport InternalContext from './InternalContext';\n\nconst styles = StyleSheet.create({\n fill: { width: '100%', height: '100%' },\n none: { display: 'none' },\n});\n\ninterface InternalPageDescription {\n isActive: boolean;\n becomeNeighbor: boolean;\n}\n\ninterface InternalPageState {\n active: boolean;\n loaded: boolean;\n}\n\nfunction Page(props: PageProps) {\n const {\n index,\n initialPage,\n children,\n loading,\n offscreenPageRerenderLimit,\n } = props;\n\n const { pageStore } = useContext(InternalContext);\n\n const computePageDescription: (page: number) => InternalPageDescription = useCallback((page: number) => {\n const activeIndex = page;\n\n const isActive = index === activeIndex;\n\n const shouldRerender = index >= activeIndex - offscreenPageRerenderLimit\n && index <= activeIndex + offscreenPageRerenderLimit;\n\n const becomeNeighbor = shouldRerender && !isActive;\n\n return { isActive, becomeNeighbor };\n }, [index]);\n\n const [initialState] = useState<InternalPageState>(() => {\n const { isActive, becomeNeighbor } = computePageDescription(initialPage);\n\n if (loading === 'eager') {\n return { active: isActive, loaded: true };\n }\n\n return { active: isActive, loaded: isActive || becomeNeighbor };\n });\n\n // `Bailing out of a state update` is not working as expected.\n const pageStateRef = useRef<InternalPageState>(initialState);\n const [, forceRender] = useReducer((s) => s + 1, 0);\n\n const { active, loaded } = pageStateRef.current;\n\n const content = loaded ? children : null;\n\n useEffect(() => {\n return pageStore.subscribe(newPage => {\n const { isActive, becomeNeighbor } = computePageDescription(newPage);\n\n const currentState = pageStateRef.current;\n\n const newState: InternalPageState = {\n active: isActive,\n loaded: isActive || becomeNeighbor ? true : currentState.loaded,\n };\n\n if (\n currentState.active !== newState.active\n || currentState.loaded !== newState.loaded\n ) {\n pageStateRef.current = newState;\n\n forceRender();\n }\n });\n }, [pageStore, computePageDescription]);\n\n const contextValue = useMemo(() => ({\n isActive: active,\n }), [active]);\n\n const style = Platform.OS === 'web'\n ? (active ? StyleSheet.absoluteFill : styles.none)\n : styles.fill;\n\n return (\n <View\n collapsable={false}\n style={style}\n >\n <PageStateContext.Provider value={contextValue}>\n {content}\n </PageStateContext.Provider>\n </View>\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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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["ViewPager","forwardRef","props","ref","children","initialPage","defaultInitialPage","keyboardDismissMode","loading","defaultLoading","offscreenPageRerenderLimit","defaultOffscreenPageRerenderLimit","onChange","pageComponent","defaultPageComponent","pageForceRerenderKey","scrollEnabled","style","UNSTABLE_sharedPage","fallbackSharedPage","useSyncAnimatedValue","initialValue","sharedPage","pageRef","useRef","desiredPageRef","NaN","pagerRef","animationFrameRef","setPage","useCallback","newPage","Number","isInteger","current","requestAnimationFrame","isFinite","useEffect","cancelAnimationFrame","animatedValue","id","addListener","newValue","value","removeListener","handlePageSelected","e","desiredPage","setValue","trustfulNextPage","nativeEvent","position","useImperativeHandle","pageStore","usePageStore","contextValue","useMemo","PageComponent","Children","map","child","index"],"sources":["ViewPagerNative.tsx"],"sourcesContent":["import React, { Children, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';\nimport type { ViewPagerOnPageSelectedEvent } from 'react-native-pager-view';\nimport RNViewPager from 'react-native-pager-view';\nimport { useSyncAnimatedValue } from '@fountain-ui/core';\nimport type ViewPagerProps from './ViewPagerProps';\nimport type { ViewPagerInstance } from './types';\nimport { defaultInitialPage, defaultLoading, defaultOffscreenPageRerenderLimit, defaultPageComponent } from './utils';\nimport usePageStore from './usePageStore';\nimport InternalContext from './InternalContext';\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 offscreenPageRerenderLimit = defaultOffscreenPageRerenderLimit,\n onChange,\n pageComponent = defaultPageComponent,\n pageForceRerenderKey,\n scrollEnabled = true,\n style,\n UNSTABLE_sharedPage,\n } = props;\n\n const fallbackSharedPage = useSyncAnimatedValue({ initialValue: initialPage });\n\n const sharedPage = UNSTABLE_sharedPage ?? fallbackSharedPage;\n\n const pageRef = useRef<number>(sharedPage.initialValue);\n\n const desiredPageRef = useRef<number>(NaN);\n\n const pagerRef = useRef<RNViewPager | null>(null);\n\n const animationFrameRef = useRef<number>(NaN);\n\n const setPage = useCallback((newPage: number) => {\n if (!Number.isInteger(newPage)) {\n return;\n }\n\n animationFrameRef.current = requestAnimationFrame(() => {\n if (Number.isFinite(desiredPageRef.current)) {\n if (pageRef.current === desiredPageRef.current) {\n // end of state machine. clear desired page.\n desiredPageRef.current = NaN;\n return;\n }\n\n if (newPage === desiredPageRef.current) {\n return;\n }\n }\n\n desiredPageRef.current = newPage;\n pagerRef.current?.setPage(newPage);\n });\n }, []);\n\n useEffect(() => {\n return () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n const animatedValue = sharedPage.animatedValue;\n const id = animatedValue.addListener(newValue => {\n const newPage = newValue.value;\n pageRef.current = newPage;\n setPage(newPage);\n });\n\n return () => {\n animatedValue.removeListener(id);\n };\n }, [sharedPage, setPage]);\n\n const handlePageSelected = useCallback((e: ViewPagerOnPageSelectedEvent) => {\n if (Number.isFinite(desiredPageRef.current)) {\n // onPageSelected is called from outer controlling mechanism\n // e.g. sharedPage.value is changed, setPage() is called\n // Due to the onPageSelected bug,\n // we don't trust the value from event, (e.nativeEvent.position)\n // other than that trust the value from desiredPageRef.\n\n const desiredPage = desiredPageRef.current;\n\n if (pageRef.current === desiredPage) {\n // end of state machine. clear desired page.\n desiredPageRef.current = NaN;\n } else {\n sharedPage.animatedValue.setValue(desiredPage);\n }\n\n onChange?.(desiredPage);\n } else {\n const trustfulNextPage = e.nativeEvent.position;\n\n if (trustfulNextPage !== pageRef.current) {\n desiredPageRef.current = trustfulNextPage;\n sharedPage.animatedValue.setValue(trustfulNextPage);\n\n onChange?.(trustfulNextPage);\n }\n }\n }, [onChange, sharedPage]);\n\n useImperativeHandle(\n ref,\n () => ({ setPage }),\n [setPage],\n );\n\n const pageStore = usePageStore(sharedPage);\n\n const contextValue = useMemo(() => ({ pageStore }), [pageStore]);\n\n const PageComponent = pageComponent;\n\n return (\n <InternalContext.Provider value={contextValue}>\n <RNViewPager\n ref={pagerRef}\n initialPage={sharedPage.initialValue}\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 initialPage={sharedPage.initialValue}\n loading={loading}\n offscreenPageRerenderLimit={offscreenPageRerenderLimit}\n rerenderKey={pageForceRerenderKey}\n />\n ))}\n </RNViewPager>\n </InternalContext.Provider>\n );\n});\n\nexport default ViewPager;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["styles","StyleSheet","create","root","overflow","position","ViewPager","forwardRef","props","ref","children","initialPage","defaultInitialPage","loading","defaultLoading","pageComponent","defaultPageComponent","pageForceRerenderKey","style","UNSTABLE_sharedPage","fallbackSharedPage","useSyncAnimatedValue","initialValue","sharedPage","setPage","useCallback","newPage","animatedValue","setValue","useImperativeHandle","pageStore","usePageStore","contextValue","useMemo","PageComponent","Children","map","child","index"],"sources":["ViewPagerWeb.tsx"],"sourcesContent":["import React, { Children, forwardRef, useCallback, useImperativeHandle, useMemo } from 'react';\nimport { View } from 'react-native';\nimport { StyleSheet, useSyncAnimatedValue } from '@fountain-ui/core';\nimport type ViewPagerProps from './ViewPagerProps';\nimport type { ViewPagerInstance } from './types';\nimport { defaultInitialPage, defaultLoading, defaultPageComponent } from './utils';\nimport usePageStore from './usePageStore';\nimport InternalContext from './InternalContext';\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 UNSTABLE_sharedPage,\n } = props;\n\n const fallbackSharedPage = useSyncAnimatedValue({ initialValue: initialPage });\n\n const sharedPage = UNSTABLE_sharedPage ?? fallbackSharedPage;\n\n const setPage = useCallback((newPage: number) => {\n sharedPage.animatedValue.setValue(newPage);\n }, [sharedPage]);\n\n useImperativeHandle(\n ref,\n () => ({ setPage }),\n [setPage],\n );\n\n const pageStore = usePageStore(sharedPage);\n\n const contextValue = useMemo(() => ({ pageStore }), [pageStore]);\n\n const PageComponent = pageComponent;\n\n return (\n <InternalContext.Provider value={contextValue}>\n <View style={[styles.root, style]}>\n {Children.map(children, (child, index) => (\n <PageComponent\n key={index}\n children={child}\n index={index}\n initialPage={sharedPage.initialValue}\n loading={loading}\n offscreenPageRerenderLimit={0} // All offscreen pages will not be re-rendered\n rerenderKey={pageForceRerenderKey}\n />\n ))}\n </View>\n </InternalContext.Provider>\n );\n});\n\nexport default ViewPager;\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAGA;;AACA;;AACA;;;;;;;;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,KANE;IAOFC;EAPE,IAQFX,KARJ;EAUA,MAAMY,kBAAkB,GAAG,IAAAC,0BAAA,EAAqB;IAAEC,YAAY,EAAEX;EAAhB,CAArB,CAA3B;EAEA,MAAMY,UAAU,GAAGJ,mBAAmB,IAAIC,kBAA1C;EAEA,MAAMI,OAAO,GAAG,IAAAC,kBAAA,EAAaC,OAAD,IAAqB;IAC7CH,UAAU,CAACI,aAAX,CAAyBC,QAAzB,CAAkCF,OAAlC;EACH,CAFe,EAEb,CAACH,UAAD,CAFa,CAAhB;EAIA,IAAAM,0BAAA,EACIpB,GADJ,EAEI,OAAO;IAAEe;EAAF,CAAP,CAFJ,EAGI,CAACA,OAAD,CAHJ;EAMA,MAAMM,SAAS,GAAG,IAAAC,qBAAA,EAAaR,UAAb,CAAlB;EAEA,MAAMS,YAAY,GAAG,IAAAC,cAAA,EAAQ,OAAO;IAAEH;EAAF,CAAP,CAAR,EAA+B,CAACA,SAAD,CAA/B,CAArB;EAEA,MAAMI,aAAa,GAAGnB,aAAtB;EAEA,oBACI,6BAAC,wBAAD,CAAiB,QAAjB;IAA0B,KAAK,EAAEiB;EAAjC,gBACI,6BAAC,iBAAD;IAAM,KAAK,EAAE,CAAChC,MAAM,CAACG,IAAR,EAAce,KAAd;EAAb,GACKiB,eAAA,CAASC,GAAT,CAAa1B,QAAb,EAAuB,CAAC2B,KAAD,EAAQC,KAAR,kBACpB,6BAAC,aAAD;IACI,GAAG,EAAEA,KADT;IAEI,QAAQ,EAAED,KAFd;IAGI,KAAK,EAAEC,KAHX;IAII,WAAW,EAAEf,UAAU,CAACD,YAJ5B;IAKI,OAAO,EAAET,OALb;IAMI,0BAA0B,EAAE,CANhC,CAMmC;IANnC;IAOI,WAAW,EAAEI;EAPjB,EADH,CADL,CADJ,CADJ;AAiBH,CAhDiB,CAAlB;eAkDeX,S"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "default", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _ViewPagerNative.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
Object.defineProperty(exports, "useViewPagerPageState", {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () {
|
|
15
|
-
return _PageStateContext.useViewPagerPageState;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
var _ViewPagerNative = _interopRequireDefault(require("./ViewPagerNative"));
|
|
20
|
-
|
|
21
|
-
var _PageStateContext = require("./PageStateContext");
|
|
22
|
-
|
|
23
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
24
|
-
//# sourceMappingURL=index.native.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.native.ts"],"sourcesContent":["export { default } from './ViewPagerNative';\nexport { useViewPagerPageState } from './PageStateContext';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;AACA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","memo","useCallback","useContext","useEffect","useMemo","useReducer","useRef","useState","Platform","View","StyleSheet","PageStateContext","InternalContext","styles","create","fill","width","height","none","display","Page","props","index","initialPage","children","loading","offscreenPageRerenderLimit","pageStore","computePageDescription","page","activeIndex","isActive","shouldRerender","becomeNeighbor","initialState","active","loaded","pageStateRef","forceRender","s","current","content","subscribe","newPage","currentState","newState","contextValue","style","OS","absoluteFill","prevProps","nextProps","rerenderKey"],"sources":["ChildrenMemoizedPage.tsx"],"sourcesContent":["import React, { memo, useCallback, useContext, useEffect, useMemo, useReducer, useRef, useState } from 'react';\nimport { Platform, View } from 'react-native';\nimport { StyleSheet } from '@fountain-ui/core';\nimport type { PageProps } from './types';\nimport PageStateContext from './PageStateContext';\nimport InternalContext from './InternalContext';\n\nconst styles = StyleSheet.create({\n fill: { width: '100%', height: '100%' },\n none: { display: 'none' },\n});\n\ninterface InternalPageDescription {\n isActive: boolean;\n becomeNeighbor: boolean;\n}\n\ninterface InternalPageState {\n active: boolean;\n loaded: boolean;\n}\n\nfunction Page(props: PageProps) {\n const {\n index,\n initialPage,\n children,\n loading,\n offscreenPageRerenderLimit,\n } = props;\n\n const { pageStore } = useContext(InternalContext);\n\n const computePageDescription: (page: number) => InternalPageDescription = useCallback((page: number) => {\n const activeIndex = page;\n\n const isActive = index === activeIndex;\n\n const shouldRerender = index >= activeIndex - offscreenPageRerenderLimit\n && index <= activeIndex + offscreenPageRerenderLimit;\n\n const becomeNeighbor = shouldRerender && !isActive;\n\n return { isActive, becomeNeighbor };\n }, [index]);\n\n const [initialState] = useState<InternalPageState>(() => {\n const { isActive, becomeNeighbor } = computePageDescription(initialPage);\n\n if (loading === 'eager') {\n return { active: isActive, loaded: true };\n }\n\n return { active: isActive, loaded: isActive || becomeNeighbor };\n });\n\n // `Bailing out of a state update` is not working as expected.\n const pageStateRef = useRef<InternalPageState>(initialState);\n const [, forceRender] = useReducer((s) => s + 1, 0);\n\n const { active, loaded } = pageStateRef.current;\n\n const content = loaded ? children : null;\n\n useEffect(() => {\n return pageStore.subscribe(newPage => {\n const { isActive, becomeNeighbor } = computePageDescription(newPage);\n\n const currentState = pageStateRef.current;\n\n const newState: InternalPageState = {\n active: isActive,\n loaded: isActive || becomeNeighbor ? true : currentState.loaded,\n };\n\n if (\n currentState.active !== newState.active\n || currentState.loaded !== newState.loaded\n ) {\n pageStateRef.current = newState;\n\n forceRender();\n }\n });\n }, [pageStore, computePageDescription]);\n\n const contextValue = useMemo(() => ({\n isActive: active,\n }), [active]);\n\n const style = Platform.OS === 'web'\n ? (active ? StyleSheet.absoluteFill : styles.none)\n : styles.fill;\n\n return (\n <View\n collapsable={false}\n style={style}\n >\n <PageStateContext.Provider value={contextValue}>\n {content}\n </PageStateContext.Provider>\n </View>\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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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","Children","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","RNViewPager","useSyncAnimatedValue","defaultInitialPage","defaultLoading","defaultOffscreenPageRerenderLimit","defaultPageComponent","usePageStore","InternalContext","ViewPager","props","ref","children","initialPage","keyboardDismissMode","loading","offscreenPageRerenderLimit","onChange","pageComponent","pageForceRerenderKey","scrollEnabled","style","UNSTABLE_sharedPage","fallbackSharedPage","initialValue","sharedPage","pageRef","desiredPageRef","NaN","pagerRef","animationFrameRef","setPage","newPage","Number","isInteger","current","requestAnimationFrame","isFinite","cancelAnimationFrame","animatedValue","id","addListener","newValue","value","removeListener","handlePageSelected","e","desiredPage","setValue","trustfulNextPage","nativeEvent","position","pageStore","contextValue","PageComponent","map","child","index"],"sources":["ViewPagerNative.tsx"],"sourcesContent":["import React, { Children, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';\nimport type { ViewPagerOnPageSelectedEvent } from 'react-native-pager-view';\nimport RNViewPager from 'react-native-pager-view';\nimport { useSyncAnimatedValue } from '@fountain-ui/core';\nimport type ViewPagerProps from './ViewPagerProps';\nimport type { ViewPagerInstance } from './types';\nimport { defaultInitialPage, defaultLoading, defaultOffscreenPageRerenderLimit, defaultPageComponent } from './utils';\nimport usePageStore from './usePageStore';\nimport InternalContext from './InternalContext';\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 offscreenPageRerenderLimit = defaultOffscreenPageRerenderLimit,\n onChange,\n pageComponent = defaultPageComponent,\n pageForceRerenderKey,\n scrollEnabled = true,\n style,\n UNSTABLE_sharedPage,\n } = props;\n\n const fallbackSharedPage = useSyncAnimatedValue({ initialValue: initialPage });\n\n const sharedPage = UNSTABLE_sharedPage ?? fallbackSharedPage;\n\n const pageRef = useRef<number>(sharedPage.initialValue);\n\n const desiredPageRef = useRef<number>(NaN);\n\n const pagerRef = useRef<RNViewPager | null>(null);\n\n const animationFrameRef = useRef<number>(NaN);\n\n const setPage = useCallback((newPage: number) => {\n if (!Number.isInteger(newPage)) {\n return;\n }\n\n animationFrameRef.current = requestAnimationFrame(() => {\n if (Number.isFinite(desiredPageRef.current)) {\n if (pageRef.current === desiredPageRef.current) {\n // end of state machine. clear desired page.\n desiredPageRef.current = NaN;\n return;\n }\n\n if (newPage === desiredPageRef.current) {\n return;\n }\n }\n\n desiredPageRef.current = newPage;\n pagerRef.current?.setPage(newPage);\n });\n }, []);\n\n useEffect(() => {\n return () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n const animatedValue = sharedPage.animatedValue;\n const id = animatedValue.addListener(newValue => {\n const newPage = newValue.value;\n pageRef.current = newPage;\n setPage(newPage);\n });\n\n return () => {\n animatedValue.removeListener(id);\n };\n }, [sharedPage, setPage]);\n\n const handlePageSelected = useCallback((e: ViewPagerOnPageSelectedEvent) => {\n if (Number.isFinite(desiredPageRef.current)) {\n // onPageSelected is called from outer controlling mechanism\n // e.g. sharedPage.value is changed, setPage() is called\n // Due to the onPageSelected bug,\n // we don't trust the value from event, (e.nativeEvent.position)\n // other than that trust the value from desiredPageRef.\n\n const desiredPage = desiredPageRef.current;\n\n if (pageRef.current === desiredPage) {\n // end of state machine. clear desired page.\n desiredPageRef.current = NaN;\n } else {\n sharedPage.animatedValue.setValue(desiredPage);\n }\n\n onChange?.(desiredPage);\n } else {\n const trustfulNextPage = e.nativeEvent.position;\n\n if (trustfulNextPage !== pageRef.current) {\n desiredPageRef.current = trustfulNextPage;\n sharedPage.animatedValue.setValue(trustfulNextPage);\n\n onChange?.(trustfulNextPage);\n }\n }\n }, [onChange, sharedPage]);\n\n useImperativeHandle(\n ref,\n () => ({ setPage }),\n [setPage],\n );\n\n const pageStore = usePageStore(sharedPage);\n\n const contextValue = useMemo(() => ({ pageStore }), [pageStore]);\n\n const PageComponent = pageComponent;\n\n return (\n <InternalContext.Provider value={contextValue}>\n <RNViewPager\n ref={pagerRef}\n initialPage={sharedPage.initialValue}\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 initialPage={sharedPage.initialValue}\n loading={loading}\n offscreenPageRerenderLimit={offscreenPageRerenderLimit}\n rerenderKey={pageForceRerenderKey}\n />\n ))}\n </RNViewPager>\n </InternalContext.Provider>\n );\n});\n\nexport default ViewPager;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","Children","forwardRef","useCallback","useImperativeHandle","useMemo","View","StyleSheet","useSyncAnimatedValue","defaultInitialPage","defaultLoading","defaultPageComponent","usePageStore","InternalContext","styles","create","root","overflow","position","ViewPager","props","ref","children","initialPage","loading","pageComponent","pageForceRerenderKey","style","UNSTABLE_sharedPage","fallbackSharedPage","initialValue","sharedPage","setPage","newPage","animatedValue","setValue","pageStore","contextValue","PageComponent","map","child","index"],"sources":["ViewPagerWeb.tsx"],"sourcesContent":["import React, { Children, forwardRef, useCallback, useImperativeHandle, useMemo } from 'react';\nimport { View } from 'react-native';\nimport { StyleSheet, useSyncAnimatedValue } from '@fountain-ui/core';\nimport type ViewPagerProps from './ViewPagerProps';\nimport type { ViewPagerInstance } from './types';\nimport { defaultInitialPage, defaultLoading, defaultPageComponent } from './utils';\nimport usePageStore from './usePageStore';\nimport InternalContext from './InternalContext';\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 UNSTABLE_sharedPage,\n } = props;\n\n const fallbackSharedPage = useSyncAnimatedValue({ initialValue: initialPage });\n\n const sharedPage = UNSTABLE_sharedPage ?? fallbackSharedPage;\n\n const setPage = useCallback((newPage: number) => {\n sharedPage.animatedValue.setValue(newPage);\n }, [sharedPage]);\n\n useImperativeHandle(\n ref,\n () => ({ setPage }),\n [setPage],\n );\n\n const pageStore = usePageStore(sharedPage);\n\n const contextValue = useMemo(() => ({ pageStore }), [pageStore]);\n\n const PageComponent = pageComponent;\n\n return (\n <InternalContext.Provider value={contextValue}>\n <View style={[styles.root, style]}>\n {Children.map(children, (child, index) => (\n <PageComponent\n key={index}\n children={child}\n index={index}\n initialPage={sharedPage.initialValue}\n loading={loading}\n offscreenPageRerenderLimit={0} // All offscreen pages will not be re-rendered\n rerenderKey={pageForceRerenderKey}\n />\n ))}\n </View>\n </InternalContext.Provider>\n );\n});\n\nexport default ViewPager;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,QAAhB,EAA0BC,UAA1B,EAAsCC,WAAtC,EAAmDC,mBAAnD,EAAwEC,OAAxE,QAAuF,OAAvF;AACA,SAASC,IAAT,QAAqB,cAArB;AACA,SAASC,UAAT,EAAqBC,oBAArB,QAAiD,mBAAjD;AAGA,SAASC,kBAAT,EAA6BC,cAA7B,EAA6CC,oBAA7C,QAAyE,SAAzE;AACA,OAAOC,YAAP,MAAyB,gBAAzB;AACA,OAAOC,eAAP,MAA4B,mBAA5B;AAEA,MAAMC,MAAM,GAAGP,UAAU,CAACQ,MAAX,CAAkB;EAC7BC,IAAI,EAAE;IACF;IACAC,QAAQ,EAAE,MAFR;IAGFC,QAAQ,EAAE;EAHR;AADuB,CAAlB,CAAf;AAQA,MAAMC,SAAS,gBAAGjB,UAAU,CAAoC,SAASiB,SAAT,CAAmBC,KAAnB,EAA0BC,GAA1B,EAA+B;EAC3F,MAAM;IACFC,QADE;IAEFC,WAAW,GAAGd,kBAFZ;IAGFe,OAAO,GAAGd,cAHR;IAIFe,aAAa,GAAGd,oBAJd;IAKFe,oBALE;IAMFC,KANE;IAOFC;EAPE,IAQFR,KARJ;EAUA,MAAMS,kBAAkB,GAAGrB,oBAAoB,CAAC;IAAEsB,YAAY,EAAEP;EAAhB,CAAD,CAA/C;EAEA,MAAMQ,UAAU,GAAGH,mBAAmB,IAAIC,kBAA1C;EAEA,MAAMG,OAAO,GAAG7B,WAAW,CAAE8B,OAAD,IAAqB;IAC7CF,UAAU,CAACG,aAAX,CAAyBC,QAAzB,CAAkCF,OAAlC;EACH,CAF0B,EAExB,CAACF,UAAD,CAFwB,CAA3B;EAIA3B,mBAAmB,CACfiB,GADe,EAEf,OAAO;IAAEW;EAAF,CAAP,CAFe,EAGf,CAACA,OAAD,CAHe,CAAnB;EAMA,MAAMI,SAAS,GAAGxB,YAAY,CAACmB,UAAD,CAA9B;EAEA,MAAMM,YAAY,GAAGhC,OAAO,CAAC,OAAO;IAAE+B;EAAF,CAAP,CAAD,EAAwB,CAACA,SAAD,CAAxB,CAA5B;EAEA,MAAME,aAAa,GAAGb,aAAtB;EAEA,oBACI,oBAAC,eAAD,CAAiB,QAAjB;IAA0B,KAAK,EAAEY;EAAjC,gBACI,oBAAC,IAAD;IAAM,KAAK,EAAE,CAACvB,MAAM,CAACE,IAAR,EAAcW,KAAd;EAAb,GACK1B,QAAQ,CAACsC,GAAT,CAAajB,QAAb,EAAuB,CAACkB,KAAD,EAAQC,KAAR,kBACpB,oBAAC,aAAD;IACI,GAAG,EAAEA,KADT;IAEI,QAAQ,EAAED,KAFd;IAGI,KAAK,EAAEC,KAHX;IAII,WAAW,EAAEV,UAAU,CAACD,YAJ5B;IAKI,OAAO,EAAEN,OALb;IAMI,0BAA0B,EAAE,CANhC,CAMmC;IANnC;IAOI,WAAW,EAAEE;EAPjB,EADH,CADL,CADJ,CADJ;AAiBH,CAhD2B,CAA5B;AAkDA,eAAeP,SAAf"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["default","useViewPagerPageState"],"sources":["index.native.ts"],"sourcesContent":["export { default } from './ViewPagerNative';\nexport { useViewPagerPageState } from './PageStateContext';\n"],"mappings":"AAAA,SAASA,OAAT,QAAwB,mBAAxB;AACA,SAASC,qBAAT,QAAsC,oBAAtC"}
|