package Ġorg . fl ax o . frontend . component Ċ Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . html . js . onClick Function Ċ import Ġorg . fl ax o . common . Framework Ċ import Ġorg . fl ax o . common . Language Ċ import Ġorg . fl ax o . common . data . Course Ċ import Ġorg . fl ax o . common . data . Course Settings Ċ import Ġorg . fl ax o . frontend . Container Ċ import Ġorg . fl ax o . frontend . Notifications Ċ import Ġorg . fl ax o . frontend . On Course Change Ċ import Ġorg . fl ax o . frontend . client . Fl ax o Client Ċ import Ġorg . fl ax o . frontend . client . Fl ax o HttpException Ċ import Ġorg . fl ax o . frontend . component . bootstrap . flag Component Ċ import Ġorg . fl ax o . frontend . component . bootstrap . input Component Ċ import Ġorg . fl ax o . frontend . component . bootstrap . select Component Ċ import Ġorg . fl ax o . frontend . credentials Ċ import Ġreact . R Builder Ċ import Ġreact . R Component Ċ import Ġreact . R Props Ċ import Ġreact . R State Ċ import Ġreact . dom . button Ċ import Ġreact . dom . div Ċ import Ġreact . setState Ċ Ċ /** Ċ Ġ* ĠAdds Ġtask Ġrules Ġmenu . Ċ Ġ*/ Ċ fun ĠR Builder . course Settings ( course : ĠCourse , ĠonUpdate : ĠOn Course Change ) Ġ= Ġchild ( Course Settings Component :: class ) Ġ{ ĊĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . course Ġ= Ġcourse ĊĠĠĠĠĠĠĠ Ġthis . on Update Ġ= ĠonUpdate ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠCourse Settings Props ( var Ġcourse : ĠCourse , Ġvar ĠonUpdate : ĠOn Course Change ) Ġ: ĠR Props Ċ Ċ private Ġclass ĠCourse Settings State ( var Ġsettings : ĠCourse Settings ) Ġ: ĠR State Ċ Ċ private Ġclass ĠCourse Settings Component ( props : ĠCourse Settings Props ) ĊĠĠĠ Ġ: ĠR Component < Course Settings Props , ĠCourse Settings State >( props ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfl ax o Client : ĠFl ax o Client ĊĠĠĠ Ġprivate Ġval Ġcourse Language Setting Ġ= Ġ" course Language Setting -" Ġ+ Ġprops . course . id ĊĠĠĠ Ġprivate Ġval Ġcourse Testing Language Setting Ġ= Ġ" course Testing Language Setting -" Ġ+ Ġprops . course . id ĊĠĠĠ Ġprivate Ġval Ġcourse Testing Framework Setting Ġ= Ġ" course Testing Framework Setting -" Ġ+ Ġprops . course . id ĊĠĠĠ Ġprivate Ġval Ġcourse Pl ag iar ism Analysis File Patterns Setting Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" course Pl ag iar ism Analysis File Patterns Setting - "+ Ġprops . course . id ĊĠĠĠ Ġprivate Ġval Ġscore Change Notification Template Setting Ġ= Ġ" score Message Template Setting -" Ġ+ Ġprops . course . id ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfl ax o Client Ġ= ĠContainer . fl ax o Client ĊĠĠĠĠĠĠĠ Ġstate . settings Ġ= Ġprops . course . settings ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠR Builder . render () Ġ{ ĊĠĠĠĠĠĠĠ Ġdiv Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiv Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Select () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtesting Language Select () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtesting Framework Select () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpl ag iar ism Analysis File Patterns Input () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Change Notification Flag () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Change Notification Template Input () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton ( classes Ġ= Ġ" btn Ġbtn - primary ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Function Ġ= Ġ{ ĠGlobal Scope . launch Ġ{ Ġsubmit Settings Changes () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled Ġ= Ġstate . settings Ġ== Ġprops . course . settings ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" Update Ġsettings " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . language Select () Ġ{ ĊĠĠĠĠĠĠĠ Ġselect Component ( select Id Ġ= Ġcourse Language Setting , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Language ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Programming Ġlanguage Ġthat Ġis Ġused Ġby Ġthe Ġcourse Ġstudents Ġin Ġtheir Ġsolutions . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" It Ġshould Ġbe Ġspecified Ġin Ġorder Ġto Ġperform Ġpl ag iar ism Ġanalysis .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġstate . settings . language , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= ĠLanguage . values (). map Ġ{ Ġit . alias Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Option Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Ġ= Ġ{ ĠsetState Ġ{ Ġsettings Ġ= Ġsettings . copy ( language Ġ= Ġit . if Blank Ġ{ Ġnull Ġ}) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . testing Language Select () Ġ{ ĊĠĠĠĠĠĠĠ Ġselect Component ( select Id Ġ= Ġcourse Testing Language Setting , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Testing Ġlanguage ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Programming Ġlanguage Ġthat Ġis Ġused Ġby Ġthe Ġcourse Ġauthor Ġin Ġtask Ġspecifications . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" It Ġdoesn 't Ġhave Ġany Ġeffect Ġnow .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġstate . settings . testing Language , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= ĠLanguage . values (). map Ġ{ Ġit . alias Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Option Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Ġ= Ġ{ ĠsetState Ġ{ Ġsettings Ġ= Ġsettings . copy ( testing Language Ġ= Ġit . if Blank Ġ{ Ġnull Ġ}) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . testing Framework Select () Ġ{ ĊĠĠĠĠĠĠĠ Ġselect Component ( select Id Ġ= Ġcourse Testing Framework Setting , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Testing Ġframework ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Testing Ġframework Ġthat Ġis Ġused Ġwith Ġthe Ġcorresponding Ġtesting Ġlanguage Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" by Ġthe Ġcourse Ġauthor Ġin Ġtask Ġspecifications . ĠIt Ġdoesn 't Ġhave Ġany Ġeffect Ġnow .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġstate . settings . testing Framework , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= ĠFramework . values (). map Ġ{ Ġit . alias Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Option Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Ġ= Ġ{ ĠsetState Ġ{ Ġsettings Ġ= Ġsettings . copy ( testing Framework Ġ= Ġit . if Blank Ġ{ Ġnull Ġ}) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . pl ag iar ism Analysis File Patterns Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput Component ( input Id Ġ= Ġcourse Pl ag iar ism Analysis File Patterns Setting , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" File Ġpatterns Ġfor Ġpl ag iar ism Ġanalysis ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Lorem ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġstate . settings . file Patterns , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Ġ= Ġ{ ĠsetState Ġ{ Ġsettings Ġ= Ġsettings . copy ( file Patterns Ġ= Ġit . if Blank Ġ{ Ġnull Ġ}) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . score Change Notification Flag () Ġ{ ĊĠĠĠĠĠĠĠ Ġflag Component ( input Id Ġ= Ġscore Change Notification Template Setting , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Enable s Ġnotifications Ġon Ġscore Ġchange ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Notifications Ġwill Ġbe Ġsent Ġto Ġstudents Ġon Ġsolutions Ġscore Ġchange .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġstate . settings . notification On Score Change , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Ġ= Ġ{ ĠsetState Ġ{ Ġsettings Ġ= Ġsettings . copy ( notification On Score Change Ġ= Ġit ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . score Change Notification Template Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput Component ( input Id Ġ= Ġscore Change Notification Template Setting , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Score Ġchange Ġnotification Ġtemplate ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Template Ġof Ġthe Ġnotification Ġthat Ġwill Ġbe Ġsent Ġto Ġstudents Ġon Ġsolutions Ġscore Ġchange . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Use Ġany ĠMarkdown Ġcon structions Ġand Ġa Ġsingle Ġ% s Ġto Ġinject Ġscore Ġto Ġnotification . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Leave Ġtemplate Ġblank Ġto Ġuse Ġa Ġdefault Ġone .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġstate . settings . score Change Notification Template , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled Ġ= Ġ! state . settings . notification On Score Change , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Ġ= Ġsettings . copy ( score Change Notification Template Ġ= Ġit . if Blank Ġ{ Ġnull Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsubmit Settings Changes () Ġ{ ĊĠĠĠĠĠĠĠ Ġcredentials ?. also Ġ{ Ġcredentials Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated Course : ĠCourse Ġ= Ġfl ax o Client . update Course Setting ( credentials , Ġprops . course . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprops . on Update ( updated Course ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . success (" Course Ġsettings Ġhave Ġbeen Ġupdated .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFl ax o HttpException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . error (" Error Ġoccurred Ġwhile Ġupdating Ġcourse Ġsettings .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ