import { useCallback, useContext, useEffect, useRef, useState } from 'react'; import { registerRouter, router, send, unregisterRouter } from '../lib/api'; import { channelContext } from './App'; function useRouter(actions: Function | object, deps: any[]) { const _router = typeof actions === 'object' ? router(actions) : actions; useEffect(() => { registerRouter(_router); return () => { unregisterRouter(_router); }; }, deps); return { send: send, }; } interface IChannel { uid: string; name: string; } function Hashmark() { return #; } export default function Channels() { const [channels, setChannels] = useState([]); const {channel, setChannel} = useContext(channelContext); const { send } = useRouter({ 'channels:list'(data: IChannel[]) { // console.log(data) setChannels(data); }, 'channel:add'(channel: IChannel) { setChannels([...channels, channel]); }, }, [channels]); useEffect(() => { if(channels.length === 0) { send('channels:list'); } }, [channels]); useEffect(() => { if(channels.length === 0) return; if(channel !== null) return; setChannel(channels[0].uid); }, [channel, channels]); 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 => (
{ setChannel(c.uid); }}> {c.name} {}}>Delete
))} ); }