import React, { useEffect, useState } from 'react'; import { View, StyleSheet, Pressable } from 'react-native'; import { TextInput, Chip } from 'react-native-paper'; import MaterialIcons from 'react-native-vector-icons/MaterialIcons'; import API from './../API.js'; import i18n from "../i18nMessages.js"; import { useNavigation } from '@react-navigation/native'; import { useSnapshot } from 'valtio'; import GlobalState from '../contexts/GlobalState.js'; import { createBibleToken } from '../utils/bibleReferences.js'; const CircleIconAction = ({ icon, onPress, color = "#6b7280", disabled = false }) => ( ({ width: 36, height: 36, borderRadius: 18, alignItems: "center", justifyContent: "center", backgroundColor: disabled ? "#f3f4f6" : (pressed ? "#e5e7eb" : "#f9fafb"), marginHorizontal: 2, transform: [{ scale: pressed ? 0.96 : 1 }], })} > ); let NewComment = ({ postid, newComentAdded }) => { const gState = useSnapshot(GlobalState); const [commentContent, setCommentContent] = useState(''); const [bibleReferences, setBibleReferences] = useState([]); const navigation = useNavigation(); const biblePickerSelectionTs = gState?.biblePickerSelection?.ts; const hasContent = commentContent.trim().length > 0; useEffect(() => { const selection = gState?.biblePickerSelection; if (!selection || selection.target !== "comment" || !selection.reference) return; setBibleReferences((prev) => { if (prev.includes(selection.reference)) return prev; return prev.concat(selection.reference); }); GlobalState.biblePickerSelection = null; }, [biblePickerSelectionTs, gState?.biblePickerSelection]); const handleSubmit = () => { if (!hasContent && bibleReferences.length === 0) return; const trimmedComment = commentContent.trim(); const bibleTokens = bibleReferences.map((reference) => createBibleToken(reference)).filter(Boolean); setCommentContent(''); setBibleReferences([]); API.newPostComment(postid, [trimmedComment, bibleTokens.join(" ")].join(" ").trim()).then((newPost) => { if (newComentAdded) newComentAdded(newPost); }); }; return ( navigation.navigate("BiblePicker", { target: "comment" })} color="#6b7280" /> {bibleReferences.length ? ( {bibleReferences.map((reference) => ( navigation.navigate("BibleChapter", { reference })} onClose={() => { setBibleReferences((prev) => prev.filter((item) => item !== reference)); }} > {reference} ))} ) : null} ); } export default NewComment; const styles = StyleSheet.create({ newComment: { marginHorizontal: 10, marginTop: 10, marginBottom: 6, }, composerShell: { borderWidth: 1, borderColor: "#e5e7eb", borderRadius: 28, backgroundColor: "#ffffff", paddingHorizontal: 4, paddingVertical: 2, flexDirection: "row", alignItems: "flex-end", shadowColor: "#111827", shadowOpacity: 0.08, shadowRadius: 10, shadowOffset: { width: 0, height: 3 }, elevation: 2, }, inputWrap: { flex: 1, paddingRight: 2, }, input: { backgroundColor: "transparent", maxHeight: 120, }, inputContent: { paddingVertical: 10, }, referencesWrap: { flexDirection: "row", flexWrap: "wrap", marginTop: 8, }, referenceChip: { marginRight: 6, marginBottom: 6, }, });