package Ġcom . rain . auth . ui . setup Ċ Ċ import Ġcom . rain . auth . ui . setup . inter actor . Setup Interactor Ċ import Ġcom . rain . auth . ui . setup . reducer . Setup Command Ċ import Ġcom . rain . auth . ui . setup . reducer . Setup Reducer Ċ import Ġcom . rain . auth . ui . setup . reducer . Setup State Ċ import Ġcom . rain . auth . ui . setup . reducer . Setup State . Step Ċ import Ġcom . rain . core . utils . PASSWORD _ LENGTH Ċ import Ġcom . rain . core . view model . ViewModel Ċ import Ġio . reactivex . Observable Ċ Ċ class ĠSetup ViewModel ( reducer : ĠSetup Reducer , Ġprivate Ġval Ġinter actor : ĠSetup Interactor ) ĊĠĠĠ Ġ: ĠViewModel < Setup State , ĠSetup Command >( reducer , ĠSetup State . INIT _ STATE ) Ġ{ ĊĊĠĠĠ Ġclass ĠInput ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword : ĠObservable < String >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfirm : ĠObservable < String >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreset Click s : ĠObservable < Any > ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġclass ĠOutput ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror : ĠObservable < String >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcan Go Back : ĠObservable < Boolean >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle : ĠObservable < Int >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep : ĠObservable < Step > ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġbind ( input : ĠInput ): ĠOutput Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpassword Command Ġ= Ġinput . password ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . length Ġ== ĠPASSWORD _ LENGTH Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĠgetCurrent State (). step Ġ== ĠStep . Init Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠSetup Command . Password ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġconfirm Command Ġ= Ġinput . confirm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . length Ġ== ĠPASSWORD _ LENGTH Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĠgetCurrent State (). step Ġ== ĠStep . Confirmation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Single Ġ{ Ġinter actor . confirm Password ( getCurrent State (). password , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġreset Command Ġ= Ġinput . reset Click s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠSetup Command . Reset () Ġ} ĊĊĠĠĠĠĠĠĠ Ġsubscribe ( Observable . merge ( password Command , Ġconfirm Command , Ġreset Command )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġconfigure Output () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Output (): ĠOutput Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠgetState () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . error Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcan Go Back Ġ= ĠgetState () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . step Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġ== ĠStep . Confirmation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠgetState () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . title Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠgetState () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . step Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠOutput ( error , Ġcan Go Back , Ġtitle , Ġstep ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġun bind () Ġ= Ġunsubscribe () Ċ } Ċ