package Ġorg . simple . clin ic . home . pat ients Ċ Ċ import Ġcom . f 2 pr ate ek . rx . preferences 2 . Preference Ċ import Ġio . reactivex . Back pressure Strategy Ċ import Ġio . reactivex . Maybe Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Observable Source Ċ import Ġio . reactivex . Observable Transformer Ċ import Ġio . reactivex . rx kotlin . Observable s Ċ import Ġio . reactivex . rx kotlin . of Type Ċ import Ġio . reactivex . rx kotlin . with Latest From Ċ import Ġorg . simple . clin ic . Replay Until Screen Is Destroyed Ċ import Ġorg . simple . clin ic . Report Analytics Events Ċ import Ġorg . simple . clin ic . activity . Activity Lifecycle . Res umed Ċ import Ġorg . simple . clin ic . app update . App Update State . Show App Update Ċ import Ġorg . simple . clin ic . app update . Check App Update Availability Ċ import Ġorg . simple . clin ic . ill ustration . Home screen Ill ustration Repository Ċ import Ġorg . simple . clin ic . patient . Patient Config Ċ import Ġorg . simple . clin ic . user . User Ċ import Ġorg . simple . clin ic . user . User . LoggedIn Status . LOG GED _ IN Ċ import Ġorg . simple . clin ic . user . User . LoggedIn Status . NOT _ LOG GED _ IN Ċ import Ġorg . simple . clin ic . user . User . LoggedIn Status . OTP _ REQUEST ED Ċ import Ġorg . simple . clin ic . user . User . LoggedIn Status . RESET TING _ PIN Ċ import Ġorg . simple . clin ic . user . User Session Ċ import Ġorg . simple . clin ic . user . User Status . Approved For Sync ing Ċ import Ġorg . simple . clin ic . user . User Status . Dis approved For Sync ing Ċ import Ġorg . simple . clin ic . user . User Status . Unknown Ċ import Ġorg . simple . clin ic . user . User Status . Waiting For Approval Ċ import Ġorg . simple . clin ic . user . refresh user . Refresh CurrentUser Ċ import Ġorg . simple . clin ic . util . Runtime Permission Result Ċ import Ġorg . simple . clin ic . util . User Clock Ċ import Ġorg . simple . clin ic . util . Utc Clock Ċ import Ġorg . simple . clin ic . util . scheduler . Schedulers Provider Ċ import Ġorg . simple . clin ic . util . to LocalDate At Zone Ċ import Ġorg . simple . clin ic . widgets . Screen Created Ċ import Ġorg . simple . clin ic . widgets . Ui Event Ċ import Ġorg . th reet en . bp . Instant Ċ import Ġorg . th reet en . bp . LocalDate Ċ import Ġorg . th reet en . bp . temporal . Ch rono Unit Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Named Ċ Ċ type alias ĠUi Ġ= ĠPat ients Screen Ċ type alias ĠUi Change Ġ= Ġ( Ui ) Ġ-> ĠUnit Ċ Ċ class ĠPat ients Screen Controller Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuser Session : ĠUser Session , ĊĠĠĠ Ġprivate Ġval Ġconfig Provider : ĠObservable < Patient Config >, ĊĠĠĠ Ġprivate Ġval Ġcheck App Update : ĠCheck App Update Availability , ĊĠĠĠ Ġprivate Ġval Ġut c Clock : ĠU tc Clock , ĊĠĠĠ Ġprivate Ġval Ġuser Clock : ĠUser Clock , ĊĠĠĠ Ġprivate Ġval Ġhome screen Ill ustration Repository : ĠHome screen Ill ustration Repository , ĊĠĠĠ Ġprivate Ġval Ġrefresh CurrentUser : ĠRefresh CurrentUser , ĊĠĠĠ Ġprivate Ġval Ġs chedulers Provider : ĠS chedulers Provider , ĊĠĠĠ Ġ@ Named (" approval _ status _ changed _ at ") Ġprivate Ġval Ġapproval Status UpdatedAt Pref : ĠPreference < Instant >, ĊĠĠĠ Ġ@ Named (" approved _ status _ dis missed ") Ġprivate Ġval Ġhas User Dis missed Approved Status Pref : ĠPreference < Boolean >, ĊĠĠĠ Ġ@ Named (" app _ update _ last _ shown _ at ") Ġprivate Ġval Ġapp Update Dialog Shown At Pref : ĠPreference < Instant >, ĊĠĠĠ Ġ@ Named (" number _ of _ pat ients _ registered ") Ġprivate Ġval ĠnumberOf Pat ients Registered Pref : ĠPreference < Int > Ċ ) Ġ: ĠObservable Transformer < Ui Event , ĠUi Change > Ġ{ ĊĊĠ Ġoverride Ġfun Ġapply ( events : ĠObservable < Ui Event >): ĠObservable Source < Ui Change > Ġ{ ĊĠĠĠ Ġval Ġreplay ed Events Ġ= ĠRe play Until Screen Is Destroyed ( events ) ĊĠĠĠĠĠĠĠ Ġ. compose ( Report Analytics Events ()) ĊĠĠĠĠĠĠĠ Ġ. replay () ĊĊĠĠĠ Ġreturn ĠObservable . merge Array ( ĊĠĠĠĠĠĠĠ Ġenter Code Man ually Click s ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġnew Patient Click s ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġrefresh Approval Status On Start ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġdisplay User Account Status Notification ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġdismiss Approval Status ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġtoggle Visibility Of Scan Card Button ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġrequest Camera Permissions ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġopen Scan Simple Id Screen ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġtoggle Visibility Of Sync Indicator ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġshow App Update Dialog ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġshow Simple Video ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġopen Simple Video ( replay ed Events ), ĊĠĠĠĠĠĠĠ Ġshow Ill ustration ( replay ed Events ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Ill ustration ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ= ĊĠĠĠĠĠ Ġscreen Created ( events ) ĊĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġhome screen Ill ustration Repository . ill ustration Image To Show () Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfile Ġ-> Ġ{ Ġui : ĠUi Ġ-> Ġui . show Ill ustration ( file ) Ġ} Ġ} ĊĊĠ Ġprivate Ġfun Ġscreen Created ( events : ĠObservable < Ui Event >): ĠObservable < Screen Created > Ġ= Ġevents . of Type () ĊĊĠ Ġprivate Ġfun Ġenter Code Man ually Click s ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĠĠĠ Ġreturn Ġevents . of Type < Pat ients Enter Code Man ually Clicked >() ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ{ Ġui : ĠUi Ġ-> Ġui . open Enter Code Man ually Screen () Ġ} Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġnew Patient Click s ( events : ĠObservable < Ui Event >): ĠObservable Source < Ui Change > Ġ{ ĊĠĠĠ Ġreturn Ġevents . of Type < New Patient Clicked >() ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ{ Ġui : ĠPat ients Screen Ġ-> Ġui . open Patient Search Screen () Ġ} Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrefresh Approval Status On Start ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĠĠĠ Ġval Ġscreen Resume s Ġ= Ġevents . of Type < Res umed >() ĊĊĠĠĠ Ġreturn ĠObservable . merge ( screen Created ( events ), Ġscreen Resume s ) ĊĠĠĠĠĠĠĠ Ġ// ĠDep ending Ġupon Ġthe Ġentry Ġpoint Ġof ĠPat ients Ġscreen , Ġboth Ġscreen - create ĊĠĠĠĠĠĠĠ Ġ// Ġand Ġscreen - resume Ġevents Ġmay Ġor Ġmay Ġnot Ġhappen Ġat Ġthe Ġsame Ġtime . ĊĠĠĠĠĠĠĠ Ġ// ĠSo Ġduplicate Ġtriggers Ġare Ġdropped Ġby Ġrestrict ing Ġflat Map 's ĊĠĠĠĠĠĠĠ Ġ// Ġconcurrency Ġto Ġ 1 . ĊĠĠĠĠĠĠĠ Ġ. to Flow able ( Back pressure Strategy . LATE ST ) ĊĠĠĠĠĠĠĠ Ġ. flatMap Maybe ({ ĊĠĠĠĠĠĠĠĠĠ Ġuser Session . logged In User () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Or Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ( user ) Ġ-> Ġuser Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġ( user ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Status Ġ= Ġuser ?. status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe setting Ġthis Ġflag Ġhere Ġto Ġshow Ġthe Ġapproved Ġstatus Ġlater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Status Ġ!= ĠApproved For Sync ing Ġ&& Ġhas User Dis missed Approved Status Pref . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas User Dis missed Approved Status Pref . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġrefresh Ġcall Ġshould Ġnot Ġget Ġcanceled Ġwhen Ġthe Ġapp Ġis Ġclosed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( i . e ., Ġthis Ġchain Ġgets Ġdisposed ). ĠSo Ġit 's Ġnot Ġa Ġpart Ġof Ġthis ĠRx Ġchain . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh User Status () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠMaybe . empty < Ui Change >() Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġfalse , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrefresh User Status () Ġ{ ĊĠĠĠ Ġrefresh CurrentUser ĊĠĠĠĠĠĠĠ Ġ. refresh () ĊĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers Provider . io ()) ĊĠĠĠĠĠĠĠ Ġ. onError Complete () ĊĠĠĠĠĠĠĠ Ġ. do On Complete Ġ{ Ġapproval Status UpdatedAt Pref . set ( Instant . now ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdisplay User Account Status Notification ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĠĠĠ Ġreturn Ġscreen Created ( events ) ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Session . logged In User (). map Ġ{ Ġ( user ) Ġ-> Ġuser !! Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġval Ġset Verification StatusMessage Visible Ġ= Ġ{ Ġlogged In Status : ĠUser . LoggedIn Status , Ġui : ĠUi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( logged In Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNOT _ LOG GED _ IN , ĠO TP _ REQUEST ED Ġ-> Ġui . show User Status As Pending Verification () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG GED _ IN , ĠRE SETTING _ PIN Ġ-> Ġui . hide User Account Status () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ ĠObservable s . combine Latest ( user , Ġhas User Dis missed Approved Status Pref . as Observable ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( user , Ġuser Dis missed Status ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( user . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWaiting For Approval Ġ-> Ġ{ Ġui : ĠUi Ġ-> Ġui . show User Status As Waiting () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDis approved For Sync ing Ġ-> Ġ{ Ġui : ĠUi Ġ-> Ġset Verification StatusMessage Visible ( user . logged In Status , Ġui ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApproved For Sync ing Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtw enty Four Hours Ago Ġ= ĠInstant . now (). minus ( 2 4 , ĠCh rono Unit . HOUR S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwas Approved In Last 2 4 Hours Ġ= Ġtw enty Four Hours Ago Ġ< Ġapproval Status UpdatedAt Pref . get () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Dis missed Status . not () Ġ&& Ġwas Approved In Last 2 4 Hours ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġui : ĠUi Ġ-> Ġui . show User Status As Approved () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġui : ĠUi Ġ-> Ġset Verification StatusMessage Visible ( user . logged In Status , Ġui ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUnknown Ġ-> Ġ{ Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdismiss Approval Status ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĠĠĠ Ġreturn Ġevents ĊĠĠĠĠĠĠĠ Ġ. of Type < User Approved Status Dis missed >() ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġhas User Dis missed Approved Status Pref . set ( true ) ĊĠĠĠĠĠĠĠĠĠ ĠObservable . never < Ui Change >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtoggle Visibility Of Scan Card Button ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĠĠĠ Ġval Ġis Scan Card Feature Enabled Stream Ġ= Ġconfig Provider ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . scan Simple Card Feature Enabled Ġ} ĊĊĠĠĠ Ġreturn Ġscreen Created ( events ) ĊĠĠĠĠĠĠĠ Ġ. with Latest From ( is Scan Card Feature Enabled Stream ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ(_, Ġis Scan Card Feature Enabled ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġ{ Ġui : ĠUi Ġ-> Ġui . set Scan Card Button Enabled ( is Scan Card Feature Enabled ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrequest Camera Permissions ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĠĠĠ Ġreturn Ġevents ĊĠĠĠĠĠĠĠ Ġ. of Type < Scan Card Id Button Clicked >() ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠUi :: request Camera Permissions Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġopen Scan Simple Id Screen ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĠĠĠ Ġreturn Ġevents ĊĠĠĠĠĠĠĠ Ġ. of Type < Pat ients Screen Camera Permission Changed >() ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . permission Result Ġ== ĠRuntime Permission Result . GRAN TED Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠUi :: open Scan Simple Id Card Screen Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtoggle Visibility Of Sync Indicator ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĠĠĠ Ġval Ġcan User Sync Ġ= ĊĠĠĠĠĠĠĠ Ġuser Session ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. can Sync Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĊĠĠĠ Ġreturn ĠObservable s ĊĠĠĠĠĠĠĠ Ġ. combine Latest ( screen Created ( events ), Ġcan User Sync ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ(_, Ġcan Sync ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġ{ Ġui : ĠUi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Sync Ġ-> Ġui . show Sync Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġui . hide Sync Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow App Update Dialog ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĊĠĠĠ Ġfun Ġhas AD ay Passed Since Last Update Shown (): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġval Ġtoday Ġ= ĠLocalDate . now ( user Clock ) ĊĠĠĠĠĠ Ġval Ġlast Shown Date Ġ= Ġapp Update Dialog Shown At Pref . get (). to LocalDate At Zone ( user Clock . zone ) ĊĠĠĠĠĠ Ġreturn Ġlast Shown Date . is Before ( today ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġavailable Update Ġ= Ġcheck App Update ĊĠĠĠĠĠĠĠ Ġ. listen () ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġis ĠShow App Update Ġ} ĊĊĊĠĠĠ Ġreturn ĠObservable s ĊĠĠĠĠĠĠĠ Ġ. combine Latest ( screen Created ( events ), Ġavailable Update ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ(_, Ġupdate ) Ġ-> Ġupdate Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġhas AD ay Passed Since Last Update Shown () Ġ} ĊĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġapp Update Dialog Shown At Pref . set ( Instant . now ( utc Clock )) Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠUi :: show App Update Dialog Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Simple Video ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĠĠĠ Ġreturn Ġscreen Created ( events ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Pat ients Registered Pref . get () Ġ< Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġui : ĠUi Ġ-> Ġui . show Simple Video () Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġui : ĠUi Ġ-> Ġui . show Ill ustration () Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġopen Simple Video ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĠĠĠ Ġreturn Ġevents ĊĠĠĠĠĠĠĠ Ġ. of Type < Simple Video Clicked >() ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠUi :: open YouTube Link For Simple Video Ġ} ĊĠ Ġ} Ċ } Ċ