Browse Source

feat: support mustach tag in repeat task block

Ahmad Kholid 2 years ago
parent
commit
ad7233258c

+ 5 - 3
src/background/workflowEngine/blocksHandler/handlerRepeatTask.js

@@ -1,17 +1,19 @@
 function repeatTask({ data, id }) {
 function repeatTask({ data, id }) {
   return new Promise((resolve) => {
   return new Promise((resolve) => {
-    if (this.repeatedTasks[id] >= data.repeatFor) {
+    const repeat = Number.isNaN(+data.repeatFor) ? 0 : +data.repeatFor;
+
+    if (this.repeatedTasks[id] > repeat) {
       delete this.repeatedTasks[id];
       delete this.repeatedTasks[id];
 
 
       resolve({
       resolve({
-        data: data.repeatFor,
+        data: repeat,
         nextBlockId: this.getBlockConnections(id),
         nextBlockId: this.getBlockConnections(id),
       });
       });
     } else {
     } else {
       this.repeatedTasks[id] = (this.repeatedTasks[id] || 1) + 1;
       this.repeatedTasks[id] = (this.repeatedTasks[id] || 1) + 1;
 
 
       resolve({
       resolve({
-        data: data.repeatFor,
+        data: repeat,
         nextBlockId: this.getBlockConnections(id, 2),
         nextBlockId: this.getBlockConnections(id, 2),
       });
       });
     }
     }

+ 9 - 17
src/components/block/BlockRepeatTask.vue

@@ -1,5 +1,5 @@
 <template>
 <template>
-  <ui-card :id="componentId" class="p-4 repeat-task">
+  <ui-card :id="componentId" class="p-4 repeat-task w-64">
     <Handle :id="`${id}-input-1`" type="target" :position="Position.Left" />
     <Handle :id="`${id}-input-1`" type="target" :position="Position.Left" />
     <div class="flex items-center mb-2">
     <div class="flex items-center mb-2">
       <div
       <div
@@ -16,21 +16,19 @@
         @click="$emit('delete', id)"
         @click="$emit('delete', id)"
       />
       />
     </div>
     </div>
-    <label
-      class="mb-2 block bg-input focus-within:bg-input pr-4 transition rounded-lg"
-    >
+    <div class="flex bg-input rounded-lg items-center relative">
       <input
       <input
-        :value="data.repeatFor || 0"
-        min="0"
-        class="pl-4 py-2 bg-transparent rounded-l-lg w-24 mr-2"
-        type="number"
+        :value="data.repeatFor"
+        placeholder="0"
+        class="bg-transparent py-2 px-4 focus:ring-0"
         required
         required
+        style="padding-right: 57px; width: 95%"
         @input="handleInput"
         @input="handleInput"
       />
       />
-      <span class="text-gray-600 dark:text-gray-200">
+      <span class="text-gray-600 dark:text-gray-200 absolute right-4">
         {{ t('workflow.blocks.repeat-task.times') }}
         {{ t('workflow.blocks.repeat-task.times') }}
       </span>
       </span>
-    </label>
+    </div>
     <p class="text-right text-gray-600 dark:text-gray-200">
     <p class="text-right text-gray-600 dark:text-gray-200">
       {{ t('workflow.blocks.repeat-task.repeatFrom') }}
       {{ t('workflow.blocks.repeat-task.repeatFrom') }}
     </p>
     </p>
@@ -70,13 +68,7 @@ const block = useEditorBlock(props.label);
 const componentId = useComponentId('block-delay');
 const componentId = useComponentId('block-delay');
 
 
 function handleInput({ target }) {
 function handleInput({ target }) {
-  target.reportValidity();
-
-  const repeatFor = +target.value || 0;
-
-  if (repeatFor < 0) return;
-
-  emit('update', { repeatFor });
+  emit('update', { repeatFor: target.value });
 }
 }
 </script>
 </script>
 <style>
 <style>

+ 0 - 3
src/components/newtab/package/PackageSettingIOSelect.vue

@@ -101,7 +101,6 @@ const items = computed(() => {
 });
 });
 
 
 function updateData(data) {
 function updateData(data) {
-  console.log('saveToComputer', data);
   emit('update', data);
   emit('update', data);
 }
 }
 function selectItem(item) {
 function selectItem(item) {
@@ -117,8 +116,6 @@ function selectItem(item) {
   } else {
   } else {
     updateData({ handleId: item.id });
     updateData({ handleId: item.id });
   }
   }
-
-  console.log(item, props.data);
 }
 }
 function getBlockName(item, type) {
 function getBlockName(item, type) {
   const { label, data } = item;
   const { label, data } = item;

+ 0 - 1
src/newtab/pages/workflows/[id].vue

@@ -1026,7 +1026,6 @@ async function updateWorkflow(data) {
   try {
   try {
     if (isPackage) {
     if (isPackage) {
       delete data.drawflow;
       delete data.drawflow;
-      console.log('update.....', data);
       await packageStore.update({
       await packageStore.update({
         id: workflowId,
         id: workflowId,
         data,
         data,

+ 2 - 1
src/utils/shared.js

@@ -511,9 +511,10 @@ export const tasks = {
     outputs: 2,
     outputs: 2,
     allowedInputs: true,
     allowedInputs: true,
     maxConnection: 1,
     maxConnection: 1,
+    refDataKeys: ['repeatFor'],
     data: {
     data: {
       disableBlock: false,
       disableBlock: false,
-      repeatFor: 1,
+      repeatFor: '1',
     },
     },
   },
   },
   'javascript-code': {
   'javascript-code': {