Pārlūkot izejas kodu

fix: :class/parent instead of block/namespace

Tienson Qin 1 gadu atpakaļ
vecāks
revīzija
55d7ef95dc

+ 7 - 0
deps/db/src/logseq/db/frontend/rules.cljc

@@ -11,6 +11,13 @@
       [?t :block/namespace ?p]
       (namespace ?t ?c)]]
 
+   :class-parent
+   '[[(class-parent ?p ?c)
+      [?c :class/parent ?p]]
+     [(class-parent ?p ?c)
+      [?t :class/parent ?p]
+      (class-parent ?t ?c)]]
+
    :alias
    '[[(alias ?e2 ?e1)
       [?e2 :block/alias ?e1]]

+ 4 - 2
deps/db/src/logseq/db/frontend/schema.cljs

@@ -121,8 +121,10 @@
    (dissoc schema
            :block/properties-text-values :block/pre-block? :recent/pages :file/handle :block/file
            :block/properties-order)
-   {:file/last-modified-at {}}
-   {:asset/uuid {:db/unique :db.unique/identity}
+   {:class/parent {:db/valueType :db.type/ref
+                   :db/index true}
+    :file/last-modified-at {}
+    :asset/uuid {:db/unique :db.unique/identity}
     :asset/meta {}}))
 
 (def retract-attributes

+ 10 - 10
src/main/frontend/components/class.cljs

@@ -11,7 +11,7 @@
 (rum/defc class-select
   [page class on-select]
   (let [repo (state/get-current-repo)
-        children-pages (model/get-namespace-children repo (:db/id page))
+        children-pages (model/get-class-children repo (:db/id page))
         ;; Disallows cyclic hierarchies
         exclude-ids (-> (set (map (fn [id] (:block/uuid (db/entity id))) children-pages))
                         (conj (:block/uuid page))) ; break cycle
@@ -53,9 +53,9 @@
                                       (if (seq value)
                                         (db/transact!
                                          [{:db/id (:db/id page)
-                                           :block/namespace [:block/uuid (uuid value)]}])
+                                           :class/parent [:block/uuid (uuid value)]}])
                                         (db/transact!
-                                         [[:db.fn/retractAttribute (:db/id page) :block/namespace]]))))]
+                                          [[:db.fn/retractAttribute (:db/id page) :class/parent]]))))]
       [:div.opacity-50.pointer.text-sm.cursor-pointer {:on-click #(reset! *show? true)}
        "Empty"])))
 
@@ -73,22 +73,22 @@
         [:div.col-span-2 "Parent class:"]
         (if config/publishing?
           [:div.col-span-3
-           (if-let [parent-class (some-> (:db/id (:block/namespace page))
+           (if-let [parent-class (some-> (:db/id (:class/parent page))
                                          db/entity
                                          :block/original-name)]
              [:a {:on-click #(route-handler/redirect-to-page! parent-class)}
               parent-class]
              "None")]
           [:div.col-span-3
-           (let [parent (some-> (:db/id (:block/namespace page))
+           (let [parent (some-> (:db/id (:class/parent page))
                                 db/entity)]
              (page-parent page parent))])]
 
-       (when (:block/namespace page)
-         (let [ancestor-pages (loop [namespaces [page]]
-                                (if-let [parent (:block/namespace (last namespaces))]
-                                  (recur (conj namespaces parent))
-                                  namespaces))
+       (when (:class/parent page)
+         (let [ancestor-pages (loop [parents [page]]
+                                (if-let [parent (:class/parent (last parents))]
+                                  (recur (conj parents parent))
+                                  parents))
                class-ancestors (map :block/original-name (reverse ancestor-pages))]
            (when (> (count class-ancestors) 2)
              [:div.grid.grid-cols-5.gap-1.items-center.class-ancestors

+ 6 - 6
src/main/frontend/db/model.cljs

@@ -1000,33 +1000,33 @@ independent of format as format specific heading characters are stripped"
      [?page :block/uuid ?id]]
     (conn/get-db repo)))
 
-(defn get-namespace-children
+(defn get-class-children
   [repo eid]
   (->>
    (d/q '[:find [?children ...]
           :in $ ?parent %
           :where
-          (namespace ?parent ?children)]
+          (class-parent ?parent ?children)]
         (conn/get-db repo)
         eid
-        (:namespace rules/rules))
+        (:class-parent rules/rules))
    distinct))
 
 ;; FIXME: async query
 (defn get-class-objects
   [repo class-id]
   (when-let [class (db-utils/entity repo class-id)]
-    (if (first (:block/_namespace class))        ; has children classes
+    (if (first (:class/_parent class))        ; has children classes
       (d/q
        '[:find [?object ...]
          :in $ % ?parent
          :where
-         (namespace ?parent ?c)
+         (class-parent ?parent ?c)
          (or-join [?object ?c]
           [?object :block/tags ?parent]
           [?object :block/tags ?c])]
        (conn/get-db repo)
-       (:namespace rules/rules)
+       (:class-parent rules/rules)
        class-id)
       (map :db/id (:block/_tags class)))))
 

+ 12 - 12
src/main/frontend/handler/db_based/property.cljs

@@ -529,20 +529,20 @@
                   [[f (:db/id block) :block/collapsed-properties (:db/id property)]]
                   {:outliner-op :save-block})))
 
-(defn- get-namespace-parents
+(defn- get-class-parents
   [tags]
   (let [tags' (filter (fn [tag] (contains? (:block/type tag) "class")) tags)
-        *namespaces (atom #{})]
+        *classes (atom #{})]
     (doseq [tag tags']
-      (when-let [ns (:block/namespace tag)]
-        (loop [current-ns ns]
+      (when-let [parent (:class/parent tag)]
+        (loop [current-parent parent]
           (when (and
-                 current-ns
-                 (contains? (:block/type ns) "class")
-                 (not (contains? @*namespaces (:db/id ns))))
-            (swap! *namespaces conj current-ns)
-            (recur (:block/namespace current-ns))))))
-    @*namespaces))
+                 current-parent
+                 (contains? (:block/type parent) "class")
+                 (not (contains? @*classes (:db/id parent))))
+            (swap! *classes conj current-parent)
+            (recur (:class/parent current-parent))))))
+    @*classes))
 
 (defn get-block-classes-properties
   [eid]
@@ -550,8 +550,8 @@
         classes (->> (:block/tags block)
                      (sort-by :block/name)
                      (filter (fn [tag] (contains? (:block/type tag) "class"))))
-        namespace-parents (get-namespace-parents classes)
-        all-classes (->> (concat classes namespace-parents)
+        class-parents (get-class-parents classes)
+        all-classes (->> (concat classes class-parents)
                          (filter (fn [class]
                                    (seq (:properties (:block/schema class))))))
         all-properties (-> (mapcat (fn [class]

+ 5 - 5
src/test/frontend/db/db_based_model_test.cljs

@@ -63,7 +63,7 @@
       ;; set class2's parent to class1
         (let [class2 (db/entity [:block/name "class2"])]
           (db/transact! [{:db/id (:db/id class2)
-                          :block/namespace (:db/id class)}]))
+                          :class/parent (:db/id class)}]))
         (test-helper/save-block! repo sbid "Block 2" {:tags ["class2"]})
         (is (= (model/get-class-objects repo (:db/id class))
                [(:db/id (db/entity [:block/uuid fbid]))
@@ -99,7 +99,7 @@
     (is (false? (model/hidden-page? "$$$test")))
     (is (true? (model/hidden-page? (str "$$$" (random-uuid)))))))
 
-(deftest get-namespace-children-test
+(deftest get-class-children-test
   (let [opts {:redirect? false :create-first-block? false :class? true}
         _ (page-handler/create! "class1" opts)
         _ (page-handler/create! "class2" opts)
@@ -108,9 +108,9 @@
         class2 (db/entity [:block/name "class2"])
         class3 (db/entity [:block/name "class3"])
         _ (db/transact! [{:db/id (:db/id class2)
-                          :block/namespace (:db/id class1)}
+                          :class/parent (:db/id class1)}
                          {:db/id (:db/id class3)
-                          :block/namespace (:db/id class2)}])]
+                          :class/parent (:db/id class2)}])]
     (is
-     (= (model/get-namespace-children repo (:db/id (db/entity [:block/name "class1"])))
+     (= (model/get-class-children repo (:db/id (db/entity [:block/name "class1"])))
         [(:db/id class2) (:db/id class3)]))))

+ 1 - 1
src/test/frontend/handler/db_based/property_test.cljs

@@ -214,7 +214,7 @@
       ;; set c2 as parent of c3
       (let [c3 (db/entity [:block/name "class3"])]
         (db/transact! [{:db/id (:db/id c3)
-                        :block/namespace (:db/id c2)}]))
+                        :class/parent (:db/id c2)}]))
       (db-property-handler/class-add-property! repo c2id "property-3")
       (db-property-handler/class-add-property! repo c2id "property-4")
       (is (= 3 (count (:classes-properties