package Ġdev . gar age . rpm Ċ Ċ import Ġcom . bad oo . reak t ive . observable .* Ċ import Ġcom . bad oo . reak t ive . scheduler . main Scheduler Ċ import Ġcom . bad oo . reak t ive . subject . publish . Publish Subject Ċ Ċ /** Ċ Ġ* ĠReactive Ġproperty Ġfor Ġthe Ġactions Ġfrom Ġthe Ġ[ view ][ Pm View ]. Ċ Ġ* ĠCan Ġbe Ġchanged Ġand Ġobserved Ġin Ġreactive Ġmanner Ġwith Ġit 's Ġ[ consumer ] Ġand Ġ[ Presentation Model . observable ]. Ċ Ġ* Ċ Ġ* ĠUse Ġto Ġsend Ġactions Ġof Ġthe Ġview , Ġe . g . Ġsome Ġwidget 's Ġclicks . Ċ Ġ* Ċ Ġ* Ġ@ see ĠState Ċ Ġ* Ġ@ see ĠCommand Ċ Ġ*/ Ċ class ĠAction < T > Ġinternal Ġconstructor ( internal Ġval Ġpm : ĠPresentation Model ) Ġ{ ĊĊĠĠĠ Ġinternal Ġval Ġrelay Ġ= ĠPublish Subject < T >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConsumer Ġof Ġthe Ġ[ Action ][ Action ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġconsumer Ġget () Ġ= Ġrelay . consumer Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġthe Ġ[ Action ]. Ċ Ġ* ĠOptionally Ġsub scri bes Ġthe Ġ[ action Ġchain ][ action Chain ] Ġto Ġthis Ġaction . Ċ Ġ* ĠThis Ġchain Ġwill Ġbe Ġun subscribed ĠON Ġ[ DESTROY ][ Presentation Model . Lifecycle . DESTROY ED ]. Ċ Ġ*/ Ċ fun Ġ< T > ĠPresentation Model . action ( ĊĠĠĠ Ġaction Chain : Ġ( Observable < T >. () Ġ-> ĠObservable <* >) ? Ġ= Ġnull Ċ ): ĠAction < T > Ġ{ ĊĠĠĠ Ġval Ġaction Ġ= ĠAction < T >( pm Ġ= Ġthis ) ĊĊĠĠĠ Ġif Ġ( action Chain Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Observable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ== ĠPresentation Model . Lifecycle . CREATED Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Chain . let Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . relay ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. chain () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. retry () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. until Destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġaction Ċ } Ċ Ċ /** Ċ Ġ* ĠSub scri bes Ġ[ Action ][ Action ] Ġto Ġthe Ġobservable Ġand Ġadds Ġit Ġto Ġthe Ġsubscriptions Ġlist Ċ Ġ* Ġthat Ġwill Ġbe ĠC LE ARE D ĠON Ġ[ UN BIND ][ Presentation Model . Lifecycle . UN BIN DED ], Ċ Ġ* Ġso Ġuse Ġit ĠONLY Ġin Ġ[ Pm View . on Bind Presentation Model ]. Ċ Ġ*/ Ċ fun Ġ< T > ĠObservable < T >. bind To ( action : ĠAction < T >) Ġ{ ĊĠĠĠ Ġwith ( action . pm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis @ bind To . observe On ( main Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( action . consumer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. until Un bind () ĊĠĠĠ Ġ} Ċ }