mirror of
https://github.com/adoyle0/leptos-use.git
synced 2025-01-23 09:09:21 -05:00
made use_drop_zone usable again
This commit is contained in:
parent
39f3be4015
commit
e35a09148f
3 changed files with 16 additions and 8 deletions
|
@ -23,6 +23,7 @@ members = [
|
||||||
"use_display_media",
|
"use_display_media",
|
||||||
"use_document_visibility",
|
"use_document_visibility",
|
||||||
"use_draggable",
|
"use_draggable",
|
||||||
|
"use_drop_zone",
|
||||||
"use_element_bounding",
|
"use_element_bounding",
|
||||||
"use_element_hover",
|
"use_element_hover",
|
||||||
"use_element_size",
|
"use_element_size",
|
||||||
|
@ -69,7 +70,6 @@ members = [
|
||||||
"watch_debounced",
|
"watch_debounced",
|
||||||
"watch_pausable",
|
"watch_pausable",
|
||||||
"watch_throttled",
|
"watch_throttled",
|
||||||
# "use_drop_zone",
|
|
||||||
# "use_webtransport",
|
# "use_webtransport",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ use leptos::prelude::*;
|
||||||
/// # fn Demo() -> impl IntoView {
|
/// # fn Demo() -> impl IntoView {
|
||||||
/// let active_element = use_active_element();
|
/// let active_element = use_active_element();
|
||||||
///
|
///
|
||||||
/// create_effect(move |_| {
|
/// Effect::new(move || {
|
||||||
/// log!("focus changed to {:?}", active_element.get());
|
/// log!("focus changed to {:?}", active_element.get());
|
||||||
/// });
|
/// });
|
||||||
/// #
|
/// #
|
||||||
|
|
|
@ -3,6 +3,7 @@ use cfg_if::cfg_if;
|
||||||
use default_struct_builder::DefaultBuilder;
|
use default_struct_builder::DefaultBuilder;
|
||||||
use leptos::prelude::*;
|
use leptos::prelude::*;
|
||||||
use leptos::reactive::wrappers::read::Signal;
|
use leptos::reactive::wrappers::read::Signal;
|
||||||
|
use send_wrapper::SendWrapper;
|
||||||
use std::fmt::{Debug, Formatter};
|
use std::fmt::{Debug, Formatter};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
@ -69,10 +70,12 @@ where
|
||||||
El: IntoElementMaybeSignal<web_sys::EventTarget, M>,
|
El: IntoElementMaybeSignal<web_sys::EventTarget, M>,
|
||||||
{
|
{
|
||||||
let (is_over_drop_zone, set_over_drop_zone) = signal(false);
|
let (is_over_drop_zone, set_over_drop_zone) = signal(false);
|
||||||
let (files, set_files) = signal_local(Vec::<web_sys::File>::new());
|
let (files, set_files) = signal(Vec::<SendWrapper<web_sys::File>>::new());
|
||||||
|
|
||||||
#[cfg(not(feature = "ssr"))]
|
#[cfg(not(feature = "ssr"))]
|
||||||
{
|
{
|
||||||
|
use std::ops::Deref;
|
||||||
|
|
||||||
let UseDropZoneOptions {
|
let UseDropZoneOptions {
|
||||||
on_drop,
|
on_drop,
|
||||||
on_enter,
|
on_enter,
|
||||||
|
@ -90,6 +93,7 @@ where
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(web_sys::File::from)
|
.map(web_sys::File::from)
|
||||||
|
.map(SendWrapper::new)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
set_files.update(move |f| *f = files);
|
set_files.update(move |f| *f = files);
|
||||||
|
@ -109,7 +113,8 @@ where
|
||||||
let _z = leptos::reactive::diagnostics::SpecialNonReactiveZone::enter();
|
let _z = leptos::reactive::diagnostics::SpecialNonReactiveZone::enter();
|
||||||
|
|
||||||
on_enter(UseDropZoneEvent {
|
on_enter(UseDropZoneEvent {
|
||||||
files: files.get_untracked().into_iter().collect(),
|
files: files
|
||||||
|
.with_untracked(|files| files.into_iter().map(|f| f.deref().clone()).collect()),
|
||||||
event,
|
event,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -122,7 +127,8 @@ where
|
||||||
let _z = leptos::reactive::diagnostics::SpecialNonReactiveZone::enter();
|
let _z = leptos::reactive::diagnostics::SpecialNonReactiveZone::enter();
|
||||||
|
|
||||||
on_over(UseDropZoneEvent {
|
on_over(UseDropZoneEvent {
|
||||||
files: files.get_untracked().into_iter().collect(),
|
files: files
|
||||||
|
.with_untracked(|files| files.into_iter().map(|f| f.deref().clone()).collect()),
|
||||||
event,
|
event,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -140,7 +146,8 @@ where
|
||||||
let _z = leptos::reactive::diagnostics::SpecialNonReactiveZone::enter();
|
let _z = leptos::reactive::diagnostics::SpecialNonReactiveZone::enter();
|
||||||
|
|
||||||
on_leave(UseDropZoneEvent {
|
on_leave(UseDropZoneEvent {
|
||||||
files: files.get_untracked().into_iter().collect(),
|
files: files
|
||||||
|
.with_untracked(|files| files.into_iter().map(|f| f.deref().clone()).collect()),
|
||||||
event,
|
event,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -156,7 +163,8 @@ where
|
||||||
let _z = leptos::reactive::diagnostics::SpecialNonReactiveZone::enter();
|
let _z = leptos::reactive::diagnostics::SpecialNonReactiveZone::enter();
|
||||||
|
|
||||||
on_drop(UseDropZoneEvent {
|
on_drop(UseDropZoneEvent {
|
||||||
files: files.get_untracked().into_iter().collect(),
|
files: files
|
||||||
|
.with_untracked(|files| files.into_iter().map(|f| f.deref().clone()).collect()),
|
||||||
event,
|
event,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -211,7 +219,7 @@ pub struct UseDropZoneEvent {
|
||||||
/// Return type of [`use_drop_zone`].
|
/// Return type of [`use_drop_zone`].
|
||||||
pub struct UseDropZoneReturn {
|
pub struct UseDropZoneReturn {
|
||||||
/// Files being handled
|
/// Files being handled
|
||||||
pub files: Signal<Vec<web_sys::File>, LocalStorage>,
|
pub files: Signal<Vec<SendWrapper<web_sys::File>>>,
|
||||||
/// Whether the files (dragged by the pointer) are over the drop zone
|
/// Whether the files (dragged by the pointer) are over the drop zone
|
||||||
pub is_over_drop_zone: Signal<bool>,
|
pub is_over_drop_zone: Signal<bool>,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue