nitro-react/src/views/friend-list/FriendListMessageHandler.tsx

61 lines
2.2 KiB
TypeScript
Raw Normal View History

import { FriendListFragmentEvent, FriendListUpdateEvent, GetFriendRequestsComposer, MessengerInitEvent } from '@nitrots/nitro-renderer';
2021-06-23 05:22:32 +02:00
import { FC, useCallback } from 'react';
2021-04-22 09:11:27 +02:00
import { CreateMessageHook, SendMessageHook } from '../../hooks/messages/message-event';
2021-06-23 05:59:02 +02:00
import { MessengerSettings } from './common/MessengerSettings';
2021-06-23 05:22:32 +02:00
import { useFriendListContext } from './context/FriendListContext';
2021-04-22 08:54:49 +02:00
import { FriendListMessageHandlerProps } from './FriendListMessageHandler.types';
2021-06-23 05:22:32 +02:00
import { FriendListActions } from './reducers/FriendListReducer';
2021-04-22 08:54:49 +02:00
2021-06-23 05:22:32 +02:00
export const FriendListMessageHandler: FC<FriendListMessageHandlerProps> = props =>
2021-04-22 08:54:49 +02:00
{
2021-06-23 05:22:32 +02:00
const { friendListState = null, dispatchFriendListState = null } = useFriendListContext();
2021-04-22 08:54:49 +02:00
2021-04-22 09:11:27 +02:00
const onMessengerInitEvent = useCallback((event: MessengerInitEvent) =>
2021-06-23 05:22:32 +02:00
{
const parser = event.getParser();
2021-04-22 08:54:49 +02:00
2021-06-23 05:22:32 +02:00
dispatchFriendListState({
type: FriendListActions.UPDATE_SETTINGS,
payload: {
settings: new MessengerSettings(
parser.userFriendLimit,
parser.normalFriendLimit,
parser.extendedFriendLimit,
parser.categories)
}
});
2021-04-22 08:54:49 +02:00
2021-06-23 05:22:32 +02:00
SendMessageHook(new GetFriendRequestsComposer());
}, [ dispatchFriendListState ]);
2021-04-22 09:11:27 +02:00
2021-06-23 05:43:37 +02:00
const onFriendListFragmentEvent = useCallback((event: FriendListFragmentEvent) =>
{
const parser = event.getParser();
dispatchFriendListState({
type: FriendListActions.PROCESS_FRAGMENT,
payload: {
fragment: parser.fragment
}
});
}, [ dispatchFriendListState ]);
2021-06-23 06:25:30 +02:00
const onFriendListUpdateEvent = useCallback((event: FriendListUpdateEvent) =>
{
const parser = event.getParser();
dispatchFriendListState({
type: FriendListActions.PROCESS_UPDATE,
payload: {
update: parser
}
});
}, [ dispatchFriendListState ]);
2021-04-22 09:11:27 +02:00
CreateMessageHook(MessengerInitEvent, onMessengerInitEvent);
2021-06-23 05:43:37 +02:00
CreateMessageHook(FriendListFragmentEvent, onFriendListFragmentEvent);
2021-06-23 06:25:30 +02:00
CreateMessageHook(FriendListUpdateEvent, onFriendListUpdateEvent);
2021-04-22 08:54:49 +02:00
return null;
}