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' ;
2
4
3
5
// This is for reference in our post-save promise
4
6
// We need to unload these records after save, otherwise
@@ -15,13 +17,14 @@ const iterateRelations = function(record, relations, callback) {
15
17
let kind = metadata . kind ;
16
18
let relatedRecord = record . get ( relationName ) ;
17
19
let manyToManyDeleted = record . manyToManyMarkedForDeletionModels ( relationName ) ;
20
+ let isManyToOneDelete = record . markedForManyToOneDeletion ( relationName ) ;
18
21
19
22
if ( metadata . options . async !== false ) {
20
23
relatedRecord = relatedRecord . get ( 'content' ) ;
21
24
}
22
25
23
26
if ( relatedRecord ) {
24
- callback ( relationName , kind , relatedRecord , subRelations , manyToManyDeleted ) ;
27
+ callback ( relationName , kind , relatedRecord , subRelations , manyToManyDeleted , isManyToOneDelete ) ;
25
28
}
26
29
} ) ;
27
30
} ;
@@ -51,7 +54,7 @@ const attributesFor = function(record) {
51
54
return record . transformJsonapiAttrs ? record . transformJsonapiAttrs ( attrs ) : attrs ;
52
55
} ;
53
56
54
- const jsonapiPayload = function ( record , isManyToManyDelete ) {
57
+ const jsonapiPayload = function ( record , relationshipMarkedForDeletion ) {
55
58
let attributes = attributesFor ( record ) ;
56
59
57
60
let payload = { type : record . jsonapiType ( ) } ;
@@ -67,7 +70,7 @@ const jsonapiPayload = function(record, isManyToManyDelete) {
67
70
else if ( record . get ( 'markedForDestruction' ) ) {
68
71
payload [ 'method' ] = 'destroy' ;
69
72
}
70
- else if ( record . get ( 'markedForDeletion' ) || isManyToManyDelete ) {
73
+ else if ( record . get ( 'markedForDeletion' ) || relationshipMarkedForDeletion ) {
71
74
payload [ 'method' ] = 'disassociate' ;
72
75
}
73
76
else if ( record . get ( 'currentState.isDirty' ) ) {
@@ -82,14 +85,14 @@ const jsonapiPayload = function(record, isManyToManyDelete) {
82
85
} ;
83
86
84
87
const payloadForInclude = function ( payload ) {
85
- let payloadCopy = Ember . copy ( payload , true ) ;
88
+ let payloadCopy = copy ( payload , true ) ;
86
89
delete ( payloadCopy . method ) ;
87
90
88
91
return payloadCopy ;
89
92
} ;
90
93
91
94
const payloadForRelationship = function ( payload ) {
92
- let payloadCopy = Ember . copy ( payload , true ) ;
95
+ let payloadCopy = copy ( payload , true ) ;
93
96
delete ( payloadCopy . attributes ) ;
94
97
delete ( payloadCopy . relationships ) ;
95
98
@@ -129,21 +132,21 @@ const hasManyData = function(relationName, relatedRecords, subRelations, manyToM
129
132
return { data : payloads } ;
130
133
} ;
131
134
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 ) ;
134
137
processRelationships ( subRelations , payload , relatedRecord , includedRecords ) ;
135
138
addToIncludes ( payload , includedRecords ) ;
136
139
137
140
return { data : payloadForRelationship ( payload ) } ;
138
141
} ;
139
142
140
- const processRelationship = function ( name , kind , relationData , subRelations , manyToManyDeleted , includedRecords , callback ) {
143
+ const processRelationship = function ( name , kind , relationData , subRelations , manyToManyDeleted , isManyToOneDelete , includedRecords , callback ) {
141
144
let payload = null ;
142
145
143
146
if ( kind === 'hasMany' ) {
144
147
payload = hasManyData ( name , relationData , subRelations , manyToManyDeleted , includedRecords ) ;
145
148
} else {
146
- payload = belongsToData ( relationData , subRelations , includedRecords ) ;
149
+ payload = belongsToData ( relationData , subRelations , isManyToOneDelete , includedRecords ) ;
147
150
}
148
151
149
152
if ( payload && payload . data ) {
@@ -155,8 +158,8 @@ const processRelationships = function(relationshipHash, jsonData, record, includ
155
158
if ( isPresentObject ( relationshipHash ) ) {
156
159
jsonData . relationships = { } ;
157
160
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 ) => {
160
163
let serializer = record . store . serializerFor ( record . constructor . modelName ) ;
161
164
let serializedName = serializer . keyForRelationship ( name ) ;
162
165
jsonData . relationships [ serializedName ] = payload ;
@@ -173,7 +176,7 @@ const relationshipsDirective = function(value) {
173
176
directive [ value ] = { } ;
174
177
} else if ( Array . isArray ( value ) ) {
175
178
value . forEach ( ( key ) => {
176
- Ember . merge ( directive , relationshipsDirective ( key ) ) ;
179
+ merge ( directive , relationshipsDirective ( key ) ) ;
177
180
} ) ;
178
181
} else {
179
182
Object . keys ( value ) . forEach ( ( key ) => {
@@ -187,7 +190,7 @@ const relationshipsDirective = function(value) {
187
190
return directive ;
188
191
} ;
189
192
190
- export default Ember . Mixin . create ( {
193
+ export default Mixin . create ( {
191
194
serialize ( snapshot /*, options */ ) {
192
195
savedRecords = [ ] ;
193
196
0 commit comments