1*299f02f2SBartosz Kaszubowskiimport React from 'react';
2*299f02f2SBartosz Kaszubowskiimport ReactMarkdown from 'react-markdown';
3*299f02f2SBartosz Kaszubowski
4*299f02f2SBartosz Kaszubowskiimport { InlineCode } from '~/components/base/code';
5*299f02f2SBartosz Kaszubowskiimport { LI, UL } from '~/components/base/list';
6*299f02f2SBartosz Kaszubowskiimport { H2, H3Code, H4 } from '~/components/plugins/Headings';
7*299f02f2SBartosz Kaszubowskiimport { MethodDefinitionData, MethodSignatureData } from '~/components/plugins/api/APIDataTypes';
8*299f02f2SBartosz Kaszubowskiimport {
9*299f02f2SBartosz Kaszubowski  CommentTextBlock,
10*299f02f2SBartosz Kaszubowski  renderers,
11*299f02f2SBartosz Kaszubowski  renderParam,
12*299f02f2SBartosz Kaszubowski  resolveTypeName,
13*299f02f2SBartosz Kaszubowski} from '~/components/plugins/api/APISectionUtils';
14*299f02f2SBartosz Kaszubowski
15*299f02f2SBartosz Kaszubowskiexport type APISectionMethodsProps = {
16*299f02f2SBartosz Kaszubowski  data: MethodDefinitionData[];
17*299f02f2SBartosz Kaszubowski  apiName?: string;
18*299f02f2SBartosz Kaszubowski};
19*299f02f2SBartosz Kaszubowski
20*299f02f2SBartosz Kaszubowskiconst renderMethod = (
21*299f02f2SBartosz Kaszubowski  { signatures }: MethodDefinitionData,
22*299f02f2SBartosz Kaszubowski  index: number,
23*299f02f2SBartosz Kaszubowski  dataLength?: number,
24*299f02f2SBartosz Kaszubowski  apiName?: string
25*299f02f2SBartosz Kaszubowski): JSX.Element[] =>
26*299f02f2SBartosz Kaszubowski  signatures.map(({ name, parameters, comment, type }: MethodSignatureData) => (
27*299f02f2SBartosz Kaszubowski    <div key={`method-signature-${name}-${parameters?.length || 0}`}>
28*299f02f2SBartosz Kaszubowski      <H3Code>
29*299f02f2SBartosz Kaszubowski        <InlineCode>
30*299f02f2SBartosz Kaszubowski          {apiName ? `${apiName}.` : ''}
31*299f02f2SBartosz Kaszubowski          {name}({parameters?.map(param => param.name).join(', ')})
32*299f02f2SBartosz Kaszubowski        </InlineCode>
33*299f02f2SBartosz Kaszubowski      </H3Code>
34*299f02f2SBartosz Kaszubowski      {parameters ? <H4>Arguments</H4> : null}
35*299f02f2SBartosz Kaszubowski      {parameters ? <UL>{parameters?.map(renderParam)}</UL> : null}
36*299f02f2SBartosz Kaszubowski      <CommentTextBlock comment={comment} renderers={renderers} />
37*299f02f2SBartosz Kaszubowski      {resolveTypeName(type) !== 'undefined' ? (
38*299f02f2SBartosz Kaszubowski        <div>
39*299f02f2SBartosz Kaszubowski          <H4>Returns</H4>
40*299f02f2SBartosz Kaszubowski          <UL>
41*299f02f2SBartosz Kaszubowski            <LI returnType>
42*299f02f2SBartosz Kaszubowski              <InlineCode>{resolveTypeName(type)}</InlineCode>
43*299f02f2SBartosz Kaszubowski            </LI>
44*299f02f2SBartosz Kaszubowski          </UL>
45*299f02f2SBartosz Kaszubowski          {comment?.returns ? (
46*299f02f2SBartosz Kaszubowski            <ReactMarkdown renderers={renderers}>{comment.returns}</ReactMarkdown>
47*299f02f2SBartosz Kaszubowski          ) : null}
48*299f02f2SBartosz Kaszubowski        </div>
49*299f02f2SBartosz Kaszubowski      ) : null}
50*299f02f2SBartosz Kaszubowski      {index + 1 !== dataLength ? <hr /> : null}
51*299f02f2SBartosz Kaszubowski    </div>
52*299f02f2SBartosz Kaszubowski  ));
53*299f02f2SBartosz Kaszubowski
54*299f02f2SBartosz Kaszubowskiconst APISectionMethods: React.FC<APISectionMethodsProps> = ({ data, apiName }) =>
55*299f02f2SBartosz Kaszubowski  data?.length ? (
56*299f02f2SBartosz Kaszubowski    <>
57*299f02f2SBartosz Kaszubowski      <H2 key="methods-header">Methods</H2>
58*299f02f2SBartosz Kaszubowski      {data.map((method, index) => renderMethod(method, index, data.length, apiName))}
59*299f02f2SBartosz Kaszubowski    </>
60*299f02f2SBartosz Kaszubowski  ) : null;
61*299f02f2SBartosz Kaszubowski
62*299f02f2SBartosz Kaszubowskiexport default APISectionMethods;
63