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 => (
))}
>
);
}