2026-03-23 09:57:31 -04:00
|
|
|
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">
|
2026-03-23 10:21:03 -04:00
|
|
|
who's here?
|
2026-03-23 09:57:31 -04:00
|
|
|
</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;
|