From 809a53e8d03373f7c966bb5e37cd192ef767789d Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Tue, 7 Jul 2026 21:48:30 -0400 Subject: [PATCH] TextReplace: Allow Dragging Rules --- src/plugins/textReplace/index.tsx | 137 ++++++++++++++++++------------ 1 file changed, 81 insertions(+), 56 deletions(-) diff --git a/src/plugins/textReplace/index.tsx b/src/plugins/textReplace/index.tsx index c0ea800d6..6f02ba4ea 100644 --- a/src/plugins/textReplace/index.tsx +++ b/src/plugins/textReplace/index.tsx @@ -180,6 +180,7 @@ function normalizeRule(rule: Rule) { function TextReplace({ title, description, rulesArray, isRegex = false }: TextReplaceProps) { const [searchQuery, setSearchQuery] = useState(""); + const [draggedIndex, setDraggedIndex] = useState(null); function onClickRemove(index: number) { rulesArray.splice(index, 1); @@ -208,6 +209,14 @@ function TextReplace({ title, description, rulesArray, isRegex = false }: TextRe return acc; }, []); + const handleDrop = (index: number) => (e: React.DragEvent) => { + e.preventDefault(); + if (draggedIndex === null || draggedIndex === index || searchQuery) return; + const draggedRule = rulesArray.splice(draggedIndex, 1)[0]; + rulesArray.splice(index, 0, draggedRule); + setDraggedIndex(null); + }; + return ( <>
@@ -224,64 +233,80 @@ function TextReplace({ title, description, rulesArray, isRegex = false }: TextRe No rules match your search criteria. )} {filteredRules.map(({ rule, index }) => - ( - <> -
- onChange(e, index, "name")} - /> - onChange(e, index, "find")} - /> - onChange(e, index, "replace")} - /> - onChange(e, index, "onlyIfIncludes")} - /> -
-
- e === rule.scope} + select={e => onChange(e, index, "scope")} + serialize={e => e} + /> +
+ {isRegex && renderFindError(rule.find)} + + + )} + > +
{ + setDraggedIndex(index); + e.dataTransfer.setData("text/plain", index.toString()); + }} + onDragEnd={() => setDraggedIndex(null)} + style={{ cursor: searchQuery ? "default" : "grab", flex: 1 }} + > + + {rule.name + ? rule.name + : isEmptyRule(rule) + ? `Empty Rule ${index + 1}` + : `Rule ${index + 1} - ${rule.find}` + } + +
+
+
)}