feat(oas31): add support for OpenAPI 3.1.0 in VersionPragmaFilter (#8495)

Refs #8492
This commit is contained in:
Vladimír Gorej
2023-03-21 11:52:07 +01:00
committed by GitHub
parent 97c9471049
commit 4810801f77
4 changed files with 177 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
import React from "react"
import PropTypes from "prop-types"
const VersionPragmaFilter = ({
bypass,
isSwagger2,
isOAS3,
isOAS31,
alsoShow,
children,
}) => {
if (bypass) {
return <div>{children}</div>
}
if (isSwagger2 && (isOAS3 || isOAS31)) {
return (
<div className="version-pragma">
{alsoShow}
<div className="version-pragma__message version-pragma__message--ambiguous">
<div>
<h3>Unable to render this definition</h3>
<p>
<code>swagger</code> and <code>openapi</code> fields cannot be
present in the same Swagger or OpenAPI definition. Please remove
one of the fields.
</p>
<p>
Supported version fields are <code>swagger: &quot;2.0&quot;</code> and
those that match <code>openapi: 3.x.y</code> (for example,{" "}
<code>openapi: 3.1.0</code>).
</p>
</div>
</div>
</div>
)
}
if (!isSwagger2 && !isOAS3 && !isOAS31) {
return (
<div className="version-pragma">
{alsoShow}
<div className="version-pragma__message version-pragma__message--missing">
<div>
<h3>Unable to render this definition</h3>
<p>
The provided definition does not specify a valid version field.
</p>
<p>
Please indicate a valid Swagger or OpenAPI version field.
Supported version fields are <code>swagger: &quot;2.0&quot;</code> and
those that match <code>openapi: 3.x.y</code> (for example,{" "}
<code>openapi: 3.1.0</code>).
</p>
</div>
</div>
</div>
)
}
return <div>{children}</div>
}
VersionPragmaFilter.propTypes = {
isSwagger2: PropTypes.bool.isRequired,
isOAS3: PropTypes.bool.isRequired,
isOAS31: PropTypes.bool.isRequired,
bypass: PropTypes.bool,
alsoShow: PropTypes.element,
children: PropTypes.any,
}
export default VersionPragmaFilter

View File

@@ -5,9 +5,11 @@ import Webhooks from "./components/webhooks"
import License from "./components/license"
import Contact from "./components/contact"
import Info from "./components/info"
import VersionPragmaFilter from "./components/version-pragma-filter"
import LicenseWrapper from "./wrap-components/license"
import ContactWrapper from "./wrap-components/contact"
import InfoWrapper from "./wrap-components/info"
import VersionPragmaFilterWrapper from "./wrap-components/version-pragma-filter"
import {
license as selectLicense,
contact as selectContact,
@@ -58,11 +60,13 @@ const OAS31Plugin = ({ fn }) => {
OAS31Info: Info,
OAS31License: License,
OAS31Contact: Contact,
OAS31VersionPragmaFilter: VersionPragmaFilter,
},
wrapComponents: {
InfoContainer: InfoWrapper,
License: LicenseWrapper,
Contact: ContactWrapper,
VersionPragmaFilter: VersionPragmaFilterWrapper,
},
statePlugins: {
spec: {

View File

@@ -0,0 +1,16 @@
/**
* @prettier
*/
import React from "react"
const VersionPragmaFilterWrapper = (Original, system) => (props) => {
const isOAS31 = system.specSelectors.isOAS31()
const OAS31VersionPragmaFilter = system.getComponent(
"OAS31VersionPragmaFilter"
)
return <OAS31VersionPragmaFilter isOAS31={isOAS31} {...props} />
}
export default VersionPragmaFilterWrapper