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,
1084745a05SBartosz Kaszubowski  mdRenderers,
11299f02f2SBartosz Kaszubowski  renderParam,
12299f02f2SBartosz Kaszubowski  resolveTypeName,
13299f02f2SBartosz Kaszubowski} from '~/components/plugins/api/APISectionUtils';
14299f02f2SBartosz Kaszubowski
15299f02f2SBartosz Kaszubowskiexport type APISectionMethodsProps = {
16299f02f2SBartosz Kaszubowski  data: MethodDefinitionData[];
17299f02f2SBartosz Kaszubowski  apiName?: string;
181b3dce65SBartosz Kaszubowski  header?: string;
19299f02f2SBartosz Kaszubowski};
20299f02f2SBartosz Kaszubowski
21299f02f2SBartosz Kaszubowskiconst renderMethod = (
22299f02f2SBartosz Kaszubowski  { signatures }: MethodDefinitionData,
23299f02f2SBartosz Kaszubowski  index: number,
24299f02f2SBartosz Kaszubowski  dataLength?: number,
25299f02f2SBartosz Kaszubowski  apiName?: string
26299f02f2SBartosz Kaszubowski): JSX.Element[] =>
27299f02f2SBartosz Kaszubowski  signatures.map(({ name, parameters, comment, type }: MethodSignatureData) => (
28299f02f2SBartosz Kaszubowski    <div key={`method-signature-${name}-${parameters?.length || 0}`}>
29299f02f2SBartosz Kaszubowski      <H3Code>
30299f02f2SBartosz Kaszubowski        <InlineCode>
31299f02f2SBartosz Kaszubowski          {apiName ? `${apiName}.` : ''}
32299f02f2SBartosz Kaszubowski          {name}({parameters?.map(param => param.name).join(', ')})
33299f02f2SBartosz Kaszubowski        </InlineCode>
34299f02f2SBartosz Kaszubowski      </H3Code>
35*ffc1cfa8SBartosz Kaszubowski      <CommentTextBlock
36*ffc1cfa8SBartosz Kaszubowski        comment={comment}
37*ffc1cfa8SBartosz Kaszubowski        beforeContent={
38*ffc1cfa8SBartosz Kaszubowski          parameters ? (
39*ffc1cfa8SBartosz Kaszubowski            <>
40*ffc1cfa8SBartosz Kaszubowski              <H4>Arguments</H4>
41*ffc1cfa8SBartosz Kaszubowski              <UL>{parameters?.map(renderParam)}</UL>
42*ffc1cfa8SBartosz Kaszubowski            </>
43*ffc1cfa8SBartosz Kaszubowski          ) : undefined
44*ffc1cfa8SBartosz Kaszubowski        }
45*ffc1cfa8SBartosz Kaszubowski      />
46299f02f2SBartosz Kaszubowski      {resolveTypeName(type) !== 'undefined' ? (
47299f02f2SBartosz Kaszubowski        <div>
48299f02f2SBartosz Kaszubowski          <H4>Returns</H4>
49299f02f2SBartosz Kaszubowski          <UL>
50299f02f2SBartosz Kaszubowski            <LI returnType>
51299f02f2SBartosz Kaszubowski              <InlineCode>{resolveTypeName(type)}</InlineCode>
52299f02f2SBartosz Kaszubowski            </LI>
53299f02f2SBartosz Kaszubowski          </UL>
54299f02f2SBartosz Kaszubowski          {comment?.returns ? (
5584745a05SBartosz Kaszubowski            <ReactMarkdown renderers={mdRenderers}>{comment.returns}</ReactMarkdown>
56299f02f2SBartosz Kaszubowski          ) : null}
57299f02f2SBartosz Kaszubowski        </div>
58299f02f2SBartosz Kaszubowski      ) : null}
59299f02f2SBartosz Kaszubowski      {index + 1 !== dataLength ? <hr /> : null}
60299f02f2SBartosz Kaszubowski    </div>
61299f02f2SBartosz Kaszubowski  ));
62299f02f2SBartosz Kaszubowski
631b3dce65SBartosz Kaszubowskiconst APISectionMethods: React.FC<APISectionMethodsProps> = ({
641b3dce65SBartosz Kaszubowski  data,
651b3dce65SBartosz Kaszubowski  apiName,
661b3dce65SBartosz Kaszubowski  header = 'Methods',
671b3dce65SBartosz Kaszubowski}) =>
68299f02f2SBartosz Kaszubowski  data?.length ? (
69299f02f2SBartosz Kaszubowski    <>
701b3dce65SBartosz Kaszubowski      <H2 key="methods-header">{header}</H2>
71299f02f2SBartosz Kaszubowski      {data.map((method, index) => renderMethod(method, index, data.length, apiName))}
72299f02f2SBartosz Kaszubowski    </>
73299f02f2SBartosz Kaszubowski  ) : null;
74299f02f2SBartosz Kaszubowski
75299f02f2SBartosz Kaszubowskiexport default APISectionMethods;
76