Browse Source

perf: get-class-extends

Tienson Qin 5 months ago
parent
commit
2023d87f8e

+ 7 - 14
deps/db/src/logseq/db/frontend/class.cljs

@@ -135,22 +135,15 @@
    (remove #{eid})))
 
 (defn get-class-extends
-  "Returns all parents of a class"
+  "Returns all extends of a class"
   [node]
   (assert (de/entity? node) "get-class-extends `node` should be an entity")
-  (let [db (.-db node)
-        eid (:db/id node)]
-    (->>
-     (d/q '[:find [?p ...]
-            :in $ ?c %
-            :where
-            (class-extends ?p ?c)]
-          db
-          eid
-          (:class-extends rules/rules))
-     (remove #{eid})
-     (map (fn [id] (d/entity db id))))))
-
+  (loop [extends (:logseq.property.class/extends node)
+         result #{}]
+    (if (seq extends)
+      (recur (set (mapcat :logseq.property.class/extends extends))
+             (into result extends))
+      result)))
 
 (defn create-user-class-ident-from-name
   "Creates a class :db/ident for a default user namespace.

+ 3 - 5
deps/outliner/src/logseq/outliner/property.cljs

@@ -526,8 +526,7 @@
   [db eid]
   (let [block (d/entity db eid)
         classes (->> (:block/tags block)
-                     (sort-by :block/name)
-                     (filter ldb/class?))
+                     (sort-by :block/name))
         class-parents (get-classes-parents classes)
         all-classes (->> (concat classes class-parents)
                          (filter (fn [class]
@@ -573,11 +572,10 @@
     (->> (:classes-properties (get-block-classes-properties db eid))
          (map :db/ident)
          (concat own-properties)
-         (filter (fn [id] (property-with-position? db id block position)))
          (distinct)
+         (filter (fn [id] (property-with-position? db id block position)))
          (map #(d/entity db %))
-         (ldb/sort-by-order)
-         (map :db/ident))))
+         (ldb/sort-by-order))))
 
 (defn- build-closed-value-tx
   [db property resolved-value {:keys [id icon]}]

+ 13 - 15
src/main/frontend/components/block.cljs

@@ -2877,23 +2877,21 @@
       (case position
         :block-below
         [:div.positioned-properties.block-below.flex.flex-row.gap-2.item-center.flex-wrap.text-sm.overflow-x-hidden
-         (for [pid properties]
-           (let [property (db/entity pid)]
-             [:div.flex.flex-row.items-center.gap-1
-              {:key (str pid)}
-              [:div.flex.flex-row.items-center
-               (property-component/property-key-cp block property opts)
-               [:div.select-none ":"]]
-              [:div.ls-block.property-value-container
-               {:style {:min-height 20}}
-               (pv/property-value block property opts)]]))]
+         (for [property properties]
+           [:div.flex.flex-row.items-center.gap-1
+            {:key (str (:db/id block) "-" (:db/id property))}
+            [:div.flex.flex-row.items-center
+             (property-component/property-key-cp block property opts)
+             [:div.select-none ":"]]
+            [:div.ls-block.property-value-container
+             {:style {:min-height 20}}
+             (pv/property-value block property opts)]])]
         [:div.positioned-properties.flex.flex-row.gap-1.select-none.h-6.self-start
          {:class (name position)}
-         (for [pid properties]
-           (when-let [property (db/entity pid)]
-             (rum/with-key
-               (pv/property-value block property (assoc opts :show-tooltip? true))
-               (str pid))))]))))
+         (for [property properties]
+           (rum/with-key
+             (pv/property-value block property (assoc opts :show-tooltip? true))
+             (str (:db/id block) "-" (:db/id property))))]))))
 
 (rum/defc status-history-cp
   [status-history]