diff --git a/demo/src/pages/upload/mod.rs b/demo/src/pages/upload/mod.rs
index 8f7e37e..c5601af 100644
--- a/demo/src/pages/upload/mod.rs
+++ b/demo/src/pages/upload/mod.rs
@@ -5,23 +5,65 @@ use prisms::highlight_str;
#[component]
pub fn UploadPage() -> impl IntoView {
+ 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! {
-
"Upload(TODO)"
+
"Upload"
-
+
+
+
+
+ }
+ "#,
+ "rust"
+ )
+ >
+
+ ""
+
+
+
"Drag to upload"
+
+
+
+ "Click or drag a file to this area to upload"
+
+
-
+
+ "Click or drag a file to this area to upload"
+
"#,
"rust"
diff --git a/src/upload/mod.rs b/src/upload/mod.rs
index 1aa8417..d038bbf 100644
--- a/src/upload/mod.rs
+++ b/src/upload/mod.rs
@@ -1,25 +1,23 @@
-use crate::{mount_style, utils::AsyncCallback};
+mod upload_dragger;
+
+use crate::mount_style;
use leptos::*;
-use web_sys::FileList;
+pub use upload_dragger::UploadDragger;
+pub use web_sys::FileList;
#[component]
pub fn Upload(
#[prop(optional, into)] accept: MaybeSignal,
#[prop(optional, into)] multiple: MaybeSignal,
- #[prop(optional, into)] on_before_upload: Option>,
+ #[prop(optional, into)] custom_request: Option>,
children: Children,
) -> impl IntoView {
mount_style("upload", include_str!("./upload.css"));
let on_file_addition = move |files: FileList| {
- spawn_local(async move {
- if let Some(on_before_upload) = on_before_upload {
- let is_allow = on_before_upload.call(files).await;
- if is_allow {
- //TODO submit
- }
- }
- });
+ if let Some(custom_request) = custom_request {
+ custom_request.call(files);
+ }
};
let input_ref = create_node_ref::();
let on_change = move |_| {
diff --git a/src/upload/upload-dragger.css b/src/upload/upload-dragger.css
new file mode 100644
index 0000000..4b960a7
--- /dev/null
+++ b/src/upload/upload-dragger.css
@@ -0,0 +1,14 @@
+.melt-upload-dragger {
+ padding: 20px;
+ background-color: #fafbfc;
+ color: #24292e;
+ border: 1px solid #e0e0e6;
+ border-radius: 3px;
+ text-align: center;
+ cursor: pointer;
+ transition: border 0.3s;
+}
+.melt-upload-dragger:hover,
+.melt-upload--drag-over .melt-upload-dragger {
+ border: 1px dashed var(--border-color-hover);
+}
diff --git a/src/upload/upload_dragger.rs b/src/upload/upload_dragger.rs
new file mode 100644
index 0000000..9fccbeb
--- /dev/null
+++ b/src/upload/upload_dragger.rs
@@ -0,0 +1,21 @@
+use crate::{use_theme, utils::mount_style::mount_style, Theme};
+use leptos::*;
+
+#[component]
+pub fn UploadDragger(children: Children) -> impl IntoView {
+ mount_style("upload-dragger", include_str!("./upload-dragger.css"));
+ let theme = use_theme(Theme::light);
+ let css_vars = create_memo(move |_| {
+ let mut css_vars = String::new();
+ theme.with(|theme| {
+ let border_color_hover = theme.common.color_primary.clone();
+ css_vars.push_str(&format!("--border-color-hover: {border_color_hover};"));
+ });
+ css_vars
+ });
+ view! {
+
+ {children()}
+
+ }
+}