setting-verge.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import useSWR, { useSWRConfig } from "swr";
  2. import {
  3. List,
  4. ListItemText,
  5. ListSubheader,
  6. Switch,
  7. Typography,
  8. } from "@mui/material";
  9. import {
  10. setSysProxy,
  11. getVergeConfig,
  12. patchVergeConfig,
  13. } from "../services/cmds";
  14. import { CmdType } from "../services/types";
  15. import { version } from "../../package.json";
  16. import GuardState from "./guard-state";
  17. import SettingItem from "./setting-item";
  18. import PaletteSwitch from "./palette-switch";
  19. interface Props {
  20. onError?: (err: Error) => void;
  21. }
  22. const SettingVerge = ({ onError }: Props) => {
  23. const { mutate } = useSWRConfig();
  24. const { data: vergeConfig } = useSWR("getVergeConfig", getVergeConfig);
  25. const {
  26. theme_mode: mode = "light",
  27. enable_self_startup: startup = false,
  28. enable_system_proxy: proxy = false,
  29. } = vergeConfig ?? {};
  30. const onSwitchFormat = (_e: any, value: boolean) => value;
  31. const onChangeData = (patch: Partial<CmdType.VergeConfig>) => {
  32. mutate("getVergeConfig", { ...vergeConfig, ...patch }, false);
  33. };
  34. return (
  35. <List>
  36. <ListSubheader sx={{ background: "transparent" }}>
  37. Common Setting
  38. </ListSubheader>
  39. <SettingItem>
  40. <ListItemText primary="Theme Mode" />
  41. <GuardState
  42. value={mode === "dark"}
  43. valueProps="checked"
  44. onCatch={onError}
  45. onFormat={onSwitchFormat}
  46. onChange={(e) => onChangeData({ theme_mode: e ? "dark" : "light" })}
  47. onGuard={async (c) => {
  48. await patchVergeConfig({ theme_mode: c ? "dark" : "light" });
  49. }}
  50. >
  51. <PaletteSwitch edge="end" />
  52. </GuardState>
  53. </SettingItem>
  54. <SettingItem>
  55. <ListItemText primary="Self Startup" />
  56. <GuardState
  57. value={startup}
  58. valueProps="checked"
  59. onCatch={onError}
  60. onFormat={onSwitchFormat}
  61. onChange={(e) => onChangeData({ enable_self_startup: e })}
  62. onGuard={async (e) => {
  63. await patchVergeConfig({ enable_self_startup: e });
  64. }}
  65. >
  66. <Switch edge="end" />
  67. </GuardState>
  68. </SettingItem>
  69. <SettingItem>
  70. <ListItemText primary="System Proxy" />
  71. <GuardState
  72. value={proxy}
  73. valueProps="checked"
  74. onCatch={onError}
  75. onFormat={onSwitchFormat}
  76. onChange={(e) => onChangeData({ enable_system_proxy: e })}
  77. onGuard={async (e) => {
  78. await setSysProxy(e);
  79. await patchVergeConfig({ enable_system_proxy: e });
  80. }}
  81. >
  82. <Switch edge="end" />
  83. </GuardState>
  84. </SettingItem>
  85. <SettingItem>
  86. <ListItemText primary="Version" />
  87. <Typography sx={{ py: "6px" }}>v{version}</Typography>
  88. </SettingItem>
  89. </List>
  90. );
  91. };
  92. export default SettingVerge;