mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-20 23:46:19 +00:00
92 lines
3.5 KiB
TypeScript
92 lines
3.5 KiB
TypeScript
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<NavigatorRoomSettingsTabViewProps> = props =>
|
|
{
|
|
const { roomData = null } = props;
|
|
const [ usersWithRights, setUsersWithRights ] = useState<Map<number, string>>(new Map());
|
|
|
|
useMessageEvent<FlatControllersEvent>(FlatControllersEvent, event =>
|
|
{
|
|
const parser = event.getParser();
|
|
|
|
if(!roomData || (roomData.roomId !== parser.roomId)) return;
|
|
|
|
setUsersWithRights(parser.users);
|
|
});
|
|
|
|
useMessageEvent<FlatControllerAddedEvent>(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>(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 (
|
|
<Grid>
|
|
<Column size={ 6 }>
|
|
<Text small bold>
|
|
{ LocalizeText('navigator.flatctrls.userswithrights', [ 'displayed', 'total' ], [ usersWithRights.size.toString(), usersWithRights.size.toString() ]) }
|
|
</Text>
|
|
<Flex className="bg-white rounded list-container p-2" overflow="hidden">
|
|
<Column fullWidth gap={ 1 } overflow="auto">
|
|
{ Array.from(usersWithRights.entries()).map(([ id, name ], index) =>
|
|
{
|
|
return (
|
|
<Flex key={ index } shrink alignItems="center" gap={ 1 } overflow="hidden">
|
|
<UserProfileIconView userName={ name } />
|
|
<Text small grow pointer onClick={ event => SendMessageComposer(new RoomTakeRightsComposer(id)) }> { name }</Text>
|
|
</Flex>
|
|
);
|
|
}) }
|
|
</Column>
|
|
</Flex>
|
|
</Column>
|
|
<Column justifyContent="end" size={ 6 }>
|
|
<Button disabled={ !usersWithRights.size } variant="danger" onClick={ event => SendMessageComposer(new RemoveAllRightsMessageComposer(roomData.roomId)) } >
|
|
{ LocalizeText('navigator.flatctrls.clear') }
|
|
</Button>
|
|
</Column>
|
|
</Grid>
|
|
);
|
|
};
|