Przeglądaj źródła

handle the situation when user cancel exporting/importing.

oldj 4 lat temu
rodzic
commit
19876aa7a3

+ 11 - 6
src/main/actions/export.ts

@@ -11,7 +11,7 @@ import { promises as fs } from 'fs'
 import * as path from 'path'
 import version from '@root/version.json'
 
-export default async (): Promise<string | false> => {
+export default async (): Promise<string | null | false> => {
   let { lang } = await getI18N()
 
   let result = await dialog.showSaveDialog({
@@ -24,16 +24,21 @@ export default async (): Promise<string | false> => {
   })
 
   if (result.canceled || !result.filePath) {
-    return false
+    return null
   }
 
   let target_dir = result.filePath
 
   let data = await swhdb.toJSON()
-  await fs.writeFile(target_dir, JSON.stringify({
-    data,
-    version,
-  }), 'utf-8')
+  try {
+    await fs.writeFile(target_dir, JSON.stringify({
+      data,
+      version,
+    }), 'utf-8')
+  } catch (e) {
+    console.error(e)
+    return false
+  }
 
   return target_dir
 }

+ 2 - 2
src/main/actions/import.ts

@@ -10,7 +10,7 @@ import { swhdb } from '@main/data'
 import { dialog } from 'electron'
 import { promises as fs } from 'fs'
 
-export default async (): Promise<boolean | string> => {
+export default async (): Promise<boolean | null | string> => {
   let { lang } = await getI18N()
 
   let result = await dialog.showOpenDialog({
@@ -26,7 +26,7 @@ export default async (): Promise<boolean | string> => {
   })
 
   if (result.canceled) {
-    return false
+    return null
   }
 
   let paths = result.filePaths

+ 6 - 2
src/renderer/components/TopBar/ConfigMenu.tsx

@@ -84,7 +84,9 @@ const ConfigMenu = (props: Props) => {
           icon={<BiExport/>}
           onClick={async () => {
             let r = await actions.exportData()
-            if (r === false) {
+            if (r === null) {
+              return
+            } else if (r === false) {
               toast({
                 status: 'error',
                 description: lang.fail,
@@ -105,7 +107,9 @@ const ConfigMenu = (props: Props) => {
           icon={<BiImport/>}
           onClick={async () => {
             let r = await actions.importData()
-            if (r === true) {
+            if (r === null) {
+              return
+            } else if (r === true) {
               toast({
                 status: 'success',
                 description: lang.import_done,