From 4806e354383fe4794b4d83e7c3ad7ff359ef1cfb Mon Sep 17 00:00:00 2001 From: taranvohra Date: Thu, 27 Nov 2025 17:10:42 +0530 Subject: [PATCH 1/2] List page meta links in the context of a space or change request --- .../src/components/SitePage/SitePage.tsx | 16 ++-- packages/gitbook/src/lib/data/api.ts | 73 +++++++++++++++++++ packages/gitbook/src/lib/data/types.ts | 17 +++++ 3 files changed, 101 insertions(+), 5 deletions(-) diff --git a/packages/gitbook/src/components/SitePage/SitePage.tsx b/packages/gitbook/src/components/SitePage/SitePage.tsx index a321ca000c..1d9f13006b 100644 --- a/packages/gitbook/src/components/SitePage/SitePage.tsx +++ b/packages/gitbook/src/components/SitePage/SitePage.tsx @@ -321,11 +321,17 @@ async function resolvePageMetaLinks( pageId: string ): Promise { const pageMetaLinks = await getDataOrNull( - context.dataFetcher.listRevisionPageMetaLinks({ - spaceId: context.space.id, - revisionId: context.revisionId, - pageId, - }) + context.changeRequest + ? context.dataFetcher.listChangeRequestPageMetaLinks({ + spaceId: context.space.id, + changeRequestId: context.changeRequest.id, + pageId, + }) + : context.dataFetcher.listSpacePageMetaLinks({ + spaceId: context.space.id, + + pageId, + }) ); if (pageMetaLinks) { diff --git a/packages/gitbook/src/lib/data/api.ts b/packages/gitbook/src/lib/data/api.ts index b66af936ce..366db3be4d 100644 --- a/packages/gitbook/src/lib/data/api.ts +++ b/packages/gitbook/src/lib/data/api.ts @@ -159,6 +159,21 @@ export function createDataFetcher( pageId: params.pageId, }); }, + + listSpacePageMetaLinks(params) { + return listSpacePageMetaLinks(input, { + spaceId: params.spaceId, + pageId: params.pageId, + }); + }, + + listChangeRequestPageMetaLinks(params) { + return listChangeRequestPageMetaLinks(input, { + spaceId: params.spaceId, + changeRequestId: params.changeRequestId, + pageId: params.pageId, + }); + }, }; } @@ -744,6 +759,64 @@ const listRevisionPageMetaLinks = cache( } ); +/** + * List all the meta links for a given page in a space. + */ +const listSpacePageMetaLinks = cache( + async (input: DataFetcherInput, params: { spaceId: string; pageId: string }) => { + 'use cache'; + return wrapCacheDataFetcherError(async () => { + return trace( + `listSpacePageMetaLinks(${params.spaceId}, ${params.pageId})`, + async () => { + const api = apiClient(input); + const res = await api.spaces.listSpacePageMetaLinks( + params.spaceId, + params.pageId, + { + ...noCacheFetchOptions, + } + ); + cacheTag(...getCacheTagsFromResponse(res)); + cacheLife('days'); + return res.data; + } + ); + }); + } +); + +/** + * List all the meta links for a given page in a change request. + */ +const listChangeRequestPageMetaLinks = cache( + async ( + input: DataFetcherInput, + params: { spaceId: string; changeRequestId: string; pageId: string } + ) => { + 'use cache'; + return wrapCacheDataFetcherError(async () => { + return trace( + `listChangeRequestPageMetaLinks(${params.spaceId}, ${params.changeRequestId}, ${params.pageId})`, + async () => { + const api = apiClient(input); + const res = await api.spaces.listChangeRequestPageMetaLinks( + params.spaceId, + params.changeRequestId, + params.pageId, + { + ...noCacheFetchOptions, + } + ); + cacheTag(...getCacheTagsFromResponse(res)); + cacheLife('days'); + return res.data; + } + ); + }); + } +); + /** * Create a new API client. */ diff --git a/packages/gitbook/src/lib/data/types.ts b/packages/gitbook/src/lib/data/types.ts index 20e77ff1f3..ceeb7d8661 100644 --- a/packages/gitbook/src/lib/data/types.ts +++ b/packages/gitbook/src/lib/data/types.ts @@ -182,4 +182,21 @@ export interface GitBookDataFetcher { revisionId: string; pageId: string; }): Promise>; + + /** + * List change request meta links. + */ + listChangeRequestPageMetaLinks(params: { + spaceId: string; + changeRequestId: string; + pageId: string; + }): Promise>; + + /** + * List space meta links. + */ + listSpacePageMetaLinks(params: { + spaceId: string; + pageId: string; + }): Promise>; } From 0f309c2b47f625e46d977400f8a29d335bfca79b Mon Sep 17 00:00:00 2001 From: taranvohra Date: Thu, 27 Nov 2025 18:09:42 +0530 Subject: [PATCH 2/2] refactor --- .../src/components/SitePage/SitePage.tsx | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/packages/gitbook/src/components/SitePage/SitePage.tsx b/packages/gitbook/src/components/SitePage/SitePage.tsx index 34abbc72c8..e09691beb6 100644 --- a/packages/gitbook/src/components/SitePage/SitePage.tsx +++ b/packages/gitbook/src/components/SitePage/SitePage.tsx @@ -317,19 +317,34 @@ async function resolvePageMetaLinks( context: GitBookSiteContext, pageId: string ): Promise { - const pageMetaLinks = await getDataOrNull( - context.changeRequest - ? context.dataFetcher.listChangeRequestPageMetaLinks({ - spaceId: context.space.id, - changeRequestId: context.changeRequest.id, - pageId, - }) - : context.dataFetcher.listSpacePageMetaLinks({ - spaceId: context.space.id, - - pageId, - }) - ); + const pageMetaLinks = await (async () => { + if (context.changeRequest) { + return getDataOrNull( + context.dataFetcher.listChangeRequestPageMetaLinks({ + spaceId: context.space.id, + changeRequestId: context.changeRequest.id, + pageId, + }) + ); + } + + if (context.revisionId !== context.space.revision) { + return getDataOrNull( + context.dataFetcher.listRevisionPageMetaLinks({ + spaceId: context.space.id, + revisionId: context.revisionId, + pageId, + }) + ); + } + + return getDataOrNull( + context.dataFetcher.listSpacePageMetaLinks({ + spaceId: context.space.id, + pageId, + }) + ); + })(); if (pageMetaLinks) { const canonicalResolution = pageMetaLinks.canonical