import Input from "@tensamin/markdown/input"; import { Card, CardHeader } from "@tensamin/ui"; import { useStorage } from "@tensamin/storage/context"; import * as React from "react"; import { Button } from "@tensamin/ui"; import { Plus, Laugh, Clapperboard } from "lucide-react"; import { useChat } from "../context"; import { useTTP } from "@tensamin/ttp"; import { log, toast } from "@tensamin/shared/log"; import { cn, useIsMobile } from "@tensamin/ui"; import { encryptText } from "@tensamin/crypto/worker"; import { useSession } from "@tensamin/storage/session"; export default function InputComponent({ value, setValue, }: { value: string; setValue: (value: string) => void; }) { const [invertEnterBehavior, setInvertEnterBehavior] = React.useState(false); const { send } = useTTP(); const { addLiveMessage, sharedSecret, userId, inputBoxRef } = useChat(); const { load } = useStorage(); const { moveUserIdToTop } = useSession(); React.useEffect(() => { void load("settings.reverse_enter_behavior").then((shouldInvert) => { setInvertEnterBehavior(shouldInvert); }); }, [load]); /** * Executes handleSubmit. * @param none This function has no parameters. * @returns unknown. */ async function handleSubmit() { if (value.trim() === "") return; const time = Date.now(); const currentValue = value; if (!Number.isSafeInteger(userId) || userId <= 0) { toast("error", "No conversation selected"); return; } if (!sharedSecret) { toast("error", "Still getting shared secret..."); return; } const reference = addLiveMessage({ height: 0, not_encrypted: true, send_time: time, content: currentValue, sent_by_self: true, message_state: "awaiting", }); const encryptedContext = await encryptText(sharedSecret, currentValue); send("message_send", { height: 0, content: encryptedContext, receiver_id: userId, send_time: time, }).catch((e) => { log(0, "Chat", "red", "Failed to send message", e, { content: currentValue, encryptedContext, receiver_id: userId, send_time: time, }); reference.setFailed(true); toast("error", "Failed to send message"); }); moveUserIdToTop(userId); setValue(""); } const isMobile = useIsMobile(); return (

Files list

); }