diff --git a/src/components/profile/enhanced.tsx b/src/components/profile/enhanced.tsx
new file mode 100644
index 0000000..430e7c8
--- /dev/null
+++ b/src/components/profile/enhanced.tsx
@@ -0,0 +1,91 @@
+import useSWR from "swr";
+import { useLockFn } from "ahooks";
+import { Box, Grid } from "@mui/material";
+import {
+ getProfiles,
+ deleteProfile,
+ enhanceProfiles,
+ changeProfileChain,
+} from "../../services/cmds";
+import { CmdType } from "../../services/types";
+import Notice from "../base/base-notice";
+import ProfileMore from "./profile-more";
+
+interface Props {
+ items: CmdType.ProfileItem[];
+ chain: string[];
+}
+
+const EnhancedMode = (props: Props) => {
+ const { items, chain } = props;
+
+ const { mutate } = useSWR("getProfiles", getProfiles);
+
+ // handler
+ const onEnhance = useLockFn(enhanceProfiles);
+
+ const onEnhanceEnable = useLockFn(async (uid: string) => {
+ if (chain.includes(uid)) return;
+
+ const newChain = [...chain, uid];
+ await changeProfileChain(newChain);
+ mutate((conf = {}) => ({ ...conf, chain: newChain }), true);
+ });
+
+ const onEnhanceDisable = useLockFn(async (uid: string) => {
+ if (!chain.includes(uid)) return;
+
+ const newChain = chain.filter((i) => i !== uid);
+ await changeProfileChain(newChain);
+ mutate((conf = {}) => ({ ...conf, chain: newChain }), true);
+ });
+
+ const onEnhanceDelete = useLockFn(async (uid: string) => {
+ try {
+ await onEnhanceDisable(uid);
+ await deleteProfile(uid);
+ mutate();
+ } catch (err: any) {
+ Notice.error(err?.message || err.toString());
+ }
+ });
+
+ const onMoveTop = useLockFn(async (uid: string) => {
+ if (!chain.includes(uid)) return;
+
+ const newChain = [uid].concat(chain.filter((i) => i !== uid));
+ await changeProfileChain(newChain);
+ mutate((conf = {}) => ({ ...conf, chain: newChain }), true);
+ });
+
+ const onMoveEnd = useLockFn(async (uid: string) => {
+ if (!chain.includes(uid)) return;
+
+ const newChain = chain.filter((i) => i !== uid).concat([uid]);
+ await changeProfileChain(newChain);
+ mutate((conf = {}) => ({ ...conf, chain: newChain }), true);
+ });
+
+ return (
+
+
+ {items.map((item) => (
+
+ onEnhanceEnable(item.uid)}
+ onDisable={() => onEnhanceDisable(item.uid)}
+ onDelete={() => onEnhanceDelete(item.uid)}
+ onMoveTop={() => onMoveTop(item.uid)}
+ onMoveEnd={() => onMoveEnd(item.uid)}
+ onEnhance={onEnhance}
+ />
+
+ ))}
+
+
+ );
+};
+
+export default EnhancedMode;
diff --git a/src/pages/profiles.tsx b/src/pages/profiles.tsx
index d5b6335..9519fef 100644
--- a/src/pages/profiles.tsx
+++ b/src/pages/profiles.tsx
@@ -6,18 +6,15 @@ import { useTranslation } from "react-i18next";
import {
getProfiles,
patchProfile,
- deleteProfile,
selectProfile,
importProfile,
- enhanceProfiles,
- changeProfileChain,
} from "../services/cmds";
import { getProxies, updateProxy } from "../services/api";
import Notice from "../components/base/base-notice";
import BasePage from "../components/base/base-page";
import ProfileNew from "../components/profile/profile-new";
import ProfileItem from "../components/profile/profile-item";
-import ProfileMore from "../components/profile/profile-more";
+import EnhancedMode from "../components/profile/enhanced";
const ProfilePage = () => {
const { t } = useTranslation();
@@ -130,54 +127,6 @@ const ProfilePage = () => {
}
});
- /** enhanced profile mode */
-
- const chain = profiles.chain || [];
-
- const onEnhance = useLockFn(enhanceProfiles);
-
- const onEnhanceEnable = useLockFn(async (uid: string) => {
- if (chain.includes(uid)) return;
-
- const newChain = [...chain, uid];
- await changeProfileChain(newChain);
- mutate("getProfiles", { ...profiles, chain: newChain }, true);
- });
-
- const onEnhanceDisable = useLockFn(async (uid: string) => {
- if (!chain.includes(uid)) return;
-
- const newChain = chain.filter((i) => i !== uid);
- await changeProfileChain(newChain);
- mutate("getProfiles", { ...profiles, chain: newChain }, true);
- });
-
- const onEnhanceDelete = useLockFn(async (uid: string) => {
- try {
- await onEnhanceDisable(uid);
- await deleteProfile(uid);
- mutate("getProfiles");
- } catch (err: any) {
- Notice.error(err?.message || err.toString());
- }
- });
-
- const onMoveTop = useLockFn(async (uid: string) => {
- if (!chain.includes(uid)) return;
-
- const newChain = [uid].concat(chain.filter((i) => i !== uid));
- await changeProfileChain(newChain);
- mutate("getProfiles", { ...profiles, chain: newChain }, true);
- });
-
- const onMoveEnd = useLockFn(async (uid: string) => {
- if (!chain.includes(uid)) return;
-
- const newChain = chain.filter((i) => i !== uid).concat([uid]);
- await changeProfileChain(newChain);
- mutate("getProfiles", { ...profiles, chain: newChain }, true);
- });
-
return (
@@ -216,22 +165,9 @@ const ProfilePage = () => {
))}
-
- {enhanceItems.map((item) => (
-
- onEnhanceEnable(item.uid)}
- onDisable={() => onEnhanceDisable(item.uid)}
- onDelete={() => onEnhanceDelete(item.uid)}
- onMoveTop={() => onMoveTop(item.uid)}
- onMoveEnd={() => onMoveEnd(item.uid)}
- onEnhance={onEnhance}
- />
-
- ))}
-
+ {enhanceItems.length && (
+
+ )}
setDialogOpen(false)} />