From e0b5dace85f2e7efc94fdae3022bb7db5c036729 Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Wed, 8 Jan 2025 14:09:36 -0500 Subject: [PATCH] fix: can't create page with tag from cmd-k e.g. `Foo #Movie`. Also cleanup build-new-class which shouldn't allow for db-ident overrides --- deps/db/src/logseq/db/frontend/class.cljs | 3 +- .../worker/handler/page/db_based/page.cljs | 29 ++++++++++++------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/deps/db/src/logseq/db/frontend/class.cljs b/deps/db/src/logseq/db/frontend/class.cljs index 9d62e87dfe..4e9fdcca72 100644 --- a/deps/db/src/logseq/db/frontend/class.cljs +++ b/deps/db/src/logseq/db/frontend/class.cljs @@ -123,6 +123,5 @@ [db page-m] {:pre [(string? (:block/title page-m))]} (let [db-ident (create-user-class-ident-from-name (:block/title page-m)) - db-ident' (or (:db/ident page-m) - (db-ident/ensure-unique-db-ident db db-ident))] + db-ident' (db-ident/ensure-unique-db-ident db db-ident)] (sqlite-util/build-new-class (assoc page-m :db/ident db-ident')))) diff --git a/src/main/frontend/worker/handler/page/db_based/page.cljs b/src/main/frontend/worker/handler/page/db_based/page.cljs index ead6d8d164..6fce70de80 100644 --- a/src/main/frontend/worker/handler/page/db_based/page.cljs +++ b/src/main/frontend/worker/handler/page/db_based/page.cljs @@ -30,13 +30,16 @@ (let [v (if (uuid? tag) (d/entity db [:block/uuid tag]) tag)] - (cond - (de/entity? v) - (:db/id v) - (map? v) - (:db/id v) - :else - v))) + (cond (de/entity? v) + (:db/id v) + ;; tx map + (map? v) + ;; Handle adding :db/ident if a new tag + (if (d/entity db [:block/uuid (:block/uuid v)]) + v + (db-class/build-new-class db v)) + :else + v))) tags')) property-vals-tx-m ;; Builds property values for built-in properties like logseq.property.pdf/file @@ -49,9 +52,12 @@ (when (db-property-util/built-in-has-ref-value? k) [k v]))) (into {})))] - (cond-> (if class? [(db-class/build-new-class db page') - [:db/retract [:block/uuid (:block/uuid page)] :block/tags :logseq.class/Page]] - [page']) + (cond-> (if class? + [(merge (db-class/build-new-class db page') + ;; FIXME: new pages shouldn't have db/ident but converting property to tag still relies on this + (select-keys page' [:db/ident])) + [:db/retract [:block/uuid (:block/uuid page)] :block/tags :logseq.class/Page]] + [page']) (seq property-vals-tx-m) (into (vals property-vals-tx-m)) true @@ -187,7 +193,8 @@ (not (ldb/class? existing-page)) (or (ldb/property? existing-page) (ldb/internal-page? existing-page))) ;; Convert existing user property or page to class - (let [tx-data [(db-class/build-new-class db (select-keys existing-page [:block/title :block/uuid :db/ident :block/created-at])) + (let [tx-data [(merge (db-class/build-new-class db (select-keys existing-page [:block/title :block/uuid :block/created-at])) + (select-keys existing-page [:db/ident])) [:db/retract [:block/uuid (:block/uuid existing-page)] :block/tags :logseq.class/Page]]] {:tx-meta tx-meta :tx-data tx-data})))