Browse Source

fix: deleting built-in blocks from queries

Was possible to delete built-in closed values from queries
like `(property :logseq.property/created-from-property)`
Gabriel Horner 9 months ago
parent
commit
d1748a18d8

+ 10 - 2
deps/outliner/src/logseq/outliner/core.cljs

@@ -743,13 +743,21 @@
   [conn blocks]
   [conn 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?)
-                              (remove ldb/page?))
+        top-level-blocks* (->> (get-top-level-blocks top-level-blocks non-consecutive?)
+                               (remove ldb/page?))
+        top-level-blocks (remove :logseq.property/built-in? top-level-blocks*)
         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)
         delete-one-block? (or (= 1 (count top-level-blocks)) (= start-block end-block))]
         delete-one-block? (or (= 1 (count top-level-blocks)) (= start-block end-block))]
+
+    ;; Validate before `when` since top-level-blocks will be empty when deleting one built-in block
+    (when (seq (filter :logseq.property/built-in? top-level-blocks*))
+      (throw (ex-info "Built-in nodes can't be deleted"
+                      {:type :notification
+                       :payload {:message "Built-in nodes can't be deleted"
+                                 :type :error}})))
     (when (seq top-level-blocks)
     (when (seq top-level-blocks)
       (let [from-property (:logseq.property/created-from-property start-block)
       (let [from-property (:logseq.property/created-from-property start-block)
             default-value-property? (and (:logseq.property/default-value from-property)
             default-value-property? (and (:logseq.property/default-value from-property)

+ 1 - 1
src/main/frontend/components/query/view.cljs

@@ -56,7 +56,7 @@
                   :on-delete-rows (fn [table selected-rows]
                   :on-delete-rows (fn [table selected-rows]
                                     (let [pages (filter ldb/page? selected-rows)
                                     (let [pages (filter ldb/page? selected-rows)
                                           blocks (remove ldb/page? selected-rows)
                                           blocks (remove ldb/page? selected-rows)
-                                          selected (set (map :id selected-rows))
+                                          selected (set (map :id (remove :logseq.property/built-in? selected-rows)))
                                           data' (remove (fn [row] (contains? selected (:id row))) (:data table))]
                                           data' (remove (fn [row] (contains? selected (:id row))) (:data table))]
                                       (p/do!
                                       (p/do!
                                        (set-data! data')
                                        (set-data! data')