use dioxus::prelude::*;
use dioxus_sdk::clipboard::use_clipboard;
use zino_core::SharedString;
pub fn CopyToClipboard(props: CopyToClipboardProps) -> Element {
if props.hidden {
return rsx! {};
}
let mut clipboard = use_clipboard();
rsx! {
a {
onclick: move |event| {
let content = props.content.as_ref();
match clipboard.set(content.to_owned()) {
Ok(_) => if let Some(handler) = props.on_success.as_ref() {
handler.call(());
},
Err(_) => if let Some(handler) = props.on_error.as_ref() {
handler.call(());
}
}
event.stop_propagation();
},
{ props.children }
}
}
}
#[derive(Clone, PartialEq, Props)]
pub struct CopyToClipboardProps {
#[props(default)]
pub hidden: bool,
#[props(into)]
pub content: SharedString,
pub on_success: Option<EventHandler<()>>,
pub on_error: Option<EventHandler<()>>,
children: Element,
}