1
1
import * as React from 'react' ;
2
2
import { OpenAPIV3 } from 'openapi-types' ;
3
3
import { OpenAPIServerURLVariable } from './OpenAPIServerURLVariable' ;
4
+ import { OpenAPIClientContext } from './types' ;
5
+ import { ServerURLForm } from './OpenAPIServerURLForm' ;
4
6
5
7
/**
6
8
* Show the url of the server with variables replaced by their default values.
7
9
*/
8
- export function OpenAPIServerURL ( props : { servers : OpenAPIV3 . ServerObject [ ] } ) {
9
- const { servers } = props ;
10
- const server = servers [ 0 ] ;
11
-
10
+ export function OpenAPIServerURL ( props : {
11
+ servers : OpenAPIV3 . ServerObject [ ] ;
12
+ context : OpenAPIClientContext ;
13
+ } ) {
14
+ const { servers, context } = props ;
15
+ const serverIndex = context . enumSelectors ?. servers ?? 0 ;
16
+ const server = servers [ serverIndex ] ;
12
17
const parts = parseServerURL ( server ?. url ?? '' ) ;
13
18
14
19
return (
15
- < span >
20
+ < ServerURLForm context = { context } server = { server } >
16
21
{ parts . map ( ( part , i ) => {
17
22
if ( part . kind === 'text' ) {
18
23
return < span key = { i } > { part . text } </ span > ;
@@ -26,18 +31,22 @@ export function OpenAPIServerURL(props: { servers: OpenAPIV3.ServerObject[] }) {
26
31
key = { i }
27
32
name = { part . name }
28
33
variable = { server . variables [ part . name ] }
34
+ enumIndex = { context . enumSelectors ?. [ part . name ] }
29
35
/>
30
36
) ;
31
37
}
32
38
} ) }
33
- </ span >
39
+ </ ServerURLForm >
34
40
) ;
35
41
}
36
42
37
43
/**
38
44
* Get the default URL for the server.
39
45
*/
40
- export function getServersURL ( servers : OpenAPIV3 . ServerObject [ ] ) : string {
46
+ export function getServersURL (
47
+ servers : OpenAPIV3 . ServerObject [ ] ,
48
+ selectors ?: Record < string , number > ,
49
+ ) : string {
41
50
const server = servers [ 0 ] ;
42
51
const parts = parseServerURL ( server ?. url ?? '' ) ;
43
52
@@ -46,7 +55,9 @@ export function getServersURL(servers: OpenAPIV3.ServerObject[]): string {
46
55
if ( part . kind === 'text' ) {
47
56
return part . text ;
48
57
} else {
49
- return server . variables ?. [ part . name ] ?. default ?? `{${ part . name } }` ;
58
+ return selectors && ! isNaN ( selectors [ part . name ] )
59
+ ? server . variables ?. [ part . name ] ?. enum ?. [ selectors [ part . name ] ]
60
+ : ( server . variables ?. [ part . name ] ?. default ?? `{${ part . name } }` ) ;
50
61
}
51
62
} )
52
63
. join ( '' ) ;
0 commit comments