@@ -3,10 +3,9 @@ import clsx from 'clsx';
3
3
import { useCallback } from 'react' ;
4
4
import { useStore } from 'zustand' ;
5
5
import type { MediaTypeRenderer } from './OpenAPICodeSample' ;
6
- import type { OpenAPIOperationData } from './types' ;
7
6
import { getOrCreateTabStoreByKey } from './useSyncedTabsGlobalState' ;
8
7
9
- function useMediaTypeState ( data : OpenAPIOperationData , defaultKey : string ) {
8
+ function useMediaTypeState ( data : { method : string ; path : string } , defaultKey : string ) {
10
9
const { method, path } = data ;
11
10
const store = useStore ( getOrCreateTabStoreByKey ( `media-type-${ method } -${ path } ` , defaultKey ) ) ;
12
11
if ( typeof store . tabKey !== 'string' ) {
@@ -18,7 +17,7 @@ function useMediaTypeState(data: OpenAPIOperationData, defaultKey: string) {
18
17
} ;
19
18
}
20
19
21
- function useMediaTypeSampleIndexState ( data : OpenAPIOperationData , mediaType : string ) {
20
+ function useMediaTypeSampleIndexState ( data : { method : string ; path : string } , mediaType : string ) {
22
21
const { method, path } = data ;
23
22
const store = useStore (
24
23
getOrCreateTabStoreByKey ( `media-type-sample-${ mediaType } -${ method } -${ path } ` , 0 )
@@ -33,14 +32,15 @@ function useMediaTypeSampleIndexState(data: OpenAPIOperationData, mediaType: str
33
32
}
34
33
35
34
export function OpenAPIMediaTypeExamplesSelector ( props : {
36
- data : OpenAPIOperationData ;
35
+ method : string ;
36
+ path : string ;
37
37
renderers : MediaTypeRenderer [ ] ;
38
38
} ) {
39
- const { data , renderers } = props ;
39
+ const { method , path , renderers } = props ;
40
40
if ( ! renderers [ 0 ] ) {
41
41
throw new Error ( 'No renderers provided' ) ;
42
42
}
43
- const state = useMediaTypeState ( data , renderers [ 0 ] . mediaType ) ;
43
+ const state = useMediaTypeState ( { method , path } , renderers [ 0 ] . mediaType ) ;
44
44
const selected = renderers . find ( ( r ) => r . mediaType === state . mediaType ) || renderers [ 0 ] ;
45
45
46
46
return (
@@ -56,17 +56,18 @@ export function OpenAPIMediaTypeExamplesSelector(props: {
56
56
</ option >
57
57
) ) }
58
58
</ select >
59
- < ExamplesSelector data = { data } renderer = { selected } />
59
+ < ExamplesSelector method = { method } path = { path } renderer = { selected } />
60
60
</ div >
61
61
) ;
62
62
}
63
63
64
64
function ExamplesSelector ( props : {
65
- data : OpenAPIOperationData ;
65
+ method : string ;
66
+ path : string ;
66
67
renderer : MediaTypeRenderer ;
67
68
} ) {
68
- const { data , renderer } = props ;
69
- const state = useMediaTypeSampleIndexState ( data , renderer . mediaType ) ;
69
+ const { method , path , renderer } = props ;
70
+ const state = useMediaTypeSampleIndexState ( { method , path } , renderer . mediaType ) ;
70
71
if ( renderer . examples . length < 2 ) {
71
72
return null ;
72
73
}
@@ -87,25 +88,26 @@ function ExamplesSelector(props: {
87
88
}
88
89
89
90
export function OpenAPIMediaTypeExamplesBody ( props : {
90
- data : OpenAPIOperationData ;
91
+ method : string ;
92
+ path : string ;
91
93
renderers : MediaTypeRenderer [ ] ;
92
94
} ) {
93
- const { renderers, data } = props ;
95
+ const { renderers, method , path } = props ;
94
96
if ( ! renderers [ 0 ] ) {
95
97
throw new Error ( 'No renderers provided' ) ;
96
98
}
97
- const mediaTypeState = useMediaTypeState ( data , renderers [ 0 ] . mediaType ) ;
99
+ const mediaTypeState = useMediaTypeState ( { method , path } , renderers [ 0 ] . mediaType ) ;
98
100
const selected =
99
101
renderers . find ( ( r ) => r . mediaType === mediaTypeState . mediaType ) ?? renderers [ 0 ] ;
100
102
if ( selected . examples . length === 0 ) {
101
103
return selected . element ;
102
104
}
103
- return < ExamplesBody data = { data } renderer = { selected } /> ;
105
+ return < ExamplesBody method = { method } path = { path } renderer = { selected } /> ;
104
106
}
105
107
106
- function ExamplesBody ( props : { data : OpenAPIOperationData ; renderer : MediaTypeRenderer } ) {
107
- const { data , renderer } = props ;
108
- const exampleState = useMediaTypeSampleIndexState ( data , renderer . mediaType ) ;
108
+ function ExamplesBody ( props : { method : string ; path : string ; renderer : MediaTypeRenderer } ) {
109
+ const { method , path , renderer } = props ;
110
+ const exampleState = useMediaTypeSampleIndexState ( { method , path } , renderer . mediaType ) ;
109
111
const example = renderer . examples [ exampleState . index ] ?? renderer . examples [ 0 ] ;
110
112
if ( ! example ) {
111
113
throw new Error ( `No example found for index ${ exampleState . index } ` ) ;
0 commit comments