import { AvoidKeyboard } from '@/components/ui/avoid-keyboard'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Text } from '@/components/ui/text'; import { View } from '@/components/ui/view'; import { useColor } from '@/hooks/useColor'; import { Send, SendHorizonal } from 'lucide-react-native'; import React, { useState } from 'react'; import { FlatList, Pressable } from 'react-native'; interface Message { id: string; text: string; isUser: boolean; timestamp: Date; } export function AvoidKeyboardChat() { const card = useColor('card'); const blue = useColor('blue'); const [messages, setMessages] = useState([ { id: '1', text: 'Hey! How are you doing?', isUser: false, timestamp: new Date(Date.now() - 300000), }, { id: '2', text: "Hi there! I'm doing great, thanks for asking!", isUser: true, timestamp: new Date(Date.now() - 240000), }, { id: '3', text: "That's wonderful to hear! Any exciting plans for today?", isUser: false, timestamp: new Date(Date.now() - 180000), }, { id: '4', text: "Actually yes! I'm working on some new React Native components.", isUser: true, timestamp: new Date(Date.now() - 120000), }, ]); const [inputText, setInputText] = useState(''); const sendMessage = () => { if (inputText.trim()) { const newMessage: Message = { id: Date.now().toString(), text: inputText.trim(), isUser: true, timestamp: new Date(), }; setMessages((prev) => [...prev, newMessage]); setInputText(''); // Simulate response after a delay setTimeout(() => { const responses = [ 'That sounds interesting!', 'Tell me more about that.', "Cool! How's it going?", 'Nice work!', ]; const response: Message = { id: (Date.now() + 1).toString(), text: responses[Math.floor(Math.random() * responses.length)], isUser: false, timestamp: new Date(), }; setMessages((prev) => [...prev, response]); }, 1000); } }; const renderMessage = ({ item }: { item: Message }) => ( {item.text} {item.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', })} ); return ( {/* Header */} Chat Demo Real-time chat with keyboard avoidance {/* Messages */} item.id} style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }} showsVerticalScrollIndicator={false} /> {/* Input Area */} {/* Keyboard avoidance with extra space for better UX */} ); }