import React, { Dispatch, Key, SetStateAction } from 'react' import classNames from 'classnames' import './ChatList.css' import ChatItem from '../ChatItem/ChatItem' import { IChatListProps, ChatListEvent } from '../type' let list: Dispatch>[] = [] const ChatList: React.FC = props => { const onClick: ChatListEvent = (item, index, event) => { if (props.onClick instanceof Function) props.onClick(item, index, event) } const onContextMenu: ChatListEvent = (item, index, event) => { event.preventDefault() if (props.onContextMenu instanceof Function) props.onContextMenu(item, index, event) } const onAvatarError: ChatListEvent = (item, index, event) => { if (props.onAvatarError instanceof Function) props.onAvatarError(item, index, event) } const setDragStates = (state: Dispatch>) => { list.push(state) } const onDragLeaveMW = (e: React.MouseEvent, id: number | string) => { if (list.length > 0) list.forEach(item => item(false)) props.onDragLeave?.(e, id) } const onExpand: ChatListEvent = (item, index, event) => { if (props.onExpand instanceof Function) props.onExpand(item, index, event) } return (
{props.dataSource.map((x, i: number) => ( <> ) => onAvatarError(x, i, e)} onContextMenu={(e: React.MouseEvent) => onContextMenu(x, i, e)} onClick={(e: React.MouseEvent) => onClick(x, i, e)} onClickMute={(e: React.MouseEvent) => props.onClickMute?.(x, i, e)} onClickVideoCall={(e: React.MouseEvent) => props.onClickVideoCall?.(x, i, e)} onDragOver={props?.onDragOver} onDragEnter={props?.onDragEnter} onDrop={props.onDrop} onDragLeave={onDragLeaveMW} onDragComponent={props.onDragComponent} setDragStates={setDragStates} onExpandItem={(e: React.MouseEvent) => onExpand(x, i, e)} expanded={x.expanded} /> {x.subList && x.subList.length > 0 && ( <> {x.expanded && x.subList.map((sub, j) => ( ) => onAvatarError(sub, j, e)} onContextMenu={(e: React.MouseEvent) => onContextMenu(sub, j, e)} onClick={(e: React.MouseEvent) => onClick(sub, j, e)} onClickMute={(e: React.MouseEvent) => props.onClickMute?.(sub, j, e)} onClickVideoCall={(e: React.MouseEvent) => props.onClickVideoCall?.(sub, j, e)} onDragOver={props?.onDragOver} onDragEnter={props?.onDragEnter} onDrop={props.onDrop} onDragLeave={onDragLeaveMW} onDragComponent={props.onDragComponent} setDragStates={setDragStates} /> ))} )} ))}
) } export default ChatList