Browse Source

feat: auto update profiles

GyDi 3 years ago
parent
commit
f72536bce0
2 changed files with 15 additions and 7 deletions
  1. 14 6
      src/pages/rules.tsx
  2. 1 1
      src/services/command.ts

+ 14 - 6
src/pages/rules.tsx

@@ -10,6 +10,7 @@ import {
 } from "../services/command";
 import ProfileItemComp from "../components/profile-item";
 import useNotice from "../utils/use-notice";
+import noop from "../utils/noop";
 
 const RulesPage = () => {
   const [url, setUrl] = useState("");
@@ -19,14 +20,21 @@ const RulesPage = () => {
   const { mutate } = useSWRConfig();
   const { data: profiles = {} } = useSWR("getProfiles", getProfiles);
 
-  const onClick = () => {
+  const onImport = async () => {
     if (!url) return;
     setUrl("");
     setDisabled(true);
-    importProfile(url)
-      .then(() => notice.success("Successfully import profile."))
-      .catch(() => notice.error("Failed to import profile."))
-      .finally(() => setDisabled(false));
+
+    try {
+      await importProfile(url);
+      mutate("getProfiles", getProfiles());
+      if (!profiles.items?.length) putProfiles(0).catch(noop);
+      notice.success("Successfully import profile.");
+    } catch {
+      notice.error("Failed to import profile.");
+    } finally {
+      setDisabled(false);
+    }
   };
 
   const lockRef = useRef(false);
@@ -76,7 +84,7 @@ const RulesPage = () => {
         <Button
           disabled={!url || disabled}
           variant="contained"
-          onClick={onClick}
+          onClick={onImport}
         >
           Import
         </Button>

+ 1 - 1
src/services/command.ts

@@ -48,7 +48,7 @@ export interface ProfilesConfig {
 }
 
 export async function getProfiles() {
-  return invoke<ProfilesConfig | null>("get_profiles");
+  return (await invoke<ProfilesConfig>("get_profiles")) ?? {};
 }
 
 export async function setProfiles(current: number, profile: ProfileItem) {