fix: restore block menu delete undo
This commit is contained in:
@@ -5748,60 +5748,6 @@ fn turn_into_block(node: &Value, action: SlashActionKind) -> Value {
|
||||
}
|
||||
}
|
||||
|
||||
fn duplicate_top_level_block(document: &mut Value, index: usize) -> Result<(), String> {
|
||||
let content = document_content_mut(document)?;
|
||||
let block = content
|
||||
.get(index)
|
||||
.cloned()
|
||||
.ok_or_else(|| format!("找不到第 {index} 个块"))?;
|
||||
content.insert(index + 1, block);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn delete_top_level_block(document: &mut Value, index: usize) -> Result<(), String> {
|
||||
let content = document_content_mut(document)?;
|
||||
if index >= content.len() {
|
||||
return Err(format!("找不到第 {index} 个块"));
|
||||
}
|
||||
|
||||
if content.len() == 1 {
|
||||
content[0] = paragraph_node(Vec::new());
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
content.remove(index);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn reorder_top_level_block(
|
||||
document: &mut Value,
|
||||
source: usize,
|
||||
target: usize,
|
||||
placement: DropPlacement,
|
||||
) -> Result<(), String> {
|
||||
let content = document_content_mut(document)?;
|
||||
if source >= content.len() || target >= content.len() {
|
||||
return Err("拖拽目标超出当前顶层块范围".to_string());
|
||||
}
|
||||
|
||||
let block = content.remove(source);
|
||||
let mut insert_at = match placement {
|
||||
DropPlacement::Before => target,
|
||||
DropPlacement::After => target + 1,
|
||||
};
|
||||
|
||||
if source < insert_at {
|
||||
insert_at = insert_at.saturating_sub(1);
|
||||
}
|
||||
|
||||
if insert_at > content.len() {
|
||||
insert_at = content.len();
|
||||
}
|
||||
|
||||
content.insert(insert_at, block);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn replace_top_level_block_kind(
|
||||
document: &mut Value,
|
||||
index: usize,
|
||||
@@ -10164,6 +10110,7 @@ fn App(mount_options: MountOptions) -> impl IntoView {
|
||||
set_block_menu_open.set(false);
|
||||
set_block_menu_anchor.set(None);
|
||||
set_hovered_block.set(None);
|
||||
let _ = editor.focus();
|
||||
}
|
||||
Err(err) => set_command_feedback.set(err),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user