@@ -3,10 +3,9 @@ import clsx from 'clsx';
33import { useCallback } from 'react' ;
44import { useStore } from 'zustand' ;
55import type { MediaTypeRenderer } from './OpenAPICodeSample' ;
6- import type { OpenAPIOperationData } from './types' ;
76import { getOrCreateTabStoreByKey } from './useSyncedTabsGlobalState' ;
87
9- function useMediaTypeState ( data : OpenAPIOperationData , defaultKey : string ) {
8+ function useMediaTypeState ( data : { method : string ; path : string } , defaultKey : string ) {
109 const { method, path } = data ;
1110 const store = useStore ( getOrCreateTabStoreByKey ( `media-type-${ method } -${ path } ` , defaultKey ) ) ;
1211 if ( typeof store . tabKey !== 'string' ) {
@@ -18,7 +17,7 @@ function useMediaTypeState(data: OpenAPIOperationData, defaultKey: string) {
1817 } ;
1918}
2019
21- function useMediaTypeSampleIndexState ( data : OpenAPIOperationData , mediaType : string ) {
20+ function useMediaTypeSampleIndexState ( data : { method : string ; path : string } , mediaType : string ) {
2221 const { method, path } = data ;
2322 const store = useStore (
2423 getOrCreateTabStoreByKey ( `media-type-sample-${ mediaType } -${ method } -${ path } ` , 0 )
@@ -33,14 +32,15 @@ function useMediaTypeSampleIndexState(data: OpenAPIOperationData, mediaType: str
3332}
3433
3534export function OpenAPIMediaTypeExamplesSelector ( props : {
36- data : OpenAPIOperationData ;
35+ method : string ;
36+ path : string ;
3737 renderers : MediaTypeRenderer [ ] ;
3838} ) {
39- const { data , renderers } = props ;
39+ const { method , path , renderers } = props ;
4040 if ( ! renderers [ 0 ] ) {
4141 throw new Error ( 'No renderers provided' ) ;
4242 }
43- const state = useMediaTypeState ( data , renderers [ 0 ] . mediaType ) ;
43+ const state = useMediaTypeState ( { method , path } , renderers [ 0 ] . mediaType ) ;
4444 const selected = renderers . find ( ( r ) => r . mediaType === state . mediaType ) || renderers [ 0 ] ;
4545
4646 return (
@@ -56,17 +56,18 @@ export function OpenAPIMediaTypeExamplesSelector(props: {
5656 </ option >
5757 ) ) }
5858 </ select >
59- < ExamplesSelector data = { data } renderer = { selected } />
59+ < ExamplesSelector method = { method } path = { path } renderer = { selected } />
6060 </ div >
6161 ) ;
6262}
6363
6464function ExamplesSelector ( props : {
65- data : OpenAPIOperationData ;
65+ method : string ;
66+ path : string ;
6667 renderer : MediaTypeRenderer ;
6768} ) {
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 ) ;
7071 if ( renderer . examples . length < 2 ) {
7172 return null ;
7273 }
@@ -87,25 +88,26 @@ function ExamplesSelector(props: {
8788}
8889
8990export function OpenAPIMediaTypeExamplesBody ( props : {
90- data : OpenAPIOperationData ;
91+ method : string ;
92+ path : string ;
9193 renderers : MediaTypeRenderer [ ] ;
9294} ) {
93- const { renderers, data } = props ;
95+ const { renderers, method , path } = props ;
9496 if ( ! renderers [ 0 ] ) {
9597 throw new Error ( 'No renderers provided' ) ;
9698 }
97- const mediaTypeState = useMediaTypeState ( data , renderers [ 0 ] . mediaType ) ;
99+ const mediaTypeState = useMediaTypeState ( { method , path } , renderers [ 0 ] . mediaType ) ;
98100 const selected =
99101 renderers . find ( ( r ) => r . mediaType === mediaTypeState . mediaType ) ?? renderers [ 0 ] ;
100102 if ( selected . examples . length === 0 ) {
101103 return selected . element ;
102104 }
103- return < ExamplesBody data = { data } renderer = { selected } /> ;
105+ return < ExamplesBody method = { method } path = { path } renderer = { selected } /> ;
104106}
105107
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 ) ;
109111 const example = renderer . examples [ exampleState . index ] ?? renderer . examples [ 0 ] ;
110112 if ( ! example ) {
111113 throw new Error ( `No example found for index ${ exampleState . index } ` ) ;
0 commit comments