fix: built-in pages shouldn't be deleted

Fixes https://github.com/logseq/db-test/issues/91.

We still need to add validation before db/transact!, this will be
handled in another commit.
pull/11526/merge
Tienson Qin 2024-09-16 06:24:38 +08:00
parent 50816b8497
commit b826fc5ba9
4 changed files with 34 additions and 29 deletions

View File

@ -713,18 +713,20 @@
[:pre [(seq blocks)]]
(let [top-level-blocks (filter-top-level-blocks @conn blocks)
non-consecutive? (and (> (count top-level-blocks) 1) (seq (ldb/get-non-consecutive-blocks @conn top-level-blocks)))
top-level-blocks (get-top-level-blocks top-level-blocks non-consecutive?)
top-level-blocks (->> (get-top-level-blocks top-level-blocks non-consecutive?)
(remove ldb/page?))
txs-state (ds/new-outliner-txs-state)
block-ids (map (fn [b] [:block/uuid (:block/uuid b)]) top-level-blocks)
start-block (first top-level-blocks)
end-block (last top-level-blocks)]
(if (or
(= 1 (count top-level-blocks))
(= start-block end-block))
(delete-block conn txs-state start-block)
(doseq [id block-ids]
(let [node (d/entity @conn id)]
(otree/-del node txs-state conn))))
(when (seq top-level-blocks)
(if (or
(= 1 (count top-level-blocks))
(= start-block end-block))
(delete-block conn txs-state start-block)
(doseq [id block-ids]
(let [node (d/entity @conn id)]
(otree/-del node txs-state conn)))))
{:tx-data @txs-state}))
(defn- move-to-original-position?

View File

@ -2,7 +2,6 @@
"Table"
(:require [logseq.shui.table.impl :as impl]
[dommy.core :refer-macros [sel1]]
[cljs-bean.core :as bean]
[rum.core :as rum]))
(defn- get-head-container

View File

@ -11,9 +11,9 @@
(not (false? (get visible-columns (column-id column)))))
(defn visible-columns
[columns visible-columns]
(if (seq visible-columns)
(filter #(column-visible? % visible-columns) columns)
[columns visible-columns']
(if (seq visible-columns')
(filter #(column-visible? % visible-columns') columns)
columns))
(defn sort-rows
@ -58,7 +58,9 @@
(sort-rows rows sorting columns))
(defn rows
[{:keys [rows columns sorting row-filter]}]
(let [rows' (if row-filter (filter row-filter rows) rows)]
[{:keys [columns sorting row-filter]
:as opts}]
(let [rows' (:rows opts)
rows' (if row-filter (filter row-filter rows') rows')]
(cond-> rows'
(seq sorting) (sort-rows sorting columns))))

View File

@ -221,21 +221,23 @@
:add-new-object! #(add-new-property-object! property set-data!)
;; TODO: Add support for adding column
:show-add-property? false
:on-delete-rows (fn [table selected-rows]
(let [pages (filter ldb/page? selected-rows)
blocks (remove ldb/page? selected-rows)]
(p/do!
(ui-outliner-tx/transact!
{:outliner-op :delete-blocks}
(when (seq blocks)
(outliner-op/delete-blocks! blocks nil))
(let [page-ids (map :db/id pages)
tx-data (map (fn [pid] [:db/retract pid (:db/ident property)]) page-ids)]
(when (seq tx-data)
(outliner-op/transact! tx-data {:outliner-op :save-block}))))
(set-data! (get-property-related-objects (state/get-current-repo) property))
(when-let [f (get-in table [:data-fns :set-row-selection!])]
(f {})))))}))))
:on-delete-rows (when-not (contains? #{:logseq.property/built-in? :logseq.property/parent}
(:db/ident property))
(fn [table selected-rows]
(let [pages (filter ldb/page? selected-rows)
blocks (remove ldb/page? selected-rows)]
(p/do!
(ui-outliner-tx/transact!
{:outliner-op :delete-blocks}
(when (seq blocks)
(outliner-op/delete-blocks! blocks nil))
(let [page-ids (map :db/id pages)
tx-data (map (fn [pid] [:db/retract pid (:db/ident property)]) page-ids)]
(when (seq tx-data)
(outliner-op/transact! tx-data {:outliner-op :save-block}))))
(set-data! (get-property-related-objects (state/get-current-repo) property))
(when-let [f (get-in table [:data-fns :set-row-selection!])]
(f {}))))))}))))
;; Show all nodes containing the given property
(rum/defcs property-related-objects < rum/reactive db-mixins/query mixins/container-id