react-native-reanimated-carousel
Version:
Simple carousel component.fully implemented using Reanimated 2.Infinitely scrolling, very smooth.
2 lines • 17.1 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:true});exports.useCarouselController=useCarouselController;var _react=_interopRequireWildcard(require("react"));var _reactNativeReanimated=require("react-native-reanimated");var _constants=require("../constants");var _computedWithAutoFillData=require("../utils/computedWithAutoFillData");var _dealWithAnimation=require("../utils/dealWithAnimation");var _handlerOffsetDirection=require("../utils/handlerOffsetDirection");var _log=require("../utils/log");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 _worklet_11883385583138_init_data={code:"function anonymous() {\n const {\n handlerOffset,\n round,\n size,\n dataInfo,\n convertToSharedIndex,\n loop,\n autoFillData\n } = this._closure;\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 0;\n const i = isPositive ? Math.abs(toInt) : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n const newSharedIndexValue = convertToSharedIndex({\n loop: loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData,\n index: i\n });\n return {\n i: i,\n newSharedIndexValue: newSharedIndexValue\n };\n}",location:"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx",sourceMap:"{\"version\":3,\"names\":[\"anonymous\",\"handlerOffset\",\"round\",\"size\",\"dataInfo\",\"convertToSharedIndex\",\"loop\",\"autoFillData\",\"_closure\",\"handlerOffsetValue\",\"value\",\"toInt\",\"length\",\"isPositive\",\"i\",\"Math\",\"abs\",\"newSharedIndexValue\",\"rawDataLength\",\"originalLength\",\"index\"],\"sources\":[\"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx\"],\"mappings\":\"AAmFI,SAAAA,SAAMA,CAAA;EAAA;IAAAC,aAAA;IAAAC,KAAA;IAAAC,IAAA;IAAAC,QAAA;IAAAC,oBAAA;IAAAC,IAAA;IAAAC;EAAA,SAAAC,QAAA;EACJ,MAAMC,kBAAkB,GAAGR,aAAa,CAACS,KAAK;EAC9C,MAAMC,KAAK,GAAGT,KAAK,CAACO,kBAAkB,GAAGN,IAAI,CAAC,GAAGC,QAAQ,CAACQ,MAAM;EAChE,MAAMC,UAAU,GAAGJ,kBAAkB,IAAI,CAAC;EAC1C,MAAMK,CAAC,GAAGD,UAAU,GAChBE,IAAI,CAACC,GAAG,CAACL,KAAK,CAAC,GACfI,IAAI,CAACC,GAAG,CAACL,KAAK,GAAG,CAAC,GAAGP,QAAQ,CAACQ,MAAM,GAAGD,KAAK,GAAG,CAAC,CAAC;EAErD,MAAMM,mBAAmB,GAAGZ,oBAAoB,CAAC;IAC/CC,IAAI,EAAJA,IAAI;IACJY,aAAa,EAAEd,QAAQ,CAACe,cAAc;IACtCZ,YAAY,EAAEA,YAAa;IAC3Ba,KAAK,EAAEN;EACT,CAAC,CAAC;EAEF,OAAO;IACLA,CAAC,EAADA,CAAC;IACDG,mBAAA,EAAAA;EACF,CAAC;AACH\"}"};var _worklet_6063199752963_init_data={code:"function anonymous({\n i: i,\n newSharedIndexValue: newSharedIndexValue\n}) {\n const {\n index,\n runOnJS,\n setSharedIndex\n } = this._closure;\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n}",location:"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx",sourceMap:"{\"version\":3,\"names\":[\"anonymous\",\"i\",\"newSharedIndexValue\",\"index\",\"runOnJS\",\"setSharedIndex\",\"_closure\",\"value\"],\"sources\":[\"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx\"],\"mappings\":\"AAuGI,SAACA,UAAA;EAAEC,CAAC,EAADA,CAAC;EAAEC,mBAAA,EAAAA;AAAoB,CAAC,EAAK;EAAA;IAAAC,KAAA;IAAAC,OAAA;IAAAC;EAAA,SAAAC,QAAA;EAC9BH,KAAK,CAACI,KAAK,GAAGN,CAAC;EACfG,OAAO,CAACC,cAAc,CAAC,CAACH,mBAAmB,CAAC;AAC9C\"}"};var _worklet_8876815392037_init_data={code:"function anonymous(toValue, onFinished) {\n const {\n runOnJS,\n onScrollEnd,\n duration,\n Easing,\n dealWithAnimation,\n withAnimation\n } = this._closure;\n var _withAnimation;\n const callback = function (isFinished) {\n \"worklet\";\n\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n const defaultWithAnimation = {\n type: \"timing\",\n config: {\n duration: duration,\n easing: Easing.easeOutQuart\n }\n };\n return dealWithAnimation((_withAnimation = withAnimation) !== null && _withAnimation !== void 0 ? _withAnimation : defaultWithAnimation)(toValue, callback);\n}",location:"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx",sourceMap:"{\"version\":3,\"names\":[\"anonymous\",\"toValue\",\"onFinished\",\"runOnJS\",\"onScrollEnd\",\"duration\",\"Easing\",\"dealWithAnimation\",\"withAnimation\",\"_closure\",\"_withAnimation\",\"callback\",\"isFinished\",\"defaultWithAnimation\",\"type\",\"config\",\"easing\",\"easeOutQuart\"],\"sources\":[\"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx\"],\"mappings\":\"AA+II,SAACA,SAAeA,CAAAC,OAAE,EAAAC,UAA4B;EAAA;IAAAC,OAAA;IAAAC,WAAA;IAAAC,QAAA;IAAAC,MAAA;IAAAC,iBAAA;IAAAC;EAAA,SAAAC,QAAA;EAAA,IAAAC,cAAA;EAE5C,MAAMC,QAAQ,GAAG,SAAAA,CAACC,UAAmB,EAAK;IACxC,SAAS;;IACT,IAAIA,UAAU,EAAE;MACdT,OAAO,CAACC,WAAW,CAAC,CAAC,CAAC;MACtBF,UAAU,IAAIC,OAAO,CAACD,UAAU,CAAC,CAAC,CAAC;IACrC;EACF,CAAC;EAED,MAAMW,oBAAyC,GAAG;IAChDC,IAAI,EAAE,QAAQ;IACdC,MAAM,EAAE;MAAEV,QAAQ,EAARA,QAAQ;MAAEW,MAAM,EAAEV,MAAM,CAACW;IAAa;EAClD,CAAC;EAED,OAAOV,iBAAiB,EAAAG,cAAA,GAACF,aAAa,cAAAE,cAAA,cAAAA,cAAA,GAAIG,oBAAoB,CAAC,CAC7DZ,OAAO,EACPU,QACF,CAAC;AACH\"}"};var _worklet_1856840040824_init_data={code:"function anonymous(isFinished) {\n const {\n runOnJS,\n onScrollEnd,\n onFinished\n } = this._closure;\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n}",location:"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx",sourceMap:"{\"version\":3,\"names\":[\"anonymous\",\"isFinished\",\"runOnJS\",\"onScrollEnd\",\"onFinished\",\"_closure\"],\"sources\":[\"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx\"],\"mappings\":\"AAiJuB,SAACA,UAAAC,UAAwB;EAAA;IAAAC,OAAA;IAAAC,WAAA;IAAAC;EAAA,SAAAC,QAAA;EAExC,IAAIJ,UAAU,EAAE;IACdC,OAAO,CAACC,WAAW,CAAC,CAAC,CAAC;IACtBC,UAAU,IAAIF,OAAO,CAACE,UAAU,CAAC,CAAC,CAAC;EACrC;AACF\"}"};var _worklet_7037612364285_init_data={code:"function anonymous(opts = {}) {\n const {\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n currentFixedPage,\n handlerOffset,\n scrollWithTiming,\n size\n } = this._closure;\n var _onScrollBegin;\n const {\n count = 1,\n animated = true,\n onFinished: onFinished\n } = opts;\n if (!canSliding() || !loop && index.value >= dataInfo.length - 1) return;\n (_onScrollBegin = onScrollBegin) === null || _onScrollBegin === void 0 ? void 0 : _onScrollBegin();\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n if (animated) {\n handlerOffset.value = scrollWithTiming(-nextPage * size, onFinished);\n } else {\n handlerOffset.value = -nextPage * size;\n onFinished === null || onFinished === void 0 ? void 0 : onFinished();\n }\n}",location:"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx",sourceMap:"{\"version\":3,\"names\":[\"anonymous\",\"opts\",\"canSliding\",\"loop\",\"index\",\"dataInfo\",\"onScrollBegin\",\"currentFixedPage\",\"handlerOffset\",\"scrollWithTiming\",\"size\",\"_closure\",\"_onScrollBegin\",\"count\",\"animated\",\"onFinished\",\"value\",\"length\",\"nextPage\"],\"sources\":[\"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx\"],\"mappings\":\"AAuKI,SAACA,SAAgCA,CAACC,IAAK;EAAA;IAAAC,UAAA;IAAAC,IAAA;IAAAC,KAAA;IAAAC,QAAA;IAAAC,aAAA;IAAAC,gBAAA;IAAAC,aAAA;IAAAC,gBAAA;IAAAC;EAAA,SAAAC,QAAA;EAAA,IAAAC,cAAA;EAErC,MAAM;IAAEC,KAAK,GAAG,CAAC;IAAEC,QAAQ,GAAG,IAAI;IAAEC,UAAA,EAAAA;EAAW,CAAC,GAAGd,IAAI;EACvD,IAAI,CAACC,UAAU,CAAC,CAAC,IAAK,CAACC,IAAI,IAAIC,KAAK,CAACY,KAAK,IAAIX,QAAQ,CAACY,MAAM,GAAG,CAAE,EAChE;EAEF,CAAAL,cAAA,GAAAN,aAAa,cAAAM,cAAA,uBAAbA,cAAA,CAAgB,CAAC;EAEjB,MAAMM,QAAQ,GAAGX,gBAAgB,CAAC,CAAC,GAAGM,KAAK;EAC3CT,KAAK,CAACY,KAAK,GAAGE,QAAQ;EAEtB,IAAIJ,QAAQ,EAAE;IACZN,aAAa,CAACQ,KAAK,GAAGP,gBAAgB,CACpC,CAACS,QAAQ,GAAGR,IAAI,EAChBK,UACF,CAAQ;EACV,CAAC,MACI;IACHP,aAAa,CAACQ,KAAK,GAAG,CAACE,QAAQ,GAAGR,IAAI;IACtCK,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAG,CAAC;EAChB;AACF\"}"};function useCarouselController(options){var size=options.size,loop=options.loop,dataLength=options.dataLength,handlerOffset=options.handlerOffset,withAnimation=options.withAnimation,_options$defaultIndex=options.defaultIndex,defaultIndex=_options$defaultIndex===void 0?0:_options$defaultIndex,duration=options.duration,autoFillData=options.autoFillData;var dataInfo=_react.default.useMemo(function(){return{length:dataLength,disable:!dataLength,originalLength:dataLength};},[dataLength]);var index=(0,_reactNativeReanimated.useSharedValue)(defaultIndex);var sharedIndex=(0,_react.useRef)(defaultIndex);var sharedPreIndex=(0,_react.useRef)(defaultIndex);var currentFixedPage=_react.default.useCallback(function(){if(loop)return-Math.round(handlerOffset.value/size);var fixed=handlerOffset.value/size%dataInfo.length;return Math.round(handlerOffset.value<=0?Math.abs(fixed):Math.abs(fixed>0?dataInfo.length-fixed:0));},[handlerOffset,dataInfo,size,loop]);function setSharedIndex(newSharedIndex){sharedIndex.current=newSharedIndex;}(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _e=[new global.Error(),-8,-27];var _f=function _f(){var handlerOffsetValue=handlerOffset.value;var toInt=(0,_log.round)(handlerOffsetValue/size)%dataInfo.length;var isPositive=handlerOffsetValue<=0;var i=isPositive?Math.abs(toInt):Math.abs(toInt>0?dataInfo.length-toInt:0);var newSharedIndexValue=(0,_computedWithAutoFillData.convertToSharedIndex)({loop:loop,rawDataLength:dataInfo.originalLength,autoFillData:autoFillData,index:i});return{i:i,newSharedIndexValue:newSharedIndexValue};};_f._closure={handlerOffset:handlerOffset,round:_log.round,size:size,dataInfo:dataInfo,convertToSharedIndex:_computedWithAutoFillData.convertToSharedIndex,loop:loop,autoFillData:autoFillData};_f.__initData=_worklet_11883385583138_init_data;_f.__workletHash=11883385583138;_f.__stackDetails=_e;_f.__version="3.3.0";return _f;}(),function(){var _e=[new global.Error(),-4,-27];var _f=function _f(_ref){var i=_ref.i,newSharedIndexValue=_ref.newSharedIndexValue;index.value=i;(0,_reactNativeReanimated.runOnJS)(setSharedIndex)(newSharedIndexValue);};_f._closure={index:index,runOnJS:_reactNativeReanimated.runOnJS,setSharedIndex:setSharedIndex};_f.__initData=_worklet_6063199752963_init_data;_f.__workletHash=6063199752963;_f.__stackDetails=_e;_f.__version="3.3.0";return _f;}(),[sharedPreIndex,sharedIndex,size,dataInfo,index,loop,autoFillData,handlerOffset]);var getCurrentIndex=_react.default.useCallback(function(){var realIndex=(0,_computedWithAutoFillData.computedRealIndexWithAutoFillData)({index:index.value,dataLength:dataInfo.originalLength,loop:loop,autoFillData:autoFillData});return realIndex;},[index,autoFillData,dataInfo,loop]);var canSliding=_react.default.useCallback(function(){return!dataInfo.disable;},[dataInfo]);var onScrollEnd=_react.default.useCallback(function(){options.onScrollEnd==null?void 0:options.onScrollEnd();},[options]);var onScrollBegin=_react.default.useCallback(function(){options.onScrollBegin==null?void 0:options.onScrollBegin();},[options]);var scrollWithTiming=_react.default.useCallback(function(){var _e=[new global.Error(),-7,-27];var _f=function _f(toValue,onFinished){var callback=function(){var _e=[new global.Error(),-4,-27];var _f=function _f(isFinished){if(isFinished){(0,_reactNativeReanimated.runOnJS)(onScrollEnd)();onFinished&&(0,_reactNativeReanimated.runOnJS)(onFinished)();}};_f._closure={runOnJS:_reactNativeReanimated.runOnJS,onScrollEnd:onScrollEnd,onFinished:onFinished};_f.__initData=_worklet_1856840040824_init_data;_f.__workletHash=1856840040824;_f.__stackDetails=_e;_f.__version="3.3.0";return _f;}();var defaultWithAnimation={type:"timing",config:{duration:duration,easing:_constants.Easing.easeOutQuart}};return(0,_dealWithAnimation.dealWithAnimation)(withAnimation!=null?withAnimation:defaultWithAnimation)(toValue,callback);};_f._closure={runOnJS:_reactNativeReanimated.runOnJS,onScrollEnd:onScrollEnd,duration:duration,Easing:_constants.Easing,dealWithAnimation:_dealWithAnimation.dealWithAnimation,withAnimation:withAnimation};_f.__initData=_worklet_8876815392037_init_data;_f.__workletHash=8876815392037;_f.__stackDetails=_e;_f.__version="3.3.0";return _f;}(),[duration,withAnimation,onScrollEnd]);var next=_react.default.useCallback(function(){var _e=[new global.Error(),-10,-27];var _f=function _f(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _opts$count=opts.count,count=_opts$count===void 0?1:_opts$count,_opts$animated=opts.animated,animated=_opts$animated===void 0?true:_opts$animated,onFinished=opts.onFinished;if(!canSliding()||!loop&&index.value>=dataInfo.length-1)return;onScrollBegin==null?void 0:onScrollBegin();var nextPage=currentFixedPage()+count;index.value=nextPage;if(animated){handlerOffset.value=scrollWithTiming(-nextPage*size,onFinished);}else{handlerOffset.value=-nextPage*size;onFinished==null?void 0:onFinished();}};_f._closure={canSliding:canSliding,loop:loop,index:index,dataInfo:dataInfo,onScrollBegin:onScrollBegin,currentFixedPage:currentFixedPage,handlerOffset:handlerOffset,scrollWithTiming:scrollWithTiming,size:size};_f.__initData=_worklet_7037612364285_init_data;_f.__workletHash=7037612364285;_f.__stackDetails=_e;_f.__version="3.3.0";return _f;}(),[canSliding,loop,index,dataInfo,onScrollBegin,handlerOffset,size,scrollWithTiming,currentFixedPage]);var prev=_react.default.useCallback(function(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _opts$count2=opts.count,count=_opts$count2===void 0?1:_opts$count2,_opts$animated2=opts.animated,animated=_opts$animated2===void 0?true:_opts$animated2,onFinished=opts.onFinished;if(!canSliding()||!loop&&index.value<=0)return;onScrollBegin==null?void 0:onScrollBegin();var prevPage=currentFixedPage()-count;index.value=prevPage;if(animated){handlerOffset.value=scrollWithTiming(-prevPage*size,onFinished);}else{handlerOffset.value=-prevPage*size;onFinished==null?void 0:onFinished();}},[canSliding,loop,index,onScrollBegin,handlerOffset,size,scrollWithTiming,currentFixedPage]);var to=_react.default.useCallback(function(opts){var i=opts.i,_opts$animated3=opts.animated,animated=_opts$animated3===void 0?false:_opts$animated3,onFinished=opts.onFinished;if(i===index.value)return;if(!canSliding())return;onScrollBegin==null?void 0:onScrollBegin();var direction=(0,_handlerOffsetDirection.handlerOffsetDirection)(handlerOffset);var offset=i*size*direction;var totalSize=dataInfo.length*size;var isCloseToNextLoop=false;if(loop){isCloseToNextLoop=Math.abs(handlerOffset.value%totalSize)/totalSize>=0.5;}var finalOffset=(Math.floor(Math.abs(handlerOffset.value/totalSize))+(isCloseToNextLoop?1:0))*totalSize*direction+offset;if(animated){index.value=i;handlerOffset.value=scrollWithTiming(finalOffset,onFinished);}else{handlerOffset.value=finalOffset;index.value=i;onFinished==null?void 0:onFinished();}},[index,canSliding,onScrollBegin,handlerOffset,size,dataInfo.length,loop,scrollWithTiming]);var scrollTo=_react.default.useCallback(function(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var i=opts.index,count=opts.count,_opts$animated4=opts.animated,animated=_opts$animated4===void 0?false:_opts$animated4,onFinished=opts.onFinished;if(typeof i==="number"&&i>-1){to({i:i,animated:animated,onFinished:onFinished});return;}if(!count)return;var n=Math.round(count);if(n<0)prev({count:Math.abs(n),animated:animated,onFinished:onFinished});else next({count:n,animated:animated,onFinished:onFinished});},[prev,next,to]);return{next:next,prev:prev,scrollTo:scrollTo,getCurrentIndex:getCurrentIndex,getSharedIndex:function getSharedIndex(){return sharedIndex.current;}};}
//# sourceMappingURL=useCarouselController.js.map