@fountain-ui/lab 2.0.0-beta.18 → 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.
Files changed (120) hide show
  1. package/build/commonjs/ViewPager/FluxContext.js +13 -0
  2. package/build/commonjs/ViewPager/FluxContext.js.map +1 -0
  3. package/build/commonjs/ViewPager/PageStateContext.js +1 -7
  4. package/build/commonjs/ViewPager/PageStateContext.js.map +1 -1
  5. package/build/commonjs/ViewPager/{ViewPagerWeb.js → ViewPager.js} +10 -9
  6. package/build/commonjs/ViewPager/ViewPager.js.map +1 -0
  7. package/build/commonjs/ViewPager/{ViewPagerNative.js → ViewPager.native.js} +11 -10
  8. package/build/commonjs/ViewPager/ViewPager.native.js.map +1 -0
  9. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  10. package/build/commonjs/ViewPager/{ChildrenMemoizedPage.js → components/ChildrenMemoizedPage.js} +6 -4
  11. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  12. package/build/commonjs/ViewPager/components/FluxStoreProvider.js +37 -0
  13. package/build/commonjs/ViewPager/components/FluxStoreProvider.js.map +1 -0
  14. package/build/commonjs/ViewPager/components/index.js +24 -0
  15. package/build/commonjs/ViewPager/components/index.js.map +1 -0
  16. package/build/commonjs/ViewPager/hooks/index.js +56 -0
  17. package/build/commonjs/ViewPager/hooks/index.js.map +1 -0
  18. package/build/commonjs/ViewPager/hooks/useDispatch.js +22 -0
  19. package/build/commonjs/ViewPager/hooks/useDispatch.js.map +1 -0
  20. package/build/commonjs/ViewPager/hooks/useForceRender.js +16 -0
  21. package/build/commonjs/ViewPager/hooks/useForceRender.js.map +1 -0
  22. package/build/commonjs/ViewPager/hooks/useLazyState.js +45 -0
  23. package/build/commonjs/ViewPager/hooks/useLazyState.js.map +1 -0
  24. package/build/commonjs/ViewPager/{usePageStore.js → hooks/usePageStore.js} +0 -0
  25. package/build/commonjs/ViewPager/{usePageStore.js.map → hooks/usePageStore.js.map} +0 -0
  26. package/build/commonjs/ViewPager/hooks/useStore.js +26 -0
  27. package/build/commonjs/ViewPager/hooks/useStore.js.map +1 -0
  28. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js +19 -0
  29. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  30. package/build/commonjs/ViewPager/index.js +30 -4
  31. package/build/commonjs/ViewPager/index.js.map +1 -1
  32. package/build/commonjs/ViewPager/types.js +0 -4
  33. package/build/commonjs/ViewPager/types.js.map +1 -1
  34. package/build/commonjs/ViewPager/utils.js +5 -8
  35. package/build/commonjs/ViewPager/utils.js.map +1 -1
  36. package/build/module/ViewPager/FluxContext.js +4 -0
  37. package/build/module/ViewPager/FluxContext.js.map +1 -0
  38. package/build/module/ViewPager/PageStateContext.js +1 -4
  39. package/build/module/ViewPager/PageStateContext.js.map +1 -1
  40. package/build/module/ViewPager/{ViewPagerWeb.js → ViewPager.js} +10 -10
  41. package/build/module/ViewPager/ViewPager.js.map +1 -0
  42. package/build/module/ViewPager/{ViewPagerNative.js → ViewPager.native.js} +10 -10
  43. package/build/module/ViewPager/ViewPager.native.js.map +1 -0
  44. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  45. package/build/module/ViewPager/{ChildrenMemoizedPage.js → components/ChildrenMemoizedPage.js} +6 -5
  46. package/build/module/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  47. package/build/module/ViewPager/components/FluxStoreProvider.js +20 -0
  48. package/build/module/ViewPager/components/FluxStoreProvider.js.map +1 -0
  49. package/build/module/ViewPager/components/index.js +3 -0
  50. package/build/module/ViewPager/components/index.js.map +1 -0
  51. package/build/module/ViewPager/hooks/index.js +7 -0
  52. package/build/module/ViewPager/hooks/index.js.map +1 -0
  53. package/build/module/ViewPager/hooks/useDispatch.js +10 -0
  54. package/build/module/ViewPager/hooks/useDispatch.js.map +1 -0
  55. package/build/module/ViewPager/hooks/useForceRender.js +7 -0
  56. package/build/module/ViewPager/hooks/useForceRender.js.map +1 -0
  57. package/build/module/ViewPager/hooks/useLazyState.js +30 -0
  58. package/build/module/ViewPager/hooks/useLazyState.js.map +1 -0
  59. package/build/module/ViewPager/{usePageStore.js → hooks/usePageStore.js} +0 -0
  60. package/build/module/ViewPager/{usePageStore.js.map → hooks/usePageStore.js.map} +0 -0
  61. package/build/module/ViewPager/hooks/useStore.js +14 -0
  62. package/build/module/ViewPager/hooks/useStore.js.map +1 -0
  63. package/build/module/ViewPager/hooks/useViewPagerPageState.js +7 -0
  64. package/build/module/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  65. package/build/module/ViewPager/index.js +3 -2
  66. package/build/module/ViewPager/index.js.map +1 -1
  67. package/build/module/ViewPager/types.js +1 -1
  68. package/build/module/ViewPager/types.js.map +1 -1
  69. package/build/module/ViewPager/utils.js +1 -2
  70. package/build/module/ViewPager/utils.js.map +1 -1
  71. package/build/typescript/ViewPager/FluxContext.d.ts +5 -0
  72. package/build/typescript/ViewPager/PageStateContext.d.ts +1 -2
  73. package/build/typescript/ViewPager/{ViewPagerNative.d.ts → ViewPager.d.ts} +1 -1
  74. package/build/typescript/ViewPager/{ViewPagerWeb.d.ts → ViewPager.native.d.ts} +1 -1
  75. package/build/typescript/ViewPager/ViewPagerProps.d.ts +1 -6
  76. package/build/typescript/ViewPager/components/ChildrenMemoizedPage.d.ts +14 -0
  77. package/build/typescript/ViewPager/components/FluxStoreProvider.d.ts +6 -0
  78. package/build/typescript/ViewPager/components/index.d.ts +2 -0
  79. package/build/typescript/ViewPager/hooks/index.d.ts +6 -0
  80. package/build/typescript/ViewPager/hooks/useDispatch.d.ts +1 -0
  81. package/build/typescript/ViewPager/hooks/useForceRender.d.ts +2 -0
  82. package/build/typescript/ViewPager/hooks/useLazyState.d.ts +2 -0
  83. package/build/typescript/ViewPager/{usePageStore.d.ts → hooks/usePageStore.d.ts} +0 -0
  84. package/build/typescript/ViewPager/hooks/useStore.d.ts +2 -0
  85. package/build/typescript/ViewPager/hooks/useViewPagerPageState.d.ts +1 -0
  86. package/build/typescript/ViewPager/index.d.ts +3 -2
  87. package/build/typescript/ViewPager/types.d.ts +3 -10
  88. package/build/typescript/ViewPager/utils.d.ts +2 -2
  89. package/package.json +2 -2
  90. package/src/ViewPager/FluxContext.ts +8 -0
  91. package/src/ViewPager/PageStateContext.ts +2 -6
  92. package/src/ViewPager/{ViewPagerNative.tsx → ViewPager.native.tsx} +7 -7
  93. package/src/ViewPager/{ViewPagerWeb.tsx → ViewPager.tsx} +7 -7
  94. package/src/ViewPager/ViewPagerProps.ts +1 -7
  95. package/src/ViewPager/{ChildrenMemoizedPage.tsx → components/ChildrenMemoizedPage.tsx} +17 -6
  96. package/src/ViewPager/components/FluxStoreProvider.tsx +27 -0
  97. package/src/ViewPager/components/index.ts +2 -0
  98. package/src/ViewPager/hooks/index.ts +6 -0
  99. package/src/ViewPager/hooks/useDispatch.ts +11 -0
  100. package/src/ViewPager/hooks/useForceRender.ts +7 -0
  101. package/src/ViewPager/hooks/useLazyState.ts +32 -0
  102. package/src/ViewPager/{usePageStore.ts → hooks/usePageStore.ts} +0 -0
  103. package/src/ViewPager/hooks/useStore.ts +15 -0
  104. package/src/ViewPager/hooks/useViewPagerPageState.ts +6 -0
  105. package/src/ViewPager/index.ts +3 -2
  106. package/src/ViewPager/types.ts +4 -13
  107. package/src/ViewPager/utils.tsx +2 -3
  108. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  109. package/build/commonjs/ViewPager/ViewPagerNative.js.map +0 -1
  110. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +0 -1
  111. package/build/commonjs/ViewPager/index.native.js +0 -24
  112. package/build/commonjs/ViewPager/index.native.js.map +0 -1
  113. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  114. package/build/module/ViewPager/ViewPagerNative.js.map +0 -1
  115. package/build/module/ViewPager/ViewPagerWeb.js.map +0 -1
  116. package/build/module/ViewPager/index.native.js +0 -3
  117. package/build/module/ViewPager/index.native.js.map +0 -1
  118. package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +0 -5
  119. package/build/typescript/ViewPager/index.native.d.ts +0 -2
  120. package/src/ViewPager/index.native.ts +0 -2
@@ -1,15 +1,8 @@
1
- import type { ComponentType, PropsWithChildren } from 'react';
2
- import type { ViewProps } from 'react-native';
3
- export declare type PageProps = PropsWithChildren<ViewProps> & {
4
- index: number;
5
- initialPage: number;
6
- loading: Loading;
7
- offscreenPageRerenderLimit: number;
8
- rerenderKey?: any;
9
- };
10
1
  export declare type KeyboardDismissMode = 'none' | 'on-drag';
11
- export declare type PageComponent = ComponentType<PageProps>;
12
2
  export declare type Loading = 'lazy' | 'eager';
3
+ export interface EqualityFunction<State> {
4
+ (a: State, b: State): boolean;
5
+ }
13
6
  export interface ViewPagerInstance {
14
7
  /**
15
8
  * Function to scroll to a specific page in the ViewPager. Invalid index is ignored.
@@ -1,5 +1,5 @@
1
- import type { Loading, PageComponent } from './types';
1
+ import type { EqualityFunction, Loading } from './types';
2
2
  export declare const defaultInitialPage: number;
3
3
  export declare const defaultLoading: Loading;
4
4
  export declare const defaultOffscreenPageRerenderLimit: number;
5
- export declare const defaultPageComponent: PageComponent;
5
+ export declare const refEqual: EqualityFunction<any>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fountain-ui/lab",
3
- "version": "2.0.0-beta.18",
3
+ "version": "2.0.0-beta.21",
4
4
  "private": false,
5
5
  "author": "Fountain-UI Team",
6
6
  "description": "Incubator for Fountain-UI React components.",
@@ -70,5 +70,5 @@
70
70
  "publishConfig": {
71
71
  "access": "public"
72
72
  },
73
- "gitHead": "8ca13c00c2424b287a26c7cb62619c2c0a9596df"
73
+ "gitHead": "8b3569226ab4fc9c5812084f850461c9beffe496"
74
74
  }
@@ -0,0 +1,8 @@
1
+ import { createContext } from 'react';
2
+ import type { MonoStore } from '@fountain-ui/core';
3
+
4
+ export type FluxStore<S> = MonoStore<S>;
5
+
6
+ const FluxContext = createContext<FluxStore<any> | null>(null);
7
+
8
+ export default FluxContext;
@@ -1,6 +1,6 @@
1
- import { createContext, useContext } from 'react';
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;
@@ -1,11 +1,12 @@
1
- import React, { Children, forwardRef, useCallback, useEffect, useImperativeHandle, useRef } from 'react';
1
+ import React, { Children, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
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 { defaultInitialPage, defaultLoading, defaultOffscreenPageRerenderLimit, defaultPageComponent } from './utils';
8
- import usePageStore from './usePageStore';
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,
@@ -117,10 +117,10 @@ const ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPag
117
117
 
118
118
  const pageStore = usePageStore(sharedPage);
119
119
 
120
- const PageComponent = pageComponent;
120
+ const contextValue = useMemo(() => ({ pageStore }), [pageStore]);
121
121
 
122
122
  return (
123
- <InternalContext.Provider value={{ pageStore }}>
123
+ <InternalContext.Provider value={contextValue}>
124
124
  <RNViewPager
125
125
  ref={pagerRef}
126
126
  initialPage={sharedPage.initialValue}
@@ -131,7 +131,7 @@ const ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPag
131
131
  style={style}
132
132
  >
133
133
  {Children.map(children, (child, index) => (
134
- <PageComponent
134
+ <ChildrenMemoizedPage
135
135
  key={index}
136
136
  children={child}
137
137
  index={index}
@@ -1,10 +1,11 @@
1
- import React, { Children, forwardRef, useCallback, useImperativeHandle } from 'react';
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, defaultPageComponent } from './utils';
7
- import usePageStore from './usePageStore';
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,
@@ -42,13 +42,13 @@ const ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPag
42
42
 
43
43
  const pageStore = usePageStore(sharedPage);
44
44
 
45
- const PageComponent = pageComponent;
45
+ const contextValue = useMemo(() => ({ pageStore }), [pageStore]);
46
46
 
47
47
  return (
48
- <InternalContext.Provider value={{ pageStore }}>
48
+ <InternalContext.Provider value={contextValue}>
49
49
  <View style={[styles.root, style]}>
50
50
  {Children.map(children, (child, index) => (
51
- <PageComponent
51
+ <ChildrenMemoizedPage
52
52
  key={index}
53
53
  children={child}
54
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, PageComponent, ViewPagerInstance } from './types';
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 React, { memo, useCallback, useContext, useEffect, useMemo, useReducer, useRef, useState } from 'react';
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 { PageProps } from './types';
5
- import PageStateContext from './PageStateContext';
6
- import InternalContext from './InternalContext';
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 [, forceRender] = useReducer((s) => s + 1, 0);
70
+ const forceRender = useForceRender();
60
71
 
61
72
  const { active, loaded } = pageStateRef.current;
62
73
 
@@ -109,5 +120,5 @@ export default memo(Page, (prevProps, nextProps) => {
109
120
  return false;
110
121
  }
111
122
 
112
- return prevProps.index !== nextProps.index;
123
+ return prevProps.index === nextProps.index;
113
124
  });
@@ -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,2 @@
1
+ export { default as ChildrenMemoizedPage } from './ChildrenMemoizedPage';
2
+ export { default as FluxStoreProvider } from './FluxStoreProvider';
@@ -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,11 @@
1
+ import { useCallback } from 'react';
2
+ import useStore from './useStore';
3
+
4
+
5
+ export default function useDispatch<State>() {
6
+ const store = useStore<State>();
7
+
8
+ return useCallback((newState: State) => {
9
+ store.dispatch(newState);
10
+ }, [store]);
11
+ };
@@ -0,0 +1,7 @@
1
+ import { useReducer } from 'react';
2
+
3
+ export default function useForceRender() {
4
+ const [, forceRender] = useReducer((s) => s + 1, 0);
5
+
6
+ return forceRender;
7
+ };
@@ -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
+ };
@@ -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
+ };
@@ -0,0 +1,6 @@
1
+ import { useContext } from 'react';
2
+ import PageStateContext from '../PageStateContext';
3
+
4
+ export default function useViewPagerPageState() {
5
+ return useContext(PageStateContext);
6
+ };
@@ -1,4 +1,5 @@
1
- export { default } from './ViewPagerWeb';
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 './PageStateContext';
4
+ export { useViewPagerPageState, useDispatch as useFluxDispatch, useLazyState, useStore as useFluxStore } from './hooks';
5
+ export { FluxStoreProvider } from './components';
@@ -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.
@@ -1,5 +1,4 @@
1
- import ChildrenMemoizedPage from './ChildrenMemoizedPage';
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 defaultPageComponent: PageComponent = ChildrenMemoizedPage;
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","PageComponent","Children","map","child","index"],"sources":["ViewPagerNative.tsx"],"sourcesContent":["import React, { Children, forwardRef, useCallback, useEffect, useImperativeHandle, 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 PageComponent = pageComponent;\n\n return (\n <InternalContext.Provider value={{ pageStore }}>\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":";;;;;;;AAAA;;AAEA;;AACA;;AAGA;;AACA;;AACA;;;;;;;;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,0BAA0B,GAAGC,wCAL3B;IAMFC,QANE;IAOFC,aAAa,GAAGC,2BAPd;IAQFC,oBARE;IASFC,aAAa,GAAG,IATd;IAUFC,KAVE;IAWFC;EAXE,IAYFhB,KAZJ;EAcA,MAAMiB,kBAAkB,GAAG,IAAAC,0BAAA,EAAqB;IAAEC,YAAY,EAAEhB;EAAhB,CAArB,CAA3B;EAEA,MAAMiB,UAAU,GAAGJ,mBAAmB,IAAIC,kBAA1C;EAEA,MAAMI,OAAO,GAAG,IAAAC,aAAA,EAAeF,UAAU,CAACD,YAA1B,CAAhB;EAEA,MAAMI,cAAc,GAAG,IAAAD,aAAA,EAAeE,GAAf,CAAvB;EAEA,MAAMC,QAAQ,GAAG,IAAAH,aAAA,EAA2B,IAA3B,CAAjB;EAEA,MAAMI,iBAAiB,GAAG,IAAAJ,aAAA,EAAeE,GAAf,CAA1B;EAEA,MAAMG,OAAO,GAAG,IAAAC,kBAAA,EAAaC,OAAD,IAAqB;IAC7C,IAAI,CAACC,MAAM,CAACC,SAAP,CAAiBF,OAAjB,CAAL,EAAgC;MAC5B;IACH;;IAEDH,iBAAiB,CAACM,OAAlB,GAA4BC,qBAAqB,CAAC,MAAM;MAAA;;MACpD,IAAIH,MAAM,CAACI,QAAP,CAAgBX,cAAc,CAACS,OAA/B,CAAJ,EAA6C;QACzC,IAAIX,OAAO,CAACW,OAAR,KAAoBT,cAAc,CAACS,OAAvC,EAAgD;UAC5C;UACAT,cAAc,CAACS,OAAf,GAAyBR,GAAzB;UACA;QACH;;QAED,IAAIK,OAAO,KAAKN,cAAc,CAACS,OAA/B,EAAwC;UACpC;QACH;MACJ;;MAEDT,cAAc,CAACS,OAAf,GAAyBH,OAAzB;MACA,qBAAAJ,QAAQ,CAACO,OAAT,wEAAkBL,OAAlB,CAA0BE,OAA1B;IACH,CAfgD,CAAjD;EAgBH,CArBe,EAqBb,EArBa,CAAhB;EAuBA,IAAAM,gBAAA,EAAU,MAAM;IACZ,OAAO,MAAM;MACT,IAAIT,iBAAiB,CAACM,OAAtB,EAA+B;QAC3BI,oBAAoB,CAACV,iBAAiB,CAACM,OAAnB,CAApB;MACH;IACJ,CAJD;EAKH,CAND,EAMG,EANH;EAQA,IAAAG,gBAAA,EAAU,MAAM;IACZ,MAAME,aAAa,GAAGjB,UAAU,CAACiB,aAAjC;IACA,MAAMC,EAAE,GAAGD,aAAa,CAACE,WAAd,CAA0BC,QAAQ,IAAI;MAC7C,MAAMX,OAAO,GAAGW,QAAQ,CAACC,KAAzB;MACApB,OAAO,CAACW,OAAR,GAAkBH,OAAlB;MACAF,OAAO,CAACE,OAAD,CAAP;IACH,CAJU,CAAX;IAMA,OAAO,MAAM;MACTQ,aAAa,CAACK,cAAd,CAA6BJ,EAA7B;IACH,CAFD;EAGH,CAXD,EAWG,CAAClB,UAAD,EAAaO,OAAb,CAXH;EAaA,MAAMgB,kBAAkB,GAAG,IAAAf,kBAAA,EAAagB,CAAD,IAAqC;IACxE,IAAId,MAAM,CAACI,QAAP,CAAgBX,cAAc,CAACS,OAA/B,CAAJ,EAA6C;MACzC;MACA;MACA;MACA;MACA;MAEA,MAAMa,WAAW,GAAGtB,cAAc,CAACS,OAAnC;;MAEA,IAAIX,OAAO,CAACW,OAAR,KAAoBa,WAAxB,EAAqC;QACjC;QACAtB,cAAc,CAACS,OAAf,GAAyBR,GAAzB;MACH,CAHD,MAGO;QACHJ,UAAU,CAACiB,aAAX,CAAyBS,QAAzB,CAAkCD,WAAlC;MACH;;MAEDnC,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAGmC,WAAH,CAAR;IACH,CAjBD,MAiBO;MACH,MAAME,gBAAgB,GAAGH,CAAC,CAACI,WAAF,CAAcC,QAAvC;;MAEA,IAAIF,gBAAgB,KAAK1B,OAAO,CAACW,OAAjC,EAA0C;QACtCT,cAAc,CAACS,OAAf,GAAyBe,gBAAzB;QACA3B,UAAU,CAACiB,aAAX,CAAyBS,QAAzB,CAAkCC,gBAAlC;QAEArC,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAGqC,gBAAH,CAAR;MACH;IACJ;EACJ,CA5B0B,EA4BxB,CAACrC,QAAD,EAAWU,UAAX,CA5BwB,CAA3B;EA8BA,IAAA8B,0BAAA,EACIjD,GADJ,EAEI,OAAO;IAAE0B;EAAF,CAAP,CAFJ,EAGI,CAACA,OAAD,CAHJ;EAMA,MAAMwB,SAAS,GAAG,IAAAC,qBAAA,EAAahC,UAAb,CAAlB;EAEA,MAAMiC,aAAa,GAAG1C,aAAtB;EAEA,oBACI,6BAAC,wBAAD,CAAiB,QAAjB;IAA0B,KAAK,EAAE;MAAEwC;IAAF;EAAjC,gBACI,6BAAC,6BAAD;IACI,GAAG,EAAE1B,QADT;IAEI,WAAW,EAAEL,UAAU,CAACD,YAF5B;IAGI,mBAAmB,EAAEd,mBAHzB;IAII,cAAc,EAAEsC,kBAJpB;IAKI,UAAU,EAAE,CALhB;IAMI,aAAa,EAAE7B,aANnB;IAOI,KAAK,EAAEC;EAPX,GASKuC,eAAA,CAASC,GAAT,CAAarD,QAAb,EAAuB,CAACsD,KAAD,EAAQC,KAAR,kBACpB,6BAAC,aAAD;IACI,GAAG,EAAEA,KADT;IAEI,QAAQ,EAAED,KAFd;IAGI,KAAK,EAAEC,KAHX;IAII,WAAW,EAAErC,UAAU,CAACD,YAJ5B;IAKI,OAAO,EAAEb,OALb;IAMI,0BAA0B,EAAEE,0BANhC;IAOI,WAAW,EAAEK;EAPjB,EADH,CATL,CADJ,CADJ;AAyBH,CAxIiB,CAAlB;eA0Ief,S"}
@@ -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","PageComponent","Children","map","child","index"],"sources":["ViewPagerWeb.tsx"],"sourcesContent":["import React, { Children, forwardRef, useCallback, useImperativeHandle } 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 PageComponent = pageComponent;\n\n return (\n <InternalContext.Provider value={{ pageStore }}>\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,aAAa,GAAGjB,aAAtB;EAEA,oBACI,6BAAC,wBAAD,CAAiB,QAAjB;IAA0B,KAAK,EAAE;MAAEe;IAAF;EAAjC,gBACI,6BAAC,iBAAD;IAAM,KAAK,EAAE,CAAC9B,MAAM,CAACG,IAAR,EAAce,KAAd;EAAb,GACKe,eAAA,CAASC,GAAT,CAAaxB,QAAb,EAAuB,CAACyB,KAAD,EAAQC,KAAR,kBACpB,6BAAC,aAAD;IACI,GAAG,EAAEA,KADT;IAEI,QAAQ,EAAED,KAFd;IAGI,KAAK,EAAEC,KAHX;IAII,WAAW,EAAEb,UAAU,CAACD,YAJ5B;IAKI,OAAO,EAAET,OALb;IAMI,0BAA0B,EAAE,CANhC,CAMmC;IANnC;IAOI,WAAW,EAAEI;EAPjB,EADH,CADL,CADJ,CADJ;AAiBH,CA9CiB,CAAlB;eAgDeX,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":"AAAA,OAAOA,KAAP,IAAgBC,IAAhB,EAAsBC,WAAtB,EAAmCC,UAAnC,EAA+CC,SAA/C,EAA0DC,OAA1D,EAAmEC,UAAnE,EAA+EC,MAA/E,EAAuFC,QAAvF,QAAuG,OAAvG;AACA,SAASC,QAAT,EAAmBC,IAAnB,QAA+B,cAA/B;AACA,SAASC,UAAT,QAA2B,mBAA3B;AAEA,OAAOC,gBAAP,MAA6B,oBAA7B;AACA,OAAOC,eAAP,MAA4B,mBAA5B;AAEA,MAAMC,MAAM,GAAGH,UAAU,CAACI,MAAX,CAAkB;EAC7BC,IAAI,EAAE;IAAEC,KAAK,EAAE,MAAT;IAAiBC,MAAM,EAAE;EAAzB,CADuB;EAE7BC,IAAI,EAAE;IAAEC,OAAO,EAAE;EAAX;AAFuB,CAAlB,CAAf;;AAeA,SAASC,IAAT,CAAcC,KAAd,EAAgC;EAC5B,MAAM;IACFC,KADE;IAEFC,WAFE;IAGFC,QAHE;IAIFC,OAJE;IAKFC;EALE,IAMFL,KANJ;EAQA,MAAM;IAAEM;EAAF,IAAgBzB,UAAU,CAACU,eAAD,CAAhC;EAEA,MAAMgB,sBAAiE,GAAG3B,WAAW,CAAE4B,IAAD,IAAkB;IACpG,MAAMC,WAAW,GAAGD,IAApB;IAEA,MAAME,QAAQ,GAAGT,KAAK,KAAKQ,WAA3B;IAEA,MAAME,cAAc,GAAGV,KAAK,IAAIQ,WAAW,GAAGJ,0BAAvB,IAChBJ,KAAK,IAAIQ,WAAW,GAAGJ,0BAD9B;IAGA,MAAMO,cAAc,GAAGD,cAAc,IAAI,CAACD,QAA1C;IAEA,OAAO;MAAEA,QAAF;MAAYE;IAAZ,CAAP;EACH,CAXoF,EAWlF,CAACX,KAAD,CAXkF,CAArF;EAaA,MAAM,CAACY,YAAD,IAAiB3B,QAAQ,CAAoB,MAAM;IACrD,MAAM;MAAEwB,QAAF;MAAYE;IAAZ,IAA+BL,sBAAsB,CAACL,WAAD,CAA3D;;IAEA,IAAIE,OAAO,KAAK,OAAhB,EAAyB;MACrB,OAAO;QAAEU,MAAM,EAAEJ,QAAV;QAAoBK,MAAM,EAAE;MAA5B,CAAP;IACH;;IAED,OAAO;MAAED,MAAM,EAAEJ,QAAV;MAAoBK,MAAM,EAAEL,QAAQ,IAAIE;IAAxC,CAAP;EACH,CAR8B,CAA/B,CAxB4B,CAkC5B;;EACA,MAAMI,YAAY,GAAG/B,MAAM,CAAoB4B,YAApB,CAA3B;EACA,MAAM,GAAGI,WAAH,IAAkBjC,UAAU,CAAEkC,CAAD,IAAOA,CAAC,GAAG,CAAZ,EAAe,CAAf,CAAlC;EAEA,MAAM;IAAEJ,MAAF;IAAUC;EAAV,IAAqBC,YAAY,CAACG,OAAxC;EAEA,MAAMC,OAAO,GAAGL,MAAM,GAAGZ,QAAH,GAAc,IAApC;EAEArB,SAAS,CAAC,MAAM;IACZ,OAAOwB,SAAS,CAACe,SAAV,CAAoBC,OAAO,IAAI;MAClC,MAAM;QAAEZ,QAAF;QAAYE;MAAZ,IAA+BL,sBAAsB,CAACe,OAAD,CAA3D;MAEA,MAAMC,YAAY,GAAGP,YAAY,CAACG,OAAlC;MAEA,MAAMK,QAA2B,GAAG;QAChCV,MAAM,EAAEJ,QADwB;QAEhCK,MAAM,EAAEL,QAAQ,IAAIE,cAAZ,GAA6B,IAA7B,GAAoCW,YAAY,CAACR;MAFzB,CAApC;;MAKA,IACIQ,YAAY,CAACT,MAAb,KAAwBU,QAAQ,CAACV,MAAjC,IACGS,YAAY,CAACR,MAAb,KAAwBS,QAAQ,CAACT,MAFxC,EAGE;QACEC,YAAY,CAACG,OAAb,GAAuBK,QAAvB;QAEAP,WAAW;MACd;IACJ,CAlBM,CAAP;EAmBH,CApBQ,EAoBN,CAACX,SAAD,EAAYC,sBAAZ,CApBM,CAAT;EAsBA,MAAMkB,YAAY,GAAG1C,OAAO,CAAC,OAAO;IAChC2B,QAAQ,EAAEI;EADsB,CAAP,CAAD,EAExB,CAACA,MAAD,CAFwB,CAA5B;EAIA,MAAMY,KAAK,GAAGvC,QAAQ,CAACwC,EAAT,KAAgB,KAAhB,GACPb,MAAM,GAAGzB,UAAU,CAACuC,YAAd,GAA6BpC,MAAM,CAACK,IADnC,GAERL,MAAM,CAACE,IAFb;EAIA,oBACI,oBAAC,IAAD;IACI,WAAW,EAAE,KADjB;IAEI,KAAK,EAAEgC;EAFX,gBAII,oBAAC,gBAAD,CAAkB,QAAlB;IAA2B,KAAK,EAAED;EAAlC,GACKL,OADL,CAJJ,CADJ;AAUH;;AAED,4BAAezC,IAAI,CAACoB,IAAD,EAAO,CAAC8B,SAAD,EAAYC,SAAZ,KAA0B;EAChD,IAAID,SAAS,CAACE,WAAV,KAA0BD,SAAS,CAACC,WAAxC,EAAqD;IACjD,OAAO,KAAP;EACH;;EAED,OAAOF,SAAS,CAAC5B,KAAV,KAAoB6B,SAAS,CAAC7B,KAArC;AACH,CANkB,CAAnB"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","Children","forwardRef","useCallback","useEffect","useImperativeHandle","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","PageComponent","map","child","index"],"sources":["ViewPagerNative.tsx"],"sourcesContent":["import React, { Children, forwardRef, useCallback, useEffect, useImperativeHandle, 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 PageComponent = pageComponent;\n\n return (\n <InternalContext.Provider value={{ pageStore }}>\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","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","PageComponent","map","child","index"],"sources":["ViewPagerWeb.tsx"],"sourcesContent":["import React, { Children, forwardRef, useCallback, useImperativeHandle } 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 PageComponent = pageComponent;\n\n return (\n <InternalContext.Provider value={{ pageStore }}>\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,QAA8E,OAA9E;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,gBAAGhB,UAAU,CAAoC,SAASgB,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,GAAG5B,WAAW,CAAE6B,OAAD,IAAqB;IAC7CF,UAAU,CAACG,aAAX,CAAyBC,QAAzB,CAAkCF,OAAlC;EACH,CAF0B,EAExB,CAACF,UAAD,CAFwB,CAA3B;EAIA1B,mBAAmB,CACfgB,GADe,EAEf,OAAO;IAAEW;EAAF,CAAP,CAFe,EAGf,CAACA,OAAD,CAHe,CAAnB;EAMA,MAAMI,SAAS,GAAGxB,YAAY,CAACmB,UAAD,CAA9B;EAEA,MAAMM,aAAa,GAAGZ,aAAtB;EAEA,oBACI,oBAAC,eAAD,CAAiB,QAAjB;IAA0B,KAAK,EAAE;MAAEW;IAAF;EAAjC,gBACI,oBAAC,IAAD;IAAM,KAAK,EAAE,CAACtB,MAAM,CAACE,IAAR,EAAcW,KAAd;EAAb,GACKzB,QAAQ,CAACoC,GAAT,CAAahB,QAAb,EAAuB,CAACiB,KAAD,EAAQC,KAAR,kBACpB,oBAAC,aAAD;IACI,GAAG,EAAEA,KADT;IAEI,QAAQ,EAAED,KAFd;IAGI,KAAK,EAAEC,KAHX;IAII,WAAW,EAAET,UAAU,CAACD,YAJ5B;IAKI,OAAO,EAAEN,OALb;IAMI,0BAA0B,EAAE,CANhC,CAMmC;IANnC;IAOI,WAAW,EAAEE;EAPjB,EADH,CADL,CADJ,CADJ;AAiBH,CA9C2B,CAA5B;AAgDA,eAAeP,SAAf"}
@@ -1,3 +0,0 @@
1
- export { default } from './ViewPagerNative';
2
- export { useViewPagerPageState } from './PageStateContext';
3
- //# sourceMappingURL=index.native.js.map
@@ -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"}
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- import type { PageProps } from './types';
3
- declare function Page(props: PageProps): JSX.Element;
4
- declare const _default: React.MemoExoticComponent<typeof Page>;
5
- export default _default;
@@ -1,2 +0,0 @@
1
- export { default } from './ViewPagerNative';
2
- export { useViewPagerPageState } from './PageStateContext';
@@ -1,2 +0,0 @@
1
- export { default } from './ViewPagerNative';
2
- export { useViewPagerPageState } from './PageStateContext';