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;
};
}