feat: PresenceBar component shows who is watching each page
Made-with: Cursor
This commit is contained in:
@@ -7,6 +7,7 @@ import Logo from './components/Logo';
|
||||
import ThemeToggle from './components/ThemeToggle';
|
||||
import InstallPrompt from './components/InstallPrompt';
|
||||
import SafariInstallPrompt from './components/SafariInstallPrompt';
|
||||
import PresenceBar from './components/PresenceBar';
|
||||
import Home from './pages/Home';
|
||||
import Login from './pages/Login';
|
||||
import Picker from './pages/Picker';
|
||||
@@ -156,6 +157,9 @@ function App() {
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
{/* Admin Presence */}
|
||||
<PresenceBar />
|
||||
|
||||
{/* Main Content */}
|
||||
<main className="container mx-auto px-4 py-8 flex-grow">
|
||||
<Routes>
|
||||
|
||||
41
frontend/src/components/PresenceBar.jsx
Normal file
41
frontend/src/components/PresenceBar.jsx
Normal file
@@ -0,0 +1,41 @@
|
||||
import React from 'react';
|
||||
import { usePresence } from '../hooks/usePresence';
|
||||
import { useAuth } from '../context/AuthContext';
|
||||
|
||||
function PresenceBar() {
|
||||
const { isAuthenticated } = useAuth();
|
||||
const { viewers } = usePresence();
|
||||
|
||||
if (!isAuthenticated) return null;
|
||||
|
||||
const otherViewers = viewers.filter(v => v !== 'me');
|
||||
if (otherViewers.length === 0) return null;
|
||||
|
||||
return (
|
||||
<div className="container mx-auto px-2 sm:px-4 pt-3">
|
||||
<div className="bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 px-4 py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<span className="text-xs text-gray-500 dark:text-gray-400 uppercase tracking-wider font-medium flex-shrink-0">
|
||||
who is watching
|
||||
</span>
|
||||
<div className="flex flex-wrap gap-1.5">
|
||||
{viewers.map((name, i) => (
|
||||
<span
|
||||
key={`${name}-${i}`}
|
||||
className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${
|
||||
name === 'me'
|
||||
? 'bg-indigo-100 dark:bg-indigo-900/40 text-indigo-700 dark:text-indigo-300'
|
||||
: 'bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300'
|
||||
}`}
|
||||
>
|
||||
{name}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default PresenceBar;
|
||||
Reference in New Issue
Block a user