diff --git a/src/core/components/auth/authorize-btn.jsx b/src/core/components/auth/authorize-btn.jsx
index 6106dfd6..57a1b2bc 100644
--- a/src/core/components/auth/authorize-btn.jsx
+++ b/src/core/components/auth/authorize-btn.jsx
@@ -3,26 +3,21 @@ import PropTypes from "prop-types"
export default class AuthorizeBtn extends React.Component {
static propTypes = {
- className: PropTypes.string
- }
-
- onClick =() => {
- let { authActions, authSelectors } = this.props
- let definitions = authSelectors.definitionsToAuthorize()
-
- authActions.showDefinitions(definitions)
+ onClick: PropTypes.func,
+ isAuthorized: PropTypes.bool,
+ showPopup: PropTypes.bool,
+ getComponent: PropTypes.func.isRequired
}
render() {
- let { authSelectors, getComponent } = this.props
+ let { isAuthorized, showPopup, onClick, getComponent } = this.props
+
//must be moved out of button component
const AuthorizationPopup = getComponent("authorizationPopup", true)
- let showPopup = !!authSelectors.shownDefinitions()
- let isAuthorized = !!authSelectors.authorized().size
return (
-
)
}
-
-
- static propTypes = {
- getComponent: PropTypes.func.isRequired,
- authSelectors: PropTypes.object.isRequired,
- errActions: PropTypes.object.isRequired,
- authActions: PropTypes.object.isRequired,
- }
}
diff --git a/src/core/components/layouts/base.jsx b/src/core/components/layouts/base.jsx
index 0c58a598..b0740988 100644
--- a/src/core/components/layouts/base.jsx
+++ b/src/core/components/layouts/base.jsx
@@ -26,6 +26,7 @@ export default class BaseLayout extends React.Component {
let Errors = getComponent("errors", true)
const SchemesContainer = getComponent("SchemesContainer", true)
+ const AuthorizeBtnContainer = getComponent("AuthorizeBtnContainer", true)
const FilterContainer = getComponent("FilterContainer", true)
let isSwagger2 = specSelectors.isSwagger2()
let isOAS3 = specSelectors.isOAS3()
@@ -60,10 +61,15 @@ export default class BaseLayout extends React.Component {
-
-
-
-
+
diff --git a/src/core/containers/authorize-btn.jsx b/src/core/containers/authorize-btn.jsx
new file mode 100644
index 00000000..6870396a
--- /dev/null
+++ b/src/core/containers/authorize-btn.jsx
@@ -0,0 +1,31 @@
+import React from "react"
+import PropTypes from "prop-types"
+
+export default class AuthorizeBtnContainer extends React.Component {
+
+ static propTypes = {
+ specActions: PropTypes.object.isRequired,
+ specSelectors: PropTypes.object.isRequired,
+ authActions: PropTypes.object.isRequired,
+ authSelectors: PropTypes.object.isRequired,
+ getComponent: PropTypes.func.isRequired
+ }
+
+ render () {
+ const { authActions, authSelectors, specSelectors, getComponent} = this.props
+
+ const securityDefinitions = specSelectors.securityDefinitions()
+ const authorizableDefinitions = authSelectors.definitionsToAuthorize()
+
+ const AuthorizeBtn = getComponent("authorizeBtn")
+
+ return securityDefinitions ? (
+ authActions.showDefinitions(authorizableDefinitions)}
+ isAuthorized={!!authSelectors.authorized().size}
+ showPopup={!!authSelectors.shownDefinitions()}
+ getComponent={getComponent}
+ />
+ ) : null
+ }
+}
diff --git a/src/core/containers/schemes.jsx b/src/core/containers/schemes.jsx
index fb5414f2..871163be 100644
--- a/src/core/containers/schemes.jsx
+++ b/src/core/containers/schemes.jsx
@@ -6,40 +6,25 @@ export default class SchemesContainer extends React.Component {
static propTypes = {
specActions: PropTypes.object.isRequired,
specSelectors: PropTypes.object.isRequired,
- getComponent: PropTypes.func.isRequired,
- children: PropTypes.any
+ getComponent: PropTypes.func.isRequired
}
render () {
const {specActions, specSelectors, getComponent} = this.props
+
const currentScheme = specSelectors.operationScheme()
const schemes = specSelectors.schemes()
- const securityDefinitions = specSelectors.securityDefinitions()
- const Col = getComponent("Col")
- const AuthorizeBtn = getComponent("authorizeBtn", true)
const Schemes = getComponent("schemes")
- return (
-
- {schemes && schemes.size || securityDefinitions ? (
-
-
- {this.props.children}
- {schemes && schemes.size ? (
-
- ) : null}
- {securityDefinitions ? (
-
- ) : null}
-
-
- ) : null}
-
- )
+ const schemesArePresent = schemes && schemes.size
+
+ return schemesArePresent ? (
+
+ ) : null
}
}
diff --git a/src/core/plugins/oas3/auth-extensions/wrap-selectors.js b/src/core/plugins/oas3/auth-extensions/wrap-selectors.js
index 087466c1..25fd7adb 100644
--- a/src/core/plugins/oas3/auth-extensions/wrap-selectors.js
+++ b/src/core/plugins/oas3/auth-extensions/wrap-selectors.js
@@ -26,6 +26,10 @@ export const definitionsToAuthorize = onlyOAS3(createSelector(
// that look like Swagger2 definitions.
let list = List()
+ if(!definitions) {
+ return list
+ }
+
definitions.entrySeq().forEach( ([ defName, definition ]) => {
const type = definition.get("type")
diff --git a/src/core/presets/base.js b/src/core/presets/base.js
index 50663213..cff809cd 100644
--- a/src/core/presets/base.js
+++ b/src/core/presets/base.js
@@ -18,6 +18,7 @@ import OperationContainer from "core/containers/OperationContainer"
import App from "core/components/app"
import AuthorizationPopup from "core/components/auth/authorization-popup"
import AuthorizeBtn from "core/components/auth/authorize-btn"
+import AuthorizeBtnContainer from "core/containers/authorize-btn"
import AuthorizeOperationBtn from "core/components/auth/authorize-operation-btn"
import Auths from "core/components/auth/auths"
import AuthItem from "core/components/auth/auth-item"
@@ -91,6 +92,7 @@ export default function() {
App,
authorizationPopup: AuthorizationPopup,
authorizeBtn: AuthorizeBtn,
+ AuthorizeBtnContainer,
authorizeOperationBtn: AuthorizeOperationBtn,
auths: Auths,
AuthItem: AuthItem,
diff --git a/test/components/schemes-wrapper.js b/test/components/schemes-wrapper.js
index bc2692a5..d08412c3 100644
--- a/test/components/schemes-wrapper.js
+++ b/test/components/schemes-wrapper.js
@@ -88,32 +88,4 @@ describe("", function(){
const renderedSchemes = wrapper.find(Schemes)
expect(renderedSchemes.length).toEqual(0)
})
-
- it("renders AuthorizeBtn inside SchemesContainer if security definition is provided", function(){
-
- // Given
- let props = {...mockedProps}
- props.specSelectors = {...mockedProps.specSelectors}
- props.specSelectors.securityDefinitions = function () {return fromJS(twoSecurityDefinitions)}
-
- // When
- let wrapper = render()
-
- // Then
- const renderedAuthorizeBtn = wrapper.find("span.mocked-button")
- expect(renderedAuthorizeBtn.length).toEqual(1)
- })
-
- it("does not render AuthorizeBtn if security definition is not provided", function(){
-
- // Given
- let props = {...mockedProps}
-
- // When
- let wrapper = render()
-
- // Then
- const renderedAuthorizeBtn = wrapper.find("span.mocked-button")
- expect(renderedAuthorizeBtn.length).toEqual(0)
- })
})