package Ġmob x . core Ċ Ċ /** Ċ Ġ* ĠUseful Ġfor Ġone - off Ġeffects . ĠThe Ġpredicate Ġfunction Ġis Ġevaluated Ġany time Ġits Ġdependent Ġobservable s Ċ Ġ* Ġchange . ĠIt Ġexecutes Ġeffect Ġfunction Ġonly Ġwhen Ġthe Ġpredicate Ġfunction Ġreturns Ġtrue . ĠWhen Ġdis poses Ċ Ġ* Ġitself Ġafter Ġthe Ġeffect Ġfunction . Ċ Ġ*/ Ċ /** Ċ Ġ* ĠTO - DO Ġadd Ġwhen Ġwith ĠPromise Ċ Ġ*/ Ċ type alias ĠWhen Predicate Ġ= Ġ() Ġ-> ĠBoolean Ċ Ċ class ĠWhen ( predicate : ĠWhen Predicate , Ġside Effect : Ġ() Ġ-> ĠUnit ) Ġ: ĊĠĠĠ ĠDis posable Ġ{ ĊĠĠĠ Ġ// Ġto Ġprevent Ġcrash Ġwhen Ġit Ġis Ġdisposed Ġon Ġcreation ĊĠĠĠ Ġprivate Ġvar Ġinternal Disposable : ĠDis posable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdisposed Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġdis posable Ġ= ĠRe action ( ĊĠĠĠĠĠĠĠ Ġdata Callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpredicate () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġeffect Ġ= Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Disposable ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisposed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġside Effect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Disposable Ġ= Ġdis posable ĊĠĠĠĠĠĠĠ Ġif Ġ( dis posed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable . dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis posable . dispose () ĊĠĠĠ Ġ} Ċ } Ċ