Browse Source

fix: block objects failed import if they have properties

Gabriel Horner 8 months ago
parent
commit
52acbd0ed2

+ 10 - 10
deps/db/src/logseq/db/sqlite/export.cljs

@@ -132,20 +132,20 @@
 
 (defn- build-node-classes
   [db build-block block-tags properties]
-  (let [pvalue-class-ents (->> (:build/properties build-block)
-                               vals
-                               (mapcat (fn [val-or-vals]
-                                         (mapcat #(when (sqlite-build/page-prop-value? %) (:build/tags (second %)))
-                                                 (if (set? val-or-vals) val-or-vals [val-or-vals]))))
-                               (remove db-class/logseq-class?)
-                               (map #(d/entity db %)))
+  (let [pvalue-classes (->> (:build/properties build-block)
+                            vals
+                            (mapcat (fn [val-or-vals]
+                                      (mapcat #(when (sqlite-build/page-prop-value? %) (:build/tags (second %)))
+                                              (if (set? val-or-vals) val-or-vals [val-or-vals]))))
+                            (remove db-class/logseq-class?))
         property-classes (->> (mapcat :build/property-classes (vals properties))
                               (remove db-class/logseq-class?)
                               set)
-        new-class-ents (concat (remove #(db-class/logseq-class? (:db/ident %)) block-tags)
-                               pvalue-class-ents)
-        shallow-classes (set/difference property-classes (set (map :db/ident new-class-ents)))]
+        new-class-ents (remove #(db-class/logseq-class? (:db/ident %)) block-tags)
+        shallow-classes (set/difference (into property-classes pvalue-classes)
+                                        (set (map :db/ident new-class-ents)))]
     (merge
+     ;; These are shallow b/c properties have already been built
      (when (seq shallow-classes)
        (->> shallow-classes
             (map #(d/entity db %))

+ 10 - 4
deps/db/test/logseq/db/sqlite/export_test.cljs

@@ -322,8 +322,9 @@
                       :user.property/date {:logseq.property/type :date}
                       :user.property/node {:logseq.property/type :node
                                            :db/cardinality :db.cardinality/many
-                                           :build/property-classes [:user.class/MyClass]}}
-         :classes {:user.class/MyClass {}}
+                                           :build/property-classes [:user.class/MyClass]}
+                      :user.property/p1 {:logseq.property/type :default}}
+         :classes {:user.class/MyClass {:build/class-properties [:user.property/p1]}}
          :pages-and-blocks
          [{:page {:block/title "page1"}
            :blocks [{:block/title "num block"
@@ -345,9 +346,14 @@
         conn2 (db-test/create-conn)
         imported-page (export-page-and-import-to-another-graph conn conn2 "page1")]
 
-    (is (= (expand-properties (:properties original-data)) (:properties imported-page))
+    (is (= (-> (expand-properties (:properties original-data))
+               ;; Don't include shallow page object's property
+               (dissoc :user.property/p1))
+           (:properties imported-page))
         "Page's properties are imported")
-    (is (= (expand-classes (:classes original-data)) (:classes imported-page))
+    (is (= (-> (expand-classes (:classes original-data))
+               (medley/dissoc-in [:user.class/MyClass :build/class-properties]))
+           (:classes imported-page))
         "Page's classes are imported")
     (is (= (-> (:pages-and-blocks original-data)
                ;; adjust shallow block