Browse Source

fix: Make sure blocks have the same format when dragging to another page

Tienson Qin 3 years ago
parent
commit
e0ced6091d

+ 1 - 2
src/main/frontend/handler/dnd.cljs

@@ -22,10 +22,9 @@
           true))))))
 
 (defn move-block
-  "There can be at least 3 possible situations:
+  "There can be two possible situations:
   1. Move a block in the same file (either top-to-bottom or bottom-to-top).
   2. Move a block between two different files.
-  3. Move a block between two files in different repos.
 
   Notes:
   1. Those two blocks might have different formats, e.g. one is `org` and another is `markdown`,

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

@@ -590,18 +590,21 @@
                              (tree/-save txs-state)))))))))))))
 
 (defn- set-nodes-page-aux
-  [node page txs-state]
-  (let [new-node (update node :data assoc :block/page page)]
+  [node page page-format txs-state]
+  (let [new-node (update node :data assoc
+                         :block/page page
+                         :block/format page-format)]
     (tree/-save new-node txs-state)
     (doseq [n (tree/-get-children new-node)]
-      (set-nodes-page-aux n page txs-state))))
+      (set-nodes-page-aux n page page-format txs-state))))
 
 (defn- set-nodes-page
   [node target-node txs-state]
   (let [page (or (get-in target-node [:data :block/page])
                  {:db/id (get-in target-node [:data :db/id])}) ; or page block
-        ]
-    (set-nodes-page-aux node page txs-state)))
+
+        page-format (:block/format (db/entity (or (:db/id page) page)))]
+    (set-nodes-page-aux node page page-format txs-state)))
 
 (defn move-subtree
   "Move subtree to a destination position in the relation tree.