package Ġco . touch lab . k amp kit . met aw e ather . view model Ċ Ċ import Ġco . touch lab . k amp kit . met aw e ather . model . Response Ċ import Ġco . touch lab . k amp kit . met aw e ather . repo . Weather UseCase Ċ import Ġco . touch lab . k amp kit . met aw e ather . view model . ViewState Ċ import Ġdev . icer ock . mo ko . mv vm . view model . ViewModel Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . k oin . core . component . K oin Component Ċ import Ġorg . orbit m vi . orbit . Container Host Ċ import Ġorg . orbit m vi . orbit . container Ċ import Ġorg . orbit m vi . orbit . syntax . simple . intent Ċ import Ġorg . orbit m vi . orbit . syntax . simple . reduce Ċ Ċ class ĠShared ViewModel ( private Ġval Ġweather UseCase : ĠWeather UseCase ) Ġ: ĠViewModel (), ĠContainer Host < ViewState , ĠString >, ĠK oin Component Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcontainer Ġ= ĠviewModel Scope . container < ViewState , ĠString >( ĊĠĠĠĠĠĠĠ ĠinitialState Ġ= ĠView State () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstart M aking Api Call () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġview State Ġ= ĠView State () ĊĊĠĠĠ Ġprivate Ġfun Ġstart M aking Api Call () Ġ= Ġintent Ġ{ ĊĠĠĠĠĠĠĠ Ġreduce Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView State ( is InProgress Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġload Weather Report () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġload Weather Report () Ġ= Ġintent Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew ViewState Ġ= ĠView State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġweather Report Ġ= Ġweather UseCase . get Weather Report ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ViewState Ġ= Ġview State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Report Ġ= Ġweather Report . data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis InProgress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ViewState Ġ= Ġview State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġweather Report . message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis InProgress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreduce Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ViewState ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }