/* @component-map
* App — Main container, layout with left/right panels, navigation, toast system
* NavBar — Top navigation bar with logo, notifications, share, user chip
* LeftPanel — Hero section, stats, next up, game library, leaderboard
* RightPanel — Calendar, upcoming events, food/potluck sidebar
* HostModal — Modal for hosting a new game night
* RsvpModal — Modal for responding to pending invitations
* AvatarModal — Modal for customizing user profile/avatar
* NotifModal — Modal for viewing notifications
* EventDetailModal — Modal for viewing event details, RSVP, food claims, post-game notes
* ShareModal — Modal for sharing invite link
* AvatarSVG — Renders an SVG avatar from config
* @end-component-map */
import { useCollection, useAuth, useNotifications, useBroadcast } from '@deplixo/sdk';
import { NavBar } from './components/NavBar.jsx';
import { LeftPanel } from './components/LeftPanel.jsx';
import { RightPanel } from './components/RightPanel.jsx';
import { HostModal } from './components/HostModal.jsx';
import { RsvpModal } from './components/RsvpModal.jsx';
import { AvatarModal } from './components/AvatarModal.jsx';
import { NotifModal } from './components/NotifModal.jsx';
import { EventDetailModal } from './components/EventDetailModal.jsx';
import { createContext, useCallback, useContext, useEffect, useState } from 'react';
import { ShareModal } from './components/ShareModal.jsx';
export const AppContext = createContext();
function App() {
const { user, loading } = useAuth();
const [activeModal, setActiveModal] = useState(null);
const [activeEventId, setActiveEventId] = useState(null);
const [toast, setToast] = useState('');
useEffect(() => {
if (!loading && !user) {
window.location.href = '/login';
}
}, [loading, user]);
const showToast = useCallback((msg) => {
setToast(msg);
setTimeout(() => setToast(''), 3500);
}, []);
const openModal = useCallback((name) => setActiveModal(name), []);
const closeModal = useCallback(() => setActiveModal(null), []);
const ctx = { user, activeModal, openModal, closeModal, showToast, activeEventId, setActiveEventId };
return (
{activeModal === 'host' && }
{activeModal === 'rsvp' && }
{activeModal === 'avatar' && }
{activeModal === 'notif' && }
{activeModal === 'eventDetail' && }
{activeModal === 'share' && }
{toast}
);
}
ReactDOM.createRoot(document.getElementById("root")).render();