Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 28 additions & 7 deletions packages/gitbook/src/components/SitePage/SitePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -317,13 +317,34 @@ async function resolvePageMetaLinks(
context: GitBookSiteContext,
pageId: string
): Promise<PageMetaLinks> {
const pageMetaLinks = await getDataOrNull(
context.dataFetcher.listRevisionPageMetaLinks({
spaceId: context.space.id,
revisionId: context.revisionId,
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
Expand Down
73 changes: 73 additions & 0 deletions packages/gitbook/src/lib/data/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
});
},
};
}

Expand Down Expand Up @@ -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.
*/
Expand Down
17 changes: 17 additions & 0 deletions packages/gitbook/src/lib/data/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -182,4 +182,21 @@ export interface GitBookDataFetcher {
revisionId: string;
pageId: string;
}): Promise<DataFetcherResponse<api.RevisionPageMetaLinks>>;

/**
* List change request meta links.
*/
listChangeRequestPageMetaLinks(params: {
spaceId: string;
changeRequestId: string;
pageId: string;
}): Promise<DataFetcherResponse<api.RevisionPageMetaLinks>>;

/**
* List space meta links.
*/
listSpacePageMetaLinks(params: {
spaceId: string;
pageId: string;
}): Promise<DataFetcherResponse<api.RevisionPageMetaLinks>>;
}
Loading