From dd605e26108c43851282827540eb12083da2b430 Mon Sep 17 00:00:00 2001 From: GyDi <segydi@foxmail.com> Date: Tue, 22 Mar 2022 01:27:22 +0800 Subject: [PATCH] fix: update state --- src/components/layout/update-dialog.tsx | 20 ++++++++++---------- src/services/states.ts | 6 ++++++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/components/layout/update-dialog.tsx b/src/components/layout/update-dialog.tsx index c8b94e3..2d2c3f4 100644 --- a/src/components/layout/update-dialog.tsx +++ b/src/components/layout/update-dialog.tsx @@ -1,6 +1,7 @@ import useSWR from "swr"; import snarkdown from "snarkdown"; -import { useState, useMemo } from "react"; +import { useMemo } from "react"; +import { useRecoilState } from "recoil"; import { Box, Button, @@ -13,6 +14,7 @@ import { import { relaunch } from "@tauri-apps/api/process"; import { checkUpdate, installUpdate } from "@tauri-apps/api/updater"; import { killSidecars, restartSidecar } from "../../services/cmds"; +import { atomUpdateState } from "../../services/states"; import Notice from "../base/base-notice"; interface Props { @@ -24,8 +26,6 @@ const UpdateLog = styled(Box)(() => ({ "h1,h2,h3,ul,ol,p": { margin: "0.5em 0", color: "inherit" }, })); -let uploadingState = false; - const UpdateDialog = (props: Props) => { const { open, onClose } = props; const { data: updateInfo } = useSWR("checkUpdate", checkUpdate, { @@ -33,22 +33,22 @@ const UpdateDialog = (props: Props) => { revalidateIfStale: false, focusThrottleInterval: 36e5, // 1 hour }); - const [uploading, setUploading] = useState(uploadingState); + + const [updateState, setUpdateState] = useRecoilState(atomUpdateState); const onUpdate = async () => { - setUploading(true); - uploadingState = true; + if (updateState) return; + setUpdateState(true); try { - await installUpdate(); await killSidecars(); + await installUpdate(); await relaunch(); } catch (err: any) { await restartSidecar(); Notice.error(err?.message || err.toString()); } finally { - setUploading(false); - uploadingState = false; + setUpdateState(false); } }; @@ -73,7 +73,7 @@ const UpdateDialog = (props: Props) => { <Button autoFocus variant="contained" - disabled={uploading} + disabled={updateState} onClick={onUpdate} > Update diff --git a/src/services/states.ts b/src/services/states.ts index 63b9762..250e31e 100644 --- a/src/services/states.ts +++ b/src/services/states.ts @@ -16,3 +16,9 @@ export const atomLoadingCache = atom<Record<string, boolean>>({ key: "atomLoadingCache", default: {}, }); + +// save update state +export const atomUpdateState = atom<boolean>({ + key: "atomUpdateState", + default: false, +}); -- GitLab