Prechádzať zdrojové kódy

fix(ux): incorrect popups interaction within the preview editor

charlie 1 rok pred
rodič
commit
098d1d4669

+ 2 - 2
src/main/frontend/components/block.cljs

@@ -720,6 +720,7 @@
         *timer1 (rum/use-ref nil)                           ;; hide
         *el-popup (rum/use-ref nil)
         [visible? set-visible!] (rum/use-state nil)
+        ;; set-visible! (fn debug-visible [v] (js/console.warn "debug: visible" v) (set-visible! v))
         _  #_:clj-kondo/ignore (rum/defc preview-render []
                                  (rum/use-effect!
                                    (fn []
@@ -744,8 +745,7 @@
                                                            (js/clearTimeout timer1)))
                                        :on-mouse-leave (fn []
                                                          ;; check the top popup whether is the preview popup
-                                                         (when (= "ls-preview-popup"
-                                                                 (some-> (shui-popups/get-last-popup) :content-props :class))
+                                                         (when (ui/last-shui-preview-popup?)
                                                            (rum/set-ref! *timer1
                                                              (js/setTimeout #(set-visible! false) 500))))}
                                       (let [page-cp (state/get-page-blocks-cp)]

+ 1 - 1
src/main/frontend/components/property/value.cljs

@@ -110,7 +110,7 @@
           (<create-new-block! block (db/entity property-id) property-value' {:edit-block? false})
           (property-handler/set-block-property! repo (:block/uuid block) property-id property-value')))
       (when exit-edit?
-        (shui/popup-hide-all!)
+        (ui/hide-popups-until-preview-popup!)
         (shui/dialog-close!))
       (when-not (or many? checkbox?)
         (when-let [input (state/get-input)]

+ 12 - 0
src/main/frontend/ui.cljs

@@ -32,6 +32,7 @@
             [goog.object :as gobj]
             [lambdaisland.glogi :as log]
             [logseq.shui.icon.v2 :as shui.icon.v2]
+            [logseq.shui.popup.core :as shui-popups]
             [medley.core :as medley]
             [promesa.core :as p]
             [rum.core :as rum]
@@ -54,6 +55,17 @@
 
 (defonce icon-size (if (mobile-util/native-platform?) 26 20))
 
+(defn shui-popups? [] (some-> (shui-popups/get-popups) (count) (> 0)))
+(defn last-shui-preview-popup?
+  []
+  (= "ls-preview-popup"
+    (some-> (shui-popups/get-last-popup) :content-props :class)))
+(defn hide-popups-until-preview-popup!
+  []
+  (when shui-popups?
+    (while (not (last-shui-preview-popup?))
+      (shui/popup-hide!))))
+
 (def built-in-colors
   ["yellow"
    "red"