|
2 | 2 | import clsx from 'clsx';
|
3 | 3 | import type { MediaTypeRenderer } from './OpenAPICodeSample';
|
4 | 4 | import { OpenAPISelect, OpenAPISelectItem, useSelectState } from './OpenAPISelect';
|
| 5 | +import { createStateKey } from './utils'; |
5 | 6 |
|
6 | 7 | export function OpenAPIMediaTypeExamplesSelector(props: {
|
7 | 8 | method: string;
|
8 | 9 | path: string;
|
9 | 10 | renderers: MediaTypeRenderer[];
|
10 | 11 | selectIcon?: React.ReactNode;
|
| 12 | + blockKey?: string; |
11 | 13 | }) {
|
12 |
| - const { method, path, renderers, selectIcon } = props; |
| 14 | + const { method, path, renderers, selectIcon, blockKey } = props; |
13 | 15 | if (!renderers[0]) {
|
14 | 16 | throw new Error('No renderers provided');
|
15 | 17 | }
|
16 |
| - const stateKey = `media-type-${method}-${path}`; |
| 18 | + const stateKey = createStateKey('request-body-media-type', blockKey); |
17 | 19 | const state = useSelectState(stateKey, renderers[0].mediaType);
|
18 | 20 | const selected = renderers.find((r) => r.mediaType === state.key) || renderers[0];
|
19 | 21 |
|
@@ -102,13 +104,17 @@ export function OpenAPIMediaTypeExamplesBody(props: {
|
102 | 104 | method: string;
|
103 | 105 | path: string;
|
104 | 106 | renderers: MediaTypeRenderer[];
|
| 107 | + blockKey?: string; |
105 | 108 | }) {
|
106 |
| - const { renderers, method, path } = props; |
| 109 | + const { renderers, method, path, blockKey } = props; |
107 | 110 | if (!renderers[0]) {
|
108 | 111 | throw new Error('No renderers provided');
|
109 | 112 | }
|
110 | 113 |
|
111 |
| - const mediaTypeState = useSelectState(`media-type-${method}-${path}`, renderers[0].mediaType); |
| 114 | + const mediaTypeState = useSelectState( |
| 115 | + createStateKey('request-body-media-type', blockKey), |
| 116 | + renderers[0].mediaType |
| 117 | + ); |
112 | 118 | const selected = renderers.find((r) => r.mediaType === mediaTypeState.key) ?? renderers[0];
|
113 | 119 | if (selected.examples.length === 0) {
|
114 | 120 | return selected.element;
|
|
0 commit comments