/* @component-map * App — Main container, handles auth, tab switching, layout * Header — Top bar with logo, live indicator, user pill * TabBar — Tab navigation (Received, Sent, New) * SendSelfie — Camera capture and send form * SelfieList — Displays received or sent selfies with pagination * SelfieCard — Individual selfie card display * Toast — Toast notification system * @end-component-map */ import { useAuth, useCollection } from '@deplixo/sdk'; import { Header } from './components/Header.jsx'; import { TabBar } from './components/TabBar.jsx'; import { SendSelfie } from './components/SendSelfie.jsx'; import { SelfieList } from './components/SelfieList.jsx'; import { useCallback, useEffect, useRef, useState } from 'react'; import { Toast } from './components/Toast.jsx'; function App() { const { user, loading: authLoading, logout } = useAuth(); const { items, loading: dataLoading, add } = useCollection('selfies'); const [tab, setTab] = useState('received'); const [toast, setToast] = useState(null); const showToast = useCallback((message, type = 'success') => { setToast({ message, type }); setTimeout(() => setToast(null), 3000); }, []); if (authLoading || !user) { return (
Loading SnapDrop...
); } const myEmail = user.email.toLowerCase(); const received = items.filter(e => e.value.recipientEmail?.toLowerCase() === myEmail && e.value.senderEmail?.toLowerCase() !== myEmail); const sent = items.filter(e => e.value.senderEmail?.toLowerCase() === myEmail); return (
{tab === 'send' && ( setTab('sent')} /> )} {tab === 'received' && ( )} {tab === 'sent' && ( )}
); } ReactDOM.createRoot(document.getElementById("root")).render();