import React, {useEffect, useRef} from 'react'; import { Image, Keyboard, KeyboardAvoidingView, Platform, StyleSheet, View, } from 'react-native'; import {TextInput, TouchableOpacity} from 'react-native-gesture-handler'; import {useSelector} from 'react-redux'; import UpArrowIcon from '../../assets/icons/up_arrow.svg'; import {TAGG_LIGHT_BLUE} from '../../constants'; import {postComment} from '../../services'; import {RootState} from '../../store/rootreducer'; import {SCREEN_HEIGHT, SCREEN_WIDTH} from '../../utils'; /** * This file provides the add comment view for a user. * Displays the logged in user's profile picture to the left and then provides space to add a comment. * Comment is posted when enter is pressed as requested by product team. */ export interface AddCommentProps { setNewCommentsAvailable: Function; objectId: string; placeholderText: string; isCommentInFocus: boolean; } const AddComment: React.FC = ({ setNewCommentsAvailable, objectId, placeholderText, isCommentInFocus, }) => { const [comment, setComment] = React.useState(''); const [keyboardVisible, setKeyboardVisible] = React.useState(false); const {avatar} = useSelector((state: RootState) => state.user); const addComment = async () => { const trimmed = comment.trim(); if (trimmed === '') { return; } const postedComment = await postComment( trimmed, objectId, isCommentInFocus, ); if (postedComment) { setComment(''); setNewCommentsAvailable(true); } }; useEffect(() => { const showKeyboard = () => setKeyboardVisible(true); Keyboard.addListener('keyboardWillShow', showKeyboard); return () => Keyboard.removeListener('keyboardWillShow', showKeyboard); }, []); useEffect(() => { const hideKeyboard = () => setKeyboardVisible(false); Keyboard.addListener('keyboardWillHide', hideKeyboard); return () => Keyboard.removeListener('keyboardWillHide', hideKeyboard); }, []); const ref = useRef(null); //If a comment is in Focus, bring the keyboard up so user is able to type in a reply useEffect(() => { if (isCommentInFocus) { ref.current?.focus(); } }, [isCommentInFocus]); return ( ); }; const styles = StyleSheet.create({ container: { backgroundColor: '#f7f7f7', alignItems: 'center', width: SCREEN_WIDTH, }, textContainer: { width: '95%', flexDirection: 'row', backgroundColor: '#e8e8e8', alignItems: 'center', justifyContent: 'space-between', margin: '3%', borderRadius: 25, }, text: { flex: 1, padding: '1%', marginHorizontal: '1%', }, avatar: { height: 35, width: 35, borderRadius: 30, marginRight: 10, marginLeft: '3%', marginVertical: '2%', alignSelf: 'flex-end', }, submitButton: { height: 35, width: 35, backgroundColor: TAGG_LIGHT_BLUE, borderRadius: 999, justifyContent: 'center', alignItems: 'center', marginRight: '3%', marginVertical: '2%', alignSelf: 'flex-end', }, whiteBackround: { backgroundColor: '#fff', }, }); export default AddComment;