import { Dispatch, FormEvent, SetStateAction, useCallback } from "react"; import { VisualEditorState } from "../VisualEditor/VisualEditor"; import CloseIcon from '@mui/icons-material/Close'; import SwapVertIcon from '@mui/icons-material/SwapVert'; type FindReplaceProps = { findText: string, replaceText: string, setFindReplaceText: Dispatch>, cs: VisualEditorState, setCS: Dispatch<(oldState: VisualEditorState) => VisualEditorState>, hide: () => void, }; export function FindReplace({findText, replaceText, setFindReplaceText, cs, setCS, hide}: FindReplaceProps) { const onReplace = useCallback(() => { setCS(cs => { return { ...cs, texts: cs.texts.map(txt => ({ ...txt, text: txt.text.replaceAll(findText, replaceText) })), }; }); }, [findText, replaceText, setCS]); const onSwap = useCallback(() => { setFindReplaceText(([findText, replaceText]) => [replaceText, findText]); }, [findText, replaceText]); const onSubmit = useCallback((e: FormEvent) => { e.preventDefault(); e.stopPropagation(); onReplace(); // onSwap(); }, [findText, replaceText, onSwap, onReplace]); const n = findText === "" ? 0 : cs.texts.reduce((count, txt) => count+(txt.text.indexOf(findText) !== -1 ? 1: 0), 0); return
setFindReplaceText(([_, replaceText]) => [e.target.value, replaceText])} style={{flexGrow: 1, minWidth: 20}}/>
setFindReplaceText(([findText, _]) => [findText, e.target.value]))} style={{flexGrow: 1, minWidth: 20}}/>
; }