From 83e9cda4463f110e6bb3355476851b8ab7ce965c Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Fri, 6 Oct 2023 12:29:33 -0400 Subject: [PATCH] fix: new properties that didn't have :block/journal? Some page queries depend on the existence of this attribute including graph view ones. This was caught by the validation script. After the fix all pages have this attribute. Creation scripts also updated to use standard timestamp approach --- deps/db/src/logseq/db/sqlite/util.cljs | 16 +++++-- .../logseq/tasks/db_graph/create_graph.cljs | 46 +++++++++---------- .../tasks/db_graph/validate_client_db.cljs | 14 ++---- src/main/frontend/components/journal.cljs | 1 - .../frontend/handler/db_based/property.cljs | 6 +-- 5 files changed, 41 insertions(+), 42 deletions(-) diff --git a/deps/db/src/logseq/db/sqlite/util.cljs b/deps/db/src/logseq/db/sqlite/util.cljs index 4c04fe201..6f5717c2b 100644 --- a/deps/db/src/logseq/db/sqlite/util.cljs +++ b/deps/db/src/logseq/db/sqlite/util.cljs @@ -64,8 +64,7 @@ (map (fn [{db-id :db/id}] [:block/uuid (some #(when (= db-id (:db/id %)) (:block/uuid %)) blocks)]) v))] - :else [a v] - ))) + :else [a v]))) (transit/write t-writer)))) (defn block-with-timestamps @@ -85,6 +84,14 @@ [s] (string/lower-case s)) +(defn build-new-property + "Build a standard new property so that it is is consistent across contexts" + [block] + (block-with-timestamps + (merge {:block/type "property" + :block/journal? false} + block))) + (defn build-db-initial-data [config-content] (let [initial-files [{:block/uuid (d/squuid) @@ -99,11 +106,10 @@ default-properties (map (fn [[k-keyword {:keys [schema original-name]}]] (let [k-name (name k-keyword)] - (block-with-timestamps + (build-new-property {:block/schema schema :block/original-name (or original-name k-name) :block/name (sanitize-page-name k-name) - :block/uuid (d/squuid) - :block/type "property"}))) + :block/uuid (d/squuid)}))) db-property/built-in-properties)] (concat initial-files default-properties))) diff --git a/scripts/src/logseq/tasks/db_graph/create_graph.cljs b/scripts/src/logseq/tasks/db_graph/create_graph.cljs index 82d1ee5bc..784496e32 100644 --- a/scripts/src/logseq/tasks/db_graph/create_graph.cljs +++ b/scripts/src/logseq/tasks/db_graph/create_graph.cljs @@ -157,21 +157,18 @@ property-db-ids (->> property-uuids (map #(vector (name (first %)) (new-db-id))) (into {})) - created-at (js/Date.now) new-properties-tx (mapv (fn [[prop-name uuid]] - (merge {:db/id (or (property-db-ids (name prop-name)) - (throw (ex-info "No :db/id for property" {:property prop-name}))) - :block/uuid uuid - :block/schema (merge {:type :default} - (get-in properties [prop-name :block/schema])) - :block/original-name (name prop-name) - :block/name (sqlite-util/sanitize-page-name (name prop-name)) - :block/type "property" - :block/created-at created-at - :block/updated-at created-at} - (when-let [props (not-empty (get-in properties [prop-name :properties]))] - {:block/properties (->block-properties-tx props uuid-maps) - :block/refs (build-property-refs props property-db-ids)}))) + (sqlite-util/build-new-property + (merge {:db/id (or (property-db-ids (name prop-name)) + (throw (ex-info "No :db/id for property" {:property prop-name}))) + :block/uuid uuid + :block/schema (merge {:type :default} + (get-in properties [prop-name :block/schema])) + :block/original-name (name prop-name) + :block/name (sqlite-util/sanitize-page-name (name prop-name))} + (when-let [props (not-empty (get-in properties [prop-name :properties]))] + {:block/properties (->block-properties-tx props uuid-maps) + :block/refs (build-property-refs props property-db-ids)})))) property-uuids) pages-and-blocks-tx (vec @@ -180,17 +177,18 @@ (let [page-id (or (:db/id page) (new-db-id))] (into ;; page tx - [(merge (dissoc page :properties) - {:db/id page-id - :block/original-name (or (:block/original-name page) (string/capitalize (:block/name page))) - :block/name (or (:block/name page) (sqlite-util/sanitize-page-name (:block/original-name page))) - :block/created-at created-at - :block/updated-at created-at} - (when (seq (:properties page)) - {:block/properties (->block-properties-tx (:properties page) uuid-maps) - :block/refs (build-property-refs (:properties page) property-db-ids) + [(sqlite-util/block-with-timestamps + (merge + {:db/id page-id + :block/original-name (or (:block/original-name page) (string/capitalize (:block/name page))) + :block/name (or (:block/name page) (sqlite-util/sanitize-page-name (:block/original-name page))) + :block/journal? false} + (dissoc page :properties) + (when (seq (:properties page)) + {:block/properties (->block-properties-tx (:properties page) uuid-maps) + :block/refs (build-property-refs (:properties page) property-db-ids) ;; app doesn't do this yet but it should to link property to page - :block/path-refs (build-property-refs (:properties page) property-db-ids)}))] + :block/path-refs (build-property-refs (:properties page) property-db-ids)})))] ;; blocks tx (reduce (fn [acc m] (conj acc diff --git a/scripts/src/logseq/tasks/db_graph/validate_client_db.cljs b/scripts/src/logseq/tasks/db_graph/validate_client_db.cljs index f1d83f4af..04567dba0 100644 --- a/scripts/src/logseq/tasks/db_graph/validate_client_db.cljs +++ b/scripts/src/logseq/tasks/db_graph/validate_client_db.cljs @@ -41,6 +41,7 @@ [[:block/name :string] [:block/original-name :string] [:block/type {:optional true} [:enum #{"property"} #{"class"} #{"object"} #{"whiteboard"}]] + [:block/journal? :boolean] ;; TODO: Consider moving to just normal and class after figuring out journal attributes [:block/format {:optional true} [:enum :markdown]] ;; TODO: Should this be here or in common? @@ -51,9 +52,8 @@ (concat [:map {:closed false}] page-attrs - ;; These are optional b/c some built-in pages only have :journal? - [[:block/journal? {:optional true} :boolean] - [:block/journal-day {:optional true} :int] + ;; journal-day is only set for journal pages + [[:block/journal-day {:optional true} :int] [:block/namespace {:optional true} :int]] page-or-block-attrs))) @@ -61,9 +61,7 @@ (vec (concat [:map {:closed false}] - [[:block/collapsed? {:optional true} :boolean] - ;; TODO: Fix bug which introduces journal? - [:block/journal? {:optional true} :boolean]] + [[:block/collapsed? {:optional true} :boolean]] page-attrs page-or-block-attrs))) @@ -71,9 +69,7 @@ (vec (concat [:map {:closed false}] - ;; TODO: Fix bug which introduces journal? - [[:block/journal? {:optional true} :boolean] - [:block/namespace {:optional true} :int] + [[:block/namespace {:optional true} :int] ;; TODO: Require :block/schema [:block/schema {:optional true} diff --git a/src/main/frontend/components/journal.cljs b/src/main/frontend/components/journal.cljs index e5a78df25..03b523002 100644 --- a/src/main/frontend/components/journal.cljs +++ b/src/main/frontend/components/journal.cljs @@ -3,7 +3,6 @@ [frontend.components.page :as page] [frontend.db :as db] [frontend.db-mixins :as db-mixins] - [frontend.db.model :as model] [frontend.handler.page :as page-handler] [frontend.state :as state] [frontend.ui :as ui] diff --git a/src/main/frontend/handler/db_based/property.cljs b/src/main/frontend/handler/db_based/property.cljs index 8273d58b5..8fee2905c 100644 --- a/src/main/frontend/handler/db_based/property.cljs +++ b/src/main/frontend/handler/db_based/property.cljs @@ -8,6 +8,7 @@ [frontend.modules.outliner.core :as outliner-core] [frontend.util :as util] [logseq.graph-parser.util :as gp-util] + [logseq.db.sqlite.util :as sqlite-util] [malli.util :as mu] [malli.error :as me])) @@ -106,12 +107,11 @@ :block/type "property"})] {:outliner-op :save-block})) (when (nil? property) ;if property not exists yet - (db/transact! repo [(outliner-core/block-with-timestamps + (db/transact! repo [(sqlite-util/build-new-property {:block/schema schema :block/original-name k-name :block/name (util/page-name-sanity-lc k-name) - :block/uuid property-uuid - :block/type "property"})] + :block/uuid property-uuid})] {:outliner-op :insert-blocks})))) (defn- reset-block-property-multiple-values!