nitro-react/src/views/navigator/NavigatorMessageHandler.tsx

148 lines
4.9 KiB
TypeScript
Raw Normal View History

import { GenericErrorEvent, NavigatorCategoriesComposer, NavigatorMetadataEvent, NavigatorSearchEvent, NavigatorSettingsComposer, RoomDataParser, RoomDoorbellAcceptedEvent, RoomDoorbellEvent, RoomForwardEvent, RoomInfoComposer, RoomInfoEvent, RoomInfoOwnerEvent, UserInfoEvent } from 'nitro-renderer';
2021-04-21 05:36:39 +02:00
import { useCallback } from 'react';
import { GetRoomSessionManager, GetSessionDataManager } from '../../api';
import { CreateMessageHook, SendMessageHook } from '../../hooks/messages/message-event';
import { NavigatorLockViewStage } from './lock/NavigatorLockView.types';
2021-04-21 05:36:39 +02:00
import { NavigatorMessageHandlerProps } from './NavigatorMessageHandler.types';
export function NavigatorMessageHandler(props: NavigatorMessageHandlerProps): JSX.Element
{
const { setTopLevelContext = null, setTopLevelContexts = null, setSearchResults = null, showLock = null, hideLock = null } = props;
2021-04-21 05:36:39 +02:00
const onUserInfoEvent = useCallback((event: UserInfoEvent) =>
{
const parser = event.getParser();
SendMessageHook(new NavigatorCategoriesComposer());
SendMessageHook(new NavigatorSettingsComposer());
}, []);
const onRoomForwardEvent = useCallback((event: RoomForwardEvent) =>
{
const parser = event.getParser();
SendMessageHook(new RoomInfoComposer(parser.roomId, false, true));
}, []);
const onRoomInfoOwnerEvent = useCallback((event: RoomInfoOwnerEvent) =>
{
const parser = event.getParser();
SendMessageHook(new RoomInfoComposer(parser.roomId, true, false));
}, []);
const onRoomInfoEvent = useCallback((event: RoomInfoEvent) =>
{
const parser = event.getParser();
if(parser.roomEnter)
{
// this._data.enteredGuestRoom = parser.data;
// this._data.staffPick = parser.data.roomPicker;
// const isCreatedRoom = (this._data.createdRoomId === parser.data.roomId);
// if(!isCreatedRoom && parser.data.displayRoomEntryAd)
// {
// // display ad
// }
// this._data.createdRoomId = 0;
}
else if(parser.roomForward)
{
if((parser.data.ownerName !== GetSessionDataManager().userName) && !parser.isGroupMember)
{
switch(parser.data.doorMode)
{
case RoomDataParser.DOORBELL_STATE:
case RoomDataParser.PASSWORD_STATE:
showLock();
2021-04-21 05:36:39 +02:00
return;
}
}
GetRoomSessionManager().createSession(parser.data.roomId);
}
else
{
// this._data.enteredGuestRoom = parser.data;
// this._data.staffPick = parser.data.roomPicker;
}
}, []);
const onRoomDoorbellEvent = useCallback((event: RoomDoorbellEvent) =>
{
if(!event) return;
const parser = event.getParser();
if(!parser) return;
if(!parser.userName || (parser.userName.length === 0))
{
showLock(NavigatorLockViewStage.WAITING);
}
}, []);
const onRoomDoorbellAcceptedEvent = useCallback((event: RoomDoorbellAcceptedEvent) =>
{
if(!event) return;
const parser = event.getParser();
if(!parser) return;
if(!parser.userName || (parser.userName.length === 0))
{
hideLock();
}
}, []);
const onGenericErrorEvent = useCallback((event: GenericErrorEvent) =>
{
if(!event) return;
const parser = event.getParser();
if(!parser) return;
switch(parser.errorCode)
{
case -100002:
showLock(NavigatorLockViewStage.FAILED);
break;
}
}, []);
2021-04-21 05:36:39 +02:00
const onNavigatorMetadataEvent = useCallback((event: NavigatorMetadataEvent) =>
{
const parser = event.getParser();
setTopLevelContexts(parser.topLevelContexts);
if(parser.topLevelContexts.length > 0) setTopLevelContext(parser.topLevelContexts[0]);
// clear search
}, [ setTopLevelContext, setTopLevelContexts ]);
const onNavigatorSearchEvent = useCallback((event: NavigatorSearchEvent) =>
{
const parser = event.getParser();
setSearchResults(parser.result.results);
}, [ setSearchResults ]);
2021-04-22 04:06:02 +02:00
CreateMessageHook(UserInfoEvent, onUserInfoEvent);
CreateMessageHook(RoomForwardEvent, onRoomForwardEvent);
CreateMessageHook(RoomInfoOwnerEvent, onRoomInfoOwnerEvent);
CreateMessageHook(RoomInfoEvent, onRoomInfoEvent);
CreateMessageHook(RoomDoorbellEvent, onRoomDoorbellEvent);
CreateMessageHook(RoomDoorbellAcceptedEvent, onRoomDoorbellAcceptedEvent);
CreateMessageHook(GenericErrorEvent, onGenericErrorEvent);
CreateMessageHook(NavigatorMetadataEvent, onNavigatorMetadataEvent);
CreateMessageHook(NavigatorSearchEvent, onNavigatorSearchEvent);
2021-04-21 05:36:39 +02:00
return null;
}