From f442ae82a06c7a0aab53df62277b8f09ef2f433e Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 16 Jun 2025 11:05:22 +0800 Subject: [PATCH] enhance(ux): able to create pages directly on Library --- deps/outliner/src/logseq/outliner/core.cljs | 14 ++++++++------ deps/outliner/src/logseq/outliner/validate.cljs | 13 ++++++++++++- src/main/frontend/handler/editor.cljs | 17 ++++++++++++----- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/deps/outliner/src/logseq/outliner/core.cljs b/deps/outliner/src/logseq/outliner/core.cljs index d7e572e110..684e03cdee 100644 --- a/deps/outliner/src/logseq/outliner/core.cljs +++ b/deps/outliner/src/logseq/outliner/core.cljs @@ -334,7 +334,7 @@ txs (map (fn [id] [:db.fn/retractEntity [:block/uuid id]]) ids) page-tx (let [block (d/entity db [:block/uuid block-id])] (when (:block/pre-block? block) - (let [id (:db/id (:block/page block))] + (when-let [id (:db/id (:block/page block))] [[:db/retract id :block/properties] [:db/retract id :block/properties-order] [:db/retract id :block/properties-text-values] @@ -531,11 +531,13 @@ (let [ref-ids (set (map :block/uuid (:block/refs block)))] (->> (set/intersection block-ids ref-ids) (remove #{(:block/uuid block)}))))) - m {:db/id (:db/id block) - :block/uuid uuid' - :block/page target-page - :block/parent parent - :block/order order} + m (cond-> + {:db/id (:db/id block) + :block/uuid uuid' + :block/parent parent + :block/order order} + (not (ldb/page? block)) + (assoc :block/page target-page)) result (-> (if (de/entity? block) (assoc m :block/level (:block/level block)) diff --git a/deps/outliner/src/logseq/outliner/validate.cljs b/deps/outliner/src/logseq/outliner/validate.cljs index 34a9b9c91f..b42d237ba9 100644 --- a/deps/outliner/src/logseq/outliner/validate.cljs +++ b/deps/outliner/src/logseq/outliner/validate.cljs @@ -88,10 +88,21 @@ [?b :block/title ?title] [?b :block/tags ?tag-id] [(not= ?b ?eid)] - ;; same parent + ;; same extends [?b :logseq.property.class/extends ?bp] [?eid :logseq.property.class/extends ?ep] [(= ?bp ?ep)]] + (:block/parent entity) + '[:find [?b ...] + :in $ ?eid ?title [?tag-id ...] + :where + [?b :block/title ?title] + [?b :block/tags ?tag-id] + [(not= ?b ?eid)] + ;; same parent + [?b :block/parent ?bp] + [?eid :block/parent ?ep] + [(= ?bp ?ep)]] :else '[:find [?b ...] :in $ ?eid ?title [?tag-id ...] diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index 761761772d..cccc5cf01a 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -336,14 +336,21 @@ true :else - (not has-children?))] + (not has-children?)) + library? (:library? config) + new-block' (if library? + (-> new-block + (-> (assoc :block/tags #{:logseq.class/Page} + :block/name (util/page-name-sanity-lc (:block/title new-block))) + (dissoc :block/page))) + new-block)] (ui-outliner-tx/transact! {:outliner-op :insert-blocks} (save-current-block! {:current-block current-block}) - (outliner-op/insert-blocks! [new-block] current-block {:sibling? sibling? - :keep-uuid? keep-uuid? - :ordered-list? ordered-list? - :replace-empty-target? replace-empty-target?})))) + (outliner-op/insert-blocks! [new-block'] current-block {:sibling? sibling? + :keep-uuid? keep-uuid? + :ordered-list? ordered-list? + :replace-empty-target? replace-empty-target?})))) (defn- block-self-alone-when-insert? [config uuid]