From 0a33bab9e957a0907a32d892671553c2ceb013c8 Mon Sep 17 00:00:00 2001 From: berdysheva Date: Fri, 9 Dec 2022 12:21:31 +0300 Subject: [PATCH 1/3] fix: shema validation --- src/schema/index.ts | 166 +++++++++++++++++++++++++------------------- 1 file changed, 93 insertions(+), 73 deletions(-) diff --git a/src/schema/index.ts b/src/schema/index.ts index 9efc39ca4..3167fd51d 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -35,12 +35,14 @@ import { PriceDetailedBlock, Quote, Divider, + BasicCard, } from './validators/sub-blocks'; import {AnimatableProps, BackgroundProps, MenuProps, withTheme} from './validators/common'; import {filteredItem} from './validators/utils'; export type SchemaBlock = object; + export interface SchemaCustomConfig { blocks?: Record; cards?: Record; @@ -57,6 +59,93 @@ export const getBlocksCases = (blocks: SchemaBlock) => { export function generateDefaultSchema(config?: SchemaCustomConfig) { const {cards = {}, blocks = {}, extensions = {}} = config ?? {}; + const blocksValidators = { + ...Divider, + ...ExtendedFeaturesBlock, + ...PromoFeaturesBlock, + ...SliderBlock, + ...QuestionsBlock, + ...HeaderBlock, + ...BannerBlock, + ...CompaniesBlock, + ...MediaBlock, + ...InfoBlock, + ...SecurityBlock, + ...TableBlock, + ...TabsBlock, + ...SimpleBlock, + ...LinkTableBlock, + ...PreviewBlock, + ...HeaderSliderBlock, + ...IconsBlock, + ...CardLayoutBlock, + ...ContentLayoutBlock, + ...ShareBlock, + }; + + const cardsValidators = { + ...PartnerBlock, + ...MediaCardBlock, + ...BannerCard, + ...PriceDetailedBlock, + ...TutorialCard, + ...BackgroundCard, + ...NewsCard, + ...CardWithImage, + ...Quote, + ...BasicCard, + }; + + const constructorBlockSchemaNames = [ + 'divider', + 'quote', + 'event', + 'post', + 'extended-features-block', + 'promo-features-block', + 'slider-block', + 'questions-block', + 'header-block', + 'banner-block', + 'companies-block', + 'media-block', + 'info-block', + 'security-block', + 'table-block', + 'tabs-block', + 'simple-block', + 'link-table-block', + 'preview-block', + 'price-detailed', + 'header-slider-block', + 'cards-with-image-block', + 'icons-block', + 'card-layout-block', + 'content-layout-block', + 'share-block', + ]; + + const constructorCardsSchemaNames = [ + 'partner', + 'media-card', + 'banner-card', + 'price-detailed', + 'tutoral-card', + 'background-card', + 'news-card', + 'card-with-image', + 'quote', + 'basic-card', + ]; + + const configBlockSchemaNames = Object.keys(blocks).filter( + (item) => !constructorBlockSchemaNames.includes(item), + ); + + const configCardSchemaNames = Object.keys(cards).filter( + (item) => !constructorCardsSchemaNames.includes(item), + ); + return { $id: 'self', definitions: { @@ -66,59 +155,12 @@ export function generateDefaultSchema(config?: SchemaCustomConfig) { properties: { type: { type: 'string', - enum: [ - 'divider', - 'quote', - 'event', - 'post', - 'extended-features-block', - 'promo-features-block', - 'slider-block', - 'questions-block', - 'header-block', - 'banner-block', - 'companies-block', - 'media-block', - 'info-block', - 'security-block', - 'table-block', - 'tabs-block', - 'simple-block', - 'link-table-block', - 'preview-block', - 'price-detailed', - 'header-slider-block', - 'cards-with-image-block', - 'icons-block', - 'card-layout-block', - 'content-layout-block', - ...Object.keys(blocks), - ], + enum: [...constructorBlockSchemaNames, ...configBlockSchemaNames], }, }, select: {$data: '0/type'}, selectCases: { - ...TabsBlock, - ...SliderBlock, - ...ExtendedFeaturesBlock, - ...PromoFeaturesBlock, - ...HeaderBlock, - ...BannerBlock, - ...CompaniesBlock, - ...MediaBlock, - ...InfoBlock, - ...QuestionsBlock, - ...SecurityBlock, - ...TableBlock, - ...SimpleBlock, - ...LinkTableBlock, - ...PreviewBlock, - ...HeaderSliderBlock, - ...IconsBlock, - ...CardLayoutBlock, - ...ContentLayoutBlock, - ...Divider, - ...ShareBlock, + ...blocksValidators, ...getBlocksCases(blocks), }, }), @@ -128,34 +170,12 @@ export function generateDefaultSchema(config?: SchemaCustomConfig) { properties: { type: { type: 'string', - enum: [ - 'partner', - 'post', - 'media-card', - 'banner-card', - 'price-detailed', - 'tutoral-card', - 'background-card', - 'news-card', - 'card-with-image', - 'quote', - 'basic-card', - ...Object.keys(cards), - ], + enum: [...constructorCardsSchemaNames, ...configCardSchemaNames], }, }, select: {$data: '0/type'}, selectCases: { - // Cards - ...PartnerBlock, - ...MediaCardBlock, - ...BannerCard, - ...PriceDetailedBlock, - ...TutorialCard, - ...BackgroundCard, - ...NewsCard, - ...CardWithImage, - ...Quote, + ...cardsValidators, ...getBlocksCases(cards), }, }), From 59c7168bb5d442bafe24918a87a283733be59eee Mon Sep 17 00:00:00 2001 From: berdysheva Date: Mon, 12 Dec 2022 17:22:39 +0300 Subject: [PATCH 2/3] fix: validator's name --- src/schema/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/schema/index.ts b/src/schema/index.ts index 3167fd51d..9f6ac0982 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -59,7 +59,7 @@ export const getBlocksCases = (blocks: SchemaBlock) => { export function generateDefaultSchema(config?: SchemaCustomConfig) { const {cards = {}, blocks = {}, extensions = {}} = config ?? {}; - const blocksValidators = { + const blockValidators = { ...Divider, ...ExtendedFeaturesBlock, ...PromoFeaturesBlock, @@ -83,7 +83,7 @@ export function generateDefaultSchema(config?: SchemaCustomConfig) { ...ShareBlock, }; - const cardsValidators = { + const cardValidators = { ...PartnerBlock, ...MediaCardBlock, ...BannerCard, @@ -160,7 +160,7 @@ export function generateDefaultSchema(config?: SchemaCustomConfig) { }, select: {$data: '0/type'}, selectCases: { - ...blocksValidators, + ...blockValidators, ...getBlocksCases(blocks), }, }), @@ -175,7 +175,7 @@ export function generateDefaultSchema(config?: SchemaCustomConfig) { }, select: {$data: '0/type'}, selectCases: { - ...cardsValidators, + ...cardValidators, ...getBlocksCases(cards), }, }), From 3fc5cd79c50f6fb0c94b8c83a04aa28abbea5d2d Mon Sep 17 00:00:00 2001 From: berdysheva Date: Mon, 12 Dec 2022 19:51:46 +0300 Subject: [PATCH 3/3] fix: constructor card names --- src/schema/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/schema/index.ts b/src/schema/index.ts index 9f6ac0982..5668a3711 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -125,7 +125,7 @@ export function generateDefaultSchema(config?: SchemaCustomConfig) { 'share-block', ]; - const constructorCardsSchemaNames = [ + const constructorCardSchemaNames = [ 'partner', 'media-card', 'banner-card', @@ -143,7 +143,7 @@ export function generateDefaultSchema(config?: SchemaCustomConfig) { ); const configCardSchemaNames = Object.keys(cards).filter( - (item) => !constructorCardsSchemaNames.includes(item), + (item) => !constructorCardSchemaNames.includes(item), ); return { @@ -170,7 +170,7 @@ export function generateDefaultSchema(config?: SchemaCustomConfig) { properties: { type: { type: 'string', - enum: [...constructorCardsSchemaNames, ...configCardSchemaNames], + enum: [...constructorCardSchemaNames, ...configCardSchemaNames], }, }, select: {$data: '0/type'},