package Ġcom . te amp ym . online clo thing shop application . presentation . admin . accounts Ċ Ċ import Ġandroidx . paging . Paging Source Ċ import Ġandroidx . paging . Paging State Ċ import Ġcom . bump tech . glide . load . HttpException Ċ import Ġcom . google . firebase . firestore . Query Ċ import Ġcom . google . firebase . firestore . Query Snapshot Ċ import Ġcom . google . firebase . firestore . k tx . toObject Ċ import Ġcom . te amp ym . online clo thing shop application . data . models . User Information Ċ import Ġkotlinx . coroutines . tasks . await Ċ import Ġjava . io . IOException Ċ Ċ class ĠAccount Paging Source ( ĊĠĠĠ Ġprivate Ġval Ġquery Accounts : ĠQuery Ċ ): ĠP aging Source < Query Snapshot , ĠUser Information >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Refresh Key ( state : ĠP aging State < Query Snapshot , ĠUser Information >): ĠQuery Snapshot ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstate . anchor Position ?. let Ġ{ Ġanchor Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġloads Ġstarting Ġfrom Ġprevious Ġpage , Ġbut Ġsince ĠP aging Config . initial Load Size Ġspans ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmultiple Ġpages , Ġthe Ġinitial Ġload Ġwill Ġstill Ġload Ġitems Ġcentered Ġaround ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġanchor Position . ĠThis Ġalso Ġprevents Ġneeding Ġto Ġimmediately Ġlaunch Ġprepend Ġdue Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġprefetch Distance . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . closest Page To Position ( anchor Position )?. prev Key ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Query Snapshot >): ĠLoad Result < Query Snapshot , ĠUser Information > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentPage Ġ= Ġparams . key Ġ?: Ġquery Accounts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Page : ĠQuery Snapshot ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentPage . size () Ġ> Ġ 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Visible Item Ġ= ĠcurrentPage !!. documents [ currentPage . size () Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Page Ġ= Ġquery Accounts . start After ( last Visible Item ). get (). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount List Ġ= Ġmutable ListOf < User Information >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( document Ġin ĠcurrentPage . documents ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġdocument . toObject < User Information >() !!. copy ( userId Ġ= Ġdocument . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount List . add ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġaccount List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġnext Page ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( exception ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }