瀏覽代碼

feat: add loop through numbers option

Ahmad Kholid 3 年之前
父節點
當前提交
dbede04a94

+ 7 - 1
src/background/workflow-engine/blocks-handler/handler-loop-breakpoint.js

@@ -2,11 +2,17 @@ import { getBlockConnection } from '../helper';
 
 function loopBreakpoint(block, prevBlockData) {
   const currentLoop = this.loopList[block.data.loopId];
+
   return new Promise((resolve) => {
+    const validLoopData =
+      currentLoop.type === 'numbers'
+        ? true
+        : currentLoop.index <= currentLoop.data.length - 1;
+
     if (
       currentLoop &&
       currentLoop.index < currentLoop.maxLoop - 1 &&
-      currentLoop.index <= currentLoop.data.length - 1
+      validLoopData
     ) {
       resolve({
         data: '',

+ 33 - 8
src/background/workflow-engine/blocks-handler/handler-loop-data.js

@@ -7,23 +7,48 @@ function loopData(block) {
 
     if (this.loopList[data.loopId]) {
       this.loopList[data.loopId].index += 1;
-      this.loopData[data.loopId] =
-        this.loopList[data.loopId].data[this.loopList[data.loopId].index];
+
+      let currentLoopData;
+
+      if (data.loopThrough === 'numbers') {
+        currentLoopData = this.loopData[data.loopId] + 1;
+      } else {
+        currentLoopData =
+          this.loopList[data.loopId].data[this.loopList[data.loopId].index];
+      }
+
+      this.loopData[data.loopId] = currentLoopData;
     } else {
-      const currLoopData =
-        data.loopThrough === 'data-columns'
-          ? generateJSON(Object.keys(this.data), this.data)
-          : JSON.parse(data.loopData);
+      let currLoopData;
+
+      switch (data.loopThrough) {
+        case 'numbers':
+          currLoopData = data.fromNumber;
+          break;
+        case 'data-columns':
+          currLoopData = generateJSON(Object.keys(this.data), this.data);
+          break;
+        case 'custom-data':
+          currLoopData = JSON.parse(data.loopData);
+          break;
+        default:
+      }
 
       this.loopList[data.loopId] = {
         index: 0,
         data: currLoopData,
         id: data.loopId,
         blockId: block.id,
-        maxLoop: data.maxLoop || currLoopData.length,
+        type: data.loopThrough,
+        maxLoop:
+          data.loopThrough === 'numbers'
+            ? data.toNumber + 1 - data.fromNumber
+            : data.maxLoop || currLoopData.length,
       };
       /* eslint-disable-next-line */
-      this.loopData[data.loopId] = currLoopData[0];
+      this.loopData[data.loopId] = data.loopThrough === 'numbers' ? data.fromNumber : currLoopData[0];
+
+      console.log(this.loopList, this.loopData);
     }
 
     resolve({

+ 28 - 1
src/components/newtab/workflow/edit/EditLoopData.vue

@@ -29,6 +29,7 @@
       </option>
     </ui-select>
     <ui-input
+      v-if="data.loopThrough !== 'numbers'"
       :model-value="data.maxLoop"
       :label="t('workflow.blocks.loop-data.maxLoop.label')"
       :title="t('workflow.blocks.loop-data.maxLoop.title')"
@@ -45,6 +46,32 @@
     >
       {{ t('workflow.blocks.loop-data.buttons.insert') }}
     </ui-button>
+    <div
+      v-else-if="data.loopThrough === 'numbers'"
+      class="flex items-center space-x-2"
+    >
+      <ui-input
+        :model-value="data.fromNumber"
+        :label="t('workflow.blocks.loop-data.loopThrough.fromNumber')"
+        type="number"
+        @change="
+          updateData({
+            fromNumber: +$event >= data.toNumber ? data.toNumber - 1 : +$event,
+          })
+        "
+      />
+      <ui-input
+        :model-value="data.toNumber"
+        :label="t('workflow.blocks.loop-data.loopThrough.toNumber')"
+        type="number"
+        @change="
+          updateData({
+            toNumber:
+              +$event <= data.fromNumber ? data.fromNumber + 1 : +$event,
+          })
+        "
+      />
+    </div>
     <ui-modal
       v-model="state.showDataModal"
       title="Data"
@@ -119,7 +146,7 @@ const { t } = useI18n();
 
 const maxStrLength = 5e4;
 const maxFileSize = 1024 * 1024;
-const loopTypes = ['data-columns', 'custom-data'];
+const loopTypes = ['data-columns', 'numbers', 'custom-data'];
 const tempLoopData =
   props.data.loopData.length > maxStrLength
     ? props.data.loopData.slice(0, maxStrLength)

+ 3 - 0
src/locales/en/blocks.json

@@ -269,7 +269,10 @@
         },
         "loopThrough": {
           "placeholder": "Loop through",
+          "fromNumber": "From number",
+          "toNumber": "To number",
           "options": {
+            "numbers": "Numbers",
             "data-columns": "Data columns",
             "custom-data": "Custom data"
           }

+ 2 - 0
src/utils/shared.js

@@ -443,6 +443,8 @@ export const tasks = {
     data: {
       loopId: '',
       maxLoop: 0,
+      fromNumber: 1,
+      toNumber: 10,
       loopData: '[]',
       description: '',
       loopThrough: 'data-columns',