1- import Ember from 'ember' ;
1+ import Mixin from '@ember/object/mixin' ;
2+ import { copy } from '@ember/object/internals' ;
3+ import { merge } from '@ember/polyfills' ;
24
35// This is for reference in our post-save promise
46// We need to unload these records after save, otherwise
@@ -15,13 +17,14 @@ const iterateRelations = function(record, relations, callback) {
1517 let kind = metadata . kind ;
1618 let relatedRecord = record . get ( relationName ) ;
1719 let manyToManyDeleted = record . manyToManyMarkedForDeletionModels ( relationName ) ;
20+ let isManyToOneDelete = record . markedForManyToOneDeletion ( relationName ) ;
1821
1922 if ( metadata . options . async !== false ) {
2023 relatedRecord = relatedRecord . get ( 'content' ) ;
2124 }
2225
2326 if ( relatedRecord ) {
24- callback ( relationName , kind , relatedRecord , subRelations , manyToManyDeleted ) ;
27+ callback ( relationName , kind , relatedRecord , subRelations , manyToManyDeleted , isManyToOneDelete ) ;
2528 }
2629 } ) ;
2730} ;
@@ -51,7 +54,7 @@ const attributesFor = function(record) {
5154 return record . transformJsonapiAttrs ? record . transformJsonapiAttrs ( attrs ) : attrs ;
5255} ;
5356
54- const jsonapiPayload = function ( record , isManyToManyDelete ) {
57+ const jsonapiPayload = function ( record , relationshipMarkedForDeletion ) {
5558 let attributes = attributesFor ( record ) ;
5659
5760 let payload = { type : record . jsonapiType ( ) } ;
@@ -67,7 +70,7 @@ const jsonapiPayload = function(record, isManyToManyDelete) {
6770 else if ( record . get ( 'markedForDestruction' ) ) {
6871 payload [ 'method' ] = 'destroy' ;
6972 }
70- else if ( record . get ( 'markedForDeletion' ) || isManyToManyDelete ) {
73+ else if ( record . get ( 'markedForDeletion' ) || relationshipMarkedForDeletion ) {
7174 payload [ 'method' ] = 'disassociate' ;
7275 }
7376 else if ( record . get ( 'currentState.isDirty' ) ) {
@@ -82,14 +85,14 @@ const jsonapiPayload = function(record, isManyToManyDelete) {
8285} ;
8386
8487const payloadForInclude = function ( payload ) {
85- let payloadCopy = Ember . copy ( payload , true ) ;
88+ let payloadCopy = copy ( payload , true ) ;
8689 delete ( payloadCopy . method ) ;
8790
8891 return payloadCopy ;
8992} ;
9093
9194const payloadForRelationship = function ( payload ) {
92- let payloadCopy = Ember . copy ( payload , true ) ;
95+ let payloadCopy = copy ( payload , true ) ;
9396 delete ( payloadCopy . attributes ) ;
9497 delete ( payloadCopy . relationships ) ;
9598
@@ -129,21 +132,21 @@ const hasManyData = function(relationName, relatedRecords, subRelations, manyToM
129132 return { data : payloads } ;
130133} ;
131134
132- const belongsToData = function ( relatedRecord , subRelations , includedRecords ) {
133- let payload = jsonapiPayload ( relatedRecord ) ;
135+ const belongsToData = function ( relatedRecord , subRelations , isManyToOneDelete , includedRecords ) {
136+ let payload = jsonapiPayload ( relatedRecord , isManyToOneDelete ) ;
134137 processRelationships ( subRelations , payload , relatedRecord , includedRecords ) ;
135138 addToIncludes ( payload , includedRecords ) ;
136139
137140 return { data : payloadForRelationship ( payload ) } ;
138141} ;
139142
140- const processRelationship = function ( name , kind , relationData , subRelations , manyToManyDeleted , includedRecords , callback ) {
143+ const processRelationship = function ( name , kind , relationData , subRelations , manyToManyDeleted , isManyToOneDelete , includedRecords , callback ) {
141144 let payload = null ;
142145
143146 if ( kind === 'hasMany' ) {
144147 payload = hasManyData ( name , relationData , subRelations , manyToManyDeleted , includedRecords ) ;
145148 } else {
146- payload = belongsToData ( relationData , subRelations , includedRecords ) ;
149+ payload = belongsToData ( relationData , subRelations , isManyToOneDelete , includedRecords ) ;
147150 }
148151
149152 if ( payload && payload . data ) {
@@ -155,8 +158,8 @@ const processRelationships = function(relationshipHash, jsonData, record, includ
155158 if ( isPresentObject ( relationshipHash ) ) {
156159 jsonData . relationships = { } ;
157160
158- iterateRelations ( record , relationshipHash , ( name , kind , related , subRelations , manyToManyDeleted ) => {
159- processRelationship ( name , kind , related , subRelations , manyToManyDeleted , includedRecords , ( payload ) => {
161+ iterateRelations ( record , relationshipHash , ( name , kind , related , subRelations , manyToManyDeleted , isManyToOneDelete ) => {
162+ processRelationship ( name , kind , related , subRelations , manyToManyDeleted , isManyToOneDelete , includedRecords , ( payload ) => {
160163 let serializer = record . store . serializerFor ( record . constructor . modelName ) ;
161164 let serializedName = serializer . keyForRelationship ( name ) ;
162165 jsonData . relationships [ serializedName ] = payload ;
@@ -173,7 +176,7 @@ const relationshipsDirective = function(value) {
173176 directive [ value ] = { } ;
174177 } else if ( Array . isArray ( value ) ) {
175178 value . forEach ( ( key ) => {
176- Ember . merge ( directive , relationshipsDirective ( key ) ) ;
179+ merge ( directive , relationshipsDirective ( key ) ) ;
177180 } ) ;
178181 } else {
179182 Object . keys ( value ) . forEach ( ( key ) => {
@@ -187,7 +190,7 @@ const relationshipsDirective = function(value) {
187190 return directive ;
188191} ;
189192
190- export default Ember . Mixin . create ( {
193+ export default Mixin . create ( {
191194 serialize ( snapshot /*, options */ ) {
192195 savedRecords = [ ] ;
193196
0 commit comments