@@ -40,6 +40,7 @@ type Data = {
4040 userInfo : UserInfoState ;
4141 filters : DestinationFilters ;
4242 pendingEvents : SegmentEvent [ ] ;
43+ enabled : boolean ;
4344} ;
4445
4546const INITIAL_VALUES : Data = {
@@ -54,6 +55,7 @@ const INITIAL_VALUES: Data = {
5455 traits : undefined ,
5556 } ,
5657 pendingEvents : [ ] ,
58+ enabled : true ,
5759} ;
5860
5961const isEverythingReady = ( state : ReadinessStore ) =>
@@ -185,6 +187,9 @@ export class SovranStorage implements Storage {
185187 Settable < SegmentEvent [ ] > &
186188 Queue < SegmentEvent , SegmentEvent [ ] > ;
187189
190+ readonly enabledStore : Store < { enabled : boolean } > ;
191+ readonly enabled : Watchable < boolean > & Settable < boolean > ;
192+
188193 constructor ( config : StorageConfig ) {
189194 this . storeId = config . storeId ;
190195 this . storePersistor = config . storePersistor ;
@@ -195,6 +200,7 @@ export class SovranStorage implements Storage {
195200 hasRestoredUserInfo : false ,
196201 hasRestoredFilters : false ,
197202 hasRestoredPendingEvents : false ,
203+ hasRestoredEnabled : false ,
198204 } ) ;
199205
200206 const markAsReadyGenerator = ( key : keyof ReadinessStore ) => ( ) => {
@@ -490,6 +496,47 @@ export class SovranStorage implements Storage {
490496 this . deepLinkStore . subscribe ( callback ) ,
491497 } ;
492498
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+
493540 this . fixAnonymousId ( ) ;
494541 }
495542
0 commit comments