This commit is contained in:
@@ -31,13 +31,31 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => {
|
|||||||
|
|
||||||
const wikiPage = await qc.fetchQuery ({
|
const wikiPage = await qc.fetchQuery ({
|
||||||
queryKey: wikiKeys.show (title, { version }),
|
queryKey: wikiKeys.show (title, { version }),
|
||||||
queryFn: () => fetchWikiPageByTitle (title, { version }) })
|
queryFn: async () => {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return await fetchWikiPageByTitle (title, { version })
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
} })
|
||||||
|
|
||||||
const effectiveTitle = wikiPage.title
|
const effectiveTitle = wikiPage?.title ?? title
|
||||||
|
|
||||||
await qc.prefetchQuery ({
|
await qc.prefetchQuery ({
|
||||||
queryKey: tagsKeys.show (effectiveTitle),
|
queryKey: tagsKeys.show (effectiveTitle),
|
||||||
queryFn: () => fetchTagByName (effectiveTitle) })
|
queryFn: async () => {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return await fetchTagByName (effectiveTitle)
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
} })
|
||||||
|
|
||||||
if (version)
|
if (version)
|
||||||
return
|
return
|
||||||
@@ -85,7 +103,7 @@ const prefetchPostChanges: Prefetcher = async (qc, url) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export const routePrefetchers: { test: (u: URL) => boolean; run: Prefetcher }[] = [
|
export const routePrefetchers: { test: (u: URL) => boolean; run: Prefetcher }[] = [
|
||||||
{ test: u => u.pathname === '/' || u.pathname === '/posts', run: prefetchPostsIndex },
|
{ test: u => u.pathname === '/' || u.pathname === '/posts', run: prefetchPostsIndex },
|
||||||
{ test: u => (!(['/posts/new', '/posts/changes'].includes (u.pathname))
|
{ test: u => (!(['/posts/new', '/posts/changes'].includes (u.pathname))
|
||||||
&& Boolean (mPost (u.pathname))),
|
&& Boolean (mPost (u.pathname))),
|
||||||
@@ -94,15 +112,13 @@ export const routePrefetchers: { test: (u: URL) => boolean; run: Prefetcher }[]
|
|||||||
{ test: u => u.pathname === '/wiki', run: prefetchWikiPagesIndex },
|
{ test: u => u.pathname === '/wiki', run: prefetchWikiPagesIndex },
|
||||||
{ test: u => (!(['/wiki/new', '/wiki/changes'].includes (u.pathname))
|
{ test: u => (!(['/wiki/new', '/wiki/changes'].includes (u.pathname))
|
||||||
&& Boolean (mWiki (u.pathname))),
|
&& Boolean (mWiki (u.pathname))),
|
||||||
run: prefetchWikiPageShow },
|
run: prefetchWikiPageShow }]
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
export const prefetchForURL = async (qc: QueryClient, urlLike: string): Promise<void> => {
|
export const prefetchForURL = async (qc: QueryClient, urlLike: string): Promise<void> => {
|
||||||
const u = new URL (urlLike, location.origin)
|
const u = new URL (urlLike, location.origin)
|
||||||
const jobs = routePrefetchers.filter (r => r.test (u)).map (r => r.run (qc, u))
|
const r = routePrefetchers.find (x => x.test (u))
|
||||||
if (jobs.length === 0)
|
if (!(r))
|
||||||
return
|
return
|
||||||
|
await r.run (qc, u)
|
||||||
await Promise.all (jobs)
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user