Browse Source

fix: linked blocks move up/down

Tienson Qin 2 năm trước cách đây
mục cha
commit
bcd3e79730

+ 9 - 3
src/main/frontend/handler/editor.cljs

@@ -1661,9 +1661,15 @@
     (save-current-block!)
     (let [edit-block-id (:block/uuid (state/get-edit-block))
           move-nodes (fn [blocks]
-                       (outliner-tx/transact!
-                        {:outliner-op :move-blocks}
-                        (outliner-core/move-blocks-up-down! blocks up?))
+                       (let [top-level-blocks (->> (outliner-core/get-top-level-blocks blocks)
+                                                   (map (fn [b]
+                                                          (let [original-block (first (:block/_link (db/entity (:db/id b))))]
+                                                            (or (and original-block
+                                                                     (db/pull (:db/id original-block)))
+                                                                b)))))]
+                         (outliner-tx/transact!
+                          {:outliner-op :move-blocks}
+                          (outliner-core/move-blocks-up-down! top-level-blocks up?)))
                        (when-let [block-node (util/get-first-block-by-id (:block/uuid (first blocks)))]
                          (.scrollIntoView block-node #js {:behavior "smooth" :block "nearest"})))]
       (if edit-block-id

+ 6 - 6
src/main/frontend/modules/outliner/core.cljs

@@ -877,10 +877,10 @@
   "Move blocks up/down."
   [blocks up?]
   {:pre [(seq blocks) (boolean? up?)]}
-  (let [first-block (db/entity (:db/id (first blocks)))
+  (let [top-level-blocks (get-top-level-blocks blocks)
+        first-block (db/entity (:db/id (first top-level-blocks)))
         first-block-parent (:block/parent first-block)
         left-left (:block/left (:block/left first-block))
-        top-level-blocks (get-top-level-blocks blocks)
         last-top-block (last top-level-blocks)
         last-top-block-parent (:block/parent last-top-block)
         right (get-right-sibling (:db/id last-top-block))
@@ -889,18 +889,18 @@
       (and up? left-left)
       (cond
         (= (:block/parent left-left) first-block-parent)
-        (move-blocks blocks left-left (merge opts {:sibling? true}))
+        (move-blocks top-level-blocks left-left (merge opts {:sibling? true}))
 
         (= (:db/id left-left) (:db/id first-block-parent))
-        (move-blocks blocks left-left (merge opts {:sibling? false}))
+        (move-blocks top-level-blocks left-left (merge opts {:sibling? false}))
 
         (= (:block/left first-block) first-block-parent)
         (let [target-children (:block/_parent left-left)]
           (if (seq target-children)
             (when (= (:block/parent left-left) (:block/parent first-block-parent))
               (let [target-block (last (db-model/sort-by-left target-children left-left))]
-                (move-blocks blocks target-block (merge opts {:sibling? true}))))
-            (move-blocks blocks left-left (merge opts {:sibling? false}))))
+                (move-blocks top-level-blocks target-block (merge opts {:sibling? true}))))
+            (move-blocks top-level-blocks left-left (merge opts {:sibling? false}))))
 
         :else
         nil)