Advertisement
Guest User

App.js

a guest
Nov 22nd, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, {Component} from 'react';
  2. import './App.css';
  3. import logoSmartPoint from './images/logo_petit.png'
  4. import GoogleMapReact from 'google-map-react';
  5. import Restaurant from "./components/Restaurant";
  6. import Marker from "./components/Marker";
  7. import RestaurantDetails from "./components/RestaurantDetails";
  8. import Slider from "./components/Slider";
  9. import RestaurantData from "./RestaurantData";
  10.  
  11.  
  12. class App extends Component {
  13.     constructor(props) {
  14.         super(props);
  15.         this.state = {
  16.             restaurants: [],
  17.             allRestaurants: [],
  18.             selectedRestaurant: null,
  19.             hoveredRestaurant: null,
  20.             search: "",
  21.             selectedMarker: null,
  22.             hoveredMarker: null,
  23.  
  24.             value: {
  25.                 min: 0,
  26.                 max: 5,
  27.             },
  28.         };
  29.     }
  30.  
  31.     async fetchJsonData() {
  32.         const url = "/data.json";
  33.         const response = await fetch(url);
  34.         const data = await response.json();
  35.  
  36.         let restaurants = [];
  37.         for (let i = 0; i < data.length; i++) {
  38.             const restaurant = new RestaurantData(data[i].restaurantName, data[i].imageUrl, data[i].address, data[i].lat, data[i].long, data[i].id);
  39.             restaurants.push(restaurant);
  40.             for (let j = 0; j < data[i].ratings.length; j++) {
  41.                 restaurant.addRating(data[i].ratings[j].stars, data[i].ratings[j].comment);
  42.             }
  43.         }
  44.         this.setState({
  45.             restaurants: restaurants,
  46.             allRestaurants: restaurants
  47.         });
  48.     }
  49.  
  50.     componentDidMount() {
  51.         // noinspection JSIgnoredPromiseFromCall
  52.         this.fetchJsonData();
  53.     }
  54.  
  55.     selectRestaurant = (restaurant) => {
  56.         this.setState({
  57.             selectedRestaurant: restaurant
  58.         })
  59.     };
  60.  
  61.     hoveredRestaurant = (restaurant) => {
  62.         this.setState({
  63.             hoveredRestaurant: restaurant
  64.         })
  65.     };
  66.  
  67.     hoveredMarker = (marker) => {
  68.         this.setState({
  69.             hoveredMarker: marker
  70.         })
  71.     };
  72.  
  73.     handleSearch = (event) => {
  74.         this.setState({
  75.             search: event.target.value,
  76.             restaurants: this.state.allRestaurants.filter((restaurant) => new RegExp(event.target.value, "i").exec(restaurant.restaurantName))
  77.         });
  78.     };
  79.  
  80.     handleFilter = (event) => {
  81.         this.setState({
  82.             search: event.target.value,
  83.             restaurants: this.state.allRestaurants.filter((restaurant) => new RegExp(event.target.value, "i").exec(restaurant.getRating()))
  84.         });
  85.     };
  86.  
  87.  
  88.     render() {
  89.         let center = {
  90.             lat: 48.864716,
  91.             lng: 2.349014
  92.         };
  93.  
  94.         let restaurantDetails = null;
  95.         let restaurantsDisplay =
  96.             <div className="restaurants">
  97.                 {this.state.restaurants.map((restaurant) => {
  98.                     return <Restaurant
  99.                         key={restaurant.restaurantName}
  100.                         restaurant={restaurant}
  101.                         selectRestaurant={this.selectRestaurant}
  102.                         hoverRestaurant={this.hoveredRestaurant}
  103.                         selectedMarker={restaurant === this.state.selectedMarker}
  104.                         hoveredMarker={restaurant === this.state.hoveredMarker}
  105.                     />
  106.                 })}
  107.             </div>;
  108.  
  109.         if (this.state.selectedRestaurant) {
  110.             center = {
  111.                 lat: this.state.selectedRestaurant.lat,
  112.                 lng: this.state.selectedRestaurant.long
  113.             };
  114.             restaurantDetails =
  115.                 <div>
  116.                     <RestaurantDetails
  117.                             key={this.state.selectedRestaurant.restaurantName}
  118.                             restaurant={this.state.selectedRestaurant}
  119.                             selectRestaurant={this.selectRestaurant}
  120.                         />
  121.                 </div>;
  122.             restaurantsDisplay = null;
  123.         }
  124.  
  125.         return (
  126.             <div className="body">
  127.                 <div className="header">
  128.                     <div className="head container">
  129.                         <div className="head-first-part">
  130.                             <a href="http://localhost:3000/"><img className="logo" src={logoSmartPoint} alt={logoSmartPoint}/></a>
  131.                         <input
  132.                             className="search"
  133.                             type="text"
  134.                             placeholder="Recherche..."
  135.                             value={this.state.search}
  136.                             onChange={this.handleSearch}
  137.                         />
  138.                         </div>
  139.                             <div className="filterInterface row">
  140.                                 <p className="filterText col-6">Filtrer par note :</p>
  141.                                 <Slider
  142.                                     search={this.state.search}
  143.                                     value={this.state.search}
  144.                                     restaurant={this.state.allRestaurants}
  145.                                 />
  146.                             </div>
  147.                     </div>
  148.                 </div>
  149.                 <div className="app container">
  150.                     <div className="main">
  151.                         {restaurantDetails}
  152.                         {restaurantsDisplay}
  153.                     </div>
  154.                     <div className="map">
  155.                         <GoogleMapReact
  156.                             bootstrapURLKeys={{key: ""}}
  157.                             center={center}
  158.                             zoom={12}
  159.                         >
  160.                             {this.state.restaurants.map((restaurant) => {
  161.                                 return <Marker
  162.                                     key={restaurant.restaurantName}
  163.                                     lat={restaurant.lat}
  164.                                     lng={restaurant.long}
  165.                                     text={restaurant.id}
  166.                                     selectMarker={this.selectRestaurant}
  167.                                     hoverMarker={this.hoveredMarker}
  168.                                     selected={restaurant === this.state.selectedRestaurant}
  169.                                     hovered={restaurant === this.state.hoveredRestaurant}
  170.                                     marker={restaurant}
  171.  
  172.                                 />
  173.                             })}
  174.                         </GoogleMapReact>
  175.                     </div>
  176.                 </div>
  177.             </div>
  178.         );
  179.     }
  180. }
  181.  
  182. export default App;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement