Просмотр исходного кода

fix: moving a bullet will delete many bullets under it

close #4069
Tienson Qin 4 лет назад
Родитель
Сommit
ae8afca4c6

+ 1 - 2
src/main/frontend/components/block.cljs

@@ -2194,8 +2194,7 @@
              (assoc state ::control-show? (atom false))))
    :should-update (fn [old-state new-state]
                     (let [compare-keys [:block/uuid :block/content :block/parent :block/collapsed? :block/children
-                                        :block/properties
-                                        :block/_refs]
+                                        :block/properties :block/left :block/children :block/_refs]
                           config-compare-keys [:show-cloze?]
                           b1 (second (:rum/args old-state))
                           b2 (second (:rum/args new-state))

+ 12 - 8
src/main/frontend/modules/outliner/core.cljs

@@ -625,13 +625,15 @@
   [root target-node sibling?]
   {:pre [(every? tree/satisfied-inode? [root target-node])
          (boolean? sibling?)]}
-  (let [target-node-id (tree/-get-id target-node)]
-    (when-not (or (and sibling?
-                       (= (tree/-get-left-id root) target-node-id)
-                       (not= (tree/-get-parent-id root) target-node-id))
-                  (and (not sibling?)
-                       (= (tree/-get-left-id root) target-node-id)
-                       (= (tree/-get-parent-id root) target-node-id)))
+  (if-let [target-node-id (tree/-get-id target-node)]
+    (when-not (and
+               (or (and sibling?
+                        (= (tree/-get-left-id root) target-node-id)
+                        (not= (tree/-get-parent-id root) target-node-id))
+                   (and (not sibling?)
+                        (= (tree/-get-left-id root) target-node-id)
+                        (= (tree/-get-parent-id root) target-node-id)))
+               (= target-node-id (tree/-get-id root)))
       (let [root-page (:db/id (:block/page (:data root)))
             target-page (:db/id (:block/page (:data target-node)))
             not-same-page? (not= root-page target-page)
@@ -649,7 +651,9 @@
            (let [new-root (first (if sibling?
                                    (insert-node-as-sibling txs-state root target-node)
                                    (insert-node-as-first-child txs-state root target-node)))]
-             (set-nodes-page new-root target-node txs-state))))))))
+             (when (not= root-page target-page)
+               (set-nodes-page new-root target-node txs-state)))))))
+    (js/console.trace)))
 
 (defn get-right-node
   [node]