2021-07-02 06:37:31 +02:00
|
|
|
import { GenericErrorEvent, NavigatorCategoriesComposer, NavigatorCategoriesEvent, NavigatorHomeRoomEvent, NavigatorMetadataEvent, NavigatorSearchEvent, NavigatorSettingsComposer, RoomCreatedEvent, RoomDataParser, RoomDoorbellAcceptedEvent, RoomDoorbellEvent, RoomForwardEvent, RoomInfoComposer, RoomInfoEvent, RoomInfoOwnerEvent, UserInfoEvent } from 'nitro-renderer';
|
2021-06-23 10:05:23 +02:00
|
|
|
import { FC, useCallback } from 'react';
|
2021-04-21 05:36:39 +02:00
|
|
|
import { GetRoomSessionManager, GetSessionDataManager } from '../../api';
|
2021-06-30 04:15:32 +02:00
|
|
|
import { VisitRoom } from '../../api/navigator/VisitRoom';
|
2021-04-21 05:36:39 +02:00
|
|
|
import { CreateMessageHook, SendMessageHook } from '../../hooks/messages/message-event';
|
2021-05-05 00:38:31 +02:00
|
|
|
import { useNavigatorContext } from './context/NavigatorContext';
|
2021-04-21 05:36:39 +02:00
|
|
|
import { NavigatorMessageHandlerProps } from './NavigatorMessageHandler.types';
|
2021-05-05 00:38:31 +02:00
|
|
|
import { NavigatorActions } from './reducers/NavigatorReducer';
|
2021-04-21 05:36:39 +02:00
|
|
|
|
2021-06-23 10:05:23 +02:00
|
|
|
export const NavigatorMessageHandler: FC<NavigatorMessageHandlerProps> = props =>
|
2021-04-21 05:36:39 +02:00
|
|
|
{
|
2021-07-02 06:37:31 +02:00
|
|
|
const { navigatorState = null, dispatchNavigatorState = null } = useNavigatorContext();
|
2021-04-21 05:36:39 +02:00
|
|
|
|
|
|
|
const onUserInfoEvent = useCallback((event: UserInfoEvent) =>
|
|
|
|
{
|
|
|
|
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();
|
|
|
|
|
2021-07-02 06:37:31 +02:00
|
|
|
const roomInfoData = navigatorState.roomInfoData;
|
|
|
|
roomInfoData.currentRoomOwner = parser.isOwner;
|
|
|
|
roomInfoData.currentRoomId = parser.roomId;
|
|
|
|
|
|
|
|
dispatchNavigatorState({
|
|
|
|
type: NavigatorActions.SET_ROOM_INFO_DATA,
|
|
|
|
payload: {
|
|
|
|
roomInfoData: roomInfoData
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2021-04-21 05:36:39 +02:00
|
|
|
SendMessageHook(new RoomInfoComposer(parser.roomId, true, false));
|
2021-07-02 06:37:31 +02:00
|
|
|
}, [ navigatorState, dispatchNavigatorState ]);
|
2021-04-21 05:36:39 +02:00
|
|
|
|
|
|
|
const onRoomInfoEvent = useCallback((event: RoomInfoEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
if(parser.roomEnter)
|
|
|
|
{
|
2021-07-02 06:37:31 +02:00
|
|
|
const roomInfoData = navigatorState.roomInfoData;
|
|
|
|
roomInfoData.enteredGuestRoom = parser.data;
|
2021-04-21 05:36:39 +02:00
|
|
|
|
2021-07-02 06:37:31 +02:00
|
|
|
dispatchNavigatorState({
|
|
|
|
type: NavigatorActions.SET_ROOM_INFO_DATA,
|
|
|
|
payload: {
|
|
|
|
roomInfoData: roomInfoData
|
|
|
|
}
|
|
|
|
});
|
2021-04-21 05:36:39 +02:00
|
|
|
}
|
|
|
|
else if(parser.roomForward)
|
|
|
|
{
|
|
|
|
if((parser.data.ownerName !== GetSessionDataManager().userName) && !parser.isGroupMember)
|
|
|
|
{
|
|
|
|
switch(parser.data.doorMode)
|
|
|
|
{
|
|
|
|
case RoomDataParser.DOORBELL_STATE:
|
|
|
|
case RoomDataParser.PASSWORD_STATE:
|
2021-05-05 00:38:31 +02:00
|
|
|
//showLock();
|
2021-04-21 05:36:39 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
GetRoomSessionManager().createSession(parser.data.roomId);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-07-02 06:37:31 +02:00
|
|
|
const roomInfoData = navigatorState.roomInfoData;
|
|
|
|
roomInfoData.enteredGuestRoom = parser.data;
|
|
|
|
|
|
|
|
dispatchNavigatorState({
|
|
|
|
type: NavigatorActions.SET_ROOM_INFO_DATA,
|
|
|
|
payload: {
|
|
|
|
roomInfoData: roomInfoData
|
|
|
|
}
|
|
|
|
});
|
2021-04-21 05:36:39 +02:00
|
|
|
}
|
2021-07-02 06:37:31 +02:00
|
|
|
}, [ dispatchNavigatorState, navigatorState ]);
|
2021-04-21 05:36:39 +02:00
|
|
|
|
2021-04-21 11:04:56 +02:00
|
|
|
const onRoomDoorbellEvent = useCallback((event: RoomDoorbellEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-05-05 00:38:31 +02:00
|
|
|
// if(!parser.userName || (parser.userName.length === 0))
|
|
|
|
// {
|
|
|
|
// showLock(NavigatorLockViewStage.WAITING);
|
|
|
|
// }
|
2021-04-21 11:04:56 +02:00
|
|
|
}, []);
|
|
|
|
|
|
|
|
const onRoomDoorbellAcceptedEvent = useCallback((event: RoomDoorbellAcceptedEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-05-05 00:38:31 +02:00
|
|
|
// if(!parser.userName || (parser.userName.length === 0))
|
|
|
|
// {
|
|
|
|
// hideLock();
|
|
|
|
// }
|
2021-04-21 11:04:56 +02:00
|
|
|
}, []);
|
|
|
|
|
|
|
|
const onGenericErrorEvent = useCallback((event: GenericErrorEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-05-05 00:38:31 +02:00
|
|
|
// switch(parser.errorCode)
|
|
|
|
// {
|
|
|
|
// case -100002:
|
|
|
|
// showLock(NavigatorLockViewStage.FAILED);
|
|
|
|
// break;
|
|
|
|
// }
|
2021-04-21 11:04:56 +02:00
|
|
|
}, []);
|
|
|
|
|
2021-04-21 05:36:39 +02:00
|
|
|
const onNavigatorMetadataEvent = useCallback((event: NavigatorMetadataEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-05-05 00:38:31 +02:00
|
|
|
dispatchNavigatorState({
|
|
|
|
type: NavigatorActions.SET_TOP_LEVEL_CONTEXTS,
|
|
|
|
payload: {
|
|
|
|
topLevelContexts: parser.topLevelContexts
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchNavigatorState ]);
|
2021-04-21 05:36:39 +02:00
|
|
|
|
|
|
|
const onNavigatorSearchEvent = useCallback((event: NavigatorSearchEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-05-05 00:38:31 +02:00
|
|
|
dispatchNavigatorState({
|
|
|
|
type: NavigatorActions.SET_SEARCH_RESULT,
|
|
|
|
payload: {
|
|
|
|
searchResult: parser.result
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchNavigatorState ]);
|
2021-04-21 05:36:39 +02:00
|
|
|
|
2021-06-30 04:15:32 +02:00
|
|
|
const onNavigatorCategoriesEvent = useCallback((event: NavigatorCategoriesEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchNavigatorState({
|
|
|
|
type: NavigatorActions.SET_CATEGORIES,
|
|
|
|
payload: {
|
|
|
|
categories: parser.categories
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchNavigatorState ]);
|
|
|
|
|
|
|
|
const onRoomCreatedEvent = useCallback((event: RoomCreatedEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
VisitRoom(parser.roomId);
|
|
|
|
}, []);
|
|
|
|
|
2021-07-02 06:37:31 +02:00
|
|
|
const onNavigatorHomeRoomEvent = useCallback((event: NavigatorHomeRoomEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchNavigatorState({
|
|
|
|
type: NavigatorActions.SET_HOME_ROOM_ID,
|
|
|
|
payload: {
|
|
|
|
homeRoomId: parser.homeRoomId
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchNavigatorState ]);
|
|
|
|
|
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-06-30 04:15:32 +02:00
|
|
|
CreateMessageHook(NavigatorCategoriesEvent, onNavigatorCategoriesEvent);
|
|
|
|
CreateMessageHook(RoomCreatedEvent, onRoomCreatedEvent);
|
2021-07-02 06:37:31 +02:00
|
|
|
CreateMessageHook(NavigatorHomeRoomEvent, onNavigatorHomeRoomEvent);
|
2021-04-21 05:36:39 +02:00
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|