summaryrefslogtreecommitdiff
path: root/driver/src
diff options
context:
space:
mode:
authoromagdy7 <omar.professional8777@gmail.com>2023-12-23 01:39:59 +0200
committeromagdy7 <omar.professional8777@gmail.com>2023-12-23 01:39:59 +0200
commitfbaae8f461ff085356670d41506cd92180227beb (patch)
treea7a6b9c83f22961c1b4e5cea02841a2f58f81116 /driver/src
parent776f680ca58d066e24284b009eb9a28ced03a6ea (diff)
downloadcarpool-fbaae8f461ff085356670d41506cd92180227beb.tar.xz
carpool-fbaae8f461ff085356670d41506cd92180227beb.zip
Final version
Diffstat (limited to 'driver/src')
-rw-r--r--driver/src/pages/Home.tsx106
-rw-r--r--driver/src/pages/SignUp.tsx3
-rw-r--r--driver/src/utils/fetchUserIdByPhoneNumber.ts24
-rw-r--r--driver/src/utils/updateStatus.ts24
4 files changed, 131 insertions, 26 deletions
diff --git a/driver/src/pages/Home.tsx b/driver/src/pages/Home.tsx
index bd003b6..e2fb141 100644
--- a/driver/src/pages/Home.tsx
+++ b/driver/src/pages/Home.tsx
@@ -10,6 +10,9 @@ import { useEffect, useState } from "react"
import { Navigate } from "react-router-dom"
import { fetchRideRequests } from "@/utils/fetchRideRequests"
import { collection, onSnapshot } from "firebase/firestore"
+import { toast } from "@/components/ui/use-toast"
+import { updateStatus } from "@/utils/updateStatus"
+import { fetchUserIdByPhoneNumber } from "@/utils/fetchUserIdByPhoneNumber"
interface IDriver {
uid: string,
@@ -33,7 +36,8 @@ interface IPassengerRequest {
export default function Home() {
const [driverData, setDriverData] = useState<IDriver | null | undefined>()
const [rideRequests, setRideRequests] = useState<IPassengerRequest[]>([])
- const [currentTrip, setCurrentTrip] = useState<IPassengerRequest>()
+ const [currentTrip, setCurrentTrip] = useState<IPassengerRequest | null>(null)
+ const [toComplete, setToComplete] = useState(false)
const [isLoggedIn, setIsLoggedIn] = useState(true)
@@ -57,30 +61,45 @@ export default function Home() {
</p>
<div className="flex justify-between mt-2">
<Button onClick={
- () => {
- const newRideReqs = rideRequests.map((request) => {
- if (request.phoneNumber === phoneNumber) {
- return { ...request, status: 'Accepted' };
+ async () => {
+ if (currentTrip) {
+ toast({
+ description: "You already have a trip consider canceling the trip to accept a new one"
+ })
+ } else {
+ const newRideReqs = rideRequests.map((request) => {
+ if (request.phoneNumber === phoneNumber) {
+ return { ...request, status: 'Accepted' };
+ }
+ return request;
+ })
+ const curTrip: any = newRideReqs.find((req) => req.phoneNumber == phoneNumber)
+ const userId = await fetchUserIdByPhoneNumber(phoneNumber)
+ if (userId) {
+ await updateStatus(userId, "Accepted")
}
- return request;
- })
- const curTrip = newRideReqs.find((req) => req.phoneNumber == phoneNumber)
- setCurrentTrip(curTrip)
- setRideRequests(newRideReqs)
+ setCurrentTrip(curTrip)
+ setRideRequests((_) => [...newRideReqs])
+ }
}
}
className="text-green-500 border-green-500" variant="outline">
Accept
</Button>
- <Button onClick={() => {
- const newRideReqs = rideRequests.map((request) => {
- if (request.phoneNumber === phoneNumber) {
- return { ...request, status: 'Cancelled' };
+ <Button onClick={
+ async () => {
+ const newRideReqs = rideRequests.map((request) => {
+ if (request.phoneNumber === phoneNumber) {
+ return { ...request, status: 'Cancelled' };
+ }
+ return request;
+ })
+ const userId = await fetchUserIdByPhoneNumber(phoneNumber)
+ if (userId) {
+ await updateStatus(userId, "Rejected")
}
- return request;
- })
- setRideRequests(newRideReqs)
- }} className="border-red-500 text-red-500" variant="outline">
+ setRideRequests(() => newRideReqs)
+ }} className="border-red-500 text-red-500" variant="outline">
Reject
</Button>
</div>
@@ -90,10 +109,37 @@ export default function Home() {
}
useEffect(() => {
+ const doWork = async () => {
+ if (toComplete) {
+ let phoneNumber = ''
+ const newRideReqs = rideRequests.map((request) => {
+ if (request.status === "Accepted") {
+ phoneNumber = request.phoneNumber;
+ return { ...request, status: 'Completed' };
+ }
+ return request;
+ })
+ const userId = await fetchUserIdByPhoneNumber(phoneNumber)
+ if (userId) {
+ await updateStatus(userId, "Completed")
+ }
+ setRideRequests(newRideReqs)
+ setCurrentTrip(null)
+ }
+ }
+ doWork()
+
+ return () => {
+ doWork()
+ }
+
+ }, [toComplete])
+
+ useEffect(() => {
const user = auth.currentUser;
async function fetchData() {
const data: IDriver | null | undefined = await fetchUserDetails(user?.uid);
- const rideReqs = await fetchRideRequests()
+ const rideReqs: any = await fetchRideRequests()
setDriverData(data)
setRideRequests(rideReqs)
}
@@ -173,13 +219,25 @@ export default function Home() {
<p>
<strong>Dropoff:</strong> {currentTrip?.dropOff}
</p>
- <Button className="w-full mt-4 border-blue-500 text-white" variant="outline">
- Start Trip
- </Button>
- <Button className="w-full mt-4 border-green-500 text-white" variant="outline">
+ <Button
+ onClick={() => {
+ setToComplete(true);
+ }}
+ className="w-full mt-4 border-green-500 text-white" variant="outline">
Finish Trip
</Button>
- <Button className="w-full mt-4 border-red-500 text-white" variant="outline">
+ <Button
+ onClick={() => {
+ const newRideReqs = rideRequests.map((request) => {
+ if (request.status === "Accepted") {
+ return { ...request, status: 'Pending' };
+ }
+ return request;
+ })
+ setRideRequests(newRideReqs)
+ setCurrentTrip(null)
+ }}
+ className="w-full mt-4 border-red-500 text-white" variant="outline">
Cancel Trip
</Button>
</CardContent>
diff --git a/driver/src/pages/SignUp.tsx b/driver/src/pages/SignUp.tsx
index b73d810..dbe5e9c 100644
--- a/driver/src/pages/SignUp.tsx
+++ b/driver/src/pages/SignUp.tsx
@@ -4,7 +4,7 @@ import { Button } from "@/components/ui/button"
import { useState, useEffect } from 'react';
import { auth, db } from '../firebase/firebase_config';
import { createUserWithEmailAndPassword } from 'firebase/auth';
-import { Navigate, redirect } from "react-router-dom";
+import { Navigate } from "react-router-dom";
import { addDoc, collection } from "firebase/firestore";
const SignUp = () => {
@@ -43,7 +43,6 @@ const SignUp = () => {
const userCredential = await createUserWithEmailAndPassword(auth, email, password);
const usersCollection = collection(db, 'users');
const userUid = userCredential.user.uid; // Get the user's UID
- console.log(userUid, name, phoneNumber, carBrand, carModel, carColor, plateNumber)
addDoc(usersCollection, {
uid: userUid,
name: name,
diff --git a/driver/src/utils/fetchUserIdByPhoneNumber.ts b/driver/src/utils/fetchUserIdByPhoneNumber.ts
new file mode 100644
index 0000000..843ac67
--- /dev/null
+++ b/driver/src/utils/fetchUserIdByPhoneNumber.ts
@@ -0,0 +1,24 @@
+import { auth, db } from "@/firebase/firebase_config";
+import { DocumentData, collection, getDocs, query, where } from "firebase/firestore";
+
+
+export const fetchUserIdByPhoneNumber = async (phoneNumber: any) => {
+ try {
+ const user = auth.currentUser;
+ let data = null
+ if (user) {
+ const usersRef = collection(db, "users")
+ const q = query(usersRef, where("phoneNumber", "==", phoneNumber))
+ const querySnapshot = await getDocs(q);
+ querySnapshot.forEach((doc: DocumentData) => {
+ data = doc.data()
+ });
+ return data.uid;
+ } else {
+ console.log("There is no user");
+ return null;
+ }
+ } catch (error) {
+ console.error('Error fetching user details:', error);
+ }
+};
diff --git a/driver/src/utils/updateStatus.ts b/driver/src/utils/updateStatus.ts
new file mode 100644
index 0000000..a717905
--- /dev/null
+++ b/driver/src/utils/updateStatus.ts
@@ -0,0 +1,24 @@
+import { db } from "@/firebase/firebase_config";
+import { collection, doc, getDocs, query, updateDoc, where } from "firebase/firestore";
+
+export const updateStatus = async (userId, newStatus) => {
+ console.log("userID: ", userId)
+ try {
+ const q = query(collection(db, 'RideRequest'), where('passengerID', '==', userId));
+ const querySnapshot = await getDocs(q);
+
+ querySnapshot.forEach(async (doc_data) => {
+ try {
+ const passengerRequestRef = doc(db, 'RideRequest', doc_data.id);
+ await updateDoc(passengerRequestRef, {
+ status: newStatus,
+ });
+ console.log(`Status updated successfully for document ID: ${doc_data.id}`);
+ } catch (error) {
+ console.error('Error updating status:', error);
+ }
+ });
+ } catch (error) {
+ console.error('Error fetching documents:', error);
+ }
+};