Skip to content

Commit fc26e9d

Browse files
committed
fix(gtfs-search): set autoload to false, formatting fixes
autoload=false prevents the react-select component from loading options when the component renders. We need this because otherwise if we were to render some number of select components they would all try to load their options on render.
1 parent a0aef69 commit fc26e9d

File tree

1 file changed

+36
-29
lines changed

1 file changed

+36
-29
lines changed

lib/gtfs/components/gtfssearch.js

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export default class GtfsSearch extends Component {
1515
}
1616

1717
static defaultProps = {
18+
autoload: false, // prevent options from auto-loading, esp. when rendering multiple
1819
entities: ['routes', 'stops'],
1920
minimumInput: 1
2021
}
@@ -43,18 +44,19 @@ export default class GtfsSearch extends Component {
4344
}
4445

4546
_getRoutes = (input) => {
46-
const feedIds = this.props.feeds.map(getFeedId)
47+
const {feeds, filterByStop} = this.props
48+
const feedIds = feeds.map(getFeedId)
4749

4850
if (!feedIds.length) return []
4951

5052
// don't need to use limit here
51-
// const limit = this.props.limit ? '&limit=' + this.props.limit : ''
53+
// const limit = limit ? '&limit=' + limit : ''
5254
const nameQuery = input ? '&name=' + input : ''
53-
const url = this.props.filterByStop ? `/api/manager/routes?stop=${this.props.filterByStop.stop_id}&feed=${feedIds.toString()}` : `/api/manager/routes?feed=${feedIds.toString()}${nameQuery}`
55+
const url = filterByStop
56+
? `/api/manager/routes?stop=${filterByStop.stop_id}&feed=${feedIds.toString()}`
57+
: `/api/manager/routes?feed=${feedIds.toString()}${nameQuery}`
5458
return fetch(url)
55-
.then((response) => {
56-
return response.json()
57-
})
59+
.then((response) => response.json())
5860
.then((routes) => {
5961
const routeOptions = routes !== null && routes.length > 0
6062
? routes.sort((a, b) => {
@@ -65,14 +67,7 @@ export default class GtfsSearch extends Component {
6567
} else {
6668
return bRouteName.startsWith(input) ? 1 : aRouteName.localeCompare(bRouteName)
6769
}
68-
// return 0
69-
}).map(route => (
70-
{
71-
route,
72-
value: route.route_id,
73-
label: `${this.getRouteName(route)} (${route.route_id})`,
74-
agency: getFeed(this.props.feeds, route.feed_id)}
75-
))
70+
}).map(this._routeToOption)
7671
: []
7772
return routeOptions
7873
})
@@ -89,11 +84,11 @@ export default class GtfsSearch extends Component {
8984

9085
const limit = this.props.limit ? '&limit=' + this.props.limit : ''
9186
const nameQuery = input ? '&name=' + input : ''
92-
const url = this.props.filterByRoute ? `/api/manager/stops?route=${this.props.filterByRoute.route_id}&feed=${feedIds.toString()}${limit}` : `/api/manager/stops?feed=${feedIds.toString()}${nameQuery}${limit}`
87+
const url = this.props.filterByRoute
88+
? `/api/manager/stops?route=${this.props.filterByRoute.route_id}&feed=${feedIds.toString()}${limit}`
89+
: `/api/manager/stops?feed=${feedIds.toString()}${nameQuery}${limit}`
9390
return fetch(url)
94-
.then((response) => {
95-
return response.json()
96-
})
91+
.then((response) => response.json())
9792
.then((stops) => {
9893
const stopOptions = stops !== null && stops.length > 0
9994
? stops.sort((a, b) => {
@@ -104,16 +99,7 @@ export default class GtfsSearch extends Component {
10499
} else {
105100
return bStopName.startsWith(input) ? 1 : aStopName.localeCompare(bStopName)
106101
}
107-
}).map(stop => {
108-
const agency = getFeed(this.props.feeds, stop.feed_id)
109-
const id = stop.stop_code ? stop.stop_code : stop.stop_id
110-
return {
111-
stop,
112-
value: stop.stop_id,
113-
label: `${stop.stop_name} (${id})`,
114-
agency: agency
115-
}
116-
})
102+
}).map(this._stopToOption)
117103
: []
118104
return stopOptions
119105
})
@@ -123,6 +109,26 @@ export default class GtfsSearch extends Component {
123109
})
124110
}
125111

112+
_routeToOption = route => (
113+
{
114+
route,
115+
value: route.route_id,
116+
label: `${this.getRouteName(route)} (${route.route_id})`,
117+
agency: getFeed(this.props.feeds, route.feed_id)
118+
}
119+
)
120+
121+
_stopToOption = stop => {
122+
const agency = getFeed(this.props.feeds, stop.feed_id)
123+
const id = stop.stop_code ? stop.stop_code : stop.stop_id
124+
return {
125+
stop,
126+
value: stop.stop_id,
127+
label: `${stop.stop_name} (${id})`,
128+
agency
129+
}
130+
}
131+
126132
getRouteName = (route) => {
127133
const routeName = route.route_short_name && route.route_long_name
128134
? `${route.route_short_name} - ${route.route_long_name}`
@@ -163,7 +169,8 @@ export default class GtfsSearch extends Component {
163169
}
164170

165171
render () {
166-
const placeholder = this.props.placeholder || 'Begin typing to search for ' + this.props.entities.join(' or ') + '...'
172+
const {entities, placeholder: propsPlaceholder} = this.props
173+
const placeholder = propsPlaceholder || 'Begin typing to search for ' + entities.join(' or ') + '...'
167174
return (
168175
<Select.Async
169176
{...this.props}

0 commit comments

Comments
 (0)