From 8012e831dbfbcce7f5021f904a5f5e3c058d48eb Mon Sep 17 00:00:00 2001 From: Luke Westby Date: Fri, 2 Oct 2015 15:07:11 -0500 Subject: [PATCH] add more stable and backward-compatible stateless function detection --- src/index.js | 15 +++++++++++++-- test/reactCssModules.js | 5 ++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index 491e1de..9a5480b 100644 --- a/src/index.js +++ b/src/index.js @@ -2,7 +2,18 @@ import extendReactClass from './extendReactClass'; import wrapStatelessFunction from './wrapStatelessFunction'; let decoratorConstructor, - functionConstructor; + functionConstructor, + isReactComponent; + +/** + * Determines if the given object has the signature of a class that inherits React.Component + * + * @param {*} Component + * @return {Boolean} + */ +isReactComponent = (Component) => { + return 'prototype' in Component && typeof Component.prototype.render === 'function'; +}; /** * When used as a function. @@ -15,7 +26,7 @@ let decoratorConstructor, functionConstructor = (Component, defaultStyles, options) => { let decoratedClass; - decoratedClass = Component.isReactClass ? + decoratedClass = isReactComponent(Component) ? extendReactClass(Component, defaultStyles, options) : wrapStatelessFunction(Component, defaultStyles, options); diff --git a/test/reactCssModules.js b/test/reactCssModules.js index 685988f..b72cc4b 100644 --- a/test/reactCssModules.js +++ b/test/reactCssModules.js @@ -15,6 +15,7 @@ describe('reactCssModules', () => { Foo = class extends React.Component { static displayName = 'Bar'; + render () { return null; } }; Foo = reactCssModules(Foo); @@ -25,7 +26,9 @@ describe('reactCssModules', () => { it('uses name for displayName', () => { let Foo; - Foo = class Bar extends React.Component {}; + Foo = class Bar extends React.Component { + render () { return null; } + }; Foo = reactCssModules(Foo);