Browse Source

feat: separate workflow state

Ahmad Kholid 2 years ago
parent
commit
6c59443a9e

+ 1 - 1
src/components/newtab/app/AppSidebar.vue

@@ -179,7 +179,7 @@ const tabs = [
 ];
 ];
 const hoverIndicator = ref(null);
 const hoverIndicator = ref(null);
 const showHoverIndicator = ref(false);
 const showHoverIndicator = ref(false);
-const runningWorkflowsLen = computed(() => workflowStore.states.length);
+const runningWorkflowsLen = computed(() => workflowStore.getAllStates.length);
 
 
 useShortcut(
 useShortcut(
   tabs.reduce((acc, { shortcut }) => {
   tabs.reduce((acc, { shortcut }) => {

+ 12 - 3
src/newtab/App.vue

@@ -75,6 +75,7 @@ import { loadLocaleMessages, setI18nLanguage } from '@/lib/vueI18n';
 import { getUserWorkflows } from '@/utils/api';
 import { getUserWorkflows } from '@/utils/api';
 import { getWorkflowPermissions } from '@/utils/workflowData';
 import { getWorkflowPermissions } from '@/utils/workflowData';
 import { sendMessage } from '@/utils/message';
 import { sendMessage } from '@/utils/message';
+import { workflowState, startWorkflowExec } from '@/workflowEngine';
 import automa from '@business';
 import automa from '@business';
 import dbLogs from '@/db/logs';
 import dbLogs from '@/db/logs';
 import dayjs from '@/lib/dayjs';
 import dayjs from '@/lib/dayjs';
@@ -84,7 +85,6 @@ import dataMigration from '@/utils/dataMigration';
 import iconFirefox from '@/assets/svg/logoFirefox.svg';
 import iconFirefox from '@/assets/svg/logoFirefox.svg';
 import iconChrome from '@/assets/svg/logo.svg';
 import iconChrome from '@/assets/svg/logo.svg';
 import SharedPermissionsModal from '@/components/newtab/shared/SharedPermissionsModal.vue';
 import SharedPermissionsModal from '@/components/newtab/shared/SharedPermissionsModal.vue';
-import { startWorkflowExec } from '@/workflowEngine';
 
 
 let icon;
 let icon;
 if (window.location.protocol === 'moz-extension:') {
 if (window.location.protocol === 'moz-extension:') {
@@ -250,7 +250,7 @@ browser.storage.local.onChanged.addListener(({ workflowStates }) => {
 });
 });
 
 
 useHead(() => {
 useHead(() => {
-  const runningWorkflows = workflowStore.states.length;
+  const runningWorkflows = workflowStore.popupStates.length;
 
 
   return {
   return {
     title: 'Dashboard',
     title: 'Dashboard',
@@ -263,7 +263,7 @@ useHead(() => {
 
 
 /* eslint-disable-next-line */
 /* eslint-disable-next-line */
 window.onbeforeunload = () => {
 window.onbeforeunload = () => {
-  const runningWorkflows = workflowStore.states.length;
+  const runningWorkflows = workflowStore.popupStates.length;
   if (window.isDataChanged || runningWorkflows > 0) {
   if (window.isDataChanged || runningWorkflows > 0) {
     return t('message.notSaved');
     return t('message.notSaved');
   }
   }
@@ -294,6 +294,15 @@ window.addEventListener('message', ({ data }) => {
 
 
 (async () => {
 (async () => {
   try {
   try {
+    workflowState.storage = {
+      get() {
+        return workflowStore.popupStates;
+      },
+      set(key, value) {
+        workflowStore.popupStates = Object.values(value);
+      },
+    };
+
     const tabs = await browser.tabs.query({
     const tabs = await browser.tabs.query({
       url: browser.runtime.getURL('/newtab.html'),
       url: browser.runtime.getURL('/newtab.html'),
     });
     });

+ 1 - 1
src/newtab/pages/Logs.vue

@@ -11,7 +11,7 @@
     <div v-if="logs" style="min-height: 320px">
     <div v-if="logs" style="min-height: 320px">
       <shared-logs-table
       <shared-logs-table
         :logs="logs"
         :logs="logs"
-        :running="workflowStore.states"
+        :running="workflowStore.getAllStates"
         class="w-full"
         class="w-full"
       >
       >
         <template #item-prepend="{ log }">
         <template #item-prepend="{ log }">

+ 1 - 1
src/newtab/pages/logs/Running.vue

@@ -96,7 +96,7 @@ const interval = setInterval(() => {
 }, 1000);
 }, 1000);
 
 
 const running = computed(() =>
 const running = computed(() =>
-  workflowStore.states.find(({ id }) => id === route.params.id)
+  workflowStore.getAllStates.find(({ id }) => id === route.params.id)
 );
 );
 
 
 function stopWorkflow() {
 function stopWorkflow() {

+ 5 - 1
src/stores/workflow.js

@@ -94,14 +94,18 @@ export const useWorkflowStore = defineStore('workflow', {
   state: () => ({
   state: () => ({
     states: [],
     states: [],
     workflows: {},
     workflows: {},
+    popupStates: [],
     retrieved: false,
     retrieved: false,
     isFirstTime: false,
     isFirstTime: false,
   }),
   }),
   getters: {
   getters: {
+    getAllStates: (state) => [...state.popupStates, ...state.states],
     getById: (state) => (id) => state.workflows[id],
     getById: (state) => (id) => state.workflows[id],
     getWorkflows: (state) => Object.values(state.workflows),
     getWorkflows: (state) => Object.values(state.workflows),
     getWorkflowStates: (state) => (id) =>
     getWorkflowStates: (state) => (id) =>
-      state.states.filter(({ workflowId }) => workflowId === id),
+      [...state.states, ...state.popupStates].filter(
+        ({ workflowId }) => workflowId === id
+      ),
   },
   },
   actions: {
   actions: {
     async loadData() {
     async loadData() {

+ 1 - 1
src/workflowEngine/index.js

@@ -14,7 +14,7 @@ import blocksHandler from './blocksHandler';
 const workflowStateStorage = {
 const workflowStateStorage = {
   get() {
   get() {
     return browser.storage.local
     return browser.storage.local
-      .get('states')
+      .get('workflowStates')
       .then(({ workflowStates }) => workflowStates || []);
       .then(({ workflowStates }) => workflowStates || []);
   },
   },
   set(key, value) {
   set(key, value) {