package Ġcom . cas ual apps . m yn otes . view models Ċ Ċ import Ġandroidx . compose . runtime . State Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . h ilt . lifecycle . ViewModel Inject Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . cas ual apps . m yn otes . data . entities . Bookmark Ċ import Ġcom . cas ual apps . m yn otes . data . entities . Category Ċ import Ġcom . cas ual apps . platform . utils . Failure Ċ import Ġcom . cas ual apps . platform . utils . Success Ċ import Ġcom . cas ual apps . m yn otes . data . repo . bookmarks . Book marks Repository Ċ import Ġcom . cas ual apps . m yn otes . data . repo . notes . Notes Repository Ċ import Ġcom . cas ual apps . m yn otes . enums . Content State Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠBook marks ViewModel Ġ@ ViewModel Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġbook marks Repository : ĠBook marks Repository , ĊĠĠĠ Ġprivate Ġval Ġnotes Repository : ĠNotes Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ content State Ġ= Ġmutable State Of ( Content State . IDLE ) ĊĠĠĠ Ġval Ġcontent State : ĠState < Content State > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ content State ĊĊĠĠĠ Ġprivate Ġval Ġ_ bookmarks State Flow Ġ= ĠMutable State Flow ( emptyList < Category >()) ĊĠĠĠ Ġval Ġcategories State Flow : ĠState Flow < List < Category >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ bookmarks State Flow ĊĊĠĠĠ Ġfun Ġfetch Book marks () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ content State . value Ġ= ĠContent State . LOADING ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġbook marks Repository . fetch Book marks () ĊĠĠĠĠĠĠĠ Ġif Ġ( result . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ content State . value Ġ= ĠContent State . EMPTY ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ content State . value Ġ= ĠContent State . DATA ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfetch Categories ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove From Book marks ( categoryId : ĠString ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġbook marks Repository . remove Category From Book marks ( categoryId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Book marks () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Categories ( bookmarks : ĠList < Bookmark >) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġnotes Repository . fetch Categories ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ content State . value Ġ= ĠContent State . DATA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ bookmarks State Flow . value Ġ= Ġresult . data . categories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġcategory Ġ-> Ġbook marks . any Ġ{ Ġbookmark Ġ-> Ġbookmark . categoryId Ġ== Ġcategory . id Ġ Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFailure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ content State . value Ġ= ĠContent State . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ