@@ -26,8 +26,8 @@ type Value = string | number | boolean | null | undefined | object | Value[];
2626 */
2727export interface QueryResultData {
2828 [ key : string ] : Value ;
29- __typename ? : string ;
30- __id ? : string ;
29+ __typename : string ;
30+ __id : string ;
3131}
3232
3333/**
@@ -68,7 +68,15 @@ export class BackingDataObject {
6868 private serverValues : Map < string , Value > ;
6969
7070 /** 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+ }
7280
7381 constructor (
7482 typedKey : string ,
@@ -173,13 +181,15 @@ export class Cache {
173181 for ( const key in queryResult . data ) {
174182 const queryData = queryResult . data [ key ] ;
175183 if ( Array . isArray ( queryData ) ) {
184+ const sdoList : StubDataObjectList = [ ] ;
176185 queryData . forEach ( qd => {
177186 const sdo : StubDataObject = {
178187 ...qd
179188 // todo: add in non-cacheable fields
180189 } ;
181- stubResultTree [ key ] = sdo ;
190+ sdoList . push ( sdo ) ;
182191 const bdo : BackingDataObject = this . updateBdoCache ( qd , sdo ) ;
192+ stubResultTree [ key ] = sdoList ;
183193 } ) ;
184194 } else {
185195 const sdo : StubDataObject = {
@@ -211,7 +221,7 @@ export class Cache {
211221 // key = "id" or "title", etc.
212222 backingDataObject . updateFromServer ( value , key ) ;
213223 }
214- backingDataObject . listeners . add ( stubDataObject ) ;
224+ backingDataObject . addListener ( stubDataObject ) ;
215225 } else {
216226 // BDO does not exist, so create a new one.
217227 const serverValues = new Map < string , Value > ( Object . entries ( data ) ) ;
0 commit comments