@jpmorganchase/elemental 3.1.1 → 3.2.1
Sign up to get free protection for your applications and to get access to all the features.
- package/components/API/APIWithSidebarLayout.d.ts +1 -0
- package/containers/API.d.ts +1 -0
- package/hooks/oas-nav-tree/useGetOasNavTree.d.ts +1 -0
- package/hooks/oas-nav-tree/useGetOasNavTree.spec.d.ts +1 -0
- package/index.d.ts +1 -0
- package/index.esm.js +42 -6
- package/index.js +42 -5
- package/index.mjs +42 -6
- package/package.json +2 -2
- package/web-components.min.js +1 -1
@@ -12,6 +12,7 @@ declare type SidebarLayoutProps = {
|
|
12
12
|
tryItCredentialsPolicy?: 'omit' | 'include' | 'same-origin';
|
13
13
|
tryItCorsProxy?: string;
|
14
14
|
tryItOutDefaultServer?: string;
|
15
|
+
useCustomNav?: boolean;
|
15
16
|
};
|
16
17
|
export declare const APIWithSidebarLayout: React.FC<SidebarLayoutProps>;
|
17
18
|
export {};
|
package/containers/API.d.ts
CHANGED
@@ -18,6 +18,7 @@ export interface CommonAPIProps extends RoutingProps {
|
|
18
18
|
tryItCredentialsPolicy?: 'omit' | 'include' | 'same-origin';
|
19
19
|
tryItCorsProxy?: string;
|
20
20
|
tryItOutDefaultServer?: string;
|
21
|
+
useCustomNav?: boolean;
|
21
22
|
}
|
22
23
|
export declare const APIImpl: React.FC<APIProps>;
|
23
24
|
export declare const API: React.FC<APIProps>;
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const useGetOasNavTree: (apiDescriptionDocument: string | object) => any[];
|
@@ -0,0 +1 @@
|
|
1
|
+
import '@testing-library/jest-dom';
|
package/index.d.ts
CHANGED
package/index.esm.js
CHANGED
@@ -157,13 +157,20 @@ const isInternal = (node) => {
|
|
157
157
|
return !!data['x-internal'];
|
158
158
|
};
|
159
159
|
|
160
|
-
const APIWithSidebarLayout = ({ serviceNode, logo, hideTryIt, hideSchemas, hideInternal, hideExport, exportProps, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, }) => {
|
160
|
+
const APIWithSidebarLayout = ({ serviceNode, logo, hideTryIt, hideSchemas, hideInternal, hideExport, exportProps, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, useCustomNav, }) => {
|
161
161
|
const container = React.useRef(null);
|
162
|
-
const tree = React.useMemo(() =>
|
162
|
+
const tree = React.useMemo(() => {
|
163
|
+
if (!useCustomNav)
|
164
|
+
return computeAPITree(serviceNode, { hideSchemas, hideInternal });
|
165
|
+
else
|
166
|
+
return [];
|
167
|
+
}, [serviceNode, hideSchemas, hideInternal, useCustomNav]);
|
163
168
|
const location = useLocation();
|
164
169
|
const { pathname } = location;
|
165
170
|
const isRootPath = !pathname || pathname === '/';
|
166
171
|
const node = isRootPath ? serviceNode : serviceNode.children.find(child => child.uri === pathname);
|
172
|
+
React.useEffect(() => {
|
173
|
+
}, [pathname]);
|
167
174
|
const layoutOptions = React.useMemo(() => ({ hideTryIt: hideTryIt, hideExport: hideExport || (node === null || node === void 0 ? void 0 : node.type) !== NodeType.HttpService }), [hideTryIt, hideExport, node]);
|
168
175
|
if (!node) {
|
169
176
|
const firstSlug = findFirstNodeSlug(tree);
|
@@ -186,7 +193,7 @@ const APIWithSidebarLayout = ({ serviceNode, logo, hideTryIt, hideSchemas, hideI
|
|
186
193
|
React.createElement(Flex, { flexGrow: true, flexShrink: true, overflowY: "auto", direction: "col" },
|
187
194
|
React.createElement(TableOfContents, { tree: tree, activeId: pathname, Link: Link, onLinkClick: handleTocClick })),
|
188
195
|
React.createElement(PoweredByLink, { source: serviceNode.name, pathname: pathname, packageType: "elements" })));
|
189
|
-
return (React.createElement(SidebarLayout, { ref: container, sidebar: sidebar }, node && (React.createElement(ParsedDocs, { key: pathname, uri: pathname, node: node, nodeTitle: node.name, layoutOptions: layoutOptions, location: location, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer }))));
|
196
|
+
return (React.createElement(SidebarLayout, { ref: container, sidebar: sidebar, renderSideBar: !useCustomNav }, node && (React.createElement(ParsedDocs, { key: pathname, uri: pathname, node: node, nodeTitle: node.name, layoutOptions: layoutOptions, location: location, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer }))));
|
190
197
|
};
|
191
198
|
|
192
199
|
const itemMatchesHash = (hash, item) => {
|
@@ -483,7 +490,7 @@ const propsAreWithDocument = (props) => {
|
|
483
490
|
return props.hasOwnProperty('apiDescriptionDocument');
|
484
491
|
};
|
485
492
|
const APIImpl = props => {
|
486
|
-
const { layout, apiDescriptionUrl = '', logo, hideTryIt, hideSchemas, hideInternal, hideExport, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, } = props;
|
493
|
+
const { layout, apiDescriptionUrl = '', logo, hideTryIt, hideSchemas, hideInternal, hideExport, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, useCustomNav, } = props;
|
487
494
|
const apiDescriptionDocument = propsAreWithDocument(props) ? props.apiDescriptionDocument : undefined;
|
488
495
|
const { data: fetchedDocument, error } = useQuery([apiDescriptionUrl], () => fetch(apiDescriptionUrl).then(res => {
|
489
496
|
if (res.ok) {
|
@@ -510,8 +517,37 @@ const APIImpl = props => {
|
|
510
517
|
return (React.createElement(Flex, { justify: "center", alignItems: "center", w: "full", minH: "screen" },
|
511
518
|
React.createElement(NonIdealState, { title: "Failed to parse OpenAPI file", description: "Please make sure your OpenAPI file is valid and try again" })));
|
512
519
|
}
|
513
|
-
return (React.createElement(InlineRefResolverProvider, { document: parsedDocument }, layout === 'stacked' ? (React.createElement(APIWithStackedLayout, { serviceNode: serviceNode, hideTryIt: hideTryIt, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer })) : (React.createElement(APIWithSidebarLayout, { logo: logo, serviceNode: serviceNode, hideTryIt: hideTryIt, hideSchemas: hideSchemas, hideInternal: hideInternal, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer }))));
|
520
|
+
return (React.createElement(InlineRefResolverProvider, { document: parsedDocument }, layout === 'stacked' ? (React.createElement(APIWithStackedLayout, { serviceNode: serviceNode, hideTryIt: hideTryIt, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer })) : (React.createElement(APIWithSidebarLayout, { logo: logo, serviceNode: serviceNode, hideTryIt: hideTryIt, hideSchemas: hideSchemas, hideInternal: hideInternal, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer, useCustomNav: useCustomNav }))));
|
514
521
|
};
|
515
522
|
const API = flow(withRouter, withStyles, withPersistenceBoundary, withMosaicProvider, withQueryClientProvider)(APIImpl);
|
516
523
|
|
517
|
-
|
524
|
+
const useGetOasNavTree = (apiDescriptionDocument) => {
|
525
|
+
const parsedDocument = useParsedValue(apiDescriptionDocument);
|
526
|
+
const bundledDocument = useBundleRefsIntoDocument(parsedDocument);
|
527
|
+
if (!bundledDocument)
|
528
|
+
return [];
|
529
|
+
const groupSchemas = (tree) => {
|
530
|
+
const targetTitle = 'Schemas';
|
531
|
+
const newTree = tree.reduce((accumulator, currentObject) => {
|
532
|
+
var _a;
|
533
|
+
if (currentObject.title === targetTitle) {
|
534
|
+
accumulator.matchedObject = currentObject;
|
535
|
+
}
|
536
|
+
else if ((_a = currentObject.id) === null || _a === void 0 ? void 0 : _a.includes(targetTitle.toLowerCase())) {
|
537
|
+
accumulator.matchedObject.items = accumulator.matchedObject.items || [];
|
538
|
+
accumulator.matchedObject.items.push(currentObject);
|
539
|
+
}
|
540
|
+
else {
|
541
|
+
accumulator.others = accumulator.others || [];
|
542
|
+
accumulator.others.push(currentObject);
|
543
|
+
}
|
544
|
+
return accumulator;
|
545
|
+
}, {});
|
546
|
+
const navTree = [...newTree.others, newTree.matchedObject];
|
547
|
+
return navTree;
|
548
|
+
};
|
549
|
+
const apiTree = computeAPITree(transformOasToServiceNode(bundledDocument));
|
550
|
+
return groupSchemas(apiTree);
|
551
|
+
};
|
552
|
+
|
553
|
+
export { API, useGetOasNavTree };
|
package/index.js
CHANGED
@@ -190,13 +190,20 @@ const isInternal = (node) => {
|
|
190
190
|
return !!data['x-internal'];
|
191
191
|
};
|
192
192
|
|
193
|
-
const APIWithSidebarLayout = ({ serviceNode, logo, hideTryIt, hideSchemas, hideInternal, hideExport, exportProps, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, }) => {
|
193
|
+
const APIWithSidebarLayout = ({ serviceNode, logo, hideTryIt, hideSchemas, hideInternal, hideExport, exportProps, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, useCustomNav, }) => {
|
194
194
|
const container = React__namespace.useRef(null);
|
195
|
-
const tree = React__namespace.useMemo(() =>
|
195
|
+
const tree = React__namespace.useMemo(() => {
|
196
|
+
if (!useCustomNav)
|
197
|
+
return computeAPITree(serviceNode, { hideSchemas, hideInternal });
|
198
|
+
else
|
199
|
+
return [];
|
200
|
+
}, [serviceNode, hideSchemas, hideInternal, useCustomNav]);
|
196
201
|
const location = reactRouterDom.useLocation();
|
197
202
|
const { pathname } = location;
|
198
203
|
const isRootPath = !pathname || pathname === '/';
|
199
204
|
const node = isRootPath ? serviceNode : serviceNode.children.find(child => child.uri === pathname);
|
205
|
+
React__namespace.useEffect(() => {
|
206
|
+
}, [pathname]);
|
200
207
|
const layoutOptions = React__namespace.useMemo(() => ({ hideTryIt: hideTryIt, hideExport: hideExport || (node === null || node === void 0 ? void 0 : node.type) !== types.NodeType.HttpService }), [hideTryIt, hideExport, node]);
|
201
208
|
if (!node) {
|
202
209
|
const firstSlug = findFirstNodeSlug(tree);
|
@@ -219,7 +226,7 @@ const APIWithSidebarLayout = ({ serviceNode, logo, hideTryIt, hideSchemas, hideI
|
|
219
226
|
React__namespace.createElement(mosaic.Flex, { flexGrow: true, flexShrink: true, overflowY: "auto", direction: "col" },
|
220
227
|
React__namespace.createElement(elementalCore.TableOfContents, { tree: tree, activeId: pathname, Link: reactRouterDom.Link, onLinkClick: handleTocClick })),
|
221
228
|
React__namespace.createElement(elementalCore.PoweredByLink, { source: serviceNode.name, pathname: pathname, packageType: "elements" })));
|
222
|
-
return (React__namespace.createElement(elementalCore.SidebarLayout, { ref: container, sidebar: sidebar }, node && (React__namespace.createElement(elementalCore.ParsedDocs, { key: pathname, uri: pathname, node: node, nodeTitle: node.name, layoutOptions: layoutOptions, location: location, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer }))));
|
229
|
+
return (React__namespace.createElement(elementalCore.SidebarLayout, { ref: container, sidebar: sidebar, renderSideBar: !useCustomNav }, node && (React__namespace.createElement(elementalCore.ParsedDocs, { key: pathname, uri: pathname, node: node, nodeTitle: node.name, layoutOptions: layoutOptions, location: location, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer }))));
|
223
230
|
};
|
224
231
|
|
225
232
|
const itemMatchesHash = (hash, item) => {
|
@@ -516,7 +523,7 @@ const propsAreWithDocument = (props) => {
|
|
516
523
|
return props.hasOwnProperty('apiDescriptionDocument');
|
517
524
|
};
|
518
525
|
const APIImpl = props => {
|
519
|
-
const { layout, apiDescriptionUrl = '', logo, hideTryIt, hideSchemas, hideInternal, hideExport, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, } = props;
|
526
|
+
const { layout, apiDescriptionUrl = '', logo, hideTryIt, hideSchemas, hideInternal, hideExport, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, useCustomNav, } = props;
|
520
527
|
const apiDescriptionDocument = propsAreWithDocument(props) ? props.apiDescriptionDocument : undefined;
|
521
528
|
const { data: fetchedDocument, error } = reactQuery.useQuery([apiDescriptionUrl], () => fetch(apiDescriptionUrl).then(res => {
|
522
529
|
if (res.ok) {
|
@@ -543,8 +550,38 @@ const APIImpl = props => {
|
|
543
550
|
return (React__namespace.createElement(mosaic.Flex, { justify: "center", alignItems: "center", w: "full", minH: "screen" },
|
544
551
|
React__namespace.createElement(elementalCore.NonIdealState, { title: "Failed to parse OpenAPI file", description: "Please make sure your OpenAPI file is valid and try again" })));
|
545
552
|
}
|
546
|
-
return (React__namespace.createElement(elementalCore.InlineRefResolverProvider, { document: parsedDocument }, layout === 'stacked' ? (React__namespace.createElement(APIWithStackedLayout, { serviceNode: serviceNode, hideTryIt: hideTryIt, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer })) : (React__namespace.createElement(APIWithSidebarLayout, { logo: logo, serviceNode: serviceNode, hideTryIt: hideTryIt, hideSchemas: hideSchemas, hideInternal: hideInternal, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer }))));
|
553
|
+
return (React__namespace.createElement(elementalCore.InlineRefResolverProvider, { document: parsedDocument }, layout === 'stacked' ? (React__namespace.createElement(APIWithStackedLayout, { serviceNode: serviceNode, hideTryIt: hideTryIt, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer })) : (React__namespace.createElement(APIWithSidebarLayout, { logo: logo, serviceNode: serviceNode, hideTryIt: hideTryIt, hideSchemas: hideSchemas, hideInternal: hideInternal, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer, useCustomNav: useCustomNav }))));
|
547
554
|
};
|
548
555
|
const API = flow__default["default"](elementalCore.withRouter, elementalCore.withStyles, elementalCore.withPersistenceBoundary, elementalCore.withMosaicProvider, elementalCore.withQueryClientProvider)(APIImpl);
|
549
556
|
|
557
|
+
const useGetOasNavTree = (apiDescriptionDocument) => {
|
558
|
+
const parsedDocument = elementalCore.useParsedValue(apiDescriptionDocument);
|
559
|
+
const bundledDocument = elementalCore.useBundleRefsIntoDocument(parsedDocument);
|
560
|
+
if (!bundledDocument)
|
561
|
+
return [];
|
562
|
+
const groupSchemas = (tree) => {
|
563
|
+
const targetTitle = 'Schemas';
|
564
|
+
const newTree = tree.reduce((accumulator, currentObject) => {
|
565
|
+
var _a;
|
566
|
+
if (currentObject.title === targetTitle) {
|
567
|
+
accumulator.matchedObject = currentObject;
|
568
|
+
}
|
569
|
+
else if ((_a = currentObject.id) === null || _a === void 0 ? void 0 : _a.includes(targetTitle.toLowerCase())) {
|
570
|
+
accumulator.matchedObject.items = accumulator.matchedObject.items || [];
|
571
|
+
accumulator.matchedObject.items.push(currentObject);
|
572
|
+
}
|
573
|
+
else {
|
574
|
+
accumulator.others = accumulator.others || [];
|
575
|
+
accumulator.others.push(currentObject);
|
576
|
+
}
|
577
|
+
return accumulator;
|
578
|
+
}, {});
|
579
|
+
const navTree = [...newTree.others, newTree.matchedObject];
|
580
|
+
return navTree;
|
581
|
+
};
|
582
|
+
const apiTree = computeAPITree(transformOasToServiceNode(bundledDocument));
|
583
|
+
return groupSchemas(apiTree);
|
584
|
+
};
|
585
|
+
|
550
586
|
exports.API = API;
|
587
|
+
exports.useGetOasNavTree = useGetOasNavTree;
|
package/index.mjs
CHANGED
@@ -157,13 +157,20 @@ const isInternal = (node) => {
|
|
157
157
|
return !!data['x-internal'];
|
158
158
|
};
|
159
159
|
|
160
|
-
const APIWithSidebarLayout = ({ serviceNode, logo, hideTryIt, hideSchemas, hideInternal, hideExport, exportProps, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, }) => {
|
160
|
+
const APIWithSidebarLayout = ({ serviceNode, logo, hideTryIt, hideSchemas, hideInternal, hideExport, exportProps, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, useCustomNav, }) => {
|
161
161
|
const container = React.useRef(null);
|
162
|
-
const tree = React.useMemo(() =>
|
162
|
+
const tree = React.useMemo(() => {
|
163
|
+
if (!useCustomNav)
|
164
|
+
return computeAPITree(serviceNode, { hideSchemas, hideInternal });
|
165
|
+
else
|
166
|
+
return [];
|
167
|
+
}, [serviceNode, hideSchemas, hideInternal, useCustomNav]);
|
163
168
|
const location = useLocation();
|
164
169
|
const { pathname } = location;
|
165
170
|
const isRootPath = !pathname || pathname === '/';
|
166
171
|
const node = isRootPath ? serviceNode : serviceNode.children.find(child => child.uri === pathname);
|
172
|
+
React.useEffect(() => {
|
173
|
+
}, [pathname]);
|
167
174
|
const layoutOptions = React.useMemo(() => ({ hideTryIt: hideTryIt, hideExport: hideExport || (node === null || node === void 0 ? void 0 : node.type) !== NodeType.HttpService }), [hideTryIt, hideExport, node]);
|
168
175
|
if (!node) {
|
169
176
|
const firstSlug = findFirstNodeSlug(tree);
|
@@ -186,7 +193,7 @@ const APIWithSidebarLayout = ({ serviceNode, logo, hideTryIt, hideSchemas, hideI
|
|
186
193
|
React.createElement(Flex, { flexGrow: true, flexShrink: true, overflowY: "auto", direction: "col" },
|
187
194
|
React.createElement(TableOfContents, { tree: tree, activeId: pathname, Link: Link, onLinkClick: handleTocClick })),
|
188
195
|
React.createElement(PoweredByLink, { source: serviceNode.name, pathname: pathname, packageType: "elements" })));
|
189
|
-
return (React.createElement(SidebarLayout, { ref: container, sidebar: sidebar }, node && (React.createElement(ParsedDocs, { key: pathname, uri: pathname, node: node, nodeTitle: node.name, layoutOptions: layoutOptions, location: location, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer }))));
|
196
|
+
return (React.createElement(SidebarLayout, { ref: container, sidebar: sidebar, renderSideBar: !useCustomNav }, node && (React.createElement(ParsedDocs, { key: pathname, uri: pathname, node: node, nodeTitle: node.name, layoutOptions: layoutOptions, location: location, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer }))));
|
190
197
|
};
|
191
198
|
|
192
199
|
const itemMatchesHash = (hash, item) => {
|
@@ -483,7 +490,7 @@ const propsAreWithDocument = (props) => {
|
|
483
490
|
return props.hasOwnProperty('apiDescriptionDocument');
|
484
491
|
};
|
485
492
|
const APIImpl = props => {
|
486
|
-
const { layout, apiDescriptionUrl = '', logo, hideTryIt, hideSchemas, hideInternal, hideExport, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, } = props;
|
493
|
+
const { layout, apiDescriptionUrl = '', logo, hideTryIt, hideSchemas, hideInternal, hideExport, tryItCredentialsPolicy, tryItCorsProxy, tryItOutDefaultServer, useCustomNav, } = props;
|
487
494
|
const apiDescriptionDocument = propsAreWithDocument(props) ? props.apiDescriptionDocument : undefined;
|
488
495
|
const { data: fetchedDocument, error } = useQuery([apiDescriptionUrl], () => fetch(apiDescriptionUrl).then(res => {
|
489
496
|
if (res.ok) {
|
@@ -510,8 +517,37 @@ const APIImpl = props => {
|
|
510
517
|
return (React.createElement(Flex, { justify: "center", alignItems: "center", w: "full", minH: "screen" },
|
511
518
|
React.createElement(NonIdealState, { title: "Failed to parse OpenAPI file", description: "Please make sure your OpenAPI file is valid and try again" })));
|
512
519
|
}
|
513
|
-
return (React.createElement(InlineRefResolverProvider, { document: parsedDocument }, layout === 'stacked' ? (React.createElement(APIWithStackedLayout, { serviceNode: serviceNode, hideTryIt: hideTryIt, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer })) : (React.createElement(APIWithSidebarLayout, { logo: logo, serviceNode: serviceNode, hideTryIt: hideTryIt, hideSchemas: hideSchemas, hideInternal: hideInternal, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer }))));
|
520
|
+
return (React.createElement(InlineRefResolverProvider, { document: parsedDocument }, layout === 'stacked' ? (React.createElement(APIWithStackedLayout, { serviceNode: serviceNode, hideTryIt: hideTryIt, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer })) : (React.createElement(APIWithSidebarLayout, { logo: logo, serviceNode: serviceNode, hideTryIt: hideTryIt, hideSchemas: hideSchemas, hideInternal: hideInternal, hideExport: hideExport, exportProps: exportProps, tryItCredentialsPolicy: tryItCredentialsPolicy, tryItCorsProxy: tryItCorsProxy, tryItOutDefaultServer: tryItOutDefaultServer, useCustomNav: useCustomNav }))));
|
514
521
|
};
|
515
522
|
const API = flow(withRouter, withStyles, withPersistenceBoundary, withMosaicProvider, withQueryClientProvider)(APIImpl);
|
516
523
|
|
517
|
-
|
524
|
+
const useGetOasNavTree = (apiDescriptionDocument) => {
|
525
|
+
const parsedDocument = useParsedValue(apiDescriptionDocument);
|
526
|
+
const bundledDocument = useBundleRefsIntoDocument(parsedDocument);
|
527
|
+
if (!bundledDocument)
|
528
|
+
return [];
|
529
|
+
const groupSchemas = (tree) => {
|
530
|
+
const targetTitle = 'Schemas';
|
531
|
+
const newTree = tree.reduce((accumulator, currentObject) => {
|
532
|
+
var _a;
|
533
|
+
if (currentObject.title === targetTitle) {
|
534
|
+
accumulator.matchedObject = currentObject;
|
535
|
+
}
|
536
|
+
else if ((_a = currentObject.id) === null || _a === void 0 ? void 0 : _a.includes(targetTitle.toLowerCase())) {
|
537
|
+
accumulator.matchedObject.items = accumulator.matchedObject.items || [];
|
538
|
+
accumulator.matchedObject.items.push(currentObject);
|
539
|
+
}
|
540
|
+
else {
|
541
|
+
accumulator.others = accumulator.others || [];
|
542
|
+
accumulator.others.push(currentObject);
|
543
|
+
}
|
544
|
+
return accumulator;
|
545
|
+
}, {});
|
546
|
+
const navTree = [...newTree.others, newTree.matchedObject];
|
547
|
+
return navTree;
|
548
|
+
};
|
549
|
+
const apiTree = computeAPITree(transformOasToServiceNode(bundledDocument));
|
550
|
+
return groupSchemas(apiTree);
|
551
|
+
};
|
552
|
+
|
553
|
+
export { API, useGetOasNavTree };
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@jpmorganchase/elemental",
|
3
|
-
"version": "3.
|
3
|
+
"version": "3.2.1",
|
4
4
|
"description": "UI components for composing beautiful developer documentation.",
|
5
5
|
"keywords": [],
|
6
6
|
"main": "./index.js",
|
@@ -26,7 +26,7 @@
|
|
26
26
|
"react-dom": ">=16.8"
|
27
27
|
},
|
28
28
|
"dependencies": {
|
29
|
-
"@jpmorganchase/elemental-core": "^1.
|
29
|
+
"@jpmorganchase/elemental-core": "^1.3.1",
|
30
30
|
"@stoplight/http-spec": "^6.0.0",
|
31
31
|
"@stoplight/json": "^3.18.1",
|
32
32
|
"@stoplight/mosaic": "^1.44.3",
|