/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠDen ys ĠN y ky for ov Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . pop al ay . bar nee . domain . parameter ized dr ink list Ċ Ċ import Ġcom . ku u urt . paging . multi platform . Paging Data Ċ import Ġcom . pop al ay . bar nee . data . model . Dr ink Ċ import Ġcom . pop al ay . bar nee . data . repository . Dr ink Repository Ċ import Ġcom . pop al ay . bar nee . data . repository . Dr inks Request Ċ import Ġcom . pop al ay . bar nee . domain . Action Ċ import Ġcom . pop al ay . bar nee . domain . Empty Side Effect Ċ import Ġcom . pop al ay . bar nee . domain . Input Ċ import Ġcom . pop al ay . bar nee . domain . State Ċ import Ġcom . pop al ay . bar nee . domain . StateMachine Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . empty Flow Ċ import Ġkotlinx . coroutines . flow . filter Is Instance Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . flow . merge Ċ import Ġkotlinx . coroutines . flow . take Ċ Ċ data Ġclass ĠParameter ized Dr ink List Input ( ĊĠĠĠ Ġval Ġrequest : ĠD rink sRequest , ĊĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠ Ġval Ġtitle Highlight ed : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠInput Ċ Ċ data Ġclass ĠParameter ized Dr ink List State ( ĊĠĠĠ Ġval Ġrequest : ĠD rink sRequest , ĊĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠ Ġval Ġtitle Highlight ed : ĠString , ĊĠĠĠ Ġval Ġdr inks : ĠFlow < Paging Data < Dr ink >> Ġ= Ġempty Flow () Ċ ) Ġ: ĠState Ġ{ ĊĠĠĠ Ġconstructor ( input : ĠParameter ized Dr ink List Input ) Ġ: Ġthis ( input . request , Ġinput . title , Ġinput . title Highlight ed ) Ċ } Ċ Ċ sealed Ġinterface ĠParameter ized Dr ink List Action Ġ: ĠAction Ġ{ ĊĠĠĠ Ġobject ĠInitial Ġ: ĠParameter ized Dr ink List Action Ċ } Ċ Ċ class ĠParameter ized Dr ink List StateMachine ( ĊĠĠĠ Ġinput : ĠParameter ized Dr ink List Input , ĊĠĠĠ Ġdrink Repository : ĠD rink Repository Ċ ) Ġ: ĠState Machine < Parameterized Dr ink List State , ĠParameter ized Dr ink List Action , ĠEmpty Side Effect >( ĊĠĠĠ ĠinitialState Ġ= ĠParameter ized Dr ink List State ( input ), ĊĠĠĠ Ġinitial Action Ġ= ĠParameter ized Dr ink List Action . Initial , ĊĠĠĠ Ġreducer Ġ= Ġ{ Ġstate , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġmerge ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Is Instance < Parameterized Dr ink List Action . Initial >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġdrink Repository . dr inks ( state (). request ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġstate (). copy ( dr inks Ġ= Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ ) Ċ