Bladeren bron

fix: can't paste in the first block if it's empty

close #7500
Tienson Qin 3 jaren geleden
bovenliggende
commit
ef287afb70
1 gewijzigde bestanden met toevoegingen van 23 en 2 verwijderingen
  1. 23 2
      src/main/frontend/modules/outliner/core.cljs

+ 23 - 2
src/main/frontend/modules/outliner/core.cljs

@@ -267,9 +267,30 @@
           (recur (rest blocks) (first blocks))
           (recur (rest blocks) (first blocks))
           matched)))))
           matched)))))
 
 
+(defn- get-id
+  [x]
+  (cond
+    (map? x)
+    (:db/id x)
+
+    (vector? x)
+    (second x)
+
+    :else
+    x))
+
 (defn- compute-block-parent
 (defn- compute-block-parent
-  [block parent target-block prev-hop top-level? sibling? get-new-id]
+  [block parent target-block prev-hop top-level? sibling? get-new-id outliner-op]
   (cond
   (cond
+    ;; replace existing block
+    (and (= outliner-op :paste)
+         (string/blank? (:block/content target-block))
+         (= (get-id (:block/parent target-block))
+            (get-id (:block/parent block)))
+         (= (get-id (:block/left target-block))
+            (get-id (:block/left block))))
+    (get-id (:block/parent target-block))
+
     prev-hop
     prev-hop
     (:db/id (:block/parent prev-hop))
     (:db/id (:block/parent prev-hop))
 
 
@@ -455,7 +476,7 @@
                                                  (not= (:block/parent block) (:block/parent target-block)))
                                                  (not= (:block/parent block) (:block/parent target-block)))
                            prev-hop (if outdented-block? (find-outdented-block-prev-hop block blocks) nil)
                            prev-hop (if outdented-block? (find-outdented-block-prev-hop block blocks) nil)
                            left-exists-in-blocks? (contains? ids (:db/id (:block/left block)))
                            left-exists-in-blocks? (contains? ids (:db/id (:block/left block)))
-                           parent (compute-block-parent block parent target-block prev-hop top-level? sibling? get-new-id)
+                           parent (compute-block-parent block parent target-block prev-hop top-level? sibling? get-new-id outliner-op)
                            left (compute-block-left blocks block left target-block prev-hop idx replace-empty-target? left-exists-in-blocks? get-new-id)]
                            left (compute-block-left blocks block left target-block prev-hop idx replace-empty-target? left-exists-in-blocks? get-new-id)]
                        (cond->
                        (cond->
                          (merge block {:block/uuid uuid
                          (merge block {:block/uuid uuid