瀏覽代碼

Fix page block not saving invalid-properties

Gabriel Horner 3 年之前
父節點
當前提交
b47826d69d

+ 18 - 9
deps/graph-parser/src/logseq/graph_parser/extract.cljc

@@ -42,12 +42,12 @@
 (defn- build-page-entity
   [properties file page-name page ref-tags {:keys [date-formatter db]}]
   (let [alias (:alias properties)
-        alias (if (string? alias) [alias] alias)
-        aliases (and alias
+        alias' (if (string? alias) [alias] alias)
+        aliases (and alias'
                      (seq (remove #(or (= page-name (gp-util/page-name-sanity-lc %))
                                        (string/blank? %)) ;; disable blank alias
-                                  alias)))
-        aliases (->>
+                                  alias')))
+        aliases' (->>
                  (map
                   (fn [alias]
                     (let [page-name (gp-util/page-name-sanity-lc alias)
@@ -65,17 +65,26 @@
                          :block/alias aliases}
                         {:block/name page-name})))
                   aliases)
-                 (remove nil?))]
+                 (remove nil?))
+        [*valid-properties *invalid-properties]
+        ((juxt filter remove)
+         (fn [[k _v]] (gp-property/valid-property-name? (str k))) properties)
+        valid-properties (into {} *valid-properties)
+        invalid-properties (set (map (comp name first) *invalid-properties))]
     (cond->
      (gp-util/remove-nils
       (assoc
        (gp-block/page-name->map page false db true date-formatter)
        :block/file {:file/path (gp-util/path-normalize file)}))
-     (seq properties)
-     (assoc :block/properties properties)
 
-     (seq aliases)
-     (assoc :block/alias aliases)
+     (seq valid-properties)
+     (assoc :block/properties valid-properties)
+
+     (seq invalid-properties)
+     (assoc :block/invalid-properties invalid-properties)
+
+     (seq aliases')
+     (assoc :block/alias aliases')
 
      (:tags properties)
      (assoc :block/tags (let [tags (:tags properties)

+ 19 - 4
deps/graph-parser/test/logseq/graph_parser_test.cljs

@@ -210,15 +210,30 @@
   (let [conn (ldb/start-conn)
         properties {"foo" "valid"
                     "[[foo]]" "invalid"
-                    "some,prop" "invalid"}]
-    (graph-parser/parse-file conn "foo.md" (gp-property/->block-content properties) {})
+                    "some,prop" "invalid"}
+        body (str (gp-property/->block-content properties)
+                  "\n- " (gp-property/->block-content properties))]
+    (graph-parser/parse-file conn "foo.md" body {})
 
     (is (= [{:block/properties {:foo "valid"}
              :block/invalid-properties #{"[[foo]]" "some,prop"}}]
            (->> (d/q '[:find (pull ?b [*])
                        :in $
-                       :where [?b :block/properties] [(missing? $ ?b :block/name)]]
+                       :where
+                       [?b :block/properties]
+                       [(missing? $ ?b :block/pre-block?)]
+                       [(missing? $ ?b :block/name)]]
                      @conn)
                 (map first)
                 (map #(select-keys % [:block/properties :block/invalid-properties]))))
-        "Has correct (in)valid block properties")))
+        "Has correct (in)valid block properties")
+
+    (is (= [{:block/properties {:foo "valid"}
+             :block/invalid-properties #{"[[foo]]" "some,prop"}}]
+           (->> (d/q '[:find (pull ?b [*])
+                       :in $
+                       :where [?b :block/properties] [?b :block/name]]
+                     @conn)
+                (map first)
+                (map #(select-keys % [:block/properties :block/invalid-properties]))))
+        "Has correct (in)valid page properties")))