Refatoração Transporte para Itinerário e página de busca de itinerários mostra os resultados da API

This commit is contained in:
Matheus Albino Brunhara
2022-09-02 22:08:16 -03:00
parent 26b3fe6c0f
commit b3fd8946f5
11 changed files with 507 additions and 429 deletions

View File

@@ -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>

View File

@@ -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}`
}, },

View 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;
}

View File

@@ -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> 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> 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>
); );

View 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;

View File

@@ -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> 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> 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;

View File

@@ -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>

View File

@@ -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 });

View 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 }

View File

@@ -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) {
}
}