/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠAlex i ĠBre Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġtech . alex ib . y aba . android . ui . auth . register Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġco . touch lab . ker mit . Ker mit Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . k oin . core . component . K oin Component Ċ import Ġorg . k oin . core . component . inject Ċ import Ġorg . k oin . core . parameter . parameters Of Ċ import Ġtech . alex ib . y aba . android . ui . auth . login . isValid Email Ċ import Ġtech . alex ib . y aba . data . repository . Auth Repository Ċ import Ġtech . alex ib . y aba . model . response . Auth Result Ċ import Ġtech . alex ib . y aba . util . state In Default Ċ Ċ class ĠRegister Screen ViewModel Ġ: ĠViewModel (), ĠK oin Component Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġauth Repository : ĠAuth Repository Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġval Ġlog : ĠKer mit Ġby Ġinject Ġ{ Ġparameters Of (" Register User ViewModel ") Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġemail Ġ= ĠMutable State Flow ("") ĊĠĠĠ Ġprivate Ġval Ġpassword Ġ= ĠMutable State Flow ("") ĊĠĠĠ Ġprivate Ġval ĠerrorMessage Ġ= ĠMutable State Flow < String ? >( null ) ĊĠĠĠ Ġprivate Ġval Ġregistration Success Ġ= ĠMutable State Flow ( false ) ĊĠĠĠ Ġval Ġstate : ĠState Flow < Registration Screen State > Ġ= Ġcombine ( ĊĠĠĠĠĠĠĠ Ġemail , ĊĠĠĠĠĠĠĠ Ġpassword , ĊĠĠĠĠĠĠĠ ĠerrorMessage , ĊĠĠĠĠĠĠĠ Ġregistration Success ĊĠĠĠ Ġ) Ġ{ Ġe , Ġp , ĠerrorMessage , Ġregistration Success Ġ-> ĊĠĠĠĠĠĠĠ ĠRegistration Screen State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġe , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġp , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= ĠerrorMessage , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregistration Success Ġ= Ġregistration Success ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}. state In Default ( viewModel Scope , ĠRegistration Screen State . Empty ) ĊĊĠĠĠ Ġprivate Ġfun Ġcredentials Are Valid (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! email . value . isValid Email () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . value Ġ= Ġ" Invalid Ġemail " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword . value . length Ġ< Ġ 1 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . value Ġ= Ġ" Password Ġmust Ġbe Ġ 1 2 Ġcharacters Ġor Ġgreater " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( credentials Are Valid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġauth Repository . register ( email . value , Ġpassword . value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Result . Success Ġ-> Ġregistration Success . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAuth Result . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e Ġ{ Ġ" registration Ġerror Ġ${ result . message }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistration Success . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . value Ġ= Ġresult . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Email ( input : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġemail . value Ġ= Ġinput . trim () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Password ( input : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpassword . value Ġ= Ġinput . trim () ĊĠĠĠ Ġ} Ċ } Ċ