UNPKG

1.72 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.waitForElementToBeRemoved = waitForElementToBeRemoved;
7var _waitFor = require("./wait-for");
8const isRemoved = result => !result || Array.isArray(result) && !result.length;
9
10// Check if the element is not present.
11// As the name implies, waitForElementToBeRemoved should check `present` --> `removed`
12function initialCheck(elements) {
13 if (isRemoved(elements)) {
14 throw new Error('The element(s) given to waitForElementToBeRemoved are already removed. waitForElementToBeRemoved requires that the element(s) exist(s) before waiting for removal.');
15 }
16}
17async function waitForElementToBeRemoved(callback, options) {
18 // created here so we get a nice stacktrace
19 const timeoutError = new Error('Timed out in waitForElementToBeRemoved.');
20 if (typeof callback !== 'function') {
21 initialCheck(callback);
22 const elements = Array.isArray(callback) ? callback : [callback];
23 const getRemainingElements = elements.map(element => {
24 let parent = element.parentElement;
25 if (parent === null) return () => null;
26 while (parent.parentElement) parent = parent.parentElement;
27 return () => parent.contains(element) ? element : null;
28 });
29 callback = () => getRemainingElements.map(c => c()).filter(Boolean);
30 }
31 initialCheck(callback());
32 return (0, _waitFor.waitFor)(() => {
33 let result;
34 try {
35 result = callback();
36 } catch (error) {
37 if (error.name === 'TestingLibraryElementError') {
38 return undefined;
39 }
40 throw error;
41 }
42 if (!isRemoved(result)) {
43 throw timeoutError;
44 }
45 return undefined;
46 }, options);
47}
48
49/*
50eslint
51 require-await: "off"
52*/
\No newline at end of file