package Ġpages . courses Ċ Ċ import ĠAuth Ċ import ĠCONTENT _ CONTAINER _ ID Ċ import ĠPage Name Ċ import ĠRole Ċ import ĠScroll Position Ċ import Ġdebug Fun Start Ċ import Ġget Window Scroll Position Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . await Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġpages . Easy Page Ċ import Ġparse To Ċ import Ġplain Dst Str Ċ import Ġrestore Window Scroll Ċ import Ġ rip . k spar . ez spa . Cache able Component Ċ import Ġ rip . k spar . ez spa . Component Ċ import Ġ rip . k spar . ez spa . do In Promise Ċ import Ġstringify Ċ import Ġwarn Ċ import Ġkotlin . js . Promise ĊĊ Ċ object ĠCour ses Page Ġ: ĠEasy Page () Ġ{ ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠState ( val Ġroot State : ĠCour ses Root Component . State , Ġval Ġscroll Position : ĠScroll Position ) ĊĊĠĠĠ Ġprivate Ġvar Ġroot Comp : ĠCour ses Root Component ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġpage Name : ĠPage Name Ġ= ĠPage Name . CO UR SES ĊĊĠĠĠ Ġoverride Ġval Ġpath Schema Ġ= Ġ"/ courses " ĊĊĠĠĠ Ġoverride Ġfun Ġbuild ( page State Str : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . build ( page State Str ) ĊĠĠĠĠĠĠĠ ĠMain Scope (). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfun Log Ġ= Ġdebug Fun Start (" Courses Page . build ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpage State Str ?. parse To ( State . serializer ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠCour ses Root Component ( Auth . active Role , ĠCONTENT _ CONTAINER _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Comp Ġ= Ġroot ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . create And Build (). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . create And Build From State ( state . root State ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestore Window Scroll ( state . scroll Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Log ?. end () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pre Navigation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġroot Comp ĊĠĠĠĠĠĠĠ Ġif Ġ( root Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( State . serializer (). stringify ( State ( root . getCache able State (), Ġget Window Scroll Position ()))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Comp Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarn Ġ{ Ġ" Cannot Ġcache Ġcourses Ġpage Ġ- Ġroot Ġcomponent Ġis Ġnull " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlink () Ġ= Ġconstruct Path Link ( empty Map ()) Ċ } ĊĊ Ċ class ĠCour ses Root Component ( ĊĠĠĠ Ġprivate Ġval Ġrole : ĠRole , ĊĠĠĠ Ġdst Id : ĠString Ċ ) Ġ: ĠCache able Component < Courses Root Component . State >( null , Ġdst Id ) Ġ{ ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠState ( val Ġstudent State : ĠStudent Courses Root Comp . State ?, Ġval Ġteacher State : ĠTe acher Courses Root Comp . State ?) ĊĊĊĠĠĠ Ġprivate Ġvar Ġstudent Root : ĠStudent Courses Root Comp ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġteacher Root : ĠTe acher Courses Root Comp ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġchildren : ĠList < Component > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠlistOf NotNull ( student Root , Ġteacher Root ) ĊĊĠĠĠ Ġoverride Ġfun Ġcreate (): ĠPromise < *> Ġ= Ġdo In Promise Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( role ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRole . ST UD ENT Ġ-> Ġstudent Root Ġ= ĠStudent Courses Root Comp ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRole . TE AC HER Ġ-> Ġteacher Root Ġ= ĠTe acher Courses Root Comp ( false , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRole . ADMIN Ġ-> Ġteacher Root Ġ= ĠTe acher Courses Root Comp ( true , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate From State ( state : ĠState ): ĠPromise < *> Ġ= Ġdo In Promise Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . student State Ġ!= Ġnull Ġ-> Ġstudent Root Ġ= ĠStudent Courses Root Comp ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . teacher State Ġ!= Ġnull Ġ-> Ġteacher Root Ġ= ĠTe acher Courses Root Comp ( role Ġ== ĠRole . ADMIN , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate And Build Children From State ( state : ĠState ): ĠPromise < *> Ġ= Ġdo In Promise Ġ{ ĊĠĠĠĠĠĠĠ Ġstudent Root ?. create And Build From State ( state . student State !! ) ĊĠĠĠĠĠĠĠ Ġteacher Root ?. create And Build From State ( state . teacher State !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender (): ĠString Ġ= Ġplain Dst Str ( children [ 0 ]. dst Id ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Cache able State (): ĠState Ġ= ĠState ( student Root ?. getCache able State (), Ġteacher Root ?. getCache able State ()) Ċ } ĊĊ