@@ -40,6 +40,7 @@ type Data = {
40
40
userInfo : UserInfoState ;
41
41
filters : DestinationFilters ;
42
42
pendingEvents : SegmentEvent [ ] ;
43
+ enabled : boolean ;
43
44
} ;
44
45
45
46
const INITIAL_VALUES : Data = {
@@ -54,6 +55,7 @@ const INITIAL_VALUES: Data = {
54
55
traits : undefined ,
55
56
} ,
56
57
pendingEvents : [ ] ,
58
+ enabled : true ,
57
59
} ;
58
60
59
61
const isEverythingReady = ( state : ReadinessStore ) =>
@@ -185,6 +187,9 @@ export class SovranStorage implements Storage {
185
187
Settable < SegmentEvent [ ] > &
186
188
Queue < SegmentEvent , SegmentEvent [ ] > ;
187
189
190
+ readonly enabledStore : Store < { enabled : boolean } > ;
191
+ readonly enabled : Watchable < boolean > & Settable < boolean > ;
192
+
188
193
constructor ( config : StorageConfig ) {
189
194
this . storeId = config . storeId ;
190
195
this . storePersistor = config . storePersistor ;
@@ -195,6 +200,7 @@ export class SovranStorage implements Storage {
195
200
hasRestoredUserInfo : false ,
196
201
hasRestoredFilters : false ,
197
202
hasRestoredPendingEvents : false ,
203
+ hasRestoredEnabled : false ,
198
204
} ) ;
199
205
200
206
const markAsReadyGenerator = ( key : keyof ReadinessStore ) => ( ) => {
@@ -490,6 +496,47 @@ export class SovranStorage implements Storage {
490
496
this . deepLinkStore . subscribe ( callback ) ,
491
497
} ;
492
498
499
+ this . enabledStore = createStore (
500
+ { enabled : INITIAL_VALUES . enabled } ,
501
+ {
502
+ persist : {
503
+ storeId : `${ this . storeId } -enabled` ,
504
+ persistor : this . storePersistor ,
505
+ saveDelay : this . storePersistorSaveDelay ,
506
+ onInitialized : markAsReadyGenerator ( 'hasRestoredEnabled' ) ,
507
+ } ,
508
+ }
509
+ ) ;
510
+ // Accessor object for enabled
511
+ this . enabled = {
512
+ get : createGetter (
513
+ ( ) => {
514
+ const state = this . enabledStore . getState ( ) ;
515
+ return state . enabled ;
516
+ } ,
517
+ async ( ) => {
518
+ const value = await this . enabledStore . getState ( true ) ;
519
+ return value . enabled ;
520
+ }
521
+ ) ,
522
+
523
+ onChange : ( callback : ( value : boolean ) => void ) => {
524
+ return this . enabledStore . subscribe ( ( store ) => {
525
+ callback ( store . enabled ) ;
526
+ } ) ;
527
+ } ,
528
+
529
+ set : async ( value : boolean | ( ( prev : boolean ) => boolean ) ) => {
530
+ const { enabled } = await this . enabledStore . dispatch ( ( state ) => {
531
+ const newEnabled =
532
+ value instanceof Function ? value ( state . enabled ) : value ;
533
+ return { enabled : newEnabled } ;
534
+ } ) ;
535
+ return enabled ;
536
+ } ,
537
+ } ;
538
+
539
+
493
540
this . fixAnonymousId ( ) ;
494
541
}
495
542
0 commit comments