open Brr open Brr_note open Note module Js = Js_of_ocaml.Js module Handler = struct type t = { title : Jstr.t } let key_of_title : Jstr.t -> Jstr.t = fun title -> title let on_close : t -> State.t -> State.t = fun {title} state -> let page_id = key_of_title title in let new_date = (new%js Js.date_now)##getTime in let content_obj = object%js val content = Js.null val title = Js.some title val date = Js.some new_date end in State.load_page (Some page_id) state content_obj end let create : unit -> Events.t = fun () -> (* The element which contains the information *) let input = El.input () ~at:At.[type' (Jstr.v "text")] in let init = Events.Event ( Handler.{ title = Jstr.empty } , (module Handler : Events.Handler with type t = Handler.t)) in let state = S.hold init @@ Evr.on_el (Ev.input) (fun _ -> Events.Event ( Handler.{ title = El.prop El.Prop.value input } , (module Handler : Events.Handler with type t = Handler.t)) ) input in ( state , El.div [ El.div ~at:At.[class' (Jstr.v "row")] [ El.div ~at:At.[class' (Jstr.v "col-25")] [ El.label [ El.txt' "Titre"] ~at:[At.for' (Jstr.v "title")] ] ; El.div ~at:At.[class' (Jstr.v "col-75")] [ input ] ] ] )