Browse Source

Merge pull request #6214 from logseq/fix/hidden-properties-in-autocompletion

Fix: Property completion for hidden properties and property ordering
Gabriel Horner 3 years ago
parent
commit
49fbdd0244

+ 2 - 3
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)))

+ 27 - 0
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)))

+ 2 - 2
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)

+ 1 - 1
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))

+ 0 - 1
src/main/frontend/db/model.cljs

@@ -1431,7 +1431,6 @@
     (->> (map keys properties)
          (apply concat)
          distinct
-         (remove #{:id})
          sort)))
 
 (defn get-property-values

+ 1 - 1
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?

+ 4 - 1
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