From 7c33cb0e57a656ae704abfd6e57f51158be1252e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Gorej?= Date: Mon, 8 May 2023 12:58:08 +0200 Subject: [PATCH] feat(json-schema-2020-12): add support for validation keywords for arrays (#8626) Includes following keywords: - maxItems - maxItems - uniqueItems - maxContains - minContains Refs #8513 --- .../components/keywords/Contains.jsx | 11 ++++---- src/core/plugins/json-schema-2020-12/fn.js | 26 ++++++++++++++----- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/core/plugins/json-schema-2020-12/components/keywords/Contains.jsx b/src/core/plugins/json-schema-2020-12/components/keywords/Contains.jsx index f58d4f50..ac1af84b 100644 --- a/src/core/plugins/json-schema-2020-12/components/keywords/Contains.jsx +++ b/src/core/plugins/json-schema-2020-12/components/keywords/Contains.jsx @@ -9,17 +9,18 @@ import { useFn, useComponent } from "../../hooks" const Contains = ({ schema }) => { const fn = useFn() const JSONSchema = useComponent("JSONSchema") - const name = ( - - Contains - - ) /** * Rendering. */ if (!fn.hasKeyword(schema, "contains")) return null + const name = ( + + Contains + + ) + return (
diff --git a/src/core/plugins/json-schema-2020-12/fn.js b/src/core/plugins/json-schema-2020-12/fn.js index dd02fad4..dd378633 100644 --- a/src/core/plugins/json-schema-2020-12/fn.js +++ b/src/core/plugins/json-schema-2020-12/fn.js @@ -256,19 +256,33 @@ export const stringifyConstraints = (schema) => { const constraints = [] // validation Keywords for Numeric Instances (number and integer) - const constraintMultipleOf = stringifyConstraintMultipleOf(schema) - if (constraintMultipleOf !== null) constraints.push(constraintMultipleOf) - const constraintNumberRange = stringifyConstraintNumberRange(schema) - if (constraintNumberRange !== null) constraints.push(constraintNumberRange) + const multipleOf = stringifyConstraintMultipleOf(schema) + if (multipleOf !== null) constraints.push(multipleOf) + const numberRange = stringifyConstraintNumberRange(schema) + if (numberRange !== null) constraints.push(numberRange) // validation Keywords for Strings - const constraintStringRange = stringifyConstraintRange( + const stringRange = stringifyConstraintRange( "characters", schema?.minLength, schema?.maxLength ) - if (constraintStringRange !== null) constraints.push(constraintStringRange) + if (stringRange !== null) constraints.push(stringRange) if (schema?.pattern) constraints.push(`matches ${schema?.pattern}`) + // validation Keywords for Arrays + const arrayRange = stringifyConstraintRange( + schema?.hasUniqueItems ? "unique items" : "items", + schema?.minItems, + schema?.maxItems + ) + if (arrayRange !== null) constraints.push(arrayRange) + const containsRange = stringifyConstraintRange( + "contained items", + schema?.minContains, + schema?.maxContains + ) + if (containsRange !== null) constraints.push(containsRange) + return constraints }