Refatoração Transporte para Itinerário e página de busca de itinerários mostra os resultados da API
This commit is contained in:
@@ -24,7 +24,7 @@ import CompletarDocumento from './pages/CadastroCompletar/CompletarDocumento';
|
|||||||
import CompletarTelefone from './pages/CadastroCompletar/CompletarTelefone';
|
import CompletarTelefone from './pages/CadastroCompletar/CompletarTelefone';
|
||||||
import Transportes from './pages/Transportes/Transportes';
|
import Transportes from './pages/Transportes/Transportes';
|
||||||
import BuscarPassageiro from './pages/BuscarPassageiro/BuscarPassageiro';
|
import BuscarPassageiro from './pages/BuscarPassageiro/BuscarPassageiro';
|
||||||
import BuscarTransporte from './pages/BuscarTransporte/BuscarTransporte';
|
import BuscarItinerarioList from './pages/BuscarItinerarioList';
|
||||||
import Debug from './pages/Debug';
|
import Debug from './pages/Debug';
|
||||||
|
|
||||||
/* Core CSS required for Ionic components to work properly */
|
/* Core CSS required for Ionic components to work properly */
|
||||||
@@ -73,8 +73,6 @@ const routes = (
|
|||||||
<Route exact path="/perfil/completar/telefone" component={CompletarTelefone}></Route>
|
<Route exact path="/perfil/completar/telefone" component={CompletarTelefone}></Route>
|
||||||
|
|
||||||
<Route exact path="/transportes" component={Transportes}></Route>
|
<Route exact path="/transportes" component={Transportes}></Route>
|
||||||
<Route exact path="/buscar-passageiro" component={BuscarPassageiro}></Route>
|
|
||||||
<Route exact path="/buscar-transporte" component={BuscarTransporte}></Route>
|
|
||||||
<Route exact path="/buscar/passageiro" component={BuscarPassageiro}></Route>
|
<Route exact path="/buscar/passageiro" component={BuscarPassageiro}></Route>
|
||||||
<Route exact path="/buscar/itinerario" component={BuscarItinerario}></Route>
|
<Route exact path="/buscar/itinerario" component={BuscarItinerario}></Route>
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const transportsRoutesDefault = '/transports';
|
const transportsRoutesDefault = '/itineraries';
|
||||||
const transportsRoutes = {
|
const transportsRoutes = {
|
||||||
create: {
|
create: {
|
||||||
url: `${transportsRoutesDefault}`
|
url: `${transportsRoutesDefault}`
|
||||||
@@ -6,6 +6,9 @@ const transportsRoutes = {
|
|||||||
get: {
|
get: {
|
||||||
url: `${transportsRoutesDefault}`
|
url: `${transportsRoutesDefault}`
|
||||||
},
|
},
|
||||||
|
search: {
|
||||||
|
url: `${transportsRoutesDefault}/search`
|
||||||
|
},
|
||||||
update: {
|
update: {
|
||||||
url: `${transportsRoutesDefault}`
|
url: `${transportsRoutesDefault}`
|
||||||
},
|
},
|
||||||
13
src/models/itinerary.model.ts
Normal file
13
src/models/itinerary.model.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
export interface Itinerary {
|
||||||
|
id_itinerary: number;
|
||||||
|
van_plate: string;
|
||||||
|
price: number;
|
||||||
|
days_of_week: number;
|
||||||
|
specific_day: Date;
|
||||||
|
estimated_departure_time: Date;
|
||||||
|
estimated_arrival_time: Date;
|
||||||
|
available_seats: number;
|
||||||
|
itinerary_nickname: string;
|
||||||
|
created_at: Date;
|
||||||
|
updated_at: Date;
|
||||||
|
}
|
||||||
@@ -1,190 +1,271 @@
|
|||||||
import {
|
import {
|
||||||
IonBackButton,
|
IonButton,
|
||||||
IonButtons,
|
|
||||||
IonCard,
|
IonCard,
|
||||||
IonCardContent,
|
IonCardContent,
|
||||||
IonCardHeader,
|
IonCardHeader,
|
||||||
IonCardSubtitle,
|
IonCardSubtitle,
|
||||||
IonCardTitle,
|
IonCardTitle,
|
||||||
IonContent,
|
IonContent,
|
||||||
IonGrid,
|
|
||||||
IonHeader,
|
|
||||||
IonIcon,
|
IonIcon,
|
||||||
IonItem,
|
IonItem,
|
||||||
IonLabel,
|
IonItemDivider,
|
||||||
IonList,
|
|
||||||
IonListHeader,
|
|
||||||
IonPage,
|
IonPage,
|
||||||
IonRow,
|
IonRow,
|
||||||
IonSelect,
|
|
||||||
IonSelectOption,
|
|
||||||
IonTitle,
|
|
||||||
IonToolbar,
|
|
||||||
} from "@ionic/react";
|
} from "@ionic/react";
|
||||||
import { cashOutline, personOutline, starOutline } from "ionicons/icons";
|
import {
|
||||||
|
arrowForwardOutline,
|
||||||
|
cashOutline,
|
||||||
|
chevronForwardOutline,
|
||||||
|
locateOutline,
|
||||||
|
locationOutline,
|
||||||
|
personOutline,
|
||||||
|
starOutline,
|
||||||
|
timeOutline,
|
||||||
|
} from "ionicons/icons";
|
||||||
|
import "./BuscarItinerario.css";
|
||||||
|
|
||||||
|
import itinerariesService from "../services/functions/itinerariesService";
|
||||||
|
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { useHistory } from "react-router";
|
import { useHistory } from "react-router";
|
||||||
|
|
||||||
interface coordinates {
|
import GooglePlacesAutocomplete, {
|
||||||
lat: number;
|
geocodeByAddress,
|
||||||
lgn: number;
|
getLatLng,
|
||||||
}
|
} from "react-google-places-autocomplete";
|
||||||
|
import { Itinerary } from "../models/itinerary.model";
|
||||||
interface Itinerario {
|
|
||||||
motorista: string;
|
|
||||||
valor: string;
|
|
||||||
lugares: string;
|
|
||||||
avaliacao: string;
|
|
||||||
bairros_atendidos: coordinates[];
|
|
||||||
destinos: coordinates[];
|
|
||||||
}
|
|
||||||
|
|
||||||
const BuscarItinerario: React.FC = () => {
|
const BuscarItinerario: React.FC = () => {
|
||||||
const [selectedBairro, setSelectedBairro] = useState("");
|
const history = useHistory();
|
||||||
const [selectedFaculdade, setSelectedFaculdade] = useState("");
|
const [addressFrom, setAddressFrom] = useState<any>("");
|
||||||
|
const [coordinatesFrom, setCoordinatesFrom] = useState<any>("");
|
||||||
|
const [addressTo, setAddressTo] = useState<any>("");
|
||||||
|
const [coordinatesTo, setCoordinatesTo] = useState<any>("");
|
||||||
|
const [showModalEnd, setShowModalEnd] = useState(false);
|
||||||
|
const [addressResults, setAddressResults] = useState<any>([]);
|
||||||
|
const [inputActive, setInputActive] = useState("");
|
||||||
|
|
||||||
const [itinerarios, setItinerarios] = useState<Itinerario[]>();
|
const [itinerariesList, setItinerariesList] = useState<Itinerary[]>();
|
||||||
|
|
||||||
|
// const optionsAddress = async (inputValue: any) => {
|
||||||
|
// let results = await autoCompleteAddress(inputValue)
|
||||||
|
// .then((res) => {
|
||||||
|
// return res.map((item: any) => {
|
||||||
|
// return {
|
||||||
|
// value:
|
||||||
|
// item.geometry.coordinates[0] + "," + item.geometry.coordinates[1],
|
||||||
|
// label: item.properties.formatted,
|
||||||
|
// };
|
||||||
|
// });
|
||||||
|
// })
|
||||||
|
// .catch((err) => {
|
||||||
|
// console.log("Erro ao buscar endereço:", err);
|
||||||
|
// });
|
||||||
|
// setAddressResults(results);
|
||||||
|
// };
|
||||||
|
|
||||||
|
// function setInputActiveOpenModal(input: string) {
|
||||||
|
// setInputActive(input);
|
||||||
|
// setShowModalEnd(true);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// function setAddress(div: any) {
|
||||||
|
// if (inputActive === "from") {
|
||||||
|
// setAddressFrom(div.target.attributes[2].value);
|
||||||
|
// setCoordinatesFrom(div.target.attributes[1].value);
|
||||||
|
// } else {
|
||||||
|
// setAddressTo(div.target.attributes[2].value);
|
||||||
|
// setCoordinatesTo(div.target.attributes[1].value);
|
||||||
|
// }
|
||||||
|
// setShowModalEnd(false);
|
||||||
|
// }
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setItinerarios([
|
if (addressFrom.label && addressFrom.label.length > 0) {
|
||||||
{
|
geocodeByAddress(addressFrom.label)
|
||||||
motorista: "João",
|
.then((results) => getLatLng(results[0]))
|
||||||
valor: "R$ 150,00",
|
.then(({ lat, lng }) => setCoordinatesFrom({ lat, lng }));
|
||||||
lugares: "2",
|
}
|
||||||
avaliacao: "4.5",
|
}, [addressFrom]);
|
||||||
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
|
||||||
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
useEffect(() => {
|
||||||
},
|
if (addressTo.label && addressTo.label.length > 0) {
|
||||||
{
|
geocodeByAddress(addressTo.label)
|
||||||
motorista: "Ricardo",
|
.then((results) => getLatLng(results[0]))
|
||||||
valor: "R$ 180,00",
|
.then(({ lat, lng }) => setCoordinatesTo({ lat, lng }));
|
||||||
lugares: "5",
|
}
|
||||||
avaliacao: "4.0",
|
}, [addressTo]);
|
||||||
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
|
||||||
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
async function buscarItinerarios() {
|
||||||
},
|
if (!coordinatesFrom || !coordinatesTo || !addressFrom || !addressTo) {
|
||||||
{
|
return;
|
||||||
motorista: "Luiz",
|
}
|
||||||
valor: "R$ 200,00",
|
|
||||||
lugares: "1",
|
const itinerariesList = await itinerariesService.getAllItineraries();
|
||||||
avaliacao: "4.3",
|
|
||||||
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
setItinerariesList(itinerariesList);
|
||||||
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
motorista: "Marcos",
|
|
||||||
valor: "R$ 199,00",
|
|
||||||
lugares: "6",
|
|
||||||
avaliacao: "4.9",
|
|
||||||
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
|
||||||
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
motorista: "Orandi",
|
|
||||||
valor: "R$ 210,00",
|
|
||||||
lugares: "8",
|
|
||||||
avaliacao: "5.0",
|
|
||||||
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
|
||||||
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
motorista: "Pedro",
|
|
||||||
valor: "R$ 189,00",
|
|
||||||
lugares: "4",
|
|
||||||
avaliacao: "4.1",
|
|
||||||
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
|
||||||
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
motorista: "Pericles",
|
|
||||||
valor: "R$ 220,00",
|
|
||||||
lugares: "19",
|
|
||||||
avaliacao: "4.5",
|
|
||||||
bairros_atendidos: [{ lat: -23.873432, lgn: -47.142274 }],
|
|
||||||
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<IonPage>
|
<IonPage>
|
||||||
<IonHeader translucent>
|
|
||||||
<IonToolbar>
|
|
||||||
<IonTitle>Buscar itinerários</IonTitle>
|
|
||||||
<IonButtons slot="start">
|
|
||||||
<IonBackButton text="" defaultHref="/buscas" />
|
|
||||||
</IonButtons>
|
|
||||||
</IonToolbar>
|
|
||||||
</IonHeader>
|
|
||||||
|
|
||||||
<IonContent fullscreen>
|
<IonContent fullscreen>
|
||||||
{/* <IonGrid>
|
<IonCard>
|
||||||
<IonRow> */}
|
<IonCardContent>
|
||||||
<IonList>
|
<div className="inputs-from-to">
|
||||||
<IonListHeader>Filtros de busca</IonListHeader>
|
<IonIcon icon={locateOutline}></IonIcon>
|
||||||
<IonItem>
|
{/* <IonSearchbar
|
||||||
<IonLabel>Bairro de origem</IonLabel>
|
showClearButton="never"
|
||||||
<IonSelect
|
onClick={() => setInputActiveOpenModal("from")}
|
||||||
// placeholder="Selecione o bairro de origem"
|
value={addressFrom}
|
||||||
onIonChange={(e) => {
|
placeholder="R. José Paulino, 1234 - Centro, Campinas - SP, 13013-001"
|
||||||
setSelectedBairro(e.detail.value!);
|
/> */}
|
||||||
}}
|
<GooglePlacesAutocomplete
|
||||||
>
|
apiKey={process.env.REACT_APP_KEY_API}
|
||||||
<IonSelectOption value="1">Vila Marieta</IonSelectOption>
|
apiOptions={{ language: "pt-br", region: "br" }}
|
||||||
<IonSelectOption value="2">Botafogo</IonSelectOption>
|
selectProps={{
|
||||||
<IonSelectOption value="3">Cambuí</IonSelectOption>
|
value: addressFrom,
|
||||||
</IonSelect>
|
onChange: setAddressFrom,
|
||||||
</IonItem>
|
className: "input-autocomplete",
|
||||||
|
placeholder: "R. José Paulino, 1234",
|
||||||
<IonItem>
|
}}
|
||||||
<IonLabel>Instituição de ensino de destino</IonLabel>
|
/>
|
||||||
<IonSelect
|
</div>
|
||||||
// placeholder="Selecione a instituição de ensino de destino"
|
<div className="inputs-from-to">
|
||||||
onIonChange={(e) => {
|
<IonIcon icon={locationOutline}></IonIcon>
|
||||||
setSelectedFaculdade(e.detail.value!);
|
{/* <IonSearchbar
|
||||||
}}
|
showClearButton="never"
|
||||||
>
|
onClick={() => setInputActiveOpenModal("to")}
|
||||||
<IonSelectOption value="1">
|
value={addressTo}
|
||||||
PUC Campinas (campus 1)
|
placeholder="PUC Campinas"
|
||||||
</IonSelectOption>
|
/> */}
|
||||||
<IonSelectOption value="2">Unicamp</IonSelectOption>
|
<GooglePlacesAutocomplete
|
||||||
<IonSelectOption value="3">UNIP</IonSelectOption>
|
apiKey={process.env.REACT_APP_KEY_API}
|
||||||
</IonSelect>
|
apiOptions={{ language: "pt-br", region: "br" }}
|
||||||
</IonItem>
|
selectProps={{
|
||||||
</IonList>
|
value: addressTo,
|
||||||
{/* </IonRow> */}
|
onChange: setAddressTo,
|
||||||
|
className: "input-autocomplete",
|
||||||
{/* <IonRow> */}
|
placeholder: "PUC Campinas",
|
||||||
{selectedBairro && selectedFaculdade ? (
|
}}
|
||||||
<>
|
/>
|
||||||
{itinerarios ? (
|
</div>
|
||||||
itinerarios.map((itinerario, index) => {
|
<div className="button-search">
|
||||||
return (
|
<IonButton color="primary" onClick={() => buscarItinerarios()}>
|
||||||
<IonCard key={index}>
|
Buscar
|
||||||
<IonCardHeader>
|
</IonButton>
|
||||||
<IonCardTitle>
|
</div>
|
||||||
{/* <p>Bairros atendidos: {itinerario.bairros_atendidos[0].lat},{itinerario.bairros_atendidos[0].lgn}</p> */}
|
</IonCardContent>
|
||||||
{/* <p>Instituições de ensino atendidas: {itinerario.destinos[0].lat},{itinerario.destinos[0].lgn}</p> */}
|
</IonCard>
|
||||||
</IonCardTitle>
|
<IonItemDivider>Pesquisas recentes</IonItemDivider>
|
||||||
<IonCardSubtitle>
|
<IonRow class="latest-searches">
|
||||||
<p><IonIcon icon={personOutline} /> Vagas disponíveis: {itinerario.lugares}</p>
|
<IonIcon
|
||||||
<p><IonIcon icon={starOutline} /> Motorista: {itinerario.motorista}</p>
|
className="icon-align-vcenter"
|
||||||
<p><IonIcon icon={cashOutline} /> Valor: {itinerario.valor}</p>
|
size="large"
|
||||||
</IonCardSubtitle>
|
icon={timeOutline}
|
||||||
</IonCardHeader>
|
></IonIcon>
|
||||||
</IonCard>
|
<div className="div_from_to">
|
||||||
);
|
<span>Rua Tal Tal, 154, São Paulo - SP</span>
|
||||||
})
|
<IonIcon icon={arrowForwardOutline}></IonIcon>
|
||||||
) : (
|
<span>USP</span>
|
||||||
<></>
|
<br />
|
||||||
)}
|
<small>Há 1 hora</small>
|
||||||
</>
|
</div>
|
||||||
|
<IonIcon
|
||||||
|
className="icon-forward icon-align-vcenter"
|
||||||
|
size="large"
|
||||||
|
icon={chevronForwardOutline}
|
||||||
|
></IonIcon>
|
||||||
|
</IonRow>
|
||||||
|
<IonRow class="latest-searches">
|
||||||
|
<IonIcon
|
||||||
|
className="icon-align-vcenter"
|
||||||
|
size="large"
|
||||||
|
icon={timeOutline}
|
||||||
|
/>
|
||||||
|
<div className="div_from_to">
|
||||||
|
<span>Taquaral</span>
|
||||||
|
<IonIcon icon={arrowForwardOutline}></IonIcon>
|
||||||
|
<span>PUC-Campinas</span>
|
||||||
|
<br />
|
||||||
|
<small>Há 2 hora</small>
|
||||||
|
</div>
|
||||||
|
<IonIcon
|
||||||
|
className="icon-forward icon-align-vcenter"
|
||||||
|
size="large"
|
||||||
|
icon={chevronForwardOutline}
|
||||||
|
/>
|
||||||
|
</IonRow>
|
||||||
|
{/* <IonModal isOpen={showModalEnd}>
|
||||||
|
<IonContent>
|
||||||
|
<div className="header-search-modal">
|
||||||
|
<IonIcon
|
||||||
|
className="icon-return-modal"
|
||||||
|
icon={arrowBack}
|
||||||
|
onClick={() => setShowModalEnd(false)}
|
||||||
|
/>
|
||||||
|
<IonInput
|
||||||
|
onIonChange={(e) => optionsAddress(e.detail.value)}
|
||||||
|
placeholder="R. José Paulino, 1234 - Centro, Campinas - SP, 13013-001"
|
||||||
|
className="search-modal"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{addressResults.length > 0 ? (
|
||||||
|
addressResults.map((item: any) => {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
key={item.value}
|
||||||
|
className="modal-search-results"
|
||||||
|
data-value={item.value}
|
||||||
|
data-label={item.label}
|
||||||
|
onClick={(e) => setAddress(e)}
|
||||||
|
>
|
||||||
|
{item.label}
|
||||||
|
<IonIcon
|
||||||
|
className="icon-results-modal"
|
||||||
|
icon={chevronForwardOutline}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})
|
||||||
) : (
|
) : (
|
||||||
<></>
|
<>
|
||||||
|
<IonProgressBar type="indeterminate" />
|
||||||
|
<br />
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
{/* </IonRow>
|
</IonContent>
|
||||||
</IonGrid> */}
|
</IonModal> */}
|
||||||
|
|
||||||
|
{itinerariesList ? (
|
||||||
|
<>
|
||||||
|
<IonItemDivider>Resultados</IonItemDivider>
|
||||||
|
{itinerariesList.map((itinerary, index) => {
|
||||||
|
return (
|
||||||
|
<IonCard button key={index} onClick={() => { history.push(`/itinerary/${itinerary.id_itinerary}`) }}>
|
||||||
|
<IonCardHeader>
|
||||||
|
<IonCardTitle>{itinerary.itinerary_nickname}</IonCardTitle>
|
||||||
|
<IonCardSubtitle>
|
||||||
|
<p>
|
||||||
|
<IonIcon icon={personOutline} /> Vagas disponíveis:{" "}
|
||||||
|
{itinerary.available_seats}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<IonIcon icon={starOutline} /> Motorista:{" "}
|
||||||
|
{itinerary.price}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<IonIcon icon={cashOutline} /> Valor:{" "}
|
||||||
|
{itinerary.van_plate}
|
||||||
|
</p>
|
||||||
|
</IonCardSubtitle>
|
||||||
|
</IonCardHeader>
|
||||||
|
</IonCard>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
</IonContent>
|
</IonContent>
|
||||||
</IonPage>
|
</IonPage>
|
||||||
);
|
);
|
||||||
|
|||||||
193
src/pages/BuscarItinerarioList.tsx
Normal file
193
src/pages/BuscarItinerarioList.tsx
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
import {
|
||||||
|
IonBackButton,
|
||||||
|
IonButtons,
|
||||||
|
IonCard,
|
||||||
|
IonCardContent,
|
||||||
|
IonCardHeader,
|
||||||
|
IonCardSubtitle,
|
||||||
|
IonCardTitle,
|
||||||
|
IonContent,
|
||||||
|
IonGrid,
|
||||||
|
IonHeader,
|
||||||
|
IonIcon,
|
||||||
|
IonItem,
|
||||||
|
IonLabel,
|
||||||
|
IonList,
|
||||||
|
IonListHeader,
|
||||||
|
IonPage,
|
||||||
|
IonRow,
|
||||||
|
IonSelect,
|
||||||
|
IonSelectOption,
|
||||||
|
IonTitle,
|
||||||
|
IonToolbar,
|
||||||
|
} from "@ionic/react";
|
||||||
|
import { cashOutline, personOutline, starOutline } from "ionicons/icons";
|
||||||
|
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import { useHistory } from "react-router";
|
||||||
|
|
||||||
|
interface coordinates {
|
||||||
|
lat: number;
|
||||||
|
lgn: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Itinerario {
|
||||||
|
motorista: string;
|
||||||
|
valor: string;
|
||||||
|
lugares: string;
|
||||||
|
avaliacao: string;
|
||||||
|
bairros_atendidos: coordinates[];
|
||||||
|
destinos: coordinates[];
|
||||||
|
}
|
||||||
|
|
||||||
|
const BuscarItinerario: React.FC = () => {
|
||||||
|
const [selectedBairro, setSelectedBairro] = useState("");
|
||||||
|
const [selectedFaculdade, setSelectedFaculdade] = useState("");
|
||||||
|
|
||||||
|
const [itinerarios, setItinerarios] = useState<Itinerario[]>();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setItinerarios([
|
||||||
|
{
|
||||||
|
motorista: "João",
|
||||||
|
valor: "R$ 150,00",
|
||||||
|
lugares: "2",
|
||||||
|
avaliacao: "4.5",
|
||||||
|
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
||||||
|
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
motorista: "Ricardo",
|
||||||
|
valor: "R$ 180,00",
|
||||||
|
lugares: "5",
|
||||||
|
avaliacao: "4.0",
|
||||||
|
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
||||||
|
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
motorista: "Luiz",
|
||||||
|
valor: "R$ 200,00",
|
||||||
|
lugares: "1",
|
||||||
|
avaliacao: "4.3",
|
||||||
|
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
||||||
|
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
motorista: "Marcos",
|
||||||
|
valor: "R$ 199,00",
|
||||||
|
lugares: "6",
|
||||||
|
avaliacao: "4.9",
|
||||||
|
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
||||||
|
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
motorista: "Orandi",
|
||||||
|
valor: "R$ 210,00",
|
||||||
|
lugares: "8",
|
||||||
|
avaliacao: "5.0",
|
||||||
|
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
||||||
|
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
motorista: "Pedro",
|
||||||
|
valor: "R$ 189,00",
|
||||||
|
lugares: "4",
|
||||||
|
avaliacao: "4.1",
|
||||||
|
bairros_atendidos: [{ lat: -22.873432, lgn: -47.142274 }],
|
||||||
|
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
motorista: "Pericles",
|
||||||
|
valor: "R$ 220,00",
|
||||||
|
lugares: "19",
|
||||||
|
avaliacao: "4.5",
|
||||||
|
bairros_atendidos: [{ lat: -23.873432, lgn: -47.142274 }],
|
||||||
|
destinos: [{ lat: -22.833645, lgn: -47.048905 }],
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<IonPage>
|
||||||
|
<IonHeader translucent>
|
||||||
|
<IonToolbar>
|
||||||
|
<IonTitle>Buscar itinerários</IonTitle>
|
||||||
|
<IonButtons slot="start">
|
||||||
|
<IonBackButton text="" defaultHref="/buscas" />
|
||||||
|
</IonButtons>
|
||||||
|
</IonToolbar>
|
||||||
|
</IonHeader>
|
||||||
|
|
||||||
|
<IonContent fullscreen>
|
||||||
|
{/* <IonGrid>
|
||||||
|
<IonRow> */}
|
||||||
|
<IonList>
|
||||||
|
<IonListHeader>Filtros de busca</IonListHeader>
|
||||||
|
<IonItem>
|
||||||
|
<IonLabel>Bairro de origem</IonLabel>
|
||||||
|
<IonSelect
|
||||||
|
// placeholder="Selecione o bairro de origem"
|
||||||
|
onIonChange={(e) => {
|
||||||
|
setSelectedBairro(e.detail.value!);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<IonSelectOption value="1">Vila Marieta</IonSelectOption>
|
||||||
|
<IonSelectOption value="2">Botafogo</IonSelectOption>
|
||||||
|
<IonSelectOption value="3">Cambuí</IonSelectOption>
|
||||||
|
</IonSelect>
|
||||||
|
</IonItem>
|
||||||
|
|
||||||
|
<IonItem>
|
||||||
|
<IonLabel>Instituição de ensino de destino</IonLabel>
|
||||||
|
<IonSelect
|
||||||
|
// placeholder="Selecione a instituição de ensino de destino"
|
||||||
|
onIonChange={(e) => {
|
||||||
|
setSelectedFaculdade(e.detail.value!);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<IonSelectOption value="1">
|
||||||
|
PUC Campinas (campus 1)
|
||||||
|
</IonSelectOption>
|
||||||
|
<IonSelectOption value="2">Unicamp</IonSelectOption>
|
||||||
|
<IonSelectOption value="3">UNIP</IonSelectOption>
|
||||||
|
</IonSelect>
|
||||||
|
</IonItem>
|
||||||
|
</IonList>
|
||||||
|
{/* </IonRow> */}
|
||||||
|
|
||||||
|
{/* <IonRow> */}
|
||||||
|
{selectedBairro && selectedFaculdade ? (
|
||||||
|
<>
|
||||||
|
{itinerarios ? (
|
||||||
|
itinerarios.map((itinerario, index) => {
|
||||||
|
return (
|
||||||
|
<IonCard key={index}>
|
||||||
|
<IonCardHeader>
|
||||||
|
<IonCardTitle>
|
||||||
|
{/* <p>Bairros atendidos: {itinerario.bairros_atendidos[0].lat},{itinerario.bairros_atendidos[0].lgn}</p> */}
|
||||||
|
{/* <p>Instituições de ensino atendidas: {itinerario.destinos[0].lat},{itinerario.destinos[0].lgn}</p> */}
|
||||||
|
</IonCardTitle>
|
||||||
|
<IonCardSubtitle>
|
||||||
|
<p><IonIcon icon={personOutline} /> Vagas disponíveis: {itinerario.lugares}</p>
|
||||||
|
<p><IonIcon icon={starOutline} /> Motorista: {itinerario.motorista}</p>
|
||||||
|
<p><IonIcon icon={cashOutline} /> Valor: {itinerario.valor}</p>
|
||||||
|
</IonCardSubtitle>
|
||||||
|
</IonCardHeader>
|
||||||
|
</IonCard>
|
||||||
|
);
|
||||||
|
})
|
||||||
|
) : (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
|
{/* </IonRow>
|
||||||
|
</IonGrid> */}
|
||||||
|
</IonContent>
|
||||||
|
</IonPage>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default BuscarItinerario;
|
||||||
@@ -1,233 +0,0 @@
|
|||||||
import {
|
|
||||||
IonButton,
|
|
||||||
IonCard,
|
|
||||||
IonCardContent,
|
|
||||||
IonContent,
|
|
||||||
IonIcon,
|
|
||||||
IonPage,
|
|
||||||
IonRow,
|
|
||||||
} from "@ionic/react";
|
|
||||||
import {
|
|
||||||
arrowForwardOutline,
|
|
||||||
chevronForwardOutline,
|
|
||||||
locateOutline,
|
|
||||||
locationOutline,
|
|
||||||
timeOutline,
|
|
||||||
} from "ionicons/icons";
|
|
||||||
import "./BuscarTransporte.css";
|
|
||||||
|
|
||||||
import { useEffect, useState } from "react";
|
|
||||||
import { useHistory } from "react-router";
|
|
||||||
|
|
||||||
import GooglePlacesAutocomplete, {
|
|
||||||
geocodeByAddress,
|
|
||||||
getLatLng,
|
|
||||||
} from "react-google-places-autocomplete";
|
|
||||||
|
|
||||||
const BuscarTransporte: React.FC = () => {
|
|
||||||
const history = useHistory();
|
|
||||||
const [addressFrom, setAddressFrom] = useState<any>("");
|
|
||||||
const [coordinatesFrom, setCoordinatesFrom] = useState<any>("");
|
|
||||||
const [addressTo, setAddressTo] = useState<any>("");
|
|
||||||
const [coordinatesTo, setCoordinatesTo] = useState<any>("");
|
|
||||||
const [showModalEnd, setShowModalEnd] = useState(false);
|
|
||||||
const [addressResults, setAddressResults] = useState<any>([]);
|
|
||||||
const [inputActive, setInputActive] = useState("");
|
|
||||||
|
|
||||||
// const optionsAddress = async (inputValue: any) => {
|
|
||||||
// let results = await autoCompleteAddress(inputValue)
|
|
||||||
// .then((res) => {
|
|
||||||
// return res.map((item: any) => {
|
|
||||||
// return {
|
|
||||||
// value:
|
|
||||||
// item.geometry.coordinates[0] + "," + item.geometry.coordinates[1],
|
|
||||||
// label: item.properties.formatted,
|
|
||||||
// };
|
|
||||||
// });
|
|
||||||
// })
|
|
||||||
// .catch((err) => {
|
|
||||||
// console.log("Erro ao buscar endereço:", err);
|
|
||||||
// });
|
|
||||||
// setAddressResults(results);
|
|
||||||
// };
|
|
||||||
|
|
||||||
// function setInputActiveOpenModal(input: string) {
|
|
||||||
// setInputActive(input);
|
|
||||||
// setShowModalEnd(true);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// function setAddress(div: any) {
|
|
||||||
// if (inputActive === "from") {
|
|
||||||
// setAddressFrom(div.target.attributes[2].value);
|
|
||||||
// setCoordinatesFrom(div.target.attributes[1].value);
|
|
||||||
// } else {
|
|
||||||
// setAddressTo(div.target.attributes[2].value);
|
|
||||||
// setCoordinatesTo(div.target.attributes[1].value);
|
|
||||||
// }
|
|
||||||
// setShowModalEnd(false);
|
|
||||||
// }
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (addressFrom.label && addressFrom.label.length > 0) {
|
|
||||||
geocodeByAddress(addressFrom.label)
|
|
||||||
.then((results) => getLatLng(results[0]))
|
|
||||||
.then(({ lat, lng }) => setCoordinatesFrom({ lat, lng }));
|
|
||||||
}
|
|
||||||
}, [addressFrom]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (addressTo.label && addressTo.label.length > 0) {
|
|
||||||
geocodeByAddress(addressTo.label)
|
|
||||||
.then((results) => getLatLng(results[0]))
|
|
||||||
.then(({ lat, lng }) => setCoordinatesTo({ lat, lng }));
|
|
||||||
}
|
|
||||||
}, [addressTo]);
|
|
||||||
|
|
||||||
function buscaTransporte() {
|
|
||||||
if (coordinatesFrom && coordinatesTo && addressFrom && addressTo) {
|
|
||||||
history.push({
|
|
||||||
pathname: "/transportes",
|
|
||||||
state: {
|
|
||||||
coordinatesFrom,
|
|
||||||
coordinatesTo,
|
|
||||||
addressFrom,
|
|
||||||
addressTo,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<IonPage>
|
|
||||||
<IonContent fullscreen>
|
|
||||||
<IonCard>
|
|
||||||
<IonCardContent>
|
|
||||||
<div className="inputs-from-to">
|
|
||||||
<IonIcon icon={locateOutline}></IonIcon>
|
|
||||||
{/* <IonSearchbar
|
|
||||||
showClearButton="never"
|
|
||||||
onClick={() => setInputActiveOpenModal("from")}
|
|
||||||
value={addressFrom}
|
|
||||||
placeholder="R. José Paulino, 1234 - Centro, Campinas - SP, 13013-001"
|
|
||||||
/> */}
|
|
||||||
<GooglePlacesAutocomplete
|
|
||||||
apiKey={process.env.REACT_APP_KEY_API}
|
|
||||||
apiOptions={{ language: "pt-br", region: "br" }}
|
|
||||||
selectProps={{
|
|
||||||
value: addressFrom,
|
|
||||||
onChange: setAddressFrom,
|
|
||||||
className: "input-autocomplete",
|
|
||||||
placeholder: "R. José Paulino, 1234",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="inputs-from-to">
|
|
||||||
<IonIcon icon={locationOutline}></IonIcon>
|
|
||||||
{/* <IonSearchbar
|
|
||||||
showClearButton="never"
|
|
||||||
onClick={() => setInputActiveOpenModal("to")}
|
|
||||||
value={addressTo}
|
|
||||||
placeholder="PUC Campinas"
|
|
||||||
/> */}
|
|
||||||
<GooglePlacesAutocomplete
|
|
||||||
apiKey={process.env.REACT_APP_KEY_API}
|
|
||||||
apiOptions={{ language: "pt-br", region: "br" }}
|
|
||||||
selectProps={{
|
|
||||||
value: addressTo,
|
|
||||||
onChange: setAddressTo,
|
|
||||||
className: "input-autocomplete",
|
|
||||||
placeholder: "PUC Campinas",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="button-search">
|
|
||||||
<IonButton color="primary" onClick={() => buscaTransporte()}>
|
|
||||||
Buscar
|
|
||||||
</IonButton>
|
|
||||||
</div>
|
|
||||||
</IonCardContent>
|
|
||||||
</IonCard>
|
|
||||||
<IonRow class="latest-searches">
|
|
||||||
<IonIcon
|
|
||||||
className="icon-align-vcenter"
|
|
||||||
size="large"
|
|
||||||
icon={timeOutline}
|
|
||||||
></IonIcon>
|
|
||||||
<div className="div_from_to">
|
|
||||||
<span>Rua Tal Tal, 154, São Paulo - SP</span>
|
|
||||||
<IonIcon icon={arrowForwardOutline}></IonIcon>
|
|
||||||
<span>USP</span>
|
|
||||||
<br />
|
|
||||||
<small>Há 1 hora</small>
|
|
||||||
</div>
|
|
||||||
<IonIcon
|
|
||||||
className="icon-forward icon-align-vcenter"
|
|
||||||
size="large"
|
|
||||||
icon={chevronForwardOutline}
|
|
||||||
></IonIcon>
|
|
||||||
</IonRow>
|
|
||||||
<IonRow class="latest-searches">
|
|
||||||
<IonIcon
|
|
||||||
className="icon-align-vcenter"
|
|
||||||
size="large"
|
|
||||||
icon={timeOutline}
|
|
||||||
/>
|
|
||||||
<div className="div_from_to">
|
|
||||||
<span>Taquaral</span>
|
|
||||||
<IonIcon icon={arrowForwardOutline}></IonIcon>
|
|
||||||
<span>PUC-Campinas</span>
|
|
||||||
<br />
|
|
||||||
<small>Há 2 hora</small>
|
|
||||||
</div>
|
|
||||||
<IonIcon
|
|
||||||
className="icon-forward icon-align-vcenter"
|
|
||||||
size="large"
|
|
||||||
icon={chevronForwardOutline}
|
|
||||||
/>
|
|
||||||
</IonRow>
|
|
||||||
{/* <IonModal isOpen={showModalEnd}>
|
|
||||||
<IonContent>
|
|
||||||
<div className="header-search-modal">
|
|
||||||
<IonIcon
|
|
||||||
className="icon-return-modal"
|
|
||||||
icon={arrowBack}
|
|
||||||
onClick={() => setShowModalEnd(false)}
|
|
||||||
/>
|
|
||||||
<IonInput
|
|
||||||
onIonChange={(e) => optionsAddress(e.detail.value)}
|
|
||||||
placeholder="R. José Paulino, 1234 - Centro, Campinas - SP, 13013-001"
|
|
||||||
className="search-modal"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{addressResults.length > 0 ? (
|
|
||||||
addressResults.map((item: any) => {
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
key={item.value}
|
|
||||||
className="modal-search-results"
|
|
||||||
data-value={item.value}
|
|
||||||
data-label={item.label}
|
|
||||||
onClick={(e) => setAddress(e)}
|
|
||||||
>
|
|
||||||
{item.label}
|
|
||||||
<IonIcon
|
|
||||||
className="icon-results-modal"
|
|
||||||
icon={chevronForwardOutline}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
})
|
|
||||||
) : (
|
|
||||||
<>
|
|
||||||
<IonProgressBar type="indeterminate" />
|
|
||||||
<br />
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</IonContent>
|
|
||||||
</IonModal> */}
|
|
||||||
</IonContent>
|
|
||||||
</IonPage>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default BuscarTransporte;
|
|
||||||
@@ -45,7 +45,7 @@ import {
|
|||||||
} from "ionicons/icons";
|
} from "ionicons/icons";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { useHistory, useLocation } from "react-router";
|
import { useHistory, useLocation } from "react-router";
|
||||||
import { getTransportes } from "../../services/functions/transportsService";
|
import itinerariesService from "../../services/functions/itinerariesService";
|
||||||
import { createUserSearch } from "../../services/api/users";
|
import { createUserSearch } from "../../services/api/users";
|
||||||
import "./Transportes.css";
|
import "./Transportes.css";
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ const Transportes: React.FC = () => {
|
|||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const props = location.state as InfoBusca;
|
const props = location.state as InfoBusca;
|
||||||
const [transportes, setTransportes] = useState([]);
|
const [itinerarios, setItinerarios] = useState([]);
|
||||||
const [showModalFilters, setShowModalFilters] = useState(false);
|
const [showModalFilters, setShowModalFilters] = useState(false);
|
||||||
const [showToast, setShowToast] = useState(false);
|
const [showToast, setShowToast] = useState(false);
|
||||||
const [messageToast, setMessageToast ] = useState('');
|
const [messageToast, setMessageToast ] = useState('');
|
||||||
@@ -68,13 +68,13 @@ const Transportes: React.FC = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (props) {
|
if (props) {
|
||||||
buscaTransportes();
|
buscaItinerarios();
|
||||||
}
|
}
|
||||||
}, [props]);
|
}, [props]);
|
||||||
|
|
||||||
async function buscaTransportes() {
|
async function buscaItinerarios() {
|
||||||
let data = (await getTransportes(props)) as any;
|
let data = (await itinerariesService.searchItineraries(props)) as any;
|
||||||
setTransportes(data);
|
setItinerarios(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
function criaAlerta(){
|
function criaAlerta(){
|
||||||
@@ -107,7 +107,7 @@ const Transportes: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
</IonHeader>
|
</IonHeader>
|
||||||
<IonContent fullscreen>
|
<IonContent fullscreen>
|
||||||
{transportes && transportes.length > 0? (
|
{itinerarios && itinerarios.length > 0? (
|
||||||
<div className="header-tabs">
|
<div className="header-tabs">
|
||||||
<IonSlides>
|
<IonSlides>
|
||||||
<IonSlide>
|
<IonSlide>
|
||||||
@@ -127,8 +127,8 @@ const Transportes: React.FC = () => {
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
(<h1 className="msg-not-found">Não foi encontrado nenhum transporte que atenda essa rota.</h1>)}
|
(<h1 className="msg-not-found">Não foi encontrado nenhum transporte que atenda essa rota.</h1>)}
|
||||||
{transportes &&
|
{itinerarios &&
|
||||||
transportes.map((record: any, index: any) => {
|
itinerarios.map((record: any, index: any) => {
|
||||||
return (
|
return (
|
||||||
<IonCard className="card-transporte" key={index}>
|
<IonCard className="card-transporte" key={index}>
|
||||||
<IonCardContent>
|
<IonCardContent>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import instance from './api';
|
import instance from './api';
|
||||||
// import LocalStorage from '../LocalStorage';
|
// import LocalStorage from '../LocalStorage';
|
||||||
|
|
||||||
import transportsRoutes from '../../constants/routes/transportsRoutes';
|
import transportsRoutes from '../../constants/routes/itinerariesRoutes';
|
||||||
import { AxiosRequestHeaders } from 'axios';
|
import { AxiosRequestHeaders } from 'axios';
|
||||||
import LocalStorage from '../../LocalStorage';
|
import LocalStorage from '../../LocalStorage';
|
||||||
import { setStore } from '../../store/RecordsStore';
|
import { setStore } from '../../store/RecordsStore';
|
||||||
@@ -19,7 +19,7 @@ function updateHeader() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface getTransportsRequest {
|
export interface GetItinerariesRequest {
|
||||||
coordinatesFrom: {
|
coordinatesFrom: {
|
||||||
lat: number,
|
lat: number,
|
||||||
lng: number
|
lng: number
|
||||||
@@ -30,7 +30,14 @@ export interface getTransportsRequest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function get(coordinates: getTransportsRequest) {
|
export async function get() {
|
||||||
|
updateHeader();
|
||||||
|
|
||||||
|
const response = await instance.get(transportsRoutes.get.url, { headers: header });
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function search(coordinates: GetItinerariesRequest) {
|
||||||
updateHeader();
|
updateHeader();
|
||||||
|
|
||||||
const response = await instance.get(transportsRoutes.get.url + `/${coordinates}`, { headers: header });
|
const response = await instance.get(transportsRoutes.get.url + `/${coordinates}`, { headers: header });
|
||||||
36
src/services/functions/itinerariesService.ts
Normal file
36
src/services/functions/itinerariesService.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import * as itinerariesRoutes from '../api/itineraries';
|
||||||
|
|
||||||
|
interface CoordinatesRequest {
|
||||||
|
coordinatesFrom:{
|
||||||
|
lat: number,
|
||||||
|
lng: number
|
||||||
|
},
|
||||||
|
coordinatesTo:{
|
||||||
|
lat: number,
|
||||||
|
lng: number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getAllItineraries() : Promise<any> {
|
||||||
|
let res: any;
|
||||||
|
|
||||||
|
try {
|
||||||
|
res = await itinerariesRoutes.get();
|
||||||
|
} catch (error) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.data
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export async function searchItineraries(request: CoordinatesRequest) : Promise<any> {
|
||||||
|
let res
|
||||||
|
try {
|
||||||
|
let res : any = await itinerariesRoutes.search(request);
|
||||||
|
} catch (error) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default { getAllItineraries, searchItineraries }
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
import * as transportsRoutes from '../api/transports';
|
|
||||||
|
|
||||||
interface CoordinatesRequest {
|
|
||||||
coordinatesFrom:{
|
|
||||||
lat: number,
|
|
||||||
lng: number
|
|
||||||
},
|
|
||||||
coordinatesTo:{
|
|
||||||
lat: number,
|
|
||||||
lng: number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getTransportes(request: CoordinatesRequest) : Promise<any> {
|
|
||||||
try {
|
|
||||||
let res : any = await transportsRoutes.get(request);
|
|
||||||
} catch (error) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user