@@ -4,21 +4,28 @@ import {toJsxRuntime} from 'hast-util-to-jsx-runtime';
44import { Nodes } from 'hastscript/lib/create-h' ;
55import bash from 'refractor/lang/bash.js' ;
66import json from 'refractor/lang/json.js' ;
7+ import typescript from 'refractor/lang/typescript.js' ;
78import { refractor } from 'refractor/lib/core.js' ;
89
910import { PlatformCategory } from 'sentry-docs/types' ;
1011
1112import { Expandable } from './expandable' ;
12- import { SdkDefinition , SdkDefinitionTable } from './sdkDefinition' ;
13+ import { RenderNestedObject } from './nestedObject' ;
14+ import { SdkDefinition } from './sdkDefinition' ;
1315
14- interface ParameterDef {
16+ export interface ParameterDef {
1517 name : string ;
16- type : string | ParameterDef [ ] ;
18+ type : string | ObjectParameterDef ;
1719 defaultValue ?: string ;
1820 description ?: string ;
1921 required ?: boolean ;
2022}
2123
24+ type ObjectParameterDef = {
25+ properties : ParameterDef [ ] ;
26+ name ?: string ;
27+ } ;
28+
2229type Props = {
2330 name : string ;
2431 parameters : ParameterDef [ ] ;
@@ -30,6 +37,7 @@ type Props = {
3037
3138refractor . register ( bash ) ;
3239refractor . register ( json ) ;
40+ refractor . register ( typescript ) ;
3341
3442const codeToJsx = ( code : string , lang = 'json' ) => {
3543 return toJsxRuntime ( refractor . highlight ( code , lang ) as Nodes , { Fragment, jsx, jsxs} ) ;
@@ -50,11 +58,11 @@ export function SdkApi({
5058
5159 { parameters . length ? (
5260 < Expandable title = "Parameters" >
53- < SdkDefinitionTable className = "bg-white !w-full " >
61+ < div className = "space-y-3 " >
5462 { parameters . map ( param => (
55- < ApiParameterDef key = { param . name } { ...param } />
63+ < ApiParameterDef key = { param . name } language = { language } { ...param } />
5664 ) ) }
57- </ SdkDefinitionTable >
65+ </ div >
5866 </ Expandable >
5967 ) : null }
6068
@@ -63,37 +71,36 @@ export function SdkApi({
6371 ) ;
6472}
6573
66- function ApiParameterDef ( { name, type, description, required} : ParameterDef ) {
74+ function ApiParameterDef ( {
75+ name,
76+ type,
77+ description,
78+ required,
79+ language,
80+ } : ParameterDef & { language : string } ) {
6781 return (
68- < tr >
69- < th >
82+ < div className = "space-y-1" >
83+ < div className = "font-bold m-0" >
7084 { name }
7185 { required ? < span className = "text-red" > *</ span > : null }
72- </ th >
73- < td >
74- { typeof type === 'string' ? (
75- < code > { type } </ code >
76- ) : (
77- < RenderNestedObject objProps = { type } />
78- ) }
86+ </ div >
87+ < div className = "space-y-1" >
88+ < div >
89+ { typeof type === 'string' ? (
90+ < pre className = "m-0 pt-1 pb-1" >
91+ < code > { codeToJsx ( type , language ) } </ code >
92+ </ pre >
93+ ) : (
94+ < RenderNestedObject
95+ name = { type . name }
96+ objProps = { type . properties }
97+ language = { language }
98+ />
99+ ) }
100+ </ div >
79101
80102 { description ? < p className = "m-0" > { description } </ p > : null }
81- </ td >
82- </ tr >
83- ) ;
84- }
85-
86- function RenderNestedObject ( { objProps} : { objProps : ParameterDef [ ] } ) {
87- return (
88- < Fragment >
89- < div >
90- < code > Object:</ code >
91103 </ div >
92- < SdkDefinitionTable className = "mt-1" >
93- { objProps . map ( prop => (
94- < ApiParameterDef key = { prop . name } { ...prop } />
95- ) ) }
96- </ SdkDefinitionTable >
97- </ Fragment >
104+ </ div >
98105 ) ;
99106}
0 commit comments