diff --git a/react-router/legacy/react-router-0.12-test.d.ts b/react-router/legacy/react-router-0.12-test.d.ts new file mode 100644 index 000000000..bf6e2e272 --- /dev/null +++ b/react-router/legacy/react-router-0.12-test.d.ts @@ -0,0 +1,6 @@ +/// + +declare module 'react-0.12' { + var exports: React.Exports; + export = exports; +} diff --git a/react-router/legacy/react-router-0.12-test.ts b/react-router/legacy/react-router-0.12-test.ts new file mode 100644 index 000000000..e896c80f7 --- /dev/null +++ b/react-router/legacy/react-router-0.12-test.ts @@ -0,0 +1,347 @@ +/// +/// +"use strict"; + +import React = require('react-0.12'); +import Router = ReactRouter; + +// Mixin +class NavigationTest { + v: T; + + makePath() { + var v1: string = this.v.makePath('to'); + var v2: string = this.v.makePath('to', {id: 1}); + var v3: string = this.v.makePath('to', {id: 1}, {type: 'json'}); + } + makeHref() { + var v1: string = this.v.makeHref('to'); + var v2: string = this.v.makeHref('to', {id: 1}); + var v3: string = this.v.makeHref('to', {id: 1}, {type: 'json'}); + } + transitionTo() { + var v1: void = this.v.transitionTo('to'); + var v2: void = this.v.transitionTo('to', {id: 1}); + var v3: void = this.v.transitionTo('to', {id: 1}, {type: 'json'}); + } + replaceWith() { + var v1: void = this.v.replaceWith('to'); + var v2: void = this.v.replaceWith('to', {id: 1}); + var v3: void = this.v.replaceWith('to', {id: 1}, {type: 'json'}); + } + goBack() { + var v1: void = this.v.goBack(); + } +} + +class StateTest { + v: T; + + getPath() { + var v1: string = this.v.getPath(); + } + + getRoutes() { + var v1: Router.Route[] = this.v.getRoutes(); + } + + getPathname() { + var v1: string = this.v.getPathname(); + } + + getParams() { + var v1: {} = this.v.getParams(); + } + + getQuery() { + var v1: {} = this.v.getQuery(); + } + + isActive() { + var v1: boolean = this.v.isActive('to'); + var v2: boolean = this.v.isActive('to', {id: 1}); + var v3: boolean = this.v.isActive('to', {id: 1}, {type: 'json'}); + } +} + +class RouteHandlerMixinTest { + v: T; + + getRouteDepth() { + var v1: number = this.v.getRouteDepth(); + } + + createChildRouteHandler() { + var v1: Router.RouteHandler = this.v.createChildRouteHandler({ref: 'hoge'}); + } +} + + +// Location +class LocationTest { + v: T; + + push() { + var v1: void = this.v.push('path/to/hoge'); + } + + replace() { + var v1: void = this.v.replace('path/to/hoge'); + } + + pop() { + var v1: void = this.v.pop(); + } + + getCurrentPath() { + var v1: void = this.v.getCurrentPath(); + } +} +new LocationTest(); +new LocationTest(); +new LocationTest(); + +class LocationListenerTest { + v: T; + + addChangeListener() { + var v1: void = this.v.addChangeListener(() => console.log(1)); + } + + removeChangeListener() { + var v1: void = this.v.removeChangeListener(() => console.log(1)); + } +} +new LocationListenerTest(); +new LocationListenerTest(); + + +// Behavior +class ScrollBehaviorTest { + v: T; + + updateScrollPosition() { + var v1: void = this.v.updateScrollPosition({x: 33, y: 102}, 'scrollTop'); + } +} +new ScrollBehaviorTest(); +new ScrollBehaviorTest(); + + +// Component +class DefaultRouteTest { + v: Router.DefaultRoute; + + props() { + var name: string = this.v.props.name; + var handler: React.ComponentClass = this.v.props.handler; + } + + createElement() { + var Handler: React.ComponentClass; + React.createElement(Router.DefaultRoute, null); + React.createElement(Router.DefaultRoute, {name: 'name', handler: Handler}); + } +} + +class LinkTest { + v: Router.Link; + + constructor() { + new NavigationTest(); + new StateTest(); + } + + props() { + var activeClassName: string = this.v.props.activeClassName; + var to: string = this.v.props.to; + var params: {} = this.v.props.params; + var query: {} = this.v.props.query; + var onClick: Function = this.v.props.onClick; + } + + getHref() { + var v1: string = this.v.getHref(); + } + + getClassName() { + var v1: string = this.v.getClassName(); + } + + createElement() { + React.createElement(Router.Link, null); + React.createElement(Router.Link, {to: 'home'}); + React.createElement(Router.Link, { + activeClassName: 'name', + to: 'home', + params: {}, + query: {}, + onClick: () => console.log(1) + }); + } +} + +class NotFoundRouteTest { + v: Router.NotFoundRoute; + + props() { + var name: string = this.v.props.name; + var handler: React.ComponentClass = this.v.props.handler; + } + + createElement() { + var Handler: React.ComponentClass; + React.createElement(Router.NotFoundRoute, null); + React.createElement(Router.NotFoundRoute, {handler: Handler}); + React.createElement(Router.NotFoundRoute, {handler: Handler, name: "home"}); + } +} + +class RedirectTest { + v: Router.Redirect; + + props() { + var path: string = this.v.props.path; + var from: string = this.v.props.from; + var to: string = this.v.props.to; + } + + createElement() { + React.createElement(Router.Redirect, null); + React.createElement(Router.Redirect, {}); + React.createElement(Router.Redirect, {path: 'a', from: 'a', to: 'b'}); + } +} + +class RouteTest { + v: Router.Route; + + props() { + var name: string = this.v.props.name; + var path: string = this.v.props.path; + var handler: React.ComponentClass = this.v.props.handler; + var ignoreScrollBehavior: boolean = this.v.props.ignoreScrollBehavior; + } + + createElement() { + var Handler: React.ComponentClass; + React.createElement(Router.Route, null); + React.createElement(Router.Route, {}); + React.createElement(Router.Route, {name: "home", path: "/", handler: Handler, ignoreScrollBehavior: true}); + } +} + +class RouteHandlerTest { + v: Router.RouteHandler; + + constructor() { + new RouteHandlerMixinTest(); + } + + createElement() { + React.createElement(Router.RouteHandler, null); + React.createElement(Router.RouteHandler, {}); + } +} + + +// History +class HistoryTest { + v: Router.History; + + length() { + var v1: number = this.v.length; + } + + back() { + var v1: void = this.v.back(); + } +} + + +// Router +class CreateTest { + v: Router.Router; + + constructor() { + // React.createElement() version + this.v = Router.create({ + routes: React.createElement(Router.Route, null) + }); + this.v = Router.create({ + routes: React.createElement(Router.Route, null), + location: Router.HistoryLocation, + scrollBehavior: Router.ImitateBrowserBehavior + }); + + // React.createFactory() version + this.v = Router.create({ + routes: React.createFactory(Router.Route)() + }); + this.v = Router.create({ + routes: React.createFactory(Router.Route)(), + location: Router.HistoryLocation, + scrollBehavior: Router.ImitateBrowserBehavior + }); + } + + run() { + this.v.run((Handler) => console.log(Handler)); + this.v.run((Handler, state) => console.log(Handler, state)); + } +} + +class RunTest { + constructor() { + // React.createElement() version + var v1: Router.Router = Router.run(React.createElement(Router.Route, null), (Handler) => { + React.render(React.createElement(Handler, null), document.body); + }); + var v2: Router.Router = Router.run(React.createElement(Router.Route, null), Router.HistoryLocation, (Handler, state) => { + React.render(React.createElement(Handler, null), document.body); + }); + + // React.createFactory() version + var v3: Router.Router = Router.run(React.createFactory(Router.Route)(), (Handler) => { + React.render(React.createElement(Handler, null), document.body); + }); + var v4: Router.Router = Router.run(React.createFactory(Router.Route)(), Router.HistoryLocation, (Handler, state) => { + React.render(React.createElement(Handler, null), document.body); + }); + } +} + + +// Transition +class TransitionTest { + constructor() { + var v1: Router.TransitionStaticLifecycle = { + willTransitionTo: (transition, params, query, callback) => { + transition.abort(); + transition.redirect('to'); + transition.redirect('to', {id: 1}); + transition.redirect('to', {id: 1}, {type: 'json'}); + transition.retry(); + }, + willTransitionFrom: (transition, component, callback) => {} + }; + var v2: Router.TransitionStaticLifecycle = { + willTransitionTo: (transition, params, query) => {}, + willTransitionFrom: (transition, component) => {} + }; + var v3: Router.TransitionStaticLifecycle = { + willTransitionTo: (transition, params) => {}, + willTransitionFrom: (transition) => {} + }; + var v4: Router.TransitionStaticLifecycle = { + willTransitionTo: (transition) => {}, + willTransitionFrom: () => {} + }; + var v5: Router.TransitionStaticLifecycle = { + willTransitionTo: () => {} + }; + var v6: Router.TransitionStaticLifecycle = { + willTransitionFrom: () => {} + }; + } +} diff --git a/react-router/legacy/react-router-0.12.d.ts b/react-router/legacy/react-router-0.12.d.ts new file mode 100644 index 000000000..79763db11 --- /dev/null +++ b/react-router/legacy/react-router-0.12.d.ts @@ -0,0 +1,277 @@ +// Type definitions for React Router 0.12.0 +// Project: https://github.com/rackt/react-router +// Definitions by: Yuichi Murata +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module ReactRouter { + // + // Mixin + // ---------------------------------------------------------------------- + interface Navigation { + makePath(to: string, params?: {}, query?: {}): string; + makeHref(to: string, params?: {}, query?: {}): string; + transitionTo(to: string, params?: {}, query?: {}): void; + replaceWith(to: string, params?: {}, query?: {}): void; + goBack(): void; + } + + interface RouteHandlerMixin { + getRouteDepth(): number; + createChildRouteHandler(props: {}): RouteHandler; + } + + interface State { + getPath(): string; + getRoutes(): Route[]; + getPathname(): string; + getParams(): {}; + getQuery(): {}; + isActive(to: string, params?: {}, query?: {}): boolean; + } + + var Navigation: Navigation; + var State: State; + var RouteHandlerMixin: RouteHandlerMixin; + + + // + // Component + // ---------------------------------------------------------------------- + // DefaultRoute + interface DefaultRouteProp { + name?: string; + handler: React.ComponentClass; + } + interface DefaultRoute extends React.ReactElement { + __react_router_default_route__: any; // dummy + } + interface DefaultRouteClass extends React.ComponentClass { + __react_router_default_route__: any; // dummy + } + + // Link + interface LinkProp { + activeClassName?: string; + to: string; + params?: {}; + query?: {}; + onClick?: Function; + } + interface Link extends React.ReactElement, Navigation, State { + __react_router_link__: any; // dummy + + getHref(): string; + getClassName(): string; + } + interface LinkClass extends React.ComponentClass { + __react_router_link__: any; // dummy + } + + // NotFoundRoute + interface NotFoundRouteProp { + name?: string; + handler: React.ComponentClass; + } + interface NotFoundRoute extends React.ReactElement { + __react_router_not_found_route__: any; // dummy + } + interface NotFoundRouteClass extends React.ComponentClass { + __react_router_not_found_route__: any; // dummy + } + + // Redirect + interface RedirectProp { + path?: string; + from?: string; + to?: string; + } + interface Redirect extends React.ReactElement { + __react_router_redirect__: any; // dummy + } + interface RedirectClass extends React.ComponentClass { + __react_router_redirect__: any; // dummy + } + + // Route + interface RouteProp { + name?: string; + path?: string; + handler?: React.ComponentClass; + ignoreScrollBehavior?: boolean; + } + interface Route extends React.ReactElement { + __react_router_route__: any; // dummy + } + interface RouteClass extends React.ComponentClass { + __react_router_route__: any; // dummy + } + + // RouteHandler + interface RouteHandlerProp {} + interface RouteHandler extends React.ReactElement, RouteHandlerMixin { + __react_router_route_handler__: any; // dummy + } + interface RouteHandlerClass extends React.ReactElement { + __react_router_route_handler__: any; // dummy + } + + var DefaultRoute: DefaultRouteClass; + var Link: LinkClass; + var NotFoundRoute: NotFoundRouteClass; + var Redirect: RedirectClass; + var Route: RouteClass; + var RouteHandler: RouteHandlerClass; + + + // + // Location + // ---------------------------------------------------------------------- + interface LocationBase { + push(path: string): void; + replace(path: string): void; + pop(): void; + getCurrentPath(): void; + } + + interface LocationListener { + addChangeListener(listener: Function): void; + removeChangeListener(listener: Function): void; + } + + interface HashLocation extends LocationBase, LocationListener {} + interface HistoryLocation extends LocationBase, LocationListener {} + interface RefreshLocation extends LocationBase {} + + var HashLocation: HashLocation; + var HistoryLocation: HistoryLocation; + var RefreshLocation: RefreshLocation; + + + // + // Behavior + // ---------------------------------------------------------------------- + interface ScrollBehaviorBase { + updateScrollPosition(position: {x: number; y: number;}, actionType: string): void; + } + interface ImitateBrowserBehavior extends ScrollBehaviorBase {} + interface ScrollToTopBehavior extends ScrollBehaviorBase {} + + var ImitateBrowserBehavior: ImitateBrowserBehavior; + var ScrollToTopBehavior: ScrollToTopBehavior; + + + // + // Router + // ---------------------------------------------------------------------- + interface Router extends React.ReactElement { + run(callback: RouterRunCallback): void; + } + + interface RouterState { + path: string; + action: string; + pathname: string; + params: {}; + query: {}; + routes : Route[]; + } + + interface RouterCreateOption { + routes: React.ReactElement; + location?: LocationBase; + scrollBehavior?: ScrollBehaviorBase; + } + + type RouterRunCallback = (Handler: Router, state: RouterState) => void; + + function create(options: RouterCreateOption): Router; + function run(routes: React.ReactElement, callback: RouterRunCallback): Router; + function run(routes: React.ReactElement, location: LocationBase, callback: RouterRunCallback): Router; + + + // + // History + // ---------------------------------------------------------------------- + interface History { + back(): void; + length: number; + } + var History: History; + + + // + // Transition + // ---------------------------------------------------------------------- + interface Transition { + abort(): void; + redirect(to: string, params?: {}, query?: {}): void; + retry(): void; + } + + interface TransitionStaticLifecycle { + willTransitionTo?( + transition: Transition, + params: {}, + query: {}, + callback: Function + ): void; + + willTransitionFrom?( + transition: Transition, + component: React.ReactElement, + callback: Function + ): void; + } +} + +declare module 'react-router' { + export = ReactRouter; +} + +declare module React { + interface TopLevelAPI { + // for DefaultRoute + createElement( + type: ReactRouter.DefaultRouteClass, + props: ReactRouter.DefaultRouteProp, + ...children: ReactNode[] + ): ReactRouter.DefaultRoute; + + // for Link + createElement( + type: ReactRouter.LinkClass, + props: ReactRouter.LinkProp, + ...children: ReactNode[] + ): ReactRouter.Link; + + // for NotFoundRoute + createElement( + type: ReactRouter.NotFoundRouteClass, + props: ReactRouter.NotFoundRouteProp, + ...children: ReactNode[] + ): ReactRouter.NotFoundRoute; + + // for Redirect + createElement( + type: ReactRouter.RedirectClass, + props: ReactRouter.RedirectProp, + ...children: ReactNode[] + ): ReactRouter.Redirect; + + // for Route + createElement( + type: ReactRouter.RouteClass, + props: ReactRouter.RouteProp, + ...children: ReactNode[] + ): ReactRouter.Route; + + // for RouteHandler + createElement( + type: ReactRouter.RouteHandlerClass, + props: ReactRouter.RouteHandlerProp, + ...children: ReactNode[] + ): ReactRouter.RouteHandler; + } +} diff --git a/react-router/react-router-test.ts b/react-router/react-router-test.ts index 41b352af3..62180a258 100644 --- a/react-router/react-router-test.ts +++ b/react-router/react-router-test.ts @@ -2,12 +2,13 @@ "use strict"; import React = require('react'); +import ReactAddons = require('react/addons'); import Router = require('react-router'); // Mixin class NavigationTest { v: T; - + makePath() { var v1: string = this.v.makePath('to'); var v2: string = this.v.makePath('to', {id: 1}); @@ -35,27 +36,27 @@ class NavigationTest { class StateTest { v: T; - + getPath() { var v1: string = this.v.getPath(); } - + getRoutes() { var v1: Router.Route[] = this.v.getRoutes(); } - + getPathname() { var v1: string = this.v.getPathname(); } - + getParams() { var v1: {} = this.v.getParams(); } - + getQuery() { var v1: {} = this.v.getQuery(); } - + isActive() { var v1: boolean = this.v.isActive('to'); var v2: boolean = this.v.isActive('to', {id: 1}); @@ -63,35 +64,23 @@ class StateTest { } } -class RouteHandlerMixinTest { - v: T; - - getRouteDepth() { - var v1: number = this.v.getRouteDepth(); - } - - createChildRouteHandler() { - var v1: Router.RouteHandler = this.v.createChildRouteHandler({ref: 'hoge'}); - } -} - // Location -class LocationTest { +class LocationTest { v: T; - + push() { var v1: void = this.v.push('path/to/hoge'); } - + replace() { var v1: void = this.v.replace('path/to/hoge'); } - + pop() { var v1: void = this.v.pop(); } - + getCurrentPath() { var v1: void = this.v.getCurrentPath(); } @@ -102,11 +91,11 @@ new LocationTest(); class LocationListenerTest { v: T; - + addChangeListener() { var v1: void = this.v.addChangeListener(() => console.log(1)); } - + removeChangeListener() { var v1: void = this.v.removeChangeListener(() => console.log(1)); } @@ -118,7 +107,7 @@ new LocationListenerTest(); // Behavior class ScrollBehaviorTest { v: T; - + updateScrollPosition() { var v1: void = this.v.updateScrollPosition({x: 33, y: 102}, 'scrollTop'); } @@ -130,27 +119,30 @@ new ScrollBehaviorTest(); // Component class DefaultRouteTest { v: Router.DefaultRoute; - + props() { var name: string = this.v.props.name; var handler: React.ComponentClass = this.v.props.handler; } - + createElement() { var Handler: React.ComponentClass; React.createElement(Router.DefaultRoute, null); React.createElement(Router.DefaultRoute, {name: 'name', handler: Handler}); + + ReactAddons.createElement(Router.DefaultRoute, null); + ReactAddons.createElement(Router.DefaultRoute, {name: 'name', handler: Handler}); } } class LinkTest { v: Router.Link; - + constructor() { new NavigationTest(); new StateTest(); } - + props() { var activeClassName: string = this.v.props.activeClassName; var to: string = this.v.props.to; @@ -158,15 +150,15 @@ class LinkTest { var query: {} = this.v.props.query; var onClick: Function = this.v.props.onClick; } - + getHref() { var v1: string = this.v.getHref(); } - + getClassName() { var v1: string = this.v.getClassName(); } - + createElement() { React.createElement(Router.Link, null); React.createElement(Router.Link, {to: 'home'}); @@ -177,69 +169,90 @@ class LinkTest { query: {}, onClick: () => console.log(1) }); + + ReactAddons.createElement(Router.Link, null); + ReactAddons.createElement(Router.Link, {to: 'home'}); + ReactAddons.createElement(Router.Link, { + activeClassName: 'name', + to: 'home', + params: {}, + query: {}, + onClick: () => console.log(1) + }); } } class NotFoundRouteTest { v: Router.NotFoundRoute; - + props() { var name: string = this.v.props.name; var handler: React.ComponentClass = this.v.props.handler; } - + createElement() { var Handler: React.ComponentClass; React.createElement(Router.NotFoundRoute, null); React.createElement(Router.NotFoundRoute, {handler: Handler}); React.createElement(Router.NotFoundRoute, {handler: Handler, name: "home"}); + + ReactAddons.createElement(Router.NotFoundRoute, null); + ReactAddons.createElement(Router.NotFoundRoute, {handler: Handler}); + ReactAddons.createElement(Router.NotFoundRoute, {handler: Handler, name: "home"}); } } class RedirectTest { v: Router.Redirect; - + props() { var path: string = this.v.props.path; var from: string = this.v.props.from; var to: string = this.v.props.to; } - + createElement() { React.createElement(Router.Redirect, null); React.createElement(Router.Redirect, {}); React.createElement(Router.Redirect, {path: 'a', from: 'a', to: 'b'}); + + ReactAddons.createElement(Router.Redirect, null); + ReactAddons.createElement(Router.Redirect, {}); + ReactAddons.createElement(Router.Redirect, {path: 'a', from: 'a', to: 'b'}); } } class RouteTest { v: Router.Route; - + props() { var name: string = this.v.props.name; var path: string = this.v.props.path; var handler: React.ComponentClass = this.v.props.handler; var ignoreScrollBehavior: boolean = this.v.props.ignoreScrollBehavior; } - + createElement() { var Handler: React.ComponentClass; React.createElement(Router.Route, null); React.createElement(Router.Route, {}); React.createElement(Router.Route, {name: "home", path: "/", handler: Handler, ignoreScrollBehavior: true}); + + ReactAddons.createElement(Router.Route, null); + ReactAddons.createElement(Router.Route, {}); + ReactAddons.createElement(Router.Route, {name: "home", path: "/", handler: Handler, ignoreScrollBehavior: true}); } } class RouteHandlerTest { v: Router.RouteHandler; - - constructor() { - new RouteHandlerMixinTest(); - } - + createElement() { React.createElement(Router.RouteHandler, null); React.createElement(Router.RouteHandler, {}); + + ReactAddons.createElement(Router.RouteHandler, null); + ReactAddons.createElement(Router.RouteHandler, {}); } } @@ -247,11 +260,11 @@ class RouteHandlerTest { // History class HistoryTest { v: Router.History; - + length() { var v1: number = this.v.length; } - + back() { var v1: void = this.v.back(); } @@ -261,7 +274,7 @@ class HistoryTest { // Router class CreateTest { v: Router.Router; - + constructor() { // React.createElement() version this.v = Router.create({ @@ -272,7 +285,7 @@ class CreateTest { location: Router.HistoryLocation, scrollBehavior: Router.ImitateBrowserBehavior }); - + // React.createFactory() version this.v = Router.create({ routes: React.createFactory(Router.Route)() @@ -283,7 +296,7 @@ class CreateTest { scrollBehavior: Router.ImitateBrowserBehavior }); } - + run() { this.v.run((Handler) => console.log(Handler)); this.v.run((Handler, state) => console.log(Handler, state)); @@ -299,7 +312,7 @@ class RunTest { var v2: Router.Router = Router.run(React.createElement(Router.Route, null), Router.HistoryLocation, (Handler, state) => { React.render(React.createElement(Handler, null), document.body); }); - + // React.createFactory() version var v3: Router.Router = Router.run(React.createFactory(Router.Route)(), (Handler) => { React.render(React.createElement(Handler, null), document.body); @@ -344,3 +357,63 @@ class TransitionTest { }; } } + + +// Context +class ContextTest { + v: Router.Context + + makePath() { + var v1: string = this.v.makePath('home'); + var v2: string = this.v.makePath('home', {p1: 1}); + var v3: string = this.v.makePath('home', {p1: 1}, {q1: 1}); + } + + makeHref() { + var v1: string = this.v.makeHref('home'); + var v2: string = this.v.makeHref('home', {p1: 1}); + var v3: string = this.v.makeHref('home', {p1: 1}, {q1: 1}); + } + + transitionTo() { + var v1: void = this.v.transitionTo('home'); + var v2: void = this.v.transitionTo('home', {p1: 1}); + var v3: void = this.v.transitionTo('home', {p1: 1}, {q1: 1}); + } + + replaceWith() { + var v1: void = this.v.replaceWith('home'); + var v2: void = this.v.replaceWith('home', {p1: 1}); + var v3: void = this.v.replaceWith('home', {p1: 1}, {q1: 1}); + } + + goBack() { + var v: void = this.v.goBack(); + } + + getCurrentPath() { + var v: string = this.v.getCurrentPath(); + } + + getCurrentRoutes() { + var v: Router.Route[] = this.v.getCurrentRoutes(); + } + + getCurrentPathname() { + var v: string = this.v.getCurrentPathname(); + } + + getCurrentParams() { + var v: {} = this.v.getCurrentParams(); + } + + getCurrentQuery() { + var v: {} = this.v.getCurrentQuery(); + } + + isActive() { + var v1: boolean = this.v.isActive('home'); + var v2: boolean = this.v.isActive('home', {p1: 1}); + var v3: boolean = this.v.isActive('home', {p1: 1}, {q1: 1}); + } +} diff --git a/react-router/react-router.d.ts b/react-router/react-router.d.ts index 58ec9069a..9d0f63b96 100644 --- a/react-router/react-router.d.ts +++ b/react-router/react-router.d.ts @@ -1,11 +1,224 @@ -// Type definitions for React Router 0.12.0 +// Type definitions for React Router 0.13.3 // Project: https://github.com/rackt/react-router -// Definitions by: Yuichi Murata +// Definitions by: Yuichi Murata , Václav Ostrožlík // Definitions: https://github.com/borisyankov/DefinitelyTyped -/// +/// +/// declare module ReactRouter { + // + // Transition + // ---------------------------------------------------------------------- + interface Transition { + path: string; + abortReason: any; + retry(): void; + abort(reason?: any): void; + redirect(to: string, params?: {}, query?: {}): void; + cancel(): void; + from: (transition: Transition, routes: Route[], components?: React.ReactElement[], callback?: (error?: any) => void) => void; + to: (transition: Transition, routes: Route[], params?: {}, query?: {}, callback?: (error?: any) => void) => void; + } + + interface TransitionStaticLifecycle { + willTransitionTo?( + transition: Transition, + params: {}, + query: {}, + callback: Function + ): void; + + willTransitionFrom?( + transition: Transition, + component: React.ReactElement, + callback: Function + ): void; + } + + // + // Route Configuration + // ---------------------------------------------------------------------- + // DefaultRoute + interface DefaultRouteProp { + name?: string; + handler: React.ComponentClass; + } + interface DefaultRoute extends React.ReactElement {} + interface DefaultRouteClass extends React.ComponentClass {} + + // NotFoundRoute + interface NotFoundRouteProp { + name?: string; + handler: React.ComponentClass; + } + interface NotFoundRoute extends React.ReactElement {} + interface NotFoundRouteClass extends React.ComponentClass {} + + // Redirect + interface RedirectProp { + path?: string; + from?: string; + to?: string; + } + interface Redirect extends React.ReactElement {} + interface RedirectClass extends React.ComponentClass {} + + // Route + interface RouteProp { + name?: string; + path?: string; + handler?: React.ComponentClass; + ignoreScrollBehavior?: boolean; + } + interface Route extends React.ReactElement {} + interface RouteClass extends React.ComponentClass {} + + var DefaultRoute: DefaultRouteClass; + var NotFoundRoute: NotFoundRouteClass; + var Redirect: RedirectClass; + var Route: RouteClass; + + interface CreateRouteOptions { + name?: string; + path?: string; + ignoreScrollBehavior?: boolean; + isDefault?: boolean; + isNotFound?: boolean; + onEnter?: (transition: Transition, params: {}, query: {}, callback: Function) => void; + onLeave?: (transition: Transition, wtf: any, callback: Function) => void; + handler?: Function; + parentRoute?: Route; + } + + type CreateRouteCallback = (route: Route) => void; + + function createRoute(callback: CreateRouteCallback): Route; + function createRoute(options: CreateRouteOptions | string, callback: CreateRouteCallback): Route; + function createDefaultRoute(options?: CreateRouteOptions | string): Route; + function createNotFoundRoute(options?: CreateRouteOptions | string): Route; + + interface CreateRedirectOptions extends CreateRouteOptions { + path?: string; + from?: string; + to: string; + params?: {}; + query?: {}; + } + function createRedirect(options: CreateRedirectOptions): Redirect; + function createRoutesFromReactChildren(children: Route): Route[]; + + // + // Components + // ---------------------------------------------------------------------- + // Link + interface LinkProp { + activeClassName?: string; + activeStyle?: {}; + to: string; + params?: {}; + query?: {}; + onClick?: Function; + } + interface Link extends React.ReactElement, Navigation, State { + handleClick(event: any): void; + getHref(): string; + getClassName(): string; + getActiveState(): boolean; + } + interface LinkClass extends React.ComponentClass {} + + // RouteHandler + interface RouteHandlerProp { } + interface RouteHandlerChildContext { + routeDepth: number; + } + interface RouteHandler extends React.ReactElement { + getChildContext(): RouteHandlerChildContext; + getRouteDepth(): number; + createChildRouteHandler(props: {}): RouteHandler; + } + interface RouteHandlerClass extends React.ComponentClass {} + + var Link: LinkClass; + var RouteHandler: RouteHandlerClass; + + + // + // Top-Level + // ---------------------------------------------------------------------- + interface Router extends React.ReactElement { + run(callback: RouterRunCallback): void; + } + + interface RouterState { + path: string; + action: string; + pathname: string; + params: {}; + query: {}; + routes: Route[]; + } + + interface RouterCreateOption { + routes: Route; + location?: LocationBase; + scrollBehavior?: ScrollBehaviorBase; + onError?: (error: any) => void; + onAbort?: (error: any) => void; + } + + type RouterRunCallback = (Handler: RouteClass, state: RouterState) => void; + + function create(options: RouterCreateOption): Router; + function run(routes: Route, callback: RouterRunCallback): Router; + function run(routes: Route, location: LocationBase, callback: RouterRunCallback): Router; + + + // + // Location + // ---------------------------------------------------------------------- + interface LocationBase { + getCurrentPath(): void; + toString(): string; + } + interface Location extends LocationBase { + push(path: string): void; + replace(path: string): void; + pop(): void; + } + + interface LocationListener { + addChangeListener(listener: Function): void; + removeChangeListener(listener: Function): void; + } + + interface HashLocation extends Location, LocationListener { } + interface HistoryLocation extends Location, LocationListener { } + interface RefreshLocation extends Location { } + interface StaticLocation extends LocationBase { } + interface TestLocation extends Location, LocationListener { } + + var HashLocation: HashLocation; + var HistoryLocation: HistoryLocation; + var RefreshLocation: RefreshLocation; + var StaticLocation: StaticLocation; + var TestLocation: TestLocation; + + + // + // Behavior + // ---------------------------------------------------------------------- + interface ScrollBehaviorBase { + updateScrollPosition(position: { x: number; y: number; }, actionType: string): void; + } + interface ImitateBrowserBehavior extends ScrollBehaviorBase { } + interface ScrollToTopBehavior extends ScrollBehaviorBase { } + + var ImitateBrowserBehavior: ImitateBrowserBehavior; + var ScrollToTopBehavior: ScrollToTopBehavior; + + // // Mixin // ---------------------------------------------------------------------- @@ -16,12 +229,7 @@ declare module ReactRouter { replaceWith(to: string, params?: {}, query?: {}): void; goBack(): void; } - - interface RouteHandlerMixin { - getRouteDepth(): number; - createChildRouteHandler(props: {}): RouteHandler; - } - + interface State { getPath(): string; getRoutes(): Route[]; @@ -30,167 +238,11 @@ declare module ReactRouter { getQuery(): {}; isActive(to: string, params?: {}, query?: {}): boolean; } - + var Navigation: Navigation; var State: State; - var RouteHandlerMixin: RouteHandlerMixin; - - - // - // Component - // ---------------------------------------------------------------------- - // DefaultRoute - interface DefaultRouteProp { - name?: string; - handler: React.ComponentClass; - } - interface DefaultRoute extends React.ReactElement { - __react_router_default_route__: any; // dummy - } - interface DefaultRouteClass extends React.ComponentClass { - __react_router_default_route__: any; // dummy - } - - // Link - interface LinkProp { - activeClassName?: string; - to: string; - params?: {}; - query?: {}; - onClick?: Function; - } - interface Link extends React.ReactElement, Navigation, State { - __react_router_link__: any; // dummy - - getHref(): string; - getClassName(): string; - } - interface LinkClass extends React.ComponentClass { - __react_router_link__: any; // dummy - } - - // NotFoundRoute - interface NotFoundRouteProp { - name?: string; - handler: React.ComponentClass; - } - interface NotFoundRoute extends React.ReactElement { - __react_router_not_found_route__: any; // dummy - } - interface NotFoundRouteClass extends React.ComponentClass { - __react_router_not_found_route__: any; // dummy - } - - // Redirect - interface RedirectProp { - path?: string; - from?: string; - to?: string; - } - interface Redirect extends React.ReactElement { - __react_router_redirect__: any; // dummy - } - interface RedirectClass extends React.ComponentClass { - __react_router_redirect__: any; // dummy - } - - // Route - interface RouteProp { - name?: string; - path?: string; - handler?: React.ComponentClass; - ignoreScrollBehavior?: boolean; - } - interface Route extends React.ReactElement { - __react_router_route__: any; // dummy - } - interface RouteClass extends React.ComponentClass { - __react_router_route__: any; // dummy - } - - // RouteHandler - interface RouteHandlerProp {} - interface RouteHandler extends React.ReactElement, RouteHandlerMixin { - __react_router_route_handler__: any; // dummy - } - interface RouteHandlerClass extends React.ReactElement { - __react_router_route_handler__: any; // dummy - } - - var DefaultRoute: DefaultRouteClass; - var Link: LinkClass; - var NotFoundRoute: NotFoundRouteClass; - var Redirect: RedirectClass; - var Route: RouteClass; - var RouteHandler: RouteHandlerClass; - - - // - // Location - // ---------------------------------------------------------------------- - interface LocationBase { - push(path: string): void; - replace(path: string): void; - pop(): void; - getCurrentPath(): void; - } - - interface LocationListener { - addChangeListener(listener: Function): void; - removeChangeListener(listener: Function): void; - } - - interface HashLocation extends LocationBase, LocationListener {} - interface HistoryLocation extends LocationBase, LocationListener {} - interface RefreshLocation extends LocationBase {} - - var HashLocation: HashLocation; - var HistoryLocation: HistoryLocation; - var RefreshLocation: RefreshLocation; - - - // - // Behavior - // ---------------------------------------------------------------------- - interface ScrollBehaviorBase { - updateScrollPosition(position: {x: number; y: number;}, actionType: string): void; - } - interface ImitateBrowserBehavior extends ScrollBehaviorBase {} - interface ScrollToTopBehavior extends ScrollBehaviorBase {} - - var ImitateBrowserBehavior: ImitateBrowserBehavior; - var ScrollToTopBehavior: ScrollToTopBehavior; - - - // - // Router - // ---------------------------------------------------------------------- - interface Router extends React.ReactElement { - run(callback: RouterRunCallback): void; - } - - interface RouterState { - path: string; - action: string; - pathname: string; - params: {}; - query: {}; - routes : Route[]; - } - - interface RouterCreateOption { - routes: React.ReactElement; - location?: LocationBase; - scrollBehavior?: ScrollBehaviorBase; - } - - type RouterRunCallback = (Handler: Router, state: RouterState) => void; - - function create(options: RouterCreateOption): Router; - function run(routes: React.ReactElement, callback: RouterRunCallback): Router; - function run(routes: React.ReactElement, location: LocationBase, callback: RouterRunCallback): Router; - - + + // // History // ---------------------------------------------------------------------- @@ -199,80 +251,103 @@ declare module ReactRouter { length: number; } var History: History; - - + + // - // Transition + // Context // ---------------------------------------------------------------------- - interface Transition { - abort(): void; - redirect(to: string, params?: {}, query?: {}): void; - retry(): void; - } - - interface TransitionStaticLifecycle { - willTransitionTo?( - transition: Transition, - params: {}, - query: {}, - callback: Function - ): void; - - willTransitionFrom?( - transition: Transition, - component: React.ReactElement, - callback: Function - ): void; + interface Context { + makePath(to: string, params?: {}, query?: {}): string; + makeHref(to: string, params?: {}, query?: {}): string; + transitionTo(to: string, params?: {}, query?: {}): void; + replaceWith(to: string, params?: {}, query?: {}): void; + goBack(): void; + + getCurrentPath(): string; + getCurrentRoutes(): Route[]; + getCurrentPathname(): string; + getCurrentParams(): {}; + getCurrentQuery(): {}; + isActive(to: string, params?: {}, query?: {}): boolean; } } -declare module 'react-router' { - import Export = ReactRouter; - export = Export; +declare module "react-router" { + export = ReactRouter; } declare module React { - interface TopLevelAPI { - // for DefaultRoute - createElement( - type: ReactRouter.DefaultRouteClass, - props: ReactRouter.DefaultRouteProp, - ...children: ReactNode[] - ): ReactRouter.DefaultRoute; - - // for Link - createElement( - type: ReactRouter.LinkClass, - props: ReactRouter.LinkProp, - ...children: ReactNode[] - ): ReactRouter.Link; - - // for NotFoundRoute - createElement( - type: ReactRouter.NotFoundRouteClass, - props: ReactRouter.NotFoundRouteProp, - ...children: ReactNode[] - ): ReactRouter.NotFoundRoute; - - // for Redirect - createElement( - type: ReactRouter.RedirectClass, - props: ReactRouter.RedirectProp, - ...children: ReactNode[] - ): ReactRouter.Redirect; - - // for Route - createElement( - type: ReactRouter.RouteClass, - props: ReactRouter.RouteProp, - ...children: ReactNode[] - ): ReactRouter.Route; - - // for RouteHandler - createElement( - type: ReactRouter.RouteHandlerClass, - props: ReactRouter.RouteHandlerProp, - ...children: ReactNode[] - ): ReactRouter.RouteHandler; - } + // for DefaultRoute + function createElement( + type: ReactRouter.DefaultRouteClass, + props: ReactRouter.DefaultRouteProp, + ...children: React.ReactNode[]): ReactRouter.DefaultRoute; + + // for Link + function createElement( + type: ReactRouter.LinkClass, + props: ReactRouter.LinkProp, + ...children: React.ReactNode[]): ReactRouter.Link; + + // for NotFoundRoute + function createElement( + type: ReactRouter.NotFoundRouteClass, + props: ReactRouter.NotFoundRouteProp, + ...children: React.ReactNode[]): ReactRouter.NotFoundRoute; + + // for Redirect + function createElement( + type: ReactRouter.RedirectClass, + props: ReactRouter.RedirectProp, + ...children: React.ReactNode[]): ReactRouter.Redirect; + + // for Route + function createElement( + type: ReactRouter.RouteClass, + props: ReactRouter.RouteProp, + ...children: React.ReactNode[]): ReactRouter.Route; + + // for RouteHandler + function createElement( + type: ReactRouter.RouteHandlerClass, + props: ReactRouter.RouteHandlerProp, + ...children: React.ReactNode[]): ReactRouter.RouteHandler; +} + +declare module "react/addons" { + // for DefaultRoute + function createElement( + type: ReactRouter.DefaultRouteClass, + props: ReactRouter.DefaultRouteProp, + ...children: React.ReactNode[]): ReactRouter.DefaultRoute; + + // for Link + function createElement( + type: ReactRouter.LinkClass, + props: ReactRouter.LinkProp, + ...children: React.ReactNode[]): ReactRouter.Link; + + // for NotFoundRoute + function createElement( + type: ReactRouter.NotFoundRouteClass, + props: ReactRouter.NotFoundRouteProp, + ...children: React.ReactNode[]): ReactRouter.NotFoundRoute; + + // for Redirect + function createElement( + type: ReactRouter.RedirectClass, + props: ReactRouter.RedirectProp, + ...children: React.ReactNode[]): ReactRouter.Redirect; + + // for Route + function createElement( + type: ReactRouter.RouteClass, + props: ReactRouter.RouteProp, + ...children: React.ReactNode[]): ReactRouter.Route; + + // for RouteHandler + function createElement( + type: ReactRouter.RouteHandlerClass, + props: ReactRouter.RouteHandlerProp, + ...children: React.ReactNode[]): ReactRouter.RouteHandler; }