Skip to content
This repository was archived by the owner on May 23, 2018. It is now read-only.

Commit 5799da7

Browse files
committed
feat: add first draft of a Link and RouteNodeMixin factories
1 parent 3f2ef7c commit 5799da7

File tree

4 files changed

+54
-2
lines changed

4 files changed

+54
-2
lines changed

modules/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import linkFactory from './link-factory'
2+
import segmentMixinFactory from './segment-mixin-factory'
3+
4+
export default {
5+
linkFactory,
6+
segmentMixinFactory
7+
}

modules/link-factory.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from 'react'
2+
3+
export default router5LinkFactory
4+
5+
let router5LinkFactory = (router) => {
6+
return React.createClass({
7+
propTypes: {
8+
routeName: React.PropTypes.string.isRequired
9+
routeParams: React.PropTypes.object
10+
routeOptions: React.PropTypes.object
11+
},
12+
13+
shouldComponentUpdate(nextProps, nextState) {
14+
return !router.areStatesEqual(
15+
{name: nextProps.routeName, params: nextProps.routeParams},
16+
{name: this.props.routeName, params: this.props.routeParams}
17+
)
18+
},
19+
20+
clickHandler(evt) {
21+
evt.preventDefault()
22+
router.navigate(this.props.routeName, this.props.routeParams, this.props.options)
23+
},
24+
25+
render() {
26+
let path = router.buildPath(this.props.routeName, this.props.routeParams)
27+
return <a href={path} onClick={clickHandler}></a>
28+
}
29+
})
30+
}

modules/segment-mixin-factory.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export default segmentMixinFactory
2+
3+
let segmentMixinFactory = (router) => {
4+
return (routeName, listener) => ({
5+
componentDidMount() {
6+
router.addNodeListener(routeName, listener.bind(this))
7+
router.registerComponent(routeName, this)
8+
},
9+
10+
componentWillUnmount() {
11+
router.addremoveNodeListener(routeName, listener.bind(this))
12+
router.deregisterComponent(routeName, this)
13+
}
14+
})
15+
})

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
},
2626
"homepage": "http://router5.github.com/router5/router5-react",
2727
"devDependencies": {
28-
"router5": "0.0.1-alpha.3"
28+
"router5": "0.0.1-alpha.4"
2929
},
3030
"peerDependencies": {
31-
"router5": "0.0.1-alpha.3"
31+
"router5": "0.0.1-alpha.4"
3232
}
3333
}

0 commit comments

Comments
 (0)