import { FlatControllerAddedEvent, FlatControllerRemovedEvent, FlatControllersEvent, RemoveAllRightsMessageComposer, RoomTakeRightsComposer, RoomUsersWithRightsComposer } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; import { IRoomData, LocalizeText, SendMessageComposer } from '../../../../api'; import { Button, Column, Flex, Grid, Text, UserProfileIconView } from '../../../../common'; import { useMessageEvent } from '../../../../hooks'; interface NavigatorRoomSettingsTabViewProps { roomData: IRoomData; handleChange: (field: string, value: string | number | boolean) => void; } export const NavigatorRoomSettingsRightsTabView: FC = props => { const { roomData = null } = props; const [ usersWithRights, setUsersWithRights ] = useState>(new Map()); useMessageEvent(FlatControllersEvent, event => { const parser = event.getParser(); if(!roomData || (roomData.roomId !== parser.roomId)) return; setUsersWithRights(parser.users); }); useMessageEvent(FlatControllerAddedEvent, event => { const parser = event.getParser(); if(!roomData || (roomData.roomId !== parser.roomId)) return; setUsersWithRights(prevValue => { const newValue = new Map(prevValue); newValue.set(parser.data.userId, parser.data.userName); return newValue; }); }); useMessageEvent(FlatControllerRemovedEvent, event => { const parser = event.getParser(); if(!roomData || (roomData.roomId !== parser.roomId)) return; setUsersWithRights(prevValue => { const newValue = new Map(prevValue); newValue.delete(parser.userId); return newValue; }); }); useEffect(() => { SendMessageComposer(new RoomUsersWithRightsComposer(roomData.roomId)); }, [ roomData.roomId ]); return ( { LocalizeText('navigator.flatctrls.userswithrights', [ 'displayed', 'total' ], [ usersWithRights.size.toString(), usersWithRights.size.toString() ]) } { Array.from(usersWithRights.entries()).map(([ id, name ], index) => { return ( SendMessageComposer(new RoomTakeRightsComposer(id)) }> { name } ); }) } ); };