export interface ChatMessage {
id: number;
senderId: string;
message: string;
sentAt: number;
}
export type Component
= React.ComponentType
| React.ForwardRefExoticComponent
| React.FC
| keyof React.ReactHTML;
export interface ChatComponents {
ChatMinimized?: Component;
ChatExpanded?: Component;
ChatHeader?: Component;
MessageList?: Component;
MessageRow?: Component;
MessageAvatar?: Component;
MessageBody?: Component;
ChatInput?: Component;
ConnectPrompt?: Component;
WelcomeMessage?: Component;
}
export interface ChatProps {
rtKey: string;
chatName?: string | React.ReactElement;
hideWhenDisconnected?: boolean;
components?: ChatComponents;
}
export interface ChatMinimizedProps {
chatName: string | React.ReactElement;
expandChat: () => void;
}
export interface ChatExpandedProps extends ChatHeaderProps, ChatInputProps, MessageListProps {
ChatHeader: Component;
MessageList: Component;
MessageRow: Component;
MessageAvatar: Component;
MessageBody: Component;
ChatInput: Component;
}
export interface ChatHeaderProps {
chatName: string | React.ReactElement;
minimizeChat: () => void;
}
export interface MessageRowProps extends MessageBodyProps, MessageAvatarProps {
MessageAvatar: Component;
MessageBody: Component;
}
export interface MessageListProps {
messages: ChatMessage[];
MessageRow: Component;
MessageAvatar: Component;
MessageBody: Component;
ConnectPrompt: Component;
WelcomeMessage: Component;
}
export interface MessageAvatarProps {
senderId: string;
isMe: boolean;
}
export interface MessageBodyProps extends Omit {
isMe: boolean;
formatTime?: (ts: number) => string;
}
export interface ChatInputProps {
sendMessage: (message: string) => void;
}