// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React, {useCallback} from 'react'; import {updateDraftBoRConfig, updateDraftPriority} from '@actions/local/draft'; import SendDraft from '@components/draft_scheduled_post/draft_scheduled_post_actions/send_draft'; import DraftInput from '@components/post_draft/draft_input/'; import {PostPriorityType} from '@constants/post'; import {useServerUrl} from '@context/server'; import {useHandleSendMessage} from '@hooks/handle_send_message'; import type {DraftType} from '@constants/draft'; import type CustomEmojiModel from '@typings/database/models/servers/custom_emoji'; import type {AvailableScreens} from '@typings/screens/navigation'; type Props = { testID?: string; channelId: string; channelType?: ChannelType; channelName?: string; rootId: string; canShowPostPriority?: boolean; setIsFocused: (isFocused: boolean) => void; // From database currentUserId: string; cursorPosition: number; enableConfirmNotificationsToChannel?: boolean; maxMessageLength: number; membersCount?: number; useChannelMentions: boolean; userIsOutOfOffice: boolean; customEmojis: CustomEmojiModel[]; // DRAFT Handler value: string; files: FileInfo[]; clearDraft: () => void; updateValue: React.Dispatch>; updateCursorPosition: React.Dispatch>; updatePostInputTop: (top: number) => void; addFiles: (file: FileInfo[]) => void; uploadFileError: React.ReactNode; persistentNotificationInterval: number; persistentNotificationMaxRecipients: number; postPriority: PostPriority; postBoRConfig?: PostBoRConfig; draftType?: DraftType; postId?: string; bottomSheetId?: AvailableScreens; channelDisplayName?: string; isFromDraftView?: boolean; draftReceiverUserName?: string; onPostCreated?: (postId: string) => void; location?: AvailableScreens; } export const INITIAL_PRIORITY = { priority: PostPriorityType.STANDARD, requested_ack: false, persistent_notifications: false, }; export default function SendHandler({ testID, channelId, channelType, channelName, channelDisplayName, currentUserId, enableConfirmNotificationsToChannel, files, maxMessageLength, membersCount = 0, cursorPosition, rootId, canShowPostPriority, useChannelMentions, userIsOutOfOffice, customEmojis, value, clearDraft, updateValue, addFiles, uploadFileError, updateCursorPosition, updatePostInputTop, setIsFocused, persistentNotificationInterval, persistentNotificationMaxRecipients, postPriority, bottomSheetId, draftReceiverUserName, isFromDraftView, draftType, postId, onPostCreated, postBoRConfig, location, }: Props) { const serverUrl = useServerUrl(); const handlePostPriority = useCallback((priority: PostPriority) => { updateDraftPriority(serverUrl, channelId, rootId, priority); }, [serverUrl, channelId, rootId]); const handlePostBoRStatus = useCallback((config: PostBoRConfig) => { updateDraftBoRConfig(serverUrl, channelId, rootId, config); }, [channelId, rootId, serverUrl]); const {handleSendMessage, canSend} = useHandleSendMessage({ value, channelId, rootId, files, maxMessageLength, customEmojis, enableConfirmNotificationsToChannel, useChannelMentions, membersCount, userIsOutOfOffice, currentUserId, channelType, postPriority, clearDraft, onPostCreated, postBoRConfig, }); if (isFromDraftView) { return ( ); } return ( ); }