react-native-reanimated-carousel 3.1.4 → 3.1.5
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/lib/commonjs/Carousel.js +1 -1
- package/lib/commonjs/Carousel.js.map +1 -1
- package/lib/commonjs/ScrollViewGesture.js +1 -1
- package/lib/commonjs/ScrollViewGesture.js.map +1 -1
- package/lib/commonjs/hooks/useCarouselController.js +1 -1
- package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
- package/lib/commonjs/hooks/useInitProps.js +1 -1
- package/lib/commonjs/hooks/useInitProps.js.map +1 -1
- package/lib/commonjs/hooks/useOffsetX.js +1 -1
- package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
- package/lib/commonjs/hooks/useOnProgressChange.js +1 -1
- package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
- package/lib/commonjs/hooks/usePropsErrorBoundary.js +1 -1
- package/lib/commonjs/hooks/usePropsErrorBoundary.js.map +1 -1
- package/lib/commonjs/layouts/BaseLayout.js +1 -1
- package/lib/commonjs/layouts/BaseLayout.js.map +1 -1
- package/lib/commonjs/layouts/ParallaxLayout.js +1 -1
- package/lib/commonjs/layouts/ParallaxLayout.js.map +1 -1
- package/lib/module/Carousel.js +17 -10
- package/lib/module/Carousel.js.map +1 -1
- package/lib/module/ScrollViewGesture.js +3 -3
- package/lib/module/ScrollViewGesture.js.map +1 -1
- package/lib/module/hooks/useCarouselController.js +5 -5
- package/lib/module/hooks/useCarouselController.js.map +1 -1
- package/lib/module/hooks/useCommonVariables.js +6 -6
- package/lib/module/hooks/useCommonVariables.js.map +1 -1
- package/lib/module/hooks/useInitProps.js +10 -5
- package/lib/module/hooks/useInitProps.js.map +1 -1
- package/lib/module/hooks/useOffsetX.js +5 -4
- package/lib/module/hooks/useOffsetX.js.map +1 -1
- package/lib/module/hooks/useOnProgressChange.js +1 -2
- package/lib/module/hooks/useOnProgressChange.js.map +1 -1
- package/lib/module/hooks/usePropsErrorBoundary.js +1 -2
- package/lib/module/hooks/usePropsErrorBoundary.js.map +1 -1
- package/lib/module/layouts/BaseLayout.js +3 -3
- package/lib/module/layouts/BaseLayout.js.map +1 -1
- package/lib/module/layouts/ParallaxLayout.js +2 -2
- package/lib/module/layouts/ParallaxLayout.js.map +1 -1
- package/lib/typescript/hooks/useCarouselController.d.ts +1 -1
- package/lib/typescript/hooks/useInitProps.d.ts +2 -0
- package/lib/typescript/hooks/useOffsetX.d.ts +1 -1
- package/lib/typescript/hooks/useOnProgressChange.d.ts +1 -1
- package/lib/typescript/hooks/usePropsErrorBoundary.d.ts +3 -1
- package/lib/typescript/layouts/ParallaxLayout.d.ts +1 -1
- package/package.json +1 -1
- package/src/Carousel.tsx +15 -10
- package/src/ScrollViewGesture.tsx +2 -2
- package/src/hooks/useCarouselController.tsx +6 -6
- package/src/hooks/useCommonVariables.ts +6 -6
- package/src/hooks/useInitProps.ts +13 -4
- package/src/hooks/useOffsetX.ts +6 -5
- package/src/hooks/useOnProgressChange.ts +2 -4
- package/src/hooks/usePropsErrorBoundary.ts +2 -3
- package/src/layouts/BaseLayout.tsx +3 -3
- package/src/layouts/ParallaxLayout.tsx +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useOnProgressChange.ts"],"names":["useOnProgressChange","opts","autoFillData","loop","offsetX","
|
|
1
|
+
{"version":3,"sources":["useOnProgressChange.ts"],"names":["useOnProgressChange","opts","autoFillData","loop","offsetX","size","rawDataLength","onProgressChange","value","_value","Math","max","min","absoluteProgress","abs","computedOffsetXValueWithAutoFillData","runOnJS"],"mappings":"yGACA,8DAMA,2EAEO,QAASA,CAAAA,mBAAT,CACLC,IADK,CAQL,CACA,GAAQC,CAAAA,YAAR,CACQD,IADR,CAAQC,YAAR,CAAsBC,IAAtB,CACQF,IADR,CAAsBE,IAAtB,CAA4BC,OAA5B,CACQH,IADR,CAA4BG,OAA5B,CAAqCC,IAArC,CACQJ,IADR,CAAqCI,IAArC,CAA2CC,aAA3C,CACQL,IADR,CAA2CK,aAA3C,CAA0DC,gBAA1D,CACQN,IADR,CAA0DM,gBAA1D,CAGA,iEACE,oBAAMH,CAAAA,OAAO,CAACI,KAAd,EADF,sBApBKJ,OAoBL,0RAEGK,MAFH,CAEc,CACV,GAAID,CAAAA,KAAK,CAAG,mEAAqC,CAC/CA,KAAK,CAAEC,MADwC,CAE/CH,aAAa,CAAbA,aAF+C,CAG/CD,IAAI,CAAJA,IAH+C,CAI/CH,YAAY,CAAZA,YAJ+C,CAK/CC,IAAI,CAAJA,IAL+C,CAArC,CAAZ,CAQA,GAAI,CAACA,IAAL,CAAW,CACTK,KAAK,CAAGE,IAAI,CAACC,GAAL,CACN,EAAE,CAACL,aAAa,CAAG,CAAjB,EAAsBD,IAAxB,CADM,CAENK,IAAI,CAACE,GAAL,CAASJ,KAAT,CAAgB,CAAhB,CAFM,CAAR,CAID,CAED,GAAIK,CAAAA,gBAAgB,CAAGH,IAAI,CAACI,GAAL,CAASN,KAAK,CAAGH,IAAjB,CAAvB,CAEA,GAAIG,KAAK,CAAG,CAAZ,CACEK,gBAAgB,CAAGP,aAAa,CAAGO,gBAAnC,CAEF,GAAIN,gBAAJ,CACE,mCAAQA,gBAAR,EAA0BC,KAA1B,CAAiCK,gBAAjC,EACH,CAzBH,mDAnBYE,8DAmBZ,eANkCT,aAMlC,MAPwCD,IAOxC,cAfEH,YAeF,MAXKC,IAWL,kBAL8BI,gBAK9B,SALsBS,8BAKtB,ksBA0BE,CAACb,IAAD,CAAOD,YAAP,CAAqBI,aAArB,CAAoCC,gBAApC,CA1BF,EA4BD","sourcesContent":["import type Animated from \"react-native-reanimated\";\nimport {\n runOnJS,\n useAnimatedReaction,\n} from \"react-native-reanimated\";\n\nimport type { TCarouselProps } from \"../types\";\nimport { computedOffsetXValueWithAutoFillData } from \"../utils/computedWithAutoFillData\";\n\nexport function useOnProgressChange(\n opts: {\n size: number\n autoFillData: boolean\n loop: boolean\n offsetX: Animated.SharedValue<number>\n rawDataLength: number\n } & Pick<TCarouselProps, \"onProgressChange\">,\n) {\n const { autoFillData, loop, offsetX, size, rawDataLength, onProgressChange }\n = opts;\n\n useAnimatedReaction(\n () => offsetX.value,\n (_value) => {\n let value = computedOffsetXValueWithAutoFillData({\n value: _value,\n rawDataLength,\n size,\n autoFillData,\n loop,\n });\n\n if (!loop) {\n value = Math.max(\n -((rawDataLength - 1) * size),\n Math.min(value, 0),\n );\n }\n\n let absoluteProgress = Math.abs(value / size);\n\n if (value > 0)\n absoluteProgress = rawDataLength - absoluteProgress;\n\n if (onProgressChange)\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [loop, autoFillData, rawDataLength, onProgressChange],\n );\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.usePropsErrorBoundary=usePropsErrorBoundary;var _react=_interopRequireDefault(require("react"));function usePropsErrorBoundary(props){_react.default.useEffect(function(){var defaultIndex=props.defaultIndex,
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.usePropsErrorBoundary=usePropsErrorBoundary;var _react=_interopRequireDefault(require("react"));function usePropsErrorBoundary(props){_react.default.useEffect(function(){var defaultIndex=props.defaultIndex,viewCount=props.dataLength;if(typeof defaultIndex==="number"&&viewCount>0){if(defaultIndex<0||defaultIndex>=viewCount){throw new Error("DefaultIndex must be in the range of data length.");}}if(!props.mode||props.mode==="parallax"){if(!props.vertical&&!props.width){throw new Error("`width` must be specified for horizontal carousels.");}if(props.vertical&&!props.height){throw new Error("`height` must be specified for vertical carousels.");}}},[props]);}
|
|
2
2
|
//# sourceMappingURL=usePropsErrorBoundary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["usePropsErrorBoundary.ts"],"names":["usePropsErrorBoundary","props","React","useEffect","defaultIndex","
|
|
1
|
+
{"version":3,"sources":["usePropsErrorBoundary.ts"],"names":["usePropsErrorBoundary","props","React","useEffect","defaultIndex","viewCount","dataLength","Error","mode","vertical","width","height"],"mappings":"gMAAA,oDAIO,QAASA,CAAAA,qBAAT,CAA+BC,KAA/B,CAA+E,CACpFC,eAAMC,SAAN,CAAgB,UAAM,CACpB,GAAQC,CAAAA,YAAR,CAAgDH,KAAhD,CAAQG,YAAR,CAAkCC,SAAlC,CAAgDJ,KAAhD,CAAsBK,UAAtB,CAEA,GAAI,MAAOF,CAAAA,YAAP,GAAwB,QAAxB,EAAoCC,SAAS,CAAG,CAApD,CAAuD,CACrD,GAAID,YAAY,CAAG,CAAf,EAAoBA,YAAY,EAAIC,SAAxC,CAAmD,CACjD,KAAM,IAAIE,CAAAA,KAAJ,CACJ,mDADI,CAAN,CAGD,CACF,CAGD,GAAI,CAACN,KAAK,CAACO,IAAP,EAAeP,KAAK,CAACO,IAAN,GAAe,UAAlC,CAA8C,CAC5C,GAAI,CAACP,KAAK,CAACQ,QAAP,EAAmB,CAACR,KAAK,CAACS,KAA9B,CAAqC,CACnC,KAAM,IAAIH,CAAAA,KAAJ,CACJ,qDADI,CAAN,CAGD,CACD,GAAIN,KAAK,CAACQ,QAAN,EAAkB,CAACR,KAAK,CAACU,MAA7B,CAAqC,CACnC,KAAM,IAAIJ,CAAAA,KAAJ,CACJ,oDADI,CAAN,CAGD,CACF,CACF,CAxBD,CAwBG,CAACN,KAAD,CAxBH,EAyBD","sourcesContent":["import React from \"react\";\n\nimport type { TCarouselProps } from \"../types\";\n\nexport function usePropsErrorBoundary(props: TCarouselProps & { dataLength: number }) {\n React.useEffect(() => {\n const { defaultIndex, dataLength: viewCount } = props;\n\n if (typeof defaultIndex === \"number\" && viewCount > 0) {\n if (defaultIndex < 0 || defaultIndex >= viewCount) {\n throw new Error(\n \"DefaultIndex must be in the range of data length.\",\n );\n }\n }\n\n // TODO\n if (!props.mode || props.mode === \"parallax\") {\n if (!props.vertical && !props.width) {\n throw new Error(\n \"`width` must be specified for horizontal carousels.\",\n );\n }\n if (props.vertical && !props.height) {\n throw new Error(\n \"`height` must be specified for vertical carousels.\",\n );\n }\n }\n }, [props]);\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.BaseLayout=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _useCheckMounted=require("../hooks/useCheckMounted");var _useOffsetX=require("../hooks/useOffsetX");var _LazyView=require("../LazyView");var _store=require("../store");var _this=this,_jsxFileName="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/BaseLayout.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;})),keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ownKeys(Object(source),!0).forEach(function(key){(0,_defineProperty2.default)(target,key,source[key]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}return target;}var BaseLayout=function BaseLayout(props){var mounted=(0,_useCheckMounted.useCheckMounted)();var handlerOffset=props.handlerOffset,index=props.index,children=props.children,visibleRanges=props.visibleRanges,animationStyle=props.animationStyle;var context=_react.default.useContext(_store.CTX);var _context$props=context.props,loop=_context$props.loop,
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.BaseLayout=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _useCheckMounted=require("../hooks/useCheckMounted");var _useOffsetX=require("../hooks/useOffsetX");var _LazyView=require("../LazyView");var _store=require("../store");var _this=this,_jsxFileName="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/BaseLayout.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;})),keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ownKeys(Object(source),!0).forEach(function(key){(0,_defineProperty2.default)(target,key,source[key]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}return target;}var BaseLayout=function BaseLayout(props){var mounted=(0,_useCheckMounted.useCheckMounted)();var handlerOffset=props.handlerOffset,index=props.index,children=props.children,visibleRanges=props.visibleRanges,animationStyle=props.animationStyle;var context=_react.default.useContext(_store.CTX);var _context$props=context.props,loop=_context$props.loop,dataLength=_context$props.dataLength,width=_context$props.width,height=_context$props.height,vertical=_context$props.vertical,customConfig=_context$props.customConfig,mode=_context$props.mode,modeConfig=_context$props.modeConfig;var size=vertical?height:width;var _React$useState=_react.default.useState(false),_React$useState2=(0,_slicedToArray2.default)(_React$useState,2),shouldUpdate=_React$useState2[0],setShouldUpdate=_React$useState2[1];var offsetXConfig=_objectSpread({handlerOffset:handlerOffset,index:index,size:size,dataLength:dataLength,loop:loop},typeof customConfig==="function"?customConfig():{});if(mode==="horizontal-stack"){var _ref=modeConfig,snapDirection=_ref.snapDirection,showLength=_ref.showLength;offsetXConfig={handlerOffset:handlerOffset,index:index,size:size,dataLength:dataLength,loop:loop,type:snapDirection==="right"?"negative":"positive",viewCount:showLength};}var x=(0,_useOffsetX.useOffsetX)(offsetXConfig,visibleRanges);var animationValue=(0,_reactNativeReanimated.useDerivedValue)(function(){var _f=function _f(){return x.value/size;};_f._closure={x:x,size:size};_f.asString="function _f(){const{x,size}=jsThis._closure;{return x.value/size;}}";_f.__workletHash=9077192607952;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/BaseLayout.tsx (74:41)";return _f;}(),[x,size]);var animatedStyle=(0,_reactNativeReanimated.useAnimatedStyle)(function(){var _f=function _f(){return animationStyle(x.value/size);};_f._closure={animationStyle:animationStyle,x:x,size:size};_f.asString="function _f(){const{animationStyle,x,size}=jsThis._closure;{return animationStyle(x.value/size);}}";_f.__workletHash=3916054905053;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/BaseLayout.tsx (76:4)";_f.__optimalization=2;return _f;}(),[animationStyle]);var updateView=_react.default.useCallback(function(negativeRange,positiveRange){mounted.current&&setShouldUpdate(index>=negativeRange[0]&&index<=negativeRange[1]||index>=positiveRange[0]&&index<=positiveRange[1]);},[index,mounted]);(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){return visibleRanges.value;};_f._closure={visibleRanges:visibleRanges};_f.asString="function _f(){const{visibleRanges}=jsThis._closure;{return visibleRanges.value;}}";_f.__workletHash=15231519758579;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/BaseLayout.tsx (92:4)";return _f;}(),function(){var _f=function _f(){(0,_reactNativeReanimated.runOnJS)(updateView)(visibleRanges.value.negativeRange,visibleRanges.value.positiveRange);};_f._closure={runOnJS:_reactNativeReanimated.runOnJS,updateView:updateView,visibleRanges:visibleRanges};_f.asString="function _f(){const{runOnJS,updateView,visibleRanges}=jsThis._closure;{runOnJS(updateView)(visibleRanges.value.negativeRange,visibleRanges.value.positiveRange);}}";_f.__workletHash=6352504350554;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/BaseLayout.tsx (93:4)";return _f;}(),[visibleRanges.value]);return _react.default.createElement(_reactNativeReanimated.default.View,{style:[{width:width||"100%",height:height||"100%",position:"absolute"},animatedStyle],__self:_this,__source:{fileName:_jsxFileName,lineNumber:103,columnNumber:5}},_react.default.createElement(_LazyView.LazyView,{shouldUpdate:shouldUpdate,__self:_this,__source:{fileName:_jsxFileName,lineNumber:113,columnNumber:7}},children({animationValue:animationValue})));};exports.BaseLayout=BaseLayout;
|
|
2
2
|
//# sourceMappingURL=BaseLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BaseLayout.tsx"],"names":["BaseLayout","props","mounted","handlerOffset","index","children","visibleRanges","animationStyle","context","React","useContext","CTX","loop","
|
|
1
|
+
{"version":3,"sources":["BaseLayout.tsx"],"names":["BaseLayout","props","mounted","handlerOffset","index","children","visibleRanges","animationStyle","context","React","useContext","CTX","loop","dataLength","width","height","vertical","customConfig","mode","modeConfig","size","useState","shouldUpdate","setShouldUpdate","offsetXConfig","snapDirection","showLength","type","viewCount","x","animationValue","value","animatedStyle","updateView","useCallback","negativeRange","positiveRange","current","runOnJS","position"],"mappings":"gWAAA,oDAGA,uFASA,yDAEA,+CAEA,qCACA,+B,q4DAIO,GAAMA,CAAAA,UAQX,CAAG,QARQA,CAAAA,UAQR,CAACC,KAAD,CAAW,CACd,GAAMC,CAAAA,OAAO,CAAG,sCAAhB,CACA,GAAQC,CAAAA,aAAR,CACQF,KADR,CAAQE,aAAR,CAAuBC,KAAvB,CACQH,KADR,CAAuBG,KAAvB,CAA8BC,QAA9B,CACQJ,KADR,CAA8BI,QAA9B,CAAwCC,aAAxC,CACQL,KADR,CAAwCK,aAAxC,CAAuDC,cAAvD,CACQN,KADR,CAAuDM,cAAvD,CAGA,GAAMC,CAAAA,OAAO,CAAGC,eAAMC,UAAN,CAAiBC,UAAjB,CAAhB,CACA,mBAWIH,OAXJ,CACEP,KADF,CAEIW,IAFJ,gBAEIA,IAFJ,CAGIC,UAHJ,gBAGIA,UAHJ,CAIIC,KAJJ,gBAIIA,KAJJ,CAKIC,MALJ,gBAKIA,MALJ,CAMIC,QANJ,gBAMIA,QANJ,CAOIC,YAPJ,gBAOIA,YAPJ,CAQIC,IARJ,gBAQIA,IARJ,CASIC,UATJ,gBASIA,UATJ,CAYA,GAAMC,CAAAA,IAAI,CAAGJ,QAAQ,CAAGD,MAAH,CAAYD,KAAjC,CACA,oBAAwCL,eAAMY,QAAN,CAAe,KAAf,CAAxC,iEAAOC,YAAP,qBAAqBC,eAArB,qBACA,GAAIC,CAAAA,aAAoB,gBACtBrB,aAAa,CAAbA,aADsB,CAEtBC,KAAK,CAALA,KAFsB,CAGtBgB,IAAI,CAAJA,IAHsB,CAItBP,UAAU,CAAVA,UAJsB,CAKtBD,IAAI,CAAJA,IALsB,EAMlB,MAAOK,CAAAA,YAAP,GAAwB,UAAxB,CAAqCA,YAAY,EAAjD,CAAsD,EANpC,CAAxB,CASA,GAAIC,IAAI,GAAK,kBAAb,CAAiC,CAC/B,SAAsCC,UAAtC,CAAQM,aAAR,MAAQA,aAAR,CAAuBC,UAAvB,MAAuBA,UAAvB,CAEAF,aAAa,CAAG,CACdrB,aAAa,CAAbA,aADc,CAEdC,KAAK,CAALA,KAFc,CAGdgB,IAAI,CAAJA,IAHc,CAIdP,UAAU,CAAVA,UAJc,CAKdD,IAAI,CAAJA,IALc,CAMde,IAAI,CAAEF,aAAa,GAAK,OAAlB,CAA4B,UAA5B,CAAyC,UANjC,CAOdG,SAAS,CAAEF,UAPG,CAAhB,CASD,CAED,GAAMG,CAAAA,CAAC,CAAG,2BAAWL,aAAX,CAA0BlB,aAA1B,CAAV,CACA,GAAMwB,CAAAA,cAAc,CAAG,6DAAgB,oBAAMD,CAAAA,CAAC,CAACE,KAAF,CAAUX,IAAhB,EAAhB,gBAxElBS,CAwEkB,MAxERT,IAwEQ,oPAAsC,CAACS,CAAD,CAAIT,IAAJ,CAAtC,CAAvB,CACA,GAAMY,CAAAA,aAAa,CAAG,8DACpB,oBAAMzB,CAAAA,cAAc,CAACsB,CAAC,CAACE,KAAF,CAAUX,IAAX,CAApB,EADoB,6BAzEjBb,cAyEiB,GAzEFsB,CAyEE,MAzEQT,IAyER,wSAEpB,CAACb,cAAD,CAFoB,CAAtB,CAKA,GAAM0B,CAAAA,UAAU,CAAGxB,eAAMyB,WAAN,CACjB,SAACC,aAAD,CAA0BC,aAA1B,CAAsD,CACpDlC,OAAO,CAACmC,OAAR,EACad,eAAe,CACfnB,KAAK,EAAI+B,aAAa,CAAC,CAAD,CAAtB,EAA6B/B,KAAK,EAAI+B,aAAa,CAAC,CAAD,CAApD,EACU/B,KAAK,EAAIgC,aAAa,CAAC,CAAD,CAAtB,EAA6BhC,KAAK,EAAIgC,aAAa,CAAC,CAAD,CAF7C,CAD5B,CAKD,CAPgB,CAQjB,CAAChC,KAAD,CAAQF,OAAR,CARiB,CAAnB,CAWA,iEACE,oBAAMI,CAAAA,aAAa,CAACyB,KAApB,EADF,4BAzFKzB,aAyFL,iSAEQ,CACJ,mCAAQ2B,UAAR,EACE3B,aAAa,CAACyB,KAAd,CAAoBI,aADtB,CAEE7B,aAAa,CAACyB,KAAd,CAAoBK,aAFtB,EAID,CAPH,sBAxFAE,8BAwFA,YAxFQL,UAwFR,eAxFuD3B,aAwFvD,kVAQE,CAACA,aAAa,CAACyB,KAAf,CARF,EAWA,MACE,8BAAC,8BAAD,CAAU,IAAV,EACE,KAAK,CAAE,CACL,CACEjB,KAAK,CAAEA,KAAK,EAAI,MADlB,CAEEC,MAAM,CAAEA,MAAM,EAAI,MAFpB,CAGEwB,QAAQ,CAAE,UAHZ,CADK,CAMLP,aANK,CADT,8EAUE,6BAAC,kBAAD,EAAU,YAAY,CAAEV,YAAxB,8EACGjB,QAAQ,CAAC,CAAEyB,cAAc,CAAdA,cAAF,CAAD,CADX,CAVF,CADF,CAgBD,CAhGM,C","sourcesContent":["import React from \"react\";\nimport type { ViewStyle } from \"react-native\";\nimport type { AnimatedStyleProp } from \"react-native-reanimated\";\nimport Animated, {\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n useDerivedValue,\n} from \"react-native-reanimated\";\n\nimport type { ILayoutConfig } from \"./stack\";\n\nimport { useCheckMounted } from \"../hooks/useCheckMounted\";\nimport type { IOpts } from \"../hooks/useOffsetX\";\nimport { useOffsetX } from \"../hooks/useOffsetX\";\nimport type { IVisibleRanges } from \"../hooks/useVisibleRanges\";\nimport { LazyView } from \"../LazyView\";\nimport { CTX } from \"../store\";\n\nexport type TAnimationStyle = (value: number) => AnimatedStyleProp<ViewStyle>;\n\nexport const BaseLayout: React.FC<{\n index: number\n handlerOffset: Animated.SharedValue<number>\n visibleRanges: IVisibleRanges\n animationStyle: TAnimationStyle\n children: (ctx: {\n animationValue: Animated.SharedValue<number>\n }) => React.ReactElement\n}> = (props) => {\n const mounted = useCheckMounted();\n const { handlerOffset, index, children, visibleRanges, animationStyle }\n = props;\n\n const context = React.useContext(CTX);\n const {\n props: {\n loop,\n dataLength,\n width,\n height,\n vertical,\n customConfig,\n mode,\n modeConfig,\n },\n } = context;\n const size = vertical ? height : width;\n const [shouldUpdate, setShouldUpdate] = React.useState(false);\n let offsetXConfig: IOpts = {\n handlerOffset,\n index,\n size,\n dataLength,\n loop,\n ...(typeof customConfig === \"function\" ? customConfig() : {}),\n };\n\n if (mode === \"horizontal-stack\") {\n const { snapDirection, showLength } = modeConfig as ILayoutConfig;\n\n offsetXConfig = {\n handlerOffset,\n index,\n size,\n dataLength,\n loop,\n type: snapDirection === \"right\" ? \"negative\" : \"positive\",\n viewCount: showLength,\n };\n }\n\n const x = useOffsetX(offsetXConfig, visibleRanges);\n const animationValue = useDerivedValue(() => x.value / size, [x, size]);\n const animatedStyle = useAnimatedStyle(\n () => animationStyle(x.value / size),\n [animationStyle],\n );\n\n const updateView = React.useCallback(\n (negativeRange: number[], positiveRange: number[]) => {\n mounted.current\n && setShouldUpdate(\n (index >= negativeRange[0] && index <= negativeRange[1])\n || (index >= positiveRange[0] && index <= positiveRange[1]),\n );\n },\n [index, mounted],\n );\n\n useAnimatedReaction(\n () => visibleRanges.value,\n () => {\n runOnJS(updateView)(\n visibleRanges.value.negativeRange,\n visibleRanges.value.positiveRange,\n );\n },\n [visibleRanges.value],\n );\n\n return (\n <Animated.View\n style={[\n {\n width: width || \"100%\",\n height: height || \"100%\",\n position: \"absolute\",\n },\n animatedStyle,\n ]}\n >\n <LazyView shouldUpdate={shouldUpdate}>\n {children({ animationValue })}\n </LazyView>\n </Animated.View>\n );\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ParallaxLayout=void 0;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _useOffsetX=require("../hooks/useOffsetX");var _LazyView=require("../LazyView");var _this=this,_jsxFileName="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/ParallaxLayout.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var ParallaxLayout=function ParallaxLayout(props){var handlerOffset=props.handlerOffset,_props$parallaxScroll=props.parallaxScrollingOffset,parallaxScrollingOffset=_props$parallaxScroll===void 0?100:_props$parallaxScroll,_props$parallaxScroll2=props.parallaxScrollingScale,parallaxScrollingScale=_props$parallaxScroll2===void 0?0.8:_props$parallaxScroll2,_props$parallaxAdjace=props.parallaxAdjacentItemScale,parallaxAdjacentItemScale=_props$parallaxAdjace===void 0?Math.pow(parallaxScrollingScale,2):_props$parallaxAdjace,index=props.index,width=props.width,height=props.height,loop=props.loop,
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ParallaxLayout=void 0;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _useOffsetX=require("../hooks/useOffsetX");var _LazyView=require("../LazyView");var _this=this,_jsxFileName="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/ParallaxLayout.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var ParallaxLayout=function ParallaxLayout(props){var handlerOffset=props.handlerOffset,_props$parallaxScroll=props.parallaxScrollingOffset,parallaxScrollingOffset=_props$parallaxScroll===void 0?100:_props$parallaxScroll,_props$parallaxScroll2=props.parallaxScrollingScale,parallaxScrollingScale=_props$parallaxScroll2===void 0?0.8:_props$parallaxScroll2,_props$parallaxAdjace=props.parallaxAdjacentItemScale,parallaxAdjacentItemScale=_props$parallaxAdjace===void 0?Math.pow(parallaxScrollingScale,2):_props$parallaxAdjace,index=props.index,width=props.width,height=props.height,loop=props.loop,dataLength=props.dataLength,children=props.children,visibleRanges=props.visibleRanges,vertical=props.vertical;var _React$useState=_react.default.useState(false),_React$useState2=(0,_slicedToArray2.default)(_React$useState,2),shouldUpdate=_React$useState2[0],setShouldUpdate=_React$useState2[1];var size=props.vertical?props.height:props.width;var x=(0,_useOffsetX.useOffsetX)({handlerOffset:handlerOffset,index:index,size:size,dataLength:dataLength,loop:loop},visibleRanges);var offsetXStyle=(0,_reactNativeReanimated.useAnimatedStyle)(function(){var _f=function _f(){var value=x.value/size;var translate=(0,_reactNativeReanimated.interpolate)(value,[-1,0,1],[-size+parallaxScrollingOffset,0,size-parallaxScrollingOffset],_reactNativeReanimated.Extrapolate.EXTEND);var zIndex=(0,_reactNativeReanimated.interpolate)(value,[-1,0,1],[0,size,0],_reactNativeReanimated.Extrapolate.CLAMP);var scale=(0,_reactNativeReanimated.interpolate)(value,[-1,0,1],[parallaxAdjacentItemScale,parallaxScrollingScale,parallaxAdjacentItemScale],_reactNativeReanimated.Extrapolate.CLAMP);return{transform:[vertical?{translateY:translate}:{translateX:translate},{scale:scale}],zIndex:zIndex};};_f._closure={x:x,size:size,interpolate:_reactNativeReanimated.interpolate,parallaxScrollingOffset:parallaxScrollingOffset,Extrapolate:{EXTEND:_reactNativeReanimated.Extrapolate.EXTEND,CLAMP:_reactNativeReanimated.Extrapolate.CLAMP},parallaxAdjacentItemScale:parallaxAdjacentItemScale,parallaxScrollingScale:parallaxScrollingScale,vertical:vertical};_f.asString="function _f(){const{x,size,interpolate,parallaxScrollingOffset,Extrapolate,parallaxAdjacentItemScale,parallaxScrollingScale,vertical}=jsThis._closure;{const value=x.value/size;const translate=interpolate(value,[-1,0,1],[-size+parallaxScrollingOffset,0,size-parallaxScrollingOffset],Extrapolate.EXTEND);const zIndex=interpolate(value,[-1,0,1],[0,size,0],Extrapolate.CLAMP);const scale=interpolate(value,[-1,0,1],[parallaxAdjacentItemScale,parallaxScrollingScale,parallaxAdjacentItemScale],Extrapolate.CLAMP);return{transform:[vertical?{translateY:translate}:{translateX:translate},{scale:scale}],zIndex:zIndex};}}";_f.__workletHash=10412925648231;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/ParallaxLayout.tsx (58:40)";_f.__optimalization=3;return _f;}(),[loop,vertical,parallaxScrollingOffset]);var updateView=_react.default.useCallback(function(negativeRange,positiveRange){setShouldUpdate(index>=negativeRange[0]&&index<=negativeRange[1]||index>=positiveRange[0]&&index<=positiveRange[1]);},[index]);(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){return visibleRanges.value;};_f._closure={visibleRanges:visibleRanges};_f.asString="function _f(){const{visibleRanges}=jsThis._closure;{return visibleRanges.value;}}";_f.__workletHash=15231519758579;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/ParallaxLayout.tsx (118:4)";return _f;}(),function(){var _f=function _f(){(0,_reactNativeReanimated.runOnJS)(updateView)(visibleRanges.value.negativeRange,visibleRanges.value.positiveRange);};_f._closure={runOnJS:_reactNativeReanimated.runOnJS,updateView:updateView,visibleRanges:visibleRanges};_f.asString="function _f(){const{runOnJS,updateView,visibleRanges}=jsThis._closure;{runOnJS(updateView)(visibleRanges.value.negativeRange,visibleRanges.value.positiveRange);}}";_f.__workletHash=6352504350554;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/layouts/ParallaxLayout.tsx (119:4)";return _f;}(),[visibleRanges.value]);return _react.default.createElement(_reactNativeReanimated.default.View,{style:[{width:width||"100%",height:height||"100%",position:"absolute"},offsetXStyle],__self:_this,__source:{fileName:_jsxFileName,lineNumber:129,columnNumber:5}},_react.default.createElement(_LazyView.LazyView,{shouldUpdate:shouldUpdate,__self:_this,__source:{fileName:_jsxFileName,lineNumber:139,columnNumber:7}},children));};exports.ParallaxLayout=ParallaxLayout;
|
|
2
2
|
//# sourceMappingURL=ParallaxLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ParallaxLayout.tsx"],"names":["ParallaxLayout","props","handlerOffset","parallaxScrollingOffset","parallaxScrollingScale","parallaxAdjacentItemScale","index","width","height","loop","
|
|
1
|
+
{"version":3,"sources":["ParallaxLayout.tsx"],"names":["ParallaxLayout","props","handlerOffset","parallaxScrollingOffset","parallaxScrollingScale","parallaxAdjacentItemScale","index","width","height","loop","dataLength","children","visibleRanges","vertical","React","useState","shouldUpdate","setShouldUpdate","size","x","offsetXStyle","value","translate","Extrapolate","EXTEND","zIndex","CLAMP","scale","transform","translateY","translateX","interpolate","updateView","useCallback","negativeRange","positiveRange","runOnJS","position"],"mappings":"sQAAA,oDACA,uFAUA,+CAEA,qC,unCAGO,GAAMA,CAAAA,cAUZ,CAAG,QAVSA,CAAAA,cAUT,CAACC,KAAD,CAAW,CACb,GACEC,CAAAA,aADF,CAaID,KAbJ,CACEC,aADF,uBAaID,KAbJ,CAEEE,uBAFF,CAEEA,uBAFF,gCAE4B,GAF5B,8CAaIF,KAbJ,CAGEG,sBAHF,CAGEA,sBAHF,iCAG2B,GAH3B,8CAaIH,KAbJ,CAIEI,yBAJF,CAIEA,yBAJF,yCAI8BD,sBAJ9B,CAIwD,CAJxD,wBAKEE,KALF,CAaIL,KAbJ,CAKEK,KALF,CAMEC,KANF,CAaIN,KAbJ,CAMEM,KANF,CAOEC,MAPF,CAaIP,KAbJ,CAOEO,MAPF,CAQEC,IARF,CAaIR,KAbJ,CAQEQ,IARF,CASEC,UATF,CAaIT,KAbJ,CASES,UATF,CAUEC,QAVF,CAaIV,KAbJ,CAUEU,QAVF,CAWEC,aAXF,CAaIX,KAbJ,CAWEW,aAXF,CAYEC,QAZF,CAaIZ,KAbJ,CAYEY,QAZF,CAeA,oBAAwCC,eAAMC,QAAN,CAAe,KAAf,CAAxC,iEAAOC,YAAP,qBAAqBC,eAArB,qBAEA,GAAMC,CAAAA,IAAI,CAAGjB,KAAK,CAACY,QAAN,CAAiBZ,KAAK,CAACO,MAAvB,CAAgCP,KAAK,CAACM,KAAnD,CAEA,GAAMY,CAAAA,CAAC,CAAG,2BACR,CACEjB,aAAa,CAAbA,aADF,CAEEI,KAAK,CAALA,KAFF,CAGEY,IAAI,CAAJA,IAHF,CAIER,UAAU,CAAVA,UAJF,CAKED,IAAI,CAAJA,IALF,CADQ,CAQRG,aARQ,CAAV,CAWA,GAAMQ,CAAAA,YAAY,CAAG,2EAAuB,CAC1C,GAAMC,CAAAA,KAAK,CAAGF,CAAC,CAACE,KAAF,CAAUH,IAAxB,CAEA,GAAMI,CAAAA,SAAS,CAAG,uCAChBD,KADgB,CAEhB,CAAC,CAAC,CAAF,CAAK,CAAL,CAAQ,CAAR,CAFgB,CAGhB,CACE,CAACH,IAAD,CAAQf,uBADV,CAEE,CAFF,CAGEe,IAAI,CAAGf,uBAHT,CAHgB,CAQhBoB,mCAAYC,MARI,CAAlB,CAWA,GAAMC,CAAAA,MAAM,CAAG,uCACbJ,KADa,CAEb,CAAC,CAAC,CAAF,CAAK,CAAL,CAAQ,CAAR,CAFa,CAGb,CAAC,CAAD,CAAIH,IAAJ,CAAU,CAAV,CAHa,CAIbK,mCAAYG,KAJC,CAAf,CAOA,GAAMC,CAAAA,KAAK,CAAG,uCACZN,KADY,CAEZ,CAAC,CAAC,CAAF,CAAK,CAAL,CAAQ,CAAR,CAFY,CAGZ,CACEhB,yBADF,CAEED,sBAFF,CAGEC,yBAHF,CAHY,CAQZkB,mCAAYG,KARA,CAAd,CAWA,MAAO,CACLE,SAAS,CAAE,CACTf,QAAQ,CACJ,CACAgB,UAAU,CAAEP,SADZ,CADI,CAIJ,CACAQ,UAAU,CAAER,SADZ,CALK,CAQT,CACEK,KAAK,CAALA,KADF,CARS,CADN,CAaLF,MAAM,CAANA,MAbK,CAAP,CAeD,CA/CoB,gBAvDPN,CAuDO,MArD6BD,IAqD7B,aApDPa,kCAoDO,yBAtDwE5B,uBAsDxE,qBAtDkGoB,mCAAYC,MAsD9G,OApDwGD,mCAAYG,KAoDpH,4BApD4ErB,yBAoD5E,wBApDoDD,sBAoDpD,UAlDPS,QAkDO,gzBA+ClB,CAACJ,IAAD,CAAOI,QAAP,CAAiBV,uBAAjB,CA/CkB,CAArB,CAiDA,GAAM6B,CAAAA,UAAU,CAAGlB,eAAMmB,WAAN,CACjB,SAACC,aAAD,CAA0BC,aAA1B,CAAsD,CACpDlB,eAAe,CACZX,KAAK,EAAI4B,aAAa,CAAC,CAAD,CAAtB,EAA6B5B,KAAK,EAAI4B,aAAa,CAAC,CAAD,CAApD,EACgB5B,KAAK,EAAI6B,aAAa,CAAC,CAAD,CAAtB,EAA6B7B,KAAK,EAAI6B,aAAa,CAAC,CAAD,CAFtD,CAAf,CAID,CANgB,CAOjB,CAAC7B,KAAD,CAPiB,CAAnB,CAUA,iEACE,oBAAMM,CAAAA,aAAa,CAACS,KAApB,EADF,4BAnHKT,aAmHL,sSAEQ,CACJ,mCAAQoB,UAAR,EACEpB,aAAa,CAACS,KAAd,CAAoBa,aADtB,CAEEtB,aAAa,CAACS,KAAd,CAAoBc,aAFtB,EAID,CAPH,sBAlHAC,8BAkHA,YAlHQJ,UAkHR,eAlHuDpB,aAkHvD,uVAQE,CAACA,aAAa,CAACS,KAAf,CARF,EAWA,MACE,8BAAC,8BAAD,CAAU,IAAV,EACE,KAAK,CAAE,CACL,CACEd,KAAK,CAAEA,KAAK,EAAI,MADlB,CAEEC,MAAM,CAAEA,MAAM,EAAI,MAFpB,CAGE6B,QAAQ,CAAE,UAHZ,CADK,CAMLjB,YANK,CADT,8EAUE,6BAAC,kBAAD,EAAU,YAAY,CAAEJ,YAAxB,8EAAuCL,QAAvC,CAVF,CADF,CAcD,CA7HM,C","sourcesContent":["import React from \"react\";\nimport Animated, {\n Extrapolate,\n interpolate,\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n} from \"react-native-reanimated\";\n\nimport type { ILayoutConfig } from \"./parallax\";\n\nimport { useOffsetX } from \"../hooks/useOffsetX\";\nimport type { IVisibleRanges } from \"../hooks/useVisibleRanges\";\nimport { LazyView } from \"../LazyView\";\nimport type { IComputedDirectionTypes } from \"../types\";\n\nexport const ParallaxLayout: React.FC<\nIComputedDirectionTypes<\n{\n loop?: boolean\n handlerOffset: Animated.SharedValue<number>\n index: number\n dataLength: number\n visibleRanges: IVisibleRanges\n} & ILayoutConfig\n>\n> = (props) => {\n const {\n handlerOffset,\n parallaxScrollingOffset = 100,\n parallaxScrollingScale = 0.8,\n parallaxAdjacentItemScale = parallaxScrollingScale ** 2,\n index,\n width,\n height,\n loop,\n dataLength,\n children,\n visibleRanges,\n vertical,\n } = props;\n\n const [shouldUpdate, setShouldUpdate] = React.useState(false);\n\n const size = props.vertical ? props.height : props.width;\n\n const x = useOffsetX(\n {\n handlerOffset,\n index,\n size,\n dataLength,\n loop,\n },\n visibleRanges,\n );\n\n const offsetXStyle = useAnimatedStyle(() => {\n const value = x.value / size;\n\n const translate = interpolate(\n value,\n [-1, 0, 1],\n [\n -size + parallaxScrollingOffset,\n 0,\n size - parallaxScrollingOffset,\n ],\n Extrapolate.EXTEND,\n );\n\n const zIndex = interpolate(\n value,\n [-1, 0, 1],\n [0, size, 0],\n Extrapolate.CLAMP,\n );\n\n const scale = interpolate(\n value,\n [-1, 0, 1],\n [\n parallaxAdjacentItemScale,\n parallaxScrollingScale,\n parallaxAdjacentItemScale,\n ],\n Extrapolate.CLAMP,\n );\n\n return {\n transform: [\n vertical\n ? {\n translateY: translate,\n }\n : {\n translateX: translate,\n },\n {\n scale,\n },\n ],\n zIndex,\n };\n }, [loop, vertical, parallaxScrollingOffset]);\n\n const updateView = React.useCallback(\n (negativeRange: number[], positiveRange: number[]) => {\n setShouldUpdate(\n (index >= negativeRange[0] && index <= negativeRange[1])\n || (index >= positiveRange[0] && index <= positiveRange[1]),\n );\n },\n [index],\n );\n\n useAnimatedReaction(\n () => visibleRanges.value,\n () => {\n runOnJS(updateView)(\n visibleRanges.value.negativeRange,\n visibleRanges.value.positiveRange,\n );\n },\n [visibleRanges.value],\n );\n\n return (\n <Animated.View\n style={[\n {\n width: width || \"100%\",\n height: height || \"100%\",\n position: \"absolute\",\n },\n offsetXStyle,\n ]}\n >\n <LazyView shouldUpdate={shouldUpdate}>{children}</LazyView>\n </Animated.View>\n );\n};\n"]}
|
package/lib/module/Carousel.js
CHANGED
|
@@ -18,10 +18,16 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
18
18
|
const props = useInitProps(_props);
|
|
19
19
|
const {
|
|
20
20
|
testID,
|
|
21
|
-
data,
|
|
22
|
-
rawData,
|
|
23
21
|
loop,
|
|
24
22
|
autoFillData,
|
|
23
|
+
// Fill data with autoFillData
|
|
24
|
+
data,
|
|
25
|
+
// Length of fill data
|
|
26
|
+
dataLength,
|
|
27
|
+
// Raw data that has not been processed
|
|
28
|
+
rawData,
|
|
29
|
+
// Length of raw data
|
|
30
|
+
rawDataLength,
|
|
25
31
|
mode,
|
|
26
32
|
style,
|
|
27
33
|
width,
|
|
@@ -46,26 +52,27 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
46
52
|
size,
|
|
47
53
|
handlerOffset
|
|
48
54
|
} = commonVariables;
|
|
49
|
-
const dataLength = data.length;
|
|
50
55
|
const offsetX = useDerivedValue(() => {
|
|
51
56
|
const totalSize = size * dataLength;
|
|
52
57
|
const x = handlerOffset.value % totalSize;
|
|
53
58
|
if (!loop) return handlerOffset.value;
|
|
54
59
|
return isNaN(x) ? 0 : x;
|
|
55
60
|
}, [loop, size, dataLength]);
|
|
56
|
-
usePropsErrorBoundary(props
|
|
61
|
+
usePropsErrorBoundary({ ...props,
|
|
62
|
+
dataLength
|
|
63
|
+
});
|
|
57
64
|
useOnProgressChange({
|
|
58
65
|
autoFillData,
|
|
59
66
|
loop,
|
|
60
67
|
size,
|
|
61
68
|
offsetX,
|
|
62
|
-
|
|
69
|
+
rawDataLength,
|
|
63
70
|
onProgressChange
|
|
64
71
|
});
|
|
65
72
|
const carouselController = useCarouselController({
|
|
66
73
|
loop,
|
|
67
74
|
size,
|
|
68
|
-
|
|
75
|
+
dataLength,
|
|
69
76
|
autoFillData,
|
|
70
77
|
handlerOffset,
|
|
71
78
|
withAnimation,
|
|
@@ -96,13 +103,13 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
96
103
|
|
|
97
104
|
const realIndex = computedRealIndexWithAutoFillData({
|
|
98
105
|
index: _sharedIndex,
|
|
99
|
-
dataLength:
|
|
106
|
+
dataLength: rawDataLength,
|
|
100
107
|
loop,
|
|
101
108
|
autoFillData
|
|
102
109
|
});
|
|
103
110
|
if (onSnapToItem) onSnapToItem(realIndex);
|
|
104
111
|
if (onScrollEnd) onScrollEnd(realIndex);
|
|
105
|
-
}, [loop, autoFillData,
|
|
112
|
+
}, [loop, autoFillData, rawDataLength, getSharedIndex, onSnapToItem, onScrollEnd]);
|
|
106
113
|
|
|
107
114
|
const scrollViewGestureOnScrollBegin = React.useCallback(() => {
|
|
108
115
|
pauseAutoPlay();
|
|
@@ -122,7 +129,7 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
122
129
|
scrollTo
|
|
123
130
|
}), [getCurrentIndex, next, prev, scrollTo]);
|
|
124
131
|
const visibleRanges = useVisibleRanges({
|
|
125
|
-
total:
|
|
132
|
+
total: dataLength,
|
|
126
133
|
viewSize: size,
|
|
127
134
|
translation: handlerOffset,
|
|
128
135
|
windowSize
|
|
@@ -133,7 +140,7 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
133
140
|
const renderLayout = React.useCallback((item, i) => {
|
|
134
141
|
const realIndex = computedRealIndexWithAutoFillData({
|
|
135
142
|
index: i,
|
|
136
|
-
dataLength:
|
|
143
|
+
dataLength: rawDataLength,
|
|
137
144
|
loop,
|
|
138
145
|
autoFillData
|
|
139
146
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Carousel.tsx"],"names":["React","StyleSheet","runOnJS","useDerivedValue","useAutoPlay","useCarouselController","useCommonVariables","useInitProps","useLayoutConfig","useOnProgressChange","usePropsErrorBoundary","useVisibleRanges","BaseLayout","ScrollViewGesture","CTX","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffset","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport { runOnJS, useDerivedValue } from \"react-native-reanimated\";\n\nimport { useAutoPlay } from \"./hooks/useAutoPlay\";\nimport { useCarouselController } from \"./hooks/useCarouselController\";\nimport { useCommonVariables } from \"./hooks/useCommonVariables\";\nimport { useInitProps } from \"./hooks/useInitProps\";\nimport { useLayoutConfig } from \"./hooks/useLayoutConfig\";\nimport { useOnProgressChange } from \"./hooks/useOnProgressChange\";\nimport { usePropsErrorBoundary } from \"./hooks/usePropsErrorBoundary\";\nimport { useVisibleRanges } from \"./hooks/useVisibleRanges\";\nimport { BaseLayout } from \"./layouts/BaseLayout\";\nimport { ScrollViewGesture } from \"./ScrollViewGesture\";\nimport { CTX } from \"./store\";\nimport type { ICarouselInstance, TCarouselProps } from \"./types\";\nimport { computedRealIndexWithAutoFillData } from \"./utils/computedWithAutoFillData\";\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffset } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffset.value % totalSize;\n\n if (!loop)\n return handlerOffset.value;\n\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffset,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex }\n = carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem)\n onSnapToItem(realIndex);\n\n if (onScrollEnd)\n onScrollEnd(realIndex);\n }, [\n loop,\n autoFillData,\n rawData.length,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, scrollTo],\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffset,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffset={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ],\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <ScrollViewGesture\n key={mode}\n size={size}\n translation={handlerOffset}\n style={[\n styles.container,\n {\n width: width || \"100%\",\n height: height || \"100%\",\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n testID={testID}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n {data.map(renderLayout)}\n </ScrollViewGesture>\n </CTX.Provider>\n );\n },\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: \"hidden\",\n },\n itemsHorizontal: {\n flexDirection: \"row\",\n },\n itemsVertical: {\n flexDirection: \"column\",\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Carousel.tsx"],"names":["React","StyleSheet","runOnJS","useDerivedValue","useAutoPlay","useCarouselController","useCommonVariables","useInitProps","useLayoutConfig","useOnProgressChange","usePropsErrorBoundary","useVisibleRanges","BaseLayout","ScrollViewGesture","CTX","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","loop","autoFillData","data","dataLength","rawData","rawDataLength","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffset","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"AAAA;AACA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,UAAT,QAA2B,cAA3B;AACA,SAASC,OAAT,EAAkBC,eAAlB,QAAyC,yBAAzC;AAEA,SAASC,WAAT,QAA4B,qBAA5B;AACA,SAASC,qBAAT,QAAsC,+BAAtC;AACA,SAASC,kBAAT,QAAmC,4BAAnC;AACA,SAASC,YAAT,QAA6B,sBAA7B;AACA,SAASC,eAAT,QAAgC,yBAAhC;AACA,SAASC,mBAAT,QAAoC,6BAApC;AACA,SAASC,qBAAT,QAAsC,+BAAtC;AACA,SAASC,gBAAT,QAAiC,0BAAjC;AACA,SAASC,UAAT,QAA2B,sBAA3B;AACA,SAASC,iBAAT,QAAkC,qBAAlC;AACA,SAASC,GAAT,QAAoB,SAApB;AAEA,SAASC,iCAAT,QAAkD,kCAAlD;AAEA,MAAMC,QAAQ,gBAAGhB,KAAK,CAACiB,UAAN,CACf,CAACC,MAAD,EAASC,GAAT,KAAiB;AACf,QAAMC,KAAK,GAAGb,YAAY,CAACW,MAAD,CAA1B;AAEA,QAAM;AACJG,IAAAA,MADI;AAEJC,IAAAA,IAFI;AAGJC,IAAAA,YAHI;AAIJ;AACAC,IAAAA,IALI;AAMJ;AACAC,IAAAA,UAPI;AAQJ;AACAC,IAAAA,OATI;AAUJ;AACAC,IAAAA,aAXI;AAYJC,IAAAA,IAZI;AAaJC,IAAAA,KAbI;AAcJC,IAAAA,KAdI;AAeJC,IAAAA,MAfI;AAgBJC,IAAAA,QAhBI;AAiBJC,IAAAA,QAjBI;AAkBJC,IAAAA,UAlBI;AAmBJC,IAAAA,eAnBI;AAoBJC,IAAAA,gBApBI;AAqBJC,IAAAA,uBArBI;AAsBJC,IAAAA,aAtBI;AAuBJC,IAAAA,UAvBI;AAwBJC,IAAAA,WAxBI;AAyBJC,IAAAA,YAzBI;AA0BJC,IAAAA,aA1BI;AA2BJC,IAAAA,gBA3BI;AA4BJC,IAAAA,eA5BI;AA6BJC,IAAAA;AA7BI,MA8BFzB,KA9BJ;AAgCA,QAAM0B,eAAe,GAAGxC,kBAAkB,CAACc,KAAD,CAA1C;AACA,QAAM;AAAE2B,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAA0BF,eAAhC;AAEA,QAAMG,OAAO,GAAG9C,eAAe,CAAC,MAAM;AACpC,UAAM+C,SAAS,GAAGH,IAAI,GAAGtB,UAAzB;AACA,UAAM0B,CAAC,GAAGH,aAAa,CAACI,KAAd,GAAsBF,SAAhC;AAEA,QAAI,CAAC5B,IAAL,EACE,OAAO0B,aAAa,CAACI,KAArB;AAEF,WAAOC,KAAK,CAACF,CAAD,CAAL,GAAW,CAAX,GAAeA,CAAtB;AACD,GAR8B,EAQ5B,CAAC7B,IAAD,EAAOyB,IAAP,EAAatB,UAAb,CAR4B,CAA/B;AAUAf,EAAAA,qBAAqB,CAAC,EAAE,GAAGU,KAAL;AAAYK,IAAAA;AAAZ,GAAD,CAArB;AACAhB,EAAAA,mBAAmB,CAAC;AAClBc,IAAAA,YADkB;AAElBD,IAAAA,IAFkB;AAGlByB,IAAAA,IAHkB;AAIlBE,IAAAA,OAJkB;AAKlBtB,IAAAA,aALkB;AAMlBgB,IAAAA;AANkB,GAAD,CAAnB;AASA,QAAMW,kBAAkB,GAAGjD,qBAAqB,CAAC;AAC/CiB,IAAAA,IAD+C;AAE/CyB,IAAAA,IAF+C;AAG/CtB,IAAAA,UAH+C;AAI/CF,IAAAA,YAJ+C;AAK/CyB,IAAAA,aAL+C;AAM/CV,IAAAA,aAN+C;AAO/CO,IAAAA,YAP+C;AAQ/CL,IAAAA,WAAW,EAAE,MAAMtC,OAAO,CAACqD,YAAD,CAAP,EAR4B;AAS/Cb,IAAAA,aAAa,EAAE,MAAM,CAAC,CAACA,aAAF,IAAmBxC,OAAO,CAACwC,aAAD,CAAP,EATO;AAU/Cc,IAAAA,QAAQ,EAAEnB;AAVqC,GAAD,CAAhD;AAaA,QAAM;AAAEoB,IAAAA,IAAF;AAAQC,IAAAA,IAAR;AAAcC,IAAAA,QAAd;AAAwBC,IAAAA,cAAxB;AAAwCC,IAAAA;AAAxC,MACIP,kBADV;AAGA,QAAM;AAAEQ,IAAAA,KAAK,EAAEC,aAAT;AAAwBC,IAAAA,KAAK,EAAEC;AAA/B,MAAiD7D,WAAW,CAAC;AACjE6B,IAAAA,QADiE;AAEjEG,IAAAA,gBAFiE;AAGjED,IAAAA,eAHiE;AAIjEmB,IAAAA;AAJiE,GAAD,CAAlE;;AAOA,QAAMC,YAAY,GAAGvD,KAAK,CAACkE,WAAN,CAAkB,MAAM;AAC3C,UAAMC,YAAY,GAAGC,IAAI,CAACC,KAAL,CAAWT,cAAc,EAAzB,CAArB;;AAEA,UAAMU,SAAS,GAAGvD,iCAAiC,CAAC;AAClDwD,MAAAA,KAAK,EAAEJ,YAD2C;AAElD1C,MAAAA,UAAU,EAAEE,aAFsC;AAGlDL,MAAAA,IAHkD;AAIlDC,MAAAA;AAJkD,KAAD,CAAnD;AAOA,QAAIkB,YAAJ,EACEA,YAAY,CAAC6B,SAAD,CAAZ;AAEF,QAAI9B,WAAJ,EACEA,WAAW,CAAC8B,SAAD,CAAX;AACH,GAfoB,EAelB,CACDhD,IADC,EAEDC,YAFC,EAGDI,aAHC,EAIDiC,cAJC,EAKDnB,YALC,EAMDD,WANC,CAfkB,CAArB;;AAwBA,QAAMgC,8BAA8B,GAAGxE,KAAK,CAACkE,WAAN,CAAkB,MAAM;AAC7DD,IAAAA,aAAa;AACbvB,IAAAA,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa;AACd,GAHsC,EAGpC,CAACA,aAAD,EAAgBuB,aAAhB,CAHoC,CAAvC;AAKA,QAAMQ,4BAA4B,GAAGzE,KAAK,CAACkE,WAAN,CAAkB,MAAM;AAC3DH,IAAAA,aAAa;;AACbR,IAAAA,YAAY;AACb,GAHoC,EAGlC,CAACA,YAAD,EAAeQ,aAAf,CAHkC,CAArC;AAKA,QAAMW,6BAA6B,GAAG1E,KAAK,CAACkE,WAAN,CAAkBD,aAAlB,EAAiC,CACrEA,aADqE,CAAjC,CAAtC;AAIA,QAAMU,2BAA2B,GAAG3E,KAAK,CAACkE,WAAN,CAAkBH,aAAlB,EAAiC,CACnEA,aADmE,CAAjC,CAApC;AAIA/D,EAAAA,KAAK,CAAC4E,mBAAN,CACEzD,GADF,EAEE,OAAO;AACLsC,IAAAA,IADK;AAELC,IAAAA,IAFK;AAGLG,IAAAA,eAHK;AAILF,IAAAA;AAJK,GAAP,CAFF,EAQE,CAACE,eAAD,EAAkBJ,IAAlB,EAAwBC,IAAxB,EAA8BC,QAA9B,CARF;AAWA,QAAMkB,aAAa,GAAGlE,gBAAgB,CAAC;AACrCmE,IAAAA,KAAK,EAAErD,UAD8B;AAErCsD,IAAAA,QAAQ,EAAEhC,IAF2B;AAGrCiC,IAAAA,WAAW,EAAEhC,aAHwB;AAIrCd,IAAAA;AAJqC,GAAD,CAAtC;AAOA,QAAM+C,YAAY,GAAGzE,eAAe,CAAC,EAAE,GAAGY,KAAL;AAAY2B,IAAAA;AAAZ,GAAD,CAApC;AAEA,QAAMmC,YAAY,GAAGlF,KAAK,CAACkE,WAAN,CACnB,CAACiB,IAAD,EAAYC,CAAZ,KAA0B;AACxB,UAAMd,SAAS,GAAGvD,iCAAiC,CAAC;AAClDwD,MAAAA,KAAK,EAAEa,CAD2C;AAElD3D,MAAAA,UAAU,EAAEE,aAFsC;AAGlDL,MAAAA,IAHkD;AAIlDC,MAAAA;AAJkD,KAAD,CAAnD;AAOA,wBACE,oBAAC,UAAD;AACE,MAAA,GAAG,EAAE6D,CADP;AAEE,MAAA,KAAK,EAAEA,CAFT;AAGE,MAAA,aAAa,EAAEnC,OAHjB;AAIE,MAAA,aAAa,EAAE4B,aAJjB;AAKE,MAAA,cAAc,EAAEjC,eAAe,IAAIqC;AALrC,OAOG;AAAA,UAAC;AAAEI,QAAAA;AAAF,OAAD;AAAA,aACC9C,UAAU,CAAC;AACT4C,QAAAA,IADS;AAETZ,QAAAA,KAAK,EAAED,SAFE;AAGTe,QAAAA;AAHS,OAAD,CADX;AAAA,KAPH,CADF;AAiBD,GA1BkB,EA2BnB,CACE/D,IADF,EAEEI,OAFF,EAGEuB,OAHF,EAIE4B,aAJF,EAKEtD,YALF,EAMEgB,UANF,EAOE0C,YAPF,EAQErC,eARF,CA3BmB,CAArB;AAuCA,sBACE,oBAAC,GAAD,CAAK,QAAL;AAAc,IAAA,KAAK,EAAE;AAAExB,MAAAA,KAAF;AAASkE,MAAAA,MAAM,EAAExC;AAAjB;AAArB,kBACE,oBAAC,iBAAD;AACE,IAAA,GAAG,EAAElB,IADP;AAEE,IAAA,IAAI,EAAEmB,IAFR;AAGE,IAAA,WAAW,EAAEC,aAHf;AAIE,IAAA,KAAK,EAAE,CACLuC,MAAM,CAACC,SADF,EAEL;AACE1D,MAAAA,KAAK,EAAEA,KAAK,IAAI,MADlB;AAEEC,MAAAA,MAAM,EAAEA,MAAM,IAAI;AAFpB,KAFK,EAMLF,KANK,EAOLG,QAAQ,GACJuD,MAAM,CAACE,aADH,GAEJF,MAAM,CAACG,eATN,CAJT;AAeE,IAAA,MAAM,EAAErE,MAfV;AAgBE,IAAA,aAAa,EAAEmD,8BAhBjB;AAiBE,IAAA,WAAW,EAAEC,4BAjBf;AAkBE,IAAA,YAAY,EAAEC,6BAlBhB;AAmBE,IAAA,UAAU,EAAEC;AAnBd,KAqBGnD,IAAI,CAACmE,GAAL,CAAST,YAAT,CArBH,CADF,CADF;AA2BD,CAlNc,CAAjB;AAqNA,eAAelE,QAAf;AAIA,MAAMuE,MAAM,GAAGtF,UAAU,CAAC2F,MAAX,CAAkB;AAC/BJ,EAAAA,SAAS,EAAE;AACTK,IAAAA,QAAQ,EAAE;AADD,GADoB;AAI/BH,EAAAA,eAAe,EAAE;AACfI,IAAAA,aAAa,EAAE;AADA,GAJc;AAO/BL,EAAAA,aAAa,EAAE;AACbK,IAAAA,aAAa,EAAE;AADF;AAPgB,CAAlB,CAAf","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport { runOnJS, useDerivedValue } from \"react-native-reanimated\";\n\nimport { useAutoPlay } from \"./hooks/useAutoPlay\";\nimport { useCarouselController } from \"./hooks/useCarouselController\";\nimport { useCommonVariables } from \"./hooks/useCommonVariables\";\nimport { useInitProps } from \"./hooks/useInitProps\";\nimport { useLayoutConfig } from \"./hooks/useLayoutConfig\";\nimport { useOnProgressChange } from \"./hooks/useOnProgressChange\";\nimport { usePropsErrorBoundary } from \"./hooks/usePropsErrorBoundary\";\nimport { useVisibleRanges } from \"./hooks/useVisibleRanges\";\nimport { BaseLayout } from \"./layouts/BaseLayout\";\nimport { ScrollViewGesture } from \"./ScrollViewGesture\";\nimport { CTX } from \"./store\";\nimport type { ICarouselInstance, TCarouselProps } from \"./types\";\nimport { computedRealIndexWithAutoFillData } from \"./utils/computedWithAutoFillData\";\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n loop,\n autoFillData,\n // Fill data with autoFillData\n data,\n // Length of fill data\n dataLength,\n // Raw data that has not been processed\n rawData,\n // Length of raw data\n rawDataLength,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffset } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffset.value % totalSize;\n\n if (!loop)\n return handlerOffset.value;\n\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary({ ...props, dataLength });\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawDataLength,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n dataLength,\n autoFillData,\n handlerOffset,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex }\n = carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem)\n onSnapToItem(realIndex);\n\n if (onScrollEnd)\n onScrollEnd(realIndex);\n }, [\n loop,\n autoFillData,\n rawDataLength,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, scrollTo],\n );\n\n const visibleRanges = useVisibleRanges({\n total: dataLength,\n viewSize: size,\n translation: handlerOffset,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffset={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ],\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <ScrollViewGesture\n key={mode}\n size={size}\n translation={handlerOffset}\n style={[\n styles.container,\n {\n width: width || \"100%\",\n height: height || \"100%\",\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n testID={testID}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n {data.map(renderLayout)}\n </ScrollViewGesture>\n </CTX.Provider>\n );\n },\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: \"hidden\",\n },\n itemsHorizontal: {\n flexDirection: \"row\",\n },\n itemsVertical: {\n flexDirection: \"column\",\n },\n});\n"]}
|
|
@@ -11,14 +11,14 @@ const IScrollViewGesture = props => {
|
|
|
11
11
|
const {
|
|
12
12
|
props: {
|
|
13
13
|
vertical,
|
|
14
|
-
data,
|
|
15
14
|
pagingEnabled,
|
|
16
15
|
snapEnabled,
|
|
17
16
|
panGestureHandlerProps,
|
|
18
17
|
loop: infinite,
|
|
19
18
|
scrollAnimationDuration,
|
|
20
19
|
withAnimation,
|
|
21
|
-
enabled
|
|
20
|
+
enabled,
|
|
21
|
+
dataLength
|
|
22
22
|
}
|
|
23
23
|
} = React.useContext(CTX);
|
|
24
24
|
const {
|
|
@@ -31,7 +31,7 @@ const IScrollViewGesture = props => {
|
|
|
31
31
|
onTouchBegin,
|
|
32
32
|
onTouchEnd
|
|
33
33
|
} = props;
|
|
34
|
-
const maxPage =
|
|
34
|
+
const maxPage = dataLength;
|
|
35
35
|
const isHorizontal = useDerivedValue(() => !vertical, [vertical]);
|
|
36
36
|
const touching = useSharedValue(false);
|
|
37
37
|
const scrollEndTranslation = useSharedValue(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScrollViewGesture.tsx"],"names":["React","PanGestureHandler","Animated","cancelAnimation","runOnJS","useAnimatedGestureHandler","useAnimatedReaction","useDerivedValue","useSharedValue","withDecay","Easing","CTX","dealWithAnimation","IScrollViewGesture","props","vertical","data","pagingEnabled","snapEnabled","panGestureHandlerProps","loop","infinite","scrollAnimationDuration","withAnimation","enabled","useContext","size","translation","testID","style","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","direction","computed","ceil","floor","page","finalPage","min","max","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","validStart","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","onEnd","velocityX","velocityY","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import React from \"react\";\nimport type { StyleProp, ViewStyle } from \"react-native\";\nimport type { PanGestureHandlerGestureEvent } from \"react-native-gesture-handler\";\nimport {\n PanGestureHandler,\n} from \"react-native-gesture-handler\";\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"./constants\";\nimport { CTX } from \"./store\";\nimport type { WithTimingAnimation } from \"./types\";\nimport { dealWithAnimation } from \"./utils/dealWithAnimation\";\n\ninterface GestureContext extends Record<string, unknown> {\n validStart: boolean\n panOffset: number\n max: number\n}\n\ninterface Props {\n size: number\n infinite?: boolean\n testID?: string\n style?: StyleProp<ViewStyle>\n onScrollBegin?: () => void\n onScrollEnd?: () => void\n onTouchBegin?: () => void\n onTouchEnd?: () => void\n translation: Animated.SharedValue<number>\n}\n\nconst IScrollViewGesture: React.FC<Props> = (props) => {\n const {\n props: {\n vertical,\n data,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = data.length;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n\n const _withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished)\n onFinished && runOnJS(onFinished)();\n },\n );\n },\n [scrollAnimationDuration, withAnimation],\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n \"worklet\";\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n if (!pagingEnabled) {\n /**\n * If enabled, releasing the touch will scroll to the nearest item.\n * valid when pagingEnabled=false\n */\n if (snapEnabled) {\n const nextPage\n = Math.round((origin + velocity * 0.4) / size) * size;\n\n translation.value = _withSpring(nextPage, onFinished);\n return;\n }\n translation.value = withDecay({\n velocity,\n deceleration: 0.999,\n });\n return;\n }\n\n const direction = -(scrollEndTranslation.value >= 0 ? 1 : -1);\n const computed = direction < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n let finalPage = page + direction;\n\n if (!infinite)\n finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));\n\n translation.value = _withSpring(-finalPage * size, onFinished);\n },\n [\n translation,\n scrollEndVelocity.value,\n pagingEnabled,\n size,\n scrollEndTranslation.value,\n infinite,\n _withSpring,\n snapEnabled,\n maxPage,\n ],\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching],\n );\n\n const activeDecay = React.useCallback(() => {\n \"worklet\";\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n isFinished => onFinish(isFinished as boolean),\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n \"worklet\";\n if (touching.value)\n return;\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite)\n translation.value = _withSpring(-((maxPage - 1) * size));\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n _withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled)\n resetBoundary();\n },\n [pagingEnabled, resetBoundary],\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n const panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (\n !infinite\n && (translation.value > 0 || translation.value < -ctx.max)\n ) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n\n translation.value = ctx.panOffset + panTranslation;\n },\n onEnd: (e) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n endWithSpring(onScrollEnd);\n\n if (!infinite)\n touching.value = false;\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ],\n );\n\n return (\n <PanGestureHandler\n {...panGestureHandlerProps}\n enabled={enabled}\n onGestureEvent={panGestureEventHandler}\n >\n <Animated.View\n testID={testID}\n style={style}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n {props.children}\n </Animated.View>\n </PanGestureHandler>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n"]}
|
|
1
|
+
{"version":3,"sources":["ScrollViewGesture.tsx"],"names":["React","PanGestureHandler","Animated","cancelAnimation","runOnJS","useAnimatedGestureHandler","useAnimatedReaction","useDerivedValue","useSharedValue","withDecay","Easing","CTX","dealWithAnimation","IScrollViewGesture","props","vertical","pagingEnabled","snapEnabled","panGestureHandlerProps","loop","infinite","scrollAnimationDuration","withAnimation","enabled","dataLength","useContext","size","translation","testID","style","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","direction","computed","ceil","floor","page","finalPage","min","max","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","validStart","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","onEnd","velocityX","velocityY","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import React from \"react\";\nimport type { StyleProp, ViewStyle } from \"react-native\";\nimport type { PanGestureHandlerGestureEvent } from \"react-native-gesture-handler\";\nimport {\n PanGestureHandler,\n} from \"react-native-gesture-handler\";\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"./constants\";\nimport { CTX } from \"./store\";\nimport type { WithTimingAnimation } from \"./types\";\nimport { dealWithAnimation } from \"./utils/dealWithAnimation\";\n\ninterface GestureContext extends Record<string, unknown> {\n validStart: boolean\n panOffset: number\n max: number\n}\n\ninterface Props {\n size: number\n infinite?: boolean\n testID?: string\n style?: StyleProp<ViewStyle>\n onScrollBegin?: () => void\n onScrollEnd?: () => void\n onTouchBegin?: () => void\n onTouchEnd?: () => void\n translation: Animated.SharedValue<number>\n}\n\nconst IScrollViewGesture: React.FC<Props> = (props) => {\n const {\n props: {\n vertical,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n dataLength,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = dataLength;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n\n const _withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished)\n onFinished && runOnJS(onFinished)();\n },\n );\n },\n [scrollAnimationDuration, withAnimation],\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n \"worklet\";\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n if (!pagingEnabled) {\n /**\n * If enabled, releasing the touch will scroll to the nearest item.\n * valid when pagingEnabled=false\n */\n if (snapEnabled) {\n const nextPage\n = Math.round((origin + velocity * 0.4) / size) * size;\n\n translation.value = _withSpring(nextPage, onFinished);\n return;\n }\n translation.value = withDecay({\n velocity,\n deceleration: 0.999,\n });\n return;\n }\n\n const direction = -(scrollEndTranslation.value >= 0 ? 1 : -1);\n const computed = direction < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n let finalPage = page + direction;\n\n if (!infinite)\n finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));\n\n translation.value = _withSpring(-finalPage * size, onFinished);\n },\n [\n translation,\n scrollEndVelocity.value,\n pagingEnabled,\n size,\n scrollEndTranslation.value,\n infinite,\n _withSpring,\n snapEnabled,\n maxPage,\n ],\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching],\n );\n\n const activeDecay = React.useCallback(() => {\n \"worklet\";\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n isFinished => onFinish(isFinished as boolean),\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n \"worklet\";\n if (touching.value)\n return;\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite)\n translation.value = _withSpring(-((maxPage - 1) * size));\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n _withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled)\n resetBoundary();\n },\n [pagingEnabled, resetBoundary],\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n const panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (\n !infinite\n && (translation.value > 0 || translation.value < -ctx.max)\n ) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n\n translation.value = ctx.panOffset + panTranslation;\n },\n onEnd: (e) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n endWithSpring(onScrollEnd);\n\n if (!infinite)\n touching.value = false;\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ],\n );\n\n return (\n <PanGestureHandler\n {...panGestureHandlerProps}\n enabled={enabled}\n onGestureEvent={panGestureEventHandler}\n >\n <Animated.View\n testID={testID}\n style={style}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n {props.children}\n </Animated.View>\n </PanGestureHandler>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n"]}
|
|
@@ -8,8 +8,8 @@ import { round } from "../utils/log";
|
|
|
8
8
|
export function useCarouselController(options) {
|
|
9
9
|
const {
|
|
10
10
|
size,
|
|
11
|
-
data,
|
|
12
11
|
loop,
|
|
12
|
+
dataLength,
|
|
13
13
|
handlerOffset,
|
|
14
14
|
withAnimation,
|
|
15
15
|
defaultIndex = 0,
|
|
@@ -17,10 +17,10 @@ export function useCarouselController(options) {
|
|
|
17
17
|
autoFillData
|
|
18
18
|
} = options;
|
|
19
19
|
const dataInfo = React.useMemo(() => ({
|
|
20
|
-
length:
|
|
21
|
-
disable: !
|
|
22
|
-
originalLength:
|
|
23
|
-
}), [
|
|
20
|
+
length: dataLength,
|
|
21
|
+
disable: !dataLength,
|
|
22
|
+
originalLength: dataLength
|
|
23
|
+
}), [dataLength]);
|
|
24
24
|
const index = useSharedValue(defaultIndex); // The Index displayed to the user
|
|
25
25
|
|
|
26
26
|
const sharedIndex = useRef(defaultIndex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","runOnJS","useAnimatedReaction","useSharedValue","Easing","computedRealIndexWithAutoFillData","convertToSharedIndex","dealWithAnimation","handlerOffsetDirection","round","useCarouselController","options","size","data","loop","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","realIndex","dataLength","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","direction","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { computedRealIndexWithAutoFillData, convertToSharedIndex } from \"../utils/computedWithAutoFillData\";\nimport { dealWithAnimation } from \"../utils/dealWithAnimation\";\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n data: TCarouselProps[\"data\"]\n autoFillData: TCarouselProps[\"autoFillData\"]\n handlerOffset: Animated.SharedValue<number>\n withAnimation?: TCarouselProps[\"withAnimation\"]\n duration?: number\n defaultIndex?: number\n onScrollBegin?: () => void\n onScrollEnd?: () => void\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number\n prev: (opts?: TCarouselActionOptions) => void\n next: (opts?: TCarouselActionOptions) => void\n getCurrentIndex: () => number\n scrollTo: (opts?: TCarouselActionOptions) => void\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffset,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data],\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop)\n return -Math.round(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffset,\n ],\n );\n\n const getCurrentIndex = React.useCallback(() => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: index.value,\n dataLength: dataInfo.originalLength,\n loop,\n autoFillData: autoFillData!,\n });\n\n return realIndex;\n }, [index, autoFillData, dataInfo, loop]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const callback = (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback,\n );\n },\n [duration, withAnimation, onScrollEnd],\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n \"worklet\";\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop\n = Math.abs(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffset,\n size,\n dataInfo.length,\n loop,\n scrollWithTiming,\n ],\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === \"number\" && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count)\n return;\n\n const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\n },\n [prev, next, to],\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","runOnJS","useAnimatedReaction","useSharedValue","Easing","computedRealIndexWithAutoFillData","convertToSharedIndex","dealWithAnimation","handlerOffsetDirection","round","useCarouselController","options","size","loop","dataLength","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","realIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","direction","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { computedRealIndexWithAutoFillData, convertToSharedIndex } from \"../utils/computedWithAutoFillData\";\nimport { dealWithAnimation } from \"../utils/dealWithAnimation\";\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n dataLength: number\n autoFillData: TCarouselProps[\"autoFillData\"]\n handlerOffset: Animated.SharedValue<number>\n withAnimation?: TCarouselProps[\"withAnimation\"]\n duration?: number\n defaultIndex?: number\n onScrollBegin?: () => void\n onScrollEnd?: () => void\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number\n prev: (opts?: TCarouselActionOptions) => void\n next: (opts?: TCarouselActionOptions) => void\n getCurrentIndex: () => number\n scrollTo: (opts?: TCarouselActionOptions) => void\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n loop,\n dataLength,\n handlerOffset,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: dataLength,\n disable: !dataLength,\n originalLength: dataLength,\n }),\n [dataLength],\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop)\n return -Math.round(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffset,\n ],\n );\n\n const getCurrentIndex = React.useCallback(() => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: index.value,\n dataLength: dataInfo.originalLength,\n loop,\n autoFillData: autoFillData!,\n });\n\n return realIndex;\n }, [index, autoFillData, dataInfo, loop]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const callback = (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback,\n );\n },\n [duration, withAnimation, onScrollEnd],\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n \"worklet\";\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop\n = Math.abs(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffset,\n size,\n dataInfo.length,\n loop,\n scrollWithTiming,\n ],\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === \"number\" && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count)\n return;\n\n const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\n },\n [prev, next, to],\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
|
|
@@ -7,28 +7,28 @@ export function useCommonVariables(props) {
|
|
|
7
7
|
vertical,
|
|
8
8
|
height,
|
|
9
9
|
width,
|
|
10
|
-
|
|
10
|
+
dataLength,
|
|
11
11
|
defaultIndex,
|
|
12
12
|
defaultScrollOffsetValue,
|
|
13
13
|
loop
|
|
14
14
|
} = props;
|
|
15
15
|
const size = vertical ? height : width;
|
|
16
|
-
const validLength =
|
|
16
|
+
const validLength = dataLength - 1;
|
|
17
17
|
const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);
|
|
18
18
|
|
|
19
19
|
const _handlerOffset = useSharedValue(defaultHandlerOffsetValue);
|
|
20
20
|
|
|
21
21
|
const handlerOffset = defaultScrollOffsetValue !== null && defaultScrollOffsetValue !== void 0 ? defaultScrollOffsetValue : _handlerOffset;
|
|
22
|
-
const prevDataLength = useSharedValue(
|
|
22
|
+
const prevDataLength = useSharedValue(dataLength);
|
|
23
23
|
React.useEffect(() => {
|
|
24
24
|
handlerOffset.value = defaultHandlerOffsetValue;
|
|
25
25
|
}, [vertical, handlerOffset, defaultHandlerOffsetValue]);
|
|
26
26
|
useAnimatedReaction(() => {
|
|
27
27
|
const previousLength = prevDataLength.value;
|
|
28
|
-
const currentLength =
|
|
28
|
+
const currentLength = dataLength;
|
|
29
29
|
const isLengthChanged = previousLength !== currentLength;
|
|
30
30
|
const shouldComputed = isLengthChanged && loop;
|
|
31
|
-
if (shouldComputed) prevDataLength.value =
|
|
31
|
+
if (shouldComputed) prevDataLength.value = dataLength;
|
|
32
32
|
return {
|
|
33
33
|
shouldComputed,
|
|
34
34
|
previousLength,
|
|
@@ -52,7 +52,7 @@ export function useCommonVariables(props) {
|
|
|
52
52
|
handlerOffset: handlerOffset.value
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
|
-
}, [
|
|
55
|
+
}, [dataLength, loop]);
|
|
56
56
|
return {
|
|
57
57
|
size,
|
|
58
58
|
validLength,
|