From 503aa19f3682492a561954b68e8b6fe2ee6b4aff Mon Sep 17 00:00:00 2001 From: Vladimir Gorej Date: Fri, 21 Apr 2023 13:23:29 +0200 Subject: [PATCH] feat(json-schema-2020-12): add support for else keyword Refs #8513 --- .../components/JSONSchema/JSONSchema.jsx | 2 ++ .../json-schema-2020-12/components/_all.scss | 1 + .../components/keywords/Else/Else.jsx | 30 +++++++++++++++++++ .../components/keywords/Else/_else.scss | 10 +++++++ src/core/plugins/json-schema-2020-12/fn.js | 1 + src/core/plugins/json-schema-2020-12/hoc.jsx | 2 ++ src/core/plugins/json-schema-2020-12/index.js | 2 ++ .../plugins/oas31/wrap-components/models.jsx | 2 ++ 8 files changed, 50 insertions(+) create mode 100644 src/core/plugins/json-schema-2020-12/components/keywords/Else/Else.jsx create mode 100644 src/core/plugins/json-schema-2020-12/components/keywords/Else/_else.scss diff --git a/src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx b/src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx index e5eb288d..b2fb489d 100644 --- a/src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx +++ b/src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx @@ -47,6 +47,7 @@ const JSONSchema = ({ schema, name }) => { const KeywordNot = useComponent("KeywordNot") const KeywordIf = useComponent("KeywordIf") const KeywordThen = useComponent("KeywordThen") + const KeywordElse = useComponent("KeywordElse") const KeywordProperties = useComponent("KeywordProperties") const KeywordType = useComponent("KeywordType") const KeywordFormat = useComponent("KeywordFormat") @@ -117,6 +118,7 @@ const JSONSchema = ({ schema, name }) => { + diff --git a/src/core/plugins/json-schema-2020-12/components/_all.scss b/src/core/plugins/json-schema-2020-12/components/_all.scss index 0c613de4..cfbe1e10 100644 --- a/src/core/plugins/json-schema-2020-12/components/_all.scss +++ b/src/core/plugins/json-schema-2020-12/components/_all.scss @@ -14,6 +14,7 @@ @import './keywords/Not/not'; @import './keywords/If/if'; @import './keywords/Then/then'; +@import './keywords/Else/else'; @import './keywords/Type/type'; @import './keywords/Format/format'; @import './keywords/Description/description'; diff --git a/src/core/plugins/json-schema-2020-12/components/keywords/Else/Else.jsx b/src/core/plugins/json-schema-2020-12/components/keywords/Else/Else.jsx new file mode 100644 index 00000000..5c81ba0b --- /dev/null +++ b/src/core/plugins/json-schema-2020-12/components/keywords/Else/Else.jsx @@ -0,0 +1,30 @@ +/** + * @prettier + */ +import React from "react" + +import { schema } from "../../../prop-types" +import { useComponent } from "../../../hooks" + +const Else = ({ schema }) => { + if (!schema?.else) return null + + const JSONSchema = useComponent("JSONSchema") + const name = ( + + Else + + ) + + return ( +
+ +
+ ) +} + +Else.propTypes = { + schema: schema.isRequired, +} + +export default Else diff --git a/src/core/plugins/json-schema-2020-12/components/keywords/Else/_else.scss b/src/core/plugins/json-schema-2020-12/components/keywords/Else/_else.scss new file mode 100644 index 00000000..e3eb5eb4 --- /dev/null +++ b/src/core/plugins/json-schema-2020-12/components/keywords/Else/_else.scss @@ -0,0 +1,10 @@ +.json-schema-2020-12 { + &__else { + .json-schema-2020-12-core-keyword--else { + @extend .json-schema-2020-12-core-keyword--allOf; + } + } +} + + + diff --git a/src/core/plugins/json-schema-2020-12/fn.js b/src/core/plugins/json-schema-2020-12/fn.js index 4a1264b6..85e4139e 100644 --- a/src/core/plugins/json-schema-2020-12/fn.js +++ b/src/core/plugins/json-schema-2020-12/fn.js @@ -132,6 +132,7 @@ export const isExpandable = (schema) => { schema?.not || schema?.if || schema?.then || + schema?.else || schema?.description || schema?.properties ) diff --git a/src/core/plugins/json-schema-2020-12/hoc.jsx b/src/core/plugins/json-schema-2020-12/hoc.jsx index d926d8aa..ba5c2994 100644 --- a/src/core/plugins/json-schema-2020-12/hoc.jsx +++ b/src/core/plugins/json-schema-2020-12/hoc.jsx @@ -19,6 +19,7 @@ import KeywordOneOf from "./components/keywords/OneOf/OneOf" import KeywordNot from "./components/keywords/Not/Not" import KeywordIf from "./components/keywords/If/If" import KeywordThen from "./components/keywords/Then/Then" +import KeywordElse from "./components/keywords/Else/Else" import KeywordProperties from "./components/keywords/Properties/Properties" import KeywordType from "./components/keywords/Type/Type" import KeywordFormat from "./components/keywords/Format/Format" @@ -55,6 +56,7 @@ export const withJSONSchemaContext = (Component, overrides = {}) => { KeywordNot, KeywordIf, KeywordThen, + KeywordElse, KeywordProperties, KeywordType, KeywordFormat, diff --git a/src/core/plugins/json-schema-2020-12/index.js b/src/core/plugins/json-schema-2020-12/index.js index 6caa674d..5bfcd71d 100644 --- a/src/core/plugins/json-schema-2020-12/index.js +++ b/src/core/plugins/json-schema-2020-12/index.js @@ -18,6 +18,7 @@ import KeywordOneOf from "./components/keywords/OneOf/OneOf" import KeywordNot from "./components/keywords/Not/Not" import KeywordIf from "./components/keywords/If/If" import KeywordThen from "./components/keywords/Then/Then" +import KeywordElse from "./components/keywords/Else/Else" import KeywordType from "./components/keywords/Type/Type" import KeywordFormat from "./components/keywords/Format/Format" import KeywordTitle from "./components/keywords/Title/Title" @@ -46,6 +47,7 @@ const JSONSchema202012Plugin = () => ({ JSONSchema202012KeywordNot: KeywordNot, JSONSchema202012KeywordIf: KeywordIf, JSONSchema202012KeywordThen: KeywordThen, + JSONSchema202012KeywordElse: KeywordElse, JSONSchema202012KeywordProperties: KeywordProperties, JSONSchema202012KeywordType: KeywordType, JSONSchema202012KeywordFormat: KeywordFormat, diff --git a/src/core/plugins/oas31/wrap-components/models.jsx b/src/core/plugins/oas31/wrap-components/models.jsx index 7388221a..70bf302e 100644 --- a/src/core/plugins/oas31/wrap-components/models.jsx +++ b/src/core/plugins/oas31/wrap-components/models.jsx @@ -26,6 +26,7 @@ const ModelsWrapper = createOnlyOAS31ComponentWrapper(({ getSystem }) => { const KeywordNot = getComponent("JSONSchema202012KeywordNot") const KeywordIf = getComponent("JSONSchema202012KeywordIf") const KeywordThen = getComponent("JSONSchema202012KeywordThen") + const KeywordElse = getComponent("JSONSchema202012KeywordElse") const KeywordProperties = getComponent("JSONSchema202012KeywordProperties") const KeywordType = getComponent("JSONSchema202012KeywordType") const KeywordFormat = getComponent("JSONSchema202012KeywordFormat") @@ -60,6 +61,7 @@ const ModelsWrapper = createOnlyOAS31ComponentWrapper(({ getSystem }) => { KeywordNot, KeywordIf, KeywordThen, + KeywordElse, KeywordProperties, KeywordType, KeywordFormat,