11open Unix
2+ // open Lwt
3+ // open Cohttp
4+ // open Cohttp_lwt_unix
5+ // TODO use above mentioned packages for http client to call goblint http server
26
37module ReactDOM = React . Dom
48
9+ type paramState = Executed | Executing | Canceled | Error ;
10+
511[@ react . component ]
612let make = (~parameters) => {
713
8- let params =
14+ let initParams =
915 parameters
1016 |> String . split_on_char(' ' )
1117 |> List . map((s) => { String . sub(s, 1 , String . length(s)- 2 )})
@@ -24,9 +30,9 @@ let make = (~parameters) => {
2430 |> timeToString;
2531 }
2632
27- let (history , setHistory ) = React . useState(_ => [| (params , getLocalTime() )|] );
28- let (value , setValue ) = React . useState(_ => params );
29-
33+ let (history , setHistory ) = React . useState(_ => [| (initParams , getLocalTime() , Executed )|] );
34+ let (value , setValue ) = React . useState(_ => initParams );
35+ let ( disableCancel , setDisableCancel ) = React . useState(_ => true ) ;
3036
3137 React . useEffect1(() => {
3238 None
@@ -41,25 +47,45 @@ let make = (~parameters) => {
4147 };
4248
4349 let on_submit = () => {
44- let new_history = Array . append(history, [| (value, getLocalTime() )|] )
45- setHistory(_ => new_history )
50+ let newHistory = Array . append(history, [| (value, getLocalTime() , Executing )|] )
51+ setHistory(_ => newHistory )
4652
4753 // TODO transform param string with "' '" seperation mask
4854 // TODO execute newly transformed params
55+
56+ // TODO use cohttp to call goblint server
57+
58+ setDisableCancel(_ => false );
4959 };
5060
61+ let on_cancel = () => {
62+ let lastElemIndex = Array . length(history) - 1 ;
63+ let (param , time , _ ) = Array . get(history, lastElemIndex);
64+
65+ let intermediateHistory = Array . sub(history, 0 , lastElemIndex);
66+ let newHistory = Array . append(intermediateHistory, [| (param, time, Canceled )|] );
67+ setHistory(_ => newHistory);
68+
69+ setDisableCancel(_ => true );
70+ }
71+
5172 let playButton = <Button on_click= {on_submit}>
5273 <IconPlay fill= "bi bi-play-fill" />
5374 {"Run" |> React . string}
5475 </Button >;
5576
5677 let map_history_entry_to_list_entry = (arr) => {
57- arr |> Array . mapi((i, (entry, time)) =>
78+ arr |> Array . mapi((i, (entry, time, paramState )) =>
5879 {<li key= {String . cat("params_" , string_of_int(i))} className= "list-group-item" >
5980 <div className= "container text-center" >
6081 <div className= "row" >
6182 <div className= "col-2" >
62- <IconCheckmark />
83+ {switch paramState {
84+ | Executing => <Spinner />
85+ | Canceled => <IconX />
86+ | Executed => <IconCheckmark />
87+ | Error => <IconWarning />
88+ }}
6389 </div >
6490 <div className= "col-2" >
6591 <IconClock />
@@ -79,7 +105,7 @@ let make = (~parameters) => {
79105 <div >
80106 <div className= "input-group mb-2" >
81107 {playButton}
82- <Button color= {` Danger } outline= {true}>
108+ <Button color= {` Danger } outline= {true} on_click = {on_cancel} disabled = {disableCancel} >
83109 {"Cancel" |> React . string}
84110 </Button >
85111 <Input value on_change on_submit />
0 commit comments