package Ġcom . rio . core . view model . common Ċ Ċ import Ġcom . bad oo . reak t ive . observable .* Ċ import Ġcom . bad oo . reak t ive . subject . publish . publish Subject Ċ import Ġcom . rio . core . data . common . Mapper Ċ import Ġcom . rio . core . domain . use case . UseCase Ċ import Ġcom . rio . core . helper . single From Coroutine Ċ Ċ class ĠList ViewModel Impl < R , ĠT , ĠE >( ĊĠĠĠ Ġuse Case : ĠUse Case < R , ĠList < T >>, ĊĠĠĠ Ġmapper : ĠMapper < List < T >, ĠList < E >> ? Ċ ): ĠList ViewModel < R , ĠE >, ĊĠĠĠ ĠList ViewModel Input < R >, ĊĠĠĠ ĠList ViewModel Output < R , ĠE > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġinputs : ĠList ViewModel Input < R > Ġ= Ġthis ĊĠĠĠ Ġoverride Ġval Ġoutputs : ĠList ViewModel Output < R , ĠE > Ġ= Ġthis ĊĊĠĠĠ Ġoverride Ġval Ġloading : ĠObservable < Boolean > ĊĠĠĠ Ġoverride Ġval Ġresult : ĠObservable < List < E >> ĊĊĠĠĠ Ġprivate Ġval Ġm List Property Ġ= Ġpublish Subject < R >() ĊĠĠĠ Ġprivate Ġval Ġm Load More Property Ġ= Ġpublish Subject < R >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġloading Property Ġ= Ġpublish Subject < Boolean >() ĊĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġmutable ListOf < E >() ĊĊĠĠĠĠĠĠĠ Ġvar Ġclear Items Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġloading Ġ= Ġloading Property ĊĊĠĠĠĠĠĠĠ Ġval Ġinitial Request Ġ= Ġm List Property ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Before Next Ġ{ Ġloading Property . onNext ( true ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Single Ġ{ Ġrequest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle From Coroutine Ġ{ Ġuse Case . execute ( request ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Before Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Property . onNext ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Items Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnext Request Ġ= Ġm Load More Property ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Before Next Ġ{ Ġloading Property . onNext ( true ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Single Ġ{ Ġrequest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle From Coroutine Ġ{ Ġuse Case . execute ( request ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Before Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Property . onNext ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Items Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġmerge ( initial Request , Ġnext Request ). map Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clear Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmapper ?. transform ( response ) Ġ?: Ġresponse Ġas ĠList < E > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . addAll ( list ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( request : ĠR ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm List Property . onNext ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload More ( request : ĠR ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Load More Property . onNext ( request ) ĊĠĠĠ Ġ} Ċ Ċ }