import { ChangeEvent, KeyboardEvent, useEffect, useState } from "react"; import { useWaku } from "@waku/react"; import { LightNode } from "@waku/interfaces"; import { MessageInputProps } from "./types"; export default function MessageInput(props: MessageInputProps) { const { hasLightPushPeers } = props; const { node } = useWaku(); const [inputText, setInputText] = useState(""); const [isActive, setActiveButton] = useState(false); const onMessage = async () => { if (props.sendMessage && inputText) { try { await props.sendMessage(inputText); } catch (e) { console.error(`Failed to send message: ${e}`); } setInputText(""); } }; const onChange = (event: ChangeEvent) => { event.preventDefault(); setInputText(event.target.value); }; const onKeyDown = async (event: KeyboardEvent) => { if ( isActive && event.key === "Enter" && !event.altKey && !event.ctrlKey && !event.shiftKey ) { await onMessage(); } }; // Enable the button if there are peers available or the user is sending a command useEffect(() => { if (inputText.startsWith("/") || hasLightPushPeers) { setActiveButton(true); } else if (node) { setActiveButton(false); } }, [node, inputText, hasLightPushPeers]); return (
); }