Skip to content

Commit a52285d

Browse files
committed
feat: add SwaggerIDE mount point
Refs #439
1 parent 015c16a commit a52285d

File tree

9 files changed

+41
-42
lines changed

9 files changed

+41
-42
lines changed

create-react-app

package-lock.json

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"@primer/octicons-react": "^16.2.0",
3232
"@swagger-api/apidom-ls": "^0.15.1",
3333
"axios": "^0.24.0",
34+
"deepmerge": "^4.2.2",
3435
"file-dialog": "^0.0.8",
3536
"is-json": "^2.0.1",
3637
"js-file-download": "^0.4.12",

public/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
</head>
2929
<body>
3030
<noscript>You need to enable JavaScript to run this app.</noscript>
31-
<div id="root"></div>
31+
<div id="swagger-ide"></div>
3232
<!--
3333
This HTML file is a template.
3434
If you open it directly in the browser, you will see an empty page.

src/App.jsx

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,32 @@
1-
import { PureComponent } from 'react';
1+
import React from 'react';
22
import 'swagger-ui-react/swagger-ui.css';
3+
import deepmerge from 'deepmerge';
4+
import SwaggerUI from 'swagger-ui-react';
35

4-
import ide from './components/IdePreset.jsx';
56
import './components/_all.scss';
7+
import layoutDefaultPlugin from './plugins/layout-default/index.js';
8+
import monacoPlugin from './plugins/monaco/index.js';
9+
import topbarPlugin from './plugins/topbar/index.js';
10+
import asyncApiPlugin from './plugins/asyncapi-react/index.js';
611

7-
export default class App extends PureComponent {
8-
render() {
9-
return ide;
10-
}
11-
}
12+
const SwaggerIDE = React.memo((props = {}) => {
13+
const mergedProps = deepmerge(SwaggerIDE.defaultProps, props);
14+
15+
// eslint-disable-next-line react/jsx-props-no-spreading
16+
return <SwaggerUI {...mergedProps} />;
17+
});
18+
19+
SwaggerIDE.presets = {
20+
default: () => [layoutDefaultPlugin, monacoPlugin, topbarPlugin, asyncApiPlugin],
21+
};
22+
23+
SwaggerIDE.propTypes = SwaggerUI.propTypes;
24+
25+
SwaggerIDE.defaultProps = {
26+
...SwaggerUI.defaultProps,
27+
layout: 'LayoutDefault',
28+
presets: [SwaggerIDE.presets.default],
29+
url: 'https://raw.githubusercontent.com/asyncapi/spec/v2.2.0/examples/streetlights-kafka.yml',
30+
};
31+
32+
export default SwaggerIDE;

src/components/IdePreset.jsx

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/index.jsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
3+
import ReactModal from 'react-modal';
34

45
import App from './App.jsx';
56

6-
ReactDOM.render(<App />, document.getElementById('root'));
7+
const domContainer = document.getElementById('swagger-ide');
8+
9+
if (process.env.NODE_ENV !== 'test') {
10+
ReactModal.setAppElement(domContainer);
11+
}
12+
13+
ReactDOM.render(<App />, domContainer);
714

815
// If you want to start measuring performance in your app, pass a function
916
// to log results (for example: reportWebVitals(console.log))

src/plugins/topbar/components/Topbar.jsx

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
3-
import ReactModal from 'react-modal';
43

54
import './_all.scss';
65
import EditMenuDropdownHooks from './EditMenuDropdownHooks.jsx'; // getComponent incompatible with React hooks (due to nested functions?)
76
import FileMenuDropdownHooks from './FileMenuDropdownHooks.jsx'; // getComponent incompatible with React hooks (due to nested functions?)
87

9-
// for screenreader aria-hidden
10-
if (process.env.NODE_ENV !== 'test') {
11-
ReactModal.setAppElement('#root');
12-
}
13-
148
const Topbar = (props) => {
159
const { getComponent, topbarActions, topbarSelectors } = props;
1610

src/swagger-ide.jsx

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)