1
0
Эх сурвалжийг харах

fix: regression on query builder

Tienson Qin 8 сар өмнө
parent
commit
0dc45cb7ce

+ 46 - 51
src/main/frontend/components/query/builder.cljs

@@ -549,60 +549,55 @@
 
 (rum/defc clause-inner
   [*tree loc clause & {:keys [operator?]}]
-  (ui/dropdown
-   (fn [{:keys [toggle-fn]}]
-     (if operator?
-       [:a.flex.text-sm.query-clause {:on-click toggle-fn}
-        clause]
-
-       [:div.flex.flex-row.items-center.gap-2.px-1.rounded.border.query-clause-btn
-        [:a.flex.query-clause {:on-click toggle-fn}
-         (dsl-human-output clause)]]))
-   (fn [{:keys [toggle-fn]}]
-     [:div.p-4.flex.flex-col.gap-2
-      [:a {:title "Delete"
-           :on-click (fn []
-                       (swap! *tree (fn [q]
-                                      (let [loc' (if operator? (vec (butlast loc)) loc)]
-                                        (query-builder/remove-element q loc'))))
-                       (toggle-fn))}
-       "Delete"]
-
-      (when operator?
-        [:a {:title "Unwrap this operator"
-             :on-click (fn []
-                         (swap! *tree (fn [q]
-                                        (let [loc' (vec (butlast loc))]
-                                          (query-builder/unwrap-operator q loc'))))
-                         (toggle-fn))}
-         "Unwrap"])
-
-      [:div.font-medium.text-sm "Wrap this filter with: "]
-      [:div.flex.flex-row.gap-2
-       (for [op query-builder/operators]
-         (ui/button (string/upper-case (name op))
-                    :intent "logseq"
-                    :small? true
+  (let [popup [:div.p-4.flex.flex-col.gap-2
+               [:a {:title "Delete"
                     :on-click (fn []
                                 (swap! *tree (fn [q]
                                                (let [loc' (if operator? (vec (butlast loc)) loc)]
-                                                 (query-builder/wrap-operator q loc' op))))
-                                (toggle-fn))))]
-
-      (when operator?
-        [:div
-         [:div.font-medium.text-sm "Replace with: "]
-         [:div.flex.flex-row.gap-2
-          (for [op (remove #{(keyword (string/lower-case clause))} query-builder/operators)]
-            (ui/button (string/upper-case (name op))
-                       :intent "logseq"
-                       :small? true
-                       :on-click (fn []
-                                   (swap! *tree (fn [q]
-                                                  (query-builder/replace-element q loc op)))
-                                   (toggle-fn))))]])])
-   {:modal-class (util/hiccup->class
-                  "origin-top-right.absolute.left-0.mt-2.ml-2.rounded-md.shadow-lg.w-64")}))
+                                                 (query-builder/remove-element q loc'))))
+                                (shui/popup-hide!))}
+                "Delete"]
+
+               (when operator?
+                 [:a {:title "Unwrap this operator"
+                      :on-click (fn []
+                                  (swap! *tree (fn [q]
+                                                 (let [loc' (vec (butlast loc))]
+                                                   (query-builder/unwrap-operator q loc'))))
+                                  (shui/popup-hide!))}
+                  "Unwrap"])
+
+               [:div.font-medium.text-sm "Wrap this filter with: "]
+               [:div.flex.flex-row.gap-2
+                (for [op query-builder/operators]
+                  (ui/button (string/upper-case (name op))
+                             :intent "logseq"
+                             :small? true
+                             :on-click (fn []
+                                         (swap! *tree (fn [q]
+                                                        (let [loc' (if operator? (vec (butlast loc)) loc)]
+                                                          (query-builder/wrap-operator q loc' op))))
+                                         (shui/popup-hide!))))]
+
+               (when operator?
+                 [:div
+                  [:div.font-medium.text-sm "Replace with: "]
+                  [:div.flex.flex-row.gap-2
+                   (for [op (remove #{(keyword (string/lower-case clause))} query-builder/operators)]
+                     (ui/button (string/upper-case (name op))
+                                :intent "logseq"
+                                :small? true
+                                :on-click (fn []
+                                            (swap! *tree (fn [q]
+                                                           (query-builder/replace-element q loc op)))
+                                            (shui/popup-hide!))))]])]]
+    (if operator?
+      [:a.flex.text-sm.query-clause {:on-click #(shui/popup-show! (.-target %) popup {:align :start})}
+       clause]
+
+      [:div.flex.flex-row.items-center.gap-2.px-1.rounded.border.query-clause-btn
+       [:a.flex.query-clause {:on-click #(shui/popup-show! (.-target %) popup {:align :start})}
+        (dsl-human-output clause)]])))
 
 (rum/defc clause
   [*tree *find loc clauses]