From fbaae8f461ff085356670d41506cd92180227beb Mon Sep 17 00:00:00 2001
From: omagdy7
Date: Sat, 23 Dec 2023 01:39:59 +0200
Subject: Final version
---
driver/src/pages/Home.tsx | 106 +++++++++++++++++++++------
driver/src/pages/SignUp.tsx | 3 +-
driver/src/utils/fetchUserIdByPhoneNumber.ts | 24 ++++++
driver/src/utils/updateStatus.ts | 24 ++++++
4 files changed, 131 insertions(+), 26 deletions(-)
create mode 100644 driver/src/utils/fetchUserIdByPhoneNumber.ts
create mode 100644 driver/src/utils/updateStatus.ts
(limited to 'driver/src')
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()
const [rideRequests, setRideRequests] = useState([])
- const [currentTrip, setCurrentTrip] = useState()
+ const [currentTrip, setCurrentTrip] = useState(null)
+ const [toComplete, setToComplete] = useState(false)
const [isLoggedIn, setIsLoggedIn] = useState(true)
@@ -57,30 +61,45 @@ export default function Home() {
-
@@ -89,11 +108,38 @@ 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() {
Dropoff: {currentTrip?.dropOff}
-
- Start Trip
-
-
+ {
+ setToComplete(true);
+ }}
+ className="w-full mt-4 border-green-500 text-white" variant="outline">
Finish Trip
-
+ {
+ 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
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);
+ }
+};
--
cgit v1.2.3