Skip to content

Commit

Permalink
refactor: operations component (#7044)
Browse files Browse the repository at this point in the history
  • Loading branch information
mathis-m authored Mar 10, 2021
1 parent 0723622 commit 84358ae
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 66 deletions.
121 changes: 55 additions & 66 deletions src/core/components/operations.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,89 +28,78 @@ export default class Operations extends React.Component {
render() {
let {
specSelectors,
} = this.props

const taggedOps = specSelectors.taggedOperations()

if(taggedOps.size === 0) {
return <h3> No operations defined in spec!</h3>
}

return (
<div>
{ taggedOps.map(this.renderOperationTag).toArray() }
{ taggedOps.size < 1 ? <h3> No operations defined in spec! </h3> : null }
</div>
)
}

renderOperationTag = (tagObj, tag) => {
const {
specSelectors,
getComponent,
oas3Selectors,
layoutSelectors,
layoutActions,
getConfigs,
fn
} = this.props

let taggedOps = specSelectors.taggedOperations()

const OperationContainer = getComponent("OperationContainer", true)
const OperationTag = getComponent("OperationTag")
const operations = tagObj.get("operations")
return (
<OperationTag
key={"operation-" + tag}
tagObj={tagObj}
tag={tag}
oas3Selectors={oas3Selectors}
layoutSelectors={layoutSelectors}
layoutActions={layoutActions}
getConfigs={getConfigs}
getComponent={getComponent}
specUrl={specSelectors.url()}>
<div className="operation-tag-content">
{
operations.map(op => {
const path = op.get("path")
const method = op.get("method")
const specPath = Im.List(["paths", path, method])

let {
maxDisplayedTags,
} = getConfigs()

let filter = layoutSelectors.currentFilter()

if (filter) {
if (filter !== true && filter !== "true" && filter !== "false") {
taggedOps = fn.opsFilter(taggedOps, filter)
}
}
// FIXME: (someday) this logic should probably be in a selector,
// but doing so would require further opening up
// selectors to the plugin system, to allow for dynamic
// overriding of low-level selectors that other selectors
// rely on. --KS, 12/17
const validMethods = specSelectors.isOAS3() ?
OAS3_OPERATION_METHODS : SWAGGER2_OPERATION_METHODS

if (maxDisplayedTags && !isNaN(maxDisplayedTags) && maxDisplayedTags >= 0) {
taggedOps = taggedOps.slice(0, maxDisplayedTags)
}
if (validMethods.indexOf(method) === -1) {
return null
}

return (
<div>
{
taggedOps.map( (tagObj, tag) => {
const operations = tagObj.get("operations")
return (
<OperationTag
key={"operation-" + tag}
tagObj={tagObj}
tag={tag}
oas3Selectors={oas3Selectors}
layoutSelectors={layoutSelectors}
layoutActions={layoutActions}
getConfigs={getConfigs}
getComponent={getComponent}
specUrl={specSelectors.url()}>
{
operations.map( op => {
const path = op.get("path")
const method = op.get("method")
const specPath = Im.List(["paths", path, method])


// FIXME: (someday) this logic should probably be in a selector,
// but doing so would require further opening up
// selectors to the plugin system, to allow for dynamic
// overriding of low-level selectors that other selectors
// rely on. --KS, 12/17
const validMethods = specSelectors.isOAS3() ?
OAS3_OPERATION_METHODS : SWAGGER2_OPERATION_METHODS

if(validMethods.indexOf(method) === -1) {
return null
}

return <OperationContainer
key={`${path}-${method}`}
specPath={specPath}
op={op}
path={path}
method={method}
tag={tag}
/>
}).toArray()
}


</OperationTag>
<OperationContainer
key={`${path}-${method}`}
specPath={specPath}
op={op}
path={path}
method={method}
tag={tag} />
)
}).toArray()
}

{ taggedOps.size < 1 ? <h3> No operations defined in spec! </h3> : null }
</div>
</OperationTag>
)
}

Expand Down
4 changes: 4 additions & 0 deletions src/core/plugins/layout/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import reducers from "./reducers"
import * as actions from "./actions"
import * as selectors from "./selectors"
import * as wrapSelectors from "./spec-extensions/wrap-selector"

export default function() {
return {
Expand All @@ -9,6 +10,9 @@ export default function() {
reducers,
actions,
selectors
},
spec: {
wrapSelectors
}
}
}
Expand Down
22 changes: 22 additions & 0 deletions src/core/plugins/layout/spec-extensions/wrap-selector.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

export const taggedOperations = (oriSelector, system) => (state, ...args) => {
let taggedOps = oriSelector(state, ...args)

const { fn, layoutSelectors, getConfigs } = system.getSystem()
const configs = getConfigs()
const { maxDisplayedTags } = configs

// Filter, if requested
let filter = layoutSelectors.currentFilter()
if (filter) {
if (filter !== true && filter !== "true" && filter !== "false") {
taggedOps = fn.opsFilter(taggedOps, filter)
}
}
// Limit to [max] items, if specified
if (maxDisplayedTags && !isNaN(maxDisplayedTags) && maxDisplayedTags >= 0) {
taggedOps = taggedOps.slice(0, maxDisplayedTags)
}

return taggedOps
}

0 comments on commit 84358ae

Please sign in to comment.