feat: move global rule to a separate tab

This commit is contained in:
Gabe
2025-08-26 21:19:47 +08:00
parent fd355eeeab
commit 7fd2a0f187
2 changed files with 34 additions and 7 deletions

View File

@@ -413,6 +413,11 @@ export const I18N = {
en: `Inject Subscribe Rules`, en: `Inject Subscribe Rules`,
zh_TW: `注入訂閱規則`, zh_TW: `注入訂閱規則`,
}, },
global_rule: {
zh: `全局规则`,
en: `Global Rule`,
zh_TW: `全域規則`,
},
personal_rules: { personal_rules: {
zh: `个人规则`, zh: `个人规则`,
en: `Rules`, en: `Rules`,

View File

@@ -696,9 +696,9 @@ function RuleFields({ rule, rules, setShow, setKeyword }) {
); );
} }
function RuleAccordion({ rule, rules }) { function RuleAccordion({ rule, rules, isExpanded = false }) {
const i18n = useI18n(); const i18n = useI18n();
const [expanded, setExpanded] = useState(false); const [expanded, setExpanded] = useState(isExpanded);
const handleChange = (e) => { const handleChange = (e) => {
setExpanded((pre) => !pre); setExpanded((pre) => !pre);
@@ -767,9 +767,8 @@ function ShareButton({ rules, injectRules, selectedUrl }) {
); );
} }
function UserRules({ subRules }) { function UserRules({ subRules, rules }) {
const i18n = useI18n(); const i18n = useI18n();
const rules = useRules();
const [showAdd, setShowAdd] = useState(false); const [showAdd, setShowAdd] = useState(false);
const { setting, updateSetting } = useSetting(); const { setting, updateSetting } = useSetting();
const [keyword, setKeyword] = useState(""); 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 (
<Stack spacing={3}>
<RuleAccordion
key={globalRule.pattern}
rule={globalRule}
rules={rules}
isExpanded={true}
/>
</Stack>
);
}
export default function Rules() { export default function Rules() {
const i18n = useI18n(); const i18n = useI18n();
const [activeTab, setActiveTab] = useState(0); const [activeTab, setActiveTab] = useState(0);
const subRules = useSubRules(); const subRules = useSubRules();
const rules = useRules();
const handleTabChange = (e, newValue) => { const handleTabChange = (e, newValue) => {
setActiveTab(newValue); setActiveTab(newValue);
@@ -1162,18 +1180,22 @@ export default function Rules() {
<Box sx={{ borderBottom: 1, borderColor: "divider" }}> <Box sx={{ borderBottom: 1, borderColor: "divider" }}>
<Tabs value={activeTab} onChange={handleTabChange}> <Tabs value={activeTab} onChange={handleTabChange}>
<Tab label={i18n("global_rule")} />
<Tab label={i18n("personal_rules")} /> <Tab label={i18n("personal_rules")} />
<Tab label={i18n("subscribe_rules")} /> <Tab label={i18n("subscribe_rules")} />
<Tab label={i18n("overwrite_subscribe_rules")} /> <Tab label={i18n("overwrite_subscribe_rules")} />
</Tabs> </Tabs>
</Box> </Box>
<div hidden={activeTab !== 0}> <div hidden={activeTab !== 0}>
{activeTab === 0 && <UserRules subRules={subRules} />} {activeTab === 0 && <GlobalRule rules={rules} />}
</div> </div>
<div hidden={activeTab !== 1}> <div hidden={activeTab !== 1}>
{activeTab === 1 && <SubRules subRules={subRules} />} {activeTab === 1 && <UserRules subRules={subRules} rules={rules} />}
</div> </div>
<div hidden={activeTab !== 2}>{activeTab === 2 && <OwSubRule />}</div> <div hidden={activeTab !== 2}>
{activeTab === 2 && <SubRules subRules={subRules} />}
</div>
<div hidden={activeTab !== 3}>{activeTab === 3 && <OwSubRule />}</div>
</Stack> </Stack>
</Box> </Box>
); );