1299f02f2SBartosz Kaszubowskiimport React from 'react'; 2299f02f2SBartosz Kaszubowskiimport ReactMarkdown from 'react-markdown'; 3299f02f2SBartosz Kaszubowski 4299f02f2SBartosz Kaszubowskiimport { InlineCode } from '~/components/base/code'; 5299f02f2SBartosz Kaszubowskiimport { LI, UL } from '~/components/base/list'; 6299f02f2SBartosz Kaszubowskiimport { H2, H3Code, H4 } from '~/components/plugins/Headings'; 7299f02f2SBartosz Kaszubowskiimport { MethodDefinitionData, MethodSignatureData } from '~/components/plugins/api/APIDataTypes'; 8299f02f2SBartosz Kaszubowskiimport { 9299f02f2SBartosz Kaszubowski CommentTextBlock, 10abded2bbSBartosz Kaszubowski listParams, 11dc379e46SBartosz Kaszubowski mdComponents, 12299f02f2SBartosz Kaszubowski renderParam, 13299f02f2SBartosz Kaszubowski resolveTypeName, 14299f02f2SBartosz Kaszubowski} from '~/components/plugins/api/APISectionUtils'; 15299f02f2SBartosz Kaszubowski 16299f02f2SBartosz Kaszubowskiexport type APISectionMethodsProps = { 17299f02f2SBartosz Kaszubowski data: MethodDefinitionData[]; 18299f02f2SBartosz Kaszubowski apiName?: string; 191b3dce65SBartosz Kaszubowski header?: string; 20299f02f2SBartosz Kaszubowski}; 21299f02f2SBartosz Kaszubowski 22299f02f2SBartosz Kaszubowskiconst renderMethod = ( 23299f02f2SBartosz Kaszubowski { signatures }: MethodDefinitionData, 24299f02f2SBartosz Kaszubowski index: number, 25299f02f2SBartosz Kaszubowski dataLength?: number, 26f128dd42SBartosz Kaszubowski apiName?: string, 27f128dd42SBartosz Kaszubowski header?: string 28299f02f2SBartosz Kaszubowski): JSX.Element[] => 29299f02f2SBartosz Kaszubowski signatures.map(({ name, parameters, comment, type }: MethodSignatureData) => ( 30299f02f2SBartosz Kaszubowski <div key={`method-signature-${name}-${parameters?.length || 0}`}> 31299f02f2SBartosz Kaszubowski <H3Code> 32299f02f2SBartosz Kaszubowski <InlineCode> 33c8c9d6e8SBartosz Kaszubowski {apiName && `${apiName}.`} 34abded2bbSBartosz Kaszubowski {header !== 'Hooks' ? `${name}(${listParams(parameters)})` : name} 35299f02f2SBartosz Kaszubowski </InlineCode> 36299f02f2SBartosz Kaszubowski </H3Code> 37ffc1cfa8SBartosz Kaszubowski <CommentTextBlock 38ffc1cfa8SBartosz Kaszubowski comment={comment} 39ffc1cfa8SBartosz Kaszubowski beforeContent={ 40c8c9d6e8SBartosz Kaszubowski parameters && ( 41ffc1cfa8SBartosz Kaszubowski <> 42ffc1cfa8SBartosz Kaszubowski <H4>Arguments</H4> 43ffc1cfa8SBartosz Kaszubowski <UL>{parameters?.map(renderParam)}</UL> 44ffc1cfa8SBartosz Kaszubowski </> 45c8c9d6e8SBartosz Kaszubowski ) 46ffc1cfa8SBartosz Kaszubowski } 47ffc1cfa8SBartosz Kaszubowski /> 48299f02f2SBartosz Kaszubowski {resolveTypeName(type) !== 'undefined' ? ( 49299f02f2SBartosz Kaszubowski <div> 50299f02f2SBartosz Kaszubowski <H4>Returns</H4> 51299f02f2SBartosz Kaszubowski <UL> 52299f02f2SBartosz Kaszubowski <LI returnType> 53299f02f2SBartosz Kaszubowski <InlineCode>{resolveTypeName(type)}</InlineCode> 54299f02f2SBartosz Kaszubowski </LI> 55299f02f2SBartosz Kaszubowski </UL> 56c8c9d6e8SBartosz Kaszubowski {comment?.returns && ( 57dc379e46SBartosz Kaszubowski <ReactMarkdown components={mdComponents}>{comment.returns}</ReactMarkdown> 58c8c9d6e8SBartosz Kaszubowski )} 59299f02f2SBartosz Kaszubowski </div> 60299f02f2SBartosz Kaszubowski ) : null} 61c8c9d6e8SBartosz Kaszubowski {index + 1 !== dataLength && <hr />} 62299f02f2SBartosz Kaszubowski </div> 63299f02f2SBartosz Kaszubowski )); 64299f02f2SBartosz Kaszubowski 65*558a63feSBartosz Kaszubowskiconst APISectionMethods = ({ data, apiName, header = 'Methods' }: APISectionMethodsProps) => 66299f02f2SBartosz Kaszubowski data?.length ? ( 67299f02f2SBartosz Kaszubowski <> 681b3dce65SBartosz Kaszubowski <H2 key="methods-header">{header}</H2> 69f128dd42SBartosz Kaszubowski {data.map((method, index) => renderMethod(method, index, data.length, apiName, header))} 70299f02f2SBartosz Kaszubowski </> 71299f02f2SBartosz Kaszubowski ) : null; 72299f02f2SBartosz Kaszubowski 73299f02f2SBartosz Kaszubowskiexport default APISectionMethods; 74