From 28f7a15fe9b0f3ec4b32a300d41c7e5a2eb7be69 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Tue, 11 Jul 2017 21:54:56 -0700 Subject: [PATCH] Use state instead of component hand-down for managing filter --- src/core/components/layouts/base.jsx | 7 +++---- src/core/components/operations.jsx | 3 ++- src/core/index.js | 5 +++-- src/plugins/topbar/topbar.jsx | 10 +++++----- src/standalone/layout.jsx | 24 +++--------------------- 5 files changed, 16 insertions(+), 33 deletions(-) diff --git a/src/core/components/layouts/base.jsx b/src/core/components/layouts/base.jsx index 3240e65a..3e6c7139 100644 --- a/src/core/components/layouts/base.jsx +++ b/src/core/components/layouts/base.jsx @@ -10,12 +10,11 @@ export default class BaseLayout extends React.Component { specSelectors: PropTypes.object.isRequired, layoutSelectors: PropTypes.object.isRequired, layoutActions: PropTypes.object.isRequired, - getComponent: PropTypes.func.isRequired, - filter: PropTypes.string.isRequired + getComponent: PropTypes.func.isRequired } render() { - let { specSelectors, specActions, getComponent, filter } = this.props + let { specSelectors, specActions, getComponent } = this.props let info = specSelectors.info() let url = specSelectors.url() @@ -67,7 +66,7 @@ export default class BaseLayout extends React.Component { - + diff --git a/src/core/components/operations.jsx b/src/core/components/operations.jsx index fff1b226..75ab089d 100644 --- a/src/core/components/operations.jsx +++ b/src/core/components/operations.jsx @@ -25,7 +25,6 @@ export default class Operations extends React.Component { authActions, authSelectors, getConfigs, - filter, fn } = this.props @@ -37,6 +36,8 @@ export default class Operations extends React.Component { let showSummary = layoutSelectors.showSummary() let { docExpansion, displayOperationId, displayRequestDuration, maxDisplayedTags } = getConfigs() + let filter = layoutSelectors.currentFilter() + if (filter) { if (filter !== true) { taggedOps = taggedOps.filter((tagObj, tag) => { diff --git a/src/core/index.js b/src/core/index.js index dbfee248..2796730f 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -52,7 +52,9 @@ module.exports = function SwaggerUI(opts) { store: { }, } - const constructorConfig = deepExtend({}, defaults, opts) + let queryConfig = parseSeach() + + const constructorConfig = deepExtend({}, defaults, opts, queryConfig) const storeConfigs = deepExtend({}, constructorConfig.store, { system: { @@ -83,7 +85,6 @@ module.exports = function SwaggerUI(opts) { store.register([constructorConfig.plugins, inlinePlugin]) var system = store.getSystem() - let queryConfig = parseSeach() system.initOAuth = system.authActions.configureAuth diff --git a/src/plugins/topbar/topbar.jsx b/src/plugins/topbar/topbar.jsx index 087b3c93..314e1d4e 100644 --- a/src/plugins/topbar/topbar.jsx +++ b/src/plugins/topbar/topbar.jsx @@ -7,8 +7,8 @@ import Logo from "./logo_small.png" export default class Topbar extends React.Component { static propTypes = { - onFilterChange: PropTypes.func.isRequired, - filter: PropTypes.string.isRequired + layoutSelectors: PropTypes.object.isRequired, + layoutActions: PropTypes.object.isRequired } constructor(props, context) { @@ -87,17 +87,17 @@ export default class Topbar extends React.Component { onFilterChange =(e) => { let {target: {value}} = e - this.props.onFilterChange(value) + this.props.layoutActions.updateFilter(value) } render() { - let { getComponent, specSelectors, getConfigs } = this.props + let { getComponent, specSelectors, getConfigs, layoutSelectors } = this.props const Button = getComponent("Button") const Link = getComponent("Link") let isLoading = specSelectors.loadingStatus() === "loading" let isFailed = specSelectors.loadingStatus() === "failed" - let filter = this.props.filter + let filter = layoutSelectors.currentFilter() let inputStyle = {} if(isFailed) inputStyle.color = "red" diff --git a/src/standalone/layout.jsx b/src/standalone/layout.jsx index 783b9a1c..dc36b46e 100644 --- a/src/standalone/layout.jsx +++ b/src/standalone/layout.jsx @@ -10,23 +10,7 @@ export default class StandaloneLayout extends React.Component { specSelectors: PropTypes.object.isRequired, layoutSelectors: PropTypes.object.isRequired, layoutActions: PropTypes.object.isRequired, - getComponent: PropTypes.func.isRequired, - getConfigs: PropTypes.func.isRequired - } - - constructor(props) { - super(props) - - this.handleFilterChange = this.handleFilterChange.bind(this) - - let { getConfigs } = this.props - let { filter } = getConfigs() - - this.state = { filter: filter } - } - - handleFilterChange(filter) { - this.setState({ filter: filter }) + getComponent: PropTypes.func.isRequired } render() { @@ -40,14 +24,12 @@ export default class StandaloneLayout extends React.Component { const BaseLayout = getComponent("BaseLayout", true) const OnlineValidatorBadge = getComponent("onlineValidatorBadge", true) - const filter = this.state.filter - const loadingStatus = specSelectors.loadingStatus() return ( - { Topbar ? : null } + { Topbar ? : null } { loadingStatus === "loading" &&

Loading...

@@ -63,7 +45,7 @@ export default class StandaloneLayout extends React.Component {

Failed to load config.

} - { !loadingStatus || loadingStatus === "success" && } + { !loadingStatus || loadingStatus === "success" && }