@@ -2,6 +2,11 @@ import Service, { inject as service } from '@ember/service';
22import { LOCAL_STORAGE_SUPPORTED } from './storage/local' ;
33import type LocalStorageService from './storage/local' ;
44import type MemoryStorageService from './storage/memory' ;
5+ import { tracked } from '@glimmer/tracking' ;
6+
7+ function consumeTracked ( value : never ) : never {
8+ return value ;
9+ }
510
611/**
712 * Service that wraps either the LocalStorageService or
@@ -12,13 +17,15 @@ import type MemoryStorageService from './storage/memory';
1217export default class StorageService extends Service {
1318 @service ( LOCAL_STORAGE_SUPPORTED ? 'storage/local' : 'storage/memory' )
1419 declare backend : LocalStorageService | MemoryStorageService ;
20+ @tracked changed = 1 ;
1521
1622 /**
1723 * Reads a stored object for a give key, if any.
1824 *
1925 * @return {Option<String> } The value, if found
2026 */
2127 getItem ( key : keyof object ) {
28+ consumeTracked ( this . changed ) ;
2229 const serialized = this . backend . getItem ( key ) ;
2330
2431 if ( serialized === null ) {
@@ -33,6 +40,7 @@ export default class StorageService extends Service {
3340 * Store a string for a given key.
3441 */
3542 setItem ( key : keyof object , value : string ) {
43+ this . changed += 1 ;
3644 if ( value === undefined ) {
3745 this . removeItem ( key ) ;
3846 } else {
@@ -45,6 +53,7 @@ export default class StorageService extends Service {
4553 * Deletes the stored string for a given key.
4654 */
4755 removeItem ( key : keyof object ) {
56+ this . changed += 1 ;
4857 this . backend . removeItem ( key ) ;
4958 }
5059
@@ -54,6 +63,7 @@ export default class StorageService extends Service {
5463 * @return {Array<String> } The array of keys
5564 */
5665 keys ( ) {
66+ consumeTracked ( this . changed ) ;
5767 return this . backend . keys ( ) ;
5868 }
5969}
0 commit comments