1*f4b1168bSBartosz Kaszubowskiimport { CornerDownRightIcon } from '@expo/styleguide-icons'; 2299f02f2SBartosz Kaszubowskiimport ReactMarkdown from 'react-markdown'; 3299f02f2SBartosz Kaszubowski 4504f93b3SBartosz Kaszubowskiimport { APIDataType } from '~/components/plugins/api/APIDataType'; 5d8d79196SBartosz Kaszubowskiimport { 66b7802baSBartosz Kaszubowski AccessorDefinitionData, 7d8d79196SBartosz Kaszubowski MethodDefinitionData, 85990cc31SBartosz Kaszubowski MethodParamData, 9d8d79196SBartosz Kaszubowski MethodSignatureData, 10d8d79196SBartosz Kaszubowski PropData, 11dd9570b9SBartosz Kaszubowski TypeSignaturesData, 12d8d79196SBartosz Kaszubowski} from '~/components/plugins/api/APIDataTypes'; 1325b16883SBartosz Kaszubowskiimport { APISectionDeprecationNote } from '~/components/plugins/api/APISectionDeprecationNote'; 14b3bd70ceSTomasz Sapetaimport { APISectionPlatformTags } from '~/components/plugins/api/APISectionPlatformTags'; 15299f02f2SBartosz Kaszubowskiimport { 16299f02f2SBartosz Kaszubowski CommentTextBlock, 17adede39aSŁukasz Kosmaty getMethodName, 18c4c6b9d1SBartosz Kaszubowski getTagNamesList, 19dc379e46SBartosz Kaszubowski mdComponents, 207534da61SBartosz Kaszubowski renderParams, 21299f02f2SBartosz Kaszubowski resolveTypeName, 226a5c065cSBartosz Kaszubowski STYLES_APIBOX, 236a5c065cSBartosz Kaszubowski STYLES_APIBOX_NESTED, 246a5c065cSBartosz Kaszubowski STYLES_NOT_EXPOSED_HEADER, 25adede39aSŁukasz Kosmaty TypeDocKind, 26a16a3d18SBartosz Kaszubowski H3Code, 27a16a3d18SBartosz Kaszubowski H4Code, 285990cc31SBartosz Kaszubowski getTagData, 295990cc31SBartosz Kaszubowski getCommentContent, 30be43ea08SBartosz Kaszubowski BoxSectionHeader, 31299f02f2SBartosz Kaszubowski} from '~/components/plugins/api/APISectionUtils'; 323324c13cSBartosz Kaszubowskiimport { H2, LI, UL, MONOSPACE } from '~/ui/components/Text'; 33299f02f2SBartosz Kaszubowski 34299f02f2SBartosz Kaszubowskiexport type APISectionMethodsProps = { 35e3060685SBartosz Kaszubowski data: (MethodDefinitionData | PropData)[]; 36299f02f2SBartosz Kaszubowski apiName?: string; 371b3dce65SBartosz Kaszubowski header?: string; 38adede39aSŁukasz Kosmaty exposeInSidebar?: boolean; 39299f02f2SBartosz Kaszubowski}; 40299f02f2SBartosz Kaszubowski 414c73bbf6SBartosz Kaszubowskiexport type RenderMethodOptions = { 424c73bbf6SBartosz Kaszubowski apiName?: string; 434c73bbf6SBartosz Kaszubowski header?: string; 444c73bbf6SBartosz Kaszubowski exposeInSidebar?: boolean; 454c73bbf6SBartosz Kaszubowski}; 464c73bbf6SBartosz Kaszubowski 47d8d79196SBartosz Kaszubowskiexport const renderMethod = ( 486b7802baSBartosz Kaszubowski method: MethodDefinitionData | AccessorDefinitionData | PropData, 49dd9570b9SBartosz Kaszubowski { apiName, exposeInSidebar = true }: RenderMethodOptions = {} 505990cc31SBartosz Kaszubowski) => { 516b7802baSBartosz Kaszubowski const signatures = 526b7802baSBartosz Kaszubowski (method as MethodDefinitionData).signatures || 535990cc31SBartosz Kaszubowski (method as PropData)?.type?.declaration?.signatures || [ 545990cc31SBartosz Kaszubowski (method as AccessorDefinitionData)?.getSignature, 555990cc31SBartosz Kaszubowski ] || 566b7802baSBartosz Kaszubowski []; 571886d870SBartosz Kaszubowski const HeaderComponent = exposeInSidebar ? H3Code : H4Code; 58dd9570b9SBartosz Kaszubowski return signatures.map( 595990cc31SBartosz Kaszubowski ({ name, parameters, comment, type }: MethodSignatureData | TypeSignaturesData) => { 605990cc31SBartosz Kaszubowski const returnComment = getTagData('returns', comment); 615990cc31SBartosz Kaszubowski return ( 626a5c065cSBartosz Kaszubowski <div 63dd9570b9SBartosz Kaszubowski key={`method-signature-${method.name || name}-${parameters?.length || 0}`} 6412abeb84SBartosz Kaszubowski css={[STYLES_APIBOX, STYLES_APIBOX_NESTED]}> 6525b16883SBartosz Kaszubowski <APISectionDeprecationNote comment={comment} /> 66d9bd5b6cSBartosz Kaszubowski <APISectionPlatformTags comment={comment} prefix="Only for:" /> 67c4c6b9d1SBartosz Kaszubowski <HeaderComponent tags={getTagNamesList(comment)}> 683324c13cSBartosz Kaszubowski <MONOSPACE weight="medium" css={!exposeInSidebar && STYLES_NOT_EXPOSED_HEADER}> 69adede39aSŁukasz Kosmaty {getMethodName(method as MethodDefinitionData, apiName, name, parameters)} 703324c13cSBartosz Kaszubowski </MONOSPACE> 711886d870SBartosz Kaszubowski </HeaderComponent> 7212abeb84SBartosz Kaszubowski {parameters && parameters.length > 0 && ( 7312abeb84SBartosz Kaszubowski <> 7412abeb84SBartosz Kaszubowski {renderParams(parameters)} 7512abeb84SBartosz Kaszubowski <br /> 7612abeb84SBartosz Kaszubowski </> 7712abeb84SBartosz Kaszubowski )} 787534da61SBartosz Kaszubowski <CommentTextBlock comment={comment} includePlatforms={false} /> 796a5c065cSBartosz Kaszubowski {resolveTypeName(type) !== 'undefined' && ( 80af644ed4SBartosz Kaszubowski <> 81be43ea08SBartosz Kaszubowski <BoxSectionHeader text="Returns" /> 82*f4b1168bSBartosz Kaszubowski <UL className="!list-none !ml-0"> 833e972ef8SBartosz Kaszubowski <LI> 84*f4b1168bSBartosz Kaszubowski <CornerDownRightIcon className="inline-block icon-sm text-icon-secondary align-middle mr-2" /> 85504f93b3SBartosz Kaszubowski <APIDataType typeDefinition={type} /> 86299f02f2SBartosz Kaszubowski </LI> 87299f02f2SBartosz Kaszubowski </UL> 8812abeb84SBartosz Kaszubowski <> 8912abeb84SBartosz Kaszubowski <br /> 905990cc31SBartosz Kaszubowski {returnComment ? ( 915990cc31SBartosz Kaszubowski <ReactMarkdown components={mdComponents}> 925990cc31SBartosz Kaszubowski {getCommentContent(returnComment.content)} 935990cc31SBartosz Kaszubowski </ReactMarkdown> 945990cc31SBartosz Kaszubowski ) : undefined} 9512abeb84SBartosz Kaszubowski </> 96af644ed4SBartosz Kaszubowski </> 976a5c065cSBartosz Kaszubowski )} 98299f02f2SBartosz Kaszubowski </div> 995990cc31SBartosz Kaszubowski ); 1005990cc31SBartosz Kaszubowski } 101dd9570b9SBartosz Kaszubowski ); 1021886d870SBartosz Kaszubowski}; 103299f02f2SBartosz Kaszubowski 104adede39aSŁukasz Kosmatyconst APISectionMethods = ({ 105adede39aSŁukasz Kosmaty data, 106adede39aSŁukasz Kosmaty apiName, 107adede39aSŁukasz Kosmaty header = 'Methods', 108adede39aSŁukasz Kosmaty exposeInSidebar = true, 109adede39aSŁukasz Kosmaty}: APISectionMethodsProps) => 110299f02f2SBartosz Kaszubowski data?.length ? ( 111299f02f2SBartosz Kaszubowski <> 11207ffa84cSBartosz Kaszubowski <H2 key={`${header}-header`}>{header}</H2> 1134c73bbf6SBartosz Kaszubowski {data.map((method: MethodDefinitionData | PropData) => 114adede39aSŁukasz Kosmaty renderMethod(method, { apiName, header, exposeInSidebar }) 115e3060685SBartosz Kaszubowski )} 116299f02f2SBartosz Kaszubowski </> 117299f02f2SBartosz Kaszubowski ) : null; 118299f02f2SBartosz Kaszubowski 119299f02f2SBartosz Kaszubowskiexport default APISectionMethods; 120adede39aSŁukasz Kosmaty 121adede39aSŁukasz Kosmatyexport const APIMethod = ({ 122adede39aSŁukasz Kosmaty name, 123adede39aSŁukasz Kosmaty comment, 124adede39aSŁukasz Kosmaty returnTypeName, 125adede39aSŁukasz Kosmaty isProperty = false, 126adede39aSŁukasz Kosmaty isReturnTypeReference = false, 127adede39aSŁukasz Kosmaty exposeInSidebar = false, 128adede39aSŁukasz Kosmaty parameters = [], 129c468593bSŁukasz Kosmaty platforms = [], 130adede39aSŁukasz Kosmaty}: { 131adede39aSŁukasz Kosmaty exposeInSidebar?: boolean; 132adede39aSŁukasz Kosmaty name: string; 133adede39aSŁukasz Kosmaty comment: string; 134adede39aSŁukasz Kosmaty returnTypeName: string; 135adede39aSŁukasz Kosmaty isProperty: boolean; 136adede39aSŁukasz Kosmaty isReturnTypeReference: boolean; 137c468593bSŁukasz Kosmaty platforms: ('Android' | 'iOS' | 'Web')[]; 138adede39aSŁukasz Kosmaty parameters: { 139adede39aSŁukasz Kosmaty name: string; 140adede39aSŁukasz Kosmaty comment?: string; 141adede39aSŁukasz Kosmaty typeName: string; 142adede39aSŁukasz Kosmaty isReference?: boolean; 143adede39aSŁukasz Kosmaty }[]; 1445990cc31SBartosz Kaszubowski}) => { 1455990cc31SBartosz Kaszubowski const parsedParameters = parameters.map( 1465990cc31SBartosz Kaszubowski param => 1475990cc31SBartosz Kaszubowski ({ 148adede39aSŁukasz Kosmaty name: param.name, 149adede39aSŁukasz Kosmaty type: { name: param.typeName, type: param.isReference ? 'reference' : 'literal' }, 150adede39aSŁukasz Kosmaty comment: { 1515990cc31SBartosz Kaszubowski summary: [{ kind: 'text', text: param.comment }], 152adede39aSŁukasz Kosmaty }, 1535990cc31SBartosz Kaszubowski } as MethodParamData) 1545990cc31SBartosz Kaszubowski ); 155adede39aSŁukasz Kosmaty return renderMethod( 156adede39aSŁukasz Kosmaty { 157adede39aSŁukasz Kosmaty name, 158adede39aSŁukasz Kosmaty signatures: [ 159adede39aSŁukasz Kosmaty { 160adede39aSŁukasz Kosmaty name, 161adede39aSŁukasz Kosmaty parameters: parsedParameters, 162adede39aSŁukasz Kosmaty comment: { 1635990cc31SBartosz Kaszubowski summary: [{ kind: 'text', text: comment }], 1645990cc31SBartosz Kaszubowski blockTags: platforms.map(text => ({ 165c468593bSŁukasz Kosmaty tag: 'platform', 1665990cc31SBartosz Kaszubowski content: [{ kind: 'text', text }], 167c468593bSŁukasz Kosmaty })), 168adede39aSŁukasz Kosmaty }, 169adede39aSŁukasz Kosmaty type: { name: returnTypeName, type: isReturnTypeReference ? 'reference' : 'literal' }, 170adede39aSŁukasz Kosmaty }, 171adede39aSŁukasz Kosmaty ], 172adede39aSŁukasz Kosmaty kind: isProperty ? TypeDocKind.Property : TypeDocKind.Function, 173adede39aSŁukasz Kosmaty }, 174adede39aSŁukasz Kosmaty { exposeInSidebar } 175adede39aSŁukasz Kosmaty ); 176adede39aSŁukasz Kosmaty}; 177