From 60934107d33c48d0a0e2ab41c090c650eff03924 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Wed, 17 May 2017 18:42:34 -0700 Subject: [PATCH] Add base wrapSelectors for OAS3; implement definitions selector for OAS3 --- src/core/plugins/oas3/index.js | 6 ++-- src/core/plugins/oas3/selectors.js | 43 ------------------------ src/core/plugins/oas3/wrap-selectors.js | 44 +++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 46 deletions(-) delete mode 100644 src/core/plugins/oas3/selectors.js create mode 100644 src/core/plugins/oas3/wrap-selectors.js diff --git a/src/core/plugins/oas3/index.js b/src/core/plugins/oas3/index.js index 5135063c..8c40c8ae 100644 --- a/src/core/plugins/oas3/index.js +++ b/src/core/plugins/oas3/index.js @@ -1,9 +1,9 @@ // import reducers from "./reducers" // import * as actions from "./actions" -import * as selectors from "./selectors" +import * as wrapSelectors from "./wrap-selectors" // import * as wrapActions from "./wrap-actions" -export default function(system) { +export default function() { return { components: { @@ -13,7 +13,7 @@ export default function(system) { // wrapActions, // reducers, // actions, - selectors + wrapSelectors } } } diff --git a/src/core/plugins/oas3/selectors.js b/src/core/plugins/oas3/selectors.js deleted file mode 100644 index 63828957..00000000 --- a/src/core/plugins/oas3/selectors.js +++ /dev/null @@ -1,43 +0,0 @@ -import { createSelector } from "reselect" -// import { sorters } from "core/utils" -// import { fromJS, Set, Map, List } from "immutable" - -const DEFAULT_TAG = "default" - -const state = state => { - return state || Map() -} - -// export const specJson = createSelector( -// state, -// spec => spec.get("json", Map()) -// ) -// -// export const specResolved = createSelector( -// state, -// spec => spec.get("resolved", Map()) -// ) -// -// export const spec = state => { -// let res = specResolved(state) -// if(res.count() < 1) -// res = specJson(state) -// return res -// } -// -// export const findDefinition = ( state, name ) => { -// return specResolved(state).getIn(["definitions", name], null) -// } -// -// export const definitions = onlyOAS3(createSelector( -// spec, -// spec => spec.getIn(["components", "schemas"]) || Map() -// )) - -// helpers - -function onlyOAS3(selector) { - return ( state ) => ( thing ) => { - return selector - } -} diff --git a/src/core/plugins/oas3/wrap-selectors.js b/src/core/plugins/oas3/wrap-selectors.js new file mode 100644 index 00000000..72f01ca7 --- /dev/null +++ b/src/core/plugins/oas3/wrap-selectors.js @@ -0,0 +1,44 @@ +import { createSelector } from "reselect" +import { Map } from "immutable" + +// Helpers + +function onlyOAS3(selector) { + return (ori, system) => (...args) => { + const spec = system.getSystem().specSelectors.specJson() + const version = spec.get("openapi") + if(typeof version === "string" && version.startsWith("3.0.0")) { + return selector(...args) + } else { + return ori(...args) + } + } +} + +const state = state => { + return state || Map() +} + +const specJson = createSelector( + state, + spec => spec.get("json", Map()) +) + +const specResolved = createSelector( + state, + spec => spec.get("resolved", Map()) +) + +const spec = state => { + let res = specResolved(state) + if(res.count() < 1) + res = specJson(state) + return res +} + +// Wrappers + +export const definitions = onlyOAS3(createSelector( + spec, + spec => spec.getIn(["components", "schemas"]) || Map() +))