Browse Source

fix: recursive calls to dialog :on-close

Tienson Qin 3 weeks ago
parent
commit
4c0708013c
1 changed files with 5 additions and 3 deletions
  1. 5 3
      deps/shui/src/logseq/shui/dialog/core.cljs

+ 5 - 3
deps/shui/src/logseq/shui/dialog/core.cljs

@@ -53,14 +53,16 @@
              (filter #(= id (:id (second %)))) (first))))
 
 (defn update-modal!
-  [id ks val]
+  [id ks val & {:keys [closing?]}]
   (when-let [[index config] (get-modal id)]
     (let [ks (if (coll? ks) ks [ks])
           config (if (nil? val)
                    (medley/dissoc-in config ks)
                    (assoc-in config ks val))]
       (swap! *modals assoc index config)
-      (when (and (false? (:open? config)) (fn? (:on-close config)))
+      (when (and (false? (:open? config))
+                 (fn? (:on-close config))
+                 (not closing?))
         ((:on-close config) id)))))
 
 (defn upsert-modal!
@@ -115,7 +117,7 @@
 
 (defn close!
   ([] (close! (get-last-modal-id)))
-  ([id] (update-modal! id :open? false)))
+  ([id] (update-modal! id :open? false {:closing? true})))
 
 (defn close-all! []
   (doseq [{:keys [id]} @*modals]