2024-02-02 23:52:52 +00:00
|
|
|
import {Autocomplete, TextField} from "@mui/material";
|
|
|
|
import {useRef, useState} from "react";
|
|
|
|
|
|
|
|
function AutocompleteStop(params) {
|
|
|
|
const [options, setOptions] = useState([])
|
|
|
|
const previousController = useRef()
|
|
|
|
|
|
|
|
function onInputChange(event, value) {
|
|
|
|
if (!value) {
|
|
|
|
setOptions([])
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if (previousController.current)
|
|
|
|
previousController.current.abort()
|
|
|
|
|
|
|
|
const controller = new AbortController()
|
|
|
|
const signal = controller.signal
|
|
|
|
previousController.current = controller
|
|
|
|
fetch("/api/gtfs/stop/?location_type=1&search=" + value, {signal})
|
|
|
|
.then(response => response.json())
|
|
|
|
.then(data => data.results)
|
|
|
|
.then(setOptions)
|
|
|
|
.catch()
|
|
|
|
}
|
|
|
|
|
|
|
|
return <>
|
|
|
|
<Autocomplete
|
|
|
|
id="stop"
|
|
|
|
options={options}
|
|
|
|
onInputChange={onInputChange}
|
|
|
|
filterOptions={(x) => x}
|
|
|
|
getOptionKey={option => option.id}
|
|
|
|
getOptionLabel={option => option.name}
|
2024-02-10 16:33:36 +00:00
|
|
|
groupBy={option => getOptionGroup(option)}
|
2024-02-02 23:52:52 +00:00
|
|
|
isOptionEqualToValue={(option, value) => option.id === value.id}
|
|
|
|
renderInput={(params) => <TextField {...params} label="Arrêt" />}
|
|
|
|
{...params} />
|
|
|
|
</>
|
|
|
|
}
|
|
|
|
|
2024-02-10 16:33:36 +00:00
|
|
|
function getOptionGroup(option) {
|
|
|
|
switch (option.transport_type) {
|
|
|
|
case "TGV":
|
|
|
|
case "IC":
|
|
|
|
case "TER":
|
|
|
|
return "TGV/TER/Intercités"
|
|
|
|
case "TN":
|
|
|
|
return "Transilien"
|
|
|
|
case "ES":
|
|
|
|
return "Eurostar"
|
|
|
|
case "TI":
|
|
|
|
return "Trenitalia France"
|
|
|
|
case "RENFE":
|
|
|
|
return "RENFE"
|
|
|
|
case "OBB":
|
|
|
|
return "ÖBB"
|
|
|
|
default:
|
|
|
|
return option.transport_type
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-02-02 23:52:52 +00:00
|
|
|
export default AutocompleteStop;
|