([]);
const fetchContent = async () => {
let data = await readProfileFile(property);
- setCurrData(data);
+ let obj = yaml.load(data) as { prepend: []; append: []; delete: [] };
+
+ setPrependSeq(obj.prepend || []);
+ setAppendSeq(obj.append || []);
+ setDeleteSeq(obj.delete || []);
setPrevData(data);
};
@@ -170,42 +156,6 @@ export const RulesEditorViewer = (props: Props) => {
setRuleList(obj.rules);
};
- const addSeq = async (method: "prepend" | "append" | "delete") => {
- let obj = yaml.load(currData) as ISeqProfileConfig;
- if (!obj.prepend) {
- obj = { prepend: [], append: [], delete: [] };
- }
- switch (method) {
- case "append": {
- obj.append.push(
- `${ruleType}${
- ruleType === "MATCH" ? "" : "," + ruleContent
- },${proxyPolicy}${
- NoResolveList.includes(ruleType) && noResolve ? ",no-resolve" : ""
- }`
- );
- break;
- }
- case "prepend": {
- obj.prepend.push(
- `${ruleType}${
- ruleType === "MATCH" ? "" : "," + ruleContent
- },${proxyPolicy}${
- NoResolveList.includes(ruleType) && noResolve ? ",no-resolve" : ""
- }`
- );
- break;
- }
- case "delete": {
- obj.delete.push(rule);
- break;
- }
- }
- let raw = yaml.dump(obj);
-
- setCurrData(raw);
- };
-
useEffect(() => {
fetchContent();
fetchProfile();
@@ -213,6 +163,11 @@ export const RulesEditorViewer = (props: Props) => {
const onSave = useLockFn(async () => {
try {
+ let currData = yaml.dump({
+ prepend: prependSeq,
+ append: appendSeq,
+ delete: deleteSeq,
+ });
await saveProfileFile(property, currData);
onChange?.(prevData, currData);
onClose();
@@ -288,7 +243,15 @@ export const RulesEditorViewer = (props: Props) => {
fullWidth
variant="contained"
onClick={() => {
- addSeq("prepend");
+ let raw = `${ruleType}${
+ ruleType === "MATCH" ? "" : "," + ruleContent
+ },${proxyPolicy}${
+ NoResolveList.includes(ruleType) && noResolve
+ ? ",no-resolve"
+ : ""
+ }`;
+ if (prependSeq.includes(raw)) return;
+ setPrependSeq([...prependSeq, raw]);
}}
>
{t("Add Prepend Rule")}
@@ -299,55 +262,82 @@ export const RulesEditorViewer = (props: Props) => {
fullWidth
variant="contained"
onClick={() => {
- addSeq("append");
+ let raw = `${ruleType}${
+ ruleType === "MATCH" ? "" : "," + ruleContent
+ },${proxyPolicy}${
+ NoResolveList.includes(ruleType) && noResolve
+ ? ",no-resolve"
+ : ""
+ }`;
+ if (appendSeq.includes(raw)) return;
+ setAppendSeq([...appendSeq, raw]);
}}
>
{t("Add Append Rule")}
- -
- {
- if (v) setRule(v);
- }}
- renderInput={(params) => }
- />
-
- -
-
-
- {
- if (value) setCurrData(value);
- }}
- options={editorOptions}
- />
+ {prependSeq.length > 0 && (
+
+ {prependSeq.map((item, index) => {
+ return (
+ {
+ setPrependSeq(prependSeq.filter((v) => v !== item));
+ }}
+ />
+ );
+ })}
+
+ )}
+
+
+ {ruleList.map((item, index) => {
+ return (
+ {
+ if (deleteSeq.includes(item)) {
+ setDeleteSeq(deleteSeq.filter((v) => v !== item));
+ } else {
+ setDeleteSeq([...deleteSeq, item]);
+ }
+ }}
+ />
+ );
+ })}
+
+
+ {appendSeq.length > 0 && (
+
+ {appendSeq.map((item, index) => {
+ return (
+ {
+ setAppendSeq(appendSeq.filter((v) => v !== item));
+ }}
+ />
+ );
+ })}
+
+ )}