1*299f02f2SBartosz Kaszubowskiimport React from 'react'; 2*299f02f2SBartosz Kaszubowskiimport ReactMarkdown from 'react-markdown'; 3*299f02f2SBartosz Kaszubowski 4*299f02f2SBartosz Kaszubowskiimport { InlineCode } from '~/components/base/code'; 5*299f02f2SBartosz Kaszubowskiimport { LI, UL } from '~/components/base/list'; 6*299f02f2SBartosz Kaszubowskiimport { H2, H3Code, H4 } from '~/components/plugins/Headings'; 7*299f02f2SBartosz Kaszubowskiimport { MethodDefinitionData, MethodSignatureData } from '~/components/plugins/api/APIDataTypes'; 8*299f02f2SBartosz Kaszubowskiimport { 9*299f02f2SBartosz Kaszubowski CommentTextBlock, 10*299f02f2SBartosz Kaszubowski renderers, 11*299f02f2SBartosz Kaszubowski renderParam, 12*299f02f2SBartosz Kaszubowski resolveTypeName, 13*299f02f2SBartosz Kaszubowski} from '~/components/plugins/api/APISectionUtils'; 14*299f02f2SBartosz Kaszubowski 15*299f02f2SBartosz Kaszubowskiexport type APISectionMethodsProps = { 16*299f02f2SBartosz Kaszubowski data: MethodDefinitionData[]; 17*299f02f2SBartosz Kaszubowski apiName?: string; 18*299f02f2SBartosz Kaszubowski}; 19*299f02f2SBartosz Kaszubowski 20*299f02f2SBartosz Kaszubowskiconst renderMethod = ( 21*299f02f2SBartosz Kaszubowski { signatures }: MethodDefinitionData, 22*299f02f2SBartosz Kaszubowski index: number, 23*299f02f2SBartosz Kaszubowski dataLength?: number, 24*299f02f2SBartosz Kaszubowski apiName?: string 25*299f02f2SBartosz Kaszubowski): JSX.Element[] => 26*299f02f2SBartosz Kaszubowski signatures.map(({ name, parameters, comment, type }: MethodSignatureData) => ( 27*299f02f2SBartosz Kaszubowski <div key={`method-signature-${name}-${parameters?.length || 0}`}> 28*299f02f2SBartosz Kaszubowski <H3Code> 29*299f02f2SBartosz Kaszubowski <InlineCode> 30*299f02f2SBartosz Kaszubowski {apiName ? `${apiName}.` : ''} 31*299f02f2SBartosz Kaszubowski {name}({parameters?.map(param => param.name).join(', ')}) 32*299f02f2SBartosz Kaszubowski </InlineCode> 33*299f02f2SBartosz Kaszubowski </H3Code> 34*299f02f2SBartosz Kaszubowski {parameters ? <H4>Arguments</H4> : null} 35*299f02f2SBartosz Kaszubowski {parameters ? <UL>{parameters?.map(renderParam)}</UL> : null} 36*299f02f2SBartosz Kaszubowski <CommentTextBlock comment={comment} renderers={renderers} /> 37*299f02f2SBartosz Kaszubowski {resolveTypeName(type) !== 'undefined' ? ( 38*299f02f2SBartosz Kaszubowski <div> 39*299f02f2SBartosz Kaszubowski <H4>Returns</H4> 40*299f02f2SBartosz Kaszubowski <UL> 41*299f02f2SBartosz Kaszubowski <LI returnType> 42*299f02f2SBartosz Kaszubowski <InlineCode>{resolveTypeName(type)}</InlineCode> 43*299f02f2SBartosz Kaszubowski </LI> 44*299f02f2SBartosz Kaszubowski </UL> 45*299f02f2SBartosz Kaszubowski {comment?.returns ? ( 46*299f02f2SBartosz Kaszubowski <ReactMarkdown renderers={renderers}>{comment.returns}</ReactMarkdown> 47*299f02f2SBartosz Kaszubowski ) : null} 48*299f02f2SBartosz Kaszubowski </div> 49*299f02f2SBartosz Kaszubowski ) : null} 50*299f02f2SBartosz Kaszubowski {index + 1 !== dataLength ? <hr /> : null} 51*299f02f2SBartosz Kaszubowski </div> 52*299f02f2SBartosz Kaszubowski )); 53*299f02f2SBartosz Kaszubowski 54*299f02f2SBartosz Kaszubowskiconst APISectionMethods: React.FC<APISectionMethodsProps> = ({ data, apiName }) => 55*299f02f2SBartosz Kaszubowski data?.length ? ( 56*299f02f2SBartosz Kaszubowski <> 57*299f02f2SBartosz Kaszubowski <H2 key="methods-header">Methods</H2> 58*299f02f2SBartosz Kaszubowski {data.map((method, index) => renderMethod(method, index, data.length, apiName))} 59*299f02f2SBartosz Kaszubowski </> 60*299f02f2SBartosz Kaszubowski ) : null; 61*299f02f2SBartosz Kaszubowski 62*299f02f2SBartosz Kaszubowskiexport default APISectionMethods; 63