import { Timed } from 'Player'; import React from 'react'; import { durationFromMs } from 'App/date'; import { filterList } from 'App/utils'; import { CopyButton, Icon, Input } from 'UI'; type SocketMsg = Timed & { channelName: string; data: string; timestamp: number; dir: 'up' | 'down'; messageType: string; }; interface Props { socketMsgList: Array; onClose: () => void; } const lineLength = 40; function WSPanel({ socketMsgList, onClose }: Props) { const [query, setQuery] = React.useState(''); const [list, setList] = React.useState(socketMsgList); const [selectedRow, setSelectedRow] = React.useState<{ msg: SocketMsg, id: number } | null>(null); const onQueryChange = (e: any) => { setQuery(e.target.value); const newList = filterList(socketMsgList, e.target.value, [ 'data', 'messageType', ]); setList(newList); }; return (
{socketMsgList[0].channelName}
Data
Length
Time
{list.map((msg, i) => ( setSelectedRow({ msg, id: i })} isSelected={selectedRow ? selectedRow.id === i : false} /> ))} {selectedRow ? ( setSelectedRow(null)} /> ) : null}
); } function SelectedRow({ msg, onClose, }: { msg: SocketMsg; onClose: () => void; }) { const content = React.useMemo(() => { return JSON.stringify(msg, null, 2); }, []); return (
{msg.messageType}
{msg.data}
); } function MsgDirection({ dir }: { dir: 'up' | 'down' }) { return ( ); } function Row({ msg, onSelect, isSelected }: { msg: SocketMsg; isSelected: boolean; onSelect: () => void }) { return ( <>
{msg.messageType} {msg.data} {msg.data.length > lineLength ? (
{isSelected ? '-' : '+'}
) : null}
{msg.data.length}
{durationFromMs(msg.time, true)}
); } export default WSPanel;