package Ġat . sun il son . vehicle Details . presentation Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġat . sun il son . vehicle Details . domain . Get Vehicle Details Ċ import Ġat . sun il son . vehicle Details . domain . Refresh Vehicle Details Ċ import Ġat . sun il son . vehicle Details . domain . entities . Vehicle Details Entry Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġorg . orbit m vi . orbit . Container Host Ċ import Ġorg . orbit m vi . orbit . syntax . simple . intent Ċ import Ġorg . orbit m vi . orbit . syntax . simple . post Side Effect Ċ import Ġorg . orbit m vi . orbit . syntax . simple . reduce Ċ import Ġorg . orbit m vi . orbit . view model . container Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ internal Ġdata Ġclass ĠVehicle Details State ( ĊĠĠĠ Ġval Ġloading : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġshow Search : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġdetails : ĠList < Vehicle Details Entry > Ġ= ĠlistOf (), ĊĠĠĠ Ġval Ġsearched Index : ĠInt Ġ= Ġ- 1 Ċ ) Ċ Ċ internal Ġsealed Ġclass ĠVehicle Details Side Effects Ġ{ ĊĠĠĠ Ġobject ĠRefresh Failed Ġ: ĠVehicle Details Side Effects () ĊĠĠĠ Ġdata Ġclass ĠScroll To Position ( val Ġposition : ĠInt ) Ġ: ĠVehicle Details Side Effects () Ċ } Ċ Ċ @ H ilt ViewModel Ċ internal Ġclass ĠVehicle Details ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrefresh Vehicle Details : ĠRefresh Vehicle Details , ĊĠĠĠ Ġprivate Ġval Ġget Vehicle Details : ĠGet Vehicle Details Ċ ) Ġ: ĠViewModel (), ĠContainer Host < Vehicle Details State , ĠVehicle Details Side Effects > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcontainer Ġ= Ġcontainer < Vehicle Details State , ĠVehicle Details Side Effects >( ĊĠĠĠĠĠĠĠ ĠVehicle Details State () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġview Created ( vin : ĠString ) Ġ= Ġintent Ġ{ ĊĠĠĠĠĠĠĠ Ġget Vehicle Details ( vin ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġstate . copy ( details Ġ= Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh Details Requested ( vin : ĠString ) Ġ= Ġintent Ġ{ ĊĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġstate . copy ( loading Ġ= Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠ Ġrefresh Vehicle Details ( vin ). fold ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠTim ber . e ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġstate . copy ( loading Ġ= Ġfalse ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Button Clicked () Ġ= Ġintent Ġ{ ĊĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġstate . copy ( show Search Ġ= Ġ! state . show Search ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Query Entered ( query : ĠString ) Ġ= Ġintent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġif Ġ( query . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . details . indexOf First Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVehicle Details Entry . Image Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVehicle Details Entry . Equipment Ġ-> Ġentry . label . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġignore Case Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVehicle Details Entry . Information Ġ-> Ġentry . description . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġignore Case Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġstate . copy ( sear ched Index Ġ= Ġindex ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Side Effect ( Vehicle Details Side Effects . Scroll To Position ( index )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ