summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@chimrod.com>2021-04-29 15:37:24 +0200
committerSébastien Dailly <sebastien@dailly.me>2022-02-07 16:43:33 +0100
commit4d35508a76676a548ac45e0bff2d63eafaf014e2 (patch)
tree7668ef4cc0a04391edb9a1f3a921b1f917d765bd
parent2fc4e793b12341df6264e22c0b8bd0f6dd2bd27d (diff)
Manually destroy logger in popups
-rwxr-xr-xeditor/ui.ml30
1 files changed, 19 insertions, 11 deletions
diff --git a/editor/ui.ml b/editor/ui.ml
index a4f5416..2cd8ff8 100755
--- a/editor/ui.ml
+++ b/editor/ui.ml
@@ -5,7 +5,14 @@ module Js = Js_of_ocaml.Js
let popup
: title:Jstr.t -> ?form:Forms.Events.t option -> 'a option Note.E.send -> El.t
= fun ~title ?(form = None) send ->
- let _ = send in
+
+ (* Ensure we keep a track for the signal event.
+
+ This looks a bit like the old memory magment in C, as it require to
+ destroy the logger each time the popup is removed. *)
+ let log_opt = Option.map
+ (fun (values, _) -> Note.S.log values (fun _ -> ()))
+ form in
let close_btn =
El.span
@@ -15,7 +22,10 @@ let popup
Evr.endless_listen
(El.as_target close_btn)
Ev.click
- (fun _ -> send None);
+ (fun _ ->
+ Option.iter Note.Logr.destroy log_opt;
+ send None
+ );
let container = match form with
| None -> El.div
@@ -25,26 +35,24 @@ let popup
| None -> El.div []
| Some (_, content) -> content
-
and footer = match form with
| None -> El.txt Jstr.empty
| Some (values, _) ->
-
- let log = Note.S.log values (fun _ -> ()) in
-
let btn = El.input ()
~at:At.[type' (Jstr.v "submit")] in
Evr.endless_listen
(El.as_target btn)
Ev.click
- (fun _ -> Note.Logr.force log
- ; send (Some (Note.S.value values)));
+ (fun _ ->
+ Option.iter Note.Logr.force log_opt;
+ let form_content = (Note.S.value values) in
+ Option.iter Note.Logr.destroy log_opt;
+ send (Some form_content));
- El.div ~at:At.[class' (Jstr.v "row")]
- [ btn ]
- in
+ El.div [ btn ]
+ ~at:At.[class' (Jstr.v "row")] in
let el = El.div
~at:At.[class' (Jstr.v "modal")]