summaryrefslogtreecommitdiff
path: root/driver/src/components
diff options
context:
space:
mode:
authoromagdy7 <omar.professional8777@gmail.com>2023-12-22 18:59:16 +0200
committeromagdy7 <omar.professional8777@gmail.com>2023-12-22 18:59:16 +0200
commite97dbb11b30d0fe51b2ca1660e9f0d27a99a73e3 (patch)
treee99961a2ff29d7e8522697f67c9276713c657569 /driver/src/components
parent7b379914e44583b9b097ed286b669ad244b176a1 (diff)
downloadcarpool-e97dbb11b30d0fe51b2ca1660e9f0d27a99a73e3.tar.xz
carpool-e97dbb11b30d0fe51b2ca1660e9f0d27a99a73e3.zip
Added most of the logic on the driver side
Diffstat (limited to 'driver/src/components')
-rw-r--r--driver/src/components/RideDialog.tsx110
-rw-r--r--driver/src/components/ui/avatar.tsx48
-rw-r--r--driver/src/components/ui/badge.tsx36
-rw-r--r--driver/src/components/ui/card.tsx79
4 files changed, 273 insertions, 0 deletions
diff --git a/driver/src/components/RideDialog.tsx b/driver/src/components/RideDialog.tsx
new file mode 100644
index 0000000..da7767b
--- /dev/null
+++ b/driver/src/components/RideDialog.tsx
@@ -0,0 +1,110 @@
+import { addDoc, collection, doc, getDoc } from "firebase/firestore"
+import { db } from "../firebase/firebase_config"
+import { auth } from "../firebase/firebase_config"
+import { Button } from "@/components/ui/button"
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+ DialogTrigger,
+} from "@/components/ui/dialog"
+import { Input } from "@/components/ui/input"
+import { Label } from "@/components/ui/label"
+import { useState } from "react"
+
+interface RideOrder {
+ driverName: string
+ carBrand: string
+ carModel: string
+ carColor: string
+ plateNumber: string
+ status: string
+ orderTime: Date
+ pickUpLocation: string
+ dropOffLocation: string
+}
+
+
+function RideDialog({ name, brand, model, color, plateNumber }: any) {
+
+ const [status, _setStatus] = useState<string>('Pending')
+ const [orderTime, _setOrderTime] = useState<Date>(new Date())
+ const [pickUpLocation, setPickUpLocation] = useState<string>()
+ const [dropOffLocation, setDropOffLocation] = useState<string>()
+
+
+ const addRideOrderToFirestore = async () => {
+ try {
+ // Get a reference to the 'rideOrders' collection
+ const rideOrdersCollection = collection(db, 'Rides');
+
+ // Add a new document to the 'rideOrders' collection with the data from the RideOrder object
+ const newRideOrderRef = await addDoc(rideOrdersCollection, {
+ driverName: name,
+ carModel: model,
+ carBrand: brand,
+ carColor: color,
+ plateNumber: plateNumber,
+ status: status,
+ orderTime: orderTime,
+ fromLocation: pickUpLocation,
+ toLocation: dropOffLocation,
+ });
+
+ console.log('Ride order added with ID:', newRideOrderRef.id);
+ // 'newRideOrderRef.id' will give you the document ID of the added ride order
+ } catch (error) {
+ console.error('Error adding ride order:', error);
+ }
+ };
+
+ return (
+ <div>
+ <Dialog>
+ <DialogTrigger asChild>
+ <Button className="bg-green-600 text-black text-xl">Add Ride</Button>
+ </DialogTrigger>
+ <DialogContent className="sm:max-w-[425px]">
+ <DialogHeader>
+ <DialogTitle>Ride details</DialogTitle>
+ <DialogDescription>
+ Please enter details about your ride and click submit for the ride to appear to other students!
+ </DialogDescription>
+ </DialogHeader>
+ <div className="grid gap-4 py-4">
+ <div className="grid grid-cols-4 items-center gap-4">
+ <Label htmlFor="To Location" className="text-right">
+ Pickup
+ </Label>
+ <Input
+ id="To Location"
+ defaultValue=""
+ className="col-span-3"
+ onChange={(e) => setDropOffLocation(e.target.value)}
+ />
+ </div>
+ <div className="grid grid-cols-4 items-center gap-4">
+ <Label htmlFor="From location" className="text-right">
+ Drop off
+ </Label>
+ <Input
+ id="From location"
+ defaultValue=""
+ className="col-span-3"
+ onChange={(e) => setPickUpLocation(e.target.value)}
+ />
+ </div>
+ </div>
+ <DialogFooter>
+ <Button className="bg-green-500 text-black" type="submit" onClick={addRideOrderToFirestore}>Submit</Button>
+ </DialogFooter>
+ </DialogContent>
+ </Dialog>
+ </div>
+ )
+}
+
+export default RideDialog;
diff --git a/driver/src/components/ui/avatar.tsx b/driver/src/components/ui/avatar.tsx
new file mode 100644
index 0000000..991f56e
--- /dev/null
+++ b/driver/src/components/ui/avatar.tsx
@@ -0,0 +1,48 @@
+import * as React from "react"
+import * as AvatarPrimitive from "@radix-ui/react-avatar"
+
+import { cn } from "@/lib/utils"
+
+const Avatar = React.forwardRef<
+ React.ElementRef<typeof AvatarPrimitive.Root>,
+ React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
+>(({ className, ...props }, ref) => (
+ <AvatarPrimitive.Root
+ ref={ref}
+ className={cn(
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
+ className
+ )}
+ {...props}
+ />
+))
+Avatar.displayName = AvatarPrimitive.Root.displayName
+
+const AvatarImage = React.forwardRef<
+ React.ElementRef<typeof AvatarPrimitive.Image>,
+ React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
+>(({ className, ...props }, ref) => (
+ <AvatarPrimitive.Image
+ ref={ref}
+ className={cn("aspect-square h-full w-full", className)}
+ {...props}
+ />
+))
+AvatarImage.displayName = AvatarPrimitive.Image.displayName
+
+const AvatarFallback = React.forwardRef<
+ React.ElementRef<typeof AvatarPrimitive.Fallback>,
+ React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
+>(({ className, ...props }, ref) => (
+ <AvatarPrimitive.Fallback
+ ref={ref}
+ className={cn(
+ "flex h-full w-full items-center justify-center rounded-full bg-muted",
+ className
+ )}
+ {...props}
+ />
+))
+AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
+
+export { Avatar, AvatarImage, AvatarFallback }
diff --git a/driver/src/components/ui/badge.tsx b/driver/src/components/ui/badge.tsx
new file mode 100644
index 0000000..f000e3e
--- /dev/null
+++ b/driver/src/components/ui/badge.tsx
@@ -0,0 +1,36 @@
+import * as React from "react"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const badgeVariants = cva(
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
+ {
+ variants: {
+ variant: {
+ default:
+ "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
+ secondary:
+ "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
+ destructive:
+ "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
+ outline: "text-foreground",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ }
+)
+
+export interface BadgeProps
+ extends React.HTMLAttributes<HTMLDivElement>,
+ VariantProps<typeof badgeVariants> {}
+
+function Badge({ className, variant, ...props }: BadgeProps) {
+ return (
+ <div className={cn(badgeVariants({ variant }), className)} {...props} />
+ )
+}
+
+export { Badge, badgeVariants }
diff --git a/driver/src/components/ui/card.tsx b/driver/src/components/ui/card.tsx
new file mode 100644
index 0000000..afa13ec
--- /dev/null
+++ b/driver/src/components/ui/card.tsx
@@ -0,0 +1,79 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+const Card = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => (
+ <div
+ ref={ref}
+ className={cn(
+ "rounded-lg border bg-card text-card-foreground shadow-sm",
+ className
+ )}
+ {...props}
+ />
+))
+Card.displayName = "Card"
+
+const CardHeader = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => (
+ <div
+ ref={ref}
+ className={cn("flex flex-col space-y-1.5 p-6", className)}
+ {...props}
+ />
+))
+CardHeader.displayName = "CardHeader"
+
+const CardTitle = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes<HTMLHeadingElement>
+>(({ className, ...props }, ref) => (
+ <h3
+ ref={ref}
+ className={cn(
+ "text-2xl font-semibold leading-none tracking-tight",
+ className
+ )}
+ {...props}
+ />
+))
+CardTitle.displayName = "CardTitle"
+
+const CardDescription = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes<HTMLParagraphElement>
+>(({ className, ...props }, ref) => (
+ <p
+ ref={ref}
+ className={cn("text-sm text-muted-foreground", className)}
+ {...props}
+ />
+))
+CardDescription.displayName = "CardDescription"
+
+const CardContent = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => (
+ <div ref={ref} className={cn("p-6 pt-0", className)} {...props} />
+))
+CardContent.displayName = "CardContent"
+
+const CardFooter = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => (
+ <div
+ ref={ref}
+ className={cn("flex items-center p-6 pt-0", className)}
+ {...props}
+ />
+))
+CardFooter.displayName = "CardFooter"
+
+export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }