import { PostMessageMessageComposer, PostThreadMessageEvent } from '@nitrots/nitro-renderer'; import { FC, useCallback, useState } from 'react'; import { LocalizeText, SendMessageComposer } from '../../../../api'; import { Button, Column, Flex, Text } from '../../../../common'; import { useMessageEvent, useNotification } from '../../../../hooks'; import { ExtendedForumData } from '@nitrots/nitro-renderer'; interface GroupForumNewThreadViewProps { groupId: number; forumData: ExtendedForumData; onBack: () => void; onThreadCreated: (threadId: number) => void; } export const GroupForumNewThreadView: FC = props => { const { groupId = 0, forumData = null, onBack = null, onThreadCreated = null } = props; const effectiveGroupId = forumData?.groupId || groupId; const [ subject, setSubject ] = useState(''); const [ message, setMessage ] = useState(''); const [ isSubmitting, setIsSubmitting ] = useState(false); const { simpleAlert = null } = useNotification(); useMessageEvent(PostThreadMessageEvent, event => { const parser = event.getParser(); if(parser.groupId !== effectiveGroupId) return; setIsSubmitting(false); setSubject(''); setMessage(''); if(onThreadCreated) onThreadCreated(parser.thread.threadId); }); const submitThread = useCallback(() => { if(subject.trim().length < 10) { simpleAlert(LocalizeText('groupforum.compose.subject_too_short')); return; } if(message.trim().length < 10) { simpleAlert(LocalizeText('groupforum.compose.message_too_short')); return; } setIsSubmitting(true); // PostMessageMessageComposer with threadId=0 creates a new thread // params: groupId, threadId (0 for new), subject, message SendMessageComposer(new PostMessageMessageComposer(effectiveGroupId, 0, subject.trim(), message.trim())); }, [ effectiveGroupId, subject, message, simpleAlert ]); return ( « { LocalizeText('groupforum.view.back') } { LocalizeText('messageboard.message.thread.subject') } setSubject(e.target.value) } /> { LocalizeText('messageboard.forum.compose.message.header') }