api-nexus
Version:
Generation of API documentation for the GraphQl and Rest API
119 lines (113 loc) • 4.62 kB
JSX
import React from "react";
import { useDocumentContext } from "../appContext"; // Adjust the path as needed
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
import { vscDarkPlus } from "react-syntax-highlighter/dist/esm/styles/prism";
import { Card, Row, Col } from "react-bootstrap";
import parse from "html-react-parser";
import "../css/Layout.css";
const DocumentIntroduction = ({ isGraph }) => {
const { config } = useDocumentContext();
const { env: environment = "Development [Default]" } = config?.apiNexus ?? {};
const {
title = "Sample",
version = "1.1.0 [Default]",
description = 'This comprehensive reference provides detailed information on the GraphQL <i>types</i>, <a href="#group-Operations-Queries"><i>queries</i></a>, <a href="#group-Operations-Mutations"><i>mutations</i></a>, <a href="#group-Operations-Subscriptions"><i>subscriptions</i></a>, and their respective parameters for interacting with the API and understanding the corresponding API responses.<i>[Default]<i> <br /> <br /> <h4>Follow these steps to add authentication:</h4>1. Go to the <a href="#mutation-login"><code>Login API</code></a> .<br />2. Enter your credentials<code>:</code> <br /> <code>"email":"youremail@domain.com"</code>, <code>"password":"your_password"</code>.<br /> 3. Copy the <code>token</code> from the response.<br />4. Add the token in the HTTP Headers using the following format.<br /><code>{"authorization":"token"}</code>',
servers = [
{
url: "https://sample.com/api [Default]",
env: "Development",
headers: [
{
name: "Authorization [Default]",
example: "<YOUR_TOKEN_HERE> [Default]",
comment: "Use login token here for authorization [Default]",
},
{
name: "Content-Type [Default]",
example: "application/json [Default]",
comment: "Header as application/json [Default]",
},
],
},
],
} = config?.apiNexus?.[isGraph ? "graphQl" : "rest"] ?? {};
const endPoints = (servers ?? []).find((server) =>
server?.env === environment.includes("Not Specified")
? "Development"
: environment
);
const renderApiInfo = (title, items) => {
return (
<div style={{ width: "80%" }}>
<h4>{title}</h4>
<SyntaxHighlighter language="html" style={vscDarkPlus}>
{items.join("\n")}
</SyntaxHighlighter>
</div>
);
};
return (
<div className="introduction-card-container">
<Card>
<Card.Body>
<Row className="text-justify">
<Col md={6}>
<Card.Title>
<h1 style={{ textAlign: "left" }}>
<strong style={{ color: "#0066cc" }}>{title} </strong> API
References
</h1>
</Card.Title>
<div className="card-text">
<div>{parse(description)}</div>
</div>
</Col>
<Col md={6} className="mt-3">
{environment || version ? (
<div
className="gridView"
style={{
width: "80%",
}}
>
<div>
<h4>Environment</h4>
<p>
-{" "}
{environment.includes("Not Specified")
? "Development [Default]"
: environment}
</p>
</div>
<div>
<h4>Version</h4>
<p>- {version}</p>
</div>
</div>
) : null}
{endPoints &&
renderApiInfo("API Endpoints", [
`- ${endPoints?.env ?? "Development [Default]"}:\n - ${
endPoints?.url ?? "https://sample.com/api [Default]"
}`,
])}
{endPoints?.headers &&
renderApiInfo(
"Headers",
endPoints?.headers.map(
(header) =>
`# ${
header?.comment ?? "Use login token [Default]"
}\n - ${header?.name ?? "Authorization [Default]"}: ${
header?.example ?? "<YOUR_TOKEN_HERE> [Default]"
}`
)
)}
</Col>
</Row>
</Card.Body>
</Card>
</div>
);
};
export default DocumentIntroduction;