package Ġcom . work fort . pst ui an . app . ui . don ors . view model Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . work fort . pst ui an . app . data . local . pref . Prefs Ċ import Ġcom . work fort . pst ui an . app . data . repository . Don ation Repository Ċ import Ġcom . work fort . pst ui an . app . ui . don ors . intent . Don ors Intent Ċ import Ġcom . work fort . pst ui an . app . ui . don ors . view state . Don ation Option State Ċ import Ġcom . work fort . pst ui an . app . ui . don ors . view state . Don ation State Ċ import Ġcom . work fort . pst ui an . app . ui . don ors . view state . Don ors State Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . consume As Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* Ġ Ġ************************************************************************* *** Ċ Ġ* Ġ Ġ* ĠCreated Ġby Ġ: Ġar han Ġon Ġ 0 1 ĠOct , Ġ 2 0 2 1 Ġat Ġ 7 : 5 6 ĠAM . Ċ Ġ* Ġ Ġ* ĠEmail Ġ: Ġas h ik . p stu . c se @ gmail . com Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠThis Ġclass Ġis Ġfor : Ċ Ġ* Ġ Ġ* Ġ 1 . Ċ Ġ* Ġ Ġ* Ġ 2 . Ċ Ġ* Ġ Ġ* Ġ 3 . Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠLast Ġedited Ġby Ġ: Ġar han Ġon Ġ 1 0 / 1 / 2 1 . Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠLast ĠReview ed Ġby Ġ: Ġ< Reviewer ĠName > Ġon Ġ< mm / dd / yy > Ċ Ġ* Ġ Ġ************************************************************************* *** Ċ Ġ*/ Ċ Ċ class ĠDon ors ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġdon ation Repo : ĠDon ation Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġintent Ġ= ĠChannel < Don ors Intent >( Channel . UN LIMIT ED ) ĊĊĠĠĠ Ġprivate Ġval Ġ_ don ation Option State Ġ= ĠMutable State Flow < Don ation Option State >( Don ation Option State . Idle ) ĊĠĠĠ Ġval Ġdon ation Option State : ĠState Flow < Don ation Option State > Ġget () Ġ= Ġ_ don ation Option State ĊĊĠĠĠ Ġprivate Ġval Ġ_ don ors State Ġ= ĠMutable State Flow < Don ors State >( Don ors State . Idle ) ĊĠĠĠ Ġval Ġdon ors State : ĠState Flow < Don ors State > Ġget () Ġ= Ġ_ don ors State ĊĊĠĠĠ Ġprivate Ġval Ġ_ don ation State Ġ= ĠMutable State Flow < Don ation State >( Don ation State . Idle ) ĊĠĠĠ Ġval Ġdon ation State : ĠState Flow < Don ation State > Ġget () Ġ= Ġ_ don ation State ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Intent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Intent () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . consume As Flow (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDon ors Intent . Get Don ors Ġ-> Ġget Don ors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDon ors Intent . Get Don ation Options Ġ-> Ġget Don ation Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Don ors () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ don ors State . value Ġ= ĠDon ors State . Loading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ don ors State . value Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDon ors State . Don ors ( don ation Repo . get Don ors ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDon ors State . Error ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Don ation Options () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ don ation Option State . value Ġ= ĠDon ation Option State . Loading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ don ation Option State . value Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoption Ġ= Ġdon ation Repo . get Don ation Option () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP refs . don ate Option Ġ= Ġoption ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDon ation Option State . Success ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDon ation Option State . Error ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Don ation ( name : ĠString , Ġinfo : ĠString , Ġemail : ĠString , Ġreference : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ don ation State . value Ġ= ĠDon ation State . Loading ĊĊĠĠĠĠĠĠĠ Ġif ( TextUtils . isEmpty ( name ) Ġ|| ĠText Utils . isEmpty ( info ) Ġ|| ĠText Utils . isEmpty ( email ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠText Utils . isEmpty ( reference )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ don ation State . value Ġ= ĠDon ation State . Error (" All Ġfields Ġare Ġrequired ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" store Ġ$ name , Ġ$ info , Ġ$ email , Ġ$ reference ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ don ation State . value Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġdon ation Repo . save Don ation ( name , Ġinfo , Ġemail , Ġreference ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP refs . don ation Id Ġ= Ġresponse . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDon ation State . Success (" Don ation Ġis Ġunder Ġreview ! ĠThanks Ġfor Ġyour Ġhelp .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP refs . don ation Id Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDon ation State . Error ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }