react-navigation-reanimated-top-tabs 0.7.0 → 0.9.0
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/components/ReanimatedTopTab/AnimationHelper.js +21 -26
- package/lib/commonjs/components/ReanimatedTopTab/AnimationHelper.js.map +1 -1
- package/lib/commonjs/components/ReanimatedTopTab/ReanimatedTabView.js +13 -12
- package/lib/commonjs/components/ReanimatedTopTab/ReanimatedTabView.js.map +1 -1
- package/lib/commonjs/components/elements/TabBarBaseComponent.js +42 -25
- package/lib/commonjs/components/elements/TabBarBaseComponent.js.map +1 -1
- package/lib/commonjs/components/elements/TabBarBaseItem.js +55 -0
- package/lib/commonjs/components/elements/TabBarBaseItem.js.map +1 -0
- package/lib/commonjs/components/elements/TabBarLabelBaseComponent.js +3 -3
- package/lib/commonjs/components/elements/TabBarLabelBaseComponent.js.map +1 -1
- package/lib/commonjs/components/wrappers/GestureWrapper.js +40 -11
- package/lib/commonjs/components/wrappers/GestureWrapper.js.map +1 -1
- package/lib/commonjs/components/wrappers/SectionList.js +72 -0
- package/lib/commonjs/components/wrappers/SectionList.js.map +1 -0
- package/lib/commonjs/context/Context.hooks.js +22 -17
- package/lib/commonjs/context/Context.hooks.js.map +1 -1
- package/lib/commonjs/context/Context.js +11 -8
- package/lib/commonjs/context/Context.js.map +1 -1
- package/lib/commonjs/hooks/useHeader.js +2 -10
- package/lib/commonjs/hooks/useHeader.js.map +1 -1
- package/lib/commonjs/hooks/useTabOffset.js +2 -2
- package/lib/commonjs/hooks/useTabOffset.js.map +1 -1
- package/lib/commonjs/index.js +2 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/navigator/createReanimatedTopTabNavigator.js +27 -23
- package/lib/commonjs/navigator/createReanimatedTopTabNavigator.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/components/ReanimatedTopTab/AnimationHelper.js +23 -28
- package/lib/module/components/ReanimatedTopTab/AnimationHelper.js.map +1 -1
- package/lib/module/components/ReanimatedTopTab/ReanimatedTabView.js +14 -13
- package/lib/module/components/ReanimatedTopTab/ReanimatedTabView.js.map +1 -1
- package/lib/module/components/elements/TabBarBaseComponent.js +44 -27
- package/lib/module/components/elements/TabBarBaseComponent.js.map +1 -1
- package/lib/module/components/elements/TabBarBaseItem.js +48 -0
- package/lib/module/components/elements/TabBarBaseItem.js.map +1 -0
- package/lib/module/components/elements/TabBarLabelBaseComponent.js +3 -3
- package/lib/module/components/elements/TabBarLabelBaseComponent.js.map +1 -1
- package/lib/module/components/wrappers/GestureWrapper.js +41 -12
- package/lib/module/components/wrappers/GestureWrapper.js.map +1 -1
- package/lib/module/components/wrappers/SectionList.js +66 -0
- package/lib/module/components/wrappers/SectionList.js.map +1 -0
- package/lib/module/context/Context.hooks.js +22 -17
- package/lib/module/context/Context.hooks.js.map +1 -1
- package/lib/module/context/Context.js +11 -8
- package/lib/module/context/Context.js.map +1 -1
- package/lib/module/hooks/useHeader.js +3 -11
- package/lib/module/hooks/useHeader.js.map +1 -1
- package/lib/module/hooks/useTabOffset.js +2 -2
- package/lib/module/hooks/useTabOffset.js.map +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/navigator/createReanimatedTopTabNavigator.js +28 -24
- package/lib/module/navigator/createReanimatedTopTabNavigator.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/components/ReanimatedTopTab/AnimationHelper.d.ts.map +1 -1
- package/lib/typescript/src/components/ReanimatedTopTab/ReanimatedTabView.d.ts +2 -1
- package/lib/typescript/src/components/ReanimatedTopTab/ReanimatedTabView.d.ts.map +1 -1
- package/lib/typescript/src/components/ReanimatedTopTab/types.d.ts +3 -7
- package/lib/typescript/src/components/ReanimatedTopTab/types.d.ts.map +1 -1
- package/lib/typescript/src/components/elements/TabBarBaseComponent.d.ts +1 -1
- package/lib/typescript/src/components/elements/TabBarBaseComponent.d.ts.map +1 -1
- package/lib/typescript/src/components/elements/TabBarBaseItem.d.ts +12 -0
- package/lib/typescript/src/components/elements/TabBarBaseItem.d.ts.map +1 -0
- package/lib/typescript/src/components/wrappers/GestureWrapper.d.ts +2 -1
- package/lib/typescript/src/components/wrappers/GestureWrapper.d.ts.map +1 -1
- package/lib/typescript/src/components/wrappers/SectionList.d.ts +3 -0
- package/lib/typescript/src/components/wrappers/SectionList.d.ts.map +1 -0
- package/lib/typescript/src/context/Context.d.ts.map +1 -1
- package/lib/typescript/src/context/Context.hooks.d.ts +4 -3
- package/lib/typescript/src/context/Context.hooks.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useHeader.d.ts +0 -6
- package/lib/typescript/src/hooks/useHeader.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useScreenProperties.d.ts +1 -1
- package/lib/typescript/src/index.d.ts +3 -8
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/navigator/createReanimatedTopTabNavigator.d.ts +1 -1
- package/lib/typescript/src/navigator/createReanimatedTopTabNavigator.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +11 -5
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/ReanimatedTopTab/AnimationHelper.ts +24 -32
- package/src/components/ReanimatedTopTab/ReanimatedTabView.tsx +19 -17
- package/src/components/ReanimatedTopTab/types.ts +3 -5
- package/src/components/elements/TabBarBaseComponent.tsx +47 -36
- package/src/components/elements/TabBarBaseItem.tsx +76 -0
- package/src/components/elements/TabBarLabelBaseComponent.tsx +3 -3
- package/src/components/wrappers/GestureWrapper.tsx +41 -14
- package/src/components/wrappers/SectionList.tsx +75 -0
- package/src/context/Context.hooks.ts +26 -16
- package/src/context/Context.tsx +8 -5
- package/src/hooks/useHeader.ts +4 -22
- package/src/hooks/useTabOffset.ts +2 -2
- package/src/index.tsx +2 -0
- package/src/navigator/createReanimatedTopTabNavigator.tsx +31 -26
- package/src/types.ts +21 -5
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
4
4
|
import { StyleSheet, useWindowDimensions, View } from 'react-native';
|
|
5
5
|
import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
6
|
-
import Reanimated, {
|
|
6
|
+
import Reanimated, { interpolate, LinearTransition, runOnJS, runOnUI, useAnimatedReaction, useAnimatedStyle, useSharedValue } from 'react-native-reanimated';
|
|
7
|
+
import { useTabContext } from '../../hooks/useTabContext';
|
|
7
8
|
import { AnimationHelper } from './AnimationHelper';
|
|
8
9
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
10
|
export const ReanimatedTabView = /*#__PURE__*/React.memo(({
|
|
@@ -11,22 +12,22 @@ export const ReanimatedTabView = /*#__PURE__*/React.memo(({
|
|
|
11
12
|
lazy = false,
|
|
12
13
|
navigationState,
|
|
13
14
|
percentageTrigger = 0.4,
|
|
14
|
-
positionInterpolation,
|
|
15
15
|
renderScene,
|
|
16
16
|
renderTabBar,
|
|
17
|
-
navigate
|
|
17
|
+
navigate,
|
|
18
|
+
screenOptions
|
|
18
19
|
}) => {
|
|
19
20
|
const {
|
|
20
21
|
width
|
|
21
22
|
} = useWindowDimensions();
|
|
22
23
|
const loadedScreens = useRef([navigationState.routes[navigationState.index]]);
|
|
23
24
|
const scrollPosition = useSharedValue(navigationState.index);
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
25
|
+
const {
|
|
26
|
+
positionX
|
|
27
|
+
} = useTabContext();
|
|
28
|
+
useAnimatedReaction(() => scrollPosition.value, value => {
|
|
29
|
+
positionX.value = interpolate(value, navigationState.routes.map((_, i) => i * -width), navigationState.routes.map((_, i) => i), 'clamp');
|
|
30
|
+
});
|
|
30
31
|
const _navigate = index => {
|
|
31
32
|
scrollPosition.value = AnimationHelper.animation(-index * width);
|
|
32
33
|
navigate(index);
|
|
@@ -53,10 +54,10 @@ export const ReanimatedTabView = /*#__PURE__*/React.memo(({
|
|
|
53
54
|
scrollPosition.value = AnimationHelper.animation(state.value);
|
|
54
55
|
_navigationState.value.index = state.index;
|
|
55
56
|
runOnJS(navigate)(state.index);
|
|
56
|
-
}), [minimumValueToChangeView, width
|
|
57
|
+
}), [minimumValueToChangeView, width]);
|
|
57
58
|
const scrollPositionStyle = useAnimatedStyle(() => ({
|
|
58
59
|
transform: [{
|
|
59
|
-
translateX: interpolate(scrollPosition.value, [-width * (navigationState.routes.length - 1), 0], [-width * (navigationState.routes.length - 1), 0],
|
|
60
|
+
translateX: interpolate(scrollPosition.value, [-width * (navigationState.routes.length - 1), 0], [-width * (navigationState.routes.length - 1), 0], 'clamp')
|
|
60
61
|
}]
|
|
61
62
|
}));
|
|
62
63
|
const jumpTo = React.useCallback(key => {
|
|
@@ -105,8 +106,8 @@ export const ReanimatedTabView = /*#__PURE__*/React.memo(({
|
|
|
105
106
|
style: defaultStyles.flex,
|
|
106
107
|
children: [renderTabBar ? renderTabBar({
|
|
107
108
|
navigationState,
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
navigate: _navigate,
|
|
110
|
+
screenOptions
|
|
110
111
|
}) : null, /*#__PURE__*/_jsx(GestureDetector, {
|
|
111
112
|
gesture: panGesture,
|
|
112
113
|
children: /*#__PURE__*/_jsx(Reanimated.View, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","GestureHandlerRootView","Reanimated","
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","GestureHandlerRootView","Reanimated","interpolate","LinearTransition","runOnJS","runOnUI","useAnimatedReaction","useAnimatedStyle","useSharedValue","useTabContext","AnimationHelper","jsx","_jsx","jsxs","_jsxs","ReanimatedTabView","memo","LazyPlaceholder","lazy","navigationState","percentageTrigger","renderScene","renderTabBar","navigate","screenOptions","width","loadedScreens","routes","index","scrollPosition","positionX","value","map","_","i","_navigate","animation","minimumValueToChangeView","_navigationState","size","length","panGesture","Pan","failOffsetY","activeOffsetX","onChange","event","onEnd","state","scrollPositionStyle","transform","translateX","jumpTo","key","newIndex","findIndex","route","chooseRender","params","useRenderScene","style","children","Routes","screen","current","find","loadedScreen","undefined","push","defaultStyles","flex","layout","gesture","viewsContainer","create","flexDirection"],"sourceRoot":"../../../../src","sources":["components/ReanimatedTopTab/ReanimatedTabView.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AACtE,SAASC,UAAU,EAAEC,mBAAmB,EAAEC,IAAI,QAAQ,cAAc;AACpE,SACEC,OAAO,EACPC,eAAe,EACfC,sBAAsB,QACjB,8BAA8B;AACrC,OAAOC,UAAU,IACfC,WAAW,EACXC,gBAAgB,EAChBC,OAAO,EACPC,OAAO,EACPC,mBAAmB,EACnBC,gBAAgB,EAChBC,cAAc,QACT,yBAAyB;AAEhC,SAASC,aAAa,QAAQ,2BAA2B;AACzD,SAASC,eAAe,QAAQ,mBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAgBpD,OAAO,MAAMC,iBAAiB,gBAAGzB,KAAK,CAAC0B,IAAI,CACzC,CAAC;EACCC,eAAe,GAAGA,CAAA,KAAM,IAAI;EAC5BC,IAAI,GAAG,KAAK;EACZC,eAAe;EACfC,iBAAiB,GAAG,GAAG;EACvBC,WAAW;EACXC,YAAY;EACZC,QAAQ;EACRC;AACF,CAAC,KAAK;EACJ,MAAM;IAAEC;EAAM,CAAC,GAAG7B,mBAAmB,CAAC,CAAC;EACvC,MAAM8B,aAAa,GAAGhC,MAAM,CAAC,CAC3ByB,eAAe,CAACQ,MAAM,CAACR,eAAe,CAACS,KAAK,CAAC,CAC9C,CAAC;EACF,MAAMC,cAAc,GAAGrB,cAAc,CAACW,eAAe,CAACS,KAAK,CAAC;EAC5D,MAAM;IAAEE;EAAU,CAAC,GAAGrB,aAAa,CAAC,CAAC;EAErCH,mBAAmB,CACjB,MAAMuB,cAAc,CAACE,KAAK,EACzBA,KAAK,IAAK;IACTD,SAAS,CAACC,KAAK,GAAG7B,WAAW,CAC3B6B,KAAK,EACLZ,eAAe,CAACQ,MAAM,CAACK,GAAG,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,GAAG,CAACT,KAAK,CAAC,EAChDN,eAAe,CAACQ,MAAM,CAACK,GAAG,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC,EACvC,OACF,CAAC;EACH,CACF,CAAC;EAED,MAAMC,SAAS,GAAIP,KAAa,IAAK;IACnCC,cAAc,CAACE,KAAK,GAAGrB,eAAe,CAAC0B,SAAS,CAAC,CAACR,KAAK,GAAGH,KAAK,CAAC;IAChEF,QAAQ,CAACK,KAAK,CAAC;EACjB,CAAC;EAED,MAAMS,wBAAwB,GAAG5C,OAAO,CACtC,MAAMgC,KAAK,GAAGL,iBAAiB,EAC/B,CAACA,iBAAiB,EAAEK,KAAK,CAC3B,CAAC;EAED,MAAMa,gBAAgB,GAAG9B,cAAc,CAAC;IAAE+B,IAAI,EAAE,CAAC;IAAEX,KAAK,EAAE;EAAE,CAAC,CAAC;EAE9DpC,SAAS,CAAC,MAAM;IACda,OAAO,CAAC,MAAM;MACZiC,gBAAgB,CAACP,KAAK,CAACQ,IAAI,GAAGpB,eAAe,CAACQ,MAAM,CAACa,MAAM;MAC3DF,gBAAgB,CAACP,KAAK,CAACH,KAAK,GAAGT,eAAe,CAACS,KAAK;IACtD,CAAC,CAAC,CAAC,CAAC;EACN,CAAC,EAAE,CAACT,eAAe,CAAC,CAAC;EAErB,MAAMsB,UAAU,GAAGnD,KAAK,CAACG,OAAO,CAC9B,MACEK,OAAO,CAAC4C,GAAG,CAAC,CAAC,CACVC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CACtBC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CACxBC,QAAQ,CAAEC,KAAK,IAAK;IACnB,SAAS;;IACTjB,cAAc,CAACE,KAAK,GAAGrB,eAAe,CAACmC,QAAQ,CAC7CC,KAAK,EACLjB,cAAc,CAACE,KAAK,EACpBN,KAAK,EACLa,gBAAgB,CAACP,KACnB,CAAC;EACH,CAAC,CAAC,CACDgB,KAAK,CAAED,KAAK,IAAK;IAChB,SAAS;;IACT,MAAME,KAAK,GAAGtC,eAAe,CAACqC,KAAK,CACjCD,KAAK,EACLT,wBAAwB,EACxBZ,KAAK,EACLa,gBAAgB,CAACP,KACnB,CAAC;IACDF,cAAc,CAACE,KAAK,GAAGrB,eAAe,CAAC0B,SAAS,CAACY,KAAK,CAACjB,KAAK,CAAC;IAC7DO,gBAAgB,CAACP,KAAK,CAACH,KAAK,GAAGoB,KAAK,CAACpB,KAAK;IAC1CxB,OAAO,CAACmB,QAAQ,CAAC,CAACyB,KAAK,CAACpB,KAAK,CAAC;EAChC,CAAC,CAAC,EACN,CAACS,wBAAwB,EAAEZ,KAAK,CAClC,CAAC;EAED,MAAMwB,mBAAmB,GAAG1C,gBAAgB,CAAC,OAAO;IAClD2C,SAAS,EAAE,CACT;MACEC,UAAU,EAAEjD,WAAW,CACrB2B,cAAc,CAACE,KAAK,EACpB,CAAC,CAACN,KAAK,IAAIN,eAAe,CAACQ,MAAM,CAACa,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,CAACf,KAAK,IAAIN,eAAe,CAACQ,MAAM,CAACa,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACjD,OACF;IACF,CAAC;EAEL,CAAC,CAAC,CAAC;EAEH,MAAMY,MAAM,GAAG9D,KAAK,CAACC,WAAW,CAC7B8D,GAAW,IAAK;IACf,MAAMC,QAAQ,GAAGnC,eAAe,CAACQ,MAAM,CAAC4B,SAAS,CAC9CC,KAAK,IAAKA,KAAK,CAACH,GAAG,KAAKA,GAC3B,CAAC;IACD,IAAIC,QAAQ,KAAK,CAAC,CAAC,EAAE;MACnB;IACF;IACAzB,cAAc,CAACE,KAAK,GAAGrB,eAAe,CAAC0B,SAAS,CAAC,CAACkB,QAAQ,GAAG7B,KAAK,CAAC;EACrE,CAAC,EACD,CAACN,eAAe,CAACQ,MAAM,EAAEE,cAAc,EAAEJ,KAAK,CAChD,CAAC;EAED,MAAMgC,YAAY,GAAGlE,WAAW,CAC9B,CAACmE,MAAyC,EAAEC,cAAc,GAAG,IAAI,kBAC/D/C,IAAA,CAACf,IAAI;IAAwC+D,KAAK,EAAE;MAAEnC;IAAM,CAAE;IAAAoC,QAAA,EAC3DF,cAAc,GAAGtC,WAAW,CAACqC,MAAM,CAAC,GAAGzC,eAAe,CAAC;EAAC,GADhD,cAAcyC,MAAM,CAACF,KAAK,CAACH,GAAG,EAEnC,CACP,EACD,CAACpC,eAAe,EAAEI,WAAW,EAAEI,KAAK,CACtC,CAAC;EAED,MAAMqC,MAAM,GAAGrE,OAAO,CACpB,MACE0B,eAAe,CAACQ,MAAM,CAACK,GAAG,CAAC,CAACwB,KAAK,EAAE5B,KAAK,KAAK;IAC3C,IAAI,CAACV,IAAI,EAAE;MACT,OAAOuC,YAAY,CAAC;QAAEL,MAAM;QAAEI;MAAM,CAAC,CAAC;IACxC;IACA,MAAMO,MAAM,GAAGrC,aAAa,CAACsC,OAAO,CAACC,IAAI,CACtCC,YAAY,IAAKA,YAAY,EAAEb,GAAG,KAAKG,KAAK,CAACH,GAChD,CAAC;IACD,IAAIU,MAAM,KAAKI,SAAS,EAAE;MACxB,OAAOV,YAAY,CAAC;QAAEL,MAAM;QAAEI;MAAM,CAAC,CAAC;IACxC;IACA,IAAIrC,eAAe,CAACS,KAAK,KAAKA,KAAK,EAAE;MACnCF,aAAa,CAACsC,OAAO,CAACI,IAAI,CAACZ,KAAK,CAAC;MACjC,OAAOC,YAAY,CAAC;QAAEL,MAAM;QAAEI;MAAM,CAAC,CAAC;IACxC;IACA,OAAOC,YAAY,CAAC;MAAEL,MAAM;MAAEI;IAAM,CAAC,EAAE,KAAK,CAAC;EAC/C,CAAC,CAAC,EACJ,CACErC,eAAe,CAACQ,MAAM,EACtBR,eAAe,CAACS,KAAK,EACrBV,IAAI,EACJuC,YAAY,EACZL,MAAM,CAEV,CAAC;EAED,oBACExC,IAAA,CAACZ,sBAAsB;IAAC4D,KAAK,EAAES,aAAa,CAACC,IAAK;IAAAT,QAAA,eAChD/C,KAAA,CAACb,UAAU,CAACJ,IAAI;MAAC0E,MAAM,EAAEpE,gBAAiB;MAACyD,KAAK,EAAES,aAAa,CAACC,IAAK;MAAAT,QAAA,GAClEvC,YAAY,GACTA,YAAY,CAAC;QACXH,eAAe;QACfI,QAAQ,EAAEY,SAAS;QACnBX;MACF,CAAC,CAAC,GACF,IAAI,eACRZ,IAAA,CAACb,eAAe;QAACyE,OAAO,EAAE/B,UAAW;QAAAoB,QAAA,eACnCjD,IAAA,CAACX,UAAU,CAACJ,IAAI;UACd0E,MAAM,EAAEpE,gBAAiB;UACzByD,KAAK,EAAE,CACLX,mBAAmB,EACnBoB,aAAa,CAACC,IAAI,EAClB;YAAE7C,KAAK,EAAEA,KAAK,GAAGN,eAAe,CAACQ,MAAM,CAACa,MAAM,GAAG;UAAE,CAAC,EACpD6B,aAAa,CAACI,cAAc,CAC5B;UAAAZ,QAAA,EAEDC;QAAM,CACQ;MAAC,CACH,CAAC;IAAA,CACH;EAAC,CACI,CAAC;AAE7B,CACF,CAAC;AAED,MAAMO,aAAa,GAAG1E,UAAU,CAAC+E,MAAM,CAAC;EACtCJ,IAAI,EAAE;IACJA,IAAI,EAAE;EACR,CAAC;EACDG,cAAc,EAAE;IACdE,aAAa,EAAE;EACjB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,45 +1,62 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
import {
|
|
5
|
-
import Reanimated, { interpolate,
|
|
4
|
+
import { StyleSheet } from 'react-native';
|
|
5
|
+
import Reanimated, { interpolate, useAnimatedStyle, useSharedValue } from 'react-native-reanimated';
|
|
6
6
|
import { useTabContext } from '../../hooks/useTabContext';
|
|
7
|
+
import { TabBarBaseItem } from './TabBarBaseItem';
|
|
7
8
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
9
|
export const TabBarBaseComponent = ({
|
|
9
10
|
children,
|
|
10
11
|
navigationState,
|
|
11
|
-
position,
|
|
12
12
|
style,
|
|
13
|
-
navigate
|
|
13
|
+
navigate,
|
|
14
|
+
screenOptions
|
|
14
15
|
}) => {
|
|
15
|
-
const layout = useWindowDimensions();
|
|
16
16
|
const {
|
|
17
17
|
topTabHeight,
|
|
18
|
-
|
|
18
|
+
positionX
|
|
19
19
|
} = useTabContext();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
const width = useSharedValue(0);
|
|
21
|
+
const {
|
|
22
|
+
tabBarIndicatorStyle,
|
|
23
|
+
tabBarItemStyle,
|
|
24
|
+
tabBarStyle
|
|
25
|
+
} = screenOptions ?? {};
|
|
26
|
+
const inputRange = navigationState.routes.map((_, index) => index);
|
|
27
|
+
const indicatorStyle = useAnimatedStyle(() => {
|
|
28
|
+
const outputRange = navigationState.routes.map((_, index) => index * (width.value / navigationState.routes.length));
|
|
29
|
+
return {
|
|
30
|
+
transform: [{
|
|
31
|
+
translateX: interpolate(positionX.value, inputRange, outputRange)
|
|
32
|
+
}],
|
|
33
|
+
width: width.value / navigationState.routes.length
|
|
34
|
+
};
|
|
35
|
+
});
|
|
25
36
|
return /*#__PURE__*/_jsxs(Reanimated.View, {
|
|
26
37
|
onLayout: ({
|
|
27
38
|
nativeEvent
|
|
28
39
|
}) => {
|
|
29
40
|
topTabHeight.value = nativeEvent.layout.height;
|
|
30
41
|
},
|
|
31
|
-
children: [/*#__PURE__*/
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
42
|
+
children: [/*#__PURE__*/_jsxs(Reanimated.View, {
|
|
43
|
+
onLayout: ({
|
|
44
|
+
nativeEvent
|
|
45
|
+
}) => {
|
|
46
|
+
width.value = nativeEvent.layout.width;
|
|
47
|
+
},
|
|
48
|
+
style: [styles.wrapper, tabBarStyle, style],
|
|
49
|
+
children: [/*#__PURE__*/_jsx(Reanimated.View, {
|
|
50
|
+
style: [styles.indicator, indicatorStyle, tabBarIndicatorStyle]
|
|
51
|
+
}), navigationState.routes.map((route, index) => /*#__PURE__*/_jsx(TabBarBaseItem, {
|
|
52
|
+
index: index,
|
|
53
|
+
inputRange: inputRange,
|
|
35
54
|
onPress: () => {
|
|
36
55
|
navigate(index);
|
|
37
56
|
},
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
})
|
|
42
|
-
}, route.key))
|
|
57
|
+
route: route,
|
|
58
|
+
style: tabBarItemStyle
|
|
59
|
+
}, route.key))]
|
|
43
60
|
}), children]
|
|
44
61
|
});
|
|
45
62
|
};
|
|
@@ -51,15 +68,15 @@ const styles = StyleSheet.create({
|
|
|
51
68
|
alignItems: 'center',
|
|
52
69
|
justifyContent: 'center'
|
|
53
70
|
},
|
|
54
|
-
label: {
|
|
55
|
-
color: 'red'
|
|
56
|
-
},
|
|
57
71
|
wrapper: {
|
|
58
|
-
width: '100%',
|
|
59
72
|
flexDirection: 'row',
|
|
60
|
-
backgroundColor: 'white'
|
|
61
|
-
|
|
62
|
-
|
|
73
|
+
backgroundColor: 'white'
|
|
74
|
+
},
|
|
75
|
+
indicator: {
|
|
76
|
+
backgroundColor: 'black',
|
|
77
|
+
bottom: 0,
|
|
78
|
+
height: 2,
|
|
79
|
+
position: 'absolute'
|
|
63
80
|
}
|
|
64
81
|
});
|
|
65
82
|
//# sourceMappingURL=TabBarBaseComponent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","
|
|
1
|
+
{"version":3,"names":["React","StyleSheet","Reanimated","interpolate","useAnimatedStyle","useSharedValue","useTabContext","TabBarBaseItem","jsx","_jsx","jsxs","_jsxs","TabBarBaseComponent","children","navigationState","style","navigate","screenOptions","topTabHeight","positionX","width","tabBarIndicatorStyle","tabBarItemStyle","tabBarStyle","inputRange","routes","map","_","index","indicatorStyle","outputRange","value","length","transform","translateX","View","onLayout","nativeEvent","layout","height","styles","wrapper","indicator","route","onPress","key","create","labelWrapper","flex","alignItems","justifyContent","flexDirection","backgroundColor","bottom","position"],"sourceRoot":"../../../../src","sources":["components/elements/TabBarBaseComponent.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Pressable, StyleSheet, Text } from 'react-native';
|
|
4
|
+
import Animated, { interpolate, useAnimatedStyle } from 'react-native-reanimated';
|
|
5
|
+
import { useTabContext } from '../../hooks/useTabContext';
|
|
6
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
export const TabBarBaseItem = ({
|
|
8
|
+
index,
|
|
9
|
+
inputRange,
|
|
10
|
+
onPress,
|
|
11
|
+
route,
|
|
12
|
+
style
|
|
13
|
+
}) => {
|
|
14
|
+
const {
|
|
15
|
+
positionX
|
|
16
|
+
} = useTabContext();
|
|
17
|
+
const activeStyle = useAnimatedStyle(() => ({
|
|
18
|
+
opacity: interpolate(positionX.value, inputRange, inputRange.map(i => i === index ? 1 : 0)),
|
|
19
|
+
position: 'absolute'
|
|
20
|
+
}));
|
|
21
|
+
const inactiveStyle = useAnimatedStyle(() => ({
|
|
22
|
+
opacity: interpolate(positionX.value, inputRange, inputRange.map(i => i === index ? 0 : 1))
|
|
23
|
+
}));
|
|
24
|
+
return /*#__PURE__*/_jsxs(Pressable, {
|
|
25
|
+
onPress: () => onPress(index),
|
|
26
|
+
style: [styles.container, style],
|
|
27
|
+
children: [/*#__PURE__*/_jsx(Animated.View, {
|
|
28
|
+
style: activeStyle,
|
|
29
|
+
children: route.tabBarLabel ? route.tabBarLabel(true) : /*#__PURE__*/_jsx(Text, {
|
|
30
|
+
children: route.title
|
|
31
|
+
})
|
|
32
|
+
}), /*#__PURE__*/_jsx(Animated.View, {
|
|
33
|
+
style: inactiveStyle,
|
|
34
|
+
children: route.tabBarLabel ? route.tabBarLabel(false) : /*#__PURE__*/_jsx(Text, {
|
|
35
|
+
children: route.title
|
|
36
|
+
})
|
|
37
|
+
})]
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
const styles = StyleSheet.create({
|
|
41
|
+
container: {
|
|
42
|
+
alignItems: 'center',
|
|
43
|
+
flex: 1,
|
|
44
|
+
justifyContent: 'center',
|
|
45
|
+
minHeight: 50
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=TabBarBaseItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Pressable","StyleSheet","Text","Animated","interpolate","useAnimatedStyle","useTabContext","jsx","_jsx","jsxs","_jsxs","TabBarBaseItem","index","inputRange","onPress","route","style","positionX","activeStyle","opacity","value","map","i","position","inactiveStyle","styles","container","children","View","tabBarLabel","title","create","alignItems","flex","justifyContent","minHeight"],"sourceRoot":"../../../../src","sources":["components/elements/TabBarBaseItem.tsx"],"mappings":";;AAAA,SACEA,SAAS,EACTC,UAAU,EACVC,IAAI,QAGC,cAAc;AACrB,OAAOC,QAAQ,IACbC,WAAW,EACXC,gBAAgB,QACX,yBAAyB;AAChC,SAASC,aAAa,QAAQ,2BAA2B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAW1D,OAAO,MAAMC,cAAc,GAAGA,CAAC;EAC7BC,KAAK;EACLC,UAAU;EACVC,OAAO;EACPC,KAAK;EACLC;AACmB,CAAC,KAAK;EACzB,MAAM;IAAEC;EAAU,CAAC,GAAGX,aAAa,CAAC,CAAC;EAErC,MAAMY,WAAW,GAAGb,gBAAgB,CAAC,OAAO;IAC1Cc,OAAO,EAAEf,WAAW,CAClBa,SAAS,CAACG,KAAK,EACfP,UAAU,EACVA,UAAU,CAACQ,GAAG,CAAEC,CAAC,IAAMA,CAAC,KAAKV,KAAK,GAAG,CAAC,GAAG,CAAE,CAC7C,CAAC;IACDW,QAAQ,EAAE;EACZ,CAAC,CAAC,CAAC;EAEH,MAAMC,aAAa,GAAGnB,gBAAgB,CAAC,OAAO;IAC5Cc,OAAO,EAAEf,WAAW,CAClBa,SAAS,CAACG,KAAK,EACfP,UAAU,EACVA,UAAU,CAACQ,GAAG,CAAEC,CAAC,IAAMA,CAAC,KAAKV,KAAK,GAAG,CAAC,GAAG,CAAE,CAC7C;EACF,CAAC,CAAC,CAAC;EAEH,oBACEF,KAAA,CAACV,SAAS;IAACc,OAAO,EAAEA,CAAA,KAAMA,OAAO,CAACF,KAAK,CAAE;IAACI,KAAK,EAAE,CAACS,MAAM,CAACC,SAAS,EAAEV,KAAK,CAAE;IAAAW,QAAA,gBACzEnB,IAAA,CAACL,QAAQ,CAACyB,IAAI;MAACZ,KAAK,EAAEE,WAAY;MAAAS,QAAA,EAC/BZ,KAAK,CAACc,WAAW,GAChBd,KAAK,CAACc,WAAW,CAAC,IAAI,CAAC,gBAEvBrB,IAAA,CAACN,IAAI;QAAAyB,QAAA,EAAEZ,KAAK,CAACe;MAAK,CAAO;IAC1B,CACY,CAAC,eAChBtB,IAAA,CAACL,QAAQ,CAACyB,IAAI;MAACZ,KAAK,EAAEQ,aAAc;MAAAG,QAAA,EACjCZ,KAAK,CAACc,WAAW,GAChBd,KAAK,CAACc,WAAW,CAAC,KAAK,CAAC,gBAExBrB,IAAA,CAACN,IAAI;QAAAyB,QAAA,EAAEZ,KAAK,CAACe;MAAK,CAAO;IAC1B,CACY,CAAC;EAAA,CACP,CAAC;AAEhB,CAAC;AAED,MAAML,MAAM,GAAGxB,UAAU,CAAC8B,MAAM,CAAC;EAC/BL,SAAS,EAAE;IACTM,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,SAAS,EAAE;EACb;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -8,12 +8,12 @@ export const TabBarLabelBaseComponent = ({
|
|
|
8
8
|
index,
|
|
9
9
|
...props
|
|
10
10
|
}) => {
|
|
11
|
-
const
|
|
11
|
+
const positionX = useTabOffset();
|
|
12
12
|
const style = useAnimatedStyle(() => ({
|
|
13
|
-
backgroundColor: interpolateColor(
|
|
13
|
+
backgroundColor: interpolateColor(positionX.value, [index - 1, index, index + 1], ['transparent', 'blue', 'transparent'])
|
|
14
14
|
}), []);
|
|
15
15
|
const textStyle = useAnimatedStyle(() => ({
|
|
16
|
-
color: interpolateColor(
|
|
16
|
+
color: interpolateColor(positionX.value, [index - 1, index, index + 1], ['black', 'white', 'black'])
|
|
17
17
|
}), []);
|
|
18
18
|
return /*#__PURE__*/_jsx(Reanimated.View, {
|
|
19
19
|
style: [style, styles.wrapper],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StyleSheet","Reanimated","interpolateColor","useAnimatedStyle","useTabOffset","jsx","_jsx","TabBarLabelBaseComponent","index","props","
|
|
1
|
+
{"version":3,"names":["StyleSheet","Reanimated","interpolateColor","useAnimatedStyle","useTabOffset","jsx","_jsx","TabBarLabelBaseComponent","index","props","positionX","style","backgroundColor","value","textStyle","color","View","styles","wrapper","children","Text","text","title","create","fontWeight","textTransform","borderRadius","height","justifyContent","paddingHorizontal","paddingVertical"],"sourceRoot":"../../../../src","sources":["components/elements/TabBarLabelBaseComponent.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,OAAOC,UAAU,IACfC,gBAAgB,EAChBC,gBAAgB,QACX,yBAAyB;AAEhC,SAASC,YAAY,QAAQ,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQxD,OAAO,MAAMC,wBAAwB,GAAGA,CAAC;EACvCC,KAAK;EACL,GAAGC;AACa,CAAC,KAAK;EACtB,MAAMC,SAAS,GAAGN,YAAY,CAAC,CAAC;EAEhC,MAAMO,KAAK,GAAGR,gBAAgB,CAC5B,OAAO;IACLS,eAAe,EAAEV,gBAAgB,CAC/BQ,SAAS,CAACG,KAAK,EACf,CAACL,KAAK,GAAG,CAAC,EAAEA,KAAK,EAAEA,KAAK,GAAG,CAAC,CAAC,EAC7B,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,CACvC;EACF,CAAC,CAAC,EACF,EACF,CAAC;EAED,MAAMM,SAAS,GAAGX,gBAAgB,CAChC,OAAO;IACLY,KAAK,EAAEb,gBAAgB,CACrBQ,SAAS,CAACG,KAAK,EACf,CAACL,KAAK,GAAG,CAAC,EAAEA,KAAK,EAAEA,KAAK,GAAG,CAAC,CAAC,EAC7B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAC5B;EACF,CAAC,CAAC,EACF,EACF,CAAC;EAED,oBACEF,IAAA,CAACL,UAAU,CAACe,IAAI;IAACL,KAAK,EAAE,CAACA,KAAK,EAAEM,MAAM,CAACC,OAAO,CAAE;IAAAC,QAAA,eAC9Cb,IAAA,CAACL,UAAU,CAACmB,IAAI;MAACT,KAAK,EAAE,CAACG,SAAS,EAAEG,MAAM,CAACI,IAAI,CAAE;MAAAF,QAAA,EAC9CV,KAAK,CAACa;IAAK,CACG;EAAC,CACH,CAAC;AAEtB,CAAC;AAED,MAAML,MAAM,GAAGjB,UAAU,CAACuB,MAAM,CAAC;EAC/BF,IAAI,EAAE;IACJG,UAAU,EAAE,MAAM;IAClBC,aAAa,EAAE;EACjB,CAAC;EACDP,OAAO,EAAE;IACPQ,YAAY,EAAE,EAAE;IAChBC,MAAM,EAAE,EAAE;IACVC,cAAc,EAAE,QAAQ;IACxBC,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -2,19 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
import React, { useMemo, useRef, useState } from 'react';
|
|
4
4
|
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
5
|
-
import Reanimated, { Easing,
|
|
5
|
+
import Reanimated, { Easing, runOnJS, useAnimatedReaction, useAnimatedStyle, useDerivedValue, useSharedValue, withTiming } from 'react-native-reanimated';
|
|
6
6
|
import { useTabContext } from '../../hooks/useTabContext';
|
|
7
|
+
import { Platform, StyleSheet, View } from 'react-native';
|
|
7
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
9
|
export const GestureWrapper = ({
|
|
9
|
-
children
|
|
10
|
+
children,
|
|
11
|
+
bounces
|
|
10
12
|
}) => {
|
|
13
|
+
const _bounces = Platform.select({
|
|
14
|
+
ios: bounces,
|
|
15
|
+
default: false
|
|
16
|
+
});
|
|
11
17
|
const {
|
|
12
18
|
context,
|
|
13
19
|
currentScreenIndex,
|
|
14
20
|
currentYPosition,
|
|
15
21
|
gestureEnabled,
|
|
16
22
|
headerHeight,
|
|
17
|
-
transformationY
|
|
23
|
+
transformationY,
|
|
24
|
+
scrollY
|
|
18
25
|
} = useTabContext();
|
|
19
26
|
const movedY = useSharedValue(0);
|
|
20
27
|
const gestureRef = useRef(Gesture.Pan());
|
|
@@ -67,18 +74,40 @@ export const GestureWrapper = ({
|
|
|
67
74
|
}).simultaneousWithExternalGesture(...Object.values(context.screen.properties).map(({
|
|
68
75
|
nativeGesture
|
|
69
76
|
}) => nativeGesture)).withRef(gestureRef).enabled(_gestureEnabled), [_gestureEnabled]);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
useAnimatedReaction(() => {
|
|
78
|
+
if (transformationY.value > 0) {
|
|
79
|
+
if (_bounces) return transformationY.value * -0.3;else return 0;
|
|
80
|
+
}
|
|
81
|
+
if (transformationY.value < -headerHeight.value) {
|
|
82
|
+
return headerHeight.value;
|
|
83
|
+
}
|
|
84
|
+
return -transformationY.value;
|
|
85
|
+
}, value => {
|
|
86
|
+
scrollY.value = value;
|
|
87
|
+
});
|
|
88
|
+
const style = useAnimatedStyle(() => {
|
|
89
|
+
return {
|
|
90
|
+
flex: 1,
|
|
91
|
+
transform: [{
|
|
92
|
+
translateY: scrollY.value * -1
|
|
93
|
+
}]
|
|
94
|
+
};
|
|
95
|
+
}, []);
|
|
76
96
|
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
77
97
|
gesture: gesture,
|
|
78
|
-
children: /*#__PURE__*/_jsx(
|
|
79
|
-
style:
|
|
80
|
-
children:
|
|
98
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
99
|
+
style: styles.container,
|
|
100
|
+
children: /*#__PURE__*/_jsx(Reanimated.View, {
|
|
101
|
+
style: style,
|
|
102
|
+
children: children
|
|
103
|
+
})
|
|
81
104
|
})
|
|
82
105
|
});
|
|
83
106
|
};
|
|
107
|
+
const styles = StyleSheet.create({
|
|
108
|
+
container: {
|
|
109
|
+
overflow: 'hidden',
|
|
110
|
+
flex: 1
|
|
111
|
+
}
|
|
112
|
+
});
|
|
84
113
|
//# sourceMappingURL=GestureWrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","useRef","useState","Gesture","GestureDetector","Reanimated","Easing","
|
|
1
|
+
{"version":3,"names":["React","useMemo","useRef","useState","Gesture","GestureDetector","Reanimated","Easing","runOnJS","useAnimatedReaction","useAnimatedStyle","useDerivedValue","useSharedValue","withTiming","useTabContext","Platform","StyleSheet","View","jsx","_jsx","GestureWrapper","children","bounces","_bounces","select","ios","default","context","currentScreenIndex","currentYPosition","gestureEnabled","headerHeight","transformationY","scrollY","movedY","gestureRef","Pan","currentScreenScrollOffset","Object","values","screen","properties","map","value","withTimingConfig","duration","easing","bezier","_gestureEnabled","setGestureEnabled","next","prev","gesture","activeOffsetY","onTouchesMove","_","stateManager","fail","onUpdate","translationY","onEnd","velocityY","gestureValue","changeOffset","destination","onFinalize","simultaneousWithExternalGesture","nativeGesture","withRef","enabled","style","flex","transform","translateY","styles","container","create","overflow"],"sourceRoot":"../../../../src","sources":["components/wrappers/GestureWrapper.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { SectionList as RNSectionList, StyleSheet } from 'react-native';
|
|
4
|
+
import { GestureDetector } from 'react-native-gesture-handler';
|
|
5
|
+
import Reanimated from 'react-native-reanimated';
|
|
6
|
+
import { useRef } from 'react';
|
|
7
|
+
import { useRoute } from '@react-navigation/native';
|
|
8
|
+
import { useTabContext } from '../../hooks/useTabContext';
|
|
9
|
+
import { useScreenGesture } from '../../hooks/useScreenGesture';
|
|
10
|
+
import { useScreenScrollable } from '../../hooks/useScreenScrollable';
|
|
11
|
+
import { useScreenProperties } from '../../hooks/useScreenProperties';
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
export const SectionList = ({
|
|
14
|
+
children,
|
|
15
|
+
style,
|
|
16
|
+
contentContainerStyle,
|
|
17
|
+
onLayout,
|
|
18
|
+
...props
|
|
19
|
+
}) => {
|
|
20
|
+
const gesture = useScreenGesture();
|
|
21
|
+
const {
|
|
22
|
+
style: _style,
|
|
23
|
+
contentContainerStyle: _contentContainerStyle,
|
|
24
|
+
onScroll,
|
|
25
|
+
bounces,
|
|
26
|
+
animatedProps,
|
|
27
|
+
overScrollMode
|
|
28
|
+
} = useScreenScrollable();
|
|
29
|
+
const {
|
|
30
|
+
innerLayout
|
|
31
|
+
} = useScreenProperties();
|
|
32
|
+
const {
|
|
33
|
+
context
|
|
34
|
+
} = useTabContext();
|
|
35
|
+
const {
|
|
36
|
+
key
|
|
37
|
+
} = useRoute();
|
|
38
|
+
const _ref = useRef(null);
|
|
39
|
+
const _onLayout = event => {
|
|
40
|
+
onLayout?.(event);
|
|
41
|
+
innerLayout.value = event.nativeEvent.layout;
|
|
42
|
+
context.screen.setRef(key, _ref.current);
|
|
43
|
+
};
|
|
44
|
+
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
45
|
+
gesture: gesture,
|
|
46
|
+
children: /*#__PURE__*/_jsx(AnimatedSectionList, {
|
|
47
|
+
ref: _ref,
|
|
48
|
+
contentContainerStyle: [_contentContainerStyle, styleSheet.contentContainerStyle, contentContainerStyle],
|
|
49
|
+
onLayout: _onLayout,
|
|
50
|
+
style: [_style, style],
|
|
51
|
+
onScroll: onScroll,
|
|
52
|
+
bounces: bounces,
|
|
53
|
+
animatedProps: animatedProps,
|
|
54
|
+
overScrollMode: overScrollMode,
|
|
55
|
+
...props,
|
|
56
|
+
children: children
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
const styleSheet = StyleSheet.create({
|
|
61
|
+
contentContainerStyle: {
|
|
62
|
+
flexGrow: 1
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
const AnimatedSectionList = Reanimated.createAnimatedComponent(RNSectionList);
|
|
66
|
+
//# sourceMappingURL=SectionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SectionList","RNSectionList","StyleSheet","GestureDetector","Reanimated","useRef","useRoute","useTabContext","useScreenGesture","useScreenScrollable","useScreenProperties","jsx","_jsx","children","style","contentContainerStyle","onLayout","props","gesture","_style","_contentContainerStyle","onScroll","bounces","animatedProps","overScrollMode","innerLayout","context","key","_ref","_onLayout","event","value","nativeEvent","layout","screen","setRef","current","AnimatedSectionList","ref","styleSheet","create","flexGrow","createAnimatedComponent"],"sourceRoot":"../../../../src","sources":["components/wrappers/SectionList.tsx"],"mappings":";;AAAA,SAIEA,WAAW,IAAIC,aAAa,EAC5BC,UAAU,QACL,cAAc;AACrB,SAASC,eAAe,QAAQ,8BAA8B;AAC9D,OAAOC,UAAU,MAAM,yBAAyB;AAChD,SAASC,MAAM,QAAQ,OAAO;AAC9B,SAASC,QAAQ,QAAQ,0BAA0B;AACnD,SAASC,aAAa,QAAQ,2BAA2B;AACzD,SAASC,gBAAgB,QAAQ,8BAA8B;AAC/D,SAASC,mBAAmB,QAAQ,iCAAiC;AACrE,SAASC,mBAAmB,QAAQ,iCAAiC;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEtE,OAAO,MAAMZ,WAAW,GAAGA,CAAoC;EAC7Da,QAAQ;EACRC,KAAK;EACLC,qBAAqB;EACrBC,QAAQ;EACR,GAAGC;AAC8B,CAAC,KAAK;EACvC,MAAMC,OAAO,GAAGV,gBAAgB,CAAC,CAAC;EAClC,MAAM;IACJM,KAAK,EAAEK,MAAM;IACbJ,qBAAqB,EAAEK,sBAAsB;IAC7CC,QAAQ;IACRC,OAAO;IACPC,aAAa;IACbC;EACF,CAAC,GAAGf,mBAAmB,CAAC,CAAC;EACzB,MAAM;IAAEgB;EAAY,CAAC,GAAGf,mBAAmB,CAAC,CAAC;EAC7C,MAAM;IAAEgB;EAAQ,CAAC,GAAGnB,aAAa,CAAC,CAAC;EAEnC,MAAM;IAAEoB;EAAI,CAAC,GAAGrB,QAAQ,CAAC,CAAC;EAC1B,MAAMsB,IAAI,GAAGvB,MAAM,CAAqB,IAAI,CAAC;EAE7C,MAAMwB,SAAS,GAAIC,KAAwB,IAAK;IAC9Cd,QAAQ,GAAGc,KAAK,CAAC;IACjBL,WAAW,CAACM,KAAK,GAAGD,KAAK,CAACE,WAAW,CAACC,MAAM;IAC5CP,OAAO,CAACQ,MAAM,CAACC,MAAM,CAACR,GAAG,EAAEC,IAAI,CAACQ,OAAO,CAAC;EAC1C,CAAC;EAED,oBACExB,IAAA,CAACT,eAAe;IAACe,OAAO,EAAEA,OAAQ;IAAAL,QAAA,eAChCD,IAAA,CAACyB,mBAAmB;MAClBC,GAAG,EAAEV,IAAK;MACVb,qBAAqB,EAAE,CACrBK,sBAAsB,EACtBmB,UAAU,CAACxB,qBAAqB,EAChCA,qBAAqB,CACrB;MACFC,QAAQ,EAAEa,SAAU;MACpBf,KAAK,EAAE,CAACK,MAAM,EAAEL,KAAK,CAAE;MACvBO,QAAQ,EAAEA,QAAS;MACnBC,OAAO,EAAEA,OAAQ;MACjBC,aAAa,EAAEA,aAAc;MAC7BC,cAAc,EAAEA,cAAe;MAAA,GAC3BP,KAAK;MAAAJ,QAAA,EAERA;IAAQ,CACU;EAAC,CACP,CAAC;AAEtB,CAAC;AAED,MAAM0B,UAAU,GAAGrC,UAAU,CAACsC,MAAM,CAAC;EACnCzB,qBAAqB,EAAE;IACrB0B,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAEF,MAAMJ,mBAAmB,GACvBjC,UAAU,CAACsC,uBAAuB,CAA6BzC,aAAa,CAAC","ignoreList":[]}
|
|
@@ -5,13 +5,14 @@ import { useRef } from 'react';
|
|
|
5
5
|
import { Gesture } from 'react-native-gesture-handler';
|
|
6
6
|
import { assign, throttle } from 'lodash';
|
|
7
7
|
import { ContextHelpers } from './Context.helpers';
|
|
8
|
+
import { SectionList } from 'react-native';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Hook to reset the scroll offset for the approaching screen in a tab navigation context.
|
|
11
12
|
*
|
|
12
13
|
* @param {Object} params - The parameters for configuring the scroll offset reset.
|
|
13
14
|
* @param {ReanimatedTopTabNavigation.ContextType["context"]} params.context - The context containing navigation and screen information.
|
|
14
|
-
* @param {ReanimatedTopTabNavigation.ContextType["
|
|
15
|
+
* @param {ReanimatedTopTabNavigation.ContextType["positionX"]} params.positionX - The horizontal transformation value used in animations.
|
|
15
16
|
* @param {ReanimatedTopTabNavigation.ContextType["currentYPosition"]} params.currentYPosition - The current vertical scroll position.
|
|
16
17
|
*
|
|
17
18
|
* The hook is responsible for resetting the vertical scroll offset of the "approaching" screen within a tabbed navigation interface,
|
|
@@ -21,7 +22,7 @@ import { ContextHelpers } from './Context.helpers';
|
|
|
21
22
|
*/
|
|
22
23
|
const useResetApproachingScreenScrollOffset = ({
|
|
23
24
|
context,
|
|
24
|
-
|
|
25
|
+
positionX,
|
|
25
26
|
currentYPosition
|
|
26
27
|
}) => {
|
|
27
28
|
const screenOffsets = useDerivedValue(() => Object.values(context.screen.properties).map(({
|
|
@@ -29,19 +30,21 @@ const useResetApproachingScreenScrollOffset = ({
|
|
|
29
30
|
}) => scrollY.value));
|
|
30
31
|
const resetApproachingScreenOffset = (index, shouldReset) => {
|
|
31
32
|
if (shouldReset) {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
const ref = context.screen.getRef(context.route.getKeyForIndex(index)).current;
|
|
34
|
+
if (ref instanceof SectionList) {
|
|
35
|
+
ref.scrollToLocation({
|
|
36
|
+
animated: false,
|
|
37
|
+
sectionIndex: 0,
|
|
38
|
+
itemIndex: 0,
|
|
39
|
+
viewOffset: 0
|
|
40
|
+
});
|
|
41
|
+
} else ref?.scrollTo({
|
|
39
42
|
y: 0,
|
|
40
43
|
animated: false
|
|
41
44
|
});
|
|
42
45
|
}
|
|
43
46
|
};
|
|
44
|
-
useAnimatedReaction(() =>
|
|
47
|
+
useAnimatedReaction(() => positionX.value, (current, previous) => {
|
|
45
48
|
const approachingIndex = ContextHelpers.getTargetIndex(current, previous);
|
|
46
49
|
const approachingScreenOffset = screenOffsets.value[approachingIndex] ?? -1;
|
|
47
50
|
runOnJS(resetApproachingScreenOffset)(approachingIndex, approachingScreenOffset > 0 && currentYPosition.value === 0);
|
|
@@ -170,7 +173,7 @@ const usePrepareContext = ({
|
|
|
170
173
|
* @param {Array} params.config - An array of configuration settings to determine the header's transformation.
|
|
171
174
|
* @returns {Object} An object containing shared values for header transformations and positioning:
|
|
172
175
|
* - transformationY: The derived Y-axis transformation value for the header.
|
|
173
|
-
* -
|
|
176
|
+
* - positionX: The shared X-axis transformation value to be observed.
|
|
174
177
|
* - currentYPosition: The shared Y-axis position of the header.
|
|
175
178
|
* - headerHeight: The shared height value of the header.
|
|
176
179
|
*/
|
|
@@ -180,7 +183,8 @@ const useTransformHeaderOnTabChange = ({
|
|
|
180
183
|
const headerHeight = useSharedValue(0);
|
|
181
184
|
const isHeaderHeightSet = useSharedValue(false);
|
|
182
185
|
const transformationY = useSharedValue(0);
|
|
183
|
-
const
|
|
186
|
+
const scrollY = useSharedValue(0);
|
|
187
|
+
const positionX = useSharedValue(0);
|
|
184
188
|
const currentYPosition = useSharedValue(0);
|
|
185
189
|
|
|
186
190
|
//Hide header base on config
|
|
@@ -211,21 +215,22 @@ const useTransformHeaderOnTabChange = ({
|
|
|
211
215
|
runOnJS(debouncedSetIsHeaderSet)();
|
|
212
216
|
}
|
|
213
217
|
}, []);
|
|
214
|
-
useAnimatedReaction(() =>
|
|
218
|
+
useAnimatedReaction(() => positionX.value, value => {
|
|
215
219
|
if (currentYPosition.value === -headerHeight.value) return;
|
|
216
220
|
transformationY.value = interpolate(value, inputRange.value, outputRange.value, 'clamp');
|
|
217
221
|
});
|
|
218
222
|
return {
|
|
219
223
|
transformationY,
|
|
220
|
-
|
|
224
|
+
positionX,
|
|
221
225
|
currentYPosition,
|
|
222
226
|
headerHeight,
|
|
223
|
-
isHeaderHeightSet
|
|
227
|
+
isHeaderHeightSet,
|
|
228
|
+
scrollY
|
|
224
229
|
};
|
|
225
230
|
};
|
|
226
231
|
const useApproachingTabChange = ({
|
|
227
232
|
config,
|
|
228
|
-
|
|
233
|
+
positionX,
|
|
229
234
|
gestureEnabled,
|
|
230
235
|
currentScreenIndex
|
|
231
236
|
}) => {
|
|
@@ -246,7 +251,7 @@ const useApproachingTabChange = ({
|
|
|
246
251
|
}
|
|
247
252
|
}
|
|
248
253
|
};
|
|
249
|
-
useAnimatedReaction(() =>
|
|
254
|
+
useAnimatedReaction(() => positionX.value, (current, previous) => {
|
|
250
255
|
const approachingIndex = ContextHelpers.getTargetIndex(current, previous);
|
|
251
256
|
onIndexApproach(approachingIndex);
|
|
252
257
|
});
|