refactor: extract editor dnd helpers
This commit is contained in:
@@ -21,12 +21,16 @@ use web_sys::{
|
||||
};
|
||||
|
||||
use editor_runtime::attachment_upload::dispatch_editor_upload_request;
|
||||
use editor_runtime::block_dnd::{
|
||||
drop_indicator_top, drop_placement_from_block_point, pointer_in_handle_corridor_geometry,
|
||||
HandleCorridorGeometry,
|
||||
};
|
||||
use editor_runtime::block_menu_overlay;
|
||||
use editor_runtime::block_menu_legacy_html::{
|
||||
duplicate_top_level_block_html, reorder_top_level_block_html,
|
||||
};
|
||||
use editor_runtime::block_hover_state::{
|
||||
BlockMenuLayout, DropIndicatorState, DropPlacement, HoveredBlockState, PendingDragState,
|
||||
BlockMenuLayout, DropIndicatorState, HoveredBlockState, PendingDragState,
|
||||
};
|
||||
use editor_runtime::command_sync::{
|
||||
read_editor_snapshot, sync_editor_outputs, sync_persisted_editor_command,
|
||||
@@ -5416,8 +5420,6 @@ fn pointer_in_handle_corridor(client_x: i32, client_y: i32, block: &HoveredBlock
|
||||
let block_left = block_rect.left() - stage_rect.left();
|
||||
let block_top = block_rect.top() - stage_rect.top();
|
||||
let block_bottom = block_rect.bottom() - stage_rect.top();
|
||||
let x = f64::from(client_x) - stage_rect.left();
|
||||
let y = f64::from(client_y) - stage_rect.top();
|
||||
let handle_left = handle_rect
|
||||
.as_ref()
|
||||
.map(|rect| rect.left() - stage_rect.left())
|
||||
@@ -5426,10 +5428,20 @@ fn pointer_in_handle_corridor(client_x: i32, client_y: i32, block: &HoveredBlock
|
||||
.as_ref()
|
||||
.map(|rect| rect.right() - stage_rect.left())
|
||||
.unwrap_or_else(|| handle_left + HANDLE_TRIGGER_WIDTH);
|
||||
let corridor_left = (handle_left - 12.0).min(block_left);
|
||||
let corridor_right = (block_left + 18.0).max(handle_right + 12.0);
|
||||
|
||||
x >= corridor_left && x <= corridor_right && y >= block_top - 18.0 && y <= block_bottom + 18.0
|
||||
pointer_in_handle_corridor_geometry(
|
||||
client_x,
|
||||
client_y,
|
||||
&HandleCorridorGeometry {
|
||||
stage_left: stage_rect.left(),
|
||||
stage_top: stage_rect.top(),
|
||||
block_left,
|
||||
block_top,
|
||||
block_bottom,
|
||||
handle_left,
|
||||
handle_right,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
fn drop_indicator_from_target(
|
||||
@@ -5442,16 +5454,8 @@ fn drop_indicator_from_target(
|
||||
let stage = editor_stage_element()?;
|
||||
let block_rect = block.get_bounding_client_rect();
|
||||
let stage_rect = stage.get_bounding_client_rect();
|
||||
let midpoint = block_rect.top() + (block_rect.height() / 2.0);
|
||||
let placement = if f64::from(client_y) <= midpoint {
|
||||
DropPlacement::Before
|
||||
} else {
|
||||
DropPlacement::After
|
||||
};
|
||||
let top = match placement {
|
||||
DropPlacement::Before => block_rect.top() - stage_rect.top(),
|
||||
DropPlacement::After => block_rect.bottom() - stage_rect.top(),
|
||||
};
|
||||
let placement = drop_placement_from_block_point(client_y, block_rect.top(), block_rect.height());
|
||||
let top = drop_indicator_top(stage_rect.top(), block_rect.top(), block_rect.bottom(), placement);
|
||||
|
||||
Some(DropIndicatorState {
|
||||
index: hovered.index,
|
||||
|
||||
Reference in New Issue
Block a user