@@ -4,6 +4,7 @@
|
||||
import React from "react"
|
||||
import PropTypes from "prop-types"
|
||||
import ImPropTypes from "react-immutable-proptypes"
|
||||
|
||||
import { sanitizeUrl } from "core/utils"
|
||||
import { safeBuildUrl } from "core/utils/url"
|
||||
|
||||
|
||||
@@ -6,9 +6,10 @@ import PropTypes from "prop-types"
|
||||
|
||||
import { sanitizeUrl } from "core/utils"
|
||||
|
||||
const License = ({ getComponent, oas31Selectors }) => {
|
||||
const name = oas31Selectors.selectLicenseNameField()
|
||||
const url = oas31Selectors.selectLicenseUrl()
|
||||
const License = ({ getComponent, specSelectors }) => {
|
||||
const name = specSelectors.selectLicenseNameField()
|
||||
const url = specSelectors.selectLicenseUrl()
|
||||
|
||||
const Link = getComponent("Link")
|
||||
|
||||
return (
|
||||
@@ -28,7 +29,7 @@ const License = ({ getComponent, oas31Selectors }) => {
|
||||
|
||||
License.propTypes = {
|
||||
getComponent: PropTypes.func.isRequired,
|
||||
oas31Selectors: PropTypes.shape({
|
||||
specSelectors: PropTypes.shape({
|
||||
selectLicenseNameField: PropTypes.func.isRequired,
|
||||
selectLicenseUrl: PropTypes.func.isRequired,
|
||||
}).isRequired,
|
||||
|
||||
@@ -8,3 +8,15 @@ export const isOAS31 = (jsSpec) => {
|
||||
typeof oasVersion === "string" && /^3\.1\.(?:[1-9]\d*|0)$/.test(oasVersion)
|
||||
)
|
||||
}
|
||||
|
||||
export const onlyOAS31 =
|
||||
(selector) =>
|
||||
() =>
|
||||
(system, ...args) => {
|
||||
if (system.getSystem().specSelectors.isOAS31()) {
|
||||
const result = selector(...args)
|
||||
return typeof result === "function" ? result(system, ...args) : result
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,21 +6,30 @@ import License from "./components/license"
|
||||
import Info from "./components/info"
|
||||
import LicenseWrapper from "./wrap-components/license"
|
||||
import InfoWrapper from "./wrap-components/info"
|
||||
import { isOAS31, license, webhooks } from "./spec-extensions/selectors"
|
||||
import { isOAS3 } from "./spec-extensions/wrap-selectors"
|
||||
import {
|
||||
makeSelectLicenseUrl,
|
||||
selectLicenseIdentifierField,
|
||||
license,
|
||||
webhooks,
|
||||
selectLicenseNameField,
|
||||
selectLicenseUrlField,
|
||||
} from "./selectors"
|
||||
selectLicenseIdentifierField,
|
||||
makeIsOAS31,
|
||||
makeSelectLicenseUrl,
|
||||
} from "./spec-extensions/selectors"
|
||||
import {
|
||||
isOAS3 as isOAS3Wrapper,
|
||||
selectLicenseUrl as selectLicenseUrlWrapper,
|
||||
} from "./spec-extensions/wrap-selectors"
|
||||
import { makeSelectLicenseUrl as makeOAS31SelectLicenseUrl } from "./selectors"
|
||||
|
||||
const OAS31Plugin = () => {
|
||||
return {
|
||||
afterLoad(system) {
|
||||
const oas31Selectors = this.statePlugins.oas31.selectors
|
||||
const specSelectors = this.statePlugins.spec.selectors
|
||||
|
||||
oas31Selectors.selectLicenseUrl = makeSelectLicenseUrl(system)
|
||||
specSelectors.selectLicenseUrl = makeSelectLicenseUrl(system)
|
||||
specSelectors.isOAS31 = makeIsOAS31(system)
|
||||
oas31Selectors.selectLicenseUrl = makeOAS31SelectLicenseUrl(system)
|
||||
},
|
||||
components: {
|
||||
Webhooks,
|
||||
@@ -34,20 +43,19 @@ const OAS31Plugin = () => {
|
||||
statePlugins: {
|
||||
spec: {
|
||||
selectors: {
|
||||
isOAS31,
|
||||
license,
|
||||
webhooks,
|
||||
},
|
||||
wrapSelectors: {
|
||||
isOAS3,
|
||||
},
|
||||
},
|
||||
oas31: {
|
||||
selectors: {
|
||||
selectLicenseNameField,
|
||||
selectLicenseUrlField,
|
||||
selectLicenseIdentifierField,
|
||||
webhooks,
|
||||
},
|
||||
wrapSelectors: {
|
||||
isOAS3: isOAS3Wrapper,
|
||||
selectLicenseUrl: selectLicenseUrlWrapper,
|
||||
},
|
||||
},
|
||||
oas31: {
|
||||
selectors: {},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -4,34 +4,25 @@
|
||||
import { createSelector } from "reselect"
|
||||
|
||||
import { safeBuildUrl } from "core/utils/url"
|
||||
|
||||
export const selectLicenseNameField = () => (system) => {
|
||||
return system.specSelectors.license().get("name", "License")
|
||||
}
|
||||
|
||||
export const selectLicenseUrlField = () => (system) => {
|
||||
return system.specSelectors.license().get("url")
|
||||
}
|
||||
|
||||
export const selectLicenseIdentifierField = () => (system) => {
|
||||
return system.specSelectors.license().get("identifier")
|
||||
}
|
||||
import { onlyOAS31 } from "./helpers"
|
||||
|
||||
export const makeSelectLicenseUrl = (system) =>
|
||||
createSelector(
|
||||
() => system.specSelectors.url(),
|
||||
() => system.oas3Selectors.selectedServer(),
|
||||
() => system.oas31Selectors.selectLicenseUrlField(),
|
||||
() => system.oas31Selectors.selectLicenseIdentifierField(),
|
||||
(specUrl, selectedServer, url, identifier) => {
|
||||
if (url) {
|
||||
return safeBuildUrl(url, specUrl, { selectedServer })
|
||||
}
|
||||
onlyOAS31(
|
||||
createSelector(
|
||||
() => system.specSelectors.url(),
|
||||
() => system.oas3Selectors.selectedServer(),
|
||||
() => system.specSelectors.selectLicenseUrlField(),
|
||||
() => system.specSelectors.selectLicenseIdentifierField(),
|
||||
(specUrl, selectedServer, url, identifier) => {
|
||||
if (url) {
|
||||
return safeBuildUrl(url, specUrl, { selectedServer })
|
||||
}
|
||||
|
||||
if (identifier) {
|
||||
return `https://spdx.org/licenses/${identifier}.html`
|
||||
}
|
||||
if (identifier) {
|
||||
return `https://spdx.org/licenses/${identifier}.html`
|
||||
}
|
||||
|
||||
return undefined
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
@@ -2,27 +2,15 @@
|
||||
* @prettier
|
||||
*/
|
||||
import { Map } from "immutable"
|
||||
import { createSelector } from "reselect"
|
||||
|
||||
import { isOAS31 as isOAS31Helper } from "../helpers"
|
||||
import { safeBuildUrl } from "core/utils/url"
|
||||
import { isOAS31 as isOAS31Helper, onlyOAS31 } from "../helpers"
|
||||
|
||||
const map = Map()
|
||||
|
||||
export const isOAS31 = () => (system) => {
|
||||
const spec = system.specSelectors.specJson()
|
||||
return isOAS31Helper(spec)
|
||||
}
|
||||
|
||||
const onlyOAS31 =
|
||||
(selector) =>
|
||||
() =>
|
||||
(system, ...args) => {
|
||||
if (system.getSystem().specSelectors.isOAS31()) {
|
||||
const result = selector(...args)
|
||||
return typeof result === "function" ? result(system, ...args) : result
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
export const makeIsOAS31 = (system) =>
|
||||
createSelector(() => system.specSelectors.specJson(), isOAS31Helper)
|
||||
|
||||
export const webhooks = onlyOAS31(() => (system) => {
|
||||
return system.specSelectors.specJson().get("webhooks", map)
|
||||
@@ -31,3 +19,29 @@ export const webhooks = onlyOAS31(() => (system) => {
|
||||
export const license = () => (system) => {
|
||||
return system.specSelectors.info().get("license", map)
|
||||
}
|
||||
|
||||
export const selectLicenseNameField = () => (system) => {
|
||||
return system.specSelectors.license().get("name", "License")
|
||||
}
|
||||
|
||||
export const selectLicenseUrlField = () => (system) => {
|
||||
return system.specSelectors.license().get("url")
|
||||
}
|
||||
|
||||
export const selectLicenseIdentifierField = onlyOAS31(() => (system) => {
|
||||
return system.specSelectors.license().get("identifier")
|
||||
})
|
||||
|
||||
export const makeSelectLicenseUrl = (system) =>
|
||||
createSelector(
|
||||
() => system.specSelectors.url(),
|
||||
() => system.oas3Selectors.selectedServer(),
|
||||
() => system.specSelectors.selectLicenseUrlField(),
|
||||
(specUrl, selectedServer, url) => {
|
||||
if (url) {
|
||||
return safeBuildUrl(url, specUrl, { selectedServer })
|
||||
}
|
||||
|
||||
return undefined
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1,4 +1,19 @@
|
||||
export const isOAS3 = (oriSelector, system) => (state, ...args) => {
|
||||
const isOAS31 = system.specSelectors.isOAS31()
|
||||
return isOAS31 || oriSelector(...args)
|
||||
}
|
||||
/**
|
||||
* @prettier
|
||||
*/
|
||||
export const isOAS3 =
|
||||
(oriSelector, system) =>
|
||||
(state, ...args) => {
|
||||
const isOAS31 = system.specSelectors.isOAS31()
|
||||
return isOAS31 || oriSelector(...args)
|
||||
}
|
||||
|
||||
export const selectLicenseUrl =
|
||||
(oriSelector, system) =>
|
||||
(state, ...args) => {
|
||||
if (system.specSelectors.isOAS31()) {
|
||||
return system.oas31Selectors.selectLicenseUrl()
|
||||
}
|
||||
|
||||
return oriSelector(...args)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user