Skip to content

Commit 551cf75

Browse files
committed
fix(modes-panel): refactor mode button into separate component
1 parent 0f4af4c commit 551cf75

File tree

2 files changed

+51
-28
lines changed

2 files changed

+51
-28
lines changed

lib/components/form/mode-button.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import React, {PropTypes, Component} from 'react'
2+
3+
import { getModeIcon } from '../../util/itinerary'
4+
5+
export default class ModeButton extends Component {
6+
static propTypes = {
7+
active: PropTypes.bool,
8+
mode: PropTypes.string,
9+
queryModes: PropTypes.array,
10+
setMode: PropTypes.func
11+
}
12+
13+
_onToggleMode = () => {
14+
const {active, mode, queryModes, setMode} = this.props
15+
// remove icon
16+
if (active) {
17+
setMode({mode: queryModes.filter(m => m !== mode).join(',')})
18+
} else {
19+
// add icon
20+
queryModes.push(mode)
21+
setMode({mode: queryModes.join(',')})
22+
}
23+
}
24+
25+
render () {
26+
const {active, icons, mode} = this.props
27+
return (
28+
<div className='mode-icon-highlight'>
29+
<button
30+
onClick={this._onToggleMode}
31+
title={mode}>
32+
<div
33+
className='mode-icon'
34+
style={{ fill: active ? 'red' : '#bbb' }}>
35+
{getModeIcon(mode, icons)}
36+
</div>
37+
</button>
38+
</div>
39+
)
40+
}
41+
}

lib/components/form/modes-panel.js

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import React, { Component, PropTypes } from 'react'
22
import { connect } from 'react-redux'
33

4-
import { getModeIcon } from '../../util/itinerary'
5-
64
import { setMode } from '../../actions/form'
5+
import ModeButton from './mode-button'
76

87
class ModesPanel extends Component {
98
static propTypes = {
@@ -14,7 +13,7 @@ class ModesPanel extends Component {
1413
}
1514

1615
render () {
17-
const {icons, modeGroups, queryModes} = this.props
16+
const {icons, modeGroups, queryModes, setMode} = this.props
1817

1918
return (
2019
<div className='modes-panel'>
@@ -24,26 +23,13 @@ class ModesPanel extends Component {
2423
<div className='group-name'>{group.name}</div>
2524
{group.modes.map(mode => {
2625
const modeSelected = queryModes.indexOf(mode) !== -1
27-
return (
28-
<div key={mode} className='mode-icon-highlight'>
29-
<button
30-
onClick={() => {
31-
if (modeSelected) {
32-
this.props.setMode(queryModes.filter(m => m !== mode).join(','))
33-
} else {
34-
queryModes.push(mode)
35-
this.props.setMode(queryModes.join(','))
36-
}
37-
}}
38-
>
39-
<div className='mode-icon'
40-
style={{ fill: modeSelected ? 'red' : '#bbb' }}
41-
>
42-
{getModeIcon(mode, icons)}
43-
</div>
44-
</button>
45-
</div>
46-
)
26+
return <ModeButton
27+
active={modeSelected}
28+
icons={icons}
29+
key={mode}
30+
mode={mode}
31+
queryModes={queryModes}
32+
setMode={setMode} />
4733
})}
4834
</div>
4935
)
@@ -62,10 +48,6 @@ const mapStateToProps = (state, ownProps) => {
6248
}
6349
}
6450

65-
const mapDispatchToProps = (dispatch, ownProps) => {
66-
return {
67-
setMode: (mode) => { dispatch(setMode({ mode })) }
68-
}
69-
}
51+
const mapDispatchToProps = {setMode}
7052

7153
export default connect(mapStateToProps, mapDispatchToProps)(ModesPanel)

0 commit comments

Comments
 (0)