@@ -26,8 +26,8 @@ type Value = string | number | boolean | null | undefined | object | Value[];
26
26
*/
27
27
export interface QueryResultData {
28
28
[ key : string ] : Value ;
29
- __typename ? : string ;
30
- __id ? : string ;
29
+ __typename : string ;
30
+ __id : string ;
31
31
}
32
32
33
33
/**
@@ -68,7 +68,15 @@ export class BackingDataObject {
68
68
private serverValues : Map < string , Value > ;
69
69
70
70
/** A list of listeners (StubDataObjects) that need to be updated when values change. */
71
- listeners : Set < StubDataObject > ;
71
+ private listeners : Set < StubDataObject > ;
72
+ /** Add a listener to this BDO */
73
+ addListener ( listener : StubDataObject ) : void {
74
+ this . listeners . add ( listener ) ;
75
+ }
76
+ /** Remove a listener from this BDO */
77
+ removeListener ( listener : StubDataObject ) : void {
78
+ this . listeners . delete ( listener ) ;
79
+ }
72
80
73
81
constructor (
74
82
typedKey : string ,
@@ -173,13 +181,15 @@ export class Cache {
173
181
for ( const key in queryResult . data ) {
174
182
const queryData = queryResult . data [ key ] ;
175
183
if ( Array . isArray ( queryData ) ) {
184
+ const sdoList : StubDataObjectList = [ ] ;
176
185
queryData . forEach ( qd => {
177
186
const sdo : StubDataObject = {
178
187
...qd
179
188
// todo: add in non-cacheable fields
180
189
} ;
181
- stubResultTree [ key ] = sdo ;
190
+ sdoList . push ( sdo ) ;
182
191
const bdo : BackingDataObject = this . updateBdoCache ( qd , sdo ) ;
192
+ stubResultTree [ key ] = sdoList ;
183
193
} ) ;
184
194
} else {
185
195
const sdo : StubDataObject = {
@@ -211,7 +221,7 @@ export class Cache {
211
221
// key = "id" or "title", etc.
212
222
backingDataObject . updateFromServer ( value , key ) ;
213
223
}
214
- backingDataObject . listeners . add ( stubDataObject ) ;
224
+ backingDataObject . addListener ( stubDataObject ) ;
215
225
} else {
216
226
// BDO does not exist, so create a new one.
217
227
const serverValues = new Map < string , Value > ( Object . entries ( data ) ) ;
0 commit comments