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';
|
2021-11-26 06:16:00 +01:00
|
|
|
import { MODTOOLS_NEW_TICKET, PlaySound } from '../../api/utils/PlaySound';
|
2021-10-21 05:45:21 +02:00
|
|
|
import { ModToolsEvent } from '../../events/mod-tools/ModToolsEvent';
|
|
|
|
import { ModToolsOpenRoomChatlogEvent } from '../../events/mod-tools/ModToolsOpenRoomChatlogEvent';
|
|
|
|
import { ModToolsOpenRoomInfoEvent } from '../../events/mod-tools/ModToolsOpenRoomInfoEvent';
|
|
|
|
import { ModToolsOpenUserChatlogEvent } from '../../events/mod-tools/ModToolsOpenUserChatlogEvent';
|
|
|
|
import { ModToolsOpenUserInfoEvent } from '../../events/mod-tools/ModToolsOpenUserInfoEvent';
|
2022-01-04 09:20:52 +01:00
|
|
|
import { CreateMessageHook, useRoomEngineEvent, useUiEvent } from '../../hooks';
|
|
|
|
import { NotificationAlertType } from '../notification-center/common/NotificationAlertType';
|
|
|
|
import { NotificationUtilities } from '../notification-center/common/NotificationUtilities';
|
2021-10-25 04:54:54 +02:00
|
|
|
import { SetCfhCategories } from './common/GetCFHCategories';
|
2021-10-21 05:32:44 +02:00
|
|
|
import { useModToolsContext } from './context/ModToolsContext';
|
|
|
|
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);
|
2021-11-26 06:16:00 +01:00
|
|
|
PlaySound(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
|
|
|
}, []);
|
|
|
|
|
2021-10-21 05:32:44 +02:00
|
|
|
CreateMessageHook(ModeratorInitMessageEvent, onModeratorInitMessageEvent);
|
|
|
|
CreateMessageHook(IssueInfoMessageEvent, onIssueInfoMessageEvent);
|
2021-10-21 06:47:01 +02:00
|
|
|
CreateMessageHook(ModeratorToolPreferencesEvent, onModeratorToolPreferencesEvent);
|
|
|
|
CreateMessageHook(IssuePickFailedMessageEvent, onIssuePickFailedMessageEvent);
|
|
|
|
CreateMessageHook(IssueDeletedMessageEvent, onIssueDeletedMessageEvent);
|
|
|
|
CreateMessageHook(ModeratorActionResultMessageEvent, onModeratorActionResultMessageEvent);
|
|
|
|
CreateMessageHook(CfhTopicsInitEvent, onCfhTopicsInitEvent);
|
|
|
|
CreateMessageHook(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 ]);
|
|
|
|
|
|
|
|
useRoomEngineEvent(RoomEngineEvent.INITIALIZED, onRoomEngineEvent);
|
|
|
|
useRoomEngineEvent(RoomEngineEvent.DISPOSED, onRoomEngineEvent);
|
|
|
|
|
|
|
|
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]);
|
|
|
|
|
|
|
|
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:32:44 +02:00
|
|
|
return null;
|
|
|
|
}
|