5180 fichiers 38.5 Mo 0 téléchargements 420 vues mis à jour il y a 7 heures ui
nitro-v36-with-renderer-v36 / src / components / navigator / views / room-settings / NavigatorRoomSettingsVipChatTabView.tsx
NavigatorRoomSettingsVipChatTabView.tsx 13.9 Ko Télécharger le fichier
import { RoomChatSettings } from '@octane/renderer';
import { FC, useEffect, useState } from 'react';
import { GetClubMemberLevel, IRoomData, LocalizeText, RoomSettingsSaveErrorResult } from '../../../../api';
import { Column, Flex, Grid, Text } from '../../../../common';
import { OctaneInput } from '../../../../layout';
import { NavigatorRoomSettingsFieldErrorView } from './NavigatorRoomSettingsFieldErrorView';
import { NavigatorRoomSettingsSectionView } from './NavigatorRoomSettingsSectionView';
import { Checkbox } from '../../../../common/Checkbox';
import { Select } from '../../../../common/Select';
import { NativeTextTree } from '../../../../common/native-text/NativeTextTree';

interface NavigatorRoomSettingsTabViewProps {
    roomData: IRoomData;
    handleChange: (field: string, value: string | number | boolean) => void;
    errors?: RoomSettingsSaveErrorResult['errors'];
}

export const NavigatorRoomSettingsVipChatTabView: FC<NavigatorRoomSettingsTabViewProps> = (props) => {
    const { roomData = null, handleChange = null, errors = {} } = props;
    const [chatDistance, setChatDistance] = useState<number>(0);
    const [idleSleepTimeoutSeconds, setIdleSleepTimeoutSeconds] = useState<string>('');
    const [idleAutokickTimeoutSeconds, setIdleAutokickTimeoutSeconds] = useState<string>('');
    const isHC = GetClubMemberLevel() > 0;
    const minimumAutokickTimeoutSeconds = Math.max(60, (Number(idleSleepTimeoutSeconds) || 30) + 30);

    useEffect(() => {
        setChatDistance(roomData.chatSettings.distance);
        setIdleSleepTimeoutSeconds(roomData.idleSleepTimeoutSeconds ? roomData.idleSleepTimeoutSeconds.toString() : '');
        setIdleAutokickTimeoutSeconds(roomData.idleAutokickTimeoutSeconds ? roomData.idleAutokickTimeoutSeconds.toString() : '');
    }, [roomData.chatSettings, roomData.idleSleepTimeoutSeconds, roomData.idleAutokickTimeoutSeconds]);

    return (
        <NativeTextTree>
            <>
                <div className="flex flex-col gap-1">
                    <Text small bold className="octane-room-settings-caption">
                        {LocalizeText('navigator.roomsettings.vip.caption')}
                    </Text>
                    <Text small>{LocalizeText('navigator.roomsettings.vip.info')}</Text>
                </div>
                <Grid>
                    <Column gap={1} size={6}>
                        <NavigatorRoomSettingsSectionView title={LocalizeText('navigator.roomsettings.chat_settings')} gap={1} className="h-full">
                            <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)}
                            >
                                <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>
                            </Select>
                            <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_THIN}>
                                    {LocalizeText('navigator.roomsettings.chat.bubbles.width.thin')}
                                </option>
                                <option value={RoomChatSettings.CHAT_BUBBLE_WIDTH_WIDE}>
                                    {LocalizeText('navigator.roomsettings.chat.bubbles.width.wide')}
                                </option>
                            </Select>
                            <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_NORMAL}>{LocalizeText('navigator.roomsettings.chat.speed.normal')}</option>
                                <option value={RoomChatSettings.CHAT_SCROLL_SPEED_SLOW}>{LocalizeText('navigator.roomsettings.chat.speed.slow')}</option>
                            </Select>
                            <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_NORMAL}>{LocalizeText('navigator.roomsettings.chat.flood.normal')}</option>
                                <option value={RoomChatSettings.FLOOD_FILTER_STRICT}>{LocalizeText('navigator.roomsettings.chat.flood.strict')}</option>
                            </Select>
                            <Text small>{LocalizeText('navigator.roomsettings.chat_settings.hearing.distance')}</Text>
                            <OctaneInput
                                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 gap={1} size={6}>
                        <NavigatorRoomSettingsSectionView title={LocalizeText('navigator.roomsettings.vip_settings')} gap={1} className="h-full">
                            <div className="flex items-center gap-1">
                                <Checkbox
                                    checked={roomData.hideWalls}
                                    disabled={!isHC}
                                    onCheckedChange={(nextChecked) => handleChange('hide_walls', nextChecked)}
                                />
                                <Text small>{LocalizeText('navigator.roomsettings.hide_walls')}</Text>
                            </div>
                            <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="1">{LocalizeText('navigator.roomsettings.wall_thickness.thick')}</option>
                                <option value="-1">{LocalizeText('navigator.roomsettings.wall_thickness.thin')}</option>
                                <option value="-2">{LocalizeText('navigator.roomsettings.wall_thickness.thinnest')}</option>
                            </Select>
                            <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="1">{LocalizeText('navigator.roomsettings.floor_thickness.thick')}</option>
                                <option value="-1">{LocalizeText('navigator.roomsettings.floor_thickness.thin')}</option>
                                <option value="-2">{LocalizeText('navigator.roomsettings.floor_thickness.thinnest')}</option>
                            </Select>
                        </NavigatorRoomSettingsSectionView>
                    </Column>
                    <Column gap={1} size={12}>
                        <NavigatorRoomSettingsSectionView title={LocalizeText('navigator.roomsettings.room_behavior')} gap={1}>
                            <Flex alignItems="center" gap={1}>
                                <Checkbox
                                    checked={!roomData.leaveOnDoorTileEnabled}
                                    onCheckedChange={(nextChecked) => handleChange('leave_on_door_tile_enabled', !nextChecked)}
                                />
                                <Text small>{LocalizeText('navigator.roomsettings.do_not_leave_on_door_tile')}</Text>
                            </Flex>
                            <Flex alignItems="center" gap={1}>
                                <Checkbox
                                    checked={roomData.idleSleepEnabled}
                                    onCheckedChange={(nextChecked) => handleChange('idle_sleep_enabled', nextChecked)}
                                />
                                <Text small>{LocalizeText('navigator.roomsettings.idle_sleep')}</Text>
                                <OctaneInput
                                    className="form-control-sm w-20"
                                    disabled={!roomData.idleSleepEnabled}
                                    min="30"
                                    max="3600"
                                    type="number"
                                    value={idleSleepTimeoutSeconds}
                                    onBlur={(event) => {
                                        const value = Math.max(30, Math.min(3600, Number(event.currentTarget.value) || 30));
                                        const requiredAutokickTimeout = Math.max(60, value + 30);
                                        setIdleSleepTimeoutSeconds(value.toString());

                                        if (roomData.idleAutokickEnabled && (Number(idleAutokickTimeoutSeconds) || 0) < requiredAutokickTimeout) {
                                            setIdleAutokickTimeoutSeconds(requiredAutokickTimeout.toString());
                                            handleChange('idle_autokick_timeout_seconds', requiredAutokickTimeout);
                                        }

                                        handleChange('idle_sleep_timeout_seconds', value);
                                    }}
                                    onChange={(event) => setIdleSleepTimeoutSeconds(event.target.value)}
                                />
                                <Text small>{LocalizeText('navigator.roomsettings.timeout.seconds')}</Text>
                            </Flex>
                            <NavigatorRoomSettingsFieldErrorView error={errors.idle_sleep} />
                            <Flex alignItems="center" gap={1}>
                                <Checkbox
                                    checked={roomData.idleAutokickEnabled}
                                    onCheckedChange={(nextChecked) => handleChange('idle_autokick_enabled', nextChecked)}
                                />
                                <Text small>{LocalizeText('navigator.roomsettings.idle_autokick')}</Text>
                                <OctaneInput
                                    className="form-control-sm w-20"
                                    disabled={!roomData.idleAutokickEnabled}
                                    min={minimumAutokickTimeoutSeconds}
                                    max="36000"
                                    type="number"
                                    value={idleAutokickTimeoutSeconds}
                                    onBlur={(event) => {
                                        const value = Math.max(
                                            minimumAutokickTimeoutSeconds,
                                            Math.min(36000, Number(event.currentTarget.value) || minimumAutokickTimeoutSeconds)
                                        );
                                        setIdleAutokickTimeoutSeconds(value.toString());
                                        handleChange('idle_autokick_timeout_seconds', value);
                                    }}
                                    onChange={(event) => setIdleAutokickTimeoutSeconds(event.target.value)}
                                />
                                <Text small>{LocalizeText('navigator.roomsettings.timeout.seconds')}</Text>
                            </Flex>
                            <NavigatorRoomSettingsFieldErrorView error={errors.idle_autokick} />
                        </NavigatorRoomSettingsSectionView>
                    </Column>
                </Grid>
            </>
        </NativeTextTree>
    );
};
15Sujets
1Dépôts
20Membres
3En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser