Skip to content

Commit 3f0c4d9

Browse files
committed
Update isActive
1 parent 1f808a2 commit 3f0c4d9

File tree

6 files changed

+231
-45
lines changed

6 files changed

+231
-45
lines changed

modules/Link.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ const Link = React.createClass({
118118
props.href = router.createHref(loc)
119119

120120
if (activeClassName || (activeStyle != null && !isEmptyObject(activeStyle))) {
121-
if (router.isActive(to, query, onlyActiveOnIndex)) {
121+
if (router.isActive(loc, onlyActiveOnIndex)) {
122122
if (activeClassName)
123123
props.className += props.className === '' ? activeClassName : ` ${activeClassName}`
124124

modules/__tests__/Link-test.js

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,18 @@ describe('A <Link>', function () {
7878
render() {
7979
return (
8080
<div>
81-
<Link to="/hello/michael" activeClassName="active">Michael</Link>
82-
<Link to="/hello/ryan" activeClassName="active">Ryan</Link>
81+
<Link
82+
to="/hello/michael"
83+
activeClassName="active"
84+
>
85+
Michael
86+
</Link>
87+
<Link
88+
to={{ pathname: '/hello/ryan', query: { the: 'query' } }}
89+
activeClassName="active"
90+
>
91+
Ryan
92+
</Link>
8393
</div>
8494
)
8595
}
@@ -112,6 +122,34 @@ describe('A <Link>', function () {
112122
done()
113123
})
114124
})
125+
126+
it('is active when its params and query match', function (done) {
127+
render((
128+
<Router history={createHistory('/hello/ryan?the=query')}>
129+
<Route path="/" component={App}>
130+
<Route path="hello/:name" component={Hello} />
131+
</Route>
132+
</Router>
133+
), node, function () {
134+
const a = node.querySelectorAll('a')[1]
135+
expect(a.className.trim()).toEqual('active')
136+
done()
137+
})
138+
})
139+
140+
it('is not active when its query does not match', function (done) {
141+
render((
142+
<Router history={createHistory('/hello/ryan?the=other+query')}>
143+
<Route path="/" component={App}>
144+
<Route path="hello/:name" component={Hello} />
145+
</Route>
146+
</Router>
147+
), node, function () {
148+
const a = node.querySelectorAll('a')[1]
149+
expect(a.className.trim()).toEqual('')
150+
done()
151+
})
152+
})
115153
})
116154

117155
describe('when its route is active and className is empty', function () {

modules/__tests__/_bc-Link-test.js

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,85 @@ describe('v1 Link', function () {
4040
})
4141
})
4242

43+
describe('with params', function () {
44+
class App extends Component {
45+
render() {
46+
return (
47+
<div>
48+
<Link
49+
to="/hello/michael"
50+
activeClassName="active"
51+
>
52+
Michael
53+
</Link>
54+
<Link
55+
to="hello/ryan" query={{ the: 'query' }}
56+
activeClassName="active"
57+
>
58+
Ryan
59+
</Link>
60+
</div>
61+
)
62+
}
63+
}
64+
65+
it('is active when its params match', function (done) {
66+
render((
67+
<Router history={createHistory('/hello/michael')}>
68+
<Route path="/" component={App}>
69+
<Route path="hello/:name" component={Hello} />
70+
</Route>
71+
</Router>
72+
), node, function () {
73+
const a = node.querySelectorAll('a')[0]
74+
expect(a.className.trim()).toEqual('active')
75+
done()
76+
})
77+
})
78+
79+
it('is not active when its params do not match', function (done) {
80+
render((
81+
<Router history={createHistory('/hello/michael')}>
82+
<Route path="/" component={App}>
83+
<Route path="hello/:name" component={Hello} />
84+
</Route>
85+
</Router>
86+
), node, function () {
87+
const a = node.querySelectorAll('a')[1]
88+
expect(a.className.trim()).toEqual('')
89+
done()
90+
})
91+
})
92+
93+
it('is active when its params and query match', function (done) {
94+
render((
95+
<Router history={createHistory('/hello/ryan?the=query')}>
96+
<Route path="/" component={App}>
97+
<Route path="hello/:name" component={Hello} />
98+
</Route>
99+
</Router>
100+
), node, function () {
101+
const a = node.querySelectorAll('a')[1]
102+
expect(a.className.trim()).toEqual('active')
103+
done()
104+
})
105+
})
106+
107+
it('is not active when its query does not match', function (done) {
108+
render((
109+
<Router history={createHistory('/hello/ryan?the=other+query')}>
110+
<Route path="/" component={App}>
111+
<Route path="hello/:name" component={Hello} />
112+
</Route>
113+
</Router>
114+
), node, function () {
115+
const a = node.querySelectorAll('a')[1]
116+
expect(a.className.trim()).toEqual('')
117+
done()
118+
})
119+
})
120+
})
121+
43122
it('transitions to the correct route with deprecated props', function (done) {
44123
class LinkWrapper extends Component {
45124
handleClick() {

0 commit comments

Comments
 (0)