From 7827b85fad0ee67a4efaf23ca7ceab82e076f05a Mon Sep 17 00:00:00 2001 From: Anh Trinh Date: Wed, 26 Jul 2023 13:12:13 +1200 Subject: [PATCH] Make it works with EmberData 4.x --- addon/model-ext.js | 46 +++++++++++++++++++++++++++++++--------------- addon/utilities.js | 8 ++++---- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/addon/model-ext.js b/addon/model-ext.js index 4cdf7ed..432ef79 100644 --- a/addon/model-ext.js +++ b/addon/model-ext.js @@ -85,25 +85,40 @@ Model.reopen({ // https://github.com/emberjs/rfcs/blob/master/text/0329-deprecated-ember-evented-in-ember-data.md // Related: https://github.com/emberjs/rfcs/pull/329 - initTracking(){ + onIsNewChanged() { + if (this.isNew === false) { + this.saveOnCreate() + this.removeObserver('isNew', this, this.onIsNewChanged); + } + }, - this.didCreate = () => { - this.saveOnCreate(); - } + onIsDeletedChanged() { + if (this.isDeleted === true) { + this.clearSavedAttributes(); + this.removeObserver('isDeleted', this, this.onIsDeletedChanged); + } + }, - this.didUpdate = () => { - this.saveOnUpdate(); - } + onIsLoadedChanged() { + this.setupTrackerMetaData(); + this.setupUnknownRelationshipLoadObservers(); + this.removeObserver('isLoaded', this, this.onIsLoadedChanged); + }, - this.didDelete = () => { - this.clearSavedAttributes(); - } + initTracking(){ + // sync tracker with model on events like create/update/delete/load + if (this.isNew) { + this.addObserver('isNew', this, this.onIsNewChanged) + } + this.addObserver('isDeleted', this, this.onIsDeletedChanged) - this.ready = () => { - this.setupTrackerMetaData(); - this.setupUnknownRelationshipLoadObservers(); - }, + if (!this.isLoaded) { + this.addObserver('isLoaded', this, this.onIsLoadedChanged); + } + // there is no didUpdate hook anymore and no appropriate model props to base on + // saveOnUpdate should be called after model has been saved + // right after model Tracker.setupTracking(this); }, @@ -121,7 +136,8 @@ Model.reopen({ Tracker.setupTracking(this); Tracker.saveChanges(this, options); Tracker.triggerIsDirtyReset(this); - }, + }, + saveTrackerChanges(options) { this.saveChanges(options); diff --git a/addon/utilities.js b/addon/utilities.js index 926f194..6028df5 100644 --- a/addon/utilities.js +++ b/addon/utilities.js @@ -11,7 +11,7 @@ export const relationShipTransform = { belongsTo: { serialize(model, key, options) { let relationship = model.belongsTo(key).belongsToRelationship; - let value = relationship.hasOwnProperty('inverseRecordData') ? relationship.inverseRecordData: relationship.canonicalState; + let value = relationship.state.hasReceivedData ? relationship.localState: relationship.remoteState; return value && modelTransform(value, options.polymorphic); }, @@ -21,7 +21,7 @@ export const relationShipTransform = { hasMany: { serialize(model, key, options) { let relationship = model.hasMany(key).hasManyRelationship; - let value = relationship.currentState; + let value = relationship.localState; return value && value.map(item => modelTransform(item, options.polymorphic)); }, @@ -35,14 +35,14 @@ export const relationshipKnownState = { isKnown(model, key) { let belongsTo = model.belongsTo(key); let relationship = belongsTo.belongsToRelationship; - return !relationship.relationshipIsStale; + return !relationship.state.isStale; } }, hasMany: { isKnown(model, key) { let hasMany = model.hasMany(key); let relationship = hasMany.hasManyRelationship; - return !relationship.relationshipIsStale; + return !relationship.state.isStale; } } };