Skip to content

Commit 8203ebb

Browse files
committed
Added WhenVisible reload test in react
1 parent 0411269 commit 8203ebb

File tree

4 files changed

+76
-6
lines changed

4 files changed

+76
-6
lines changed
File renamed without changes.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { router } from '@inertiajs/core'
2+
import { usePage, WhenVisible } from '@inertiajs/react'
3+
4+
const Value = ({ value }) => {
5+
return <div>{value.text}</div>
6+
}
7+
8+
export default () => {
9+
const { foo, bar } = usePage().props
10+
11+
const handleTriggerPageReload = () => {
12+
router.reload()
13+
}
14+
15+
return (
16+
<div>
17+
<WhenVisible data="foo" fallback={<div>Loading foo...</div>}>
18+
<Value value={foo} />
19+
</WhenVisible>
20+
<WhenVisible data="bar" fallback={<div>Loading bar...</div>} always>
21+
<Value value={bar} />
22+
</WhenVisible>
23+
<button onClick={handleTriggerPageReload}>Trigger page reload</button>
24+
</div>
25+
)
26+
}

tests/app/server.js

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,10 +277,11 @@ app.get('/history/version/:pageNumber', (req, res) => {
277277
})
278278
})
279279

280-
app.get('/when-visible', (req, res) => {
280+
app.get('/when-visible/page', (req, res) => {
281281
const page = () =>
282282
inertia.render(req, res, {
283-
component: 'WhenVisible',
283+
// TODO: move page on other packages
284+
component: process.env.PACKAGE === 'react' ? 'WhenVisible/Page' : 'WhenVisible',
284285
props: {},
285286
})
286287

@@ -291,6 +292,23 @@ app.get('/when-visible', (req, res) => {
291292
}
292293
})
293294

295+
app.get('/when-visible/with-reload', (req, res) => {
296+
const page = () =>
297+
inertia.render(req, res, {
298+
component: 'WhenVisible/WithReload',
299+
props: {
300+
foo: req.headers['x-inertia-partial-data']?.includes('foo') ? { text: 'foo is visible!' } : undefined,
301+
bar: req.headers['x-inertia-partial-data']?.includes('bar') ? { text: 'bar is visible!' } : undefined,
302+
},
303+
})
304+
305+
if (req.headers['x-inertia-partial-data']) {
306+
setTimeout(page, 250)
307+
} else {
308+
page()
309+
}
310+
})
311+
294312
app.get('/progress/:pageNumber', (req, res) => {
295313
setTimeout(
296314
() =>

tests/when-visible.spec.ts

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import { expect, test } from '@playwright/test'
22
import { requests } from './support'
33

4-
test.beforeEach(async ({ page }) => {
5-
await page.goto('/when-visible')
6-
})
7-
84
test('it will wait to fire the reload until element is visible', async ({ page }) => {
5+
await page.goto('/when-visible/page')
6+
97
requests.listen(page)
108

119
await page.evaluate(() => (window as any).scrollTo(0, 1000))
@@ -85,3 +83,31 @@ test('it will wait to fire the reload until element is visible', async ({ page }
8583
await page.waitForResponse(page.url() + '?count=1')
8684
await expect(page.getByText('Count is now 2')).toBeVisible()
8785
})
86+
87+
test('it will reload the props when page reloads', async ({ page }) => {
88+
// TODO: implement test for other packages
89+
test.skip(process.env.PACKAGE !== 'react', 'React only test')
90+
await page.goto('/when-visible/with-reload')
91+
92+
requests.listen(page)
93+
94+
await expect(page.getByText('Loading foo...')).toBeVisible()
95+
await expect(page.getByText('Loading bar...')).toBeVisible()
96+
await page.waitForResponse(page.url())
97+
await expect(page.getByText('Loading foo...')).not.toBeVisible()
98+
await expect(page.getByText('Loading bar...')).not.toBeVisible()
99+
await expect(page.getByText('foo is visible!')).toBeVisible()
100+
await expect(page.getByText('bar is visible!')).toBeVisible()
101+
102+
const responsePromise = page.waitForResponse(page.url())
103+
104+
console.log('clicking reload')
105+
await page.getByRole('button', { exact: true, name: 'Trigger page reload' }).click()
106+
await expect(page.getByText('Loading foo...')).toBeVisible()
107+
await expect(page.getByText('Loading bar...')).toBeVisible()
108+
109+
await responsePromise
110+
111+
await expect(page.getByText('foo is visible!')).toBeVisible()
112+
await expect(page.getByText('bar is visible!')).toBeVisible()
113+
})

0 commit comments

Comments
 (0)