@fountain-ui/lab 2.0.0-beta.23 → 2.0.0-beta.25
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/ViewPager.native.js +1 -1
- package/build/commonjs/ViewPager/ViewPager.native.js.map +1 -1
- package/build/module/ViewPager/ViewPager.native.js +1 -1
- package/build/module/ViewPager/ViewPager.native.js.map +1 -1
- package/package.json +3 -3
- package/src/ViewPager/ViewPager.native.tsx +1 -1
|
@@ -50,7 +50,7 @@ const ViewPager = /*#__PURE__*/(0, _react.forwardRef)(function ViewPager(props,
|
|
|
50
50
|
const numberOfPages = _react.Children.count(children);
|
|
51
51
|
|
|
52
52
|
const setPage = (0, _react.useCallback)(newPage => {
|
|
53
|
-
if ((0, _utils.isValidPage)(newPage, numberOfPages)) {
|
|
53
|
+
if (!(0, _utils.isValidPage)(newPage, numberOfPages)) {
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ViewPager","forwardRef","props","ref","children","initialPage","defaultInitialPage","keyboardDismissMode","loading","defaultLoading","offscreenPageRerenderLimit","defaultOffscreenPageRerenderLimit","onChange","pageForceRerenderKey","scrollEnabled","style","UNSTABLE_sharedPage","fallbackSharedPage","useSyncAnimatedValue","initialValue","sharedPage","pageRef","useRef","desiredPageRef","NaN","pagerRef","animationFrameRef","numberOfPages","Children","count","setPage","useCallback","newPage","isValidPage","current","requestAnimationFrame","Number","isFinite","useEffect","cancelAnimationFrame","animatedValue","id","addListener","newValue","value","removeListener","handlePageSelected","e","desiredPage","setValue","trustfulNextPage","nativeEvent","position","useImperativeHandle","pageStore","usePageStore","contextValue","useMemo","map","child","index"],"sources":["ViewPager.native.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 { ChildrenMemoizedPage } from './components';\nimport type ViewPagerProps from './ViewPagerProps';\nimport type { ViewPagerInstance } from './types';\nimport { usePageStore } from './hooks';\nimport { defaultInitialPage, defaultLoading, defaultOffscreenPageRerenderLimit, isValidPage } from './utils';\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 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 numberOfPages = Children.count(children);\n const setPage = useCallback((newPage: number) => {\n if (isValidPage(newPage, numberOfPages)) {\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 }, [numberOfPages]);\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 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 <ChildrenMemoizedPage\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;;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,oBAPE;IAQFC,aAAa,GAAG,IARd;IASFC,KATE;IAUFC;EAVE,IAWFd,KAXJ;EAaA,MAAMe,kBAAkB,GAAG,IAAAC,0BAAA,EAAqB;IAAEC,YAAY,EAAEd;EAAhB,CAArB,CAA3B;EAEA,MAAMe,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,aAAa,GAAGC,eAAA,CAASC,KAAT,CAAezB,QAAf,CAAtB;;EACA,MAAM0B,OAAO,GAAG,IAAAC,kBAAA,EAAaC,OAAD,IAAqB;IAC7C,IAAI,IAAAC,kBAAA,EAAYD,OAAZ,EAAqBL,aAArB,
|
|
1
|
+
{"version":3,"names":["ViewPager","forwardRef","props","ref","children","initialPage","defaultInitialPage","keyboardDismissMode","loading","defaultLoading","offscreenPageRerenderLimit","defaultOffscreenPageRerenderLimit","onChange","pageForceRerenderKey","scrollEnabled","style","UNSTABLE_sharedPage","fallbackSharedPage","useSyncAnimatedValue","initialValue","sharedPage","pageRef","useRef","desiredPageRef","NaN","pagerRef","animationFrameRef","numberOfPages","Children","count","setPage","useCallback","newPage","isValidPage","current","requestAnimationFrame","Number","isFinite","useEffect","cancelAnimationFrame","animatedValue","id","addListener","newValue","value","removeListener","handlePageSelected","e","desiredPage","setValue","trustfulNextPage","nativeEvent","position","useImperativeHandle","pageStore","usePageStore","contextValue","useMemo","map","child","index"],"sources":["ViewPager.native.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 { ChildrenMemoizedPage } from './components';\nimport type ViewPagerProps from './ViewPagerProps';\nimport type { ViewPagerInstance } from './types';\nimport { usePageStore } from './hooks';\nimport { defaultInitialPage, defaultLoading, defaultOffscreenPageRerenderLimit, isValidPage } from './utils';\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 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 numberOfPages = Children.count(children);\n const setPage = useCallback((newPage: number) => {\n if (!isValidPage(newPage, numberOfPages)) {\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 }, [numberOfPages]);\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 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 <ChildrenMemoizedPage\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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"}
|
|
@@ -28,7 +28,7 @@ const ViewPager = /*#__PURE__*/forwardRef(function ViewPager(props, ref) {
|
|
|
28
28
|
const animationFrameRef = useRef(NaN);
|
|
29
29
|
const numberOfPages = Children.count(children);
|
|
30
30
|
const setPage = useCallback(newPage => {
|
|
31
|
-
if (isValidPage(newPage, numberOfPages)) {
|
|
31
|
+
if (!isValidPage(newPage, numberOfPages)) {
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Children","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","RNViewPager","useSyncAnimatedValue","ChildrenMemoizedPage","usePageStore","defaultInitialPage","defaultLoading","defaultOffscreenPageRerenderLimit","isValidPage","InternalContext","ViewPager","props","ref","children","initialPage","keyboardDismissMode","loading","offscreenPageRerenderLimit","onChange","pageForceRerenderKey","scrollEnabled","style","UNSTABLE_sharedPage","fallbackSharedPage","initialValue","sharedPage","pageRef","desiredPageRef","NaN","pagerRef","animationFrameRef","numberOfPages","count","setPage","newPage","current","requestAnimationFrame","Number","isFinite","cancelAnimationFrame","animatedValue","id","addListener","newValue","value","removeListener","handlePageSelected","e","desiredPage","setValue","trustfulNextPage","nativeEvent","position","pageStore","contextValue","map","child","index"],"sources":["ViewPager.native.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 { ChildrenMemoizedPage } from './components';\nimport type ViewPagerProps from './ViewPagerProps';\nimport type { ViewPagerInstance } from './types';\nimport { usePageStore } from './hooks';\nimport { defaultInitialPage, defaultLoading, defaultOffscreenPageRerenderLimit, isValidPage } from './utils';\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 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 numberOfPages = Children.count(children);\n const setPage = useCallback((newPage: number) => {\n if (isValidPage(newPage, numberOfPages)) {\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 }, [numberOfPages]);\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 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 <ChildrenMemoizedPage\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,OAAOA,KAAP,IAAgBC,QAAhB,EAA0BC,UAA1B,EAAsCC,WAAtC,EAAmDC,SAAnD,EAA8DC,mBAA9D,EAAmFC,OAAnF,EAA4FC,MAA5F,QAA0G,OAA1G;AAEA,OAAOC,WAAP,MAAwB,yBAAxB;AACA,SAASC,oBAAT,QAAqC,mBAArC;AACA,SAASC,oBAAT,QAAqC,cAArC;AAGA,SAASC,YAAT,QAA6B,SAA7B;AACA,SAASC,kBAAT,EAA6BC,cAA7B,EAA6CC,iCAA7C,EAAgFC,WAAhF,QAAmG,SAAnG;AACA,OAAOC,eAAP,MAA4B,mBAA5B;AAEA,MAAMC,SAAS,gBAAGf,UAAU,CAAoC,SAASe,SAAT,CAAmBC,KAAnB,EAA0BC,GAA1B,EAA+B;EAC3F,MAAM;IACFC,QADE;IAEFC,WAAW,GAAGT,kBAFZ;IAGFU,mBAAmB,GAAG,SAHpB;IAIFC,OAAO,GAAGV,cAJR;IAKFW,0BAA0B,GAAGV,iCAL3B;IAMFW,QANE;IAOFC,oBAPE;IAQFC,aAAa,GAAG,IARd;IASFC,KATE;IAUFC;EAVE,IAWFX,KAXJ;EAaA,MAAMY,kBAAkB,GAAGrB,oBAAoB,CAAC;IAAEsB,YAAY,EAAEV;EAAhB,CAAD,CAA/C;EAEA,MAAMW,UAAU,GAAGH,mBAAmB,IAAIC,kBAA1C;EAEA,MAAMG,OAAO,GAAG1B,MAAM,CAASyB,UAAU,CAACD,YAApB,CAAtB;EAEA,MAAMG,cAAc,GAAG3B,MAAM,CAAS4B,GAAT,CAA7B;EAEA,MAAMC,QAAQ,GAAG7B,MAAM,CAAqB,IAArB,CAAvB;EAEA,MAAM8B,iBAAiB,GAAG9B,MAAM,CAAS4B,GAAT,CAAhC;EAEA,MAAMG,aAAa,GAAGrC,QAAQ,CAACsC,KAAT,CAAenB,QAAf,CAAtB;EACA,MAAMoB,OAAO,GAAGrC,WAAW,CAAEsC,OAAD,IAAqB;IAC7C,
|
|
1
|
+
{"version":3,"names":["React","Children","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","RNViewPager","useSyncAnimatedValue","ChildrenMemoizedPage","usePageStore","defaultInitialPage","defaultLoading","defaultOffscreenPageRerenderLimit","isValidPage","InternalContext","ViewPager","props","ref","children","initialPage","keyboardDismissMode","loading","offscreenPageRerenderLimit","onChange","pageForceRerenderKey","scrollEnabled","style","UNSTABLE_sharedPage","fallbackSharedPage","initialValue","sharedPage","pageRef","desiredPageRef","NaN","pagerRef","animationFrameRef","numberOfPages","count","setPage","newPage","current","requestAnimationFrame","Number","isFinite","cancelAnimationFrame","animatedValue","id","addListener","newValue","value","removeListener","handlePageSelected","e","desiredPage","setValue","trustfulNextPage","nativeEvent","position","pageStore","contextValue","map","child","index"],"sources":["ViewPager.native.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 { ChildrenMemoizedPage } from './components';\nimport type ViewPagerProps from './ViewPagerProps';\nimport type { ViewPagerInstance } from './types';\nimport { usePageStore } from './hooks';\nimport { defaultInitialPage, defaultLoading, defaultOffscreenPageRerenderLimit, isValidPage } from './utils';\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 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 numberOfPages = Children.count(children);\n const setPage = useCallback((newPage: number) => {\n if (!isValidPage(newPage, numberOfPages)) {\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 }, [numberOfPages]);\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 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 <ChildrenMemoizedPage\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fountain-ui/lab",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.25",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Fountain-UI Team",
|
|
6
6
|
"description": "Incubator for Fountain-UI React components.",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@emotion/react": "^11.10.0",
|
|
19
19
|
"@emotion/styled": "^11.10.0",
|
|
20
|
-
"@fountain-ui/icons": "^2.0.0-beta.
|
|
20
|
+
"@fountain-ui/icons": "^2.0.0-beta.7",
|
|
21
21
|
"@fountain-ui/utils": "^2.0.0-beta.4",
|
|
22
22
|
"react-native-calendars": "1.1267.0"
|
|
23
23
|
},
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"publishConfig": {
|
|
71
71
|
"access": "public"
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "440a7ba0e2448df424c7f0ed92ab35ab0fd26e94"
|
|
74
74
|
}
|
|
@@ -37,7 +37,7 @@ const ViewPager = forwardRef<ViewPagerInstance, ViewPagerProps>(function ViewPag
|
|
|
37
37
|
|
|
38
38
|
const numberOfPages = Children.count(children);
|
|
39
39
|
const setPage = useCallback((newPage: number) => {
|
|
40
|
-
if (isValidPage(newPage, numberOfPages)) {
|
|
40
|
+
if (!isValidPage(newPage, numberOfPages)) {
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
|