// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import {PasteInputRef} from '@mattermost/react-native-paste-input'; import React, {useCallback, useRef} from 'react'; import {LayoutChangeEvent, Platform, ScrollView, View} from 'react-native'; import {Edge, SafeAreaView} from 'react-native-safe-area-context'; import PostPriorityLabel from '@components/post_priority/post_priority_label'; import {useTheme} from '@context/theme'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import PostInput from '../post_input'; import QuickActions from '../quick_actions'; import SendAction from '../send_action'; import Typing from '../typing'; import Uploads from '../uploads'; type Props = { testID?: string; channelId: string; rootId?: string; currentUserId: string; canShowPostPriority?: boolean; // Post Props postProps: Post['props']; updatePostProps: (postProps: Post['props']) => void; // Cursor Position Handler updateCursorPosition: React.Dispatch>; cursorPosition: number; // Send Handler sendMessage: () => void; canSend: boolean; maxMessageLength: number; // Draft Handler files: FileInfo[]; value: string; uploadFileError: React.ReactNode; updateValue: React.Dispatch>; addFiles: (files: FileInfo[]) => void; updatePostInputTop: (top: number) => void; setIsFocused: (isFocused: boolean) => void; } const SAFE_AREA_VIEW_EDGES: Edge[] = ['left', 'right']; const getStyleSheet = makeStyleSheetFromTheme((theme) => { return { actionsContainer: { display: 'flex', flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', paddingBottom: Platform.select({ ios: 1, android: 2, }), }, inputContainer: { flex: 1, flexDirection: 'column', }, inputContentContainer: { alignItems: 'stretch', paddingTop: Platform.select({ ios: 7, android: 0, }), }, inputWrapper: { alignItems: 'flex-end', flexDirection: 'row', justifyContent: 'center', paddingBottom: 2, backgroundColor: theme.centerChannelBg, borderWidth: 1, borderBottomWidth: 0, borderColor: changeOpacity(theme.centerChannelColor, 0.20), borderTopLeftRadius: 12, borderTopRightRadius: 12, }, postPriorityLabel: { marginLeft: 12, marginTop: Platform.select({ ios: 3, android: 10, }), }, }; }); export default function DraftInput({ testID, channelId, currentUserId, canShowPostPriority, files, maxMessageLength, rootId = '', value, uploadFileError, sendMessage, canSend, updateValue, addFiles, updateCursorPosition, cursorPosition, updatePostInputTop, postProps, updatePostProps, setIsFocused, }: Props) { const theme = useTheme(); const handleLayout = useCallback((e: LayoutChangeEvent) => { updatePostInputTop(e.nativeEvent.layout.height); }, []); const inputRef = useRef(); const focus = useCallback(() => { inputRef.current?.focus(); }, []); // Render const postInputTestID = `${testID}.post.input`; const quickActionsTestID = `${testID}.quick_actions`; const sendActionTestID = `${testID}.send_action`; const style = getStyleSheet(theme); return ( <> {Boolean(postProps.priority) && ( )} ); }