import { GetModeratorRoomInfoMessageComposer, ModerateRoomMessageComposer, ModeratorActionMessageComposer, ModeratorRoomInfoEvent } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useState } from 'react'; import { TryVisitRoom } from '../../../../api'; import { Button, Column, Flex, Text } from '../../../../common'; import { ModToolsOpenRoomChatlogEvent } from '../../../../events/mod-tools/ModToolsOpenRoomChatlogEvent'; import { BatchUpdates, dispatchUiEvent } from '../../../../hooks'; import { CreateMessageHook, SendMessageHook } from '../../../../hooks/messages'; import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../layout'; interface ModToolsRoomViewProps { roomId: number; onCloseClick: () => void; } export const ModToolsRoomView: FC = props => { const { roomId = null, onCloseClick = null } = props; const [ infoRequested, setInfoRequested ] = useState(false); const [ loadedRoomId, setLoadedRoomId ] = useState(null); const [ name, setName ] = useState(null); const [ ownerId, setOwnerId ] = useState(null); const [ ownerName, setOwnerName ] = useState(null); const [ ownerInRoom, setOwnerInRoom ] = useState(false); const [ usersInRoom, setUsersInRoom ] = useState(0); //form data const [ kickUsers, setKickUsers ] = useState(false); const [ lockRoom, setLockRoom ] = useState(false); const [ changeRoomName, setChangeRoomName ] = useState(false); const [ message, setMessage ] = useState(''); const onModtoolRoomInfoEvent = useCallback((event: ModeratorRoomInfoEvent) => { const parser = event.getParser(); if(!parser || parser.data.flatId !== roomId) return; BatchUpdates(() => { setLoadedRoomId(parser.data.flatId); setName(parser.data.room.name); setOwnerId(parser.data.ownerId); setOwnerName(parser.data.ownerName); setOwnerInRoom(parser.data.ownerInRoom); setUsersInRoom(parser.data.userCount); }); }, [ roomId ]); CreateMessageHook(ModeratorRoomInfoEvent, onModtoolRoomInfoEvent); const handleClick = useCallback((action: string, value?: string) => { if(!action) return; switch(action) { case 'alert_only': if(message.trim().length === 0) return; SendMessageHook(new ModeratorActionMessageComposer(ModeratorActionMessageComposer.ACTION_ALERT, message, '')); return; case 'send_message': if(message.trim().length === 0) return; SendMessageHook(new ModeratorActionMessageComposer(ModeratorActionMessageComposer.ACTION_MESSAGE, message, '')); SendMessageHook(new ModerateRoomMessageComposer(roomId, lockRoom ? 1 : 0, changeRoomName ? 1 : 0, kickUsers ? 1 : 0)) return; } }, [ changeRoomName, kickUsers, lockRoom, message, roomId ]); useEffect(() => { if(infoRequested) return; SendMessageHook(new GetModeratorRoomInfoMessageComposer(roomId)); setInfoRequested(true); }, [ roomId, infoRequested, setInfoRequested ]); return ( onCloseClick() } /> Room Owner: { ownerName } Users in room: { usersInRoom } Owner in room: { ownerInRoom ? 'Yes' : 'No' } setKickUsers(event.target.checked) } /> Kick everyone out setLockRoom(event.target.checked) } /> Enable the doorbell setChangeRoomName(event.target.checked) }/> Change room name ); }