use super::*;
impl UseClipboard {
pub(crate) fn new() -> Self {
Self {
status: Signal::create(UseClipboardStatus::Idle),
}
}
pub fn current_status(&self) -> UseClipboardStatus {
self.get_status().get()
}
pub fn copy(&self, text: &str) -> bool {
#[cfg(target_arch = "wasm32")]
{
let Some(window) = browser_window() else {
self.get_status().set(UseClipboardStatus::Unavailable);
return false;
};
let navigator: Navigator = window.navigator();
let clipboard: Clipboard = navigator.clipboard();
let status: Signal<UseClipboardStatus> = self.get_status();
let payload: String = text.to_owned();
spawn_local(async move {
match clipboard.write_text(&payload).await {
Ok(_) => status.set(UseClipboardStatus::Copied),
Err(_) => status.set(UseClipboardStatus::Failed),
}
});
true
}
#[cfg(not(target_arch = "wasm32"))]
{
let _: &str = text;
self.get_status().set(UseClipboardStatus::Unavailable);
false
}
}
}