From fbaae8f461ff085356670d41506cd92180227beb Mon Sep 17 00:00:00 2001 From: omagdy7 Date: Sat, 23 Dec 2023 01:39:59 +0200 Subject: Final version --- driver/index.html | 1 - driver/src/pages/Home.tsx | 106 +++++++++++++++++++++------ driver/src/pages/SignUp.tsx | 3 +- driver/src/utils/fetchUserIdByPhoneNumber.ts | 24 ++++++ driver/src/utils/updateStatus.ts | 24 ++++++ 5 files changed, 131 insertions(+), 27 deletions(-) create mode 100644 driver/src/utils/fetchUserIdByPhoneNumber.ts create mode 100644 driver/src/utils/updateStatus.ts (limited to 'driver') diff --git a/driver/index.html b/driver/index.html index 5fc871e..8025373 100644 --- a/driver/index.html +++ b/driver/index.html @@ -2,7 +2,6 @@ - Carpool 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}

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