diff --git a/Data/Server/WebUI/src/nodes/Data Manipulation/Node_Regex_Replace.jsx b/Data/Server/WebUI/src/nodes/Data Manipulation/Node_Regex_Replace.jsx index 2bbbe97..8e7dd9b 100644 --- a/Data/Server/WebUI/src/nodes/Data Manipulation/Node_Regex_Replace.jsx +++ b/Data/Server/WebUI/src/nodes/Data Manipulation/Node_Regex_Replace.jsx @@ -11,26 +11,17 @@ const RegexReplaceNode = ({ id, data }) => { const [pattern, setPattern] = useState(data?.pattern || ""); const [replacement, setReplacement] = useState(data?.replacement || ""); + const [flags, setFlags] = useState(data?.flags || "g"); + const [enabled, setEnabled] = useState(data?.enabled ?? true); const [result, setResult] = useState(""); + const [original, setOriginal] = useState(""); const valueRef = useRef(""); - const handlePatternChange = (e) => { - const val = e.target.value; - setPattern(val); - setNodes((nds) => - nds.map((n) => - n.id === id ? { ...n, data: { ...n.data, pattern: val } } : n - ) - ); - }; - - const handleReplacementChange = (e) => { - const val = e.target.value; - setReplacement(val); - setNodes((nds) => - nds.map((n) => - n.id === id ? { ...n, data: { ...n.data, replacement: val } } : n + const updateNodeData = (key, val) => { + setNodes(nds => + nds.map(n => + n.id === id ? { ...n, data: { ...n.data, [key]: val } } : n ) ); }; @@ -44,11 +35,23 @@ const RegexReplaceNode = ({ id, data }) => { const inputValue = inputEdge ? window.BorealisValueBus[inputEdge.source] || "" : ""; + + setOriginal(inputValue); + let newVal = inputValue; try { - const regex = new RegExp(pattern, 'g'); - newVal = inputValue.replace(regex, replacement); + if (enabled && pattern) { + const regex = new RegExp(pattern, flags); + let safeReplacement = replacement.trim(); + if ( + safeReplacement.startsWith('"') && + safeReplacement.endsWith('"') + ) { + safeReplacement = safeReplacement.slice(1, -1); + } + newVal = inputValue.replace(regex, safeReplacement); + } } catch (err) { newVal = `[Error] ${err.message}`; } @@ -60,18 +63,14 @@ const RegexReplaceNode = ({ id, data }) => { } }; - const startInterval = () => { - intervalId = setInterval(runNodeLogic, currentRate); - }; - - startInterval(); + intervalId = setInterval(runNodeLogic, currentRate); const monitor = setInterval(() => { const newRate = window.BorealisUpdateRate; if (newRate !== currentRate) { clearInterval(intervalId); + intervalId = setInterval(runNodeLogic, newRate); currentRate = newRate; - startInterval(); } }, 300); @@ -79,7 +78,7 @@ const RegexReplaceNode = ({ id, data }) => { clearInterval(intervalId); clearInterval(monitor); }; - }, [id, edges, pattern, replacement]); + }, [id, edges, pattern, replacement, flags, enabled]); return (