package Ġcom . example . take away . search Ċ Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . interaction . Mutable Interaction Source Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Top AppBar Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . outlined . Favorite Ċ import Ġandroidx . compose . material . icons . outlined . Favorite Border Ċ import Ġandroidx . compose . material . icons . outlined . List Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . Local Focus Manager Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . input . TextField Value Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . h ilt . navigation . compose . h ilt ViewModel Ċ import Ġcom . example . take away . R Ċ import Ġcom . example . take away . common . ui . Main Ui State Ċ import Ġcom . example . take away . common . ui . Screen Ċ import Ġcom . example . take away . common . ui . Word Board Ċ import Ġcom . example . take away . common . ui . remember Main Ui State Ċ import Ġcom . example . take away . design . Icon Menu Ċ import Ġcom . example . take away . design . Loading Indicator Ċ import Ġcom . example . take away . design . Search TextField Ċ import Ġcom . example . take away . search . model . Search Action Ċ import Ġcom . example . take away . search . model . Search Event Ċ import Ġcom . example . take away . search . model . Search State Ċ import Ġcom . example . take away . search . model . Search Status Ċ import Ġcom . example . take away . search . model . Star State Ċ import Ġkotlinx . coroutines . flow . collect Latest Ċ Ċ @ Composable Ċ fun ĠSearch Screen ( ui State : ĠMain Ui State ) Ġ{ ĊĠĠĠ Ġval ĠviewModel : ĠSearch ViewModel Ġ= Ġh ilt ViewModel () ĊĠĠĠ Ġval Ġactor Ġ= ĠviewModel :: submit ĊĠĠĠ Ġval Ġstate Ġby ĠviewModel . state . collect As State () ĊĠĠĠ ĠUi Effects ( viewModel , Ġui State ) ĊĠĠĠ ĠSearch Screen Content ( state , Ġactor , Ġui State ) Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠSearch Screen Preview () Ġ{ ĊĠĠĠ ĠSearch Screen Content ( ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠSearch State ( status Ġ= ĠSearch Status . Loading ), ĊĠĠĠĠĠĠĠ Ġactor Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġui State Ġ= Ġremember Main Ui State () ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠSearch Screen Content ( ĊĠĠĠ Ġstate : ĠSearch State , ĊĠĠĠ Ġactor : Ġ( action : ĠSearch Action ) Ġ-> ĠUnit , ĊĠĠĠ Ġui State : ĠMain Ui State Ċ ) Ġ{ ĊĠĠĠ Ġval Ġfocus Manager Ġ= ĠLocal Focus Manager . current ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able ( indic ation Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction Source Ġ= Ġremember Ġ{ ĠMutable Interaction Source () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġfocus Manager . clear Focus () Ġ}) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTop Bar ( state . star State , Ġactor , Ġui State ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġstatus Ġ= Ġstate . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Status . Loading Ġ-> ĠLoading Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Status . Result Ġ-> ĠWord Board ( status . word Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactor ( Search Action . Play ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠUi Effects ( viewModel : ĠSearch ViewModel , Ġui State : ĠMain Ui State ) Ġ{ ĊĠĠĠ ĠLa unched Effect ( Unit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . events . collect Latest Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Event . Show Error Ġ-> Ġui State . show Snackbar ( R . string . error _ message _ unknown _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠTop Bar ( star State : ĠStar State , Ġactor : Ġ( Search Action ) Ġ-> ĠUnit , Ġui State : ĠMain Ui State ) Ġ{ ĊĠĠĠ Ġval Ġkeyword Ġ= Ġremember Ġ{ Ġmutable State Of ( TextField Value ()) Ġ} ĊĠĠĠ Ġval Ġstar Click er Ġ= Ġ{ Ġactor ( Search Action . Star ) Ġ} ĊĠĠĠ Ġval Ġun Star Click er Ġ= Ġ{ Ġactor ( Search Action . Un Star ) Ġ} ĊĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( vertical Ġ= Ġ 4 . dp ), ĊĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠMaterial Theme . colors . background , ĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 0 . dp ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSearch TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( vertical Ġ= Ġ 1 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( start Ġ= Ġ 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġkeyword . value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint Ġ= Ġstring Resource ( id Ġ= ĠR . string . search _ box _ hint ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ Ġkeyword . value Ġ= Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Search Submit Ġ= Ġ{ Ġactor ( Search Action . Search ( keyword . value . text )) Ġ}) ĊĠĠĠĠĠĠĠ ĠIcon Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= Ġif Ġ( star State . enabled Ġ&& Ġstar State . star red ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Outlined . Favorite ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠIcons . Outlined . Favorite Border , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġstring Resource ( id Ġ= ĠR . string . star _ label ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġstar State . enabled , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġif Ġ( star State . star red ) Ġun Star Click er Ġelse Ġstar Click er ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠIcon Menu ( image Vector Ġ= ĠIcons . Outlined . List , Ġdescription Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui State . open Screen ( Screen . Star red . route ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ