package Ġcom . foobar ust . android . seller section Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġandroidx . paging . Paging Data Ċ import Ġandroidx . paging . cached In Ċ import Ġandroidx . paging . insert Separ ators Ċ import Ġandroidx . paging . map Ċ import Ġcom . foobar ust . android . R Ċ import Ġcom . foobar ust . android . seller section . S eller Sections ListModel .* Ċ import Ġcom . foobar ust . domain . models . seller . S eller Detail Ċ import Ġcom . foobar ust . domain . models . seller . is Recent Section Ċ import Ġcom . foobar ust . domain . states . get Success Data Or Ċ import Ġcom . foobar ust . domain . use cases . seller . Get S eller Detail UseCase Ċ import Ġcom . foobar ust . domain . use cases . seller . Get S eller Sections Parameters Ċ import Ġcom . foobar ust . domain . use cases . seller . Get S eller Sections UseCase Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġdagger . h ilt . android . qual ifiers . ApplicationContext Ċ import Ġkotlinx . coroutines . channels . Con fl ated Broadcast Channel Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġke vin Ġon Ġ 2 / 2 3 / 2 1 Ċ Ġ*/ Ċ Ċ @ H ilt ViewModel Ċ class ĠS eller Section List ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġ@ ApplicationContext Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ ĠgetS eller Detail UseCase : ĠGet S eller Detail UseCase , ĊĠĠĠ ĠgetS eller Sections UseCase : ĠGet S eller Sections UseCase Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ seller Id Ġ= ĠCon fl ated Broadcast Channel < String ?> () ĊĊĠĠĠ Ġval Ġsections List Models : ĠFlow < Paging Data < S eller Sections ListModel >> Ġ= Ġ_ seller Id ĊĠĠĠĠĠĠĠ Ġ. as Flow () ĊĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠ Ġ. flatMap Latest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetS eller Sections UseCase ( Get S eller Sections Parameters ( seller Id Ġ= Ġit )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġpaging Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaging Data . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS eller Sections Item Model ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġpaging Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaging Data . insert Separ ators Ġ{ Ġbefore , Ġafter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Separ ators ( before , Ġafter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. cached In ( viewModel Scope ) ĊĊĠĠĠ Ġval Ġsell er Detail : ĠState Flow < S eller Detail ?> Ġ= Ġ_ seller Id ĊĠĠĠĠĠĠĠ Ġ. as Flow () ĊĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠ Ġ. flatMap Latest Ġ{ ĠgetS eller Detail UseCase ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . get Success Data Or ( null ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. state In ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope Ġ= ĠviewModel Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstarted Ġ= ĠSh aring Started . E ager ly , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġon Fetch S eller Sections ( seller Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ seller Id . offer ( seller Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Separ ators ( ĊĠĠĠĠĠĠĠ Ġbefore : ĠS eller Sections Item Model ?, ĊĠĠĠĠĠĠĠ Ġafter : ĠS eller Sections Item Model ? ĊĠĠĠ Ġ): ĠS eller Sections ListModel ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ== Ġnull Ġ&& Ġafter Ġ== Ġnull Ġ-> ĠS eller Sections Empty Model ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ== Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter ?. seller Section Basic ?. is Recent Section () Ġ== Ġtrue Ġ-> ĠS eller Sections Subtitle Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Ġ= Ġcontext . getString ( R . string . seller _ section _ subtitle _ recent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter ?. seller Section Basic ?. is Recent Section () Ġ== Ġfalse Ġ&& Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ== Ġnull Ġ|| Ġbefore . seller Section Basic . is Recent Section () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ-> ĠS eller Sections Subtitle Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Ġ= Ġcontext . getString ( R . string . seller _ section _ subtitle _ up coming ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }