navigate to named routes
This commit is contained in:
parent
3e9e076c0b
commit
a22ce672aa
|
@ -27,17 +27,8 @@ let routes = {
|
|||
|
||||
let blank = false;
|
||||
|
||||
export default React.createClass({
|
||||
|
||||
displayName: 'App.jsx',
|
||||
|
||||
mixins: [ RouterMixin ],
|
||||
|
||||
routes: routes,
|
||||
|
||||
statics: {
|
||||
// Build a link to a page.
|
||||
link(to, params, query) {
|
||||
// Build a link to a page.
|
||||
let find = ({ to, params, query }) => {
|
||||
let $url;
|
||||
let re = /:[^\/]+/g;
|
||||
|
||||
|
@ -62,7 +53,7 @@ export default React.createClass({
|
|||
return true;
|
||||
});
|
||||
|
||||
if (!$url) console.log(`path ${to} ${JSON.stringify(params)} is not recognized`);
|
||||
if (!$url) throw new Error(`path ${to} ${JSON.stringify(params)} is not recognized`);
|
||||
|
||||
// Append querystring.
|
||||
if (_.keys(query).length) {
|
||||
|
@ -70,11 +61,26 @@ export default React.createClass({
|
|||
}
|
||||
|
||||
return $url;
|
||||
},
|
||||
};
|
||||
|
||||
export default React.createClass({
|
||||
|
||||
displayName: 'App.jsx',
|
||||
|
||||
mixins: [ RouterMixin ],
|
||||
|
||||
routes: routes,
|
||||
|
||||
statics: {
|
||||
// Build a link to a page.
|
||||
link: (route) => {
|
||||
return find(route);
|
||||
},
|
||||
// Route to a link.
|
||||
// TODO: make this a named route.
|
||||
navigate: navigate
|
||||
navigate: (route) => {
|
||||
let fn = _.isString(route) ? _.identity : find;
|
||||
navigate(fn(route));
|
||||
}
|
||||
},
|
||||
|
||||
// Show projects.
|
||||
|
|
|
@ -30,7 +30,7 @@ export default React.createClass({
|
|||
let [ owner, name ] = this.state.val.split('/');
|
||||
actions.emit('projects.add', { owner, name });
|
||||
// Redirect to the dashboard.
|
||||
App.navigate('/');
|
||||
App.navigate({ 'to': 'projects' });
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
|
|
|
@ -6,20 +6,20 @@ export default React.createClass({
|
|||
|
||||
displayName: 'Link.jsx',
|
||||
|
||||
_route(link, evt) {
|
||||
_navigate(link, evt) {
|
||||
App.navigate(link);
|
||||
evt.preventDefault();
|
||||
},
|
||||
|
||||
render() {
|
||||
let route = this.props.route;
|
||||
let link = App.link(route.to, route.params, route.query);
|
||||
let link = App.link(route);
|
||||
|
||||
return (
|
||||
<a
|
||||
{...this.props}
|
||||
href={'#!' + link}
|
||||
onClick={this._route.bind(this, link)}
|
||||
onClick={this._navigate.bind(this, link)}
|
||||
>
|
||||
{this.props.children}
|
||||
</a>
|
||||
|
|
Loading…
Reference in New Issue