Browse Source

chore: mv table property idents to their own ns

table feature will grow with time and could benefit from its own ns
Gabriel Horner 1 year ago
parent
commit
2d50f565ea

+ 5 - 5
deps/db/src/logseq/db/frontend/property.cljs

@@ -150,23 +150,23 @@
                                               :hide? true
                                               :view-context :page
                                               :public? true}}
-   :logseq.property/table-sorting {:schema
+   :logseq.property.table/sorting {:schema
                                    {:type :coll
                                     :hide? true
                                     :public? false}}
 
-   :logseq.property/table-filters {:schema
+   :logseq.property.table/filters {:schema
                                    {:type :coll
                                     :hide? true
                                     :public? false}}
 
-   :logseq.property/table-hidden-columns {:schema
+   :logseq.property.table/hidden-columns {:schema
                                           {:type :keyword
                                            :cardinality :many
                                            :hide? true
                                            :public? false}}
 
-   :logseq.property/table-ordered-columns {:schema
+   :logseq.property.table/ordered-columns {:schema
                                            {:type :coll
                                             :hide? true
                                             :public? false}}
@@ -201,7 +201,7 @@
 
 (def logseq-property-namespaces
   #{"logseq.property" "logseq.property.tldraw" "logseq.property.pdf" "logseq.task"
-    "logseq.property.linked-references" "logseq.property.asset"})
+    "logseq.property.linked-references" "logseq.property.asset" "logseq.property.table"})
 
 (defn logseq-property?
   "Determines if keyword is a logseq property"

+ 1 - 1
deps/db/src/logseq/db/frontend/schema.cljs

@@ -2,7 +2,7 @@
   "Main datascript schemas for the Logseq app"
   (:require [clojure.set :as set]))
 
-(def version 9)
+(def version 10)
 ;; A page is a special block, a page can corresponds to multiple files with the same ":block/name".
 (def ^:large-vars/data-var schema
   {:db/ident        {:db/unique :db.unique/identity}

+ 8 - 8
src/main/frontend/components/views.cljs

@@ -871,13 +871,13 @@
      (fn [sorting]
        (set-sorting! sorting)
        (p/let [entity (or entity (create-view!))]
-         (property-handler/set-block-property! repo (:db/id entity) :logseq.property/table-sorting sorting)))
+         (property-handler/set-block-property! repo (:db/id entity) :logseq.property.table/sorting sorting)))
      :set-filters!
      (fn [filters]
        (let [filters (table-filters->persist-state filters)]
          (set-filters! filters)
          (p/let [entity (or entity (create-view!))]
-           (property-handler/set-block-property! repo (:db/id entity) :logseq.property/table-filters filters))))
+           (property-handler/set-block-property! repo (:db/id entity) :logseq.property.table/filters filters))))
      :set-visible-columns!
      (fn [columns]
        (let [hidden-columns (vec (keep (fn [[column visible?]]
@@ -885,24 +885,24 @@
                                            column)) columns))]
          (set-visible-columns! columns)
          (p/let [entity (or entity (create-view!))]
-           (property-handler/set-block-property! repo (:db/id entity) :logseq.property/table-hidden-columns hidden-columns))))
+           (property-handler/set-block-property! repo (:db/id entity) :logseq.property.table/hidden-columns hidden-columns))))
      :set-ordered-columns!
      (fn [ordered-columns]
        (let [ids (vec (remove #{:select} ordered-columns))]
          (set-ordered-columns! ordered-columns)
          (p/let [entity (or entity (create-view!))]
-           (property-handler/set-block-property! repo (:db/id entity) :logseq.property/table-ordered-columns ids))))}))
+           (property-handler/set-block-property! repo (:db/id entity) :logseq.property.table/ordered-columns ids))))}))
 
 (rum/defc view-inner < rum/static
   [view-entity {:keys [data set-data! columns add-new-object! create-view! title-key] :as option}]
   (let [[input set-input!] (rum/use-state "")
-        sorting (:logseq.property/table-sorting view-entity)
+        sorting (:logseq.property.table/sorting view-entity)
         [sorting set-sorting!] (rum/use-state (or sorting [{:id :block/updated-at, :asc? false}]))
-        filters (:logseq.property/table-filters view-entity)
+        filters (:logseq.property.table/filters view-entity)
         [filters set-filters!] (rum/use-state (or filters []))
-        hidden-columns (:logseq.property/table-hidden-columns view-entity)
+        hidden-columns (:logseq.property.table/hidden-columns view-entity)
         [visible-columns set-visible-columns!] (rum/use-state (zipmap hidden-columns (repeat false)))
-        ordered-columns (vec (concat [:select] (:logseq.property/table-ordered-columns view-entity)))
+        ordered-columns (vec (concat [:select] (:logseq.property.table/ordered-columns view-entity)))
         [ordered-columns set-ordered-columns!] (rum/use-state ordered-columns)
         {:keys [set-sorting! set-filters! set-visible-columns! set-ordered-columns!]}
         (db-set-table-state! view-entity {:set-sorting! set-sorting!

+ 22 - 1
src/main/frontend/worker/db/migrate.cljs

@@ -43,6 +43,26 @@
   [{:db/id (:db/id (d/entity @conn :logseq.class/task))
     :db/ident :logseq.class/Task}])
 
+(defn- update-table-properties
+  [conn _search-db]
+  (let [old-new-props {:logseq.property/table-sorting :logseq.property.table/sorting
+                       :logseq.property/table-filters :logseq.property.table/filters
+                       :logseq.property/table-ordered-columns :logseq.property.table/ordered-columns
+                       :logseq.property/table-hidden-columns :logseq.property.table/hidden-columns}
+        props-tx (mapv (fn [[old new]]
+                         {:db/id (:db/id (d/entity @conn old))
+                          :db/ident new})
+                       old-new-props)]
+    ;; Property changes need to be in their own tx for subsequent uses of properties to take effect
+    (ldb/transact! conn props-tx {:db-migrate? true})
+
+    (mapcat (fn [[old new]]
+              (->> (d/q '[:find ?b ?prop-v :in $ ?prop :where [?b ?prop ?prop-v]] @conn old)
+                   (mapcat (fn [[id prop-value]]
+                             [[:db/retract id old]
+                              [:db/add id new prop-value]]))))
+            old-new-props)))
+
 (def schema-version->updates
   [[3 {:properties [:logseq.property/table-sorting :logseq.property/table-filters
                     :logseq.property/table-hidden-columns :logseq.property/table-ordered-columns]
@@ -58,7 +78,8 @@
    [6 {:properties [:logseq.property.asset/remote-metadata]}]
    [7 {:fix replace-original-name-content-with-title}]
    [8 {:fix replace-object-and-page-type-with-node}]
-   [9 {:fix update-task-ident}]])
+   [9 {:fix update-task-ident}]
+   [10 {:fix update-table-properties}]])
 
 (let [max-schema-version (apply max (map first schema-version->updates))]
   (assert (<= db-schema/version max-schema-version))