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)]] [:pre [(seq blocks)]]
(let [top-level-blocks (filter-top-level-blocks @conn 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))) 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) txs-state (ds/new-outliner-txs-state)
block-ids (map (fn [b] [:block/uuid (:block/uuid b)]) top-level-blocks) block-ids (map (fn [b] [:block/uuid (:block/uuid b)]) top-level-blocks)
start-block (first top-level-blocks) start-block (first top-level-blocks)
end-block (last top-level-blocks)] end-block (last top-level-blocks)]
(if (or (when (seq top-level-blocks)
(= 1 (count top-level-blocks)) (if (or
(= start-block end-block)) (= 1 (count top-level-blocks))
(delete-block conn txs-state start-block) (= start-block end-block))
(doseq [id block-ids] (delete-block conn txs-state start-block)
(let [node (d/entity @conn id)] (doseq [id block-ids]
(otree/-del node txs-state conn)))) (let [node (d/entity @conn id)]
(otree/-del node txs-state conn)))))
{:tx-data @txs-state})) {:tx-data @txs-state}))
(defn- move-to-original-position? (defn- move-to-original-position?

View File

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

View File

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

View File

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