75 lines
2.5 KiB
TypeScript
75 lines
2.5 KiB
TypeScript
import { OpenPetPackageMessageComposer, RoomObjectCategory, RoomSessionPetPackageEvent } from '@nitrots/nitro-renderer';
|
|
import { useState } from 'react';
|
|
import { GetRoomEngine, LocalizeText, SendMessageComposer } from '../../../api';
|
|
import { useRoomSessionManagerEvent } from '../../events';
|
|
|
|
const usePetPackageWidgetState = () =>
|
|
{
|
|
const [ isVisible, setIsVisible ] = useState<boolean>(false);
|
|
const [ objectId, setObjectId ] = useState<number>(-1);
|
|
const [ objectType, setObjectType ] = useState<string>('');
|
|
const [ petName, setPetName ] = useState<string>('');
|
|
const [ errorResult, setErrorResult ] = useState<string>('');
|
|
|
|
const onClose = () =>
|
|
{
|
|
setErrorResult('');
|
|
setPetName('');
|
|
setObjectType('');
|
|
setObjectId(-1);
|
|
setIsVisible(false);
|
|
}
|
|
|
|
const onConfirm = () =>
|
|
{
|
|
SendMessageComposer(new OpenPetPackageMessageComposer(objectId, petName));
|
|
}
|
|
|
|
const onChangePetName = (petName: string) =>
|
|
{
|
|
setPetName(petName);
|
|
if (errorResult.length > 0) setErrorResult('');
|
|
}
|
|
|
|
const getErrorResult = (errorCode: number) =>
|
|
{
|
|
if (!errorCode || errorCode === 0) return;
|
|
|
|
switch(errorCode)
|
|
{
|
|
case 1:
|
|
return setErrorResult(LocalizeText('catalog.alert.petname.long'));
|
|
case 2:
|
|
return setErrorResult(LocalizeText('catalog.alert.petname.short'));
|
|
case 3:
|
|
return setErrorResult(LocalizeText('catalog.alert.petname.chars'));
|
|
case 4:
|
|
return setErrorResult(LocalizeText('catalog.alert.petname.bobba'));
|
|
}
|
|
}
|
|
|
|
useRoomSessionManagerEvent<RoomSessionPetPackageEvent>(RoomSessionPetPackageEvent.RSOPPE_OPEN_PET_PACKAGE_REQUESTED, event =>
|
|
{
|
|
if (!event) return;
|
|
|
|
const roomObject = GetRoomEngine().getRoomObject(event.session.roomId, event.objectId, RoomObjectCategory.FLOOR);
|
|
|
|
setObjectId(event.objectId);
|
|
setObjectType(roomObject.type);
|
|
setIsVisible(true);
|
|
});
|
|
|
|
useRoomSessionManagerEvent<RoomSessionPetPackageEvent>(RoomSessionPetPackageEvent.RSOPPE_OPEN_PET_PACKAGE_RESULT, event =>
|
|
{
|
|
if (!event) return;
|
|
|
|
if (event.nameValidationStatus === 0) onClose();
|
|
|
|
if (event.nameValidationStatus !== 0) getErrorResult(event.nameValidationStatus);
|
|
});
|
|
|
|
return { isVisible, errorResult, petName, objectType, onChangePetName, onConfirm, onClose };
|
|
}
|
|
|
|
export const usePetPackageWidget = usePetPackageWidgetState;
|