diff --git a/Cargo.toml b/Cargo.toml
index a91f7e7..4af0768 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,7 +14,12 @@ license = "MIT"
[dependencies]
leptos = { version = "0.5.1", features = ["csr"] }
-web-sys = { version = "0.3.62", features = ["DomRect", "File", "FileList"] }
+web-sys = { version = "0.3.62", features = [
+ "DomRect",
+ "File",
+ "FileList",
+ "DataTransfer",
+] }
icondata = { version = "0.1.0", features = [
"AiCloseOutlined",
"AiCheckOutlined",
diff --git a/demo/src/pages/components.rs b/demo/src/pages/components.rs
index 33aa9f2..ac2627a 100644
--- a/demo/src/pages/components.rs
+++ b/demo/src/pages/components.rs
@@ -11,7 +11,7 @@ pub fn ComponentsPage() -> impl IntoView {
let mut pathname = loaction.pathname.get_untracked();
if pathname.starts_with("/thaw/components/") {
- pathname.drain(20..).collect()
+ pathname.drain(17..).collect()
} else {
String::new()
}
diff --git a/demo/src/pages/upload/mod.rs b/demo/src/pages/upload/mod.rs
index dde5428..dd79e42 100644
--- a/demo/src/pages/upload/mod.rs
+++ b/demo/src/pages/upload/mod.rs
@@ -51,7 +51,7 @@ pub fn UploadPage() -> impl IntoView {
"Drag to upload"
-
+
"Click or drag a file to this area to upload"
@@ -60,11 +60,21 @@ pub fn UploadPage() -> impl IntoView {
slot
html=highlight_str!(
r#"
-
-
- "Click or drag a file to this area to upload"
-
-
+ let message = use_message();
+ let custom_request = move |file_list: FileList| {
+ message.create(
+ format!("Number of uploaded files: {}", file_list.length()),
+ MessageVariant::Success,
+ Default::default(),
+ );
+ };
+ view! {
+
+
+ "Click or drag a file to this area to upload"
+
+
+ }
"#,
"rust"
)
diff --git a/src/upload/mod.rs b/src/upload/mod.rs
index f3afb15..7482150 100644
--- a/src/upload/mod.rs
+++ b/src/upload/mod.rs
@@ -34,17 +34,48 @@ pub fn Upload(
input_ref.click();
}
};
+
+ let is_trigger_dargover = create_rw_signal(false);
+ let on_trigger_drop = move |event: ev::DragEvent| {
+ event.prevent_default();
+ if let Some(data) = event.data_transfer() {
+ if let Some(files) = data.files() {
+ on_file_addition(files);
+ }
+ }
+ is_trigger_dargover.set(false);
+ };
+ let on_trigger_dragover = move |event: ev::DragEvent| {
+ event.prevent_default();
+ is_trigger_dargover.set(true);
+ };
+ let on_trigger_dragenter = move |event: ev::DragEvent| {
+ event.prevent_default();
+ };
+ let on_trigger_dragleave = move |event: ev::DragEvent| {
+ event.prevent_default();
+ is_trigger_dargover.set(false);
+ };
+
view! {