overhaul dioxus fullstack using a new implementation of server_fn This PR is a complete rewrite of dioxus fullstack designed to improve compatibility with axum and to fix a number of compilation errors based on feature flag unification plumbing through macros.
48 lines
1.6 KiB
Rust
48 lines
1.6 KiB
Rust
use dioxus_html::{FileData, HasFileData};
|
|
use web_sys::FileReader;
|
|
|
|
use crate::{WebFileData, WebFileEngine};
|
|
|
|
use super::Synthetic;
|
|
|
|
impl HasFileData for Synthetic<web_sys::Event> {
|
|
fn files(&self) -> Vec<FileData> {
|
|
use wasm_bindgen::JsCast;
|
|
let target = self.event.target();
|
|
|
|
if let Some(target) = target
|
|
.clone()
|
|
.and_then(|t| t.dyn_into::<web_sys::HtmlInputElement>().ok())
|
|
{
|
|
if let Some(file_list) = target.files() {
|
|
return WebFileEngine::new(file_list).to_files();
|
|
}
|
|
}
|
|
|
|
if let Some(target) = target.and_then(|t| t.dyn_into::<web_sys::DragEvent>().ok()) {
|
|
if let Some(data_transfer) = target.data_transfer() {
|
|
if let Some(file_list) = data_transfer.files() {
|
|
return WebFileEngine::new(file_list).to_files();
|
|
} else {
|
|
let items = data_transfer.items();
|
|
let mut files = vec![];
|
|
for i in 0..items.length() {
|
|
if let Some(item) = items.get(i) {
|
|
if item.kind() == "file" {
|
|
if let Ok(Some(file)) = item.get_as_file() {
|
|
let web_data =
|
|
WebFileData::new(file, FileReader::new().unwrap());
|
|
files.push(FileData::new(web_data));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return files;
|
|
}
|
|
}
|
|
}
|
|
|
|
vec![]
|
|
}
|
|
}
|