diff options
Diffstat (limited to 'src/view/com/pager')
-rw-r--r-- | src/view/com/pager/DraggableScrollView.tsx | 23 | ||||
-rw-r--r-- | src/view/com/pager/TabBar.tsx | 29 | ||||
-rw-r--r-- | src/view/com/pager/TabBar.web.tsx | 8 |
3 files changed, 43 insertions, 17 deletions
diff --git a/src/view/com/pager/DraggableScrollView.tsx b/src/view/com/pager/DraggableScrollView.tsx index fc06b72e8..c98e34054 100644 --- a/src/view/com/pager/DraggableScrollView.tsx +++ b/src/view/com/pager/DraggableScrollView.tsx @@ -1,16 +1,25 @@ -import React, {ComponentProps} from 'react' +import {type ComponentPropsWithRef} from 'react' import {ScrollView} from 'react-native' import {useDraggableScroll} from '#/lib/hooks/useDraggableScrollView' +import {atoms as a, web} from '#/alf' -export const DraggableScrollView = React.forwardRef< - ScrollView, - ComponentProps<typeof ScrollView> ->(function DraggableScrollView(props, ref) { +export function DraggableScrollView({ + ref, + style, + ...props +}: ComponentPropsWithRef<typeof ScrollView>) { const {refs} = useDraggableScroll<ScrollView>({ outerRef: ref, cursor: 'grab', // optional, default }) - return <ScrollView ref={refs} horizontal {...props} /> -}) + return ( + <ScrollView + ref={refs} + style={[style, web(a.user_select_none)]} + horizontal + {...props} + /> + ) +} diff --git a/src/view/com/pager/TabBar.tsx b/src/view/com/pager/TabBar.tsx index 49f8ead80..04803fa9b 100644 --- a/src/view/com/pager/TabBar.tsx +++ b/src/view/com/pager/TabBar.tsx @@ -1,11 +1,16 @@ import {useCallback} from 'react' -import {LayoutChangeEvent, ScrollView, StyleSheet, View} from 'react-native' +import { + type LayoutChangeEvent, + ScrollView, + StyleSheet, + View, +} from 'react-native' import Animated, { interpolate, runOnJS, runOnUI, scrollTo, - SharedValue, + type SharedValue, useAnimatedReaction, useAnimatedRef, useAnimatedStyle, @@ -267,15 +272,27 @@ export function TabBar({ { translateX: interpolate( dragProgress.get(), - layoutsValue.map((l, i) => i), - layoutsValue.map(l => l.x + l.width / 2 - contentSize.get() / 2), + layoutsValue.map((l, i) => { + 'worklet' + return i + }), + layoutsValue.map(l => { + 'worklet' + return l.x + l.width / 2 - contentSize.get() / 2 + }), ), }, { scaleX: interpolate( dragProgress.get(), - textLayoutsValue.map((l, i) => i), - textLayoutsValue.map((l, i) => getScaleX(i)), + textLayoutsValue.map((l, i) => { + 'worklet' + return i + }), + textLayoutsValue.map((l, i) => { + 'worklet' + return getScaleX(i) + }), ), }, ], diff --git a/src/view/com/pager/TabBar.web.tsx b/src/view/com/pager/TabBar.web.tsx index d44b7b60c..8afea0019 100644 --- a/src/view/com/pager/TabBar.web.tsx +++ b/src/view/com/pager/TabBar.web.tsx @@ -1,7 +1,7 @@ import {useCallback, useEffect, useRef} from 'react' -import {ScrollView, StyleSheet, View} from 'react-native' +import {type ScrollView, StyleSheet, View} from 'react-native' -import {atoms as a, useBreakpoints, useTheme} from '#/alf' +import {atoms as a, useBreakpoints, useTheme, web} from '#/alf' import {Text} from '#/components/Typography' import {PressableWithHover} from '../util/PressableWithHover' import {DraggableScrollView} from './DraggableScrollView' @@ -161,7 +161,7 @@ const desktopStyles = StyleSheet.create({ }, itemInner: { alignItems: 'center', - overflowX: 'hidden', + ...web({overflowX: 'hidden'}), }, itemText: { textAlign: 'center', @@ -204,7 +204,7 @@ const mobileStyles = StyleSheet.create({ itemInner: { flexGrow: 1, alignItems: 'center', - overflowX: 'hidden', + ...web({overflowX: 'hidden'}), }, itemText: { textAlign: 'center', |