/* Ċ Ġ* ĠCopyright Ġ( c ) Ġha ip ham Ġ 2 0 1 9 . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠAny Ġattempt Ġto Ġreproduce Ġthis Ġsource Ġcode Ġin Ġany Ġform Ġshall Ġbe Ġmet Ġwith Ġlegal Ġactions . Ċ Ġ*/ Ċ Ċ package Ġorg . swift en . redux . saga . common Ċ Ċ import Ġio . reactivex . Single Ċ Ċ /** ĠCreated Ġby Ġha ip ham Ġon Ġ 2 0 1 9 / 0 1 / 0 1 Ġ*/ Ċ /** Ċ Ġ* Ġ[ Saga Effect ] Ġwhose Ġ[ Saga Output ] Ġselects Ġsome Ġvalue Ġfrom Ġan Ġinternal Ġ[ State ] Ġusing Ġ[ selector ]. Ċ Ġ* Ġ@ param ĠState ĠThe Ġstate Ġtype Ġto Ġselect Ġfrom . Ċ Ġ* Ġ@ param ĠR ĠThe Ġresult Ġemission Ġtype . Ċ Ġ* Ġ@ param Ġcls ĠThe Ġ[ Class ] Ġto Ġ[ State ]. Ċ Ġ* Ġ@ param Ġselector ĠFunction Ġthat Ġselects Ġ[ R ] Ġfrom Ġ[ State ]. Ċ Ġ*/ Ċ class ĠSelect Effect < State , ĠR >( ĊĠ Ġprivate Ġval Ġcls : ĠClass < State >, ĊĠ Ġprivate Ġval Ġselector : Ġ( State ) Ġ-> ĠR Ċ ) Ġ: ĠSingle Saga Effect < R >() Ġwhere ĠR Ġ: ĠAny Ġ{ ĊĠ Ġoverride Ġfun Ġinvoke ( p 1 : ĠS aga Input ): ĠIS aga Output < R > Ġ{ ĊĠĠĠ Ġreturn ĠS aga Output ( p 1 . monitor , ĠSingle . create < R > Ġ{ ĊĠĠĠĠĠ Ġval Ġlast State Ġ= Ġp 1 . last State () ĊĠĠĠĠĠ Ġrequire ( this . cls . is Instance ( last State )) ĊĠĠĠĠĠ Ġval Ġvalue Ġ= Ġthis @ Select Effect . selector ( this @ Select Effect . cls . cast ( last State )) ĊĠĠĠĠĠ Ġit . on Success ( value ) ĊĠĠĠ Ġ}. to Flow able ()) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSince Ġwe Ġwill Ġalways Ġselect Ġfrom Ġan Ġavailable Ġ[ State ], Ġthere Ġwill Ġnot Ġbe Ġa Ġsituation Ġwhere by ĊĠĠ Ġ* Ġthe Ġresulting Ġ[ IS aga Output ] Ġis Ġempty . ĠWe Ġcan Ġfor go Ġthe Ġdefault Ġvalue Ġin Ġthis Ġ[ await ]. ĊĠĠ Ġ* Ġ@ param Ġinput ĠA Ġ[ Saga Input ] Ġinstance . ĊĠĠ Ġ* Ġ@ return ĠA Ġ[ R ] Ġinstance . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġawait ( input : ĠS aga Input ) Ġ= Ġthis . invoke ( input ). await () Ċ } Ċ