diff --git a/deps/graph-parser/src/logseq/graph_parser/block.cljs b/deps/graph-parser/src/logseq/graph_parser/block.cljs index 3878c2fb0..d15ef8130 100644 --- a/deps/graph-parser/src/logseq/graph_parser/block.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/block.cljs @@ -198,7 +198,6 @@ [format properties user-config] (when (seq properties) (let [properties (seq properties) - properties (into {} properties) page-refs (get-page-ref-names-from-properties format properties user-config) properties (->> properties (map (fn [[k v]] @@ -512,7 +511,7 @@ :content content :level 1 :properties properties - :properties-order properties-order + :properties-order (vec properties-order) :refs property-refs :pre-block? true :unordered true @@ -548,7 +547,7 @@ (assoc :properties (:properties properties)) (seq (:properties-order properties)) - (assoc :properties-order (:properties-order properties))) + (assoc :properties-order (vec (:properties-order properties)))) block (if (get-in block [:properties :collapsed]) (-> (assoc block :collapsed? true) (update :properties (fn [m] (dissoc m :collapsed))) diff --git a/deps/graph-parser/test/logseq/graph_parser_test.cljs b/deps/graph-parser/test/logseq/graph_parser_test.cljs index 739b0e62a..8d262582b 100644 --- a/deps/graph-parser/test/logseq/graph_parser_test.cljs +++ b/deps/graph-parser/test/logseq/graph_parser_test.cljs @@ -1,5 +1,6 @@ (ns logseq.graph-parser-test (:require [cljs.test :refer [deftest testing is]] + [clojure.string :as string] [logseq.graph-parser :as graph-parser] [logseq.db :as ldb] [logseq.graph-parser.block :as gp-block] @@ -41,3 +42,29 @@ (catch :default _))) (is (= nil @deleted-page) "Page should not be deleted when there is unexpected failure")))) + +(defn- test-property-order [num-properties] + (let [conn (ldb/start-conn) + properties (mapv #(keyword (str "p" %)) (range 0 num-properties)) + text (->> properties + (map #(str (name %) ":: " (name %) "-value")) + (string/join "\n")) + ;; Test page properties and block properties + body (str text "\n- " text) + _ (graph-parser/parse-file conn "foo.md" body {}) + properties-orders (->> (d/q '[:find (pull ?b [*]) + :in $ + :where [?b :block/content] [(missing? $ ?b :block/name)]] + @conn) + (map first) + (map :block/properties-order))] + (is (every? vector? properties-orders) + "Order is persisted as a vec to avoid edn serialization quirks") + (is (= [properties properties] properties-orders) + "Property order"))) + +(deftest properties-order + (testing "Sort order and persistence of a few properties" + (test-property-order 4)) + (testing "Sort order and persistence of 10 properties" + (test-property-order 10))) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index 32407227d..a21f36ab4 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -1845,8 +1845,8 @@ [config block] (let [properties (walk/keywordize-keys (:block/properties block)) properties-order (:block/properties-order block) - properties (apply dissoc properties (property/built-in-properties)) - properties-order (remove (property/built-in-properties) properties-order) + properties (apply dissoc properties (property/hidden-properties)) + properties-order (remove (property/hidden-properties) properties-order) pre-block? (:block/pre-block? block) properties (if pre-block? (let [repo (state/get-current-repo) diff --git a/src/main/frontend/components/editor.cljs b/src/main/frontend/components/editor.cljs index 77776d088..1363b2faf 100644 --- a/src/main/frontend/components/editor.cljs +++ b/src/main/frontend/components/editor.cljs @@ -177,7 +177,7 @@ result {:on-chosen chosen-handler :on-enter non-exist-block-handler - :empty-placeholder [:div.text-gray-500.pl-4.pr-4 "Search for a block"] + :empty-placeholder [:div.text-gray-500.pl-4.pr-4 (t :editor/block-search)] :item-render (fn [{:block/keys [page uuid]}] ;; content returned from search engine is normalized (let [page (or (:block/original-name page) (:block/name page)) diff --git a/src/main/frontend/db/model.cljs b/src/main/frontend/db/model.cljs index 8ffeb338f..eaf3021a0 100644 --- a/src/main/frontend/db/model.cljs +++ b/src/main/frontend/db/model.cljs @@ -1431,7 +1431,6 @@ (->> (map keys properties) (apply concat) distinct - (remove #{:id}) sort))) (defn get-property-values diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index aaa3933c7..17d534065 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -384,7 +384,7 @@ block (update block :block/refs remove-non-existed-refs!) block (attach-page-properties-if-exists! block) new-properties (merge - (select-keys properties (property/built-in-properties)) + (select-keys properties (property/hidden-properties)) (:block/properties block))] (-> block (dissoc :block/top? diff --git a/src/main/frontend/search.cljs b/src/main/frontend/search.cljs index affdcf1dc..9a4e0e006 100644 --- a/src/main/frontend/search.cljs +++ b/src/main/frontend/search.cljs @@ -11,6 +11,7 @@ [frontend.search.protocol :as protocol] [frontend.state :as state] [frontend.util :as util] + [frontend.util.property :as property] [goog.object :as gobj] [promesa.core :as p])) @@ -169,7 +170,9 @@ ([q limit] (when q (let [q (clean-str q) - properties (map name (db-model/get-all-properties))] + properties (->> (db-model/get-all-properties) + (remove (property/hidden-properties)) + (map name))] (when (seq properties) (if (string/blank? q) properties