@tamagui/react-native-web-lite
Version:
React Native for Web
40 lines (34 loc) • 1.38 kB
JSX
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import { useAnimatedProps } from './useAnimatedProps'
import { useMergeRefs } from '../Utilities/useMergeRefs'
import * as React from 'react'
/**
* Experimental implementation of `createAnimatedComponent` that is intended to
* be compatible with concurrent rendering.
*/
function createAnimatedComponent(Component) {
return React.forwardRef((props, forwardedRef) => {
const [reducedProps, callbackRef] = useAnimatedProps(props)
const ref = useMergeRefs(callbackRef, forwardedRef)
// Some components require explicit passthrough values for animation
// to work properly. For example, if an animated component is
// transformed and Pressable, onPress will not work after transform
// without these passthrough values.
const { passthroughAnimatedPropExplicitValues, style } = reducedProps
const { style: passthroughStyle, ...passthroughProps } =
passthroughAnimatedPropExplicitValues ?? {}
const mergedStyle = [style, passthroughStyle]
return (
<Component {...reducedProps} {...passthroughProps} style={mergedStyle} ref={ref} />
)
})
}
export { createAnimatedComponent }
export default createAnimatedComponent