diff --git a/src/views/mod-tools/views/tickets/ModToolsTicketsView.tsx b/src/views/mod-tools/views/tickets/ModToolsTicketsView.tsx index 38b7986b..970d4f6f 100644 --- a/src/views/mod-tools/views/tickets/ModToolsTicketsView.tsx +++ b/src/views/mod-tools/views/tickets/ModToolsTicketsView.tsx @@ -4,7 +4,9 @@ import { GetSessionDataManager } from '../../../../api'; import { NitroCardContentView, NitroCardHeaderView, NitroCardTabsItemView, NitroCardTabsView, NitroCardView } from '../../../../layout'; import { useModToolsContext } from '../../context/ModToolsContext'; import { ModToolsTicketsViewProps } from './ModToolsTicketsView.types'; +import { ModToolsMyIssuesTabView } from './my-issues/ModToolsMyIssuesTabView'; import { ModToolsOpenIssuesTabView } from './open-issues/ModToolsOpenIssuesTabView'; +import { ModToolsPickedIssuesTabView } from './picked-issues/ModToolsPickedIssuesTabView'; const TABS: string[] = [ 'Open Issues', @@ -45,9 +47,11 @@ export const ModToolsTicketsView: FC = props => switch(currentTab) { case 0: return ; + case 1: return ; + case 2: return ; default: return null; } - }, [currentTab, openIssues]); + }, [currentTab, myIssues, openIssues, pickedIssues]); return ( diff --git a/src/views/mod-tools/views/tickets/my-issues/ModToolsMyIssuesTabView.tsx b/src/views/mod-tools/views/tickets/my-issues/ModToolsMyIssuesTabView.tsx new file mode 100644 index 00000000..784ed52f --- /dev/null +++ b/src/views/mod-tools/views/tickets/my-issues/ModToolsMyIssuesTabView.tsx @@ -0,0 +1,53 @@ +import { FC } from 'react'; +import { AutoSizer, List, ListRowProps, ListRowRenderer } from 'react-virtualized'; +import { ModToolsMyIssuesTabViewProps } from './ModToolsMyIssuesTabView.types'; + +export const ModToolsMyIssuesTabView: FC = props => +{ + const { myIssues = null } = props; + + const RowRenderer: ListRowRenderer = (props: ListRowProps) => + { + const item = myIssues[props.index]; + + return ( +
+
{item.categoryId}
+
{item.reportedUserName}
+
{item.getOpenTime(new Date().getTime())}
+
+ +
+
+ ); + }; + + return ( + <> +
+
Type
+
Room/Player
+
Opened
+
+
+
+ + {({ height, width }) => + { + return ( + + ) + } + } + +
+ + ); +} diff --git a/src/views/mod-tools/views/tickets/my-issues/ModToolsMyIssuesTabView.types.ts b/src/views/mod-tools/views/tickets/my-issues/ModToolsMyIssuesTabView.types.ts new file mode 100644 index 00000000..15935fc9 --- /dev/null +++ b/src/views/mod-tools/views/tickets/my-issues/ModToolsMyIssuesTabView.types.ts @@ -0,0 +1,6 @@ +import { IssueMessageData } from '@nitrots/nitro-renderer'; + +export interface ModToolsMyIssuesTabViewProps +{ + myIssues: IssueMessageData[]; +} diff --git a/src/views/mod-tools/views/tickets/open-issues/ModToolsOpenIssuesTabView.tsx b/src/views/mod-tools/views/tickets/open-issues/ModToolsOpenIssuesTabView.tsx index d6ebe1bc..76db3355 100644 --- a/src/views/mod-tools/views/tickets/open-issues/ModToolsOpenIssuesTabView.tsx +++ b/src/views/mod-tools/views/tickets/open-issues/ModToolsOpenIssuesTabView.tsx @@ -1,11 +1,53 @@ import { FC } from 'react'; +import { AutoSizer, List, ListRowProps, ListRowRenderer } from 'react-virtualized'; import { ModToolsOpenIssuesTabViewProps } from './ModToolsOpenIssuesTabView.types'; export const ModToolsOpenIssuesTabView: FC = props => { const { openIssues = null } = props; + const RowRenderer: ListRowRenderer = (props: ListRowProps) => + { + const item = openIssues[props.index]; + + return ( +
+
{item.categoryId}
+
{item.reportedUserName}
+
{item.getOpenTime(new Date().getTime())}
+
+ +
+
+ ); + }; + return ( -
{openIssues.length}
+ <> +
+
Type
+
Room/Player
+
Opened
+
+
+
+ + {({ height, width }) => + { + return ( + + ) + } + } + +
+ ); } diff --git a/src/views/mod-tools/views/tickets/picked-issues/ModToolsPickedIssuesTabView.tsx b/src/views/mod-tools/views/tickets/picked-issues/ModToolsPickedIssuesTabView.tsx new file mode 100644 index 00000000..00588ee0 --- /dev/null +++ b/src/views/mod-tools/views/tickets/picked-issues/ModToolsPickedIssuesTabView.tsx @@ -0,0 +1,53 @@ +import { FC } from 'react'; +import { AutoSizer, List, ListRowProps, ListRowRenderer } from 'react-virtualized'; +import { ModToolsPickedIssuesTabViewProps } from './ModToolsPickedIssuesTabView.types'; + +export const ModToolsPickedIssuesTabView: FC = props => +{ + const { pickedIssues = null } = props; + + const RowRenderer: ListRowRenderer = (props: ListRowProps) => + { + const item = pickedIssues[props.index]; + + return ( +
+
{item.categoryId}
+
{item.reportedUserName}
+
{item.getOpenTime(new Date().getTime())}
+
+ {item.pickerUserName} +
+
+ ); + }; + + return ( + <> +
+
Type
+
Room/Player
+
Opened
+
Picker
+
+
+ + {({ height, width }) => + { + return ( + + ) + } + } + +
+ + ); +} diff --git a/src/views/mod-tools/views/tickets/picked-issues/ModToolsPickedIssuesTabView.types.ts b/src/views/mod-tools/views/tickets/picked-issues/ModToolsPickedIssuesTabView.types.ts new file mode 100644 index 00000000..c69b1772 --- /dev/null +++ b/src/views/mod-tools/views/tickets/picked-issues/ModToolsPickedIssuesTabView.types.ts @@ -0,0 +1,6 @@ +import { IssueMessageData } from '@nitrots/nitro-renderer'; + +export interface ModToolsPickedIssuesTabViewProps +{ + pickedIssues: IssueMessageData[]; +} diff --git a/src/views/mod-tools/views/user/user-info/ModToolsUserView.tsx b/src/views/mod-tools/views/user/user-info/ModToolsUserView.tsx index ab1fc54e..24f8c876 100644 --- a/src/views/mod-tools/views/user/user-info/ModToolsUserView.tsx +++ b/src/views/mod-tools/views/user/user-info/ModToolsUserView.tsx @@ -103,7 +103,7 @@ export const ModToolsUserView: FC = props => return ( <> - + onCloseClick() } /> @@ -143,11 +143,11 @@ export const ModToolsUserView: FC = props => { sendMessageVisible && - setSendMessageVisible(false) } /> } + setSendMessageVisible(false) } /> } { modActionVisible && - setModActionVisible(false) } /> } + setModActionVisible(false) } /> } { roomVisitsVisible && - setRoomVisitsVisible(false) } /> } + setRoomVisitsVisible(false) } /> } ); } diff --git a/src/views/mod-tools/views/user/user-mod-action/ModToolsUserModActionView.tsx b/src/views/mod-tools/views/user/user-mod-action/ModToolsUserModActionView.tsx index 59e244f8..0afe70cd 100644 --- a/src/views/mod-tools/views/user/user-mod-action/ModToolsUserModActionView.tsx +++ b/src/views/mod-tools/views/user/user-mod-action/ModToolsUserModActionView.tsx @@ -49,13 +49,20 @@ export const ModToolsUserModActionView: FC = pro return values; }, [cfhCategories]); + const sendDefaultSanction = useCallback(() => + { + SendMessageHook(new DefaultSanctionMessageComposer(user.userId, selectedTopic, message)); + onCloseClick(); + }, [message, onCloseClick, selectedTopic, user.userId]); + const sendSanction = useCallback(() => { - if(selectedTopic === -1) + if( (selectedTopic === -1) || (selectedAction === -1) ) { - dispatchUiEvent(new NotificationAlertEvent(['You must select a CFH topic'], null, null, null, 'Error', null)); + dispatchUiEvent(new NotificationAlertEvent(['You must select a CFH topic and Sanction'], null, null, null, 'Error', null)); return; } + if(!settings || !settings.cfhPermission) { dispatchUiEvent(new NotificationAlertEvent(['You do not have permission to do this'], null, null, null, 'Error', null)); @@ -71,15 +78,14 @@ export const ModToolsUserModActionView: FC = pro return; } - const messageOrDefault = message.trim().length === 0 ? LocalizeText('help.cfh.topic.' + category.id) : message; - - if(!sanction) // send default sanction + if(!sanction) { - SendMessageHook(new DefaultSanctionMessageComposer(user.userId, category.id, messageOrDefault)); - onCloseClick(null); + dispatchUiEvent(new NotificationAlertEvent(['You must select a sanction'], null, null, null, 'Error', null)); return; } + const messageOrDefault = message.trim().length === 0 ? LocalizeText('help.cfh.topic.' + category.id) : message; + switch(sanction.actionType) { case ModActionDefinition.ALERT: @@ -147,12 +153,12 @@ export const ModToolsUserModActionView: FC = pro break; } - onCloseClick(null); + onCloseClick(); }, [message, onCloseClick, selectedAction, selectedTopic, settings, topics, user.userId]); return ( - + onCloseClick() } /> { user && <> @@ -182,7 +188,10 @@ export const ModToolsUserModActionView: FC = pro
- +
+ + +
} diff --git a/src/views/mod-tools/views/user/user-mod-action/ModToolsUserModActionView.types.ts b/src/views/mod-tools/views/user/user-mod-action/ModToolsUserModActionView.types.ts index 28714abc..2025d10d 100644 --- a/src/views/mod-tools/views/user/user-mod-action/ModToolsUserModActionView.types.ts +++ b/src/views/mod-tools/views/user/user-mod-action/ModToolsUserModActionView.types.ts @@ -1,8 +1,7 @@ -import { MouseEvent } from 'react'; import { ISelectedUser } from '../../../utils/ISelectedUser'; export interface ModToolsUserModActionViewProps { user: ISelectedUser; - onCloseClick: (event: MouseEvent) => void; + onCloseClick: () => void; } diff --git a/src/views/mod-tools/views/user/user-room-visits/ModToolsUserRoomVisitsView.tsx b/src/views/mod-tools/views/user/user-room-visits/ModToolsUserRoomVisitsView.tsx index c79117dc..4f09828f 100644 --- a/src/views/mod-tools/views/user/user-room-visits/ModToolsUserRoomVisitsView.tsx +++ b/src/views/mod-tools/views/user/user-room-visits/ModToolsUserRoomVisitsView.tsx @@ -42,7 +42,7 @@ export const ModToolsUserRoomVisitsView: FC = p return ( - + onCloseClick() } /> {roomVisitData &&
diff --git a/src/views/mod-tools/views/user/user-room-visits/ModToolsUserRoomVisitsView.types.ts b/src/views/mod-tools/views/user/user-room-visits/ModToolsUserRoomVisitsView.types.ts index 4bbcaf40..a5188a3c 100644 --- a/src/views/mod-tools/views/user/user-room-visits/ModToolsUserRoomVisitsView.types.ts +++ b/src/views/mod-tools/views/user/user-room-visits/ModToolsUserRoomVisitsView.types.ts @@ -1,7 +1,6 @@ -import { MouseEvent } from 'react'; export interface ModToolsUserRoomVisitsViewProps { userId: number; - onCloseClick: (event: MouseEvent) => void; + onCloseClick: () => void; } diff --git a/src/views/mod-tools/views/user/user-sendmessage/ModToolsSendUserMessage.types.ts b/src/views/mod-tools/views/user/user-sendmessage/ModToolsSendUserMessage.types.ts index e8f071d8..617945f0 100644 --- a/src/views/mod-tools/views/user/user-sendmessage/ModToolsSendUserMessage.types.ts +++ b/src/views/mod-tools/views/user/user-sendmessage/ModToolsSendUserMessage.types.ts @@ -1,8 +1,7 @@ -import { MouseEvent } from 'react'; import { ISelectedUser } from '../../../utils/ISelectedUser'; export interface ModToolsSendUserMessageViewProps { user: ISelectedUser; - onCloseClick: (event: MouseEvent) => void; + onCloseClick: () => void; } diff --git a/src/views/mod-tools/views/user/user-sendmessage/ModToolsSendUserMessageView.tsx b/src/views/mod-tools/views/user/user-sendmessage/ModToolsSendUserMessageView.tsx index 80742cbe..a332b426 100644 --- a/src/views/mod-tools/views/user/user-sendmessage/ModToolsSendUserMessageView.tsx +++ b/src/views/mod-tools/views/user/user-sendmessage/ModToolsSendUserMessageView.tsx @@ -1,6 +1,7 @@ import { ModMessageMessageComposer } from '@nitrots/nitro-renderer'; import { FC, useCallback, useState } from 'react'; -import { SendMessageHook } from '../../../../../hooks'; +import { NotificationAlertEvent } from '../../../../../events'; +import { dispatchUiEvent, SendMessageHook } from '../../../../../hooks'; import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../../layout'; import { ModToolsSendUserMessageViewProps } from './ModToolsSendUserMessage.types'; @@ -12,16 +13,20 @@ export const ModToolsSendUserMessageView: FC = const sendMessage = useCallback(() => { - if(message.trim().length === 0) return; + if(message.trim().length === 0) + { + dispatchUiEvent(new NotificationAlertEvent(['Please write a message to user.'], null, null, null, 'Error', null)); + return; + } SendMessageHook(new ModMessageMessageComposer(user.userId, message, -999)); - onCloseClick(null); + onCloseClick(); }, [message, onCloseClick, user.userId]); return ( - + onCloseClick() } /> {user && <>
Message To: {user.username}