dioxus_dnd/core/components/
provider.rs1use dioxus::prelude::*;
4
5use crate::core::collision::ReleasePolicy;
6use crate::core::hooks::{use_dnd_provider, use_zone_registry};
7use crate::core::types::Direction;
8
9#[component]
11pub fn DndProvider<T: Clone + PartialEq + 'static>(
12 #[props(default)]
14 phantom: std::marker::PhantomData<T>,
15 #[props(default)]
18 dir: Direction,
19 #[props(default)]
22 release: ReleasePolicy<T>,
23 children: Element,
24) -> Element {
25 let _ = phantom;
26 use_dnd_provider::<T>();
27 let mut registry = use_zone_registry::<T>();
28 use_hook(move || {
31 registry.set_direction(dir);
32 registry.set_release_policy(release);
33 });
34 use_effect(use_reactive!(|(dir, release)| {
35 registry.set_direction(dir);
36 registry.set_release_policy(release);
37 }));
38 rsx! {
39 {children}
40 }
41}