diff --git a/src/lib/components/PaginationTable/PaginationTableBody.svelte b/src/lib/components/PaginationTable/PaginationTableBody.svelte index e08944d..8608783 100644 --- a/src/lib/components/PaginationTable/PaginationTableBody.svelte +++ b/src/lib/components/PaginationTable/PaginationTableBody.svelte @@ -7,10 +7,19 @@ let intersectionObserver: IntersectionObserver; - let intersectionElement; - function getIntersectionElement() { - intersectionElement = - bodyElem.rows.item(bodyElem.rows.length - 15) || bodyElem.lastElementChild; + let intersectionElement: HTMLElement; + async function getIntersectionElement(): Promise { + if (!bodyElem.lastElementChild) { + await new Promise((resolve) => { + new MutationObserver((_, observer) => { + if (!bodyElem.lastElementChild) return; + observer.disconnect(); + resolve(); + }); + }); + } + + return bodyElem.rows.item(bodyElem.rows.length - 15)! || bodyElem.lastElementChild!; } onMount(async () => { @@ -20,7 +29,7 @@ intersectionObserver = new IntersectionObserver( async (entries, observer) => { if (entries.filter((e) => e.isIntersecting).length === 0 || !entries) return; - observer.unobserve(intersectionElement!); + observer.unobserve(intersectionElement); const rows = bodyElem.rows.length; @@ -28,22 +37,19 @@ await tick(); if (rows === bodyElem.rows.length) return; - getIntersectionElement(); - observer.observe(intersectionElement!); + observer.observe((intersectionElement = await getIntersectionElement())); }, { threshold: 0.25 } ); - new MutationObserver((entries) => { + new MutationObserver(async (entries) => { if (entries.filter((e) => e.removedNodes.length > 0).length === 0 || !entries) return; - intersectionObserver.unobserve(intersectionElement!); - getIntersectionElement(); - intersectionObserver.observe(intersectionElement!); + intersectionObserver.unobserve(intersectionElement); + intersectionObserver.observe((intersectionElement = await getIntersectionElement())); }).observe(bodyElem, { childList: true }); - getIntersectionElement(); - intersectionObserver.observe(intersectionElement!); + intersectionObserver.observe((intersectionElement = await getIntersectionElement())); });