From 9c43b31fc08022564f562e62854d0864a654f0c0 Mon Sep 17 00:00:00 2001
From: GyDi <segydi@foxmail.com>
Date: Sun, 16 Jan 2022 18:30:25 +0800
Subject: [PATCH] refactor: something

---
 ...{window-control.tsx => layout-control.tsx} |  4 +--
 src/components/notice.tsx                     |  6 ++++-
 src/components/profile-item.tsx               | 25 +++++++++++--------
 src/components/{ => setting}/guard-state.tsx  |  2 +-
 .../{ => setting}/palette-switch.tsx          |  0
 src/components/setting/setting-clash.tsx      |  2 +-
 src/components/setting/setting-verge.tsx      |  6 ++---
 .../{ => setting}/sysproxy-tooltip.tsx        |  3 +--
 src/pages/_layout.tsx                         |  4 +--
 src/pages/profiles.tsx                        |  4 +--
 10 files changed, 32 insertions(+), 24 deletions(-)
 rename src/components/{window-control.tsx => layout-control.tsx} (92%)
 rename src/components/{ => setting}/guard-state.tsx (97%)
 rename src/components/{ => setting}/palette-switch.tsx (100%)
 rename src/components/{ => setting}/sysproxy-tooltip.tsx (94%)

diff --git a/src/components/window-control.tsx b/src/components/layout-control.tsx
similarity index 92%
rename from src/components/window-control.tsx
rename to src/components/layout-control.tsx
index 4b5e470..7756906 100644
--- a/src/components/window-control.tsx
+++ b/src/components/layout-control.tsx
@@ -6,7 +6,7 @@ import {
   HorizontalRuleRounded,
 } from "@mui/icons-material";
 
-const WindowControl = () => {
+const LayoutControl = () => {
   return (
     <>
       <Button
@@ -36,4 +36,4 @@ const WindowControl = () => {
   );
 };
 
-export default WindowControl;
+export default LayoutControl;
diff --git a/src/components/notice.tsx b/src/components/notice.tsx
index eedc7a5..7729ba3 100644
--- a/src/components/notice.tsx
+++ b/src/components/notice.tsx
@@ -30,7 +30,11 @@ const NoticeInner = (props: InnerProps) => {
         {type === "error" && <ErrorRounded color="error" />}
         {type === "success" && <CheckCircleRounded color="success" />}
 
-        <Typography sx={{ ml: 1 }}>{message}</Typography>
+        <Typography
+          sx={{ ml: 1, wordWrap: "break-word", wordBreak: "break-all" }}
+        >
+          {message}
+        </Typography>
       </Box>
     );
 
diff --git a/src/components/profile-item.tsx b/src/components/profile-item.tsx
index 6f1f70f..c83dcc1 100644
--- a/src/components/profile-item.tsx
+++ b/src/components/profile-item.tsx
@@ -1,4 +1,4 @@
-import React, { useState } from "react";
+import React, { useRef, useState } from "react";
 import dayjs from "dayjs";
 import {
   alpha,
@@ -15,6 +15,7 @@ import { useSWRConfig } from "swr";
 import { RefreshRounded } from "@mui/icons-material";
 import { CmdType } from "../services/types";
 import { updateProfile, deleteProfile } from "../services/cmds";
+import Notice from "./notice";
 import parseTraffic from "../utils/parse-traffic";
 import relativeTime from "dayjs/plugin/relativeTime";
 
@@ -32,8 +33,8 @@ const Wrapper = styled(Box)(({ theme }) => ({
 }));
 
 const round = keyframes`
-from { transform: rotate(0deg); }
-to { transform: rotate(360deg); }
+  from { transform: rotate(0deg); }
+  to { transform: rotate(360deg); }
 `;
 
 interface Props {
@@ -43,7 +44,7 @@ interface Props {
   onClick: () => void;
 }
 
-const ProfileItemComp: React.FC<Props> = (props) => {
+const ProfileItem: React.FC<Props> = (props) => {
   const { index, selected, itemData, onClick } = props;
 
   const { mutate } = useSWRConfig();
@@ -65,20 +66,25 @@ const ProfileItemComp: React.FC<Props> = (props) => {
     try {
       await updateProfile(index);
       mutate("getProfiles");
-    } catch (err) {
-      console.error(err);
+    } catch (err: any) {
+      Notice.error(err.toString());
     } finally {
       setLoading(false);
     }
   };
 
+  const deleteRef = useRef(false);
   const onDelete = async () => {
     setAnchorEl(null);
+    if (deleteRef.current) return;
+    deleteRef.current = true;
     try {
       await deleteProfile(index);
       mutate("getProfiles");
-    } catch (err) {
-      console.error(err);
+    } catch (err: any) {
+      Notice.error(err.toString());
+    } finally {
+      deleteRef.current = false;
     }
   };
 
@@ -198,7 +204,6 @@ const ProfileItemComp: React.FC<Props> = (props) => {
       >
         <MenuItem onClick={onUpdate}>Update</MenuItem>
         <MenuItem onClick={onDelete}>Delete</MenuItem>
-        {/* <MenuItem>Update(proxy)</MenuItem> */}
       </Menu>
     </>
   );
@@ -216,4 +221,4 @@ function parseExpire(expire?: number) {
   return dayjs(expire * 1000).format("YYYY-MM-DD");
 }
 
-export default ProfileItemComp;
+export default ProfileItem;
diff --git a/src/components/guard-state.tsx b/src/components/setting/guard-state.tsx
similarity index 97%
rename from src/components/guard-state.tsx
rename to src/components/setting/guard-state.tsx
index f17fd51..b2cff75 100644
--- a/src/components/guard-state.tsx
+++ b/src/components/setting/guard-state.tsx
@@ -1,5 +1,5 @@
 import { cloneElement, isValidElement, ReactNode, useRef } from "react";
-import noop from "../utils/noop";
+import noop from "../../utils/noop";
 
 interface Props<Value> {
   value?: Value;
diff --git a/src/components/palette-switch.tsx b/src/components/setting/palette-switch.tsx
similarity index 100%
rename from src/components/palette-switch.tsx
rename to src/components/setting/palette-switch.tsx
diff --git a/src/components/setting/setting-clash.tsx b/src/components/setting/setting-clash.tsx
index 97d5b8b..766d3e3 100644
--- a/src/components/setting/setting-clash.tsx
+++ b/src/components/setting/setting-clash.tsx
@@ -10,7 +10,7 @@ import { getClashConfig, updateConfigs } from "../../services/api";
 import { SettingList, SettingItem } from "./setting";
 import { patchClashConfig } from "../../services/cmds";
 import { ApiType } from "../../services/types";
-import GuardState from "../guard-state";
+import GuardState from "./guard-state";
 
 interface Props {
   onError?: (err: Error) => void;
diff --git a/src/components/setting/setting-verge.tsx b/src/components/setting/setting-verge.tsx
index e3d51bb..ceb621a 100644
--- a/src/components/setting/setting-verge.tsx
+++ b/src/components/setting/setting-verge.tsx
@@ -4,9 +4,9 @@ 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";
+import GuardState from "./guard-state";
+import PaletteSwitch from "./palette-switch";
+import SysproxyTooltip from "./sysproxy-tooltip";
 
 interface Props {
   onError?: (err: Error) => void;
diff --git a/src/components/sysproxy-tooltip.tsx b/src/components/setting/sysproxy-tooltip.tsx
similarity index 94%
rename from src/components/sysproxy-tooltip.tsx
rename to src/components/setting/sysproxy-tooltip.tsx
index 8654a3d..08b5633 100644
--- a/src/components/sysproxy-tooltip.tsx
+++ b/src/components/setting/sysproxy-tooltip.tsx
@@ -1,7 +1,7 @@
 import { useEffect, useState } from "react";
 import { InfoRounded } from "@mui/icons-material";
 import { ClickAwayListener, Tooltip } from "@mui/material";
-import { getSystemProxy } from "../services/cmds";
+import { getSystemProxy } from "../../services/cmds";
 
 const SysproxyTooltip = () => {
   const [open, setOpen] = useState(false);
@@ -9,7 +9,6 @@ const SysproxyTooltip = () => {
 
   const onShow = async () => {
     const data = await getSystemProxy();
-    console.log(data);
     setInfo(data ?? {});
     setOpen(true);
   };
diff --git a/src/pages/_layout.tsx b/src/pages/_layout.tsx
index 16e5839..ed9b2e7 100644
--- a/src/pages/_layout.tsx
+++ b/src/pages/_layout.tsx
@@ -11,7 +11,7 @@ import LogoSvg from "../assets/image/logo.svg";
 import Traffic from "../components/traffic";
 import LayoutItem from "../components/layout-item";
 import UpdateButton from "../components/update-button";
-import WindowControl from "../components/window-control";
+import LayoutControl from "../components/layout-control";
 
 const Layout = () => {
   const [mode, setMode] = useRecoilState(atomPaletteMode);
@@ -92,7 +92,7 @@ const Layout = () => {
 
           <div className="layout__right" data-windrag>
             <div className="the-bar">
-              <WindowControl />
+              <LayoutControl />
             </div>
 
             <div className="the-content" data-windrag>
diff --git a/src/pages/profiles.tsx b/src/pages/profiles.tsx
index cbf8a3f..bef8314 100644
--- a/src/pages/profiles.tsx
+++ b/src/pages/profiles.tsx
@@ -11,7 +11,7 @@ import { getProxies, updateProxy } from "../services/api";
 import noop from "../utils/noop";
 import Notice from "../components/notice";
 import BasePage from "../components/base-page";
-import ProfileItemComp from "../components/profile-item";
+import ProfileItem from "../components/profile-item";
 
 const ProfilePage = () => {
   const [url, setUrl] = useState("");
@@ -121,7 +121,7 @@ const ProfilePage = () => {
       <Grid container spacing={3}>
         {profiles?.items?.map((item, idx) => (
           <Grid item xs={12} sm={6} key={item.file}>
-            <ProfileItemComp
+            <ProfileItem
               index={idx}
               selected={profiles.current === idx}
               itemData={item}
-- 
GitLab