@@ -11,16 +11,18 @@ const iterateRelations = function(record, relations, callback) {
11
11
Object . keys ( relations ) . forEach ( ( relationName ) => {
12
12
let subRelations = relations [ relationName ] ;
13
13
14
- let metadata = record . relationshipFor ( relationName ) ;
15
- let kind = metadata . kind ;
16
- let relatedRecord = record . get ( relationName ) ;
14
+ let metadata = record . relationshipFor ( relationName ) ;
15
+ let kind = metadata . kind ;
16
+ let relatedRecord = record . get ( relationName ) ;
17
+ let manyToManyDeleted = record . manyToManyMarkedForDeletion ( relationName ) ;
18
+
17
19
18
20
if ( metadata . options . async !== false ) {
19
21
relatedRecord = relatedRecord . get ( 'content' ) ;
20
22
}
21
23
22
24
if ( relatedRecord ) {
23
- callback ( relationName , kind , relatedRecord , subRelations ) ;
25
+ callback ( relationName , kind , relatedRecord , subRelations , manyToManyDeleted ) ;
24
26
}
25
27
} ) ;
26
28
} ;
@@ -29,7 +31,7 @@ const isPresentObject = function(val) {
29
31
return val && Object . keys ( val ) . length > 0 ;
30
32
} ;
31
33
32
- const attributesFor = function ( record ) {
34
+ const attributesFor = function ( record , isManyToManyDelete ) {
33
35
let attrs = { } ;
34
36
35
37
let changes = record . changedAttributes ( ) ;
@@ -43,7 +45,7 @@ const attributesFor = function(record) {
43
45
}
44
46
} ) ;
45
47
46
- if ( record . get ( 'markedForDeletion' ) ) {
48
+ if ( record . get ( 'markedForDeletion' ) || isManyToManyDelete ) {
47
49
attrs = { _delete : true } ;
48
50
}
49
51
@@ -54,8 +56,8 @@ const attributesFor = function(record) {
54
56
return attrs ;
55
57
} ;
56
58
57
- const jsonapiPayload = function ( record ) {
58
- let attributes = attributesFor ( record ) ;
59
+ const jsonapiPayload = function ( record , isManyToManyDelete ) {
60
+ let attributes = attributesFor ( record , isManyToManyDelete ) ;
59
61
60
62
let payload = { type : record . jsonapiType ( ) } ;
61
63
@@ -70,11 +72,11 @@ const jsonapiPayload = function(record) {
70
72
return payload ;
71
73
} ;
72
74
73
- const hasManyData = function ( relationName , relatedRecords , subRelations ) {
75
+ const hasManyData = function ( relationName , relatedRecords , subRelations , manyToManyDeleted ) {
74
76
let payloads = [ ] ;
75
77
savedRecords [ relationName ] = [ ] ;
76
78
relatedRecords . forEach ( ( relatedRecord ) => {
77
- let payload = jsonapiPayload ( relatedRecord ) ;
79
+ let payload = jsonapiPayload ( relatedRecord , manyToManyDeleted && manyToManyDeleted . includes ( relatedRecord ) ) ;
78
80
processRelationships ( subRelations , payload , relatedRecord ) ;
79
81
payloads . push ( payload ) ;
80
82
savedRecords [ relationName ] . push ( relatedRecord ) ;
@@ -88,11 +90,11 @@ const belongsToData = function(relatedRecord, subRelations) {
88
90
return { data : payload } ;
89
91
} ;
90
92
91
- const processRelationship = function ( name , kind , relationData , subRelations , callback ) {
93
+ const processRelationship = function ( name , kind , relationData , subRelations , manyToManyDeleted , callback ) {
92
94
let payload = null ;
93
95
94
96
if ( kind === 'hasMany' ) {
95
- payload = hasManyData ( name , relationData , subRelations ) ;
97
+ payload = hasManyData ( name , relationData , subRelations , manyToManyDeleted ) ;
96
98
} else {
97
99
payload = belongsToData ( relationData , subRelations ) ;
98
100
}
@@ -106,8 +108,8 @@ const processRelationships = function(relationshipHash, jsonData, record) {
106
108
if ( isPresentObject ( relationshipHash ) ) {
107
109
jsonData . relationships = { } ;
108
110
109
- iterateRelations ( record , relationshipHash , ( name , kind , related , subRelations ) => {
110
- processRelationship ( name , kind , related , subRelations , ( payload ) => {
111
+ iterateRelations ( record , relationshipHash , ( name , kind , related , subRelations , manyToManyDeleted ) => {
112
+ processRelationship ( name , kind , related , subRelations , manyToManyDeleted , ( payload ) => {
111
113
let serializer = record . store . serializerFor ( record . constructor . modelName ) ;
112
114
let serializedName = serializer . keyForRelationship ( name ) ;
113
115
jsonData . relationships [ serializedName ] = payload ;
0 commit comments