1import * as React from 'react';
2import { View, ViewProps } from 'react-native';
3
4function createHandler(): React.ComponentType<React.RefAttributes<any>> {
5  class Handler extends React.Component {
6    private refHandler = (node: any) => {
7      const child = React.Children.only(this.props.children);
8      // TODO(TS) fix ref type
9      const { ref }: any = child;
10      if (ref !== null) {
11        if (typeof ref === 'function') {
12          ref(node);
13        } else {
14          ref.current = node;
15        }
16      }
17    };
18
19    render() {
20      const child: any = React.Children.only(this.props.children);
21
22      return React.cloneElement(child, {
23        ref: this.refHandler,
24        collapsable: false,
25      });
26    }
27  }
28  return Handler;
29}
30
31export interface GestureHandlerRootViewProps extends React.PropsWithChildren<ViewProps> {}
32
33export default function GestureHandlerRootView({ ...rest }: GestureHandlerRootViewProps) {
34  return <View {...rest} />;
35}
36
37export type PanGestureHandler = typeof PanGestureHandler;
38// eslint-disable-next-line @typescript-eslint/no-redeclare
39export const PanGestureHandler = createHandler();
40