@@ -5,7 +5,15 @@ import { useStore } from 'zustand';
5
5
import type { MediaTypeRenderer } from './OpenAPICodeSample' ;
6
6
import { getOrCreateTabStoreByKey } from './useSyncedTabsGlobalState' ;
7
7
8
- function useMediaTypeState ( data : { method : string ; path : string } , defaultKey : string ) {
8
+ type MediaTypeState = {
9
+ mediaType : string ;
10
+ setMediaType : ( mediaType : string ) => void ;
11
+ } ;
12
+
13
+ function useMediaTypeState (
14
+ data : { method : string ; path : string } ,
15
+ defaultKey : string
16
+ ) : MediaTypeState {
9
17
const { method, path } = data ;
10
18
const store = useStore ( getOrCreateTabStoreByKey ( `media-type-${ method } -${ path } ` , defaultKey ) ) ;
11
19
if ( typeof store . tabKey !== 'string' ) {
@@ -45,22 +53,37 @@ export function OpenAPIMediaTypeExamplesSelector(props: {
45
53
46
54
return (
47
55
< div className = "openapi-codesample-selectors" >
48
- < select
49
- className = { clsx ( 'openapi-select' ) }
50
- value = { state . mediaType }
51
- onChange = { ( e ) => state . setMediaType ( e . target . value ) }
52
- >
53
- { renderers . map ( ( renderer ) => (
54
- < option key = { renderer . mediaType } value = { renderer . mediaType } >
55
- { renderer . mediaType }
56
- </ option >
57
- ) ) }
58
- </ select >
56
+ < MediaTypeSelector state = { state } renderers = { renderers } />
59
57
< ExamplesSelector method = { method } path = { path } renderer = { selected } />
60
58
</ div >
61
59
) ;
62
60
}
63
61
62
+ function MediaTypeSelector ( props : {
63
+ state : MediaTypeState ;
64
+ renderers : MediaTypeRenderer [ ] ;
65
+ } ) {
66
+ const { renderers, state } = props ;
67
+
68
+ if ( renderers . length < 2 ) {
69
+ return null ;
70
+ }
71
+
72
+ return (
73
+ < select
74
+ className = { clsx ( 'openapi-select' ) }
75
+ value = { state . mediaType }
76
+ onChange = { ( e ) => state . setMediaType ( e . target . value ) }
77
+ >
78
+ { renderers . map ( ( renderer ) => (
79
+ < option key = { renderer . mediaType } value = { renderer . mediaType } >
80
+ { renderer . mediaType }
81
+ </ option >
82
+ ) ) }
83
+ </ select >
84
+ ) ;
85
+ }
86
+
64
87
function ExamplesSelector ( props : {
65
88
method : string ;
66
89
path : string ;
0 commit comments