ソースを参照

enhance(ux): diagnosis for the shui popup trigger response is not immediate enough

charlie 1 年間 前
コミット
833384a361

+ 7 - 3
deps/shui/src/logseq/shui/popup/core.cljs

@@ -99,9 +99,13 @@
                           (assoc :align (name align)))}))))
 
 (defn hide!
-  ([] (when-let [id (some-> (get-popups) (last) :id)] (hide! id)))
-  ([id]
-   (update-popup! id :open? false)))
+  ([] (when-let [id (some-> (get-popups) (last) :id)] (hide! id 0)))
+  ([id] (hide! id 0))
+  ([id delay]
+   (let [f #(update-popup! id :open? false)]
+     (if (and (number? delay) (> delay 0))
+       (js/setTimeout f delay)
+       (f)))))
 
 (defn hide-all!
   []

+ 3 - 3
src/main/frontend/components/header.cljs

@@ -190,7 +190,7 @@
                   (remove nil?)))]
     [:button.button.icon.toolbar-dots-btn
      {:title (t :header/more)
-      :on-click (fn [^js e]
+      :on-pointer-down (fn [^js e]
                   (shui/popup-show! (.-target e)
                     (fn [{:keys [id]}]
                       (for [{:keys [hr item title options icon]} (items)]
@@ -238,8 +238,8 @@
   [t]
   (let [[downloaded, set-downloaded] (rum/use-state nil)
         _ (rum/use-effect!
-           (fn []
-             (when-let [channel (and (util/electron?) "auto-updater-downloaded")]
+            (fn []
+              (when-let [channel (and (util/electron?) "auto-updater-downloaded")]
                (let [callback (fn [_ args]
                                 (js/console.debug "[new-version downloaded] args:" args)
                                 (let [args (bean/->clj args)]

+ 19 - 18
src/main/frontend/components/plugins.cljs

@@ -1068,24 +1068,25 @@
                   (remove nil?)))]
 
     [:div.toolbar-plugins-manager
-     {:on-click (fn [^js e]
-                  (shui/popup-show! (.-target e)
-                    (fn [{:keys [id]}]
-                      (for [{:keys [hr item title options icon]} (items)]
-                        (let [on-click' (:on-click options)]
-                          (if hr
-                            (shui/dropdown-menu-separator)
-                            (shui/dropdown-menu-item
-                              (assoc options
-                                :on-click (fn [^js e]
-                                            (when on-click'
-                                              (when-not (false? (on-click' e))
-                                                (shui/popup-hide! id)))))
-                              (or item
-                                [:span.flex.items-center.gap-1.w-full
-                                 icon [:div title]]))))))
-                    {:as-dropdown? true
-                     :content-props {:class "toolbar-plugins-manager-content"}}))}
+     {:on-pointer-down
+      (fn [^js e]
+        (shui/popup-show! (.-target e)
+          (fn [{:keys [id]}]
+            (for [{:keys [hr item title options icon]} (items)]
+              (let [on-click' (:on-click options)]
+                (if hr
+                  (shui/dropdown-menu-separator)
+                  (shui/dropdown-menu-item
+                    (assoc options
+                           :on-click (fn [^js e]
+                                       (when on-click'
+                                         (when-not (false? (on-click' e))
+                                           (shui/popup-hide! id)))))
+                    (or item
+                      [:span.flex.items-center.gap-1.w-full
+                       icon [:div title]]))))))
+          {:as-dropdown? true
+           :content-props {:class "toolbar-plugins-manager-content"}}))}
 
      [:a.button.relative.toolbar-plugins-manager-trigger
       (ui/icon "puzzle" {:size 20})

+ 32 - 31
src/main/frontend/components/repo.cljs

@@ -281,37 +281,38 @@
             (shui/trigger-as :a
               {:tab-index 0
                :class "item cp__repos-select-trigger"
-               :on-click (fn [^js e]
-                           (check-multiple-windows? state)
-                           (some-> (.-target e)
-                             (.closest "a.item")
-                             (shui/popup-show!
-                               (fn [{:keys [id]}]
-                                 [:<>
-                                  (header-fn)
-                                  (for [{:keys [hr item hover-detail title options icon]} (items-fn)]
-                                    (let [on-click' (:on-click options)
-                                          href' (:href options)]
-                                      (if hr
-                                        (shui/dropdown-menu-separator)
-                                        (shui/dropdown-menu-item
-                                          (assoc options
-                                            :title hover-detail
-                                            :on-click (fn [^js e]
-                                                        (when on-click'
-                                                          (when-not (false? (on-click' e))
-                                                            (shui/popup-hide! id)))))
-                                          (or item
-                                            (if href'
-                                              [:a.flex.items-center.w-full
-                                               {:href href' :on-click #(shui/popup-hide! id)
-                                                :style {:color "inherit"}} title]
-                                              [:span.flex.items-center.gap-1.w-full
-                                               icon [:div title]]))))))])
-                               {:as-dropdown? true
-                                :auto-focus? false
-                                :align "start"
-                                :content-props {:class "repos-list"}})))
+               :on-pointer-down
+               (fn [^js e]
+                 (check-multiple-windows? state)
+                 (some-> (.-target e)
+                   (.closest "a.item")
+                   (shui/popup-show!
+                     (fn [{:keys [id]}]
+                       [:<>
+                        (header-fn)
+                        (for [{:keys [hr item hover-detail title options icon]} (items-fn)]
+                          (let [on-click' (:on-click options)
+                                href' (:href options)]
+                            (if hr
+                              (shui/dropdown-menu-separator)
+                              (shui/dropdown-menu-item
+                                (assoc options
+                                       :title hover-detail
+                                       :on-click (fn [^js e]
+                                                   (when on-click'
+                                                     (when-not (false? (on-click' e))
+                                                       (shui/popup-hide! id)))))
+                                (or item
+                                  (if href'
+                                    [:a.flex.items-center.w-full
+                                     {:href href' :on-click #(shui/popup-hide! id)
+                                      :style {:color "inherit"}} title]
+                                    [:span.flex.items-center.gap-1.w-full
+                                     icon [:div title]]))))))])
+                     {:as-dropdown? true
+                      :auto-focus? false
+                      :align "start"
+                      :content-props {:class "repos-list"}})))
                :title repo-name}                            ;; show full path on hover
               [:div.flex.flex-row.items-center
                [:div.flex.relative.graph-icon.rounded