Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
- [x] Channels
- `dioxus-util`
- [x] `use_root_scroll`
- [x] `select_file*`
- [ ] Camera
- [ ] WiFi
- [ ] Bluetooth
Expand Down
13 changes: 13 additions & 0 deletions examples/select_file/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[package]
name = "select-file-example"
version = "0.1.0"
edition = "2021"

[dependencies]
dioxus-util.workspace = true
dioxus.workspace = true

[features]
default = ["desktop"]
web = ["dioxus/web"]
desktop = ["dioxus/desktop"]
12 changes: 12 additions & 0 deletions examples/select_file/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# select_file apis


### Run

**Web**

```dx serve --platform web```

**Desktop**

```dx serve --platform desktop```
106 changes: 106 additions & 0 deletions examples/select_file/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
use dioxus::logger::tracing::{info, Level};
use dioxus::prelude::*;
use dioxus_util::select_file::{
select_file, select_file_base64, select_file_text, select_files,
select_files_base64, select_files_text, FilePickerOptions,
};

fn main() {
dioxus::logger::init(Level::TRACE).unwrap();
launch(App);
}

#[component]
fn App() -> Element {
rsx! {
div { style: "display: flex; flex-direction: column; gap: 0.5rem;",
h1 { "File Picker Examples" }

button {
onclick: move |_| async move {
let file = select_file_base64(&FilePickerOptions::default())
.await
.unwrap();
if let Some(file) = file {
info!("Selected a file with base64 data: {:?}", file);
} else {
info!("No file selected");
}
},
"Select one file with base64 data"
}

button {
onclick: move |_| async move {
let files = select_files_base64(&FilePickerOptions::default())
.await
.unwrap();
if files.is_empty() {
info!("No files selected");
} else {
for file in files {
info!("Selected file with base64 data: {:?}", file);
}
}
},
"Select multiple files with base64 data"
}

button {
onclick: move |_| async move {
let file = select_file_text(&FilePickerOptions::default())
.await
.unwrap();
if let Some(file) = file {
info!("Selected a file with text data: {:?}", file);
} else {
info!("No file selected");
}
},
"Select one file with text data"
}

button {
onclick: move |_| async move {
let files = select_files_text(&FilePickerOptions::default())
.await
.unwrap();
if files.is_empty() {
info!("No files selected");
} else {
for file in files {
info!("Selected file with text data: {:?}", file);
}
}
},
"Select multiple files with text data"
}

button {
onclick: move |_| async move {
let file = select_file(&FilePickerOptions::default()).await.unwrap();
if let Some(file) = file {
info!("Selected a file with metadata only: {:?}", file);
} else {
info!("No file selected");
}
},
"Select one file (metadata only)"
}

button {
onclick: move |_| async move {
let files = select_files(&FilePickerOptions::default()).await.unwrap();
if files.is_empty() {
info!("No files selected");
} else {
for file in files {
info!("Selected file with metadata only: {:?}", file);
}
}
},
"Select multiple files (metadata only)"
}
}
}
}
3 changes: 3 additions & 0 deletions packages/util/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,7 @@ repository.workspace = true

[dependencies]
dioxus = { workspace = true }
exact_format = "0.2"
serde_json = "1"

serde.workspace = true
3 changes: 3 additions & 0 deletions packages/util/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
//! Common utilities for Dioxus.

pub mod scroll;
pub mod select_file;


Loading
Loading