Browse Source

Merge branch 'master' into enhance/ios-native-navigation

Tienson Qin 1 week ago
parent
commit
7ebd89a952

+ 21 - 2
deps/db/src/logseq/db/sqlite/export.cljs

@@ -466,7 +466,7 @@
                       (shallow-copy-page page-entity)
                       (when (and include-alias? (:block/alias page-entity))
                         {:block/alias (set (map #(vector :block/uuid (:block/uuid %)) (:block/alias page-entity)))})))
-        page-blocks-export {:pages-and-blocks [{:page page :blocks blocks}]
+        page-blocks-export {:pages-and-blocks [{:page page :blocks (or blocks [])}]
                             :properties properties
                             :classes classes}]
     (assoc (merge-export-maps page-blocks-export page-ent-export)
@@ -486,7 +486,26 @@
                          (remove :logseq.property/created-from-property))
         {:keys [pvalue-uuids] :as blocks-export}
         (build-blocks-export db page-blocks options)
-        page-blocks-export (build-page-blocks-export db page-entity (merge blocks-export options))
+        ontology-page-export
+        (when (and (not (:ontology-page? options))
+                   (or (entity-util/class? page-entity) (entity-util/property? page-entity)))
+          (build-mixed-properties-and-classes-export db [page-entity] {:include-uuid? true}))
+        class-page-properties-export
+        (when-let [props
+                     (and (not (:ontology-page? options))
+                          (entity-util/class? page-entity)
+                          (->> (:logseq.property.class/properties page-entity)
+                               (map :db/ident)
+                               seq))]
+            {:properties (build-export-properties db props {:shallow-copy? true})})
+        page-block-options (cond-> blocks-export
+                             ontology-page-export
+                             (merge-export-maps ontology-page-export class-page-properties-export)
+                             true
+                             (merge options
+                                    {:blocks (:blocks blocks-export)}
+                                    (when ontology-page-export {:ontology-page? true})))
+        page-blocks-export (build-page-blocks-export db page-entity page-block-options)
         page-block-uuids (set/union pvalue-uuids (:pvalue-uuids page-blocks-export))
         page-export (assoc page-blocks-export :pvalue-uuids page-block-uuids)]
     page-export))

+ 22 - 0
deps/db/test/logseq/db/sqlite/export_test.cljs

@@ -415,6 +415,28 @@
 
     (import-second-time-assertions conn conn2 journal-title original-data {:build-journal 20250210})))
 
+(deftest import-class-page
+  (let [class-uuid (random-uuid)
+        original-data
+        {:classes {:user.class/C0 {}
+                   :user.class/C1 {:build/class-extends [:user.class/C0]
+                                   :build/class-properties [:user.property/p1]
+                                   :block/uuid class-uuid
+                                   :build/keep-uuid? true}}
+         :properties {:user.property/p1 {:logseq.property/type :default}}
+         :pages-and-blocks [{:page {:block/uuid class-uuid}
+                             :blocks [{:block/title "class block"}]}]}
+        conn (db-test/create-conn-with-blocks (assoc original-data :build-existing-tx? true))
+        conn2 (db-test/create-conn)
+        imported-page (export-page-and-import-to-another-graph conn conn2 "C1")]
+
+    (is (= (expand-classes (:classes original-data)) (:classes imported-page))
+        "Class page is imported")
+    (is (= (expand-properties (:properties original-data)) (:properties imported-page))
+        "Class page's properties are imported")
+    (is (= (:pages-and-blocks original-data) (:pages-and-blocks imported-page))
+        "Page's blocks are imported")))
+
 (deftest import-page-with-different-property-types
   (let [block-object-uuid (random-uuid)
         original-data