import React, { useState ,useEffect } from "react"; import { fetchRoads, fetchCities, getShortestPath } from './requests'; import {Sigma, RandomizeNodePositions, RelativeSize, SigmaEnableSVG} from 'react-sigma'; import { Select, Button, Icon } from 'antd'; const { Option } = Select; function HomeView() { const [startingPoint, setStartingPoint] = useState(); const [destination, setDestination] = useState(); const [errorSelect, setError] = useState({ message: '', flag: false }); const [shortestPath, setShortestPath] = useState(); const [cities, setCities] = useState([]); useEffect(() => { fetchCities() .then(data => setCities(data)) .catch(error => console.log(error)) }, []); const [roads, setRoads] = useState([]); useEffect(() => { fetchRoads() .then(data => setRoads(data)) .catch(error => console.log(error)); }, []); const [graph, setGraph] = useState({nodes: [], edges: []}); useEffect(() => { let nodes = cities.map(node => ( { id: `n${node.id}`, label: node.name} )); let edges = roads.map(edge => ( { id: `e${edge.id}`, source: `n${edge.start_city_id}`, target: `n${edge.end_city_id}`, label: 'SEES' } )) setGraph({nodes, edges}) }, [cities, roads]) function handleStart(city_id) { // eslint-disable-next-line let [ startingPoint ] = cities.filter(city => city.id == city_id); setStartingPoint(startingPoint); // Check if start and destination are the same if (startingPoint === destination) { setError({ message: 'The start and destination must be different.', flag: true }); return } // Will reset the error message and shown path setShortestPath(); setError({ flag: false }); } function handleDestination(city_id) { // eslint-disable-next-line let [ destination ] = cities.filter(city => city.id == city_id); setDestination(destination); // Check if start and destination are the same if (startingPoint === destination) { setError({ message: 'The start and destination must be different.', flag: true }); return } // Will reset the error message and shown path setShortestPath(); setError({ flag: false }); } function handleSubmit() { if (startingPoint === destination) { return } else if (startingPoint && destination) { getShortestPath(startingPoint.id, destination.id) .then(data => setShortestPath(data)) .catch(error => console.log(error)); setError({ flag: false }); } else { setError({ message: 'Please select a start and a destination', flag: true}); } } return(

Select Starting Point

Select Destination

{errorSelect.flag &&

{errorSelect.message}

}
{ shortestPath &&

Shortest path from {startingPoint.name} to {destination.name} ({shortestPath.distance}km)

{shortestPath.path.map(city => (

{city.name}

))}
} { graph.nodes.length > 0 &&

Graph

}
); } export default HomeView