Browse Source

fix: "Reuse last state" not working

Ahmad Kholid 3 years ago
parent
commit
20755a0daa
5 changed files with 24 additions and 13 deletions
  1. 9 9
      src/background/workflow-engine/engine.js
  2. 9 0
      src/models/log.js
  3. 2 0
      src/models/workflow.js
  4. 3 3
      src/newtab/App.vue
  5. 1 1
      src/utils/helper.js

+ 9 - 9
src/background/workflow-engine/engine.js

@@ -161,13 +161,12 @@ class WorkflowEngine {
       chrome.debugger.onEvent.addListener(this.onDebugEvent);
     }
     if (this.workflow.settings.reuseLastState) {
-      const lastStateKey = `last-state:${this.workflow.id}`;
+      const lastStateKey = `state:${this.workflow.id}`;
       browser.storage.local.get(lastStateKey).then((value) => {
         const lastState = value[lastStateKey];
-
         if (!lastState) return;
 
-        this.columns = lastState.columns;
+        Object.assign(this.columns, lastState.columns);
         Object.assign(this.referenceData, lastState.referenceData);
       });
     }
@@ -350,19 +349,20 @@ class WorkflowEngine {
       });
 
       if (this.workflow.settings.reuseLastState) {
-        browser.storage.local.set({
-          [`last-state:${this.workflow.id}`]: {
+        const workflowState = {
+          [`state:${this.workflow.id}`]: {
             columns: this.columns,
             referenceData: {
               table: this.referenceData.table,
               variables: this.referenceData.variables,
-              globalData: this.referenceData.globalData,
             },
           },
-        });
-      }
+        };
 
-      if (status === 'success') clearCache(this.workflow);
+        browser.storage.local.set(workflowState);
+      } else if (status === 'success') {
+        clearCache(this.workflow);
+      }
 
       this.isDestroyed = true;
       this.eventListeners = {};

+ 9 - 0
src/models/log.js

@@ -1,5 +1,6 @@
 import { Model } from '@vuex-orm/core';
 import { nanoid } from 'nanoid';
+import browser from 'webextension-polyfill';
 
 class Log extends Model {
   static entity = 'logs';
@@ -27,6 +28,14 @@ class Log extends Model {
   static afterDelete(item) {
     const logs = this.query().where('collectionLogId', item.id).get();
 
+    browser.storage.local.get('logsCtxData').then((data) => {
+      const logsCtxData = data.logsCtxData || {};
+
+      delete logsCtxData[item.id];
+
+      browser.storage.local.set({ logsCtxData });
+    });
+
     if (logs.length !== 0) {
       Promise.allSettled(logs.map(({ id }) => this.delete(id))).then(() => {
         this.store().dispatch('saveToStorage', 'workflows');

+ 2 - 0
src/models/workflow.js

@@ -98,6 +98,8 @@ class Workflow extends Model {
 
         await browser.storage.local.set({ clearCache: true });
       }
+
+      browser.storage.local.remove(`state:${id}`);
     } catch (error) {
       console.error(error);
     }

+ 3 - 3
src/newtab/App.vue

@@ -59,6 +59,7 @@ import browser from 'webextension-polyfill';
 import { useTheme } from '@/composable/theme';
 import { loadLocaleMessages, setI18nLanguage } from '@/lib/vue-i18n';
 import { fetchApi, getSharedWorkflows, getUserWorkflows } from '@/utils/api';
+import Log from '@/models/log';
 import Workflow from '@/models/workflow';
 import AppSidebar from '@/components/newtab/app/AppSidebar.vue';
 
@@ -182,9 +183,8 @@ async function fetchUserData() {
   }
 }
 function handleStorageChanged(change) {
-  if (change.logs) {
-    store.dispatch('entities/create', {
-      entity: 'logs',
+  if (change.logs && Log.all().length !== change.logs.newValue.length) {
+    Log.insertOrUpdate({
       data: change.logs.newValue,
     });
   }

+ 1 - 1
src/utils/helper.js

@@ -203,7 +203,7 @@ export function debounce(callback, time = 200) {
 
 export async function clearCache(workflow) {
   try {
-    await browser.storage.local.remove(`last-state:${workflow.id}`);
+    await browser.storage.local.remove(`state:${workflow.id}`);
 
     const flows = parseJSON(workflow.drawflow, null);
     const blocks = flows && flows.drawflow.Home.data;