Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.76 KB | None | 0 0
  1. import React, { useState } from 'react';
  2. import './App.css';
  3. import { gql } from 'apollo-boost';
  4. import { useQuery } from '@apollo/react-hooks'
  5. import { Query } from 'react-apollo'
  6. import axios from 'axios';
  7.  
  8.  
  9. const fromAddressToEficode = gql`
  10. query RouteToEficode($addressForRoute: String!){
  11. plan(
  12. from: $addressForRoute,
  13. to: "lat:60.169390, lon:24.925750",
  14. numItineraries: 1,
  15. ) {
  16. itineraries {
  17. legs {
  18. startTime
  19. endTime
  20. mode
  21. duration
  22. distance
  23. transitLeg
  24. } fares {
  25. type
  26. cents
  27. currency
  28. }
  29. }
  30. }
  31. }
  32. `
  33.  
  34. const fromEficodeToAddress = gql`
  35. query RouteToAddress($addressForRoute: String!){
  36. plan(
  37. from: "lat:60.169390, lon:24.925750",
  38. to: $addressForRoute,
  39. numItineraries: 1,
  40. ) {
  41. itineraries {
  42. legs {
  43. startTime
  44. endTime
  45. mode
  46. duration
  47. distance
  48. transitLeg
  49. } fares {
  50. type
  51. cents
  52. currency
  53. }
  54. }
  55. }
  56. }
  57. `
  58.  
  59. function Timetables() {
  60. const [addresses, setAddresses] = useState([]);
  61. const [addressCoordinates, setAddressCoordinates] = useState([]);
  62. const [toFromEficode, setToFromEficode] = useState(true);
  63. const { loading, error, data } = useQuery(fromAddressToEficode)
  64. const [search, setSearch] = useState("");
  65. if (loading) return <p>Loading ...</p>;
  66.  
  67. document.title = 'Timetables';
  68.  
  69.  
  70. const handleSubmit = (e) => {
  71. e.preventDefault();
  72. axios.get(`http://api.digitransit.fi/geocoding/v1/search?text=${search}&boundary.circle.lat=60.169390&boundary.circle.lon=24.925750&boundary.circle.radius=100`)
  73. .then(res => {
  74. setAddressCoordinates(res.data.features.map((feature) => `{lat:${feature.geometry.coordinates[1]}, lon:${feature.geometry.coordinates[0]}}`))
  75. setAddresses(res.data.features);
  76. })
  77. }
  78.  
  79. const handleSearchChange = (e) => {
  80. setSearch(e.target.value);
  81. }
  82.  
  83. // console.log(addressCoordinates);
  84.  
  85. return (
  86. <div className="App">
  87. <h1 className="App-header">
  88. Tarkasta julkisen liikenteen aikataulut toimistolle
  89. <br></br>
  90. tai toimstolta valitseemasi osoitteeseen!
  91. </h1>
  92. <div>
  93. <RouteBars handleSubmit={handleSubmit} handleSearchChange={handleSearchChange} />
  94. <h5>
  95. Valitse, haluatko mennä Eficoden toimistolle, vai lähteä sieltä.
  96. </h5>
  97. <button onClick={() => setToFromEficode(!toFromEficode)}>
  98. {toFromEficode ? 'Valitsemasi kohde -> Eficode' : 'Eficode -> valitsemasi kohde'}
  99. </button>
  100. </div>
  101. <AddressDisplay addresses={addresses} />
  102. <RouteDisplay addressesCoordinates={addressesCoordinates} />
  103. </div>
  104. );
  105. }
  106.  
  107. function AddressDisplay(props) {
  108. return (
  109. <div>
  110. {props.addresses.map((address) => <div key={address.properties.label}>
  111. <a
  112. className="App-link"
  113. href="#"
  114. target="_blank"
  115. rel="noopener noreferrer"
  116. >
  117. {address.properties.label}
  118. </a>
  119. </div>
  120. )}
  121. </div>
  122. )
  123. }
  124.  
  125. function RouteDisplay() {
  126.  
  127. }
  128.  
  129. function RouteBars(props) {
  130. return (
  131. <div>
  132. <form onSubmit={props.handleSubmit}>
  133. <div>
  134. <label>Eficoden toimisto:</label>
  135. <br></br>
  136. <h3>
  137. Pohjoinen Rautatienkatu 25
  138. </h3>
  139. <label htmlFor="routeToFrom">Hae aikatauluja:</label>
  140. <br></br>
  141. <input id="routeToFrom" type="text" required name="routeToFrom"
  142. size="25" placeholder="Osoite" onChange={props.handleSearchChange} />
  143. <input type="submit" value="Hae aikatauluja" />
  144. </div>
  145. </form>
  146. </div>
  147. );
  148. }
  149.  
  150. export default Timetables;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement