V0.7.1 New user online and pin features
This commit is contained in:
@@ -29,6 +29,7 @@ export default function Chat() {
|
||||
const toast = useToast();
|
||||
|
||||
const [groups, setGroups] = useState({ publicGroups: [], privateGroups: [] });
|
||||
const [onlineUserIds, setOnlineUserIds] = useState(new Set());
|
||||
const [activeGroupId, setActiveGroupId] = useState(null);
|
||||
const [notifications, setNotifications] = useState([]);
|
||||
const [unreadGroups, setUnreadGroups] = useState(new Map());
|
||||
@@ -205,6 +206,17 @@ export default function Chat() {
|
||||
window.dispatchEvent(new CustomEvent('jama:session-displaced'));
|
||||
};
|
||||
|
||||
// Online presence
|
||||
const handleUserOnline = ({ userId }) => setOnlineUserIds(prev => new Set([...prev, userId]));
|
||||
const handleUserOffline = ({ userId }) => setOnlineUserIds(prev => { const n = new Set(prev); n.delete(userId); return n; });
|
||||
const handleUsersOnline = ({ userIds }) => setOnlineUserIds(new Set(userIds));
|
||||
|
||||
socket.on('user:online', handleUserOnline);
|
||||
socket.on('user:offline', handleUserOffline);
|
||||
socket.on('users:online', handleUsersOnline);
|
||||
// Request current online list on connect
|
||||
socket.emit('users:online');
|
||||
|
||||
socket.on('group:new', handleGroupNew);
|
||||
socket.on('group:deleted', handleGroupDeleted);
|
||||
socket.on('group:updated', handleGroupUpdated);
|
||||
@@ -228,6 +240,9 @@ export default function Chat() {
|
||||
socket.off('group:new', handleGroupNew);
|
||||
socket.off('group:deleted', handleGroupDeleted);
|
||||
socket.off('group:updated', handleGroupUpdated);
|
||||
socket.off('user:online', handleUserOnline);
|
||||
socket.off('user:offline', handleUserOffline);
|
||||
socket.off('users:online', handleUsersOnline);
|
||||
socket.off('connect', handleReconnect);
|
||||
socket.off('session:displaced', handleSessionDisplaced);
|
||||
document.removeEventListener('visibilitychange', handleVisibility);
|
||||
@@ -284,6 +299,7 @@ export default function Chat() {
|
||||
isMobile={isMobile}
|
||||
onAbout={() => setModal('about')}
|
||||
onHelp={() => setModal('help')}
|
||||
onlineUserIds={onlineUserIds}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -293,6 +309,7 @@ export default function Chat() {
|
||||
onBack={isMobile ? () => { setShowSidebar(true); setActiveGroupId(null); } : null}
|
||||
onGroupUpdated={loadGroups}
|
||||
onDirectMessage={(g) => { loadGroups(); selectGroup(g.id); }}
|
||||
onlineUserIds={onlineUserIds}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user