diff --git a/deps/db/src/logseq/db/frontend/class.cljs b/deps/db/src/logseq/db/frontend/class.cljs index 9fd707595d..201ffef9c5 100644 --- a/deps/db/src/logseq/db/frontend/class.cljs +++ b/deps/db/src/logseq/db/frontend/class.cljs @@ -5,6 +5,9 @@ [clojure.set :as set] [flatland.ordered.map :refer [ordered-map]])) +;; Main class vars +;; =============== + (def ^:large-vars/data-var built-in-classes "Map of built-in classes for db graphs with their :db/ident as keys" (ordered-map @@ -78,6 +81,13 @@ ;; TODO: Add more classes such as :book, :paper, :movie, :music, :project) )) +(def page-children-classes + "Children of :logseq.class/Page" + (set + (keep (fn [[class-ident m]] + (when (= (get-in m [:properties :logseq.property/parent]) :logseq.class/Page) class-ident)) + built-in-classes))) + (def internal-tags "Built-in classes that are hidden on a node and all pages view" #{:logseq.class/Page :logseq.class/Property :logseq.class/Tag :logseq.class/Root @@ -93,6 +103,9 @@ "Built-in classes that are hidden in a few contexts like property values" #{:logseq.class/Page :logseq.class/Root :logseq.class/Asset}) +;; Helper fns +;; ========== + (defn create-user-class-ident-from-name "Creates a class :db/ident for a default user namespace. NOTE: Only use this when creating a db-ident for a new class." diff --git a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs index 9138576a84..be63fd00d7 100644 --- a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs @@ -198,14 +198,15 @@ ;; Ignore new class tags from extract e.g. :logseq.class/Journal (logseq-class-ident? %))) (map #(vector :block/uuid (get-page-uuid (:page-names-to-uuids per-file-state) (:block/name %)))) - set)] + set) + page-classes (into #{:logseq.class/Page} db-class/page-children-classes)] (cond-> block true (update :block/tags convert-tags-to-classes db per-file-state user-options all-idents) ;; ensure pages are a Page true (update :block/tags (fn [tags] - (if (seq (set/intersection (set tags) #{:logseq.class/Page :logseq.class/Journal :logseq.class/Whiteboard :logseq.class/Property})) + (if (seq (set/intersection (set tags) page-classes)) tags (conj (vec tags) :logseq.class/Page)))) (seq page-tags)