package Ġcom . example . poly care er . screens . main . main _ screen Ċ Ċ import Ġcom . example . poly care er . base . Base Action Ċ import Ġcom . example . poly care er . base . Base State Ċ import Ġcom . example . poly care er . base . Base ViewModel Ċ import Ġcom . example . poly care er . domain . use case . Main Screen UseCase Ċ Ċ class ĠMain Screen ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġuse Case : ĠMain Screen UseCase Ċ ) Ġ: ĠBase ViewModel < Main Screen ViewModel . Main Screen State , ĠMain Screen ViewModel . Main Screen Action >( ĊĠĠĠ ĠMain Screen State () Ċ ) Ġ{ ĊĠĠĠ Ġfun ĠonCreate View () Ġ{ ĊĠĠĠĠĠĠĠ Ġuse Case . check Register (). also Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMain Screen UseCase . Register Result . Registered Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( Main Screen Action . User Registered ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMain Screen UseCase . Register Result . Not Registered Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( Main Screen Action . User Not Registered ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Reduce State ( action : ĠMain Screen Action ): ĠMain Screen State Ġ= Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠMain Screen Action . User Registered Ġ-> Ġstate . copy ( is Registered Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġis ĠMain Screen Action . User Not Registered Ġ-> Ġstate . copy ( is Registered Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġinterface ĠMain Screen Action Ġ: ĠBase Action Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠUser Registered Ġ: ĠMain Screen Action ĊĠĠĠĠĠĠĠ Ġobject ĠUser Not Registered Ġ: ĠMain Screen Action ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠMain Screen State ( ĊĠĠĠĠĠĠĠ Ġval Ġis Registered : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ: ĠBase State Ċ } Ċ