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';
7*d8d79196SBartosz Kaszubowskiimport {
8*d8d79196SBartosz Kaszubowski  MethodDefinitionData,
9*d8d79196SBartosz Kaszubowski  MethodSignatureData,
10*d8d79196SBartosz Kaszubowski  PropData,
11*d8d79196SBartosz Kaszubowski} from '~/components/plugins/api/APIDataTypes';
12299f02f2SBartosz Kaszubowskiimport {
13299f02f2SBartosz Kaszubowski  CommentTextBlock,
14abded2bbSBartosz Kaszubowski  listParams,
15dc379e46SBartosz Kaszubowski  mdComponents,
16299f02f2SBartosz Kaszubowski  renderParam,
17299f02f2SBartosz Kaszubowski  resolveTypeName,
18299f02f2SBartosz Kaszubowski} from '~/components/plugins/api/APISectionUtils';
19299f02f2SBartosz Kaszubowski
20299f02f2SBartosz Kaszubowskiexport type APISectionMethodsProps = {
21299f02f2SBartosz Kaszubowski  data: MethodDefinitionData[];
22299f02f2SBartosz Kaszubowski  apiName?: string;
231b3dce65SBartosz Kaszubowski  header?: string;
24299f02f2SBartosz Kaszubowski};
25299f02f2SBartosz Kaszubowski
26*d8d79196SBartosz Kaszubowskiexport const renderMethod = (
27*d8d79196SBartosz Kaszubowski  { signatures = [] }: MethodDefinitionData | PropData,
28*d8d79196SBartosz Kaszubowski  index?: number,
29299f02f2SBartosz Kaszubowski  dataLength?: number,
30f128dd42SBartosz Kaszubowski  apiName?: string,
31f128dd42SBartosz Kaszubowski  header?: string
32299f02f2SBartosz Kaszubowski): JSX.Element[] =>
33299f02f2SBartosz Kaszubowski  signatures.map(({ name, parameters, comment, type }: MethodSignatureData) => (
34299f02f2SBartosz Kaszubowski    <div key={`method-signature-${name}-${parameters?.length || 0}`}>
35299f02f2SBartosz Kaszubowski      <H3Code>
36299f02f2SBartosz Kaszubowski        <InlineCode>
37c8c9d6e8SBartosz Kaszubowski          {apiName && `${apiName}.`}
38abded2bbSBartosz Kaszubowski          {header !== 'Hooks' ? `${name}(${listParams(parameters)})` : name}
39299f02f2SBartosz Kaszubowski        </InlineCode>
40299f02f2SBartosz Kaszubowski      </H3Code>
41ffc1cfa8SBartosz Kaszubowski      <CommentTextBlock
42ffc1cfa8SBartosz Kaszubowski        comment={comment}
43ffc1cfa8SBartosz Kaszubowski        beforeContent={
44c8c9d6e8SBartosz Kaszubowski          parameters && (
45ffc1cfa8SBartosz Kaszubowski            <>
46ffc1cfa8SBartosz Kaszubowski              <H4>Arguments</H4>
47ffc1cfa8SBartosz Kaszubowski              <UL>{parameters?.map(renderParam)}</UL>
48ffc1cfa8SBartosz Kaszubowski            </>
49c8c9d6e8SBartosz Kaszubowski          )
50ffc1cfa8SBartosz Kaszubowski        }
51ffc1cfa8SBartosz Kaszubowski      />
52299f02f2SBartosz Kaszubowski      {resolveTypeName(type) !== 'undefined' ? (
53299f02f2SBartosz Kaszubowski        <div>
54299f02f2SBartosz Kaszubowski          <H4>Returns</H4>
55299f02f2SBartosz Kaszubowski          <UL>
56299f02f2SBartosz Kaszubowski            <LI returnType>
57299f02f2SBartosz Kaszubowski              <InlineCode>{resolveTypeName(type)}</InlineCode>
58299f02f2SBartosz Kaszubowski            </LI>
59299f02f2SBartosz Kaszubowski          </UL>
60c8c9d6e8SBartosz Kaszubowski          {comment?.returns && (
61dc379e46SBartosz Kaszubowski            <ReactMarkdown components={mdComponents}>{comment.returns}</ReactMarkdown>
62c8c9d6e8SBartosz Kaszubowski          )}
63299f02f2SBartosz Kaszubowski        </div>
64299f02f2SBartosz Kaszubowski      ) : null}
65*d8d79196SBartosz Kaszubowski      {index !== undefined ? index + 1 !== dataLength && <hr /> : null}
66299f02f2SBartosz Kaszubowski    </div>
67299f02f2SBartosz Kaszubowski  ));
68299f02f2SBartosz Kaszubowski
69558a63feSBartosz Kaszubowskiconst APISectionMethods = ({ data, apiName, header = 'Methods' }: APISectionMethodsProps) =>
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