@jpmorganchase/elemental 3.1.1 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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",
|