UNPKG

api-nexus

Version:

Generation of API documentation for the GraphQl and Rest API

83 lines (76 loc) 2.55 kB
import React, { useState, useEffect } from "react"; import { ListGroup } from "react-bootstrap"; import DocumentApiNames from "./DocumentApiNames"; import { memo } from "react"; const DocumentApiGroups = ({ listGroups, isGraph, handleSourceType, handleListItemClick, }) => { const [expandedItem, setExpandedItem] = useState( Object.keys(listGroups || {})?.[0] || null ); const lowerCamelToTitleCase = (lowerCamel) => { return lowerCamel .replace(/([a-z])([A-Z])/g, "$1 $2") .replace(/^./, (firstLetter) => firstLetter.toUpperCase()) .trim(); }; useEffect(() => { const fetchData = async (expandedItem) => { handleSourceType(expandedItem, listGroups[expandedItem]); }; fetchData(expandedItem); }, [listGroups, handleSourceType, expandedItem]); if (!listGroups || Object.keys(listGroups || {})?.length === 0) { // Handle the case when listGroups is missing or empty return ( <ListGroup className="main-option-list" style={{ width: "100%", color: "red" }} > <ListGroup.Item style={{ padding: "5px" }}> ► No {!isGraph ? "REST" : "GraphQL"} modules available. </ListGroup.Item> </ListGroup> ); } // listGroups like Query,Mutation,Subscription return ( <> <ListGroup className="main-option-list"> {Object.keys(listGroups || {}).map((subHead, index) => { return ( <div key={`group_${index}`}> <ListGroup.Item style={{ ...(expandedItem === subHead ? { backgroundColor: "#e9e9f2", padding: "10px", cursor: "pointer", } : { padding: "10px", cursor: "pointer" }), }} onClick={() => setExpandedItem(subHead)} > {expandedItem === subHead ? "▼ " : "► "} {lowerCamelToTitleCase(subHead)} {subHead === expandedItem && listGroups?.[subHead] ? ( <DocumentApiNames apiNames={listGroups?.[subHead]} isTrue={expandedItem === subHead} expandedItem={expandedItem} onButtonClick={handleListItemClick} /> ) : null} </ListGroup.Item> </div> ); })} </ListGroup> </> ); }; export default memo(DocumentApiGroups);