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,
10*abded2bbSBartosz Kaszubowski  listParams,
1184745a05SBartosz Kaszubowski  mdRenderers,
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>
33299f02f2SBartosz Kaszubowski          {apiName ? `${apiName}.` : ''}
34*abded2bbSBartosz Kaszubowski          {header !== 'Hooks' ? `${name}(${listParams(parameters)})` : name}
35299f02f2SBartosz Kaszubowski        </InlineCode>
36299f02f2SBartosz Kaszubowski      </H3Code>
37ffc1cfa8SBartosz Kaszubowski      <CommentTextBlock
38ffc1cfa8SBartosz Kaszubowski        comment={comment}
39ffc1cfa8SBartosz Kaszubowski        beforeContent={
40ffc1cfa8SBartosz Kaszubowski          parameters ? (
41ffc1cfa8SBartosz Kaszubowski            <>
42ffc1cfa8SBartosz Kaszubowski              <H4>Arguments</H4>
43ffc1cfa8SBartosz Kaszubowski              <UL>{parameters?.map(renderParam)}</UL>
44ffc1cfa8SBartosz Kaszubowski            </>
45ffc1cfa8SBartosz Kaszubowski          ) : undefined
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>
56299f02f2SBartosz Kaszubowski          {comment?.returns ? (
5784745a05SBartosz Kaszubowski            <ReactMarkdown renderers={mdRenderers}>{comment.returns}</ReactMarkdown>
58299f02f2SBartosz Kaszubowski          ) : null}
59299f02f2SBartosz Kaszubowski        </div>
60299f02f2SBartosz Kaszubowski      ) : null}
61299f02f2SBartosz Kaszubowski      {index + 1 !== dataLength ? <hr /> : null}
62299f02f2SBartosz Kaszubowski    </div>
63299f02f2SBartosz Kaszubowski  ));
64299f02f2SBartosz Kaszubowski
651b3dce65SBartosz Kaszubowskiconst APISectionMethods: React.FC<APISectionMethodsProps> = ({
661b3dce65SBartosz Kaszubowski  data,
671b3dce65SBartosz Kaszubowski  apiName,
681b3dce65SBartosz Kaszubowski  header = 'Methods',
691b3dce65SBartosz Kaszubowski}) =>
70299f02f2SBartosz Kaszubowski  data?.length ? (
71299f02f2SBartosz Kaszubowski    <>
721b3dce65SBartosz Kaszubowski      <H2 key="methods-header">{header}</H2>
73f128dd42SBartosz Kaszubowski      {data.map((method, index) => renderMethod(method, index, data.length, apiName, header))}
74299f02f2SBartosz Kaszubowski    </>
75299f02f2SBartosz Kaszubowski  ) : null;
76299f02f2SBartosz Kaszubowski
77299f02f2SBartosz Kaszubowskiexport default APISectionMethods;
78