import { useRef, useState } from "react"; import "./style.css"; import TermTextAreaMenu from "./TermTextAreaMenu"; interface IWidget { value?: string; menuOptions?: string[]; placeholder?: string; onSave?: Function; onClose?: Function; onChange?: Function; } const TermTextAreaWidget = ({ value, menuOptions, placeholder, onSave, onClose, onChange, }: IWidget) => { const [shadowHeight, setShadowHeight] = useState(); const [menuFocusIndex, setMenuFocusIndex] = useState(0); const [menuDisplay, setMenuDisplay] = useState("none"); const [menuTop, setMenuTop] = useState(0); const [menuLeft, setMenuLeft] = useState(0); const [menuSelected, setMenuSelected] = useState(); const [textAreaValue, setTextAreaValue] = useState(value); const [textAreaHeight, setTextAreaHeight] = useState(100); const [termSearch, setTermSearch] = useState(); const _term_max_menu = 10; const refTextArea = useRef(null); const refShadow = useRef(null); console.log("render"); function term_at_menu_hide() { setMenuDisplay("none"); setTermSearch(""); } function termInsert(strTerm: string) { if (refTextArea.current === null) { return; } const value = refTextArea.current.value; const selectionStart = refTextArea.current.selectionStart; let str1 = value.slice(0, selectionStart); const str2 = value.slice(selectionStart); const pos1 = str1.lastIndexOf("[["); const pos2 = str1.lastIndexOf("]]"); if (pos1 !== -1) { //光标前有[[ if (pos2 === -1 || pos2 < pos1) { //光标在[[之间]] str1 = str1.slice(0, str1.lastIndexOf("[[") + 2); } } //TODO 光标会跑到最下面 const newValue = str1 + strTerm + "]]" + str2; refTextArea.current.value = newValue; setTextAreaValue(newValue); if (typeof onChange !== "undefined") { onChange(newValue); } term_at_menu_hide(); refTextArea.current.focus(); } return (
{ termInsert(value); }} onChange={(value: string) => { setMenuSelected(value); }} />