From da90d433397607ff2744e9cc07e9bb28c102c197 Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 16:42:21 +0000 Subject: [PATCH] Add src/app/admin/page.tsx --- src/app/admin/page.tsx | 289 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+) create mode 100644 src/app/admin/page.tsx diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx new file mode 100644 index 0000000..7a7363e --- /dev/null +++ b/src/app/admin/page.tsx @@ -0,0 +1,289 @@ +"use client"; + +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple"; +import FooterBase from "@/components/sections/footer/FooterBase"; +import { useState } from "react"; +import { Plus, Edit2, Trash2, Save, X } from "lucide-react"; + +interface BusRoute { + id: string; + name: string; + departure: string; + arrival: string; + price: number; + capacity: number; + status: "active" | "inactive"; +} + +interface Ticket { + id: string; + routeId: string; + passengerName: string; + seatNumber: string; + bookingDate: string; + status: "booked" | "cancelled" | "completed"; +} + +export default function AdminDashboard() { + const [routes, setRoutes] = useState([ + { id: "1", name: "Cairo to Alexandria", departure: "06:00", arrival: "09:00", price: 100, capacity: 50, status: "active" }, + { id: "2", name: "Cairo to Giza", departure: "07:30", arrival: "08:30", price: 50, capacity: 40, status: "active" }, + ]); + + const [tickets, setTickets] = useState([ + { id: "1", routeId: "1", passengerName: "Ahmed Hassan", seatNumber: "A1", bookingDate: "2025-01-15", status: "booked" }, + { id: "2", routeId: "1", passengerName: "Fatima Mohamed", seatNumber: "A2", bookingDate: "2025-01-15", status: "booked" }, + ]); + + const [editingRoute, setEditingRoute] = useState(null); + const [editingTicket, setEditingTicket] = useState(null); + const [showRouteForm, setShowRouteForm] = useState(false); + const [showTicketForm, setShowTicketForm] = useState(false); + + const handleDeleteRoute = (id: string) => { + setRoutes(routes.filter(r => r.id !== id)); + }; + + const handleDeleteTicket = (id: string) => { + setTickets(tickets.filter(t => t.id !== id)); + }; + + const handleSaveRoute = (route: BusRoute) => { + if (editingRoute) { + setRoutes(routes.map(r => r.id === route.id ? route : r)); + setEditingRoute(null); + } else { + setRoutes([...routes, { ...route, id: String(Date.now()) }]); + } + setShowRouteForm(false); + }; + + const handleSaveTicket = (ticket: Ticket) => { + if (editingTicket) { + setTickets(tickets.map(t => t.id === ticket.id ? ticket : t)); + setEditingTicket(null); + } else { + setTickets([...tickets, { ...ticket, id: String(Date.now()) }]); + } + setShowTicketForm(false); + }; + + return ( + + + +
+
+

Admin Dashboard

+ + {/* Bus Routes Management */} +
+
+

Bus Routes Management

+ +
+ +
+ + + + + + + + + + + + + + {routes.map(route => ( + + + + + + + + + + ))} + +
Route NameDepartureArrivalPrice (EGP)CapacityStatusActions
{route.name}{route.departure}{route.arrival}{route.price}{route.capacity} + + {route.status} + + + + +
+
+
+ + {/* Ticket Management */} +
+
+

Ticket Management

+ +
+ +
+ + + + + + + + + + + + + {tickets.map(ticket => { + const route = routes.find(r => r.id === ticket.routeId); + return ( + + + + + + + + + ); + })} + +
Passenger NameRouteSeat NumberBooking DateStatusActions
{ticket.passengerName}{route?.name || 'N/A'}{ticket.seatNumber}{ticket.bookingDate} + + {ticket.status} + + + + +
+
+
+
+
+ + +
+ ); +} \ No newline at end of file