export default function reactive()

in src/legacy/react/reactive.ts [73:118]


export default function reactive<T>(
    selectorOrComponentClass?: SelectorFunction<T> | React.ComponentClass<any>
): any {
    // this check only applies to ES6 React Class Components
    if (isReactComponent(selectorOrComponentClass)) {
        let componentClass = selectorOrComponentClass as React.ComponentClass<any>;
        return observer(componentClass);
    }

    return function<Target extends React.ReactType>(target: Target) {
        if (getGlobalContext().legacyTestMode) {
            if (isReactComponent(target)) {
                return observer(target as React.ComponentClass<any>);
            } else if (isFunction(target)) {
                return observer(target as React.StatelessComponent<any>);
            }

            return target;
        }

        let newComponent: any;

        if (isReactComponent(target)) {
            // Double layer of observer here so that mobx will flow down the observation
            newComponent = observer(
                createNewConstructor(
                    observer(target as React.ComponentClass<any>),
                    selectorOrComponentClass as SelectorFunction<T>
                ) as React.ComponentClass<any>
            );
            newComponent.nonReactiveComponent = target as React.ComponentClass<any>;
            return newComponent;
        } else if (isFunction(target)) {
            newComponent = observer(
                createNewFunctionalComponent(
                    target as React.StatelessComponent<any>,
                    selectorOrComponentClass as SelectorFunction<T>
                )
            );
            newComponent.nonReactiveStatelessComponent = target as React.StatelessComponent<any>;
            return newComponent;
        }

        return <T>newComponent;
    };
}