forked from opentripplanner/otp-react-redux
-
Notifications
You must be signed in to change notification settings - Fork 0
/
example.js
141 lines (126 loc) · 3.4 KB
/
example.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// import this polyfill in order to make webapp compatible with IE 11
import 'es6-math'
import {ClassicLegIcon, ClassicModeIcon} from '@opentripplanner/icons'
import { createHashHistory } from 'history'
import { connectRouter, routerMiddleware } from 'connected-react-router'
import React, { Component } from 'react'
import { render } from 'react-dom'
import { createStore, combineReducers, applyMiddleware, compose } from 'redux'
import { Provider } from 'react-redux'
import thunk from 'redux-thunk'
import createLogger from 'redux-logger'
// import Bootstrap Grid components for layout
import { Grid, Row, Col } from 'react-bootstrap'
// import OTP-RR components
import {
DefaultMainPanel,
DesktopNav,
Map,
MobileMain,
ResponsiveWebapp,
createOtpReducer,
createUserReducer
} from './lib'
// load the OTP configuration
import otpConfig from './config.yml'
// Set useCustomIcons to true to override classic icons with the exports from
// custom-icons.js
const useCustomIcons = false
// Define icon sets for modes.
let MyLegIcon = ClassicLegIcon
let MyModeIcon = ClassicModeIcon
if (useCustomIcons) {
const CustomIcons = require('./custom-icons')
MyLegIcon = CustomIcons.CustomLegIcon
MyModeIcon = CustomIcons.CustomModeIcon
}
// create an initial query for demo/testing purposes
const initialQuery = {
from: {
lat: 45.5246,
lon: -122.6710
},
to: {
lat: 45.5307,
lon: -122.6647
},
type: 'ITINERARY'
}
const history = createHashHistory()
const middleware = [
thunk,
routerMiddleware(history) // for dispatching history actions
]
// check if app is being run in development mode. If so, enable redux-logger
if (process.env.NODE_ENV === 'development') {
middleware.push(createLogger())
}
// set up the Redux store
const store = createStore(
combineReducers({
otp: createOtpReducer(otpConfig),
user: createUserReducer(),
router: connectRouter(history)
}),
compose(applyMiddleware(...middleware))
)
// define a simple responsive UI using Bootstrap and OTP-RR
class OtpRRExample extends Component {
render () {
/** desktop view **/
const desktopView = (
<div className='otp'>
<DesktopNav />
<Grid>
<Row className='main-row'>
<Col sm={6} md={4} className='sidebar'>
{/* <main> Needed for accessibility checks. TODO: Find a better place. */}
<main>
<DefaultMainPanel LegIcon={MyLegIcon} ModeIcon={MyModeIcon} />
</main>
</Col>
<Col sm={6} md={8} className='map-container'>
<Map />
</Col>
</Row>
</Grid>
</div>
)
/** mobile view **/
const mobileView = (
// <main> Needed for accessibility checks. TODO: Find a better place.
<main>
<MobileMain
LegIcon={MyLegIcon}
ModeIcon={MyModeIcon}
map={<Map />}
title={<div className='navbar-title'>OpenTripPlanner</div>}
/>
</main>
)
/** the main webapp **/
return (
<ResponsiveWebapp
desktopView={desktopView}
mobileView={mobileView}
LegIcon={MyLegIcon}
/>
)
}
}
// render the app
render(
(
<Provider store={store}>
{ /**
* If not using router history, simply include OtpRRExample here:
* e.g.
* <OtpRRExample />
*/
}
<OtpRRExample />
</Provider>
)
,
document.getElementById('root')
)