UNPKG

react-native-sortables

Version:

Powerful Sortable Components for Flexible Content Reordering in React Native

43 lines (36 loc) 1.31 kB
import { type StyleProp, type ViewStyle } from 'react-native'; import type { AnimatedStyle, SharedValue } from 'react-native-reanimated'; import { useAnimatedStyle } from 'react-native-reanimated'; import { usePortalContext } from '../PortalProvider'; import useItemZIndex from './useItemZIndex'; import useTeleportedItemPosition from './useTeleportedItemPosition'; export default function useTeleportedItemStyles( key: string, isActive: SharedValue<boolean>, activationAnimationProgress: SharedValue<number> ): StyleProp<AnimatedStyle<ViewStyle>> { const { portalOutletMeasurements } = usePortalContext() ?? {}; const zIndex = useItemZIndex(key, activationAnimationProgress); const position = useTeleportedItemPosition( key, isActive, activationAnimationProgress ); return useAnimatedStyle(() => { if (!portalOutletMeasurements?.value || !position.value) { // This should never happen return { display: 'none' }; } const { pageX: outletX, pageY: outletY } = portalOutletMeasurements.value; const { x: itemX, y: itemY } = position.value; return { display: 'flex', position: 'absolute', transform: [ { translateX: itemX - outletX }, { translateY: itemY - outletY } ], zIndex: zIndex.value }; }); }