package Ġcom . ac v . android dev challenge . ui . screen . pup p ies Ċ Ċ import Ġcom . ac v . android dev challenge . common . store . Store Ċ import Ġcom . ac v . android dev challenge . data . P up py Repository Ċ Ċ class ĠP up py ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠP up py Repository Ċ ) Ġ: ĠStore < P up py Action , ĠP up py State >( Initial ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Init () Ġ{ ĊĠĠĠĠĠĠĠ ĠLoad () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠP up py Action . reduce ( currentState : ĠP up py State ): ĠP up py State Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Ġ-> ĠLoading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLoad Success Ġ-> ĠMain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp up p ies Ġ= Ġp up p ies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Selected B reed Ġ= Ġ{ ĠOn Selected B reed ( it )() Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Selected Gender Ġ= Ġ{ ĠOn Selected Gender ( it )() Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ġ= Ġcurrent State . filter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOn Selected B reed Ġ-> Ġwhen Ġ( currentState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInitial Ġ-> Ġcurrent State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Ġ-> Ġcurrent State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMain Ġ-> Ġcurrent State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ġ= Ġcurrent State . filter . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb reed s Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentState . filter . bre eds . first OrNull Ġ{ Ġit Ġ== Ġb reed Ġ} ?. let Ġ{ Ġtrue Ġ} Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . filter . bre eds . filter Ġ{ Ġit Ġ!= Ġb reed Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . filter . bre eds . plus ( bre ed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOn Selected Gender Ġ-> Ġwhen Ġ( currentState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInitial Ġ-> Ġcurrent State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Ġ-> Ġcurrent State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMain Ġ-> Ġcurrent State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ġ= Ġcurrent State . filter . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg enders Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentState . filter . g enders . first OrNull Ġ{ Ġit Ġ== Ġgender Ġ} ?. let Ġ{ Ġtrue Ġ} Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . filter . g enders . filter Ġ{ Ġit Ġ!= Ġgender Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . filter . g enders . plus ( gender ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠP up py Action . side Effects ( currentState : ĠP up py State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Ġ-> Ġlaunch ({ Ġrepository . getAll () Ġ}) Ġ{ ĠLoad Success ( it )() Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOn Selected B reed Ġ-> Ġlaunch ({ Ġrepository . getBy Filter ( currentState . filter ) Ġ}) Ġ{ ĠLoad Success ( it )() Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOn Selected Gender Ġ-> Ġlaunch ({ Ġrepository . getBy Filter ( currentState . filter ) Ġ}) Ġ{ ĠLoad Success ( it )() Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }