@tamagui/react-native-web-lite
Version:
React Native for Web
50 lines (43 loc) • 1.44 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;