nitro-react/src/components/mod-tools/ModToolsMessageHandler.tsx

258 lines
9.0 KiB
TypeScript
Raw Normal View History

2021-10-21 06:47:01 +02:00
import { CfhSanctionMessageEvent, CfhTopicsInitEvent, IssueDeletedMessageEvent, IssueInfoMessageEvent, IssuePickFailedMessageEvent, ModeratorActionResultMessageEvent, ModeratorInitMessageEvent, ModeratorToolPreferencesEvent, RoomEngineEvent } from '@nitrots/nitro-renderer';
2021-10-21 05:32:44 +02:00
import { FC, useCallback } from 'react';
2022-03-12 06:23:57 +01:00
import { NotificationAlertType, NotificationUtilities, PlaySound, SoundNames } from '../../api';
2022-03-03 10:11:31 +01:00
import { ModToolsEvent, ModToolsOpenRoomChatlogEvent, ModToolsOpenRoomInfoEvent, ModToolsOpenUserChatlogEvent, ModToolsOpenUserInfoEvent } from '../../events';
import { UseMessageEventHook, UseRoomEngineEvent, UseUiEvent } from '../../hooks';
2021-10-25 04:54:54 +02:00
import { SetCfhCategories } from './common/GetCFHCategories';
2022-02-21 05:28:21 +01:00
import { useModToolsContext } from './ModToolsContext';
2021-10-21 05:32:44 +02:00
import { ModToolsActions } from './reducers/ModToolsReducer';
export const ModToolsMessageHandler: FC<{}> = props =>
{
const { modToolsState = null, dispatchModToolsState = null } = useModToolsContext();
2021-10-21 05:45:21 +02:00
const { openRooms = null, openRoomChatlogs = null, openUserChatlogs = null, openUserInfo = null, tickets= null } = modToolsState;
2021-10-21 05:32:44 +02:00
const onModeratorInitMessageEvent = useCallback((event: ModeratorInitMessageEvent) =>
{
const parser = event.getParser();
if(!parser) return;
const data = parser.data;
dispatchModToolsState({
type: ModToolsActions.SET_INIT_DATA,
payload: {
settings: data
}
});
dispatchModToolsState({
type: ModToolsActions.SET_TICKETS,
payload: {
tickets: data.issues
}
});
2022-01-04 09:20:52 +01:00
2021-10-21 05:32:44 +02:00
}, [dispatchModToolsState]);
const onIssueInfoMessageEvent = useCallback((event: IssueInfoMessageEvent) =>
{
const parser = event.getParser();
if(!parser) return;
const newTickets = tickets ? Array.from(tickets) : [];
const existingIndex = newTickets.findIndex( entry => entry.issueId === parser.issueData.issueId)
2021-11-26 04:32:51 +01:00
2021-10-21 05:32:44 +02:00
if(existingIndex > -1)
{
newTickets[existingIndex] = parser.issueData;
}
else
{
newTickets.push(parser.issueData);
2022-03-07 04:15:49 +01:00
PlaySound(SoundNames.MODTOOLS_NEW_TICKET);
2021-10-21 05:32:44 +02:00
}
dispatchModToolsState({
type: ModToolsActions.SET_TICKETS,
payload: {
tickets: newTickets
}
2021-10-21 06:47:01 +02:00
});
}, [dispatchModToolsState, tickets]);
const onModeratorToolPreferencesEvent = useCallback((event: ModeratorToolPreferencesEvent) =>
{
const parser = event.getParser();
if(!parser) return;
}, []);
const onIssuePickFailedMessageEvent = useCallback((event: IssuePickFailedMessageEvent) =>
{
const parser = event.getParser();
if(!parser) return;
2022-01-04 09:20:52 +01:00
NotificationUtilities.simpleAlert('Failed to pick issue', NotificationAlertType.DEFAULT, null, null, 'Error')
2021-10-21 06:47:01 +02:00
}, []);
const onIssueDeletedMessageEvent = useCallback((event: IssueDeletedMessageEvent) =>
{
const parser = event.getParser();
if(!parser) return;
const newTickets = tickets ? Array.from(tickets) : [];
const existingIndex = newTickets.findIndex( entry => entry.issueId === parser.issueId);
if(existingIndex === -1) return;
newTickets.splice(existingIndex, 1);
dispatchModToolsState({
type: ModToolsActions.SET_TICKETS,
payload: {
tickets: newTickets
}
});
2021-10-21 05:32:44 +02:00
}, [dispatchModToolsState, tickets]);
2021-10-21 06:47:01 +02:00
const onModeratorActionResultMessageEvent = useCallback((event: ModeratorActionResultMessageEvent) =>
{
const parser = event.getParser();
if(!parser) return;
if(parser.success)
{
2022-01-04 09:20:52 +01:00
NotificationUtilities.simpleAlert('Moderation action was successfull', NotificationAlertType.MODERATION, null, null, 'Success');
2021-10-21 06:47:01 +02:00
}
else
{
2022-01-04 09:20:52 +01:00
NotificationUtilities.simpleAlert('There was a problem applying tht moderation action', NotificationAlertType.MODERATION, null, null, 'Error');
2021-10-21 06:47:01 +02:00
}
}, []);
const onCfhTopicsInitEvent = useCallback((event: CfhTopicsInitEvent) =>
{
const parser = event.getParser();
if(!parser) return;
2021-10-21 09:06:12 +02:00
const categories = parser.callForHelpCategories;
dispatchModToolsState({
type: ModToolsActions.SET_CFH_CATEGORIES,
payload: {
cfhCategories: categories
}
});
2021-10-25 04:54:54 +02:00
SetCfhCategories(categories);
2021-10-21 06:47:01 +02:00
2021-10-21 09:06:12 +02:00
}, [dispatchModToolsState]);
2021-10-21 06:47:01 +02:00
const onCfhSanctionMessageEvent = useCallback((event: CfhSanctionMessageEvent) =>
{
const parser = event.getParser();
if(!parser) return;
2022-01-04 09:20:52 +01:00
// todo: update sanction data
2021-10-21 06:47:01 +02:00
}, []);
2022-03-03 10:11:31 +01:00
UseMessageEventHook(ModeratorInitMessageEvent, onModeratorInitMessageEvent);
UseMessageEventHook(IssueInfoMessageEvent, onIssueInfoMessageEvent);
UseMessageEventHook(ModeratorToolPreferencesEvent, onModeratorToolPreferencesEvent);
UseMessageEventHook(IssuePickFailedMessageEvent, onIssuePickFailedMessageEvent);
UseMessageEventHook(IssueDeletedMessageEvent, onIssueDeletedMessageEvent);
UseMessageEventHook(ModeratorActionResultMessageEvent, onModeratorActionResultMessageEvent);
UseMessageEventHook(CfhTopicsInitEvent, onCfhTopicsInitEvent);
UseMessageEventHook(CfhSanctionMessageEvent, onCfhSanctionMessageEvent);
2021-10-21 05:32:44 +02:00
2021-10-21 05:45:21 +02:00
const onRoomEngineEvent = useCallback((event: RoomEngineEvent) =>
{
switch(event.type)
{
case RoomEngineEvent.INITIALIZED:
dispatchModToolsState({
type: ModToolsActions.SET_CURRENT_ROOM_ID,
payload: {
currentRoomId: event.roomId
}
});
return;
case RoomEngineEvent.DISPOSED:
dispatchModToolsState({
type: ModToolsActions.SET_CURRENT_ROOM_ID,
payload: {
currentRoomId: null
}
});
return;
}
}, [ dispatchModToolsState ]);
2022-03-03 10:11:31 +01:00
UseRoomEngineEvent(RoomEngineEvent.INITIALIZED, onRoomEngineEvent);
UseRoomEngineEvent(RoomEngineEvent.DISPOSED, onRoomEngineEvent);
2021-10-21 05:45:21 +02:00
const onModToolsEvent = useCallback((event: ModToolsEvent) =>
{
switch(event.type)
{
case ModToolsEvent.OPEN_ROOM_INFO: {
const castedEvent = (event as ModToolsOpenRoomInfoEvent);
if(openRooms && openRooms.includes(castedEvent.roomId)) return;
const rooms = openRooms || [];
dispatchModToolsState({
type: ModToolsActions.SET_OPEN_ROOMS,
payload: {
openRooms: [...rooms, castedEvent.roomId]
}
});
return;
}
case ModToolsEvent.OPEN_ROOM_CHATLOG: {
const castedEvent = (event as ModToolsOpenRoomChatlogEvent);
if(openRoomChatlogs && openRoomChatlogs.includes(castedEvent.roomId)) return;
const chatlogs = openRoomChatlogs || [];
dispatchModToolsState({
type: ModToolsActions.SET_OPEN_ROOM_CHATLOGS,
payload: {
openRoomChatlogs: [...chatlogs, castedEvent.roomId]
}
});
return;
}
case ModToolsEvent.OPEN_USER_INFO: {
const castedEvent = (event as ModToolsOpenUserInfoEvent);
if(openUserInfo && openUserInfo.includes(castedEvent.userId)) return;
const userInfo = openUserInfo || [];
dispatchModToolsState({
type: ModToolsActions.SET_OPEN_USERINFO,
payload: {
openUserInfo: [...userInfo, castedEvent.userId]
}
});
return;
}
case ModToolsEvent.OPEN_USER_CHATLOG: {
const castedEvent = (event as ModToolsOpenUserChatlogEvent);
if(openUserChatlogs && openUserChatlogs.includes(castedEvent.userId)) return;
const userChatlog = openUserChatlogs || [];
dispatchModToolsState({
type: ModToolsActions.SET_OPEN_USER_CHATLOGS,
payload: {
openUserChatlogs: [...userChatlog, castedEvent.userId]
}
});
return;
}
}
}, [openRooms, dispatchModToolsState, openRoomChatlogs, openUserInfo, openUserChatlogs]);
2022-03-03 10:11:31 +01:00
UseUiEvent(ModToolsEvent.OPEN_ROOM_INFO, onModToolsEvent);
UseUiEvent(ModToolsEvent.OPEN_ROOM_CHATLOG, onModToolsEvent);
UseUiEvent(ModToolsEvent.OPEN_USER_INFO, onModToolsEvent);
UseUiEvent(ModToolsEvent.OPEN_USER_CHATLOG, onModToolsEvent);
2021-10-21 05:45:21 +02:00
2021-10-21 05:32:44 +02:00
return null;
}