package Ġcom . the man ol . react basket . players . presentation . view model Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . the man ol . react basket . domain . Player Ċ import Ġcom . the man ol . react basket . domain . Result State Ċ import Ġcom . the man ol . react basket . players . domain . repository . Players Repository Ċ import Ġcom . the man ol . react basket . view models . Base ViewModel Ċ import Ġio . reactivex . rx kotlin . addTo Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ Ċ class ĠP layers ViewModel ( val Ġrepo : ĠP layers Repository ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ players List LiveData Ġ= ĠMutable LiveData < List < Player >>() ĊĠĠĠ Ġval Ġplayers List LiveData : ĠLive Data < List < Player >> Ġ= Ġ_ players List LiveData ĊĠĠĠ Ġprivate Ġval Ġ_ progress LiveData Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġprogress LiveData : ĠLive Data < Boolean > Ġ= Ġ_ progress LiveData ĊĠĠĠ Ġprivate Ġval Ġ_ on Scroll End LiveData Ġ= ĠMutable LiveData <( String ) Ġ-> ĠUnit >() ĊĠĠĠ Ġval Ġon Scroll End LiveData : ĠLive Data <( String ) Ġ-> ĠUnit > Ġ= Ġ_ on Scroll End LiveData ĊĠĠĠ Ġprivate Ġval Ġ_ loading LiveData Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġloading More LiveData : ĠLive Data < Boolean > Ġ= Ġ_ loading LiveData ĊĠĠĠ Ġprivate Ġval Ġ_ on Query Change LiveData Ġ= ĠMutable LiveData <( String ) Ġ-> ĠUnit >() ĊĠĠĠ Ġval Ġon Query Change LiveData : ĠLive Data <( String ) Ġ-> ĠUnit > Ġ= Ġ_ on Query Change LiveData ĊĠĠĠ Ġprivate Ġval Ġ_ onClose Search LiveData Ġ= ĠMutable LiveData < () Ġ-> ĠUnit >() ĊĠĠĠ Ġval ĠonClose Search LiveData : ĠLive Data < () Ġ-> ĠUnit > Ġ= Ġ_ onClose Search LiveData ĊĊĠĠĠ Ġvar Ġlast Search : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplayers Observable Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . players Observable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. share () ĊĊĠĠĠĠĠĠĠ Ġplayers Observable . subscribe Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult State . SUCCESS Ġ-> Ġ_ players List LiveData . post Value ( result . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult State . ERROR Ġ-> Ġm Error LiveData . post Value ( result . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Do ĠNothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ progress LiveData . post Value ( result . status Ġ== ĠResult State . IN _ PROGRESS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( dis pos ables ) ĊĊĠĠĠĠĠĠĠ Ġplayers Observable . subscribe Ġ{ Ġres Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Scroll End LiveData . post Value Ġ{ Ġquery Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res . status Ġ!= ĠResult State . IN _ PROGRESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . fetch More Players () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . search Players Next ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. addTo ( dis pos ables ) ĊĊĠĠĠĠĠĠĠ Ġplayers Observable . subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Query Change LiveData . post Value Ġ{ Ġquery Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . status Ġ!= ĠResult State . IN _ PROGRESS Ġ&& Ġquery . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . search Players ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Search Ġ= Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. addTo ( dis pos ables ) ĊĊĠĠĠĠĠĠĠ Ġplayers Observable . subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ onClose Search LiveData . post Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . status Ġ!= ĠResult State . IN _ PROGRESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . fetch Players () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Search Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. addTo ( dis pos ables ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġmore Players Observable Ġ= Ġrepo . more Players Observable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. share () ĊĊĠĠĠĠĠĠĠ Ġmore Players Observable . subscribe Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult State . SUCCESS Ġ-> Ġresult . data ?. let Ġ{ Ġnew List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ players List LiveData . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ players List LiveData . post Value ( it . plus ( new List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult State . ERROR Ġ-> Ġm Error LiveData . post Value ( result . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Do ĠNothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading LiveData . post Value ( result . status Ġ== ĠResult State . IN _ PROGRESS ) ĊĠĠĠĠĠĠĠ Ġ}. addTo ( dis pos ables ) ĊĠĠĠ Ġ} Ċ }