From 40977785c3d3ca1c4360ffdc592e8a331556319c Mon Sep 17 00:00:00 2001 From: GyDi <segydi@foxmail.com> Date: Mon, 17 Jan 2022 02:42:52 +0800 Subject: [PATCH] feat: adjust setting typography --- src/components/setting/setting-system.tsx | 67 +++++++++++++++++++++++ src/components/setting/setting-verge.tsx | 48 ++-------------- src/components/setting/setting.tsx | 4 +- src/pages/settings.tsx | 18 ++++-- 4 files changed, 86 insertions(+), 51 deletions(-) create mode 100644 src/components/setting/setting-system.tsx diff --git a/src/components/setting/setting-system.tsx b/src/components/setting/setting-system.tsx new file mode 100644 index 0000000..5ccad99 --- /dev/null +++ b/src/components/setting/setting-system.tsx @@ -0,0 +1,67 @@ +import useSWR, { useSWRConfig } from "swr"; +import { Box, ListItemText, Switch } from "@mui/material"; +import { getVergeConfig, patchVergeConfig } from "../../services/cmds"; +import { SettingList, SettingItem } from "./setting"; +import { CmdType } from "../../services/types"; +import GuardState from "./guard-state"; +import SysproxyTooltip from "./sysproxy-tooltip"; + +interface Props { + onError?: (err: Error) => void; +} + +const SettingSystem = ({ onError }: Props) => { + const { mutate } = useSWRConfig(); + const { data: vergeConfig } = useSWR("getVergeConfig", getVergeConfig); + + const { + enable_auto_launch: startup = false, + enable_system_proxy: proxy = false, + } = vergeConfig ?? {}; + + const onSwitchFormat = (_e: any, value: boolean) => value; + const onChangeData = (patch: Partial<CmdType.VergeConfig>) => { + mutate("getVergeConfig", { ...vergeConfig, ...patch }, false); + }; + + return ( + <SettingList title="System Setting"> + <SettingItem> + <ListItemText primary="Auto Launch" /> + <GuardState + value={startup} + valueProps="checked" + onCatch={onError} + onFormat={onSwitchFormat} + onChange={(e) => onChangeData({ enable_auto_launch: e })} + onGuard={(e) => patchVergeConfig({ enable_auto_launch: e })} + > + <Switch edge="end" /> + </GuardState> + </SettingItem> + + <SettingItem> + <ListItemText + primary={ + <Box sx={{ display: "flex", alignItems: "center" }}> + System Proxy + <SysproxyTooltip /> + </Box> + } + /> + <GuardState + value={proxy} + valueProps="checked" + onCatch={onError} + onFormat={onSwitchFormat} + onChange={(e) => onChangeData({ enable_system_proxy: e })} + onGuard={(e) => patchVergeConfig({ enable_system_proxy: e })} + > + <Switch edge="end" /> + </GuardState> + </SettingItem> + </SettingList> + ); +}; + +export default SettingSystem; diff --git a/src/components/setting/setting-verge.tsx b/src/components/setting/setting-verge.tsx index ceb621a..14c0791 100644 --- a/src/components/setting/setting-verge.tsx +++ b/src/components/setting/setting-verge.tsx @@ -1,12 +1,11 @@ import useSWR, { useSWRConfig } from "swr"; -import { Box, ListItemText, Switch, Typography } from "@mui/material"; +import { ListItemText, Switch, Typography } from "@mui/material"; import { getVergeConfig, patchVergeConfig } from "../../services/cmds"; import { SettingList, SettingItem } from "./setting"; import { CmdType } from "../../services/types"; import { version } from "../../../package.json"; import GuardState from "./guard-state"; import PaletteSwitch from "./palette-switch"; -import SysproxyTooltip from "./sysproxy-tooltip"; interface Props { onError?: (err: Error) => void; @@ -16,12 +15,8 @@ const SettingVerge = ({ onError }: Props) => { const { mutate } = useSWRConfig(); const { data: vergeConfig } = useSWR("getVergeConfig", getVergeConfig); - const { - theme_mode: mode = "light", - theme_blur: blur = false, - enable_auto_launch: startup = false, - enable_system_proxy: proxy = false, - } = vergeConfig ?? {}; + const { theme_mode: mode = "light", theme_blur: blur = false } = + vergeConfig ?? {}; const onSwitchFormat = (_e: any, value: boolean) => value; const onChangeData = (patch: Partial<CmdType.VergeConfig>) => { @@ -29,7 +24,7 @@ const SettingVerge = ({ onError }: Props) => { }; return ( - <SettingList title="Common Setting"> + <SettingList title="Verge Setting"> <SettingItem> <ListItemText primary="Theme Mode" /> <GuardState @@ -60,41 +55,6 @@ const SettingVerge = ({ onError }: Props) => { </GuardState> </SettingItem> - <SettingItem> - <ListItemText primary="Auto Launch" /> - <GuardState - value={startup} - valueProps="checked" - onCatch={onError} - onFormat={onSwitchFormat} - onChange={(e) => onChangeData({ enable_auto_launch: e })} - onGuard={(e) => patchVergeConfig({ enable_auto_launch: e })} - > - <Switch edge="end" /> - </GuardState> - </SettingItem> - - <SettingItem> - <ListItemText - primary={ - <Box sx={{ display: "flex", alignItems: "center" }}> - System Proxy - <SysproxyTooltip /> - </Box> - } - /> - <GuardState - value={proxy} - valueProps="checked" - onCatch={onError} - onFormat={onSwitchFormat} - onChange={(e) => onChangeData({ enable_system_proxy: e })} - onGuard={(e) => patchVergeConfig({ enable_system_proxy: e })} - > - <Switch edge="end" /> - </GuardState> - </SettingItem> - <SettingItem> <ListItemText primary="Version" /> <Typography sx={{ py: "6px" }}>v{version}</Typography> diff --git a/src/components/setting/setting.tsx b/src/components/setting/setting.tsx index 49e9a22..817d6ef 100644 --- a/src/components/setting/setting.tsx +++ b/src/components/setting/setting.tsx @@ -6,9 +6,7 @@ export const SettingItem = styled(ListItem)(() => ({ paddingBottom: 5, })); -export const SettingList: React.FC<{ - title: string; -}> = (props) => ( +export const SettingList: React.FC<{ title: string }> = (props) => ( <List> <ListSubheader sx={{ background: "transparent" }} disableSticky> {props.title} diff --git a/src/pages/settings.tsx b/src/pages/settings.tsx index f4e32b6..844b8cb 100644 --- a/src/pages/settings.tsx +++ b/src/pages/settings.tsx @@ -2,16 +2,26 @@ import { Paper } from "@mui/material"; import BasePage from "../components/base-page"; import SettingVerge from "../components/setting/setting-verge"; import SettingClash from "../components/setting/setting-clash"; +import SettingSystem from "../components/setting/setting-system"; +import Notice from "../components/notice"; const SettingPage = () => { + const onError = (error: any) => { + error && Notice.error(error.toString()); + }; + return ( <BasePage title="Settings"> - <Paper sx={{ borderRadius: 1, boxShadow: 2 }}> - <SettingVerge /> + <Paper sx={{ borderRadius: 1, boxShadow: 2, mb: 3 }}> + <SettingClash onError={onError} /> </Paper> - <Paper sx={{ borderRadius: 1, boxShadow: 2, mt: 3 }}> - <SettingClash /> + <Paper sx={{ borderRadius: 1, boxShadow: 2, mb: 3 }}> + <SettingSystem onError={onError} /> + </Paper> + + <Paper sx={{ borderRadius: 1, boxShadow: 2 }}> + <SettingVerge onError={onError} /> </Paper> </BasePage> ); -- GitLab