package Ġcom . kafka . content . ui . library Ċ Ċ import Ġcom . air bnb . e po xy . Carousel Ċ import Ġcom . air bnb . e po xy . Typed E po xy Controller Ċ import Ġcom . kafka . content .* Ċ import Ġcom . kafka . data . entities . Item Ċ import Ġcom . kafka . ui _ common . ui . grid Carousel Ċ import Ġcom . kafka . ui _ common . ui . with Models From Ċ import Ġkotlinx . coroutines . channels . Channel Ċ Ċ class ĠLibrary Controller Ġ: ĠTyped E po xy Controller < Library ViewState >() Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġaction er : ĠChannel < Library Action > ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Models ( data : ĠLibrary ViewState ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavor ites ?. let Ġ{ Ġfavor ites ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġempty () Ġ{ ĊĠĠĠĠĠĠĠ Ġempty State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid (" empty _ state ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle (" No ĠF avorites ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Add Ġbooks Ġto Ġfavor ites Ġto Ġsee Ġthem Ġhere ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfavor ites ( favorites : ĠList < Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġvertical Spacing Medium Ġ{ Ġid (" favorites _ spacing _ top ") Ġ} ĊĠĠĠĠĠĠĠ Ġfancy Section Header Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid (" favorites _ header ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" F avorites ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgrid Carousel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid (" favorites ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpadding ( Carousel . Padding . dp ( 1 2 , Ġ 1 2 , Ġ 1 2 , Ġ 1 2 , Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Models From ( favorites . map Ġ{ Ġit Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBook Grid Binding Model _ (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ( it . itemId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener Ġ{ Ġ_ Ġ-> Ġ Ġaction er . send Action ( Library Action . Item Detail Action ( it )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ