Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1d1a60214a | |||
| fb1fc9231d | |||
| b28bb63675 | |||
| e7c1ec3512 | |||
| 5903fb5260 | |||
| 0ec500e71b | |||
| a3e3b3fdc8 | |||
| 686c1f1856 | |||
| 420716ed8f | |||
| 51e9681701 | |||
| e0984aa10b | |||
| 704f308cac | |||
| 1f70f9c349 | |||
| 7c685efcb0 |
@@ -1,71 +1,53 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import ReactLenis from "lenis/react";
|
||||
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
|
||||
import FooterBase from '@/components/sections/footer/FooterBase';
|
||||
import { useState } from 'react';
|
||||
import { useState } from "react";
|
||||
|
||||
export default function AdminDashboardPage() {
|
||||
const [appointments, setAppointments] = useState([
|
||||
{ id: "1", client: "John Doe", service: "Precision Fade", time: "10:00 AM", status: "Confirmed" },
|
||||
{ id: "2", client: "Mike Smith", service: "Hot Towel Shave", time: "11:30 AM", status: "Confirmed" },
|
||||
export default function AdminDashboard() {
|
||||
const [bookings, setBookings] = useState([
|
||||
{ id: "1", client: "John Doe", service: "Precision Fade", status: "Pending" },
|
||||
{ id: "2", client: "Mike Smith", service: "Beard Sculpt", status: "Confirmed" }
|
||||
]);
|
||||
|
||||
const handleCancel = (id: string) => {
|
||||
setAppointments(appointments.filter(app => app.id !== id));
|
||||
};
|
||||
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="hover-magnetic"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="rounded"
|
||||
contentWidth="medium"
|
||||
sizing="medium"
|
||||
background="floatingGradient"
|
||||
cardStyle="gradient-bordered"
|
||||
primaryButtonStyle="radial-glow"
|
||||
secondaryButtonStyle="solid"
|
||||
headingFontWeight="normal"
|
||||
defaultButtonVariant="hover-magnetic"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="rounded"
|
||||
contentWidth="medium"
|
||||
sizing="medium"
|
||||
background="noise"
|
||||
cardStyle="glass-elevated"
|
||||
primaryButtonStyle="gradient"
|
||||
secondaryButtonStyle="solid"
|
||||
headingFontWeight="semibold"
|
||||
>
|
||||
<ReactLenis root>
|
||||
<NavbarStyleFullscreen
|
||||
navItems={[{ name: "Home", id: "/" }, { name: "Admin", id: "/admin" }]}
|
||||
brandName="Elite Grooming"
|
||||
/>
|
||||
<main className="pt-32 pb-20 px-6 max-w-5xl mx-auto min-h-screen">
|
||||
<h1 className="text-4xl font-bold mb-8">Appointment Management</h1>
|
||||
<div className="bg-card p-6 rounded-lg border shadow-sm">
|
||||
<table className="w-full text-left">
|
||||
<thead>
|
||||
<tr className="border-b">
|
||||
<th className="pb-4">Client</th>
|
||||
<th className="pb-4">Service</th>
|
||||
<th className="pb-4">Time</th>
|
||||
<th className="pb-4">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{appointments.map((app) => (
|
||||
<tr key={app.id} className="border-b last:border-0">
|
||||
<td className="py-4">{app.client}</td>
|
||||
<td className="py-4">{app.service}</td>
|
||||
<td className="py-4">{app.time}</td>
|
||||
<td className="py-4">
|
||||
<button onClick={() => handleCancel(app.id)} className="text-red-500 hover:underline">Cancel</button>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</main>
|
||||
<FooterBase
|
||||
logoText="Elite Grooming"
|
||||
columns={[{ title: "Navigation", items: [{ label: "Home", href: "/" }] }]}
|
||||
/>
|
||||
</ReactLenis>
|
||||
<div className="min-h-screen p-8">
|
||||
<h1 className="text-3xl font-bold mb-8">Booking Management Dashboard</h1>
|
||||
<div className="grid gap-6">
|
||||
{bookings.map((booking) => (
|
||||
<div key={booking.id} className="p-6 flex justify-between items-center border rounded-lg">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold">{booking.client}</h2>
|
||||
<p className="text-muted-foreground">{booking.service}</p>
|
||||
</div>
|
||||
<div className="flex items-center gap-4">
|
||||
<span className={`px-3 py-1 rounded-full text-sm font-medium ${booking.status === "Pending" ? "bg-yellow-100 text-yellow-800" : "bg-green-100 text-green-800"}`}>
|
||||
{booking.status}
|
||||
</span>
|
||||
{booking.status === "Pending" && (
|
||||
<button
|
||||
className="px-4 py-2 bg-blue-600 text-white rounded-md cursor-pointer hover:bg-blue-700 transition-colors"
|
||||
onClick={() => setBookings(prev => prev.map(b => b.id === booking.id ? {...b, status: "Confirmed"} : b))}
|
||||
>
|
||||
Process Booking
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
42
src/app/booking/page.tsx
Normal file
42
src/app/booking/page.tsx
Normal file
@@ -0,0 +1,42 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import ContactCenter from '@/components/sections/contact/ContactCenter';
|
||||
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
|
||||
|
||||
export default function BookingPage() {
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="hover-magnetic"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="rounded"
|
||||
contentWidth="medium"
|
||||
sizing="medium"
|
||||
background="none"
|
||||
cardStyle="glass-elevated"
|
||||
primaryButtonStyle="gradient"
|
||||
secondaryButtonStyle="glass"
|
||||
headingFontWeight="normal"
|
||||
>
|
||||
<div id="nav" data-section="nav">
|
||||
<NavbarStyleFullscreen
|
||||
navItems={[
|
||||
{ name: "Home", id: "/" },
|
||||
{ name: "Services", id: "/services" },
|
||||
{ name: "Book Online", id: "/booking" }
|
||||
]}
|
||||
brandName="Elite Grooming"
|
||||
/>
|
||||
</div>
|
||||
<div id="contact" data-section="contact" className="pt-32 pb-20">
|
||||
<ContactCenter
|
||||
tag="Appointment"
|
||||
title="Schedule Your Visit"
|
||||
description="Select your preferred time and barber for your next grooming session."
|
||||
background={{ variant: "plain" }}
|
||||
useInvertedBackground={false}
|
||||
/>
|
||||
</div>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
@@ -11,11 +11,11 @@
|
||||
--background-accent: #ffffff; */
|
||||
|
||||
--background: #000000;
|
||||
--card: #121212;
|
||||
--foreground: #ffffff;
|
||||
--card: #1A1A1A;
|
||||
--foreground: #FFFFFF;
|
||||
--primary-cta: #FFD700;
|
||||
--primary-cta-text: #000000;
|
||||
--secondary-cta: #1A1A1A;
|
||||
--secondary-cta: #262626;
|
||||
--secondary-cta-text: #FFFFFF;
|
||||
--accent: #B8860B;
|
||||
--background-accent: #262626;
|
||||
|
||||
Reference in New Issue
Block a user