Browse Source

feat!: remove protect workflow feature

Ahmad Kholid 3 years ago
parent
commit
2062081363

+ 0 - 11
src/components/newtab/workflow/WorkflowActions.vue

@@ -65,16 +65,6 @@
     </button>
   </ui-card>
   <ui-card padding="p-1 ml-4 flex items-center">
-    <button
-      v-tooltip.group="
-        t(`workflow.protect.${workflow.isProtected ? 'remove' : 'title'}`)
-      "
-      :class="{ 'text-green-600 dark:text-green-400': workflow.isProtected }"
-      class="hoverable p-2 rounded-lg"
-      @click="$emit('protect')"
-    >
-      <v-remixicon name="riShieldKeyholeLine" />
-    </button>
     <button
       v-if="!workflow.isDisabled"
       v-tooltip.group="
@@ -174,7 +164,6 @@ const emit = defineEmits([
   'rename',
   'delete',
   'save',
-  'protect',
   'export',
   'update',
   'share',

+ 7 - 0
src/models/workflow.js

@@ -3,6 +3,7 @@ import { nanoid } from 'nanoid';
 import Log from './log';
 import { cleanWorkflowTriggers } from '@/utils/workflow-trigger';
 import { fetchApi } from '@/utils/api';
+import decryptFlow, { getWorkflowPass } from '@/utils/decrypt-flow';
 
 class Workflow extends Model {
   static entity = 'workflows';
@@ -44,6 +45,12 @@ class Workflow extends Model {
       model.table = model.dataColumns;
       model.dataColumns = [];
     }
+    if (model.isProtected) {
+      const pass = getWorkflowPass(model.pass);
+
+      model.drawflow = decryptFlow(model, pass);
+      model.isProtected = false;
+    }
 
     return model;
   }

+ 10 - 6
src/newtab/App.vue

@@ -51,7 +51,7 @@
   </div>
 </template>
 <script setup>
-import { ref, onMounted } from 'vue';
+import { ref } from 'vue';
 import { useStore } from 'vuex';
 import { useI18n } from 'vue-i18n';
 import { compare } from 'compare-versions';
@@ -154,7 +154,7 @@ window.addEventListener('beforeunload', () => {
   browser.storage.local.onChanged.removeListener(handleStorageChanged);
 });
 
-onMounted(async () => {
+(async () => {
   try {
     const { isFirstTime } = await browser.storage.local.get('isFirstTime');
 
@@ -163,22 +163,26 @@ onMounted(async () => {
     await Promise.allSettled([
       store.dispatch('retrieve', ['workflows', 'logs', 'collections']),
       store.dispatch('retrieveWorkflowState'),
-      fetchUserData(),
+      loadLocaleMessages(store.state.settings.locale, 'newtab'),
     ]);
-
-    await loadLocaleMessages(store.state.settings.locale, 'newtab');
     await setI18nLanguage(store.state.settings.locale);
 
     retrieved.value = true;
 
+    await fetchUserData();
     await syncHostWorkflow();
+
+    store.commit('updateState', {
+      key: 'userDataRetrieved',
+      value: true,
+    });
   } catch (error) {
     retrieved.value = true;
     console.error(error);
   }
 
   localStorage.setItem('ext-version', currentVersion);
-});
+})();
 </script>
 <style>
 html,

+ 12 - 25
src/newtab/pages/workflows/[id].vue

@@ -112,7 +112,6 @@
           @host="setAsHostWorkflow"
           @execute="executeWorkflow"
           @export="workflowExporter"
-          @protect="toggleProtection"
           @showModal="(state.modalName = $event), (state.showModal = true)"
         />
       </div>
@@ -270,7 +269,6 @@ import workflowTrigger from '@/utils/workflow-trigger';
 import WorkflowShare from '@/components/newtab/workflow/WorkflowShare.vue';
 import WorkflowActions from '@/components/newtab/workflow/WorkflowActions.vue';
 import WorkflowBuilder from '@/components/newtab/workflow/WorkflowBuilder.vue';
-import WorkflowProtect from '@/components/newtab/workflow/WorkflowProtect.vue';
 import WorkflowSettings from '@/components/newtab/workflow/WorkflowSettings.vue';
 import WorkflowEditBlock from '@/components/newtab/workflow/WorkflowEditBlock.vue';
 import WorkflowDataTable from '@/components/newtab/workflow/WorkflowDataTable.vue';
@@ -357,12 +355,6 @@ const workflowModals = {
     component: WorkflowGlobalData,
     title: t('common.globalData'),
   },
-  'protect-workflow': {
-    width: 'max-w-lg',
-    icon: 'riShieldKeyholeLine',
-    component: WorkflowProtect,
-    title: t('workflow.protect.title'),
-  },
   settings: {
     icon: 'riSettings3Line',
     component: WorkflowSettings,
@@ -671,23 +663,6 @@ function deleteLog(logId) {
     store.dispatch('saveToStorage', 'logs');
   });
 }
-function toggleProtection() {
-  if (workflow.value.isProtected) {
-    const decryptedFlow = decryptFlow(
-      workflow.value,
-      getWorkflowPass(workflow.value.pass)
-    );
-
-    updateWorkflow({
-      pass: '',
-      isProtected: false,
-      drawflow: decryptedFlow,
-    });
-  } else {
-    state.showModal = true;
-    state.modalName = 'protect-workflow';
-  }
-}
 function workflowExporter() {
   const currentWorkflow = { ...workflow.value };
 
@@ -846,6 +821,18 @@ watch(
     editor.value.import(drawflow, false);
   }
 );
+watch(
+  () => store.state.userDataRetrieved,
+  () => {
+    if (workflowData.hasShared) return;
+
+    workflowData.hasShared = objectHasKey(
+      store.state.sharedWorkflows,
+      workflowId
+    );
+    workflowData.isHost = objectHasKey(store.state.hostWorkflows, workflowId);
+  }
+);
 
 onBeforeRouteLeave(() => {
   updateHostedWorkflow();

+ 1 - 0
src/store/index.js

@@ -20,6 +20,7 @@ const store = createStore({
     settings: {
       locale: 'en',
     },
+    userDataRetrieved: false,
   }),
   mutations: {
     updateState(state, { key, value }) {

+ 1 - 1
src/utils/api.js

@@ -31,7 +31,7 @@ export const googleSheets = {
 async function cacheApi(key, callback) {
   const cacheResult = parseJSON(sessionStorage.getItem(key), null);
 
-  if (cacheResult) {
+  if (cacheResult && Object.keys(cacheResult).length > 0) {
     return cacheResult;
   }