diff --git a/packages/react/test-app/Pages/WhenVisible.jsx b/packages/react/test-app/Pages/WhenVisible.jsx index 776765590..e0dbb3719 100644 --- a/packages/react/test-app/Pages/WhenVisible.jsx +++ b/packages/react/test-app/Pages/WhenVisible.jsx @@ -23,5 +23,9 @@ export default () => ( + +
+ Loading fourth one...
}> + ) diff --git a/packages/svelte/test-app/Pages/WhenVisible.svelte b/packages/svelte/test-app/Pages/WhenVisible.svelte index 8396f2e13..1e192b8dd 100644 --- a/packages/svelte/test-app/Pages/WhenVisible.svelte +++ b/packages/svelte/test-app/Pages/WhenVisible.svelte @@ -31,3 +31,11 @@
Third one is visible!
+ +
+ + +
Loading fourth one...
+
+
+
diff --git a/packages/vue3/src/whenVisible.ts b/packages/vue3/src/whenVisible.ts index 7c63faa38..ee1f5bff3 100644 --- a/packages/vue3/src/whenVisible.ts +++ b/packages/vue3/src/whenVisible.ts @@ -94,10 +94,10 @@ export default defineComponent({ els.push(h(this.$props.as)) } - if (this.loaded) { - els.push(this.$slots.default()) - } else { + if (!this.loaded) { els.push(this.$slots.fallback ? this.$slots.fallback() : null) + } else if (this.$slots.default) { + els.push(this.$slots.default()) } return els diff --git a/packages/vue3/test-app/Pages/WhenVisible.vue b/packages/vue3/test-app/Pages/WhenVisible.vue index 4861a3cb3..c5482dbf5 100644 --- a/packages/vue3/test-app/Pages/WhenVisible.vue +++ b/packages/vue3/test-app/Pages/WhenVisible.vue @@ -32,4 +32,12 @@ import { WhenVisible } from '@inertiajs/vue3'
Third one is visible!
+ +
+ + + +
diff --git a/tests/when-visible.spec.ts b/tests/when-visible.spec.ts index 083112a79..565b0c6c1 100644 --- a/tests/when-visible.spec.ts +++ b/tests/when-visible.spec.ts @@ -16,7 +16,9 @@ test('it will wait to fire the reload until element is visible', async ({ page } await page.evaluate(() => (window as any).scrollTo(0, 5000)) await expect(page.getByText('Loading first one...')).toBeVisible() + await expect(page.getByText('First one is visible!')).not.toBeVisible() await page.waitForResponse(page.url()) + await expect(page.getByText('Loading first one...')).not.toBeVisible() await expect(page.getByText('First one is visible!')).toBeVisible() // Scroll back up and then back down, make sure we don't re-request @@ -35,13 +37,17 @@ test('it will wait to fire the reload until element is visible', async ({ page } // This one has a buffer of 1000 await page.evaluate(() => (window as any).scrollTo(0, 9000)) await expect(page.getByText('Loading second one...')).toBeVisible() + await expect(page.getByText('Second one is visible!')).not.toBeVisible() await page.waitForResponse(page.url()) + await expect(page.getByText('Loading second one...')).not.toBeVisible() await expect(page.getByText('Second one is visible!')).toBeVisible() // This one should trigger every time it's visible await page.evaluate(() => (window as any).scrollTo(0, 15_000)) await expect(page.getByText('Loading third one...')).toBeVisible() + await expect(page.getByText('Third one is visible!')).not.toBeVisible() await page.waitForResponse(page.url()) + await expect(page.getByText('Loading third one...')).not.toBeVisible() await expect(page.getByText('Third one is visible!')).toBeVisible() // Now scroll up and down to re-trigger it @@ -58,4 +64,9 @@ test('it will wait to fire the reload until element is visible', async ({ page } await page.evaluate(() => (window as any).scrollTo(0, 15_000)) await expect(page.getByText('Third one is visible!')).toBeVisible() await page.waitForResponse(page.url()) + + await page.evaluate(() => (window as any).scrollTo(0, 20_000)) + await expect(page.getByText('Loading fourth one...')).toBeVisible() + await page.waitForResponse(page.url()) + await expect(page.getByText('Loading fourth one...')).not.toBeVisible() })