/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 - present ĠRobert ĠJar os Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġpl . tre k soft . k vision . redux Ċ Ċ import Ġorg . redux kotlin . Action Types Ċ import Ġorg . redux kotlin . Middleware Ċ import Ġorg . redux kotlin . Store Ċ import Ġorg . redux kotlin . apply Middleware Ċ import Ġorg . redux kotlin . create Store Ċ import Ġorg . redux kotlin . create Thunk Ċ import Ġorg . redux kotlin . create Thunk Middleware Ċ import Ġpl . tre k soft . k vision . state . Observable State Ċ Ċ interface ĠR Action Ċ type alias ĠRed ucer Fun < S , ĠA > Ġ= Ġ( S , ĠA ) Ġ-> ĠS Ċ type alias ĠDispatch < A > Ġ= Ġ( A ) Ġ-> ĠUnit Ċ type alias ĠGet State < S > Ġ= Ġ() Ġ-> ĠS Ċ type alias ĠAction Creator < A , ĠS > Ġ= Ġ( Dispatch < A >, ĠGet State < S >) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠAn Ġinline Ġhelper Ġfunction Ġfor Ġcreating ĠRedux Ġstore . Ċ Ġ* Ċ Ġ* Ġ@ param Ġreducer Ġa Ġreducer Ġfunction Ċ Ġ* Ġ@ param ĠinitialState Ġan Ġinitial Ġstate Ċ Ġ* Ġ@ param Ġmiddle wares Ġa Ġlist Ġof Ġoptional ĠRedux ĠJS Ġmiddle wares Ċ Ġ*/ Ċ fun Ġ< S Ġ: ĠAny , ĠA Ġ: ĠR Action > Ġcreate Redux Store ( ĊĠĠĠ Ġreducer : ĠRed ucer Fun < S , ĠA >, ĊĠĠĠ ĠinitialState : ĠS , ĊĠĠĠ Ġvar arg Ġmiddle wares : ĠMiddleware < S > Ċ ): ĠRedux Store < S , ĠA > Ġ{ ĊĠĠĠ Ġ@ Suppress (" Spread Operator ") ĊĠĠĠ Ġreturn ĠRedux Store ( reducer , ĠinitialState , Ġ* middle wares ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġclass Ġimplementing Ġredux Ġpattern Ġbacked Ġby Ġthe ĠRedux ĠKotlin Ġlibrary . Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreates Ġa ĠRedux Ġstore Ġwith Ġgiven Ġreducer Ġfunction Ġand Ġinitial Ġstate . Ċ Ġ* Ġ@ param ĠS Ġredux Ġstate Ġtype Ċ Ġ* Ġ@ param ĠA Ġredux Ġaction Ġtype Ċ Ġ* Ġ@ param Ġreducer Ġa Ġreducer Ġfunction Ċ Ġ* Ġ@ param ĠinitialState Ġan Ġinitial Ġstate Ċ Ġ* Ġ@ param Ġmiddle wares Ġa Ġlist Ġof Ġoptional ĠRedux ĠKotlin Ġmiddle wares Ċ Ġ*/ Ċ class ĠRedux Store < S Ġ: ĠAny , ĠA Ġ: ĠR Action >( ĊĠĠĠ Ġreducer : ĠRed ucer Fun < S , ĠA >, ĊĠĠĠ ĠinitialState : ĠS , ĊĠĠĠ Ġvar arg Ġmiddle wares : ĠMiddleware < S > Ċ ) Ġ: ĠObservable State < S > Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġval Ġstore : ĠStore < S > Ġ= Ġcreate Store ({ Ġs : ĠS , Ġa : ĠAny Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( a Ġ== ĠAction Types . INIT Ġ|| Ġa Ġ== ĠAction Types . REPLACE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreducer ( s , Ġa Ġas ĠA ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, ĠinitialState , Ġapply Middleware ( create Thunk Middleware (), Ġ* middle wares )) ĊĊĠĠĠ Ġfun ĠgetState (): ĠS Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstore . getState () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis patches Ġa Ġsynchronous Ġaction Ġobject . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdispatch ( action : ĠA ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstore . dispatch ( action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis patches Ġan Ġasynchronous Ġaction Ġfunction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdispatch ( action Creator : ĠAction Creator < A , ĠS >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġval Ġth unk Ġ= Ġcreate Thunk < S > Ġ{ Ġdispatch , ĠgetState , Ġ_ Ġ-> Ġaction Creator ( dispatch Ġas Ġ(( A ) Ġ-> ĠUnit ), ĠgetState ) Ġ} ĊĠĠĠĠĠĠĠ Ġstore . dispatch ( thunk ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe ( observer : Ġ( S ) Ġ-> ĠUnit ): Ġ() Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġobserver ( getState ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġstore . subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserver ( getState ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ