react-together
Version:
A library to seamlessly add real-time multi-user interaction to your React app!
65 lines (64 loc) • 2.24 kB
TypeScript
export interface ChatMessage {
id: number;
senderId: string;
message: string;
sentAt: number;
}
export type Component<P> = React.ComponentType<P> | React.ForwardRefExoticComponent<P> | React.FC<P> | keyof React.ReactHTML;
export interface ChatComponents {
ChatMinimized?: Component<ChatMinimizedProps>;
ChatExpanded?: Component<ChatExpandedProps>;
ChatHeader?: Component<ChatHeaderProps>;
MessageList?: Component<MessageListProps>;
MessageRow?: Component<MessageRowProps>;
MessageAvatar?: Component<MessageAvatarProps>;
MessageBody?: Component<MessageBodyProps>;
ChatInput?: Component<ChatInputProps>;
ConnectPrompt?: Component<unknown>;
WelcomeMessage?: Component<unknown>;
}
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<ChatHeaderProps>;
MessageList: Component<MessageListProps>;
MessageRow: Component<MessageRowProps>;
MessageAvatar: Component<MessageAvatarProps>;
MessageBody: Component<MessageBodyProps>;
ChatInput: Component<ChatInputProps>;
}
export interface ChatHeaderProps {
chatName: string | React.ReactElement;
minimizeChat: () => void;
}
export interface MessageRowProps extends MessageBodyProps, MessageAvatarProps {
MessageAvatar: Component<MessageAvatarProps>;
MessageBody: Component<MessageBodyProps>;
}
export interface MessageListProps {
messages: ChatMessage[];
MessageRow: Component<MessageRowProps>;
MessageAvatar: Component<MessageAvatarProps>;
MessageBody: Component<MessageBodyProps>;
ConnectPrompt: Component<unknown>;
WelcomeMessage: Component<unknown>;
}
export interface MessageAvatarProps {
senderId: string;
isMe: boolean;
}
export interface MessageBodyProps extends Omit<ChatMessage, 'id'> {
isMe: boolean;
formatTime?: (ts: number) => string;
}
export interface ChatInputProps {
sendMessage: (message: string) => void;
}