package Ġui . components . tabs . entry tab Ċ Ċ import ĠPoly g lot Ċ import Ġapi . send Validation Request Ċ import Ġconstants . Fhir Format Ċ import Ġcss . animation . Fade In . fadeIn Ċ import Ġcss . const . BORDER _ GRAY Ċ import Ġcss . text . TextStyle Ċ import Ġkotlinx . coroutines . Timeout Cancellation Exception Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Timeout Ċ import Ġkotlinx . css .* Ċ import Ġkotlinx . css . properties . border Ċ import Ġmain Scope Ċ import Ġmodel . Cli Context Ċ import Ġmodel . Validation Outcome Ċ import Ġreact .* Ċ import Ġstyled .* Ċ import Ġui . components . buttons . labelled Switch Ċ import Ġui . components . buttons . toggle Switch Ċ import Ġui . components . tabs . heading Ċ import Ġui . components . validation . issue list . filtered Issue Entry List Ċ import Ġutils . assemble Request Ċ import Ġutils . is Json Ċ import Ġutils . is Xml Ċ Ċ // TODO Ġmake Ġthis Ġan Ġint elligent Ġvalue Ċ private Ġconst Ġval ĠVALID ATION _ TIME _ LIMIT Ġ= Ġ 4 5 0 0 0 L Ċ Ċ external Ġinterface ĠManual Entry Tab Props Ġ: ĠR Props Ġ{ ĊĠĠĠ Ġvar Ġcli Context : ĠCli Context ĊĠĠĠ Ġvar Ġvalidation Outcome : ĠValidation Outcome ? ĊĠĠĠ Ġvar Ġcurrent Man ually Entered Text : ĠString ĊĠĠĠ Ġvar Ġvalidating Manual Entry InProgress : ĠBoolean ĊĠĠĠ Ġvar Ġpoly g lot : ĠPoly g lot ĊĠĠĠ Ġvar ĠsessionId : ĠString ĊĊĠĠĠ Ġvar Ġset Validation Outcome : Ġ( Validation Outcome ) Ġ-> ĠUnit ĊĠĠĠ Ġvar Ġtoggle Validation InProgress : Ġ( Boolean ) Ġ-> ĠUnit ĊĠĠĠ Ġvar Ġupdate Currently Entered Text : Ġ( String ) Ġ-> ĠUnit ĊĠĠĠ Ġvar Ġset SessionId : Ġ( String ) Ġ-> ĠUnit Ċ } Ċ Ċ class ĠManual Entry Tab State Ġ: ĠR State Ġ{ ĊĠĠĠ Ġvar Ġdisplaying Error : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar ĠerrorMessage : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġoh Sh it You Did It Ġ= Ġfalse Ċ } Ċ Ċ class ĠManual Entry Tab Ġ: ĠR Component < Manual Entry Tab Props , ĠManual Entry Tab State >() Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠManual Entry Tab State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠR Builder . render () Ġ{ ĊĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Manual Entry Tab Style . main Container ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheading Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Code " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . oh Sh it You Did It ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled I frame Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Manual Entry Tab Style . ken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Ġ= Ġ" https :// player . v imeo . com / video / 1 4 8 7 5 1 7 6 3 ? autoplay = 1 & loop = 1 & aut op ause = 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanual Entry TextArea Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Text Ġ= Ġprops . current Man ually Entered Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Text Update Ġ= Ġ{ Ġstr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprops . update Currently Entered Text ( str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . display ing Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplaying Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Entry Button Bar Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Validate Requested Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( props . current Man ually Entered Text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Entered Text ( props . current Man ually Entered Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Please Ġenter Ġsomething Ġto Ġvalidate ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplaying Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork InProgress Ġ= Ġprops . valid ating Manual Entry InProgress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . display ing Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Span Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ TextStyle . manual Entry Fail Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ state . errorMessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprops . validation Outcome ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Issue Entry List Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidation Outcome Ġ= Ġprops . validation Outcome !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Entered Text ( file Content : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplaying Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoh Sh it You Did It Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprops . toggle Validation InProgress ( true ) ĊĠĠĠĠĠĠĠ Ġprintln (" clic ont ext Ġ:: Ġsv Ġ== Ġ${ props . cli Context . getS v ()}, Ġversion Ġ== Ġ${ props . cli Context . getTarget Ver () }") ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġassemble Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcli Context Ġ= Ġprops . cli Context , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfileName Ġ= Ġgenerate FileName ( file Content ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Content Ġ= Ġfile Content , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfileType Ġ= ĠF hir Format . JSON ĊĠĠĠĠĠĠĠ Ġ). set SessionId ( props . sessionId ) ĊĠĠĠĠĠĠĠ Ġmain Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Timeout ( VALIDATION _ TIME _ LIMIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Response Ġ= Ġsend Validation Request ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprops . set SessionId ( validation Response . getSession Id ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturned Outcome Ġ= Ġvalidation Response . get Outcome s (). map Ġ{ Ġit . set Validated ( true ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" File Ġvalidated \ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" filename Ġ-> Ġ" Ġ+ Ġreturned Outcome . first (). get FileInfo (). fileName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" content Ġ-> Ġ" Ġ+ Ġreturned Outcome . first (). get FileInfo (). file Content ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" type Ġ-> Ġ" Ġ+ Ġreturned Outcome . first (). get FileInfo (). fileType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Issues Ġ:: \ n " Ġ+ Ġreturned Outcome . first (). get Messages () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString Ġ{ Ġ"\ n " Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprops . set Validation Outcome ( returned Outcome . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprops . toggle Validation InProgress ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTimeout Cancellation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Timeout Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( props . current Man ually Entered Text . contains (" Mark Ġis Ġsuper Ġd ork y ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoh Sh it You Did It Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprops . update Currently Entered Text (" K en Ġis Ġsuper Ġd ork y .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Never Ġgonna Ġgive Ġyou Ġup , Ġnever Ġgonna Ġlet Ġyou Ġdown , Ġnever Ġgonna Ġrun Ġaround ..." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplaying Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Cannot Ġparse Ġentered Ġtext Ġas Ġvalid ĠJSON / XML ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplaying Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Exception Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprops . toggle Validation InProgress ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate FileName ( file Content : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Json ( file Content ) Ġ-> Ġ" man ually _ enter ed _ file . json " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Xml ( file Content ) Ġ-> Ġ" man ually _ enter ed _ file . xml " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ/* TODO */ "" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCSS Ċ Ġ*/ Ċ object ĠManual Entry Tab Style Ġ: ĠStyleSheet (" Manual Entry Tab Style ") Ġ{ ĊĠĠĠ Ġval Ġmain Container Ġby Ġcss Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Ġ= ĠDisplay . flex ĊĠĠĠĠĠĠĠ ĠflexDirection Ġ= ĠFlex Direction . column ĊĠĠĠĠĠĠĠ ĠjustifyContent Ġ= ĠJust ify Content . start ĊĠĠĠĠĠĠĠ Ġoverflow Y Ġ= ĠOverflow . auto ĊĠĠĠĠĠĠĠ Ġpadding ( horizontal Ġ= Ġ 3 2 . px , Ġvertical Ġ= Ġ 1 6 . px ) ĊĠĠĠĠĠĠĠ ĠfadeIn () ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġk en Ġby Ġcss Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Ġ= ĠDisplay . flex ĊĠĠĠĠĠĠĠ ĠflexDirection Ġ= ĠFlex Direction . column ĊĠĠĠĠĠĠĠ ĠjustifyContent Ġ= ĠJust ify Content . stretch ĊĠĠĠĠĠĠĠ Ġalign Content Ġ= ĠAlign . stretch ĊĠĠĠĠĠĠĠ Ġoverflow Y Ġ= ĠOverflow . auto ĊĠĠĠĠĠĠĠ ĠminHeight Ġ= Ġ 6 0 0 . px ĊĠĠĠĠĠĠĠ Ġborder ( width Ġ= Ġ 1 . px , Ġcolor Ġ= ĠBORDER _ GRAY , Ġstyle Ġ= ĠBorder Style . solid ) ĊĠĠĠ Ġ} Ċ }