package Ġio . github . gm val ent ino 8 . github . sample . ui . features . search . results Ċ Ċ import Ġandroid . os . Parcelable Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . lazy . remember Lazy List State Ċ import Ġandroidx . compose . material . Circular Progress Indicator Ċ import Ġandroidx . compose . material . Divider Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġcom . google . ac comp an ist . swiper ef resh . Swipe Refresh Ċ import Ġcom . google . ac comp an ist . swiper ef resh . remember Swipe Refresh State Ċ import Ġio . github . gm val ent ino 8 . github . sample . presentation . feature . search . results . contract . SearchResults Event Ċ import Ġio . github . gm val ent ino 8 . github . sample . presentation . feature . search . results . contract . SearchResults Intent Ċ import Ġio . github . gm val ent ino 8 . github . sample . presentation . feature . search . results . contract . SearchResults ViewState Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . R Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . components . app bar . Back Icon Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . components . app bar . Title AppBar Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . components . error . Error Fullscreen Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . components . error . Error Ok Dialog Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . components . paging . Paging Column Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . core . Contract Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . core . handle Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . core . render Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . primitives . Gray Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . utils . elevation Ċ import Ġio . github . gm val ent ino 8 . github . sample . ui . utils . on Sc rolled To Bottom Ċ Ċ @ Composable Ċ fun Ġ< T Ġ: ĠParcel able > ĠSearch Results Screen ( ĊĠĠĠ Ġcontract : ĠContract < SearchResults Intent < T >, ĠSearch Results ViewState < T >, ĠSearch Results Event < T >>, ĊĠĠĠ Ġnavigator : ĠSearch Results Navigator < T >, ĊĠĠĠ Ġ@ String Res Ġtitle : ĠInt , ĊĠĠĠ Ġresult Item : Ġ@ Composable Ġ( item : ĠT , ĠonClick : Ġ( T ) Ġ-> ĠUnit ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġ( state , Ġevents , Ġdispatch ) Ġ= Ġcontract ĊĠĠĠ Ġval Ġscroll State Ġ= Ġremember Lazy List State () ĊĠĠĠ Ġscroll State . on Sc rolled To Bottom ( buffer Ġ= Ġ 3 ) Ġ{ Ġdispatch ( SearchResults Intent . Scroll To Bottom ()) Ġ} ĊĊĠĠĠ Ġevents ?. handle ( ĊĠĠĠĠĠĠĠ Ġprocess Ġ= Ġ{ Ġdispatch ( SearchResults Intent . Process Event ( it )) Ġ} ĊĠĠĠ Ġ) Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Results Event . Navigate Back Ġ-> Ġnavigator . back () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Results Event . Navigate Details Ġ-> Ġnavigator . details ( event . item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . fill MaxSize ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠTitle AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( id Ġ= Ġtitle ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelevation Ġ= Ġscroll State . elevation (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBack Icon Ġ{ Ġdispatch ( SearchResults Intent . Click Back ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Results ViewState . Initial Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Results ViewState . Empty Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Fullscreen ( title Ġ= Ġstring Resource ( R . string . common _ empty _ content )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Results ViewState . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Gray . v 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCircular Progress Indicator ( modifier Ġ= ĠModifier . align ( Alignment . Center )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Results ViewState . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Fullscreen ( error Ġ= Ġstate . error ) Ġ{ Ġdispatch ( SearchResults Intent . Click Try Again ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Results ViewState . Stable Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSw ipe Refresh ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Swipe Refresh State ( is Refresh ing Ġ= Ġstate Ġis ĠSearch Results ViewState . Stable . Refresh Loading ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh Ġ= Ġ{ Ġdispatch ( SearchResults Intent . Pull To Refresh ()) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP aging Column < T , ĠSearch Results ViewState . Stable . Page Loading < T >, ĠSearch Results ViewState . Stable . Page Error < T >>( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġstate . results , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= Ġstate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġscroll State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Retry Ġ= Ġ{ Ġdispatch ( SearchResults Intent . Click Error Retry ()) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġindex , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Item ( item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch ( SearchResults Intent . Click Item ( item Ġ= Ġitem )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġstate . results . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . render < SearchResults ViewState . Stable . Refresh Error < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Ok Dialog ( error Ġ= Ġit . error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch ( SearchResults Intent . Click Error Ok ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ