From 2bc729ea23edf0772377e1c71d7da5040897210d Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Tue, 30 Aug 2016 18:38:57 +0300 Subject: [PATCH] Fix array inside objects if referenced directly (fixes #84) --- lib/components/JsonSchema/json-schema.ts | 2 +- lib/services/schema-helper.service.ts | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/components/JsonSchema/json-schema.ts b/lib/components/JsonSchema/json-schema.ts index 2a1f72a1..1d8acc4a 100644 --- a/lib/components/JsonSchema/json-schema.ts +++ b/lib/components/JsonSchema/json-schema.ts @@ -66,8 +66,8 @@ export class JsonSchema extends BaseComponent implements OnInit { this.applyStyling(); this.schema = this.normalizer.normalize(this.schema, this.normPointer); - this.initDescendants(); this.schema = SchemaHelper.unwrapArray(this.schema, this.normPointer); + this.initDescendants(); this.preprocessSchema(); } diff --git a/lib/services/schema-helper.service.ts b/lib/services/schema-helper.service.ts index 6b0f64b1..81b4e180 100644 --- a/lib/services/schema-helper.service.ts +++ b/lib/services/schema-helper.service.ts @@ -67,11 +67,15 @@ const injectors = { return propertySchema.type === 'array' && !Array.isArray(propertySchema.items); }, inject: (injectTo, propertySchema = injectTo, propPointer) => { - injectTo._isArray = true; - injectTo._pointer = propertySchema.items._pointer - || JsonPointer.join(propertySchema._pointer || propPointer, ['items']); + if (!(SchemaHelper.detectType(propertySchema.items) === 'object')) { + injectTo._isArray = true; + injectTo._pointer = propertySchema.items._pointer + || JsonPointer.join(propertySchema._pointer || propPointer, ['items']); - SchemaHelper.runInjectors(injectTo, propertySchema.items, propPointer); + SchemaHelper.runInjectors(injectTo, propertySchema.items, propPointer); + } else { + injectors.object.inject(injectTo, propertySchema.items); + } injectTo._widgetType = 'array'; } }, @@ -270,6 +274,7 @@ export class SchemaHelper { } static detectType(schema) { + if (schema.type) return schema.type; let keywords = Object.keys(keywordTypes); for (var i=0; i < keywords.length; i++) { let keyword = keywords[i];