import { CloseIssuesMessageComposer, ReleaseIssuesMessageComposer } from '@nitrots/nitro-renderer'; import { FC, useState } from 'react'; import { FaBan, FaCheck, FaCommentDots, FaExternalLinkAlt, FaSignOutAlt, FaTrashAlt } from 'react-icons/fa'; import { GetIssueCategoryName, LocalizeText, SendMessageComposer } from '../../../../api'; import { Button, DraggableWindowPosition, NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../common'; import { useModTools } from '../../../../hooks'; import { CfhChatlogView } from './CfhChatlogView'; interface IssueInfoViewProps { issueId: number; onIssueInfoClosed(issueId: number): void; } const Field: FC<{ label: string; children: React.ReactNode }> = ({ label, children }) => ( <>
{ label }
{ children || - }
); export const ModToolsIssueInfoView: FC = props => { const { issueId = null, onIssueInfoClosed = null } = props; const [ cfhChatlogOpen, setCfhChatlogOpen ] = useState(false); const { tickets = [], openUserInfo = null } = useModTools(); const ticket = tickets.find(issue => (issue.issueId === issueId)); const releaseIssue = () => { SendMessageComposer(new ReleaseIssuesMessageComposer([ issueId ])); onIssueInfoClosed(issueId); }; const closeIssue = (resolutionType: number) => { SendMessageComposer(new CloseIssuesMessageComposer([ issueId ], resolutionType)); onIssueInfoClosed(issueId); }; if(!ticket) return null; return ( <> onIssueInfoClosed(issueId) } /> {/* Issue header */}
{ LocalizeText('modtools.tickets.issue.label', [ 'issueId' ], [ issueId.toString() ]) }
{ GetIssueCategoryName(ticket.categoryId) }
{ LocalizeText('help.cfh.topic.' + ticket.reportedCategoryId) }
{/* Details */}
{ LocalizeText('modtools.tickets.issue.details') }
{ GetIssueCategoryName(ticket.categoryId) } { LocalizeText('help.cfh.topic.' + ticket.reportedCategoryId) } { ticket.message }
{/* Tools */} {/* Resolution buttons */}
{ LocalizeText('modtools.tickets.issue.resolve.heading') }
{ cfhChatlogOpen && setCfhChatlogOpen(false) } /> } ); };