The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/apps/meteor/client/lib/utils/waitForElement.ts

27 lines
782 B

export const waitForElement = async <TElement extends Element>(
selector: string,
{ parent = document.documentElement, signal }: { parent?: Element; signal?: AbortSignal } = {},
): Promise<TElement> => {
const element = parent.querySelector<TElement>(selector);
return new Promise((resolve, reject) => {
if (element) {
return resolve(element);
}
const observer = new MutationObserver((_, obs) => {
const element = parent.querySelector<TElement>(selector);
if (element) {
obs.disconnect(); // stop observing
return resolve(element);
}
});
observer.observe(parent, {
childList: true,
subtree: true,
});
signal?.addEventListener('abort', () => {
observer.disconnect();
reject(new DOMException('Aborted', 'AbortError'));
});
});
};