Skip to content

Commit 2b7ea27

Browse files
committed
Add server url cache to update request code sample
1 parent 6aff461 commit 2b7ea27

File tree

7 files changed

+18
-6
lines changed

7 files changed

+18
-6
lines changed

Diff for: packages/gitbook/src/app/(space)/(content)/[[...pathname]]/page.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Metadata, Viewport } from 'next';
33
import { notFound, redirect } from 'next/navigation';
44
import React from 'react';
55

6+
import { serverUrlCache } from '@/components/DocumentView/OpenAPI/ServerUrlCache';
67
import { PageAside } from '@/components/PageAside';
78
import { PageBody, PageCover } from '@/components/PageBody';
89
import { PageHrefContext, absoluteHref, pageHref } from '@/lib/links';
@@ -26,6 +27,8 @@ export default async function Page(props: {
2627
}) {
2728
const { params, searchParams } = props;
2829

30+
serverUrlCache.parse(searchParams);
31+
2932
const {
3033
content: contentPointer,
3134
contentTarget,

Diff for: packages/gitbook/src/components/DocumentView/OpenAPI/OpenAPI.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { fetchOpenAPIBlock } from '@/lib/openapi';
88
import { tcls } from '@/lib/tailwind';
99

1010
import OpenAPIContext from './OpenAPIContext';
11+
import { serverUrlCache } from './ServerUrlCache';
1112
import { BlockProps } from '../Block';
1213
import { PlainCodeBlock } from '../CodeBlock';
1314

@@ -46,6 +47,8 @@ async function OpenAPIBody(props: BlockProps<DocumentBlockSwagger>) {
4647
return null;
4748
}
4849

50+
const serverUrl = serverUrlCache.get('serverUrl');
51+
4952
return (
5053
<OpenAPIContext block={block} data={data}>
5154
<OpenAPIOperation
@@ -61,6 +64,7 @@ async function OpenAPIBody(props: BlockProps<DocumentBlockSwagger>) {
6164
defaultInteractiveOpened: context.mode === 'print',
6265
id: block.meta?.id,
6366
blockKey: block.key,
67+
serverUrl
6468
}}
6569
className="openapi-block"
6670
/>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { createSearchParamsCache, parseAsString } from 'nuqs/server';
2+
3+
export const serverUrlCache = createSearchParamsCache({
4+
serverUrl: parseAsString
5+
})

Diff for: packages/react-openapi/src/OpenAPICodeSample.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,12 @@ export function OpenAPICodeSample(props: {
4848
}
4949
});
5050

51+
const serverUrl = context.serverUrl ?? getServersURL(data.servers);
5152
const requestBody = noReference(data.operation.requestBody);
5253
const requestBodyContent = requestBody ? Object.entries(requestBody.content)[0] : undefined;
5354
const input: CodeSampleInput = {
5455
url:
55-
getServersURL(data.servers, context.enumSelectors) +
56+
serverUrl +
5657
data.path +
5758
(searchParams.size ? `?${searchParams.toString()}` : ''),
5859
method: data.method,

Diff for: packages/react-openapi/src/OpenAPIServerURL.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ export function OpenAPIServerURL(props: {
2222
const serverIndex = !isNaN(Number(ctx?.state?.server)) ? Number(ctx?.state?.server) : 0;
2323
const server = servers[serverIndex];
2424
const parts = parseServerURL(server?.url ?? '');
25-
console.log({ ctxState: ctx?.state });
2625

2726
return (
2827
<ServerURLForm context={context} servers={servers} serverIndex={serverIndex}>

Diff for: packages/react-openapi/src/OpenAPIServerURLForm.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { OpenAPIClientContext } from './types';
55
import { OpenAPIV3 } from 'openapi-types';
66
import { ServerSelector } from './ServerSelector';
77
import { useOpenAPIContext } from './OpenAPIContextProvider';
8+
import { getServersURL } from './utils';
89

910
export function ServerURLForm(props: {
1011
children: React.ReactNode;
@@ -80,7 +81,7 @@ export function ServerURLForm(props: {
8081
update({
8182
server: `${serverIndex}`,
8283
...state,
83-
...(ctx?.state?.edit ? undefined : { edit: 'true' }),
84+
...(ctx?.state?.edit ? { serverUrl: getServersURL(servers, state) } : { edit: 'true' }),
8485
});
8586
}}
8687
title={ctx?.state?.edit ? undefined : 'Try different server options'}

Diff for: packages/react-openapi/src/types.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,10 @@ export interface OpenAPIClientContext {
2727
* Optional id attached to the OpenAPI Operation heading and used as an anchor
2828
*/
2929
id?: string;
30-
3130
/**
32-
* Selectors to update openapi enums, e.g. for server url variables
31+
* Optional serverUrl to use with OpenAPI operations
3332
*/
34-
enumSelectors?: Record<string, string>;
33+
serverUrl?: string | null;
3534
}
3635

3736
export interface OpenAPIFetcher {

0 commit comments

Comments
 (0)