From f3f869f576771d3b5457be57a2db3529a2fab4bd Mon Sep 17 00:00:00 2001 From: tkqubo Date: Fri, 18 Sep 2015 05:45:51 +0900 Subject: [PATCH 1/2] Add react-mixin --- react-mixin/react-mixin-tests.tsx | 55 +++++++++++++++++++++ react-mixin/react-mixin-tests.tsx.tscparams | 1 + react-mixin/react-mixin.d.ts | 27 ++++++++++ 3 files changed, 83 insertions(+) create mode 100644 react-mixin/react-mixin-tests.tsx create mode 100644 react-mixin/react-mixin-tests.tsx.tscparams create mode 100644 react-mixin/react-mixin.d.ts diff --git a/react-mixin/react-mixin-tests.tsx b/react-mixin/react-mixin-tests.tsx new file mode 100644 index 0000000000..32532b1339 --- /dev/null +++ b/react-mixin/react-mixin-tests.tsx @@ -0,0 +1,55 @@ +/// +/// + +import reactMixin = require('react-mixin'); +import * as React from 'react'; + +var someMixin: React.Mixin; +var someOtherMixin: React.Mixin; + +class Foo extends React.Component { + render(): JSX.Element { return
; } +} + +reactMixin(Foo.prototype, someMixin); +reactMixin(Foo.prototype, someOtherMixin); + + +var mixin: React.Mixin = { + getDefaultProps: function(): any { + return {b: 2}; + } +}; + +class Foo2 extends React.Component { + static defaultProps = { + a: 1 + }; + render(): JSX.Element { + console.log(this.props); // {a: 1, b: 2} + return null; + } +} + +reactMixin.onClass(Foo2, mixin); + +@reactMixin.decorate(mixin) +class Foo3 extends React.Component { +} + +function autobind(methodNames: string[]): React.Mixin { + return { + componentWillMount: function(): void { + methodNames.forEach((name) => { + this[name] = this[name].bind(this); + }); + } + }; +} + +@reactMixin.decorate(mixin) +@reactMixin.decorate(autobind(Object.keys(mixin))) +class Foo4 extends React.Component { +} + + diff --git a/react-mixin/react-mixin-tests.tsx.tscparams b/react-mixin/react-mixin-tests.tsx.tscparams new file mode 100644 index 0000000000..c90abf04fc --- /dev/null +++ b/react-mixin/react-mixin-tests.tsx.tscparams @@ -0,0 +1 @@ +--target es5 --noImplicitAny --experimentalDecorators --jsx react diff --git a/react-mixin/react-mixin.d.ts b/react-mixin/react-mixin.d.ts new file mode 100644 index 0000000000..7446b3685d --- /dev/null +++ b/react-mixin/react-mixin.d.ts @@ -0,0 +1,27 @@ +// Type definitions for react-mixin +// Project: https://github.com/brigand/react-mixin +// Definitions by: Qubo +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module "react-mixin" { + import * as React from 'react'; + + namespace reactMixin { + export interface ClassDecorator { + (target: TFunction): TFunction|void; + } + + interface ReactMixin { + decorate(mixin: React.Mixin): ClassDecorator; + onClass(clazz: any, mixin: React.Mixin): React.ComponentClass; + (clazz: any, mixin: React.Mixin): React.ComponentClass; + } + } + + var reactMixin: reactMixin.ReactMixin; + + export = reactMixin; +} + From d71194556474e33b60620e539c6ad5a890d4f660 Mon Sep 17 00:00:00 2001 From: tkqubo Date: Fri, 18 Sep 2015 05:46:43 +0900 Subject: [PATCH 2/2] Add version --- react-mixin/react-mixin.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react-mixin/react-mixin.d.ts b/react-mixin/react-mixin.d.ts index 7446b3685d..e7d25a6ab4 100644 --- a/react-mixin/react-mixin.d.ts +++ b/react-mixin/react-mixin.d.ts @@ -1,4 +1,4 @@ -// Type definitions for react-mixin +// Type definitions for react-mixin 2.0.2 // Project: https://github.com/brigand/react-mixin // Definitions by: Qubo // Definitions: https://github.com/borisyankov/DefinitelyTyped