import { css } from '@emotion/react'; import { theme, spacing, UndoIcon, iconSize } from '@expo/styleguide'; import React from 'react'; import ReactMarkdown from 'react-markdown'; import { InlineCode } from '~/components/base/code'; import { LI, UL } from '~/components/base/list'; import { H2, H3Code, H4, H4Code } from '~/components/plugins/Headings'; import { MethodDefinitionData, MethodSignatureData, PropData, TypeSignaturesData, } from '~/components/plugins/api/APIDataTypes'; import { APISectionDeprecationNote } from '~/components/plugins/api/APISectionDeprecationNote'; import { APISectionPlatformTags } from '~/components/plugins/api/APISectionPlatformTags'; import { CommentTextBlock, getTagNamesList, listParams, mdComponents, renderParams, resolveTypeName, STYLES_APIBOX, STYLES_APIBOX_NESTED, STYLES_NESTED_SECTION_HEADER, STYLES_NOT_EXPOSED_HEADER, } from '~/components/plugins/api/APISectionUtils'; export type APISectionMethodsProps = { data: (MethodDefinitionData | PropData)[]; apiName?: string; header?: string; }; export type RenderMethodOptions = { apiName?: string; header?: string; exposeInSidebar?: boolean; }; export const renderMethod = ( method: MethodDefinitionData | PropData, { apiName, exposeInSidebar = true }: RenderMethodOptions = {} ): JSX.Element[] => { const signatures = method.signatures || (method as PropData)?.type?.declaration?.signatures || []; const HeaderComponent = exposeInSidebar ? H3Code : H4Code; return signatures.map( ({ name, parameters, comment, type }: MethodSignatureData | TypeSignaturesData) => (
{apiName && `${apiName}.`} {`${method.name || name}(${parameters ? listParams(parameters) : ''})`} {parameters && renderParams(parameters)} {resolveTypeName(type) !== 'undefined' && ( <>

Returns

  • {resolveTypeName(type)}
{comment?.returns && ( {comment.returns} )} )}
) ); }; const APISectionMethods = ({ data, apiName, header = 'Methods' }: APISectionMethodsProps) => data?.length ? ( <>

{header}

{data.map((method: MethodDefinitionData | PropData) => renderMethod(method, { apiName, header }) )} ) : null; const returnIconStyles = css({ transform: 'rotate(180deg)', marginRight: spacing[2], verticalAlign: 'middle', }); export default APISectionMethods;