From c2e712b0394dd6141bc9442dd42722ea34acba60 Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Sat, 9 Jan 2016 22:31:39 +0200 Subject: [PATCH] Isolated each component schemas --- lib/components/base.js | 18 +++++++++++++++++- lib/components/base.spec.js | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/components/base.js b/lib/components/base.js index e6e3ef81..3917271a 100644 --- a/lib/components/base.js +++ b/lib/components/base.js @@ -15,6 +15,22 @@ function safeConcat(a, b) { return res.concat(b); } +function snapshot(obj) { + if(obj == null || typeof(obj) != 'object') { + return obj; + } + + var temp = new obj.constructor(); + + for(var key in obj) { + if (obj.hasOwnProperty(key)) { + temp[key] = snapshot(obj[key]); + } + } + + return temp; +} + /** * Class decorator * Simplifies setup of component metainfo @@ -72,7 +88,7 @@ export class BaseComponent { * onInit method is run by angular2 after all component inputs are resolved */ ngOnInit() { - this.componentSchema = this.schemaMgr.byPointer(this.pointer || ''); + this.componentSchema = snapshot(this.schemaMgr.byPointer(this.pointer || '')); this.prepareModel(); this.init(); } diff --git a/lib/components/base.spec.js b/lib/components/base.spec.js index b1dc17f3..d315d6ca 100644 --- a/lib/components/base.spec.js +++ b/lib/components/base.spec.js @@ -26,7 +26,7 @@ describe('Redoc components', () => { it('should set componentSchema based on pointer on ngOnInit', () => { component.pointer = '/tags'; component.ngOnInit(); - component.componentSchema.should.be.equal(schemaMgr._schema.tags); + component.componentSchema.should.be.deepEqual(schemaMgr._schema.tags); }); it('should call prepareModel and init virtual methods after init', () => {