package Ġorg . mp . doctor search app . di . feature . search ĊĊ Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Observable Transformer Ċ import Ġio . reactivex . functions . Bi Function Ċ import Ġorg . mp . doctor search app . di . base . Base ViewModel Ċ import Ġorg . mp . doctor search app . di . feature . login . Login Result Ċ import Ġorg . mp . doctor search app . di . mv ibase . M vi Action Processor Holder ĊĊ Ċ class ĠHome ViewModel ( private Ġval Ġhome Action Processor Holder : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome Action Processor Holder Ċ ) Ġ: ĊĠĠĠĠĠĠĠ ĠBase ViewModel < Home Intent , ĠHome ViewState , ĠHome Action , ĠHome Result >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠinitialState (): ĠHome ViewState Ġ= ĠHome ViewState . idle () ĊĠĠĠ Ġoverride Ġfun Ġreducer (): ĠBi Function < Home ViewState , ĠHome Result , ĠHome ViewState > Ġ= Ġreducer ĊĠĠĠ Ġoverride Ġfun Ġaction Processor Holder (): ĠM vi Action Processor Holder < Home Action , ĠHome Result > Ġ= home Action Processor Holder ĊĠĠĠ Ġoverride Ġfun Ġintent Filter (): ĠObservable Transformer < Home Intent , ĠHome Intent > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable Transformer Ġ{ Ġintent s Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent s . publish Ġ{ Ġshared Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . merge < Home Intent >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared . of Type ( Home Intent . Initial Intent :: class . java ). take ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared . filter Ġ{ Ġit Ġ!= ĠHome Intent . Initial Intent Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġconnect Observable To LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaction From Intent ( intent : ĠHome Intent ): ĠHome Action Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( intent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Intent . Initial Intent Ġ-> ĠHome Action . Load Home Action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Intent . Search Intent Ġ-> ĠHome Action . Search Action ( intent . query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Intent . Type Query Intent Ġ-> ĠHome Action . Type Query Action ( intent . type Query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Intent . Click Intent Ġ-> ĠHome Action . Click Action ( intent . article ) ĊĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis ĠHome Intent . Load Image Intent Ġ-> ĠHome Action . Load Image Action ( intent . doctor Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġreducer Ġ= ĠBi Function Ġ{ Ġprevious State : ĠHome ViewState , Ġresult : ĠHome Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Result . Load SearchResult Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Result . Load SearchResult . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious State . copy ( isLoading Ġ= Ġfalse , isError Ġ= Ġfalse , ĠerrorMessage Ġ= Ġ"", Ġdo ctors Ġ= Ġresult . doctor List , show List Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Result . Load SearchResult . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious State . copy ( isLoading Ġ= Ġfalse , Ġis Error Ġ= Ġtrue , ĠerrorMessage Ġ= Ġresult . errorMessage , show List Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Result . Load SearchResult . In Flight Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious State . copy ( isLoading Ġ= Ġtrue , Ġis Error Ġ= Ġfalse , ĠerrorMessage Ġ= Ġ"", Ġshow Share Option Ġ= Ġfalse , show List Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Result . Type QueryResult Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious State . copy ( query Ġ= Ġresult . query , Ġis Error Ġ= Ġfalse , ĠerrorMessage Ġ= Ġ"", ĠisLoading Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Result . Click Result Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġif Ġuser Ġclicks Ġtwice Ġin Ġthe Ġsame Ġitem Ġshare Ġintent Ġwill Ġnot Ġshow Ġfor Ġ 2 nd Ġtime Ġco z Ġdistinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : ĠFigure Ġout Ġa Ġway Ġto Ġavoid Ġthis . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious State . copy ( show Share Option Ġ= Ġtrue , Ġshare Article Ġ= Ġresult . article ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHome Result . Load Image Result Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious State . copy ( load Image Ġ= Ġresult . url ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }