diff --git a/frontend/src/components/EventAdmin.tsx b/frontend/src/components/EventAdmin.tsx
index 1ea3684..ec42f40 100644
--- a/frontend/src/components/EventAdmin.tsx
+++ b/frontend/src/components/EventAdmin.tsx
@@ -455,511 +455,516 @@ const EventAdmin: React.FC = () => {
sx={{
minHeight: '100vh',
width: '100%',
+ position: 'fixed',
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0,
backgroundImage: event?.wallpaper ? `linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url(${event.wallpaper})` : 'url(https://www.rydertech.us/backgrounds/space1.jpg)',
backgroundSize: 'cover',
backgroundPosition: 'center',
backgroundRepeat: 'no-repeat',
backgroundAttachment: 'fixed',
backgroundColor: '#000',
- position: 'relative',
overflowY: 'auto',
- py: 4,
}}
>
-
-
-
-
- {event.title} - Admin
-
-
-
- }
- sx={{
- minWidth: 'fit-content',
- whiteSpace: 'nowrap'
- }}
- >
- Update Info
-
- }
- onClick={() => setManageItemsDialogOpen(true)}
- sx={{
- minWidth: 'fit-content',
- whiteSpace: 'nowrap'
- }}
- >
- Manage Items
-
- }
- onClick={() => setDeleteEventDialogOpen(true)}
- sx={{
- minWidth: 'fit-content',
- whiteSpace: 'nowrap'
- }}
- >
- Delete Event
-
-
-
-
-
-
- Info: {event.description || 'None'}
-
-
- Location: {event.location}
-
-
- Date: {new Date(event.date).toLocaleString()}
-
- {event.rsvp_cutoff_date && (
-
- RSVP cut-off date: {new Date(event.rsvp_cutoff_date).toLocaleString()}
+
+
+
+
+
+ {event.title} - Admin
- )}
-
-
- {/* Add items status section */}
-
-
- Items Status
-
-
-
-
- Still Needed:
-
-
- {neededItems.map((item: string, index: number) => (
-
- ))}
- {neededItems.length === 0 && (
-
- All items have been claimed
-
- )}
-
-
-
-
- Claimed Items:
-
-
- {claimedItems.map((item: string, index: number) => (
-
- ))}
- {claimedItems.length === 0 && (
-
- No items have been claimed yet
-
- )}
-
-
-
-
-
-
- RSVPs ({rsvps.length})
-
-
-
-
-
-
- Name
- Attending
- Guests
- Items Bringing
- Actions
-
-
-
- {rsvps.map((rsvp: RSVP) => (
-
- {rsvp.name}
- {rsvp.attending.charAt(0).toUpperCase() + rsvp.attending.slice(1)}
-
- {rsvp.bringing_guests === 'yes' ?
- `${rsvp.guest_count} (${rsvp.guest_names.replace(/\s+/g, ', ')})` :
- 'No'
- }
-
-
- {(() => {
- let items: string[] = [];
- try {
- if (typeof rsvp.items_bringing === 'string') {
- try {
- const parsed = JSON.parse(rsvp.items_bringing);
- items = Array.isArray(parsed) ? parsed : [];
- } catch (e) {
- console.error('Error parsing items_bringing JSON in table:', e);
- }
- } else if (Array.isArray(rsvp.items_bringing)) {
- items = rsvp.items_bringing;
- }
- } catch (e) {
- console.error('Error processing items in table:', e);
- }
-
- return (
-
- {items.length > 0 ? items.map((item: string, index: number) => (
-
- )) : (
-
- No items
-
- )}
-
- );
- })()}
-
-
- handleEditRsvp(rsvp)}
- sx={{ mr: 1 }}
- >
-
-
- handleDeleteRsvp(rsvp)}
- >
-
-
-
-
- ))}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Info: {event.description || 'None'}
+
+
+ Location: {event.location}
+
+
+ Date: {new Date(event.date).toLocaleString()}
+
+ {event.rsvp_cutoff_date && (
+
+ RSVP cut-off date: {new Date(event.rsvp_cutoff_date).toLocaleString()}
+
+ )}
+
+
+ {/* Add items status section */}
+
+
+ Items Status
+
+
+
+
+ Still Needed:
+
+
+ {neededItems.map((item: string, index: number) => (
+
+ ))}
+ {neededItems.length === 0 && (
+
+ All items have been claimed
+
+ )}
+
+
+
+
+ Claimed Items:
+
+
+ {claimedItems.map((item: string, index: number) => (
+
+ ))}
+ {claimedItems.length === 0 && (
+
+ No items have been claimed yet
+
+ )}
+
+
+
+
+
+
+ RSVPs ({rsvps.length})
+
+
+
+
+
+
+ Name
+ Attending
+ Guests
+ Items Bringing
+ Actions
+
+
+
+ {rsvps.map((rsvp: RSVP) => (
+
+ {rsvp.name}
+ {rsvp.attending.charAt(0).toUpperCase() + rsvp.attending.slice(1)}
+
+ {rsvp.bringing_guests === 'yes' ?
+ `${rsvp.guest_count} (${rsvp.guest_names.replace(/\s+/g, ', ')})` :
+ 'No'
+ }
+
+
+ {(() => {
+ let items: string[] = [];
+ try {
+ if (typeof rsvp.items_bringing === 'string') {
+ try {
+ const parsed = JSON.parse(rsvp.items_bringing);
+ items = Array.isArray(parsed) ? parsed : [];
+ } catch (e) {
+ console.error('Error parsing items_bringing JSON in table:', e);
+ }
+ } else if (Array.isArray(rsvp.items_bringing)) {
+ items = rsvp.items_bringing;
+ }
+ } catch (e) {
+ console.error('Error processing items in table:', e);
+ }
+
+ return (
+
+ {items.length > 0 ? items.map((item: string, index: number) => (
+
+ )) : (
+
+ No items
+
+ )}
+
+ );
+ })()}
+
+
+ handleEditRsvp(rsvp)}
+ sx={{ mr: 1 }}
+ >
+
+
+ handleDeleteRsvp(rsvp)}
+ >
+
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
};
diff --git a/frontend/src/components/EventView.tsx b/frontend/src/components/EventView.tsx
index 88b0a3d..ade0940 100644
--- a/frontend/src/components/EventView.tsx
+++ b/frontend/src/components/EventView.tsx
@@ -137,178 +137,183 @@ const EventView: React.FC = () => {
sx={{
minHeight: '100vh',
width: '100%',
+ position: 'fixed',
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0,
backgroundImage: event?.wallpaper ? `linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url(${event.wallpaper})` : 'url(https://www.rydertech.us/backgrounds/space1.jpg)',
backgroundSize: 'cover',
backgroundPosition: 'center',
backgroundRepeat: 'no-repeat',
backgroundAttachment: 'fixed',
backgroundColor: '#000',
- position: 'relative',
overflowY: 'auto',
- py: 4,
}}
>
-
-
-
-
- {event.title} - RSVPs
-
-
-
-
-
-
-
-
- Info: {event.description || 'None'}
-
-
- Location: {event.location}
-
-
- Date: {new Date(event.date).toLocaleString()}
-
- {event.rsvp_cutoff_date && (
-
- RSVP cut-off date: {new Date(event.rsvp_cutoff_date).toLocaleString()}
+
+
+
+
+
+ {event.title} - RSVPs
- )}
-
-
-
-
- Items Status
-
-
-
-
- Still Needed:
-
-
- {neededItems.map((item: string, index: number) => (
-
- ))}
- {neededItems.length === 0 && (
-
- All items have been claimed
-
- )}
-
+
+
-
+
+
+
+
+ Info: {event.description || 'None'}
+
+
+ Location: {event.location}
+
+
+ Date: {new Date(event.date).toLocaleString()}
+
+ {event.rsvp_cutoff_date && (
- Claimed Items:
+ RSVP cut-off date: {new Date(event.rsvp_cutoff_date).toLocaleString()}
-
- {claimedItems.map((item: string, index: number) => (
-
- ))}
- {claimedItems.length === 0 && (
-
- No items have been claimed yet
-
- )}
+ )}
+
+
+
+
+ Items Status
+
+
+
+
+ Still Needed:
+
+
+ {neededItems.map((item: string, index: number) => (
+
+ ))}
+ {neededItems.length === 0 && (
+
+ All items have been claimed
+
+ )}
+
+
+
+
+ Claimed Items:
+
+
+ {claimedItems.map((item: string, index: number) => (
+
+ ))}
+ {claimedItems.length === 0 && (
+
+ No items have been claimed yet
+
+ )}
+
-
-
- RSVPs ({rsvps.length})
-
+
+ RSVPs ({rsvps.length})
+
-
-
-
-
- Name
- Attending
- Guests
- Items Bringing
-
-
-
- {rsvps.map((rsvp: RSVP) => (
-
- {rsvp.name}
- {rsvp.attending.charAt(0).toUpperCase() + rsvp.attending.slice(1)}
-
- {rsvp.bringing_guests === 'yes' ?
- `${rsvp.guest_count} (${rsvp.guest_names.replace(/\s+/g, ', ')})` :
- 'No'
- }
-
-
-
- {(() => {
- let items: string[] = [];
- try {
- if (typeof rsvp.items_bringing === 'string') {
- try {
- const parsed = JSON.parse(rsvp.items_bringing);
- items = Array.isArray(parsed) ? parsed : [];
- } catch (e) {
- console.error('Error parsing items_bringing JSON in table:', e);
- }
- } else if (Array.isArray(rsvp.items_bringing)) {
- items = rsvp.items_bringing;
- }
- } catch (e) {
- console.error('Error processing items in table:', e);
- }
-
- return items.length > 0 ? items.map((item: string, index: number) => (
-
- )) : (
-
- No items
-
- );
- })()}
-
-
+
+
+
+
+ Name
+ Attending
+ Guests
+ Items Bringing
- ))}
-
-
-
-
-
+
+
+ {rsvps.map((rsvp: RSVP) => (
+
+ {rsvp.name}
+ {rsvp.attending.charAt(0).toUpperCase() + rsvp.attending.slice(1)}
+
+ {rsvp.bringing_guests === 'yes' ?
+ `${rsvp.guest_count} (${rsvp.guest_names.replace(/\s+/g, ', ')})` :
+ 'No'
+ }
+
+
+
+ {(() => {
+ let items: string[] = [];
+ try {
+ if (typeof rsvp.items_bringing === 'string') {
+ try {
+ const parsed = JSON.parse(rsvp.items_bringing);
+ items = Array.isArray(parsed) ? parsed : [];
+ } catch (e) {
+ console.error('Error parsing items_bringing JSON in table:', e);
+ }
+ } else if (Array.isArray(rsvp.items_bringing)) {
+ items = rsvp.items_bringing;
+ }
+ } catch (e) {
+ console.error('Error processing items in table:', e);
+ }
+
+ return items.length > 0 ? items.map((item: string, index: number) => (
+
+ )) : (
+
+ No items
+
+ );
+ })()}
+
+
+
+ ))}
+
+
+
+
+
+
);
};