/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠSim i Pr amb os Ġ< sim i . pr amb os @ gmail . com > Ġ- ĠAll ĠRights ĠReserved Ċ Ġ* ĠProduct Detail ViewModel . kt Ċ Ġ* ĠBu ah in Ġ< https :// github . com / Sim i Pr amb os / bu ah in . git > Ċ Ġ* ĠUI ĠDesign Ġby ĠA fs ar Ġ< https :// www . fig ma . com / community / file / 8 8 2 6 4 5 0 0 7 9 5 6 3 3 7 2 6 1 > Ċ Ġ*/ Ċ Ċ package Ġcom . example . bu ah in . view model Ċ Ċ import Ġandroidx . compose . runtime . State Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . lifecycle . Saved State Handle Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . example . bu ah in . model . Product Ċ import Ġcom . example . bu ah in . repository . Product Repository Ċ import Ġcom . example . bu ah in . ui . screens . args . Product Detail Route Args Factory Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠProduct Detail ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġproduct Repository : ĠProduct Repository , ĊĠĠĠ Ġsaved State Handle : ĠSaved State Handle Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġargs Ġ= ĠProduct Detail Route Args Factory . from Saved State Handle ( saved State Handle ) ĊĠĠĠ Ġprivate Ġval Ġ_ state Ġ= Ġmutable State Of < Product Detail State >( Product Detail State . Loading ) ĊĠĠĠ Ġval Ġstate : ĠState < Product Detail State > Ġ= Ġ_ state ĊĊĠĠĠ Ġfun Ġon Event ( event : ĠProduct Detail Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠProduct Detail Event . Load Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduct Ġ= Ġproduct Repository . findOne ( args . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( product Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . value Ġ= ĠProduct Detail State . Empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . value Ġ= ĠProduct Detail State . Success ( product ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠProduct Detail State Ġ{ ĊĠĠĠ Ġobject ĠLoading Ġ: ĠProduct Detail State () ĊĠĠĠ Ġobject ĠEmpty Ġ: ĠProduct Detail State () ĊĠĠĠ Ġdata Ġclass ĠSuccess ( val Ġvalue : ĠProduct ) Ġ: ĠProduct Detail State () Ċ } Ċ Ċ sealed Ġclass ĠProduct Detail Event Ġ{ ĊĠĠĠ Ġobject ĠLoad Ġ: ĠProduct Detail Event () Ċ }