mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-19 15:06:20 +00:00
style(navigator): unify room-settings tabs with section cards
Introduce a reusable NavigatorRoomSettingsSectionView card (rounded bg-gray-100 panel with a bold-small title) and apply it across the Access, VIP/Chat, Moderation and Rights tabs so every room-settings screen matches the Base and Misc tab styling. Pure visual restyle — handleChange wiring, events, composers and validations are unchanged.
This commit is contained in:
@@ -2,6 +2,7 @@ import { RoomDataParser } from '@nitrots/nitro-renderer';
|
|||||||
import { FC, useEffect, useState } from 'react';
|
import { FC, useEffect, useState } from 'react';
|
||||||
import { IRoomData, LocalizeText } from '../../../../api';
|
import { IRoomData, LocalizeText } from '../../../../api';
|
||||||
import { Column, Flex, Text } from '../../../../common';
|
import { Column, Flex, Text } from '../../../../common';
|
||||||
|
import { NavigatorRoomSettingsSectionView } from './NavigatorRoomSettingsSectionView';
|
||||||
|
|
||||||
interface NavigatorRoomSettingsTabViewProps
|
interface NavigatorRoomSettingsTabViewProps
|
||||||
{
|
{
|
||||||
@@ -36,9 +37,8 @@ export const NavigatorRoomSettingsAccessTabView: FC<NavigatorRoomSettingsTabView
|
|||||||
<Text bold>{ LocalizeText('navigator.roomsettings.roomaccess.caption') }</Text>
|
<Text bold>{ LocalizeText('navigator.roomsettings.roomaccess.caption') }</Text>
|
||||||
<Text>{ LocalizeText('navigator.roomsettings.roomaccess.info') }</Text>
|
<Text>{ LocalizeText('navigator.roomsettings.roomaccess.info') }</Text>
|
||||||
</Column>
|
</Column>
|
||||||
<Column overflow="auto">
|
<Column overflow="auto" gap={ 2 }>
|
||||||
<Column gap={ 1 }>
|
<NavigatorRoomSettingsSectionView title={ LocalizeText('navigator.roomsettings.doormode') } gap={ 1 }>
|
||||||
<Text bold>{ LocalizeText('navigator.roomsettings.doormode') }</Text>
|
|
||||||
<Flex alignItems="center" gap={ 1 }>
|
<Flex alignItems="center" gap={ 1 }>
|
||||||
<input className="form-check-input" type="radio" name="lockState" checked={ (roomData.lockState === RoomDataParser.OPEN_STATE) && !isTryingPassword } onChange={ event => handleChange('lock_state', RoomDataParser.OPEN_STATE) } />
|
<input className="form-check-input" type="radio" name="lockState" checked={ (roomData.lockState === RoomDataParser.OPEN_STATE) && !isTryingPassword } onChange={ event => handleChange('lock_state', RoomDataParser.OPEN_STATE) } />
|
||||||
<Text>{ LocalizeText('navigator.roomsettings.doormode.open') }</Text>
|
<Text>{ LocalizeText('navigator.roomsettings.doormode.open') }</Text>
|
||||||
@@ -70,9 +70,8 @@ export const NavigatorRoomSettingsAccessTabView: FC<NavigatorRoomSettingsTabView
|
|||||||
</Text> }
|
</Text> }
|
||||||
</Column> }
|
</Column> }
|
||||||
</Flex>
|
</Flex>
|
||||||
</Column>
|
</NavigatorRoomSettingsSectionView>
|
||||||
<Column gap={ 1 }>
|
<NavigatorRoomSettingsSectionView title={ LocalizeText('navigator.roomsettings.pets') } gap={ 1 }>
|
||||||
<Text bold>{ LocalizeText('navigator.roomsettings.pets') }</Text>
|
|
||||||
<Flex alignItems="center" gap={ 1 }>
|
<Flex alignItems="center" gap={ 1 }>
|
||||||
<input className="form-check-input" type="checkbox" checked={ roomData.allowPets } onChange={ event => handleChange('allow_pets', event.target.checked) } />
|
<input className="form-check-input" type="checkbox" checked={ roomData.allowPets } onChange={ event => handleChange('allow_pets', event.target.checked) } />
|
||||||
<Text>{ LocalizeText('navigator.roomsettings.allowpets') }</Text>
|
<Text>{ LocalizeText('navigator.roomsettings.allowpets') }</Text>
|
||||||
@@ -81,7 +80,7 @@ export const NavigatorRoomSettingsAccessTabView: FC<NavigatorRoomSettingsTabView
|
|||||||
<input className="form-check-input" type="checkbox" checked={ roomData.allowPetsEat } onChange={ event => handleChange('allow_pets_eat', event.target.checked) } />
|
<input className="form-check-input" type="checkbox" checked={ roomData.allowPetsEat } onChange={ event => handleChange('allow_pets_eat', event.target.checked) } />
|
||||||
<Text>{ LocalizeText('navigator.roomsettings.allowfoodconsume') }</Text>
|
<Text>{ LocalizeText('navigator.roomsettings.allowfoodconsume') }</Text>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Column>
|
</NavigatorRoomSettingsSectionView>
|
||||||
</Column>
|
</Column>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { FC, useEffect, useState } from 'react';
|
|||||||
import { IRoomData, LocalizeText, SendMessageComposer } from '../../../../api';
|
import { IRoomData, LocalizeText, SendMessageComposer } from '../../../../api';
|
||||||
import { Button, Column, Flex, Grid, Text, UserProfileIconView } from '../../../../common';
|
import { Button, Column, Flex, Grid, Text, UserProfileIconView } from '../../../../common';
|
||||||
import { useMessageEvent } from '../../../../hooks';
|
import { useMessageEvent } from '../../../../hooks';
|
||||||
|
import { NavigatorRoomSettingsSectionView } from './NavigatorRoomSettingsSectionView';
|
||||||
|
|
||||||
interface NavigatorRoomSettingsTabViewProps
|
interface NavigatorRoomSettingsTabViewProps
|
||||||
{
|
{
|
||||||
@@ -51,28 +52,29 @@ export const NavigatorRoomSettingsModTabView: FC<NavigatorRoomSettingsTabViewPro
|
|||||||
return (
|
return (
|
||||||
<Grid overflow="auto">
|
<Grid overflow="auto">
|
||||||
<Column size={ 6 }>
|
<Column size={ 6 }>
|
||||||
<Text bold>{ LocalizeText('navigator.roomsettings.moderation.banned.users') } ({ bannedUsers.length })</Text>
|
<NavigatorRoomSettingsSectionView title={ `${ LocalizeText('navigator.roomsettings.moderation.banned.users') } (${ bannedUsers.length })` } gap={ 1 } className="h-full">
|
||||||
<Flex overflow="hidden" className="nitro-card-panel list-container p-2">
|
<Flex overflow="hidden" className="nitro-card-panel list-container p-2">
|
||||||
<Column fullWidth overflow="auto" gap={ 1 }>
|
<Column fullWidth overflow="auto" gap={ 1 }>
|
||||||
{ bannedUsers && (bannedUsers.length > 0) && bannedUsers.map((user, index) =>
|
{ bannedUsers && (bannedUsers.length > 0) && bannedUsers.map((user, index) =>
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
<Flex key={ index } shrink alignItems="center" gap={ 1 } overflow="hidden">
|
<Flex key={ index } shrink alignItems="center" gap={ 1 } overflow="hidden">
|
||||||
<UserProfileIconView userId={ user.userId } />
|
<UserProfileIconView userId={ user.userId } />
|
||||||
<Text pointer grow onClick={ event => setSelectedUserId(user.userId) }> { user.userName }</Text>
|
<Text pointer grow onClick={ event => setSelectedUserId(user.userId) }> { user.userName }</Text>
|
||||||
</Flex>
|
</Flex>
|
||||||
);
|
);
|
||||||
}) }
|
}) }
|
||||||
</Column>
|
</Column>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Button disabled={ (selectedUserId <= 0) } onClick={ event => unBanUser(selectedUserId) }>
|
<Button disabled={ (selectedUserId <= 0) } onClick={ event => unBanUser(selectedUserId) }>
|
||||||
{ LocalizeText('navigator.roomsettings.moderation.unban') } { selectedUserId > 0 && bannedUsers.find(user => (user.userId === selectedUserId))?.userName }
|
{ LocalizeText('navigator.roomsettings.moderation.unban') } { selectedUserId > 0 && bannedUsers.find(user => (user.userId === selectedUserId))?.userName }
|
||||||
</Button>
|
</Button>
|
||||||
|
</NavigatorRoomSettingsSectionView>
|
||||||
</Column>
|
</Column>
|
||||||
<Column size={ 6 }>
|
<Column size={ 6 }>
|
||||||
<Column gap={ 1 }>
|
<NavigatorRoomSettingsSectionView title={ LocalizeText('navigator.roomsettings.moderation') } gap={ 2 } className="h-full">
|
||||||
<Text bold>{ LocalizeText('navigator.roomsettings.moderation.mute.header') }</Text>
|
<Column gap={ 1 }>
|
||||||
<Flex alignItems="center" gap={ 1 }>
|
<Text bold small>{ LocalizeText('navigator.roomsettings.moderation.mute.header') }</Text>
|
||||||
<select className="form-select form-select-sm" value={ roomData.moderationSettings.allowMute } onChange={ event => handleChange('moderation_mute', event.target.value) }>
|
<select className="form-select form-select-sm" value={ roomData.moderationSettings.allowMute } onChange={ event => handleChange('moderation_mute', event.target.value) }>
|
||||||
<option value={ RoomModerationSettings.MODERATION_LEVEL_NONE }>
|
<option value={ RoomModerationSettings.MODERATION_LEVEL_NONE }>
|
||||||
{ LocalizeText('navigator.roomsettings.moderation.none') }
|
{ LocalizeText('navigator.roomsettings.moderation.none') }
|
||||||
@@ -81,11 +83,9 @@ export const NavigatorRoomSettingsModTabView: FC<NavigatorRoomSettingsTabViewPro
|
|||||||
{ LocalizeText('navigator.roomsettings.moderation.rights') }
|
{ LocalizeText('navigator.roomsettings.moderation.rights') }
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</Flex>
|
</Column>
|
||||||
</Column>
|
<Column gap={ 1 }>
|
||||||
<Column gap={ 1 }>
|
<Text bold small>{ LocalizeText('navigator.roomsettings.moderation.kick.header') }</Text>
|
||||||
<Text bold>{ LocalizeText('navigator.roomsettings.moderation.kick.header') }</Text>
|
|
||||||
<Flex alignItems="center" gap={ 1 }>
|
|
||||||
<select className="form-select form-select-sm" value={ roomData.moderationSettings.allowKick } onChange={ event => handleChange('moderation_kick', event.target.value) }>
|
<select className="form-select form-select-sm" value={ roomData.moderationSettings.allowKick } onChange={ event => handleChange('moderation_kick', event.target.value) }>
|
||||||
<option value={ RoomModerationSettings.MODERATION_LEVEL_NONE }>
|
<option value={ RoomModerationSettings.MODERATION_LEVEL_NONE }>
|
||||||
{ LocalizeText('navigator.roomsettings.moderation.none') }
|
{ LocalizeText('navigator.roomsettings.moderation.none') }
|
||||||
@@ -97,11 +97,9 @@ export const NavigatorRoomSettingsModTabView: FC<NavigatorRoomSettingsTabViewPro
|
|||||||
{ LocalizeText('navigator.roomsettings.moderation.all') }
|
{ LocalizeText('navigator.roomsettings.moderation.all') }
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</Flex>
|
</Column>
|
||||||
</Column>
|
<Column gap={ 1 }>
|
||||||
<Column gap={ 1 }>
|
<Text bold small>{ LocalizeText('navigator.roomsettings.moderation.ban.header') }</Text>
|
||||||
<Text bold>{ LocalizeText('navigator.roomsettings.moderation.ban.header') }</Text>
|
|
||||||
<Flex alignItems="center" gap={ 1 }>
|
|
||||||
<select className="form-select form-select-sm" value={ roomData.moderationSettings.allowBan } onChange={ event => handleChange('moderation_ban', event.target.value) }>
|
<select className="form-select form-select-sm" value={ roomData.moderationSettings.allowBan } onChange={ event => handleChange('moderation_ban', event.target.value) }>
|
||||||
<option value={ RoomModerationSettings.MODERATION_LEVEL_NONE }>
|
<option value={ RoomModerationSettings.MODERATION_LEVEL_NONE }>
|
||||||
{ LocalizeText('navigator.roomsettings.moderation.none') }
|
{ LocalizeText('navigator.roomsettings.moderation.none') }
|
||||||
@@ -110,8 +108,8 @@ export const NavigatorRoomSettingsModTabView: FC<NavigatorRoomSettingsTabViewPro
|
|||||||
{ LocalizeText('navigator.roomsettings.moderation.rights') }
|
{ LocalizeText('navigator.roomsettings.moderation.rights') }
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</Flex>
|
</Column>
|
||||||
</Column>
|
</NavigatorRoomSettingsSectionView>
|
||||||
</Column>
|
</Column>
|
||||||
</Grid>
|
</Grid>
|
||||||
);
|
);
|
||||||
|
|||||||
+51
-52
@@ -3,6 +3,7 @@ import { FC, useEffect, useRef, useState } from 'react';
|
|||||||
import { IRoomData, LocalizeText, SendMessageComposer } from '../../../../api';
|
import { IRoomData, LocalizeText, SendMessageComposer } from '../../../../api';
|
||||||
import { Button, Column, Flex, Grid, Text, UserProfileIconView } from '../../../../common';
|
import { Button, Column, Flex, Grid, Text, UserProfileIconView } from '../../../../common';
|
||||||
import { useFriends, useMessageEvent } from '../../../../hooks';
|
import { useFriends, useMessageEvent } from '../../../../hooks';
|
||||||
|
import { NavigatorRoomSettingsSectionView } from './NavigatorRoomSettingsSectionView';
|
||||||
|
|
||||||
interface NavigatorRoomSettingsTabViewProps
|
interface NavigatorRoomSettingsTabViewProps
|
||||||
{
|
{
|
||||||
@@ -105,74 +106,72 @@ export const NavigatorRoomSettingsRightsTabView: FC<NavigatorRoomSettingsTabView
|
|||||||
return (
|
return (
|
||||||
<Grid>
|
<Grid>
|
||||||
<Column size={ 6 }>
|
<Column size={ 6 }>
|
||||||
<Text bold>
|
<NavigatorRoomSettingsSectionView gap={ 1 } className="h-full"
|
||||||
{ LocalizeText(
|
title={ LocalizeText(
|
||||||
'navigator.flatctrls.userswithrights',
|
'navigator.flatctrls.userswithrights',
|
||||||
[ 'displayed', 'total' ],
|
[ 'displayed', 'total' ],
|
||||||
[
|
[
|
||||||
filteredUsersWithRights.size.toString(),
|
filteredUsersWithRights.size.toString(),
|
||||||
filteredUsersWithRights.size.toString()
|
filteredUsersWithRights.size.toString()
|
||||||
]
|
]
|
||||||
) }
|
) }>
|
||||||
</Text>
|
<Flex overflow="hidden" className="nitro-card-panel p-2 list-container">
|
||||||
|
<Column fullWidth overflow="auto" gap={ 1 }>
|
||||||
|
{ Array.from(filteredUsersWithRights.entries()).map(([ id, name ], index) =>
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<Flex key={ `${id}-${index}` } shrink alignItems="center" gap={ 1 } overflow="hidden">
|
||||||
|
<UserProfileIconView userId={ id } />
|
||||||
|
<Text
|
||||||
|
pointer
|
||||||
|
grow
|
||||||
|
onClick={ () => guardedSend(`take_${id}`, new RoomTakeRightsComposer(id)) }>
|
||||||
|
{ name }
|
||||||
|
</Text>
|
||||||
|
</Flex>
|
||||||
|
);
|
||||||
|
}) }
|
||||||
|
</Column>
|
||||||
|
</Flex>
|
||||||
|
|
||||||
<Flex overflow="hidden" className="nitro-card-panel p-2 list-container">
|
<Button
|
||||||
<Column fullWidth overflow="auto" gap={ 1 }>
|
variant="danger"
|
||||||
{ Array.from(filteredUsersWithRights.entries()).map(([ id, name ], index) =>
|
disabled={ !filteredUsersWithRights.size }
|
||||||
{
|
onClick={ () => roomData && guardedSend('removeAll', new RemoveAllRightsMessageComposer(roomData.roomId)) }>
|
||||||
return (
|
{ LocalizeText('navigator.flatctrls.clear') }
|
||||||
<Flex key={ `${id}-${index}` } shrink alignItems="center" gap={ 1 } overflow="hidden">
|
</Button>
|
||||||
<UserProfileIconView userId={ id } />
|
</NavigatorRoomSettingsSectionView>
|
||||||
<Text
|
|
||||||
pointer
|
|
||||||
grow
|
|
||||||
onClick={ () => guardedSend(`take_${id}`, new RoomTakeRightsComposer(id)) }>
|
|
||||||
{ name }
|
|
||||||
</Text>
|
|
||||||
</Flex>
|
|
||||||
);
|
|
||||||
}) }
|
|
||||||
</Column>
|
|
||||||
</Flex>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
variant="danger"
|
|
||||||
disabled={ !filteredUsersWithRights.size }
|
|
||||||
onClick={ () => roomData && guardedSend('removeAll', new RemoveAllRightsMessageComposer(roomData.roomId)) }>
|
|
||||||
{ LocalizeText('navigator.flatctrls.clear') }
|
|
||||||
</Button>
|
|
||||||
</Column>
|
</Column>
|
||||||
|
|
||||||
<Column size={ 6 }>
|
<Column size={ 6 }>
|
||||||
<Text bold>
|
<NavigatorRoomSettingsSectionView gap={ 1 } className="h-full"
|
||||||
{ LocalizeText(
|
title={ LocalizeText(
|
||||||
'navigator.flatctrls.friends',
|
'navigator.flatctrls.friends',
|
||||||
[ 'displayed', 'total' ],
|
[ 'displayed', 'total' ],
|
||||||
[
|
[
|
||||||
friendsWithoutRights.length.toString(),
|
friendsWithoutRights.length.toString(),
|
||||||
allFriends.length.toString()
|
allFriends.length.toString()
|
||||||
]
|
]
|
||||||
) }
|
) }>
|
||||||
</Text>
|
<Flex overflow="hidden" className="nitro-card-panel p-2 list-container">
|
||||||
|
<Column fullWidth overflow="auto" gap={ 1 }>
|
||||||
<Flex overflow="hidden" className="nitro-card-panel p-2 list-container">
|
{ friendsWithoutRights.map((friend, index) =>
|
||||||
<Column fullWidth overflow="auto" gap={ 1 }>
|
{
|
||||||
{ friendsWithoutRights.map((friend, index) =>
|
return (
|
||||||
{
|
<Flex key={ `${friend.id}-${index}` } shrink alignItems="center" gap={ 1 } overflow="hidden">
|
||||||
return (
|
<UserProfileIconView userId={ friend.id } />
|
||||||
<Flex key={ `${friend.id}-${index}` } shrink alignItems="center" gap={ 1 } overflow="hidden">
|
<Text
|
||||||
<UserProfileIconView userId={ friend.id } />
|
pointer
|
||||||
<Text
|
grow
|
||||||
pointer
|
onClick={ () => guardedSend(`give_${friend.id}`, new RoomGiveRightsComposer(friend.id)) }>
|
||||||
grow
|
{ friend.name }
|
||||||
onClick={ () => guardedSend(`give_${friend.id}`, new RoomGiveRightsComposer(friend.id)) }>
|
</Text>
|
||||||
{ friend.name }
|
</Flex>
|
||||||
</Text>
|
);
|
||||||
</Flex>
|
}) }
|
||||||
);
|
</Column>
|
||||||
}) }
|
</Flex>
|
||||||
</Column>
|
</NavigatorRoomSettingsSectionView>
|
||||||
</Flex>
|
|
||||||
</Column>
|
</Column>
|
||||||
</Grid>
|
</Grid>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import { FC, ReactNode } from 'react';
|
||||||
|
import { Column, Text } from '../../../../common';
|
||||||
|
|
||||||
|
interface NavigatorRoomSettingsSectionViewProps
|
||||||
|
{
|
||||||
|
title?: string;
|
||||||
|
gap?: 1 | 2 | 3;
|
||||||
|
className?: string;
|
||||||
|
children: ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const NavigatorRoomSettingsSectionView: FC<NavigatorRoomSettingsSectionViewProps> = props =>
|
||||||
|
{
|
||||||
|
const { title = null, gap = 2, className = '', children = null } = props;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Column gap={ gap } className={ `rounded bg-gray-100 p-3 ${ className }`.trim() }>
|
||||||
|
{ title && <Text bold small>{ title }</Text> }
|
||||||
|
{ children }
|
||||||
|
</Column>
|
||||||
|
);
|
||||||
|
};
|
||||||
+43
-40
@@ -3,6 +3,7 @@ import { FC, useEffect, useState } from 'react';
|
|||||||
import { GetClubMemberLevel, IRoomData, LocalizeText } from '../../../../api';
|
import { GetClubMemberLevel, IRoomData, LocalizeText } from '../../../../api';
|
||||||
import { Column, Grid, Text } from '../../../../common';
|
import { Column, Grid, Text } from '../../../../common';
|
||||||
import { NitroInput } from '../../../../layout';
|
import { NitroInput } from '../../../../layout';
|
||||||
|
import { NavigatorRoomSettingsSectionView } from './NavigatorRoomSettingsSectionView';
|
||||||
|
|
||||||
interface NavigatorRoomSettingsTabViewProps
|
interface NavigatorRoomSettingsTabViewProps
|
||||||
{
|
{
|
||||||
@@ -29,48 +30,50 @@ export const NavigatorRoomSettingsVipChatTabView: FC<NavigatorRoomSettingsTabVie
|
|||||||
</div>
|
</div>
|
||||||
<Grid className={ !isHC ? 'opacity-50 pointer-events-none' : '' } overflow="auto">
|
<Grid className={ !isHC ? 'opacity-50 pointer-events-none' : '' } overflow="auto">
|
||||||
<Column gap={ 1 } size={ 6 }>
|
<Column gap={ 1 } size={ 6 }>
|
||||||
<Text small bold>{ LocalizeText('navigator.roomsettings.chat_settings') }</Text>
|
<NavigatorRoomSettingsSectionView title={ LocalizeText('navigator.roomsettings.chat_settings') } gap={ 1 } className="h-full">
|
||||||
<Text small>{ LocalizeText('navigator.roomsettings.chat_settings.info') }</Text>
|
<Text small>{ LocalizeText('navigator.roomsettings.chat_settings.info') }</Text>
|
||||||
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.chatSettings.mode } onChange={ event => handleChange('bubble_mode', event.target.value) }>
|
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.chatSettings.mode } onChange={ event => handleChange('bubble_mode', event.target.value) }>
|
||||||
<option value={ RoomChatSettings.CHAT_MODE_FREE_FLOW }>{ LocalizeText('navigator.roomsettings.chat.mode.free.flow') }</option>
|
<option value={ RoomChatSettings.CHAT_MODE_FREE_FLOW }>{ LocalizeText('navigator.roomsettings.chat.mode.free.flow') }</option>
|
||||||
<option value={ RoomChatSettings.CHAT_MODE_LINE_BY_LINE }>{ LocalizeText('navigator.roomsettings.chat.mode.line.by.line') }</option>
|
<option value={ RoomChatSettings.CHAT_MODE_LINE_BY_LINE }>{ LocalizeText('navigator.roomsettings.chat.mode.line.by.line') }</option>
|
||||||
</select>
|
</select>
|
||||||
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.chatSettings.weight } onChange={ event => handleChange('chat_weight', event.target.value) }>
|
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.chatSettings.weight } onChange={ event => handleChange('chat_weight', event.target.value) }>
|
||||||
<option value={ RoomChatSettings.CHAT_BUBBLE_WIDTH_NORMAL }>{ LocalizeText('navigator.roomsettings.chat.bubbles.width.normal') }</option>
|
<option value={ RoomChatSettings.CHAT_BUBBLE_WIDTH_NORMAL }>{ LocalizeText('navigator.roomsettings.chat.bubbles.width.normal') }</option>
|
||||||
<option value={ RoomChatSettings.CHAT_BUBBLE_WIDTH_THIN }>{ LocalizeText('navigator.roomsettings.chat.bubbles.width.thin') }</option>
|
<option value={ RoomChatSettings.CHAT_BUBBLE_WIDTH_THIN }>{ LocalizeText('navigator.roomsettings.chat.bubbles.width.thin') }</option>
|
||||||
<option value={ RoomChatSettings.CHAT_BUBBLE_WIDTH_WIDE }>{ LocalizeText('navigator.roomsettings.chat.bubbles.width.wide') }</option>
|
<option value={ RoomChatSettings.CHAT_BUBBLE_WIDTH_WIDE }>{ LocalizeText('navigator.roomsettings.chat.bubbles.width.wide') }</option>
|
||||||
</select>
|
</select>
|
||||||
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.chatSettings.speed } onChange={ event => handleChange('bubble_speed', event.target.value) }>
|
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.chatSettings.speed } onChange={ event => handleChange('bubble_speed', event.target.value) }>
|
||||||
<option value={ RoomChatSettings.CHAT_SCROLL_SPEED_FAST }>{ LocalizeText('navigator.roomsettings.chat.speed.fast') }</option>
|
<option value={ RoomChatSettings.CHAT_SCROLL_SPEED_FAST }>{ LocalizeText('navigator.roomsettings.chat.speed.fast') }</option>
|
||||||
<option value={ RoomChatSettings.CHAT_SCROLL_SPEED_NORMAL }>{ LocalizeText('navigator.roomsettings.chat.speed.normal') }</option>
|
<option value={ RoomChatSettings.CHAT_SCROLL_SPEED_NORMAL }>{ LocalizeText('navigator.roomsettings.chat.speed.normal') }</option>
|
||||||
<option value={ RoomChatSettings.CHAT_SCROLL_SPEED_SLOW }>{ LocalizeText('navigator.roomsettings.chat.speed.slow') }</option>
|
<option value={ RoomChatSettings.CHAT_SCROLL_SPEED_SLOW }>{ LocalizeText('navigator.roomsettings.chat.speed.slow') }</option>
|
||||||
</select>
|
</select>
|
||||||
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.chatSettings.protection } onChange={ event => handleChange('flood_protection', event.target.value) }>
|
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.chatSettings.protection } onChange={ event => handleChange('flood_protection', event.target.value) }>
|
||||||
<option value={ RoomChatSettings.FLOOD_FILTER_LOOSE }>{ LocalizeText('navigator.roomsettings.chat.flood.loose') }</option>
|
<option value={ RoomChatSettings.FLOOD_FILTER_LOOSE }>{ LocalizeText('navigator.roomsettings.chat.flood.loose') }</option>
|
||||||
<option value={ RoomChatSettings.FLOOD_FILTER_NORMAL }>{ LocalizeText('navigator.roomsettings.chat.flood.normal') }</option>
|
<option value={ RoomChatSettings.FLOOD_FILTER_NORMAL }>{ LocalizeText('navigator.roomsettings.chat.flood.normal') }</option>
|
||||||
<option value={ RoomChatSettings.FLOOD_FILTER_STRICT }>{ LocalizeText('navigator.roomsettings.chat.flood.strict') }</option>
|
<option value={ RoomChatSettings.FLOOD_FILTER_STRICT }>{ LocalizeText('navigator.roomsettings.chat.flood.strict') }</option>
|
||||||
</select>
|
</select>
|
||||||
<Text small>{ LocalizeText('navigator.roomsettings.chat_settings.hearing.distance') }</Text>
|
<Text small>{ LocalizeText('navigator.roomsettings.chat_settings.hearing.distance') }</Text>
|
||||||
<NitroInput className="form-control-sm" disabled={ !isHC } min="0" type="number" value={ chatDistance } onBlur={ event => handleChange('chat_distance', chatDistance) } onChange={ event => setChatDistance(event.target.valueAsNumber) } />
|
<NitroInput className="form-control-sm" disabled={ !isHC } min="0" type="number" value={ chatDistance } onBlur={ event => handleChange('chat_distance', chatDistance) } onChange={ event => setChatDistance(event.target.valueAsNumber) } />
|
||||||
|
</NavigatorRoomSettingsSectionView>
|
||||||
</Column>
|
</Column>
|
||||||
<Column gap={ 1 } size={ 6 }>
|
<Column gap={ 1 } size={ 6 }>
|
||||||
<Text small bold>{ LocalizeText('navigator.roomsettings.vip_settings') }</Text>
|
<NavigatorRoomSettingsSectionView title={ LocalizeText('navigator.roomsettings.vip_settings') } gap={ 1 } className="h-full">
|
||||||
<div className="flex items-center gap-1">
|
<div className="flex items-center gap-1">
|
||||||
<input checked={ roomData.hideWalls } className="form-check-input" disabled={ !isHC } type="checkbox" onChange={ event => handleChange('hide_walls', event.target.checked) } />
|
<input checked={ roomData.hideWalls } className="form-check-input" disabled={ !isHC } type="checkbox" onChange={ event => handleChange('hide_walls', event.target.checked) } />
|
||||||
<Text small>{ LocalizeText('navigator.roomsettings.hide_walls') }</Text>
|
<Text small>{ LocalizeText('navigator.roomsettings.hide_walls') }</Text>
|
||||||
</div>
|
</div>
|
||||||
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.wallThickness } onChange={ event => handleChange('wall_thickness', event.target.value) }>
|
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.wallThickness } onChange={ event => handleChange('wall_thickness', event.target.value) }>
|
||||||
<option value="0">{ LocalizeText('navigator.roomsettings.wall_thickness.normal') }</option>
|
<option value="0">{ LocalizeText('navigator.roomsettings.wall_thickness.normal') }</option>
|
||||||
<option value="1">{ LocalizeText('navigator.roomsettings.wall_thickness.thick') }</option>
|
<option value="1">{ LocalizeText('navigator.roomsettings.wall_thickness.thick') }</option>
|
||||||
<option value="-1">{ LocalizeText('navigator.roomsettings.wall_thickness.thin') }</option>
|
<option value="-1">{ LocalizeText('navigator.roomsettings.wall_thickness.thin') }</option>
|
||||||
<option value="-2">{ LocalizeText('navigator.roomsettings.wall_thickness.thinnest') }</option>
|
<option value="-2">{ LocalizeText('navigator.roomsettings.wall_thickness.thinnest') }</option>
|
||||||
</select>
|
</select>
|
||||||
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.floorThickness } onChange={ event => handleChange('floor_thickness', event.target.value) }>
|
<select className="form-select form-select-sm" disabled={ !isHC } value={ roomData.floorThickness } onChange={ event => handleChange('floor_thickness', event.target.value) }>
|
||||||
<option value="0">{ LocalizeText('navigator.roomsettings.floor_thickness.normal') }</option>
|
<option value="0">{ LocalizeText('navigator.roomsettings.floor_thickness.normal') }</option>
|
||||||
<option value="1">{ LocalizeText('navigator.roomsettings.floor_thickness.thick') }</option>
|
<option value="1">{ LocalizeText('navigator.roomsettings.floor_thickness.thick') }</option>
|
||||||
<option value="-1">{ LocalizeText('navigator.roomsettings.floor_thickness.thin') }</option>
|
<option value="-1">{ LocalizeText('navigator.roomsettings.floor_thickness.thin') }</option>
|
||||||
<option value="-2">{ LocalizeText('navigator.roomsettings.floor_thickness.thinnest') }</option>
|
<option value="-2">{ LocalizeText('navigator.roomsettings.floor_thickness.thinnest') }</option>
|
||||||
</select>
|
</select>
|
||||||
|
</NavigatorRoomSettingsSectionView>
|
||||||
</Column>
|
</Column>
|
||||||
</Grid>
|
</Grid>
|
||||||
</>
|
</>
|
||||||
|
|||||||
Reference in New Issue
Block a user