Selaa lähdekoodia

fix(outliner): fix delete nodes

defclass 4 vuotta sitten
vanhempi
sitoutus
972dfee067

+ 4 - 4
src/main/frontend/handler/editor.cljs

@@ -703,10 +703,10 @@
           blocks (reorder-blocks blocks)]
       (let [start-node (outliner-core/block (first blocks))
             end-node (get-top-level-end-node blocks)]
-        (outliner-core/delete-nodes start-node end-node lookup-refs)
-        (let [opts {:key :block/change
-                    :data blocks}]
-          (db/refresh! repo opts))))))
+        (when (outliner-core/delete-nodes start-node end-node lookup-refs)
+          (let [opts {:key :block/change
+                      :data blocks}]
+            (db/refresh! repo opts)))))))
 
 (defn- block-property-aux!
   [block-id key value]

+ 21 - 17
src/main/frontend/modules/outliner/core.cljs

@@ -393,23 +393,27 @@
   [start-node end-node block-ids]
   {:pre [(tree/satisfied-inode? start-node)
          (tree/satisfied-inode? end-node)]}
-  (ds/auto-transact!
-    [txs-state (ds/new-outliner-txs-state)] {:outliner-op :delete-nodes}
-    (if (= start-node end-node)
-      (delete-node start-node)
-      (let [right-node (tree/-get-right end-node)
-            end-node-left-nodes (get-left-nodes end-node (count block-ids))
-            start-node-parents-with-self (conj (get-node-parents start-node 1000) (tree/-get-id start-node))]
-        (when (tree/satisfied-inode? right-node)
-          (let [cross-node-id (first (set/intersection (set end-node-left-nodes) (set start-node-parents-with-self)))
-                cross-node (get-block-by-id cross-node-id)
-                new-left-id (if (= cross-node start-node)
-                              (tree/-get-left-id cross-node)
-                              cross-node-id)
-                new-right-node (tree/-set-left-id right-node new-left-id)]
-            (tree/-save new-right-node txs-state)))
-        (let [txs (db-outliner/del-blocks block-ids)]
-          (ds/add-txs txs-state txs))))))
+  (let [sibling? (= (tree/-get-parent-id start-node)
+                   (tree/-get-parent-id end-node))]
+    (when sibling?
+      (ds/auto-transact!
+        [txs-state (ds/new-outliner-txs-state)]
+        {:outliner-op :delete-nodes}
+        (if (= start-node end-node)
+          (delete-node start-node)
+          (let [right-node (tree/-get-right end-node)
+                end-node-left-nodes (get-left-nodes end-node (count block-ids))
+                start-node-parents-with-self (conj (get-node-parents start-node 1000) (tree/-get-id start-node))]
+            (when (tree/satisfied-inode? right-node)
+              (let [cross-node-id (first (set/intersection (set end-node-left-nodes) (set start-node-parents-with-self)))
+                    cross-node (get-block-by-id cross-node-id)
+                    new-left-id (if (= cross-node start-node)
+                                  (tree/-get-left-id cross-node)
+                                  cross-node-id)
+                    new-right-node (tree/-set-left-id right-node new-left-id)]
+                (tree/-save new-right-node txs-state)))
+            (let [txs (db-outliner/del-blocks block-ids)]
+              (ds/add-txs txs-state txs))))))))
 
 (defn first-child?
   [node]