use dioxus::prelude::*;
use crate::core::collision::ReleasePolicy;
use crate::core::hooks::{use_dnd_provider, use_zone_registry};
use crate::core::types::Direction;
#[component]
pub fn DndProvider<T: Clone + PartialEq + 'static>(
#[props(default)]
phantom: std::marker::PhantomData<T>,
#[props(default)]
dir: Direction,
#[props(default)]
release: ReleasePolicy<T>,
children: Element,
) -> Element {
let _ = phantom;
use_dnd_provider::<T>();
let mut registry = use_zone_registry::<T>();
use_hook(move || {
registry.set_direction(dir);
registry.set_release_policy(release);
});
use_effect(use_reactive!(|(dir, release)| {
registry.set_direction(dir);
registry.set_release_policy(release);
}));
rsx! {
{children}
}
}