Skip to content

Commit ed3b28c

Browse files
committed
A smarter way of determining of class is a React.Component. gajus#41
1 parent c6aaeb2 commit ed3b28c

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

src/index.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,18 @@ import extendReactClass from './extendReactClass';
22
import wrapStatelessFunction from './wrapStatelessFunction';
33

44
let decoratorConstructor,
5-
functionConstructor;
5+
functionConstructor,
6+
isReactComponent;
7+
8+
/**
9+
* Determines if the given object has the signature of a class that inherits React.Component.
10+
*
11+
* @param {*} Component
12+
* @return {Boolean}
13+
*/
14+
isReactComponent = (Component) => {
15+
return 'prototype' in Component && typeof Component.prototype.render === 'function';
16+
};
617

718
/**
819
* When used as a function.
@@ -15,9 +26,11 @@ let decoratorConstructor,
1526
functionConstructor = (Component, defaultStyles, options) => {
1627
let decoratedClass;
1728

18-
decoratedClass = Component.isReactClass ?
19-
extendReactClass(Component, defaultStyles, options) :
20-
wrapStatelessFunction(Component, defaultStyles, options);
29+
if (isReactComponent(Component)) {
30+
decoratedClass = extendReactClass(Component, defaultStyles, options);
31+
} else {
32+
decoratedClass = wrapStatelessFunction(Component, defaultStyles, options);
33+
}
2134

2235
if (Component.displayName) {
2336
decoratedClass.displayName = Component.displayName;

0 commit comments

Comments
 (0)