import React, { useMemo } from 'react'; import { useQuery } from 'convex/react'; import { api } from '../../../../convex/_generated/api'; import { useOnlineUsers } from '../contexts/PresenceContext'; import Tooltip from './Tooltip'; const ChatHeader = ({ channelName, channelType, channelTopic, channelId, onToggleMembers, showMembers, onTogglePinned, serverName, isMobile, onMobileBack, onStartCall, isDMCallActive, onOpenMembersScreen, // Search props searchQuery, onSearchQueryChange, onSearchSubmit, onSearchFocus, onSearchBlur, searchInputRef, searchActive, }) => { const isDM = channelType === 'dm'; const searchPlaceholder = isDM ? 'Search' : `Search ${serverName || 'Server'}`; // Query members on mobile text channels only for online count const shouldQueryMembers = isMobile && !isDM && channelId; const members = useQuery( api.members.getChannelMembers, shouldQueryMembers ? { channelId } : "skip" ) || []; const { resolveStatus } = useOnlineUsers(); const onlineCount = useMemo(() => { if (!shouldQueryMembers) return 0; return members.filter(m => resolveStatus(m.status, m.id) !== 'offline').length; }, [members, resolveStatus, shouldQueryMembers]); const handleSearchKeyDown = (e) => { if (e.key === 'Enter') { e.preventDefault(); onSearchSubmit?.(); } if (e.key === 'Escape') { e.preventDefault(); onSearchBlur?.(); e.target.blur(); } }; return (
{isMobile && onMobileBack && ( )} {isMobile && !isDM ? ( ) : ( <> {isDM ? '@' : '#'} {channelName} {channelTopic && !isDM && !isMobile && ( <>
{channelTopic} )} {isDM && } )}
{!isDM && !isMobile && ( )} {isDM && !isMobile && ( )} {!isDM && !isMobile && ( )} {!isMobile && ( )} {!isMobile && (
onSearchQueryChange?.(e.target.value)} onFocus={onSearchFocus} onKeyDown={handleSearchKeyDown} /> {searchQuery && ( )}
)}
); }; export default ChatHeader;