diff --git a/src/config/i18n.js b/src/config/i18n.js
index e7d1e4b..cc97ebc 100644
--- a/src/config/i18n.js
+++ b/src/config/i18n.js
@@ -413,6 +413,11 @@ export const I18N = {
en: `Inject Subscribe Rules`,
zh_TW: `注入訂閱規則`,
},
+ global_rule: {
+ zh: `全局规则`,
+ en: `Global Rule`,
+ zh_TW: `全域規則`,
+ },
personal_rules: {
zh: `个人规则`,
en: `Rules`,
diff --git a/src/views/Options/Rules.js b/src/views/Options/Rules.js
index 9469723..31e63b6 100644
--- a/src/views/Options/Rules.js
+++ b/src/views/Options/Rules.js
@@ -696,9 +696,9 @@ function RuleFields({ rule, rules, setShow, setKeyword }) {
);
}
-function RuleAccordion({ rule, rules }) {
+function RuleAccordion({ rule, rules, isExpanded = false }) {
const i18n = useI18n();
- const [expanded, setExpanded] = useState(false);
+ const [expanded, setExpanded] = useState(isExpanded);
const handleChange = (e) => {
setExpanded((pre) => !pre);
@@ -767,9 +767,8 @@ function ShareButton({ rules, injectRules, selectedUrl }) {
);
}
-function UserRules({ subRules }) {
+function UserRules({ subRules, rules }) {
const i18n = useI18n();
- const rules = useRules();
const [showAdd, setShowAdd] = useState(false);
const { setting, updateSetting } = useSetting();
const [keyword, setKeyword] = useState("");
@@ -1140,10 +1139,29 @@ function SubRules({ subRules }) {
);
}
+function GlobalRule({ rules }) {
+ if (!rules.list) {
+ return;
+ }
+
+ const globalRule = rules.list[rules.list.length - 1];
+ return (
+