瀏覽代碼

enhance: export+import handles nested :build/page

property values
Gabriel Horner 7 月之前
父節點
當前提交
841fbdcdf6
共有 2 個文件被更改,包括 34 次插入4 次删除
  1. 12 1
      deps/db/src/logseq/db/sqlite/build.cljs
  2. 22 3
      deps/db/test/logseq/db/sqlite/build_test.cljs

+ 12 - 1
deps/db/src/logseq/db/sqlite/build.cljs

@@ -340,7 +340,18 @@
   [{:keys [pages-and-blocks properties classes]}]
   (let [page-block-properties (->> pages-and-blocks
                                    (map #(-> (:blocks %) vec (conj (:page %))))
-                                   (mapcat (fn [m] (mapcat #(into (:build/properties %)) m)))
+                                   (mapcat (fn build-node-props-vec [nodes]
+                                             (mapcat (fn [m]
+                                                       (if-let [pvalue-pages
+                                                                (->> (vals (:build/properties m))
+                                                                     (mapcat #(if (set? %) % [%]) )
+                                                                     (filter page-prop-value?)
+                                                                     (map second)
+                                                                     seq)]
+                                                         (into (vec (:build/properties m))
+                                                               (build-node-props-vec pvalue-pages))
+                                                         (:build/properties m)))
+                                                     nodes)))
                                    set)
         property-properties (->> (vals properties)
                                  (mapcat #(into [] (:build/properties %))))

+ 22 - 3
deps/db/test/logseq/db/sqlite/build_test.cljs

@@ -1,11 +1,11 @@
 (ns logseq.db.sqlite.build-test
   (:require [cljs.test :refer [deftest is testing]]
             [datascript.core :as d]
+            [logseq.common.util.page-ref :as page-ref]
+            [logseq.db :as ldb]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.sqlite.build :as sqlite-build]
-            [logseq.db.test.helper :as db-test]
-            [logseq.db :as ldb]
-            [logseq.common.util.page-ref :as page-ref]))
+            [logseq.db.test.helper :as db-test]))
 
 (deftest build-tags
   (let [conn (db-test/create-conn)
@@ -68,6 +68,25 @@
                 db-property/property-value-content))
         "built-in :default property is created and correctly associated to a block")))
 
+(deftest build-properties-with-build-page
+  (let [conn (db-test/create-conn-with-blocks
+              [{:page {:block/title "page1"
+                       :build/properties
+                       {:date [:build/page {:build/journal 20250223}]
+                        :page #{[:build/page {:block/title "page object"
+                                              :build/properties {:p1 "foo"
+                                                                 :date [:build/page {:build/journal 20250224}]}}]}}}}])]
+    (is (= "foo"
+           (->> (db-test/find-page-by-title @conn "page object")
+                :user.property/p1
+                db-property/property-value-content))
+        ":build/page page can have a :default property")
+    (is (= 20250224
+           (->> (db-test/find-page-by-title @conn "page object")
+                :user.property/date
+                :block/journal-day))
+        ":build/page page can have a :date property defined by another :build/page")))
+
 (deftest build-for-existing-blocks
   (let [conn (db-test/create-conn)
         _ (sqlite-build/create-blocks