Skip to content

Commit 7f4aa5c

Browse files
authored
feat(topbar): allow to configure components present in Topbar (#3623)
Refs #3556
1 parent 82cc130 commit 7f4aa5c

File tree

10 files changed

+81
-15
lines changed

10 files changed

+81
-15
lines changed

dev-helpers/index.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@
5454
presets: [
5555
SwaggerEditorStandalonePreset
5656
],
57+
plugins: [
58+
SwaggerEditorStandalonePreset.plugins.TopbarNewEditorButton,
59+
],
5760
queryConfigEnabled: true,
5861
})
5962

src/standalone/index.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import TopbarPlugin from "./topbar"
22
import TopbarInsertPlugin from "./topbar-insert"
33
import TopbarMenuFileImportFile from "./topbar-menu-file-import_file"
44
import TopbarMenuEditConvert from "./topbar-menu-edit-convert"
5+
import TopbarNewEditorButton from "./topbar-new-editor-button"
56
import StandaloneLayout from "./standalone-layout"
67

78
let StandaloneLayoutPlugin = function() {
@@ -12,7 +13,7 @@ let StandaloneLayoutPlugin = function() {
1213
}
1314
}
1415

15-
export default function () {
16+
function standalonePreset () {
1617
return [
1718
TopbarPlugin,
1819
TopbarInsertPlugin,
@@ -21,3 +22,14 @@ export default function () {
2122
StandaloneLayoutPlugin
2223
]
2324
}
25+
26+
standalonePreset.plugins = {
27+
TopbarPlugin,
28+
TopbarInsertPlugin,
29+
TopbarMenuFileImportFile,
30+
TopbarMenuEditConvert,
31+
TopbarNewEditorButton,
32+
StandaloneLayoutPlugin,
33+
}
34+
35+
export default standalonePreset
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import React from "react"
2+
import PropTypes from "prop-types"
3+
4+
const NewEditorButton = ({ getComponent }) => {
5+
const Link = getComponent("Link")
6+
7+
return (
8+
<Link href="https://editor-next.swagger.io/" className="new-editor-cta" target="_blank">
9+
<span>Try our new Editor</span>
10+
</Link>
11+
)
12+
}
13+
14+
NewEditorButton.propTypes = {
15+
getComponent: PropTypes.func.isRequired,
16+
}
17+
18+
19+
export default NewEditorButton
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import NewEditorButton from "./components/NewEditorButton"
2+
3+
const TopbarNewEditorButtonPlugin = () => ({
4+
components: {
5+
TopbarNewEditorButton: NewEditorButton,
6+
}
7+
})
8+
9+
export default TopbarNewEditorButtonPlugin
File renamed without changes.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import React from "react"
2+
import PropTypes from "prop-types"
3+
4+
import DropdownMenu from "./DropdownMenu"
5+
6+
const AboutMenu = ({ getComponent, ...rest }) => {
7+
const Link = getComponent("Link")
8+
9+
return (
10+
<DropdownMenu {...rest}>
11+
<li><Link href="https://swagger.io/tools/swagger-editor/" target="_blank">About Swagger Editor</Link></li>
12+
<li><Link href="https://swagger.io/docs/open-source-tools/swagger-editor/" target="_blank">View Docs</Link></li>
13+
<li><Link href="https://github.com/swagger-api/swagger-editor" target="_blank">View on GitHub</Link></li>
14+
</DropdownMenu>
15+
)
16+
}
17+
18+
AboutMenu.propTypes = {
19+
getComponent: PropTypes.func.isRequired,
20+
}
21+
22+
23+
export default AboutMenu

src/standalone/topbar/topbar.jsx renamed to src/standalone/topbar/components/Topbar.jsx

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import DropdownMenu from "./DropdownMenu"
66
import fileDownload from "js-file-download"
77
import YAML from "js-yaml"
88
import beautifyJson from "json-beautify"
9-
import { petStoreOas2Def, petStoreOas3Def } from "../../plugins/default-definitions"
9+
import { petStoreOas2Def, petStoreOas3Def } from "../../../plugins/default-definitions"
1010

1111

12-
import Logo from "./logo_small.svg"
12+
import Logo from "../assets/logo_small.svg"
1313

1414
export default class Topbar extends React.Component {
1515
constructor(props, context) {
@@ -325,9 +325,10 @@ export default class Topbar extends React.Component {
325325
const TopbarInsert = getComponent("TopbarInsert")
326326
const ImportFileMenuItem = getComponent("ImportFileMenuItem")
327327
const ConvertDefinitionMenuItem = getComponent("ConvertDefinitionMenuItem")
328+
const AboutMenu = getComponent("TopbarAboutMenu", true)
329+
const NewEditorButton = getComponent("TopbarNewEditorButton", true)
328330
const { swagger2ConverterUrl } = this.props.getConfigs()
329331

330-
331332
let showServersMenu = this.state.servers && this.state.servers.length
332333
let showClientsMenu = this.state.clients && this.state.clients.length
333334

@@ -387,14 +388,8 @@ export default class Topbar extends React.Component {
387388
{ this.state.clients
388389
.map((cli, i) => <li key={i}><button type="button" onClick={() => this.downloadGeneratedFile("client", cli)}>{cli}</button></li>) }
389390
</DropdownMenu> : null }
390-
<DropdownMenu {...makeMenuOptions("About")}>
391-
<li><Link href="https://swagger.io/tools/swagger-editor/" target="_blank">About Swagger Editor</Link></li>
392-
<li><Link href="https://swagger.io/docs/open-source-tools/swagger-editor/" target="_blank">View Docs</Link></li>
393-
<li><Link href="https://github.com/swagger-api/swagger-editor" target="_blank">View on GitHub</Link></li>
394-
</DropdownMenu>
395-
<Link href="https://editor-next.swagger.io/" className="new-editor-cta" target="_blank">
396-
<span>Try our new Editor</span>
397-
</Link>
391+
{AboutMenu && <AboutMenu {...makeMenuOptions("About")} />}
392+
{NewEditorButton && <NewEditorButton />}
398393
</div>
399394
</div>
400395
</div>

src/standalone/topbar/index.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import Topbar from "./topbar.jsx"
1+
import Topbar from "./components/Topbar"
2+
import AboutMenu from "./components/AboutMenu"
23

34
export default function () {
45
return {
@@ -28,7 +29,8 @@ export default function () {
2829
}
2930
},
3031
components: {
31-
Topbar
32+
Topbar,
33+
TopbarAboutMenu: AboutMenu,
3234
}
3335
}
3436
}

test/e2e/static/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@
6666
dom_id: '#swagger-editor',
6767
layout: 'StandaloneLayout',
6868
presets: [
69-
SwaggerEditorStandalonePreset
69+
SwaggerEditorStandalonePreset,
70+
],
71+
plugins: [
72+
SwaggerEditorStandalonePreset.plugins.TopbarNewEditorButton,
7073
],
7174
queryConfigEnabled: true,
7275
})

0 commit comments

Comments
 (0)