summaryrefslogtreecommitdiff
path: root/spec/javascripts/helpers/scroll_into_view_promise.js
diff options
context:
space:
mode:
authorLuke Bennett <lbennett@gitlab.com>2018-11-26 08:57:21 +0000
committerFatih Acet <acetfatih@gmail.com>2018-11-26 08:57:21 +0000
commit1877eb49c0bfe855eca74209441f954c4550ffef (patch)
tree7bc47b4d007f48f8504ee1d6a4c2329d2324adf5 /spec/javascripts/helpers/scroll_into_view_promise.js
parentceae9f5211a77333810dfd704823381730eb1791 (diff)
downloadgitlab-ce-1877eb49c0bfe855eca74209441f954c4550ffef.tar.gz
Attempt to fix lazy loader spec transient failure
Diffstat (limited to 'spec/javascripts/helpers/scroll_into_view_promise.js')
-rw-r--r--spec/javascripts/helpers/scroll_into_view_promise.js28
1 files changed, 28 insertions, 0 deletions
diff --git a/spec/javascripts/helpers/scroll_into_view_promise.js b/spec/javascripts/helpers/scroll_into_view_promise.js
new file mode 100644
index 00000000000..0edea2103da
--- /dev/null
+++ b/spec/javascripts/helpers/scroll_into_view_promise.js
@@ -0,0 +1,28 @@
+export default function scrollIntoViewPromise(intersectionTarget, timeout = 100, maxTries = 5) {
+ return new Promise((resolve, reject) => {
+ let intersectionObserver;
+ let retry = 0;
+
+ const intervalId = setInterval(() => {
+ if (retry >= maxTries) {
+ intersectionObserver.disconnect();
+ clearInterval(intervalId);
+ reject(new Error(`Could not scroll target into viewPort within ${timeout * maxTries} ms`));
+ }
+ retry += 1;
+ intersectionTarget.scrollIntoView();
+ }, timeout);
+
+ intersectionObserver = new IntersectionObserver(entries => {
+ if (entries[0].isIntersecting) {
+ intersectionObserver.disconnect();
+ clearInterval(intervalId);
+ resolve();
+ }
+ });
+
+ intersectionObserver.observe(intersectionTarget);
+
+ intersectionTarget.scrollIntoView();
+ });
+}