From c927419c9915bfb3e558ec6df0af30618b09dc19 Mon Sep 17 00:00:00 2001 From: GyDi Date: Sun, 3 Apr 2022 01:41:48 +0800 Subject: [PATCH] refactor: enhanced mode ui component --- src/components/profile/enhanced.tsx | 91 +++++++++++++++++++++++++++++ src/pages/profiles.tsx | 72 ++--------------------- 2 files changed, 95 insertions(+), 68 deletions(-) create mode 100644 src/components/profile/enhanced.tsx 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)} />