package Ġli j ew ski . de mod b . presentation . add Ċ Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġli j ew ski . de mod b . domain . model . Employee Ċ import Ġli j ew ski . de mod b . domain . model . Gender Ċ import Ġli j ew ski . de mod b . domain . use case . employee . Add Employee UseCase Ċ import Ġli j ew ski . de mod b . ext . Event Ċ import Ġli j ew ski . de mod b . presentation . base . Base Employee ViewModel Ċ import Ġjava . time . LocalDate Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠAdd Employee ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġadd Employee UseCase : ĠAdd Employee UseCase Ċ ) Ġ: ĠBase Employee ViewModel () Ġ{ ĊĠĠĠ Ġval Ġevent Add Success Ġ= ĠMutable LiveData < Event < Any >>() ĊĊĠĠĠ Ġval ĠfirstName Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval ĠlastName Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġbirth Date Ġ= ĠMutable LiveData < LocalDate >() ĊĠĠĠ Ġval Ġgender Ġ= ĠMutable LiveData < Gender >( Gender . NONE ) ĊĠĠĠ Ġ// TODO : Ġadd Ġaddress Ġlist ĊĊĠĠĠ Ġval Ġnew Employee Valid Ġ= ĠMed iator LiveData < Boolean >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠEmployee Validator (:: post Value ) ĊĠĠĠĠĠĠĠ Ġadd Source ( firstName , Ġvalidator Ġas ĠObserver < in ĠString >) ĊĠĠĠĠĠĠĠ Ġadd Source ( lastName , Ġvalidator Ġas ĠObserver < in ĠString >) ĊĠĠĠĠĠĠĠ Ġadd Source ( birth Date , Ġvalidator Ġas ĠObserver < in ĠLocalDate >) ĊĠĠĠĠĠĠĠ Ġadd Source ( gender , Ġvalidator Ġas ĠObserver < in ĠGender >) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠEmployee Validator ( private Ġval Ġvalidation Consumer : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ: ĊĠĠĠĠĠĠĠ ĠObserver < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( ignored : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfirstName Ġ= ĠfirstName . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlastName Ġ= ĠlastName . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbirth Ġ= Ġbirth Date . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgender Ġ= Ġgender . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidation Consumer ( when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName . isNull Or Blank () Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName . isNull Or Blank () Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbirth Ġ== Ġnull Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ== Ġnull Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ== ĠGender . NONE Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd New Employee () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( new Employee Valid . value Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġemployee Ġ= ĠEmployee ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= ĠfirstName . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= ĠlastName . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbirth date Ġ= Ġbirth Date . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= Ġgender . value !! ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġadd Employee UseCase . new Employee Ġ= Ġemployee ĊĠĠĠĠĠĠĠ Ġadd Employee UseCase . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Ġ{ Ġhandle Successful New Employee () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ{ Ġhandle Error ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Cancel Ġ{ Ġhandle Cancel ation ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Successful New Employee () Ġ{ ĊĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġevent Add Success . value Ġ= ĠEvent ( Any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġnew Employee Valid . remove Source ( firstName ) ĊĠĠĠĠĠĠĠ Ġnew Employee Valid . remove Source ( lastName ) ĊĠĠĠĠĠĠĠ Ġnew Employee Valid . remove Source ( birth Date ) ĊĠĠĠĠĠĠĠ Ġnew Employee Valid . remove Source ( gender ) ĊĠĠĠĠĠĠĠ Ġadd Employee UseCase . unsubscribe () ĊĠĠĠ Ġ} Ċ Ċ } Ċ