diff --git a/src/views/mod-tools/ModToolsMessageHandler.tsx b/src/views/mod-tools/ModToolsMessageHandler.tsx new file mode 100644 index 00000000..b9bae911 --- /dev/null +++ b/src/views/mod-tools/ModToolsMessageHandler.tsx @@ -0,0 +1,67 @@ +import { IssueInfoMessageEvent, ModeratorInitMessageEvent } from '@nitrots/nitro-renderer'; +import { FC, useCallback } from 'react'; +import { CreateMessageHook } from '../../hooks'; +import { useModToolsContext } from './context/ModToolsContext'; +import { ModToolsActions } from './reducers/ModToolsReducer'; + +export const ModToolsMessageHandler: FC<{}> = props => +{ + const { modToolsState = null, dispatchModToolsState = null } = useModToolsContext(); + const { tickets= null } = modToolsState; + + 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 + } + }); + + console.log(parser); + }, [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) + + if(existingIndex > -1) + { + newTickets[existingIndex] = parser.issueData; + } + else + { + newTickets.push(parser.issueData); + } + + dispatchModToolsState({ + type: ModToolsActions.SET_TICKETS, + payload: { + tickets: newTickets + } + }) + }, [dispatchModToolsState, tickets]); + + CreateMessageHook(ModeratorInitMessageEvent, onModeratorInitMessageEvent); + CreateMessageHook(IssueInfoMessageEvent, onIssueInfoMessageEvent); + + return null; +} diff --git a/src/views/mod-tools/ModToolsView.tsx b/src/views/mod-tools/ModToolsView.tsx index 4f73d340..5f3ba8d5 100644 --- a/src/views/mod-tools/ModToolsView.tsx +++ b/src/views/mod-tools/ModToolsView.tsx @@ -1,4 +1,4 @@ -import { ModeratorInitMessageEvent, RoomEngineEvent, RoomEngineObjectEvent, RoomObjectCategory } from '@nitrots/nitro-renderer'; +import { RoomEngineEvent, RoomEngineObjectEvent, RoomObjectCategory } from '@nitrots/nitro-renderer'; import { FC, useCallback, useReducer, useState } from 'react'; import { GetRoomSession } from '../../api'; import { ModToolsEvent } from '../../events/mod-tools/ModToolsEvent'; @@ -6,11 +6,11 @@ import { ModToolsOpenRoomChatlogEvent } from '../../events/mod-tools/ModToolsOpe import { ModToolsOpenRoomInfoEvent } from '../../events/mod-tools/ModToolsOpenRoomInfoEvent'; import { ModToolsOpenUserChatlogEvent } from '../../events/mod-tools/ModToolsOpenUserChatlogEvent'; import { ModToolsOpenUserInfoEvent } from '../../events/mod-tools/ModToolsOpenUserInfoEvent'; -import { CreateMessageHook } from '../../hooks'; import { useRoomEngineEvent } from '../../hooks/events'; import { dispatchUiEvent, useUiEvent } from '../../hooks/events/ui/ui-event'; import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../layout'; import { ModToolsContextProvider } from './context/ModToolsContext'; +import { ModToolsMessageHandler } from './ModToolsMessageHandler'; import { ModToolsViewProps } from './ModToolsView.types'; import { initialModTools, ModToolsActions, ModToolsReducer } from './reducers/ModToolsReducer'; import { ISelectedUser } from './utils/ISelectedUser'; @@ -24,7 +24,7 @@ export const ModToolsView: FC = props => { const [ isVisible, setIsVisible ] = useState(false); const [ modToolsState, dispatchModToolsState ] = useReducer(ModToolsReducer, initialModTools); - const { currentRoomId = null, openRooms = null, openRoomChatlogs = null, openUserChatlogs = null, openUserInfo = null } = modToolsState; + const { currentRoomId = null, openRooms = null, openRoomChatlogs = null, openUserChatlogs = null, openUserInfo = null, tickets = null } = modToolsState; const [ selectedUser, setSelectedUser] = useState(null); const [ isTicketsVisible, setIsTicketsVisible ] = useState(false); @@ -155,25 +155,6 @@ export const ModToolsView: FC = props => useRoomEngineEvent(RoomEngineObjectEvent.SELECTED, onRoomEngineObjectEvent); - 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 - } - }); - console.log(parser); - }, []); - - CreateMessageHook(ModeratorInitMessageEvent, onModeratorInitMessageEvent); - const handleClick = useCallback((action: string, value?: string) => { if(!action) return; @@ -299,6 +280,7 @@ export const ModToolsView: FC = props => return ( + { isVisible && setIsVisible(false) } /> diff --git a/src/views/mod-tools/reducers/ModToolsReducer.tsx b/src/views/mod-tools/reducers/ModToolsReducer.tsx index e1515e76..ee94db45 100644 --- a/src/views/mod-tools/reducers/ModToolsReducer.tsx +++ b/src/views/mod-tools/reducers/ModToolsReducer.tsx @@ -1,4 +1,4 @@ -import { ModeratorInitData } from '@nitrots/nitro-renderer'; +import { IssueMessageData, ModeratorInitData } from '@nitrots/nitro-renderer'; import { Reducer } from 'react'; export interface IModToolsState @@ -9,6 +9,7 @@ export interface IModToolsState openRoomChatlogs: number[]; openUserInfo: number[]; openUserChatlogs: number[]; + tickets: IssueMessageData[] } export interface IModToolsAction @@ -21,6 +22,7 @@ export interface IModToolsAction openRoomChatlogs?: number[]; openUserInfo?: number[]; openUserChatlogs?: number[]; + tickets?: IssueMessageData[]; } } @@ -32,6 +34,7 @@ export class ModToolsActions public static SET_OPEN_USERINFO: string = 'MTA_SET_OPEN_USERINFO'; public static SET_OPEN_ROOM_CHATLOGS: string = 'MTA_SET_OPEN_CHATLOGS'; public static SET_OPEN_USER_CHATLOGS: string = 'MTA_SET_OPEN_USER_CHATLOGS'; + public static SET_TICKETS: string = 'MTA_SET_TICKETS'; public static RESET_STATE: string = 'MTA_RESET_STATE'; } @@ -41,7 +44,8 @@ export const initialModTools: IModToolsState = { openRooms: null, openRoomChatlogs: null, openUserChatlogs: null, - openUserInfo: null + openUserInfo: null, + tickets: null }; export const ModToolsReducer: Reducer = (state, action) => @@ -78,6 +82,11 @@ export const ModToolsReducer: Reducer = (state, return { ...state, openUserChatlogs }; } + case ModToolsActions.SET_TICKETS: { + const tickets = (action.payload.tickets || state.tickets || null); + + return { ...state, tickets }; + } case ModToolsActions.RESET_STATE: { return { ...initialModTools }; } diff --git a/src/views/mod-tools/views/tickets/ModToolsTicketsView.tsx b/src/views/mod-tools/views/tickets/ModToolsTicketsView.tsx index 6f9471ae..38b7986b 100644 --- a/src/views/mod-tools/views/tickets/ModToolsTicketsView.tsx +++ b/src/views/mod-tools/views/tickets/ModToolsTicketsView.tsx @@ -1,5 +1,6 @@ import { IssueMessageData } from '@nitrots/nitro-renderer'; import { FC, useCallback, useMemo, useState } from 'react'; +import { GetSessionDataManager } from '../../../../api'; import { NitroCardContentView, NitroCardHeaderView, NitroCardTabsItemView, NitroCardTabsView, NitroCardView } from '../../../../layout'; import { useModToolsContext } from '../../context/ModToolsContext'; import { ModToolsTicketsViewProps } from './ModToolsTicketsView.types'; @@ -15,15 +16,29 @@ export const ModToolsTicketsView: FC = props => { const { onCloseClick = null } = props; const { modToolsState = null } = useModToolsContext(); - const { settings = null } = modToolsState; + const { tickets= null } = modToolsState; const [ currentTab, setCurrentTab ] = useState(0); const openIssues = useMemo(() => { - if(!settings) return []; + if(!tickets) return []; - return settings.issues.filter(issue => issue.state === IssueMessageData.STATE_OPEN) - }, [settings]); + return tickets.filter(issue => issue.state === IssueMessageData.STATE_OPEN); + }, [tickets]); + + const myIssues = useMemo(() => + { + if(!tickets) return []; + + return tickets.filter(issue => (issue.state === IssueMessageData.STATE_PICKED) && (issue.pickerUserId === GetSessionDataManager().userId)); + }, [tickets]); + + const pickedIssues = useMemo(() => + { + if(!tickets) return []; + + return tickets.filter(issue => issue.state === IssueMessageData.STATE_PICKED); + }, [tickets]); const CurrentTabComponent = useCallback(() => { @@ -34,8 +49,6 @@ export const ModToolsTicketsView: FC = props => } }, [currentTab, openIssues]); - console.log(settings); - return ( @@ -49,7 +62,7 @@ export const ModToolsTicketsView: FC = props => }) }
- {settings && } +