Skip to content

Commit 60a5158

Browse files
author
David Emory
committed
feat(form): Refactor settings-bar to match structure of date-time-preview
1 parent debda63 commit 60a5158

File tree

6 files changed

+65
-51
lines changed

6 files changed

+65
-51
lines changed

lib/actions/ui.js

Lines changed: 0 additions & 3 deletions
This file was deleted.

lib/components/form/date-time-preview.js

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,51 @@ import { Button } from 'react-bootstrap'
44

55
class DateTimePreview extends Component {
66
static propTypes = {
7+
caret: PropTypes.string,
8+
compressed: PropTypes.bool,
79
date: PropTypes.string,
810
departArrive: PropTypes.string,
911
time: PropTypes.string,
1012
onClick: PropTypes.func
1113
}
1214

1315
render () {
14-
const { date, time, departArrive } = this.props
16+
const { caret, date, time, departArrive } = this.props
1517

1618
let timeStr
1719
if (departArrive === 'NOW') timeStr = 'Leave now'
1820
else if (departArrive === 'ARRIVE') timeStr = 'Arrive ' + time
1921
else if (departArrive === 'DEPART') timeStr = 'Depart ' + time
2022

21-
return (
22-
<div className='date-time-preview'>
23-
<div className='details'>
24-
<i className='fa fa-calendar' /> {date}
25-
<br />
26-
<i className='fa fa-clock-o' /> {timeStr}
27-
</div>
28-
<div>
29-
<Button className='change-button' onClick={this.props.onClick}>
30-
Change
31-
</Button>
32-
</div>
23+
const summary = (
24+
<div className='details'>
25+
<i className='fa fa-calendar' /> {date}
26+
<br />
27+
<i className='fa fa-clock-o' /> {timeStr}
28+
</div>
29+
)
30+
31+
const button = (
32+
<div className='button-container'>
33+
<Button className='change-button' onClick={this.props.onClick}>
34+
Change {caret && <span> <i className={`fa fa-caret-${caret}`} /></span>}
35+
</Button>
3336
</div>
3437
)
38+
39+
return this.props.compressed
40+
? /* 'compressed' layout -- button is below selected mode preview */ (
41+
<div className='date-time-preview compressed'>
42+
{summary}
43+
{button}
44+
</div>
45+
) : /* 'wide' layout -- button and selected mode preview are side-by-side */ (
46+
<div className='date-time-preview wide'>
47+
{button}
48+
{summary}
49+
<div style={{ clear: 'both' }} />
50+
</div>
51+
)
3552
}
3653
}
3754

lib/components/form/form.css

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,29 +27,45 @@
2727
margin-right: 5px;
2828
}
2929

30-
/* Settings Bar */
3130

32-
.otp .settings-bar {
31+
32+
/* Date/Time Preview */
33+
34+
.otp .date-time-preview {
35+
position: relative;
36+
}
37+
38+
.otp .date-time-preview.compressed .summary {
39+
text-align: center;
40+
}
41+
42+
.otp .date-time-preview.wide .button-container {
43+
float: right;
44+
}
45+
46+
/* Settings Preview */
47+
48+
.otp .settings-preview {
3349
position: relative;
3450
}
3551

36-
.otp .settings-bar .selected-modes {
52+
.otp .settings-preview .selected-modes {
3753
font-size: 14px;
3854
}
3955

40-
.otp .settings-bar.compressed .selected-modes {
56+
.otp .settings-preview.compressed .selected-modes {
4157
text-align: center;
4258
}
4359

44-
.otp .settings-bar .selected-modes .some-selected .mode-icon {
60+
.otp .settings-preview .selected-modes .some-selected .mode-icon {
4561
display: inline-block;
4662
margin-right: 5px;
4763
width: 16px;
4864
height: 16px;
4965
fill: black;
5066
}
5167

52-
.otp .settings-bar.wide .button-container {
68+
.otp .settings-preview.wide .button-container {
5369
float: right;
5470
}
5571

lib/components/form/settings-bar.js renamed to lib/components/form/settings-preview.js

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,22 @@ import { connect } from 'react-redux'
44

55
import { getModeIcon } from '../../util/itinerary'
66

7-
import { setShowExtendedSettings } from '../../actions/ui'
8-
9-
class SettingsBar extends Component {
7+
class SettingsPreview extends Component {
108
static propTypes = {
119
// component props
10+
caret: PropTypes.string,
1211
compressed: PropTypes.bool,
1312
icons: PropTypes.object,
1413
showCaret: PropTypes.bool,
14+
onClick: PropTypes.func,
1515

1616
// application state
1717
modeGroups: PropTypes.array,
18-
queryModes: PropTypes.array,
19-
showExtendedSettings: PropTypes.bool,
20-
21-
// dispatch
22-
setShowExtendedSettings: PropTypes.func
18+
queryModes: PropTypes.array
2319
}
2420

25-
_onClick = () => this.props.setShowExtendedSettings({showExtendedSettings: !this.props.showExtendedSettings})
26-
2721
render () {
28-
const { icons, modeGroups, queryModes, showCaret, showExtendedSettings } = this.props
22+
const { caret, icons, modeGroups, queryModes } = this.props
2923

3024
let totalModeCount = 0
3125
modeGroups.forEach(g => { totalModeCount += g.modes.length })
@@ -52,23 +46,20 @@ class SettingsBar extends Component {
5246

5347
const button = (
5448
<div className='button-container'>
55-
<Button
56-
className='settings-button'
57-
onClick={this._onClick}
58-
>Settings
59-
{showCaret && <span> <i className={`fa fa-caret-${showExtendedSettings ? 'up' : 'down'}`} /></span>}
49+
<Button className='settings-button' onClick={this.props.onClick}>
50+
Settings {caret && <span> <i className={`fa fa-caret-${caret}`} /></span>}
6051
</Button>
6152
</div>
6253
)
6354

6455
return this.props.compressed
6556
? /* 'compressed' layout -- button is below selected mode preview */ (
66-
<div className='settings-bar compressed'>
57+
<div className='settings-preview compressed'>
6758
{selectedModes}
6859
{button}
6960
</div>
7061
) : /* 'wide' layout -- button and selected mode preview are side-by-side */ (
71-
<div className='settings-bar wide'>
62+
<div className='settings-preview wide'>
7263
{button}
7364
{selectedModes}
7465
<div style={{ clear: 'both' }} />
@@ -79,12 +70,11 @@ class SettingsBar extends Component {
7970

8071
const mapStateToProps = (state, ownProps) => {
8172
return {
82-
showExtendedSettings: state.otp.ui.showExtendedSettings,
8373
modeGroups: state.otp.config.modeGroups,
8474
queryModes: state.otp.currentQuery.mode.split(',')
8575
}
8676
}
8777

88-
const mapDispatchToProps = {setShowExtendedSettings}
78+
const mapDispatchToProps = { }
8979

90-
export default connect(mapStateToProps, mapDispatchToProps)(SettingsBar)
80+
export default connect(mapStateToProps, mapDispatchToProps)(SettingsPreview)

lib/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import LocationField from './components/form/location-field'
77
import ModeSelector from './components/form/mode-selector'
88
import ModesPanel from './components/form/modes-panel'
99
import PlanTripButton from './components/form/plan-trip-button'
10-
import SettingsBar from './components/form/settings-bar'
10+
import SettingsPreview from './components/form/settings-preview'
1111
import SettingsSelectorPanel from './components/form/settings-selector-panel'
1212
import SwitchButton from './components/form/switch-button'
1313

@@ -53,7 +53,7 @@ export {
5353
ModeSelector,
5454
ModesPanel,
5555
PlanTripButton,
56-
SettingsBar,
56+
SettingsPreview,
5757
SettingsSelectorPanel,
5858
SwitchButton,
5959

lib/reducers/create-otp-reducer.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@ function createOtpReducer (config, initialQuery) {
4444
bikeRental: {
4545
stations: []
4646
}
47-
},
48-
ui: {
49-
showExtendedSettings: false
5047
}
5148
}
5249

@@ -171,9 +168,6 @@ function createOtpReducer (config, initialQuery) {
171168
case 'ROUTES_AT_STOP_RESPONSE':
172169
return update(state, { transitIndex: { stops: { [action.payload.stopId]: { routes: { $set: action.payload.routes } } } } })
173170

174-
case 'SET_SHOW_EXTENDED_SETTINGS':
175-
return update(state, { ui: { showExtendedSettings: { $set: action.payload.showExtendedSettings } } })
176-
177171
default:
178172
return state
179173
}

0 commit comments

Comments
 (0)