11886d870SBartosz Kaszubowskiimport { css } from '@emotion/react'; 2299f02f2SBartosz Kaszubowskiimport React from 'react'; 3299f02f2SBartosz Kaszubowskiimport ReactMarkdown from 'react-markdown'; 4299f02f2SBartosz Kaszubowski 5299f02f2SBartosz Kaszubowskiimport { InlineCode } from '~/components/base/code'; 6299f02f2SBartosz Kaszubowskiimport { LI, UL } from '~/components/base/list'; 71886d870SBartosz Kaszubowskiimport { H2, H3Code, H4, H4Code } from '~/components/plugins/Headings'; 8d8d79196SBartosz Kaszubowskiimport { 9d8d79196SBartosz Kaszubowski MethodDefinitionData, 10d8d79196SBartosz Kaszubowski MethodSignatureData, 11d8d79196SBartosz Kaszubowski PropData, 12d8d79196SBartosz Kaszubowski} from '~/components/plugins/api/APIDataTypes'; 13299f02f2SBartosz Kaszubowskiimport { 14299f02f2SBartosz Kaszubowski CommentTextBlock, 15d0262524SBartosz Kaszubowski getPlatformTags, 16abded2bbSBartosz Kaszubowski listParams, 17dc379e46SBartosz Kaszubowski mdComponents, 18299f02f2SBartosz Kaszubowski renderParam, 19299f02f2SBartosz Kaszubowski resolveTypeName, 20299f02f2SBartosz Kaszubowski} from '~/components/plugins/api/APISectionUtils'; 21299f02f2SBartosz Kaszubowski 22299f02f2SBartosz Kaszubowskiexport type APISectionMethodsProps = { 23e3060685SBartosz Kaszubowski data: (MethodDefinitionData | PropData)[]; 24299f02f2SBartosz Kaszubowski apiName?: string; 251b3dce65SBartosz Kaszubowski header?: string; 26299f02f2SBartosz Kaszubowski}; 27299f02f2SBartosz Kaszubowski 281886d870SBartosz Kaszubowskiconst STYLES_NOT_EXPOSED_HEADER = css({ marginTop: 20, marginBottom: 10, display: 'inline-block' }); 291886d870SBartosz Kaszubowski 30d8d79196SBartosz Kaszubowskiexport const renderMethod = ( 31d8d79196SBartosz Kaszubowski { signatures = [] }: MethodDefinitionData | PropData, 32d8d79196SBartosz Kaszubowski index?: number, 33299f02f2SBartosz Kaszubowski dataLength?: number, 34f128dd42SBartosz Kaszubowski apiName?: string, 351886d870SBartosz Kaszubowski header?: string, 361886d870SBartosz Kaszubowski exposeInSidebar: boolean = true 371886d870SBartosz Kaszubowski): JSX.Element[] => { 381886d870SBartosz Kaszubowski const HeaderComponent = exposeInSidebar ? H3Code : H4Code; 391886d870SBartosz Kaszubowski return signatures.map(({ name, parameters, comment, type }: MethodSignatureData) => ( 40299f02f2SBartosz Kaszubowski <div key={`method-signature-${name}-${parameters?.length || 0}`}> 411886d870SBartosz Kaszubowski <HeaderComponent> 421886d870SBartosz Kaszubowski <InlineCode customCss={STYLES_NOT_EXPOSED_HEADER}> 43c8c9d6e8SBartosz Kaszubowski {apiName && `${apiName}.`} 44abded2bbSBartosz Kaszubowski {header !== 'Hooks' ? `${name}(${listParams(parameters)})` : name} 45299f02f2SBartosz Kaszubowski </InlineCode> 461886d870SBartosz Kaszubowski </HeaderComponent> 47d0262524SBartosz Kaszubowski {getPlatformTags(comment)} 48ffc1cfa8SBartosz Kaszubowski <CommentTextBlock 49ffc1cfa8SBartosz Kaszubowski comment={comment} 50ffc1cfa8SBartosz Kaszubowski beforeContent={ 51c8c9d6e8SBartosz Kaszubowski parameters && ( 52ffc1cfa8SBartosz Kaszubowski <> 53ffc1cfa8SBartosz Kaszubowski <H4>Arguments</H4> 54ffc1cfa8SBartosz Kaszubowski <UL>{parameters?.map(renderParam)}</UL> 55ffc1cfa8SBartosz Kaszubowski </> 56c8c9d6e8SBartosz Kaszubowski ) 57ffc1cfa8SBartosz Kaszubowski } 58d0262524SBartosz Kaszubowski includePlatforms={false} 59ffc1cfa8SBartosz Kaszubowski /> 60299f02f2SBartosz Kaszubowski {resolveTypeName(type) !== 'undefined' ? ( 61*af644ed4SBartosz Kaszubowski <> 62299f02f2SBartosz Kaszubowski <H4>Returns</H4> 63299f02f2SBartosz Kaszubowski <UL> 64299f02f2SBartosz Kaszubowski <LI returnType> 65299f02f2SBartosz Kaszubowski <InlineCode>{resolveTypeName(type)}</InlineCode> 66299f02f2SBartosz Kaszubowski </LI> 67299f02f2SBartosz Kaszubowski </UL> 68c8c9d6e8SBartosz Kaszubowski {comment?.returns && ( 69dc379e46SBartosz Kaszubowski <ReactMarkdown components={mdComponents}>{comment.returns}</ReactMarkdown> 70c8c9d6e8SBartosz Kaszubowski )} 71*af644ed4SBartosz Kaszubowski </> 72299f02f2SBartosz Kaszubowski ) : null} 73d8d79196SBartosz Kaszubowski {index !== undefined ? index + 1 !== dataLength && <hr /> : null} 74299f02f2SBartosz Kaszubowski </div> 75299f02f2SBartosz Kaszubowski )); 761886d870SBartosz Kaszubowski}; 77299f02f2SBartosz Kaszubowski 78558a63feSBartosz Kaszubowskiconst APISectionMethods = ({ data, apiName, header = 'Methods' }: APISectionMethodsProps) => 79299f02f2SBartosz Kaszubowski data?.length ? ( 80299f02f2SBartosz Kaszubowski <> 811b3dce65SBartosz Kaszubowski <H2 key="methods-header">{header}</H2> 82e3060685SBartosz Kaszubowski {data.map((method: MethodDefinitionData | PropData, index: number) => 83e3060685SBartosz Kaszubowski renderMethod(method, index, data.length, apiName, header) 84e3060685SBartosz Kaszubowski )} 85299f02f2SBartosz Kaszubowski </> 86299f02f2SBartosz Kaszubowski ) : null; 87299f02f2SBartosz Kaszubowski 88299f02f2SBartosz Kaszubowskiexport default APISectionMethods; 89