import { RoomDeleteComposer, RoomSettingsSaveErrorEvent, RoomSettingsSaveErrorParser } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; import { FaTimes } from 'react-icons/fa'; import { CreateLinkEvent, GetMaxVisitorsList, IRoomData, LocalizeText, SendMessageComposer } from '../../../../api'; import { Base, Column, Flex, Text } from '../../../../common'; import { useMessageEvent, useNavigator, useNotification } from '../../../../hooks'; const ROOM_NAME_MIN_LENGTH = 3; const ROOM_NAME_MAX_LENGTH = 60; const DESC_MAX_LENGTH = 255; const TAGS_MAX_LENGTH = 15; interface NavigatorRoomSettingsTabViewProps { roomData: IRoomData; handleChange: (field: string, value: string | number | boolean | string[]) => void; onClose: () => void; } export const NavigatorRoomSettingsBasicTabView: FC = props => { const { roomData = null, handleChange = null, onClose = null } = props; const [ roomName, setRoomName ] = useState(''); const [ roomDescription, setRoomDescription ] = useState(''); const [ roomTag1, setRoomTag1 ] = useState(''); const [ roomTag2, setRoomTag2 ] = useState(''); const [ tagIndex, setTagIndex ] = useState(0); const [ typeError, setTypeError ] = useState(''); const { showConfirm = null } = useNotification(); const { categories = null } = useNavigator(); useMessageEvent(RoomSettingsSaveErrorEvent, event => { const parser = event.getParser(); if (!parser) return; switch (parser.code) { case RoomSettingsSaveErrorParser.ERROR_INVALID_TAG: setTypeError('navigator.roomsettings.unacceptablewords'); case RoomSettingsSaveErrorParser.ERROR_NON_USER_CHOOSABLE_TAG: setTypeError('navigator.roomsettings.nonuserchoosabletag'); break; default: setTypeError(''); break; } }); const deleteRoom = () => { showConfirm(LocalizeText('navigator.roomsettings.deleteroom.confirm.message', [ 'room_name' ], [ roomData.roomName ] ), () => { SendMessageComposer(new RoomDeleteComposer(roomData.roomId)); if(onClose) onClose(); CreateLinkEvent('navigator/search/myworld_view'); }, null, null, null, LocalizeText('navigator.roomsettings.deleteroom.confirm.title')); } const saveRoomName = () => { if((roomName === roomData.roomName) || (roomName.length < ROOM_NAME_MIN_LENGTH) || (roomName.length > ROOM_NAME_MAX_LENGTH)) return; handleChange('name', roomName); } const saveRoomDescription = () => { if((roomDescription === roomData.roomDescription) || (roomDescription.length > DESC_MAX_LENGTH)) return; handleChange('description', roomDescription); } const saveTags = (index: number) => { if(index === 0 && (roomTag1 === roomData.tags[0]) || (roomTag1.length > TAGS_MAX_LENGTH)) return; if(index === 1 && (roomTag2 === roomData.tags[1]) || (roomTag2.length > TAGS_MAX_LENGTH)) return; if(roomTag1 === '' && roomTag2 !== '') setRoomTag2(''); setTypeError(''); setTagIndex(index); handleChange('tags', (roomTag1 === '' && roomTag2 !== '') ? [ roomTag2 ] : [ roomTag1, roomTag2 ]); } useEffect(() => { setRoomName(roomData.roomName); setRoomDescription(roomData.roomDescription); setRoomTag1((roomData.tags.length > 0 && roomData.tags[0]) ? roomData.tags[0] : ''); setRoomTag2((roomData.tags.length > 0 && roomData.tags[1]) ? roomData.tags[1] : ''); }, [ roomData ]); return ( <> { LocalizeText('navigator.roomname') } setRoomName(event.target.value) } onBlur={ saveRoomName } /> { (roomName.length < ROOM_NAME_MIN_LENGTH) && { LocalizeText('navigator.roomsettings.roomnameismandatory') } } { LocalizeText('navigator.roomsettings.desc') }