refactor: move block delete to history-safe commands
This commit is contained in:
@@ -6409,30 +6409,6 @@ fn focus_top_level_block_start(editor: TiptapEditorHandle, index: usize) -> Resu
|
||||
.map_err(|err| format!("定位新块失败:{err}"))
|
||||
}
|
||||
|
||||
fn delete_top_level_block_html(current_html: &str, index: usize) -> Result<String, String> {
|
||||
let document = window()
|
||||
.and_then(|win| win.document())
|
||||
.ok_or_else(|| "浏览器 document 不可用".to_string())?;
|
||||
let container = document
|
||||
.create_element("div")
|
||||
.map_err(|err| format!("创建 HTML 容器失败:{err:?}"))?;
|
||||
container.set_inner_html(current_html);
|
||||
|
||||
let children = container.children();
|
||||
if children.length() <= 1 {
|
||||
container.set_inner_html("<p></p>");
|
||||
return Ok(container.inner_html());
|
||||
}
|
||||
|
||||
let current = children
|
||||
.item(index as u32)
|
||||
.ok_or_else(|| format!("找不到第 {index} 个 HTML 顶层块"))?;
|
||||
container
|
||||
.remove_child(¤t)
|
||||
.map_err(|err| format!("删除 HTML 块失败:{err:?}"))?;
|
||||
Ok(container.inner_html())
|
||||
}
|
||||
|
||||
fn reorder_top_level_block_html(
|
||||
current_html: &str,
|
||||
source: usize,
|
||||
@@ -10389,40 +10365,24 @@ fn App(mount_options: MountOptions) -> impl IntoView {
|
||||
data-testid="block-drag-menu-item-delete"
|
||||
on:click=move |event: MouseEvent| {
|
||||
event.stop_propagation();
|
||||
match editor.get_html() {
|
||||
Ok(current_html) => match delete_top_level_block_html(¤t_html, block_index) {
|
||||
Ok(next_html) => {
|
||||
apply_html_update(
|
||||
editor,
|
||||
&runtime_persisted_identity(document_id, workspace_id),
|
||||
next_html,
|
||||
document_id,
|
||||
workspace_id,
|
||||
dirty_count,
|
||||
set_dirty_count,
|
||||
set_html_output,
|
||||
set_document_json,
|
||||
set_json_output,
|
||||
title,
|
||||
hovered_block,
|
||||
editor_focused,
|
||||
slash_open,
|
||||
turn_into_open,
|
||||
color_menu_open,
|
||||
more_menu_open,
|
||||
revision,
|
||||
conflict_detection_key,
|
||||
read_only,
|
||||
set_command_feedback,
|
||||
format!("已删除 {}", delete_feedback_label.clone()),
|
||||
);
|
||||
set_block_menu_open.set(false);
|
||||
set_block_menu_anchor.set(None);
|
||||
set_hovered_block.set(None);
|
||||
}
|
||||
Err(err) => set_command_feedback.set(err),
|
||||
},
|
||||
Err(err) => set_command_feedback.set(format!("读取当前 HTML 失败:{err}")),
|
||||
match editor_runtime::history_safe_commands::delete_top_level_block_with_history(&editor, block_index) {
|
||||
Ok(()) => {
|
||||
sync_persisted_editor_command(
|
||||
editor,
|
||||
&runtime_persisted_identity(document_id, workspace_id),
|
||||
set_dirty_count,
|
||||
set_html_output,
|
||||
set_document_json,
|
||||
set_json_output,
|
||||
title,
|
||||
set_command_feedback,
|
||||
format!("已删除 {}", delete_feedback_label.clone()),
|
||||
);
|
||||
set_block_menu_open.set(false);
|
||||
set_block_menu_anchor.set(None);
|
||||
set_hovered_block.set(None);
|
||||
}
|
||||
Err(err) => set_command_feedback.set(err),
|
||||
}
|
||||
}
|
||||
>
|
||||
|
||||
Reference in New Issue
Block a user