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) - }) })