Browse Source

feat: scroll to bottom in loop elements block

Ahmad Kholid 2 years ago
parent
commit
a12e69724f

+ 1 - 0
src/background/workflowEngine/blocksHandler/handlerLoopElements.js

@@ -48,6 +48,7 @@ async function loopElements({ data, id }, { refData }) {
           findBy: data.findBy,
           findBy: data.findBy,
           type: data.loadMoreAction,
           type: data.loadMoreAction,
           selector: data.selector.trim(),
           selector: data.selector.trim(),
+          scrollToBottom: data.scrollToBottom,
           actionElMaxWaitTime: data.actionElMaxWaitTime,
           actionElMaxWaitTime: data.actionElMaxWaitTime,
           actionElSelector: data.actionElSelector.trim(),
           actionElSelector: data.actionElSelector.trim(),
           actionPageMaxWaitTime: data.actionPageMaxWaitTime,
           actionPageMaxWaitTime: data.actionPageMaxWaitTime,

+ 7 - 0
src/components/newtab/workflow/edit/EditLoopElements.vue

@@ -52,6 +52,13 @@
         type="number"
         type="number"
         @change="updateData({ actionElMaxWaitTime: +$event })"
         @change="updateData({ actionElMaxWaitTime: +$event })"
       />
       />
+      <ui-checkbox
+        :model-value="data.scrollToBottom"
+        class="mt-4"
+        @change="updateData({ scrollToBottom: $event })"
+      >
+        {{ t('workflow.blocks.loop-elements.scrollToBottom') }}
+      </ui-checkbox>
       <ui-input
       <ui-input
         v-if="data.loadMoreAction === 'click-link'"
         v-if="data.loadMoreAction === 'click-link'"
         :model-value="data.actionPageMaxWaitTime"
         :model-value="data.actionPageMaxWaitTime"

+ 7 - 3
src/content/blocksHandler/handlerLoopElements.js

@@ -70,9 +70,13 @@ export default async function ({ data, id }) {
       if (!scrollableParent) return { continue: true };
       if (!scrollableParent) return { continue: true };
 
 
       let scrollHeight = 0;
       let scrollHeight = 0;
-      loopItems.forEach((item) => {
-        scrollHeight += item.getBoundingClientRect().height;
-      });
+      if (data.scrollToBottom) {
+        scrollHeight = scrollableParent.scrollHeight;
+      } else {
+        loopItems.forEach((item) => {
+          scrollHeight += item.getBoundingClientRect().height;
+        });
+      }
 
 
       scrollableParent.scrollTo(0, scrollHeight + 30);
       scrollableParent.scrollTo(0, scrollHeight + 30);
 
 

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

@@ -668,6 +668,7 @@
         "name": "Loop elements",
         "name": "Loop elements",
         "description": "Iterate through elements",
         "description": "Iterate through elements",
         "loadMore": "Load more elements",
         "loadMore": "Load more elements",
+        "scrollToBottom": "Scroll to bottom",
         "actions": {
         "actions": {
           "none": "None",
           "none": "None",
           "click-element": "Click an element to load more",
           "click-element": "Click an element to load more",

+ 1 - 0
src/utils/shared.js

@@ -750,6 +750,7 @@ export const tasks = {
       actionElMaxWaitTime: 5,
       actionElMaxWaitTime: 5,
       actionPageMaxWaitTime: 10,
       actionPageMaxWaitTime: 10,
       loadMoreAction: 'none',
       loadMoreAction: 'none',
+      scrollToBottom: true,
       waitForSelector: false,
       waitForSelector: false,
       waitSelectorTimeout: 5000,
       waitSelectorTimeout: 5000,
     },
     },