ソースを参照

fix: can't edit block in table view if there're multiple same nodes

Tienson Qin 1 年間 前
コミット
afbb4bcbd4

+ 2 - 1
src/main/frontend/components/query.cljs

@@ -82,7 +82,8 @@
          (and (config/db-based-graph? (state/get-current-repo))
               (not (:built-in? config))
               (or page-list? only-blocks? blocks-grouped-by-page? table?))
-         (query-view/query-result config current-block result)
+         (query-view/query-result (assoc config :id (:db/id current-block))
+                                  current-block result)
 
          (or page-list? table?)
          (query-table/result-table config current-block result {:page? page-list?} map-inline page-cp ->elem inline-text)

+ 10 - 12
src/main/frontend/components/query/view.cljs

@@ -4,7 +4,8 @@
             [frontend.db :as db]
             [logseq.db :as ldb]
             [rum.core :as rum]
-            [frontend.util :as util]))
+            [frontend.util :as util]
+            [frontend.mixins :as mixins]))
 
 (defn- columns
   [config result]
@@ -26,19 +27,16 @@
                   result)]
     (result->entities result')))
 
-(rum/defc query-result < rum/static
-  [config view-entity result]
-  (let [result' (init-result result)
-        [data set-data!] (rum/use-state result')
-        columns' (columns config result')]
-    (rum/use-effect!
-     (fn []
-       (set-data! (init-result result)))
-     [result])
+(rum/defcs query-result < rum/static mixins/container-id
+  (rum/local nil ::result)
+  [state config view-entity result]
+  (let [*result (::result state)
+        result' (or @*result (init-result result))
+        columns' (columns (assoc config :container-id (::container-id state)) result')]
     [:div.query-result.w-full.mt-1
      {:on-pointer-down util/stop-propagation}
      (views/view view-entity
                  {:title-key :views.table/live-query-title
-                  :data data
-                  :set-data! set-data!
+                  :data result'
+                  :set-data! #(reset! *result %)
                   :columns columns'})]))

+ 1 - 1
src/main/frontend/mixins.cljs

@@ -143,7 +143,7 @@
   "Notice: the first parameter needs to be a `config` with `id`, optional `sidebar?`, `whiteboard?`"
   {:init (fn [state]
            (let [config (first (:rum/args state))
-                 key (select-keys config [:id :sidebar? :whiteboard? :embed? :custom-query? :query :current-block])
+                 key (select-keys config [:id :sidebar? :whiteboard? :embed? :custom-query? :query :current-block :table?])
                  container-id (or (:container-id config) (state/get-container-id key))]
              (assoc state :container-id container-id)))})