/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠNew ĠVector ĠLtd Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġim . vector . app . features . spaces . invite Ċ Ċ import Ġcom . air bnb . mv rx . Activity ViewModel Context Ċ import Ġcom . air bnb . mv rx . Fail Ċ import Ġcom . air bnb . mv rx . Fragment ViewModel Context Ċ import Ġcom . air bnb . mv rx . Loading Ċ import Ġcom . air bnb . mv rx . Mv Rx ViewModel Factory Ċ import Ġcom . air bnb . mv rx . Success Ċ import Ġcom . air bnb . mv rx . Un initialized Ċ import Ġcom . air bnb . mv rx . ViewModel Context Ċ import Ġdagger . ass isted . Ass isted Ċ import Ġdagger . ass isted . Ass isted Factory Ċ import Ġdagger . ass isted . Ass isted Inject Ċ import Ġim . vector . app . core . error . Error Formatter Ċ import Ġim . vector . app . core . platform . Vector ViewModel Ċ import Ġim . vector . app . features . session . coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . matrix . android . sdk . api . session . Session Ċ Ċ class ĠSpace Invite Bottom Sheet ViewModel Ġ@ Ass isted Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġ@ Ass isted Ġprivate Ġval ĠinitialState : ĠSpace Invite Bottom Sheet State , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġerror Formatter : ĠError Formatter Ċ ) Ġ: ĠVector ViewModel < Space Invite Bottom Sheet State , ĠSpace Invite Bottom Sheet Action , ĠSpace Invite Bottom Sheet Events >( initialState ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsession . get Room Summary ( initialState . space Id )?. let Ġ{ Ġroom Summary Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġknown Members Ġ= Ġroom Summary . other Member Ids . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . get Existing Direct Room With User ( it ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map NotNull Ġ{ Ġsession . getUser ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġput Ġone Ġwith Ġavatar Ġfirst , Ġand Ġtake Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpeople You K now Ġ= Ġ( known Members . filter Ġ{ Ġit . avatar Url Ġ!= Ġnull Ġ} Ġ+ Ġknown Members . filter Ġ{ Ġit . avatar Url Ġ== Ġnull Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( 5 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= ĠSuccess ( room Summary ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinv iter User Ġ= Ġroom Summary . inv iter Id ?. let Ġ{ Ġsession . getUser ( it ) Ġ} ?. let Ġ{ ĠSuccess ( it ) Ġ} Ġ?: ĠUn initialized , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpeople You K now Ġ= ĠSuccess ( people You K now ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ass isted Factory ĊĠĠĠ Ġinterface ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( initialState : ĠSpace Invite Bottom Sheet State ): ĠSpace Invite Bottom Sheet ViewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠM v Rx ViewModel Factory < Space Invite Bottom Sheet ViewModel , ĠSpace Invite Bottom Sheet State > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( viewModel Context : ĠViewModel Context , Ġstate : ĠSpace Invite Bottom Sheet State ): ĠSpace Invite Bottom Sheet ViewModel ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= Ġwhen Ġ( viewModel Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFragment ViewModel Context Ġ-> ĠviewModel Context . fragment Ġas ? ĠFactory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠActivity ViewModel Context Ġ-> ĠviewModel Context . activity Ġas ? ĠFactory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfactory ?. create ( state ) Ġ?: Ġerror (" You Ġshould Ġlet Ġyour Ġactivity / fragment Ġimplements ĠFactory Ġinterface ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ( action : ĠSpace Invite Bottom Sheet Action ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSpace Invite Bottom Sheet Action . Do Join ĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( join Action State Ġ= ĠLoading ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . coroutine Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . get Room ( initialState . space Id )?. join () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( join Action State Ġ= ĠSuccess ( Unit )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( failure : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( join Action State Ġ= ĠFail ( failure )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ view Events . post ( Space Invite Bottom Sheet Events . Show Error ( error Formatter . to Human Readable ( failure ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSpace Invite Bottom Sheet Action . Do Reject Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( reject Action State Ġ= ĠLoading ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . coroutine Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . get Room ( initialState . space Id )?. leave () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( reject Action State Ġ= ĠSuccess ( Unit )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( failure : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( reject Action State Ġ= ĠFail ( failure )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ view Events . post ( Space Invite Bottom Sheet Events . Show Error ( error Formatter . to Human Readable ( failure ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ