import React, { useCallback, useContext, useMemo, useState } from 'react'; import { Button, ImageBackground, StyleSheet, Text, TextInput, View, } from 'react-native'; import { ScrollView, TouchableOpacity } from 'react-native-gesture-handler'; import Animated, { FadeInDown, FadeOutDown } from 'react-native-reanimated'; import { PropsContext } from './Chatty'; import { IFooterProps, IMedia, MediaType } from './types/Chatty.types'; import { selectImage } from './utils/imagePicker'; function _Footer(props: IFooterProps) { const propsContext = useContext(PropsContext); const [message, setMessage] = useState(''); const [mentions] = useState(['JohnDoe']); const [foundedMentions, setFoundedMentions] = useState([]); const [image, setImage] = useState(); const cuttedText = useMemo(() => { if (props.replyingTo) { return props.replyingTo.text.slice(0, 100) + '...'; } return null; }, [props?.replyingTo]); const onChangeText = useCallback( (text: string) => { const foundedMentions: string[] = []; // Iterate over all text text.split(' ').forEach((word) => { foundedMentions.push( // Check and push if word exists in mentions ...mentions.filter((mention) => { console.log(text, mention.indexOf(word)); return ( mention .toLowerCase() .indexOf(word.toLowerCase().replace('@', '')) != -1 ); }) ); }); setFoundedMentions(foundedMentions); props.onChangeText(text); setMessage(text); }, [props, mentions] ); const onPressSend = useCallback(() => { props.onPressSend({ text: message, repliedTo: props.replyingTo, media: image, }); setMessage(''); setImage([]); }, [message, props, image]); const onPressMention = (target: string) => { setMessage((prev) => { const messagesArray = prev.split(' '); const lastMessageIndex = messagesArray.length - 1; const lastMessage = messagesArray[lastMessageIndex]; prev = prev.replace(lastMessage, '@' + target); return prev; }); setFoundedMentions([]); }; const renderMenu = useCallback(() => { if (message && foundedMentions.length > 0) { const splittedWords = message.split(' '); if (splittedWords[splittedWords.length - 1].startsWith('@')) { return ( {foundedMentions.map((mention) => ( onPressMention(mention)}> @{mention} ))} ); } } return null; }, [ foundedMentions, message, props.mentionStyles?.containerStyle, props.mentionStyles?.labelStyle, ]); const onKeyPress = useCallback((key: string) => { if (key === ' ') { setFoundedMentions([]); } }, []); const onPressImage = useCallback(async () => { selectImage().then((r) => { const assets = { type: MediaType.Image, uri: r?.assets ? r.assets[0].uri : r.uri, base64: r?.assets ? r.assets[0].base64 : r.base64, }; if (image) { setImage([...image, assets]); } else { setImage([assets]); } }); }, [image]); return ( 0 && { position: 'absolute', bottom: -70, backgroundColor: '#fff', } } > {props.replyingTo && ( {props.replyingTo.user.username} {cuttedText} {propsContext.footerProps.closeReplyButton ? ( propsContext.footerProps.closeReplyButton(props) ) : (