diff --git a/frontend/my-app/src/pages/Admin/EventsPage.jsx b/frontend/my-app/src/pages/Admin/EventsPage.jsx index e474af9..1b72db6 100644 --- a/frontend/my-app/src/pages/Admin/EventsPage.jsx +++ b/frontend/my-app/src/pages/Admin/EventsPage.jsx @@ -7,6 +7,7 @@ import EventCard from "../../components/EventsOffice/EventCard"; import axios from 'axios'; import AuthContext from '../../context/AuthContext'; import Loader from '../../components/Shared/Loader'; +import EmptyState from '../../components/Shared/EmptyState'; @@ -234,13 +235,27 @@ export default function ViewEvents() { -
- {loading ? ( - - ) : error ? ( -

Error: {error}

- ) : ( - filteredEvents.map((evt) => ( + {loading ? ( + + ) : error ? ( +
+
⚠️
+

Error Loading Events

+

{error}

+
+ ) : filteredEvents.length === 0 ? ( + 📅} + /> + ) : ( +
+ {filteredEvents.map((evt) => ( - )) - )} -
+ ))} +
+ )} diff --git a/frontend/my-app/src/pages/Admin/ManagePage.jsx b/frontend/my-app/src/pages/Admin/ManagePage.jsx index 7d48855..0b91ecd 100644 --- a/frontend/my-app/src/pages/Admin/ManagePage.jsx +++ b/frontend/my-app/src/pages/Admin/ManagePage.jsx @@ -15,6 +15,7 @@ import MainHeader from "../../components/Shared/MainHeader"; import Swal from 'sweetalert2'; import axios from 'axios'; import AuthContext from "../../context/AuthContext"; +import EmptyState from '../../components/Shared/EmptyState'; export default function ManagePage() { const [mobileOpen, setMobileOpen] = useState(false); @@ -287,11 +288,20 @@ export default function ManagePage() { {/* Accounts List */}
{currentAccounts.length === 0 ? ( -
- -

No {activeTab} accounts found

-

Create your first {activeTab.toLowerCase()} account to get started

-
+ } + actionButton={ + + } + /> ) : ( currentAccounts.map((account) => (
) : ( -
- No bazaar requests found - {filterStatus !== 'all' && ` with status: ${filterStatus}`} -
+ 🏪} + /> ) ) : ( filteredBoothRequests.length > 0 ? ( @@ -529,10 +535,15 @@ export default function VendorRequests() { ))}
) : ( -
- No booth requests found - {filterStatus !== 'all' && ` with status: ${filterStatus}`} -
+ 🏢} + /> ) )}
diff --git a/frontend/my-app/src/pages/EventsOffice/Bazars.jsx b/frontend/my-app/src/pages/EventsOffice/Bazars.jsx index 0d44b70..783ee37 100644 --- a/frontend/my-app/src/pages/EventsOffice/Bazars.jsx +++ b/frontend/my-app/src/pages/EventsOffice/Bazars.jsx @@ -7,6 +7,7 @@ import { Plus } from "lucide-react"; import Swal from "sweetalert2"; import axios from 'axios'; import AuthContext from '../../context/AuthContext'; +import EmptyState from '../../components/Shared/EmptyState'; const initialBazaars = [ { @@ -242,17 +243,38 @@ export default function Bazars() { -
- {filtered.map((b) => ( - - ))} -
+ {filtered.length === 0 ? ( + 🏪} + actionButton={ + + } + /> + ) : ( +
+ {filtered.map((b) => ( + + ))} +
+ )} diff --git a/frontend/my-app/src/pages/EventsOffice/ViewEvents.jsx b/frontend/my-app/src/pages/EventsOffice/ViewEvents.jsx index bd9d389..862b073 100644 --- a/frontend/my-app/src/pages/EventsOffice/ViewEvents.jsx +++ b/frontend/my-app/src/pages/EventsOffice/ViewEvents.jsx @@ -7,6 +7,7 @@ import EventCard from "../../components/EventsOffice/EventCard"; import axios from 'axios'; import AuthContext from '../../context/AuthContext'; import Loader from '../../components/Shared/Loader'; +import EmptyState from '../../components/Shared/EmptyState'; @@ -233,13 +234,27 @@ export default function ViewEvents() { -
- {loading ? ( - - ) : error ? ( -

Error: {error}

- ) : ( - filteredEvents.map((evt) => ( + {loading ? ( + + ) : error ? ( +
+
⚠️
+

Error Loading Events

+

{error}

+
+ ) : filteredEvents.length === 0 ? ( + 📅} + /> + ) : ( +
+ {filteredEvents.map((evt) => ( - )) - )} -
+ ))} +
+ )} diff --git a/frontend/my-app/src/pages/EventsOffice/Workshops.jsx b/frontend/my-app/src/pages/EventsOffice/Workshops.jsx index 7faa480..711507b 100644 --- a/frontend/my-app/src/pages/EventsOffice/Workshops.jsx +++ b/frontend/my-app/src/pages/EventsOffice/Workshops.jsx @@ -7,6 +7,7 @@ import Swal from "sweetalert2"; import { StatusPill } from "../../components/Shared/StatusPill"; import axios from 'axios'; import AuthContext from '../../context/AuthContext'; +import EmptyState from '../../components/Shared/EmptyState'; // In-memory sample workshops created by professors const initialWorkshops = [ @@ -269,18 +270,30 @@ export default function Workshops() { -
- {filtered.map((evt) => ( - - ))} -
+ {filtered.length === 0 ? ( + 📚} + /> + ) : ( +
+ {filtered.map((evt) => ( + + ))} +
+ )} diff --git a/frontend/my-app/src/pages/Vendors/VendorBazaars.jsx b/frontend/my-app/src/pages/Vendors/VendorBazaars.jsx index fc43f30..4920093 100644 --- a/frontend/my-app/src/pages/Vendors/VendorBazaars.jsx +++ b/frontend/my-app/src/pages/Vendors/VendorBazaars.jsx @@ -9,6 +9,7 @@ import Swal from 'sweetalert2'; import axios from "axios"; import AuthContext from "../../context/AuthContext"; import Loader from '../../components/Shared/Loader'; +import EmptyState from '../../components/Shared/EmptyState'; const validateEmail = (email) => { // Regex from the HTML5 specification @@ -436,6 +437,12 @@ const fetchBazaars = async () => { {loading ? ( + ) : bazaars.length === 0 ? ( + 🏪} + /> ) : (
{bazaars.map((bazaar) => ( diff --git a/frontend/my-app/src/pages/Vendors/VendorMyEvents.jsx b/frontend/my-app/src/pages/Vendors/VendorMyEvents.jsx index f447791..e1180b4 100644 --- a/frontend/my-app/src/pages/Vendors/VendorMyEvents.jsx +++ b/frontend/my-app/src/pages/Vendors/VendorMyEvents.jsx @@ -8,6 +8,7 @@ import { MyEventCard } from "../../components/Shared/MyEventCard"; import axios from "axios"; import AuthContext from "../../context/AuthContext"; import Loader from '../../components/Shared/Loader'; +import EmptyState from '../../components/Shared/EmptyState'; export default function VendorMyEvents() { const [events, setEvents] = useState({upcomingBazaars: [], upcomingBooths: []}); @@ -96,17 +97,18 @@ export default function VendorMyEvents() { {loading ? ( + ) : view === "accepted" ? ( + ) : ( - <> - {view === "accepted" ? ( - - ) : ( - - )} - + )}
@@ -124,7 +126,7 @@ export default function VendorMyEvents() { ); } -function EventGrid({ title, events }) { +function EventGrid({ title, events, viewType }) { // Check if this is the requests view const isRequestsView = events && typeof events === 'object' && ('bazaarRequests' in events || 'boothRequests' in events); @@ -137,7 +139,11 @@ function EventGrid({ title, events }) {

{title}

{!hasBazaarRequests && !hasBoothRequests ? ( -

No requests found.

+ 📋} + /> ) : (
{hasBazaarRequests && ( @@ -178,7 +184,14 @@ function EventGrid({ title, events }) {

{title}

{eventArray.length === 0 ? ( -

No events found.

+ ✅} + /> ) : (
{eventArray.map((event) => ( diff --git a/frontend/my-app/src/pages/users/Courts.jsx b/frontend/my-app/src/pages/users/Courts.jsx index c15acc7..e004639 100644 --- a/frontend/my-app/src/pages/users/Courts.jsx +++ b/frontend/my-app/src/pages/users/Courts.jsx @@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react'; import UserDashboard from '../../components/users/userDashboard'; import { Calendar, Clock, Users, MapPin } from 'lucide-react'; import Loader from '../../components/Shared/Loader'; +import EmptyState from '../../components/Shared/EmptyState'; const Courts = () => { const [selectedDate, setSelectedDate] = useState(new Date().toISOString().split('T')[0]); @@ -184,25 +185,34 @@ const Courts = () => { {/* Time Slots Column */} -
- {availability.map((slot) => ( - - ))} + {availability.every(slot => !slot.available) ? ( +
+
+ + Fully booked for this date +
+
+ ) : ( +
+ {availability.map((slot) => ( + + ))} +
+ )} ); diff --git a/frontend/my-app/src/pages/users/MyWorkshops.jsx b/frontend/my-app/src/pages/users/MyWorkshops.jsx index b146318..8301393 100644 --- a/frontend/my-app/src/pages/users/MyWorkshops.jsx +++ b/frontend/my-app/src/pages/users/MyWorkshops.jsx @@ -6,6 +6,7 @@ import EventCard from '../../components/EventsOffice/EventCard'; import Swal from 'sweetalert2'; import { Plus, Edit3, Trash2, Eye, Users, Calendar, MapPin, Clock } from 'lucide-react'; import Loader from '../../components/Shared/Loader'; +import EmptyState from '../../components/Shared/EmptyState'; const MyWorkshops = () => { const { token, user } = useContext(AuthContext); @@ -371,31 +372,26 @@ const MyWorkshops = () => {
{filteredWorkshops.length === 0 && ( -
-
-
- - - -
-
-

No Workshops Yet

-

- {searchTerm || statusFilter !== 'all' + - {!searchTerm && statusFilter === 'all' && ( - - )} -

+ } + icon={📚} + actionButton={ + !searchTerm && statusFilter === 'all' ? ( + + ) : null + } + /> )}