From 3514cf580e87b1e871bf818757d43501b1b3e9d7 Mon Sep 17 00:00:00 2001 From: Jacob Bullock Date: Fri, 25 May 2018 08:31:21 -0700 Subject: [PATCH 1/2] deserialize related models before adding them to the datastore --- src/models/json-api.model.ts | 26 +++++++++++++++++++++- src/services/json-api-datastore.service.ts | 2 +- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/models/json-api.model.ts b/src/models/json-api.model.ts index 7c7e193a..f286ed88 100644 --- a/src/models/json-api.model.ts +++ b/src/models/json-api.model.ts @@ -198,9 +198,33 @@ export class JsonApiModel { return peek; } - const newObject: T = new modelType(this._datastore, data); + const newObject: T = this._datastore.deserializeModel(modelType, data); this._datastore.addToStore(newObject); return newObject; } + + // public static deserialize(modelType: ModelType, data: any, datastore: JsonApiDatastore) { + // console.log('JsonApiModel.deserialize'); + // data.attributes = JsonApiModel.transformSerializedNamesToPropertyNames(modelType, data.attributes); + // return new modelType(datastore, data); + // } + // + // // tslint:disable-next-line:max-line-length + // protected static transformSerializedNamesToPropertyNames(modelType: ModelType, attributes: any) { + // const serializedNameToPropertyName = JsonApiModel.getModelPropertyNames(modelType.prototype); + // const properties: any = {}; + // + // Object.keys(serializedNameToPropertyName).forEach((serializedName) => { + // if (attributes[serializedName] !== null && attributes[serializedName] !== undefined) { + // properties[serializedNameToPropertyName[serializedName]] = attributes[serializedName]; + // } + // }); + // + // return properties; + // } + // + // protected static getModelPropertyNames(model: JsonApiModel) { + // return Reflect.getMetadata('AttributeMapping', model); + // } } diff --git a/src/services/json-api-datastore.service.ts b/src/services/json-api-datastore.service.ts index 20ceae06..eeefab4d 100644 --- a/src/services/json-api-datastore.service.ts +++ b/src/services/json-api-datastore.service.ts @@ -276,7 +276,7 @@ export class JsonApiDatastore { return models; } - protected deserializeModel(modelType: ModelType, data: any) { + public deserializeModel(modelType: ModelType, data: any) { data.attributes = this.transformSerializedNamesToPropertyNames(modelType, data.attributes); return new modelType(this, data); } From 5c12f0fa131b9dee59ae7824823fb461a0977b74 Mon Sep 17 00:00:00 2001 From: Jacob Bullock Date: Fri, 25 May 2018 08:35:06 -0700 Subject: [PATCH 2/2] removing commented, unused approach --- src/models/json-api.model.ts | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/models/json-api.model.ts b/src/models/json-api.model.ts index f286ed88..e2ca8145 100644 --- a/src/models/json-api.model.ts +++ b/src/models/json-api.model.ts @@ -203,28 +203,4 @@ export class JsonApiModel { return newObject; } - - // public static deserialize(modelType: ModelType, data: any, datastore: JsonApiDatastore) { - // console.log('JsonApiModel.deserialize'); - // data.attributes = JsonApiModel.transformSerializedNamesToPropertyNames(modelType, data.attributes); - // return new modelType(datastore, data); - // } - // - // // tslint:disable-next-line:max-line-length - // protected static transformSerializedNamesToPropertyNames(modelType: ModelType, attributes: any) { - // const serializedNameToPropertyName = JsonApiModel.getModelPropertyNames(modelType.prototype); - // const properties: any = {}; - // - // Object.keys(serializedNameToPropertyName).forEach((serializedName) => { - // if (attributes[serializedName] !== null && attributes[serializedName] !== undefined) { - // properties[serializedNameToPropertyName[serializedName]] = attributes[serializedName]; - // } - // }); - // - // return properties; - // } - // - // protected static getModelPropertyNames(model: JsonApiModel) { - // return Reflect.getMetadata('AttributeMapping', model); - // } }