Browse Source

fix: loop through elements not working when reversed

Ahmad Kholid 2 years ago
parent
commit
2df82d8b21

+ 2 - 1
src/background/workflowEngine/blocksHandler/handlerLoopData.js

@@ -49,6 +49,7 @@ async function loopData({ data, id }, { refData }) {
               findBy,
               findBy,
               max: maxLoop,
               max: maxLoop,
               multiple: true,
               multiple: true,
+              reverseLoop: data.reverseLoop,
               selector: data.elementSelector,
               selector: data.elementSelector,
               waitForSelector: data.waitForSelector ?? false,
               waitForSelector: data.waitForSelector ?? false,
               waitSelectorTimeout: data.waitSelectorTimeout ?? 5000,
               waitSelectorTimeout: data.waitSelectorTimeout ?? 5000,
@@ -81,7 +82,7 @@ async function loopData({ data, id }, { refData }) {
           index = data.startIndex;
           index = data.startIndex;
         }
         }
 
 
-        if (data.reverseLoop) {
+        if (data.reverseLoop && data.loopThrough !== 'elements') {
           currLoopData.reverse();
           currLoopData.reverse();
         }
         }
       }
       }

+ 2 - 5
src/background/workflowEngine/blocksHandler/handlerLoopElements.js

@@ -31,16 +31,13 @@ async function loopElements({ data, id }, { refData }) {
         selector: data.selector,
         selector: data.selector,
       });
       });
 
 
-      let elementsList = elements;
-      if (data.reverseLoop) elementsList = elements.reverse();
-
       const loopPayload = {
       const loopPayload = {
         maxLoop,
         maxLoop,
         index: 0,
         index: 0,
         blockId: id,
         blockId: id,
+        data: elements,
         id: data.loopId,
         id: data.loopId,
         type: 'elements',
         type: 'elements',
-        data: elementsList,
       };
       };
 
 
       if (data.loadMoreAction !== 'none') {
       if (data.loadMoreAction !== 'none') {
@@ -62,7 +59,7 @@ async function loopElements({ data, id }, { refData }) {
       /* eslint-disable-next-line */
       /* eslint-disable-next-line */
       refData.loopData[data.loopId] = {
       refData.loopData[data.loopId] = {
         $index: 0,
         $index: 0,
-        data: elementsList[0],
+        data: elements[0],
       };
       };
     }
     }
 
 

+ 7 - 2
src/content/utils.js

@@ -13,11 +13,16 @@ export function simulateClickElement(element) {
 
 
 export function generateLoopSelectors(
 export function generateLoopSelectors(
   elements,
   elements,
-  { max, attrId, frameSelector, startIndex = 0 }
+  { max, attrId, frameSelector, reverseLoop, startIndex = 0 }
 ) {
 ) {
   const selectors = [];
   const selectors = [];
+  let elementsList = elements;
 
 
-  elements.forEach((el, index) => {
+  if (reverseLoop) {
+    elementsList = Array.from(elements).reverse();
+  }
+
+  elementsList.forEach((el, index) => {
     if (max > 0 && selectors.length - 1 > max) return;
     if (max > 0 && selectors.length - 1 > max) return;
 
 
     const attrName = 'automa-loop';
     const attrName = 'automa-loop';