2021-06-15 20:06:46 +02:00
|
|
|
import { FC, useCallback, useState } from 'react';
|
|
|
|
import { CreateEventDispatcherHook } from '../../../../hooks/events/event-dispatcher.base';
|
2021-06-17 19:23:34 +02:00
|
|
|
import { useRoomContext } from '../../context/RoomContext';
|
|
|
|
import { RoomWidgetRoomObjectUpdateEvent, RoomWidgetUpdateEvent, RoomWidgetUpdateInfostandEvent, RoomWidgetUpdateInfostandFurniEvent, RoomWidgetUpdateInfostandPetEvent, RoomWidgetUpdateInfostandRentableBotEvent, RoomWidgetUpdateInfostandUserEvent } from '../../events';
|
|
|
|
import { RoomWidgetRoomObjectMessage } from '../../messages';
|
2021-06-15 20:06:46 +02:00
|
|
|
import { InfoStandWidgetBotView } from './views/bot/InfoStandWidgetBotView';
|
|
|
|
import { InfoStandWidgetFurniView } from './views/furni/InfoStandWidgetFurniView';
|
2021-06-20 20:16:23 +02:00
|
|
|
import { InfoStandWidgetPetView } from './views/pet/InfoStandWidgetPetView';
|
2021-06-15 20:06:46 +02:00
|
|
|
import { InfoStandWidgetRentableBotView } from './views/rentable-bot/InfoStandWidgetRentableBotView';
|
|
|
|
import { InfoStandWidgetUserView } from './views/user/InfoStandWidgetUserView';
|
|
|
|
|
2021-07-16 19:17:52 +02:00
|
|
|
export const InfoStandWidgetView: FC<{}> = props =>
|
2021-06-15 20:06:46 +02:00
|
|
|
{
|
2021-06-17 19:23:34 +02:00
|
|
|
const { eventDispatcher = null, widgetHandler = null } = useRoomContext();
|
|
|
|
const [ infoStandEvent, setInfoStandEvent ] = useState<RoomWidgetUpdateInfostandEvent>(null);
|
2021-06-15 20:06:46 +02:00
|
|
|
|
|
|
|
const closeInfostand = useCallback(() =>
|
|
|
|
{
|
2021-06-17 19:23:34 +02:00
|
|
|
setInfoStandEvent(null);
|
2021-06-15 20:06:46 +02:00
|
|
|
}, []);
|
|
|
|
|
2021-06-17 19:23:34 +02:00
|
|
|
const onRoomWidgetUpdateEvent = useCallback((event: RoomWidgetUpdateEvent) =>
|
2021-06-15 20:06:46 +02:00
|
|
|
{
|
|
|
|
switch(event.type)
|
|
|
|
{
|
2021-06-17 19:23:34 +02:00
|
|
|
case RoomWidgetRoomObjectUpdateEvent.OBJECT_SELECTED: {
|
|
|
|
const roomObjectEvent = (event as RoomWidgetRoomObjectUpdateEvent);
|
2021-06-15 20:06:46 +02:00
|
|
|
|
2021-06-17 19:23:34 +02:00
|
|
|
widgetHandler.processWidgetMessage(new RoomWidgetRoomObjectMessage(RoomWidgetRoomObjectMessage.GET_OBJECT_INFO, roomObjectEvent.id, roomObjectEvent.category));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
case RoomWidgetRoomObjectUpdateEvent.OBJECT_DESELECTED: {
|
|
|
|
const roomObjectEvent = (event as RoomWidgetRoomObjectUpdateEvent);
|
2021-06-15 20:06:46 +02:00
|
|
|
|
2021-06-17 19:23:34 +02:00
|
|
|
closeInfostand();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
case RoomWidgetRoomObjectUpdateEvent.FURNI_REMOVED:
|
|
|
|
case RoomWidgetRoomObjectUpdateEvent.USER_REMOVED: {
|
|
|
|
const roomObjectEvent = (event as RoomWidgetRoomObjectUpdateEvent);
|
|
|
|
|
|
|
|
setInfoStandEvent(prevValue =>
|
|
|
|
{
|
|
|
|
switch(event.type)
|
|
|
|
{
|
|
|
|
case RoomWidgetRoomObjectUpdateEvent.FURNI_REMOVED:
|
|
|
|
if(prevValue instanceof RoomWidgetUpdateInfostandFurniEvent)
|
|
|
|
{
|
|
|
|
if(prevValue.id === roomObjectEvent.id) return null;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case RoomWidgetRoomObjectUpdateEvent.USER_REMOVED:
|
|
|
|
if(prevValue instanceof RoomWidgetUpdateInfostandUserEvent || prevValue instanceof RoomWidgetUpdateInfostandRentableBotEvent)
|
|
|
|
{
|
2021-06-22 08:55:34 +02:00
|
|
|
if(prevValue.roomIndex === roomObjectEvent.id) return null;
|
2021-06-17 19:23:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
else if(prevValue instanceof RoomWidgetUpdateInfostandPetEvent)
|
|
|
|
{
|
2021-06-22 08:55:34 +02:00
|
|
|
if(prevValue.roomIndex === roomObjectEvent.id) return null;
|
2021-06-17 19:23:34 +02:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return prevValue;
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
case RoomWidgetUpdateInfostandFurniEvent.FURNI:
|
|
|
|
case RoomWidgetUpdateInfostandUserEvent.OWN_USER:
|
|
|
|
case RoomWidgetUpdateInfostandUserEvent.PEER:
|
|
|
|
case RoomWidgetUpdateInfostandUserEvent.BOT:
|
2021-06-18 10:55:31 +02:00
|
|
|
case RoomWidgetUpdateInfostandRentableBotEvent.RENTABLE_BOT:
|
|
|
|
case RoomWidgetUpdateInfostandPetEvent.PET_INFO: {
|
2021-06-22 08:55:34 +02:00
|
|
|
setInfoStandEvent((event as RoomWidgetUpdateInfostandEvent));
|
2021-06-17 19:23:34 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
console.log(event);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}, [ widgetHandler, closeInfostand ]);
|
|
|
|
|
|
|
|
CreateEventDispatcherHook(RoomWidgetRoomObjectUpdateEvent.OBJECT_SELECTED, eventDispatcher, onRoomWidgetUpdateEvent);
|
|
|
|
CreateEventDispatcherHook(RoomWidgetRoomObjectUpdateEvent.OBJECT_DESELECTED, eventDispatcher, onRoomWidgetUpdateEvent);
|
|
|
|
CreateEventDispatcherHook(RoomWidgetRoomObjectUpdateEvent.USER_REMOVED, eventDispatcher, onRoomWidgetUpdateEvent);
|
|
|
|
CreateEventDispatcherHook(RoomWidgetRoomObjectUpdateEvent.FURNI_REMOVED, eventDispatcher, onRoomWidgetUpdateEvent);
|
|
|
|
CreateEventDispatcherHook(RoomWidgetUpdateInfostandFurniEvent.FURNI, eventDispatcher, onRoomWidgetUpdateEvent);
|
|
|
|
CreateEventDispatcherHook(RoomWidgetUpdateInfostandUserEvent.OWN_USER, eventDispatcher, onRoomWidgetUpdateEvent);
|
|
|
|
CreateEventDispatcherHook(RoomWidgetUpdateInfostandUserEvent.PEER, eventDispatcher, onRoomWidgetUpdateEvent);
|
|
|
|
CreateEventDispatcherHook(RoomWidgetUpdateInfostandUserEvent.BOT, eventDispatcher, onRoomWidgetUpdateEvent);
|
|
|
|
CreateEventDispatcherHook(RoomWidgetUpdateInfostandRentableBotEvent.RENTABLE_BOT, eventDispatcher, onRoomWidgetUpdateEvent);
|
2021-06-18 10:55:31 +02:00
|
|
|
CreateEventDispatcherHook(RoomWidgetUpdateInfostandPetEvent.PET_INFO, eventDispatcher, onRoomWidgetUpdateEvent);
|
2021-06-15 20:06:46 +02:00
|
|
|
|
|
|
|
const getInfostandView = useCallback(() =>
|
|
|
|
{
|
2021-06-17 19:23:34 +02:00
|
|
|
if(!infoStandEvent) return null;
|
2021-06-15 20:06:46 +02:00
|
|
|
|
2021-06-17 19:23:34 +02:00
|
|
|
switch(infoStandEvent.type)
|
2021-06-15 20:06:46 +02:00
|
|
|
{
|
2021-06-17 19:23:34 +02:00
|
|
|
case RoomWidgetUpdateInfostandFurniEvent.FURNI:
|
|
|
|
return <InfoStandWidgetFurniView furniData={ (infoStandEvent as RoomWidgetUpdateInfostandFurniEvent) } close={ closeInfostand } />;
|
|
|
|
case RoomWidgetUpdateInfostandUserEvent.OWN_USER:
|
|
|
|
case RoomWidgetUpdateInfostandUserEvent.PEER:
|
|
|
|
return <InfoStandWidgetUserView userData={ (infoStandEvent as RoomWidgetUpdateInfostandUserEvent) } close={ closeInfostand } />;
|
|
|
|
case RoomWidgetUpdateInfostandUserEvent.BOT:
|
|
|
|
return <InfoStandWidgetBotView botData={ (infoStandEvent as RoomWidgetUpdateInfostandUserEvent) } close={ closeInfostand } />;
|
|
|
|
case RoomWidgetUpdateInfostandRentableBotEvent.RENTABLE_BOT:
|
|
|
|
return <InfoStandWidgetRentableBotView rentableBotData={ (infoStandEvent as RoomWidgetUpdateInfostandRentableBotEvent) } close={ closeInfostand } />;
|
2021-06-20 20:16:23 +02:00
|
|
|
case RoomWidgetUpdateInfostandPetEvent.PET_INFO:
|
|
|
|
return <InfoStandWidgetPetView petData={ (infoStandEvent as RoomWidgetUpdateInfostandPetEvent) } close={ closeInfostand } />
|
2021-06-15 20:06:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
2021-06-17 19:23:34 +02:00
|
|
|
}, [ infoStandEvent, closeInfostand ]);
|
2021-06-15 20:06:46 +02:00
|
|
|
|
2021-06-17 19:23:34 +02:00
|
|
|
if(!infoStandEvent) return null;
|
2021-06-15 20:06:46 +02:00
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="d-flex flex-column align-items-end nitro-infostand-container">
|
|
|
|
{ getInfostandView() }
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|