dioxus-dnd 3.1.0

Modular, accessible drag-and-drop for Dioxus: sortable lists, kanban boards, trees, grids, file drops, multi-select, touch support and more
Documentation
use std::collections::HashMap;

use dioxus::prelude::Callback;
use dioxus_dnd::core::{
    apply_clone_or_move, apply_list_clone_or_move, DragMode, DragState, DropEffect, DropOutcome,
    Point, PointerKind, Rect, ZoneId, ZoneRecord,
};

fn outcome(payload: u32) -> DropOutcome<u32> {
    DropOutcome {
        payload,
        from: Some(ZoneId(1)),
        to: ZoneId(2),
        effect: DropEffect::Move,
        mode: DragMode::Pointer,
        client: Point::default(),
        element: Point::default(),
        grab: Point::default(),
        edge: None,
    }
}

fn construct_version_three_public_records(on_drop: Callback<DropOutcome<u32>>) {
    let _zone = ZoneRecord::<u32> {
        id: ZoneId(1),
        parent: None,
        label: Some("target".to_string()),
        on_drop,
        accepts: None,
        mounted: None,
        rect: Some(Rect::new(0.0, 0.0, 10.0, 10.0)),
    };

    let _drag = DragState::<u32> {
        payload: Some(1),
        source: Some(ZoneId(1)),
        over: None,
        pointer: Point::default(),
        grab: Point::default(),
        effect: DropEffect::Move,
        mode: DragMode::Pointer,
        pointer_kind: PointerKind::Mouse,
        source_rect: None,
        refocus: None,
        settle: None,
    };
}

#[test]
fn version_three_public_records_remain_constructible() {
    let _contract: fn(Callback<DropOutcome<u32>>) = construct_version_three_public_records;
}

#[test]
fn version_three_model_helpers_still_return_unit() {
    let mut zones = HashMap::from([(ZoneId(1), vec![1]), (ZoneId(2), Vec::new())]);
    let _: () = apply_clone_or_move(&mut zones, outcome(1), |value| *value, |value| value);

    let mut source = vec![2];
    let mut target = Vec::new();
    let _: () = apply_list_clone_or_move(
        Some(&mut source),
        &mut target,
        outcome(2),
        |value| *value,
        |value| value,
    );
}