1
+ 'use client' ;
2
+
1
3
import * as React from 'react' ;
2
4
import { OpenAPIV3 } from 'openapi-types' ;
3
5
import { OpenAPIServerURLVariable } from './OpenAPIServerURLVariable' ;
4
6
import { OpenAPIClientContext } from './types' ;
5
7
import { ServerURLForm } from './OpenAPIServerURLForm' ;
6
- import { ServerSelector } from './ServerSelector' ;
8
+ import { useOpenAPIContext } from './OpenAPIContextProvider' ;
9
+ import { parseServerURL } from './utils' ;
7
10
8
11
/**
9
12
* Show the url of the server with variables replaced by their default values.
@@ -14,9 +17,12 @@ export function OpenAPIServerURL(props: {
14
17
path ?: string ;
15
18
} ) {
16
19
const { path, servers, context } = props ;
17
- const serverIndex = context . enumSelectors ?. server ?? 0 ;
20
+ const ctx = useOpenAPIContext ( ) ;
21
+
22
+ const serverIndex = ! isNaN ( Number ( ctx ?. state ?. server ) ) ? Number ( ctx ?. state ?. server ) : 0 ;
18
23
const server = servers [ serverIndex ] ;
19
24
const parts = parseServerURL ( server ?. url ?? '' ) ;
25
+ console . log ( { ctxState : ctx ?. state } )
20
26
21
27
return (
22
28
< ServerURLForm context = { context } servers = { servers } serverIndex = { serverIndex } >
@@ -33,7 +39,8 @@ export function OpenAPIServerURL(props: {
33
39
key = { i }
34
40
name = { part . name }
35
41
variable = { server . variables [ part . name ] }
36
- enumIndex = { context . enumSelectors ?. [ part . name ] }
42
+ selectionIndex = { Number ( ctx ?. state ?. [ part . name ] ) }
43
+ selectable = { Boolean ( ctx ?. state ?. edit ) }
37
44
/>
38
45
) ;
39
46
}
@@ -42,40 +49,3 @@ export function OpenAPIServerURL(props: {
42
49
</ ServerURLForm >
43
50
) ;
44
51
}
45
-
46
- /**
47
- * Get the default URL for the server.
48
- */
49
- export function getServersURL (
50
- servers : OpenAPIV3 . ServerObject [ ] ,
51
- selectors ?: Record < string , number > ,
52
- ) : string {
53
- const serverIndex = selectors && ! isNaN ( selectors . server ) ? Number ( selectors . server ) : 0 ;
54
- const server = servers [ serverIndex ] ;
55
- const parts = parseServerURL ( server ?. url ?? '' ) ;
56
-
57
- return parts
58
- . map ( ( part ) => {
59
- if ( part . kind === 'text' ) {
60
- return part . text ;
61
- } else {
62
- return selectors && ! isNaN ( selectors [ part . name ] )
63
- ? server . variables ?. [ part . name ] ?. enum ?. [ selectors [ part . name ] ]
64
- : ( server . variables ?. [ part . name ] ?. default ?? `{${ part . name } }` ) ;
65
- }
66
- } )
67
- . join ( '' ) ;
68
- }
69
-
70
- function parseServerURL ( url : string ) {
71
- const parts = url . split ( / { ( [ ^ } ] + ) } / g) ;
72
- const result : Array < { kind : 'variable' ; name : string } | { kind : 'text' ; text : string } > = [ ] ;
73
- for ( let i = 0 ; i < parts . length ; i ++ ) {
74
- if ( i % 2 === 0 ) {
75
- result . push ( { kind : 'text' , text : parts [ i ] } ) ;
76
- } else {
77
- result . push ( { kind : 'variable' , name : parts [ i ] } ) ;
78
- }
79
- }
80
- return result ;
81
- }
0 commit comments