import { useCallback, useContext, useEffect, useRef, useState } from 'react'; import { useApi } from '../lib/useApi'; import type { IMessage } from './Message'; import NameTextbox from './NameTextbox'; import LoginQR from './LoginQR'; import Totp from '../components/Totp'; import useChannel from '../hooks/useChannel'; import useClientId from '../hooks/useClientId'; import useHomeServer from '../contexts/PersistentState/useHomeServerNative'; import Logout from '../components/Logout'; import { CgHashtag } from 'react-icons/cg'; import Channel from './Channel'; interface IChannel { uid: string; name: string; } interface IUnreads { [uid: string]: number } export default function Channels() { const [channels, setChannels] = useState([]); const [unreads, setUnreads] = useState({}); const { channel, setChannel } = useChannel() const { clientId } = useClientId() const { setHomeServer } = useHomeServer(); const { send } = useApi({ 'channels:list'(data: IChannel[]) { setChannels(data); }, 'channel:add'(channel: IChannel) { setChannels([...channels, channel]); }, 'message:message'(message: IMessage) { if(channel === message.channel) return; setUnreads({ ...unreads, [message.channel]: (unreads[message.channel] ?? 0) + 1, }); }, }, [channels, unreads]); useEffect(() => { // console.log('unreads', unreads); }, [unreads]); useEffect(() => { if(channels.length === 0) { send('channels:list'); } }, [channels]); useEffect(() => { // console.log(channel, channels); if(channels.length === 0) return; if(channel !== null) return; // console.log('this is what setChannel is', setChannel); setChannel(channels[0].uid); }, [channel, channels]); useEffect(() => { if(!channel) return; setUnreads({ ...unreads, [channel]: 0, }); }, [channel]); useEffect(() => { if(clientId === null) return; send('client:get', { clientId }); }, [clientId]); const textbox = useRef(null); const add = useCallback(() => { if(textbox.current === null) return; const name = textbox.current.value; textbox.current.value = ''; send('channel:add', { name }); }, []); return (


{channels.map(c => ( ))} {/*



*/} {/* */} {/* */}
); }