import { Button, Col, Row, Spin } from 'antd'; import { FC, useEffect, useState } from 'react'; import ChatModeration from '../../../services/moderation-service'; import styles from './ChatModerationDetailsModal.module.scss'; export type ChatModerationDetailsModalProps = { userId: string; accessToken: string; }; export interface UserDetails { user: User; connectedClients: Client[]; messages: Message[]; } export interface Client { messageCount: number; userAgent: string; connectedAt: Date; geo: string; } export interface Message { id: string; timestamp: Date; user: null; body: string; } export interface User { id: string; displayName: string; displayColor: number; createdAt: Date; previousNames: string[]; scopes: string[]; isBot: boolean; authenticated: boolean; } const removeMessage = async (messageId: string, accessToken: string) => { try { ChatModeration.removeMessage(messageId, accessToken); } catch (e) { console.error(e); } }; const ValueRow = ({ label, value }: { label: string; value: string }) => ( {label} {value} ); const ChatMessageRow = ({ id, body, accessToken, }: { id: string; body: string; accessToken: string; }) => ( {body} ); const ConnectedClient = ({ client }: { client: Client }) => { const { messageCount, userAgent, connectedAt, geo } = client; return (
); }; // eslint-disable-next-line react/prop-types const UserColorBlock = ({ color }) => { const bg = `var(--theme-color-users-${color})`; return ( Color
{color}
); }; export const ChatModerationDetailsModal: FC = ({ userId, accessToken, }) => { const [userDetails, setUserDetails] = useState(null); const [loading, setLoading] = useState(true); const getDetails = async () => { try { const response = await (await fetch(`/api/moderation/chat/user/${userId}`)).json(); setUserDetails(response); setLoading(false); } catch (e) { console.error(e); } }; useEffect(() => { getDetails(); }, []); if (!userDetails) { return null; } const { user, connectedClients, messages } = userDetails; const { displayName, displayColor, createdAt, previousNames, scopes, isBot, authenticated } = user; return (

{displayName}

{scopes.map(scope => ( {scope} ))} {authenticated && Authenticated} {isBot && Bot}

Currently Connected

{connectedClients.length > 0 && ( {connectedClients.map(client => ( ))} )}
{messages.length > 0 && (

Recent Chat Messages

{messages.map(message => ( ))}
)}
); };