1
- import React , { Component } from 'react'
1
+ import React , { Component , PureComponent } from 'react'
2
2
import PropTypes from 'prop-types'
3
3
import { Label , Button } from 'react-bootstrap'
4
4
import { VelocityTransitionGroup } from 'velocity-react'
@@ -40,7 +40,15 @@ class RouteViewer extends Component {
40
40
}
41
41
42
42
render ( ) {
43
- const { operators, routes, hideBackButton, languageConfig } = this . props
43
+ const {
44
+ findRoute,
45
+ hideBackButton,
46
+ languageConfig,
47
+ operators,
48
+ routes,
49
+ setViewedRoute,
50
+ viewedRoute
51
+ } = this . props
44
52
const sortedRoutes = routes ? Object . values ( routes ) . sort ( routeComparator ) : [ ]
45
53
const agencySortedRoutes = operators . length > 0
46
54
? sortedRoutes . sort ( ( a , b ) => {
@@ -78,10 +86,13 @@ class RouteViewer extends Component {
78
86
const operator = operatorForRoute ( operators , route ) || { }
79
87
return (
80
88
< RouteRow
89
+ findRoute = { findRoute }
90
+ isActive = { viewedRoute && viewedRoute . routeId === route . id }
81
91
key = { route . id }
82
92
operator = { operator }
83
93
route = { route }
84
- { ...this . props } />
94
+ setViewedRoute = { setViewedRoute }
95
+ />
85
96
)
86
97
} )
87
98
}
@@ -91,15 +102,10 @@ class RouteViewer extends Component {
91
102
}
92
103
}
93
104
94
- class RouteRow extends Component {
95
- isActiveRoute = ( ) => {
96
- const { route, viewedRoute } = this . props
97
- return viewedRoute && viewedRoute . routeId === route . id
98
- }
99
-
105
+ class RouteRow extends PureComponent {
100
106
_onClick = ( ) => {
101
- const { route , findRoute , setViewedRoute } = this . props
102
- if ( this . isActiveRoute ( ) ) {
107
+ const { findRoute , isActive , route , setViewedRoute } = this . props
108
+ if ( isActive ) {
103
109
// Deselect current route if active.
104
110
setViewedRoute ( { routeId : null } )
105
111
} else {
@@ -110,10 +116,8 @@ class RouteRow extends Component {
110
116
}
111
117
112
118
render ( ) {
113
- const { operator, route, routes, viewedRoute } = this . props
114
- const isActive = this . isActiveRoute ( )
119
+ const { isActive, route, operator} = this . props
115
120
const { defaultRouteColor, defaultRouteTextColor, longNameSplitter} = operator
116
- const activeRouteData = isActive ? routes [ viewedRoute . routeId ] : null
117
121
const color = `#${ defaultRouteTextColor || route . textColor || '000000' } `
118
122
const backgroundColor = `#${ defaultRouteColor || route . color || 'ffffff' } `
119
123
const longName = ( longNameSplitter && route . longName && route . longName . split ( longNameSplitter ) . length > 1 )
@@ -146,8 +150,8 @@ class RouteRow extends Component {
146
150
< VelocityTransitionGroup enter = { { animation : 'slideDown' } } leave = { { animation : 'slideUp' } } >
147
151
{ isActive && (
148
152
< div style = { { padding : 8 } } >
149
- { activeRouteData . url
150
- ? < a href = { activeRouteData . url } target = '_blank' > Route Details</ a >
153
+ { route . url
154
+ ? < a href = { route . url } target = '_blank' > Route Details</ a >
151
155
: 'No route URL provided.'
152
156
}
153
157
</ div >
0 commit comments