Skip to content

Commit 46e12a7

Browse files
authored
minor refactor vike-vue-query (#196)
1 parent 08b612f commit 46e12a7

21 files changed

+92
-161
lines changed

examples/vue-pinia/layouts/LayoutDefault.vue

-4
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,6 @@ a {
4545
line-height: 1.8em;
4646
border-right: 2px solid #eee;
4747
}
48-
.logo {
49-
margin-top: 20px;
50-
margin-bottom: 10px;
51-
}
5248
.content {
5349
transition: opacity 0.1s ease-in;
5450
}

examples/vue-query/.test.ts

+31-20
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,44 @@
1-
import { test, expect, run, fetchHtml, page, getServerUrl } from '@brillout/test-e2e'
1+
import { test, expect, run, fetchHtml, page, getServerUrl, autoRetry } from '@brillout/test-e2e'
22

33
runTest()
44

5+
const fetchedText = 'A New Hope'
6+
const url = '/'
7+
58
function runTest() {
69
run('pnpm run dev')
710

8-
const textLandingPage = 'A New Hope'
9-
const title = 'Star Wars Movies'
10-
testUrl({
11-
url: '/',
12-
title,
13-
text: textLandingPage,
14-
})
15-
}
16-
17-
function testUrl({ url, title, text }: { url: string; title: string; text: string }) {
18-
test(url + ' (HTML)', async () => {
11+
test('HTML', async () => {
1912
const html = await fetchHtml(url)
20-
expect(html).toContain(text)
21-
expect(getTitle(html)).toBe(title)
13+
expect(html).toContain(fetchedText)
2214
})
23-
test(url + ' (Hydration)', async () => {
15+
16+
test('Hydration', async () => {
2417
await page.goto(getServerUrl() + url)
25-
const body = await page.textContent('body')
26-
expect(body).toContain(text)
18+
await testDOM()
2719
})
20+
21+
test('Navigation', async () => {
22+
await page.click('a[href="/about"]')
23+
await page.click('a[href="/"]')
24+
await testDOM()
25+
})
26+
}
27+
28+
async function testDOM() {
29+
await testCounter()
30+
const body = await page.textContent('body')
31+
expect(body).toContain(fetchedText)
2832
}
2933

30-
function getTitle(html: string) {
31-
const title = html.match(/<title>(.*?)<\/title>/i)?.[1]
32-
return title
34+
async function testCounter() {
35+
// autoRetry() for awaiting client-side code loading & executing
36+
await autoRetry(
37+
async () => {
38+
expect(await page.textContent('button')).toBe('Counter 0')
39+
await page.click('button')
40+
expect(await page.textContent('button')).toContain('Counter 1')
41+
},
42+
{ timeout: 5 * 1000 },
43+
)
3344
}

examples/vue-query/assets/logo.svg

-36
This file was deleted.

examples/vue-query/layouts/HeadDefault.vue

-8
This file was deleted.

examples/vue-query/layouts/LayoutDefault.vue

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
<template>
22
<div class="layout">
33
<div class="navigation">
4-
<a href="/" class="logo">
5-
<img src="../assets/logo.svg" height="64" width="64" />
6-
</a>
74
<Link href="/">Welcome</Link>
5+
<Link href="/about">About</Link>
86
</div>
97
<div class="content"><slot /></div>
108
</div>
@@ -47,10 +45,6 @@ a {
4745
line-height: 1.8em;
4846
border-right: 2px solid #eee;
4947
}
50-
.logo {
51-
margin-top: 20px;
52-
margin-bottom: 10px;
53-
}
5448
.content {
5549
transition: opacity 0.1s ease-in;
5650
}

examples/vue-query/package.json

+4-6
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@
99
"@types/node-fetch": "^2.6.11",
1010
"@tanstack/vue-query": "^5.0.0",
1111
"node-fetch": "^3.3.2",
12+
"typescript": "5.4.5",
1213
"vike": "^0.4.195",
1314
"vike-vue-query": "^0.1.2",
1415
"vike-vue": "^0.8.4",
1516
"vite": "^5.4.0",
16-
"vue": "^3.4.36"
17-
},
18-
"type": "module",
19-
"devDependencies": {
20-
"typescript": "5.4.5",
17+
"vue": "^3.4.36",
2118
"vue-tsc": "^1.8.27"
22-
}
19+
},
20+
"type": "module"
2321
}

examples/vue-query/pages/+config.ts

-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
import type { Config } from 'vike/types'
22
import Layout from '../layouts/LayoutDefault.vue'
3-
import Head from '../layouts/HeadDefault.vue'
43
import vikeVue from 'vike-vue/config'
54
import vikeVueQuery from 'vike-vue-query/config'
65

7-
// Default configs (can be overridden by pages)
86
export default {
97
Layout,
10-
Head,
11-
// <title>
12-
title: 'My Vike + Vue + TanStack Query App',
13-
148
extends: [vikeVue, vikeVueQuery],
159
} satisfies Config

examples/vue-query/pages/+queryClientConfig.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
export { queryClientConfig }
2+
13
import type { QueryClientConfig } from '@tanstack/vue-query'
24

35
// set query client options - e.g. not refetching when window loses or gains focus during development
@@ -8,5 +10,3 @@ const queryClientConfig: QueryClientConfig = {
810
},
911
},
1012
}
11-
12-
export default queryClientConfig

examples/vue-query/pages/_error/+Page.vue

-25
This file was deleted.
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<template>
2+
<h1>About</h1>
3+
<p>Example of using TanStack Query.</p>
4+
</template>

examples/vue-query/pages/index/+Page.vue

-6
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,6 @@
1414
</template>
1515
</ol>
1616
<p>Source: <a href="https://brillout.github.io/star-wars">brillout.github.io/star-wars</a>.</p>
17-
<p>
18-
While initial data is fetched on the server, the client will refresh after rendering.<br>
19-
<code>
20-
Refreshing: {{ isFetching ? 'Yes' : 'No' }}
21-
</code>
22-
</p>
2317
<p>
2418
This page is:
2519
</p>

examples/vue-query/pages/index/+title.ts

-1
This file was deleted.

examples/vue-query/vite.config.ts

+2-9
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,6 @@ import vue from '@vitejs/plugin-vue'
22
import vike from 'vike/plugin'
33
import { defineConfig } from 'vite'
44

5-
const config = defineConfig({
6-
plugins: [
7-
vike({ prerender: true }),
8-
vue({
9-
include: [/\.vue$/, /\.md$/],
10-
}),
11-
],
5+
export default defineConfig({
6+
plugins: [vike(), vue()],
127
})
13-
14-
export default config

packages/vike-vue-pinia/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"vue-tsc": "^2.0.13"
5252
},
5353
"files": [
54-
"dist"
54+
"dist/"
5555
],
5656
"license": "MIT"
5757
}

packages/vike-vue-query/integration/+config.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1+
export { config as default }
2+
13
import type { DehydratedState, QueryClient, QueryClientConfig } from '@tanstack/vue-query'
24
import type { Config } from 'vike/types'
35
import type _ from 'vike-vue/config' // Needed for declaration merging of Config
46

5-
export default {
7+
const config = {
68
name: 'vike-vue-query',
79
require: {
810
'vike-vue': '>=0.7.0',
911
},
10-
onCreateApp: 'import:vike-vue-query/__internal/integration/installVueQuery:installVueQuery',
11-
onAfterRenderHtml: 'import:vike-vue-query/__internal/integration/dehydrateVueQuery:dehydrateVueQuery',
12-
onBeforeRenderClient: 'import:vike-vue-query/__internal/integration/hydrateVueQuery:hydrateVueQuery',
12+
passToClient: ['_vueQueryInitialState'],
13+
onCreateApp: 'import:vike-vue-query/__internal/integration/onCreateApp:onCreateApp',
14+
onAfterRenderHtml: 'import:vike-vue-query/__internal/integration/onAfterRenderHtml:onAfterRenderHtml',
15+
onBeforeRenderClient: 'import:vike-vue-query/__internal/integration/onBeforeRenderClient:onBeforeRenderClient',
1316
meta: {
1417
queryClientConfig: {
1518
env: {

packages/vike-vue-query/integration/dehydrateVueQuery.ts

-8
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export { onAfterRenderHtml }
2+
3+
import { dehydrate } from '@tanstack/vue-query'
4+
import type { OnAfterRenderHtmlSync } from 'vike-vue/types'
5+
6+
const onAfterRenderHtml: OnAfterRenderHtmlSync = (pageContext): ReturnType<OnAfterRenderHtmlSync> => {
7+
dehydrateVueQuery(pageContext)
8+
}
9+
10+
type PageContext = Parameters<typeof onAfterRenderHtml>[0]
11+
function dehydrateVueQuery(pageContext: PageContext) {
12+
pageContext._vueQueryInitialState = dehydrate(pageContext.queryClient!)
13+
}

packages/vike-vue-query/integration/hydrateVueQuery.ts packages/vike-vue-query/integration/onBeforeRenderClient.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1+
export { onBeforeRenderClient }
2+
13
import { hydrate } from '@tanstack/vue-query'
24
import type { OnBeforeRenderClientSync } from 'vike-vue/types'
35

4-
export { hydrateVueQuery }
6+
const onBeforeRenderClient: OnBeforeRenderClientSync = (pageContext): ReturnType<OnBeforeRenderClientSync> => {
7+
hydrateVueQuery(pageContext)
8+
}
59

6-
const hydrateVueQuery: OnBeforeRenderClientSync = (pageContext): ReturnType<OnBeforeRenderClientSync> => {
10+
type PageContext = Parameters<typeof onBeforeRenderClient>[0]
11+
function hydrateVueQuery(pageContext: PageContext) {
712
if (!pageContext.isHydration) {
813
return
914
}

packages/vike-vue-query/integration/installVueQuery.ts packages/vike-vue-query/integration/onCreateApp.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1+
export { onCreateApp }
2+
13
import { QueryClient, VueQueryPlugin } from '@tanstack/vue-query'
24
import type { OnCreateAppSync } from 'vike-vue/types'
35

4-
export { installVueQuery }
6+
const onCreateApp: OnCreateAppSync = (pageContext): ReturnType<OnCreateAppSync> => {
7+
installVueQuery(pageContext)
8+
}
59

6-
const installVueQuery: OnCreateAppSync = (pageContext): ReturnType<OnCreateAppSync> => {
10+
type PageContext = Parameters<typeof onCreateApp>[0]
11+
function installVueQuery(pageContext: PageContext) {
712
const queryClient = new QueryClient(pageContext.config.queryClientConfig)
813
pageContext.app.use(VueQueryPlugin, { queryClient })
914
Object.assign(pageContext, { queryClient })

packages/vike-vue-query/package.json

+10-10
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,23 @@
1515
},
1616
"exports": {
1717
"./config": "./dist/+config.js",
18-
"./__internal/integration/installVueQuery": "./dist/installVueQuery.js",
19-
"./__internal/integration/dehydrateVueQuery": "./dist/dehydrateVueQuery.js",
20-
"./__internal/integration/hydrateVueQuery": "./dist/hydrateVueQuery.js"
18+
"./__internal/integration/onCreateApp": "./dist/onCreateApp.js",
19+
"./__internal/integration/onAfterRenderHtml": "./dist/onAfterRenderHtml.js",
20+
"./__internal/integration/onBeforeRenderClient": "./dist/onBeforeRenderClient.js"
2121
},
2222
"typesVersions": {
2323
"*": {
2424
"config": [
2525
"./dist/+config.d.ts"
2626
],
27-
"__internal/integration/installVueQuery": [
28-
"./dist/installVueQuery.d.ts"
27+
"__internal/integration/onCreateApp": [
28+
"./dist/onCreateApp.d.ts"
2929
],
30-
"__internal/integration/dehydrateVueQuery": [
31-
"./dist/dehydrateVueQuery.d.ts"
30+
"__internal/integration/onAfterRenderHtml": [
31+
"./dist/onAfterRenderHtml.d.ts"
3232
],
33-
"__internal/integration/hydrateVueQuery": [
34-
"./dist/hydrateVueQuery.d.ts"
33+
"__internal/integration/onBeforeRenderClient": [
34+
"./dist/onBeforeRenderClient.d.ts"
3535
]
3636
}
3737
},
@@ -51,7 +51,7 @@
5151
"vue-tsc": "^2.0.13"
5252
},
5353
"files": [
54-
"dist"
54+
"dist/"
5555
],
5656
"license": "MIT"
5757
}

0 commit comments

Comments
 (0)