Skip to content

Commit 29de49c

Browse files
committed
feat(route-detail): Added routeDetail component and route
1 parent 6c54047 commit 29de49c

File tree

15 files changed

+1744
-47
lines changed

15 files changed

+1744
-47
lines changed

packages/gtfs-react/package.json

+4
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,19 @@
55
"dependencies": {
66
"ant-design": "^1.0.0",
77
"antd": "^3.1.6",
8+
"apollo-boost": "^0.1.3",
89
"apollo-cache-inmemory": "^1.1.5",
910
"apollo-client": "^2.2.1",
1011
"apollo-link": "^1.0.7",
1112
"apollo-link-http": "^1.3.2",
13+
"apollo-link-state": "^0.4.1",
1214
"graphql": "^0.12.3",
1315
"graphql-tag": "^2.6.1",
16+
"leaflet": "^1.3.1",
1417
"react": "^16.2.0",
1518
"react-apollo": "^2.1.0-rc.5",
1619
"react-dom": "^16.2.0",
20+
"react-leaflet": "^1.9.1",
1721
"react-router": "^4.2.0",
1822
"react-router-dom": "^4.2.2",
1923
"react-scripts": "1.1.0"

packages/gtfs-react/public/index.html

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
66
<meta name="theme-color" content="#000000">
7+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.css">
78
<!--
89
manifest.json provides metadata used when your web app is added to the
910
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/

packages/gtfs-react/src/App.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import React, { Component } from 'react';
1+
import React from 'react';
22
import { BrowserRouter as Router, Switch, Route, Redirect } from 'react-router-dom';
33

44
import RoutesContainer from './containers/RoutesContainer';
55
import RouteContainer from './containers/RouteContainer';
66

77
import './App.css';
88

9-
109
const App = () => (
1110
<Router>
1211
<Switch>
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import React, { Component } from 'react';
1+
import React from 'react';
22

33
const Route = ({ route }) => {
4-
console.log(route);
5-
return null;
4+
return <h1>{ route.route_long_name }</h1>;
65
}
76

87
export default Route;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import React, { Fragment } from 'react';
2+
import { Map, Marker, TileLayer, Polyline } from 'react-leaflet';
3+
4+
const RouteMap = ({ shapes }) => {
5+
const positions = shapes.map( shape => [shape.shape_pt_lat, shape.shape_pt_lon]);
6+
return <Fragment>
7+
<Map center={positions[0]} zoom={14} style={{ height: 400 }}>
8+
<TileLayer
9+
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
10+
attribution="&copy; <a href=&quot;http://osm.org/copyright&quot;>OpenStreetMap</a> contributors"
11+
/>
12+
13+
{
14+
shapes.map( (shape) => (<Marker key={shape.shape_pt_sequence} position={[shape.shape_pt_lat, shape.shape_pt_lon]} />))
15+
}
16+
<Polyline positions={ positions } />
17+
</Map>
18+
</Fragment>;
19+
}
20+
21+
export default RouteMap;

packages/gtfs-react/src/components/Routes.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { Component, Fragment } from 'react';
1+
import React, { Fragment } from 'react';
22
import { Link } from 'react-router-dom';
33
import List from 'antd/lib/list';
44

packages/gtfs-react/src/containers/RouteContainer.jsx

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
1-
import React, { Component } from 'react';
2-
import gql from 'graphql-tag'
1+
import React, { Fragment } from 'react';
2+
import { gql } from 'apollo-boost'
33
import { Query } from 'react-apollo';
44

55
import Route from '../components/Route';
6+
import RouteMap from '../components/RouteMap';
67

78
const GET_ROUTE = gql`query Route($id: String!) {
89
route(route_id: $id) {
910
route_id
1011
route_long_name
1112
}
13+
shapes(shape_id: $id) {
14+
shape_pt_sequence
15+
shape_pt_lat
16+
shape_pt_lon
17+
}
1218
}`;
1319

1420
const RouteContainer = ({ match: { params: { id }} }) => {
@@ -18,7 +24,10 @@ const RouteContainer = ({ match: { params: { id }} }) => {
1824
if (error) return `Error! ${error.message}`;
1925

2026
return (
21-
<Route route={data.route} />
27+
<Fragment>
28+
<RouteMap shapes={data.shapes} />
29+
<Route route={data.route} />
30+
</Fragment>
2231
);
2332
}}
2433
</Query>)

packages/gtfs-react/src/containers/RoutesContainer.jsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import React, { Component } from 'react';
21
import gql from 'graphql-tag'
32
import { compose, graphql } from 'react-apollo';
43

@@ -19,4 +18,4 @@ const RoutesContainer = compose(
1918
})
2019
)(Routes);
2120

22-
export default RoutesContainer;
21+
export default RoutesContainer;

packages/gtfs-react/src/index.js

+2-10
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,10 @@ import ReactDOM from 'react-dom';
33
import './index.css';
44
import App from './App';
55

6-
import { ApolloClient } from 'apollo-client';
7-
import { createHttpLink } from 'apollo-link-http';
6+
import ApolloClient from 'apollo-boost';
87
import { ApolloProvider } from 'react-apollo';
9-
import { InMemoryCache } from 'apollo-cache-inmemory';
108

11-
const link = createHttpLink({
12-
uri: 'http://localhost:8080/graphql'
13-
});
14-
15-
const cache = new InMemoryCache();
16-
17-
const client = new ApolloClient({ link, cache });
9+
const client = new ApolloClient({ uri: 'http://localhost:8080/graphql' });
1810

1911
ReactDOM.render(<ApolloProvider client={client}>
2012
<App />

packages/gtfs-react/yarn.lock

+115-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
version "2.0.47"
77
resolved "https://registry.yarnpkg.com/@types/async/-/async-2.0.47.tgz#f49ba1dd1f189486beb6e1d070a850f6ab4bd521"
88

9+
"@types/node@^9.4.6":
10+
version "9.6.0"
11+
resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.0.tgz#d3480ee666df9784b1001a1872a2f6ccefb6c2d7"
12+
913
"@types/[email protected]", "@types/zen-observable@^0.5.3":
1014
version "0.5.3"
1115
resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.3.tgz#91b728599544efbb7386d8b6633693a3c2e7ade5"
@@ -195,6 +199,26 @@ anymatch@^1.3.0:
195199
micromatch "^2.1.5"
196200
normalize-path "^2.0.0"
197201

202+
apollo-boost@^0.1.3:
203+
version "0.1.3"
204+
resolved "https://registry.yarnpkg.com/apollo-boost/-/apollo-boost-0.1.3.tgz#5f83af503e5482811867341d2e28cffd42da6bae"
205+
dependencies:
206+
apollo-cache-inmemory "^1.1.11"
207+
apollo-client "^2.2.7"
208+
apollo-link "^1.0.6"
209+
apollo-link-error "^1.0.3"
210+
apollo-link-http "^1.3.1"
211+
apollo-link-state "^0.4.0"
212+
graphql-tag "^2.4.2"
213+
214+
apollo-cache-inmemory@^1.1.11:
215+
version "1.1.11"
216+
resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.1.11.tgz#2a96ad076f40575d622c4a45b1eeced18b2dc8ec"
217+
dependencies:
218+
apollo-cache "^1.1.6"
219+
apollo-utilities "^1.0.10"
220+
graphql-anywhere "^4.1.7"
221+
198222
apollo-cache-inmemory@^1.1.5:
199223
version "1.1.5"
200224
resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.1.5.tgz#74111367fd59caee120197ef663dcb2516971300"
@@ -209,6 +233,12 @@ apollo-cache@^1.1.0, apollo-cache@^1.1.1:
209233
dependencies:
210234
apollo-utilities "^1.0.5"
211235

236+
apollo-cache@^1.1.6:
237+
version "1.1.6"
238+
resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.1.6.tgz#b953488bcc8244e001b9ab9c8b362a1512e9203f"
239+
dependencies:
240+
apollo-utilities "^1.0.10"
241+
212242
apollo-client@^2.2.1:
213243
version "2.2.1"
214244
resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.2.1.tgz#9402ea5aa71d49c668c5a8451025001e135b0beb"
@@ -223,18 +253,58 @@ apollo-client@^2.2.1:
223253
optionalDependencies:
224254
"@types/async" "2.0.47"
225255

256+
apollo-client@^2.2.7:
257+
version "2.2.7"
258+
resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.2.7.tgz#d5adbda81ef1f1c9c105ac71227ca8dc42b5731b"
259+
dependencies:
260+
"@types/zen-observable" "^0.5.3"
261+
apollo-cache "^1.1.6"
262+
apollo-link "^1.0.0"
263+
apollo-link-dedup "^1.0.0"
264+
apollo-utilities "^1.0.10"
265+
symbol-observable "^1.0.2"
266+
zen-observable "^0.7.0"
267+
optionalDependencies:
268+
"@types/async" "2.0.47"
269+
226270
apollo-link-dedup@^1.0.0:
227271
version "1.0.5"
228272
resolved "https://registry.yarnpkg.com/apollo-link-dedup/-/apollo-link-dedup-1.0.5.tgz#1c213d7ebbe48e74b016fffacd7e6a53dc309e32"
229273
dependencies:
230274
apollo-link "^1.0.7"
231275

276+
apollo-link-error@^1.0.3:
277+
version "1.0.7"
278+
resolved "https://registry.yarnpkg.com/apollo-link-error/-/apollo-link-error-1.0.7.tgz#df6d7b13e9b73f9a615547b65ec9a4c930ca7f18"
279+
dependencies:
280+
apollo-link "^1.2.1"
281+
282+
apollo-link-http-common@^0.2.3:
283+
version "0.2.3"
284+
resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.3.tgz#82ae0d4ff0cdd7c5c8826411d9dd7f7d8049ca46"
285+
dependencies:
286+
apollo-link "^1.2.1"
287+
288+
apollo-link-http@^1.3.1:
289+
version "1.5.3"
290+
resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.3.tgz#3aa0d3ecfe5666ef0c360f359c425ff6ea1d285b"
291+
dependencies:
292+
apollo-link "^1.2.1"
293+
apollo-link-http-common "^0.2.3"
294+
232295
apollo-link-http@^1.3.2:
233296
version "1.3.2"
234297
resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.3.2.tgz#63537ee5ecf9c004efb0317f1222b7dbc6f21559"
235298
dependencies:
236299
apollo-link "^1.0.7"
237300

301+
apollo-link-state@^0.4.0, apollo-link-state@^0.4.1:
302+
version "0.4.1"
303+
resolved "https://registry.yarnpkg.com/apollo-link-state/-/apollo-link-state-0.4.1.tgz#65e9e0e12c67936b8c4b12b8438434f393104579"
304+
dependencies:
305+
apollo-utilities "^1.0.8"
306+
graphql-anywhere "^4.1.0-alpha.0"
307+
238308
apollo-link@^1.0.0, apollo-link@^1.0.7:
239309
version "1.0.7"
240310
resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.0.7.tgz#42cd38a7378332fc3e41a214ff6a6e5e703a556f"
@@ -243,10 +313,22 @@ apollo-link@^1.0.0, apollo-link@^1.0.7:
243313
apollo-utilities "^1.0.0"
244314
zen-observable "^0.6.0"
245315

316+
apollo-link@^1.0.6, apollo-link@^1.2.1:
317+
version "1.2.1"
318+
resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.1.tgz#c120b16059f9bd93401b9f72b94d2f80f3f305d2"
319+
dependencies:
320+
"@types/node" "^9.4.6"
321+
apollo-utilities "^1.0.0"
322+
zen-observable-ts "^0.8.6"
323+
246324
apollo-utilities@^1.0.0, apollo-utilities@^1.0.4, apollo-utilities@^1.0.5:
247325
version "1.0.5"
248326
resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.5.tgz#a5e99507d730ce21e84e07c7a9c7586b2ccdc58e"
249327

328+
apollo-utilities@^1.0.10, apollo-utilities@^1.0.8:
329+
version "1.0.10"
330+
resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.10.tgz#0c35696891d4fa28d76768e0f7249d63c6da08b9"
331+
250332
append-transform@^0.4.0:
251333
version "0.4.0"
252334
resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
@@ -3017,12 +3099,22 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
30173099
version "4.1.11"
30183100
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
30193101

3102+
graphql-anywhere@^4.1.0-alpha.0, graphql-anywhere@^4.1.7:
3103+
version "4.1.7"
3104+
resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-4.1.7.tgz#cbb9106905bcc25bc0e8390548a97f8b154d3f9b"
3105+
dependencies:
3106+
apollo-utilities "^1.0.10"
3107+
30203108
graphql-anywhere@^4.1.1:
30213109
version "4.1.2"
30223110
resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-4.1.2.tgz#55e58593158f3deb0814def522c55e948c57cabb"
30233111
dependencies:
30243112
apollo-utilities "^1.0.5"
30253113

3114+
graphql-tag@^2.4.2:
3115+
version "2.8.0"
3116+
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.8.0.tgz#52cdea07a842154ec11a2e840c11b977f9b835ce"
3117+
30263118
graphql-tag@^2.6.1:
30273119
version "2.6.1"
30283120
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.6.1.tgz#4788d509f6e29607d947fc47a40c4e18f736d34a"
@@ -4111,6 +4203,10 @@ lcid@^1.0.0:
41114203
dependencies:
41124204
invert-kv "^1.0.0"
41134205

4206+
leaflet@^1.3.1:
4207+
version "1.3.1"
4208+
resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.3.1.tgz#86f336d2fb0e2d0ff446677049a5dc34cf0ea60e"
4209+
41144210
leven@^2.1.0:
41154211
version "2.1.0"
41164212
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
@@ -4176,6 +4272,10 @@ locate-path@^2.0.0:
41764272
p-locate "^2.0.0"
41774273
path-exists "^3.0.0"
41784274

4275+
lodash-es@^4.0.0:
4276+
version "4.17.7"
4277+
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.7.tgz#db240a3252c3dd8360201ac9feef91ac977ea856"
4278+
41794279
lodash._getnative@^3.0.0:
41804280
version "3.9.1"
41814281
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
@@ -4249,7 +4349,7 @@ lodash.uniq@^4.5.0:
42494349
version "4.5.0"
42504350
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
42514351

4252-
4352+
[email protected], lodash@^4.0.0:
42534353
version "4.17.5"
42544354
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
42554355

@@ -5796,6 +5896,14 @@ react-lazy-load@^3.0.12:
57965896
lodash.throttle "^4.0.0"
57975897
prop-types "^15.5.8"
57985898

5899+
react-leaflet@^1.9.1:
5900+
version "1.9.1"
5901+
resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-1.9.1.tgz#0a282d8d26f66ea2d719ebb8f4a5fa156b33b8c8"
5902+
dependencies:
5903+
lodash "^4.0.0"
5904+
lodash-es "^4.0.0"
5905+
warning "^3.0.0"
5906+
57995907
react-router-dom@^4.2.2:
58005908
version "4.2.2"
58015909
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.2.2.tgz#c8a81df3adc58bba8a76782e946cbd4eae649b8d"
@@ -7373,6 +7481,12 @@ yargs@~3.10.0:
73737481
decamelize "^1.0.0"
73747482
window-size "0.1.0"
73757483

7484+
zen-observable-ts@^0.8.6:
7485+
version "0.8.8"
7486+
resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.8.tgz#1a586dc204fa5632a88057f879500e0d2ba06869"
7487+
dependencies:
7488+
zen-observable "^0.7.0"
7489+
73767490
zen-observable@^0.6.0:
73777491
version "0.6.1"
73787492
resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.6.1.tgz#01dbed3bc8d02cbe9ee1112c83e04c807f647244"

packages/gtfs-server/connectors.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const Route = require('gtfs/models/gtfs/route');
22
const Shape = require('gtfs/models/gtfs/shape');
3+
const Stop = require('gtfs/models/gtfs/stop');
34

45
class Routes {
56
async getAllRoutes(params = {}) {
@@ -12,12 +13,19 @@ class Routes {
1213
}
1314
}
1415

16+
class Stops {
17+
async findStops(params = {}) {
18+
const stops = await Stop.find(params);
19+
return stops;
20+
}
21+
}
22+
1523
class Shapes {
1624
async findShapes(params = {}) {
17-
const shapes = await Shape.find(params);
25+
const shapes = await Shape.find(params).sort({ 'shape_pt_sequence' : 1 });
1826
return shapes;
1927
}
2028
}
2129

2230

23-
module.exports = { Routes, Shapes };
31+
module.exports = { Routes, Shapes, Stops };

0 commit comments

Comments
 (0)