diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index f17880ae1f..d4c895e229 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -166,25 +166,27 @@ logseq.common.util.namespace ns-util logseq.common.util.page-ref page-ref logseq.db ldb + logseq.db.common.entity-util common-entity-util + logseq.db.common.order db-order + logseq.db.common.property-util db-property-util + logseq.db.common.sqlite sqlite-common-db logseq.db.file-based.rules file-rules logseq.db.file-based.schema file-schema + logseq.db.file-based.entity-util file-entity-util logseq.db.frontend.class db-class logseq.db.frontend.content db-content logseq.db.frontend.db-ident db-ident logseq.db.frontend.entity-plus entity-plus logseq.db.frontend.entity-util entity-util logseq.db.frontend.inputs db-inputs - logseq.db.common.order db-order logseq.db.frontend.property db-property logseq.db.frontend.property.build db-property-build logseq.db.frontend.property.type db-property-type - logseq.db.common.property-util db-property-util logseq.db.frontend.rules rules logseq.db.frontend.schema db-schema logseq.db.frontend.validate db-validate logseq.db.sqlite.build sqlite-build logseq.db.sqlite.cli sqlite-cli - logseq.db.common.sqlite sqlite-common-db logseq.db.sqlite.create-graph sqlite-create-graph logseq.db.sqlite.export sqlite-export logseq.db.sqlite.util sqlite-util diff --git a/deps/db/.clj-kondo/config.edn b/deps/db/.clj-kondo/config.edn index 9d45762eb1..e4b4371701 100644 --- a/deps/db/.clj-kondo/config.edn +++ b/deps/db/.clj-kondo/config.edn @@ -9,24 +9,26 @@ :consistent-alias {:aliases {clojure.string string logseq.db ldb + logseq.db.common.entity-util common-entity-util + logseq.db.common.order db-order + logseq.db.common.property-util db-property-util + logseq.db.common.sqlite sqlite-common-db logseq.db.frontend.content db-content logseq.db.frontend.class db-class logseq.db.frontend.db-ident db-ident logseq.db.frontend.inputs db-inputs - logseq.db.common.order db-order logseq.db.frontend.property db-property logseq.db.frontend.property.build db-property-build logseq.db.frontend.property.type db-property-type - logseq.db.common.property-util db-property-util logseq.db.file-based.rules file-rules logseq.db.file-based.schema file-schema + logseq.db.file-based.entity-util file-entity-util logseq.db.frontend.entity-plus entity-plus logseq.db.frontend.rules rules logseq.db.frontend.schema db-schema logseq.db.frontend.validate db-validate logseq.db.sqlite.build sqlite-build logseq.db.sqlite.cli sqlite-cli - logseq.db.common.sqlite sqlite-common-db logseq.db.sqlite.create-graph sqlite-create-graph logseq.db.sqlite.export sqlite-export logseq.db.sqlite.util sqlite-util}}} diff --git a/deps/db/src/logseq/db.cljs b/deps/db/src/logseq/db.cljs index 3c41898282..b6f09ae6c5 100644 --- a/deps/db/src/logseq/db.cljs +++ b/deps/db/src/logseq/db.cljs @@ -17,6 +17,7 @@ [logseq.db.frontend.entity-util :as entity-util] [logseq.db.frontend.property :as db-property] [logseq.db.frontend.rules :as rules] + [logseq.db.common.entity-util :as common-entity-util] [logseq.db.common.sqlite :as sqlite-common-db] [logseq.db.sqlite.util :as sqlite-util] [logseq.db.file-based.rules :as file-rules]) @@ -90,13 +91,13 @@ (prn :debug-tx-data tx-data) (throw e)))))))) -(def page? entity-util/page?) +(def page? common-entity-util/page?) (def internal-page? entity-util/internal-page?) (def class? entity-util/class?) (def property? entity-util/property?) (def closed-value? entity-util/closed-value?) -(def whiteboard? entity-util/whiteboard?) -(def journal? entity-util/journal?) +(def whiteboard? common-entity-util/whiteboard?) +(def journal? common-entity-util/journal?) (def hidden? entity-util/hidden?) (def object? entity-util/object?) (def asset? entity-util/asset?) diff --git a/deps/db/src/logseq/db/common/delete_blocks.cljs b/deps/db/src/logseq/db/common/delete_blocks.cljs index 0bda105310..4796c9923f 100644 --- a/deps/db/src/logseq/db/common/delete_blocks.cljs +++ b/deps/db/src/logseq/db/common/delete_blocks.cljs @@ -5,6 +5,7 @@ [logseq.common.util :as common-util] [logseq.common.util.block-ref :as block-ref] [logseq.common.util.page-ref :as page-ref] + [logseq.db.common.entity-util :as common-entity-util] [logseq.db.frontend.entity-plus :as entity-plus] [logseq.db.frontend.entity-util :as entity-util])) @@ -54,7 +55,7 @@ (contains? #{:db.fn/retractEntity :db/retractEntity} (first tx))) (second tx))) txs) (filter (fn [id] - (not (entity-util/page? (d/entity db id))))))] + (not (common-entity-util/page? (d/entity db id))))))] (when (seq retracted-block-ids) (let [retracted-blocks (map #(d/entity db %) retracted-block-ids) retracted-tx (build-retracted-tx retracted-blocks) diff --git a/deps/db/src/logseq/db/common/entity_util.cljs b/deps/db/src/logseq/db/common/entity_util.cljs new file mode 100644 index 0000000000..4755d83a7b --- /dev/null +++ b/deps/db/src/logseq/db/common/entity_util.cljs @@ -0,0 +1,19 @@ +(ns logseq.db.common.entity-util + "Lower level entity util fns for DB and file graphs" + (:require [logseq.db.file-based.entity-util :as file-entity-util] + [logseq.db.frontend.entity-util :as entity-util])) + +(defn whiteboard? + [entity] + (or (entity-util/whiteboard? entity) + (file-entity-util/whiteboard? entity))) + +(defn journal? + [entity] + (or (entity-util/journal? entity) + (file-entity-util/journal? entity))) + +(defn page? + [entity] + (or (entity-util/page? entity) + (file-entity-util/page? entity))) \ No newline at end of file diff --git a/deps/db/src/logseq/db/common/sqlite.cljs b/deps/db/src/logseq/db/common/sqlite.cljs index 9f6930924d..06d4334966 100644 --- a/deps/db/src/logseq/db/common/sqlite.cljs +++ b/deps/db/src/logseq/db/common/sqlite.cljs @@ -10,6 +10,7 @@ [logseq.common.util.date-time :as date-time-util] [logseq.db.frontend.entity-plus :as entity-plus] [logseq.db.frontend.entity-util :as entity-util] + [logseq.db.common.entity-util :as common-entity-util] [logseq.db.common.order :as db-order] [logseq.db.sqlite.util :as sqlite-util])) @@ -30,7 +31,7 @@ (->> (d/datoms db :avet :block/title page-name) (filter (fn [d] (let [e (d/entity db (:e d))] - (entity-util/page? e)))) + (common-entity-util/page? e)))) (map :e) sort first)) @@ -143,9 +144,9 @@ (let [block (d/entity db (if (uuid? id) [:block/uuid id] id)) - page? (entity-util/page? block) + page? (common-entity-util/page? block) get-children (fn [block children] - (let [long-page? (and (> (count children) 500) (not (entity-util/whiteboard? block)))] + (let [long-page? (and (> (count children) 500) (not (common-entity-util/whiteboard? block)))] (if long-page? (->> (map (fn [e] (select-keys e [:db/id :block/uuid :block/page :block/order :block/parent :block/collapsed? :block/link])) diff --git a/deps/db/src/logseq/db/file_based/entity_util.cljs b/deps/db/src/logseq/db/file_based/entity_util.cljs new file mode 100644 index 0000000000..35175e5c95 --- /dev/null +++ b/deps/db/src/logseq/db/file_based/entity_util.cljs @@ -0,0 +1,14 @@ +(ns logseq.db.file-based.entity-util + "Lower level entity util fns for file graphs") + +(defn whiteboard? + [entity] + (identical? "whiteboard" (:block/type entity))) + +(defn journal? + [entity] + (identical? "journal" (:block/type entity))) + +(defn page? + [entity] + (contains? #{"page" "journal" "whiteboard"} (:block/type entity))) \ No newline at end of file diff --git a/deps/db/src/logseq/db/frontend/entity_util.cljs b/deps/db/src/logseq/db/frontend/entity_util.cljs index 5d5b2e101a..627cd21e30 100644 --- a/deps/db/src/logseq/db/frontend/entity_util.cljs +++ b/deps/db/src/logseq/db/frontend/entity_util.cljs @@ -1,5 +1,5 @@ (ns logseq.db.frontend.entity-util - "Lower level entity util fns used across db namespaces" + "Lower level entity util fns for DB graphs" (:require [clojure.string :as string] [datascript.db] [datascript.impl.entity :as de]) @@ -33,11 +33,7 @@ (defn whiteboard? "Given a page entity or map, check if it is a whiteboard page" [entity] - (or - ;; db based graph - (has-tag? entity :logseq.class/Whiteboard) - ;; file based graph - (identical? "whiteboard" (:block/type entity)))) + (has-tag? entity :logseq.class/Whiteboard)) (defn closed-value? [entity] @@ -46,24 +42,15 @@ (defn journal? "Given a page entity or map, check if it is a journal page" [entity] - (or - ;; db based graph - (has-tag? entity :logseq.class/Journal) - ;; file based graph - (identical? "journal" (:block/type entity)))) + (has-tag? entity :logseq.class/Journal)) (defn page? [entity] - (or - ;; db based graph - (internal-page? entity) - (class? entity) - (property? entity) - (whiteboard? entity) - (journal? entity) - - ;; file based graph - (contains? #{"page" "journal" "whiteboard"} (:block/type entity)))) + (or (internal-page? entity) + (class? entity) + (property? entity) + (whiteboard? entity) + (journal? entity))) (defn asset? "Given an entity or map, check if it is an asset block" diff --git a/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj b/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj index b4542e19cc..e4e82ede18 100644 --- a/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj +++ b/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj @@ -77,7 +77,9 @@ (defn- validate-multi-graph-fns-not-in-file-or-db [] - (let [multi-graph-fns ["config/db-based-graph\\?" "sqlite-util/db-based-graph\\?"] + (let [multi-graph-fns ["config/db-based-graph\\?" "sqlite-util/db-based-graph\\?" + ;; Use file-entity-util and entity-util when in a single graph context + "ldb/whiteboard\\?" "ldb/journal\\?" "ldb/page\\?"] res (apply shell {:out :string :continue true} "git grep -E" (str "(" (string/join "|" multi-graph-fns) ")") (into file-graph-paths db-graph-paths))] diff --git a/src/main/frontend/components/objects.cljs b/src/main/frontend/components/objects.cljs index 90760af158..f363fb7660 100644 --- a/src/main/frontend/components/objects.cljs +++ b/src/main/frontend/components/objects.cljs @@ -19,6 +19,7 @@ [logseq.common.config :as common-config] [logseq.db :as ldb] [logseq.db.frontend.property :as db-property] + [logseq.db.frontend.entity-util :as entity-util] [logseq.outliner.property :as outliner-property] [logseq.shui.ui :as shui] [promesa.core :as p] @@ -187,8 +188,8 @@ :class-schema? true}])) :on-delete-rows (fn [table selected-rows] ;; Built-in objects must not be deleted e.g. Tag, Property and Root - (let [pages (->> selected-rows (filter ldb/page?) (remove :logseq.property/built-in?)) - blocks (->> selected-rows (remove ldb/page?) (remove :logseq.property/built-in?))] + (let [pages (->> selected-rows (filter entity-util/page?) (remove :logseq.property/built-in?)) + blocks (->> selected-rows (remove entity-util/page?) (remove :logseq.property/built-in?))] (p/do! (when-let [f (get-in table [:data-fns :set-row-selection!])] (f {})) @@ -267,8 +268,8 @@ ;; Relationships with built-in properties must not be deleted e.g. built-in? or parent :on-delete-rows (when-not (:logseq.property/built-in? property) (fn [table selected-rows] - (let [pages (->> selected-rows (filter ldb/page?) (remove :logseq.property/built-in?)) - blocks (->> selected-rows (remove ldb/page?) (remove :logseq.property/built-in?))] + (let [pages (->> selected-rows (filter entity-util/page?) (remove :logseq.property/built-in?)) + blocks (->> selected-rows (remove entity-util/page?) (remove :logseq.property/built-in?))] (p/do! (set-data! (get-property-related-objects (state/get-current-repo) property)) (when-let [f (get-in table [:data-fns :set-row-selection!])] diff --git a/src/main/frontend/components/property.cljs b/src/main/frontend/components/property.cljs index f9167960d7..b2cac7ade7 100644 --- a/src/main/frontend/components/property.cljs +++ b/src/main/frontend/components/property.cljs @@ -26,6 +26,7 @@ [frontend.util :as util] [logseq.db :as ldb] [logseq.db.common.order :as db-order] + [logseq.db.frontend.entity-util :as entity-util] [logseq.db.frontend.property :as db-property] [logseq.db.frontend.property.type :as db-property-type] [logseq.outliner.core :as outliner-core] @@ -355,7 +356,7 @@ *show-new-property-config? (::show-new-property-config? state) *show-class-select? (::show-class-select? state) *property-schema (::property-schema state) - page? (ldb/page? block) + page? (entity-util/page? block) block-types (let [types (ldb/get-entity-types block)] (cond-> types (and page? (not (contains? types :page))) @@ -675,7 +676,7 @@ properties' (remove (fn [[k _v]] (contains? remove-properties k)) full-properties) properties'' (->> properties' (remove (fn [[k _v]] (= k :logseq.property.class/properties)))) - page? (ldb/page? block)] + page? (entity-util/page? block)] [:div.ls-properties-area {:id id :class (util/classnames [{:ls-page-properties page?}]) diff --git a/src/main/frontend/components/property/value.cljs b/src/main/frontend/components/property/value.cljs index fff2d86004..0283500372 100644 --- a/src/main/frontend/components/property/value.cljs +++ b/src/main/frontend/components/property/value.cljs @@ -33,6 +33,7 @@ [lambdaisland.glogi :as log] [logseq.common.util.macro :as macro-util] [logseq.db :as ldb] + [logseq.db.frontend.entity-util :as entity-util] [logseq.db.frontend.property :as db-property] [logseq.db.frontend.property.type :as db-property-type] [logseq.outliner.property :as outliner-property] @@ -604,7 +605,7 @@ "hash" (ldb/property? node) "letter-p" - (ldb/page? node) + (entity-util/page? node) "page" :else "letter-n")) @@ -732,7 +733,7 @@ (when-not (string/blank? (string/trim chosen)) (p/let [result ( page-block :block/file :db/id) file-path (-> (d/entity db file-db-id) :file/path) result (if (and (string? file-path) (not-empty file-path)) - (let [new-content (if (ldb/whiteboard? page-block) + (let [new-content (if (file-entity-util/whiteboard? page-block) (-> (wfu/ugly-pr-str {:blocks tree :pages (list (remove-transit-ids page-block))}) @@ -148,7 +149,7 @@ [repo conn page-db-id outliner-op context request-id] (let [page-block (d/pull @conn '[*] page-db-id) page-db-id (:db/id page-block) - whiteboard? (ldb/whiteboard? page-block) + whiteboard? (file-entity-util/whiteboard? page-block) blocks-count (ldb/get-page-blocks-count @conn page-db-id) blocks-just-deleted? (and (zero? blocks-count) (contains? #{:delete-blocks :move-blocks} outliner-op))] diff --git a/src/main/frontend/worker/handler/page/file_based/rename.cljs b/src/main/frontend/worker/handler/page/file_based/rename.cljs index 15b3939c52..be45087cf4 100644 --- a/src/main/frontend/worker/handler/page/file_based/rename.cljs +++ b/src/main/frontend/worker/handler/page/file_based/rename.cljs @@ -11,7 +11,8 @@ [logseq.common.config :as common-config] [logseq.graph-parser.text :as text] [logseq.graph-parser.property :as gp-property] - [logseq.db.common.order :as db-order])) + [logseq.db.common.order :as db-order] + [logseq.db.file-based.entity-util :as file-entity-util])) (defn- replace-page-ref-aux @@ -205,7 +206,7 @@ [db old-page-name new-page-name] (let [page (d/entity db [:block/name old-page-name]) file (:block/file page)] - (when (and file (not (ldb/journal? page))) + (when (and file (not (file-entity-util/journal? page))) (let [old-path (:file/path file) new-file-name (wfu/file-name-sanity new-page-name) ;; w/o file extension new-path (compute-new-file-path old-path new-file-name)] @@ -317,8 +318,8 @@ :invalid-empty-name (and page-e new-page-e - (or (ldb/whiteboard? page-e) - (ldb/whiteboard? new-page-e))) + (or (file-entity-util/whiteboard? page-e) + (file-entity-util/whiteboard? new-page-e))) :merge-whiteboard-pages (and old-name new-name name-changed?)