use dioxus::prelude::*;
use dioxus_free_icons::{Icon, icons::ld_icons::*};
#[component]
pub fn CopyPageButton(content: String) -> Element {
#[allow(unused_mut)]
let mut copied = use_signal(|| false);
rsx! {
button {
class: "dk-copy-page btn btn-ghost btn-sm gap-1.5 opacity-60 hover:opacity-100 transition-all duration-150 hover:bg-base-content/10 shrink-0",
title: "Copy page as Markdown",
onclick: move |_| {
#[cfg(target_arch = "wasm32")]
{
let content = content.clone();
spawn(async move {
let eval = document::eval(
"const text = await dioxus.recv();\n\
await navigator.clipboard.writeText(text);",
);
let _ = eval.send(content);
copied.set(true);
gloo_timers::future::TimeoutFuture::new(2000).await;
copied.set(false);
});
}
},
if copied() {
Icon { class: "size-4 text-success", icon: LdCheck }
span { class: "text-xs", "Copied!" }
} else {
Icon { class: "size-4", icon: LdCopy }
span { class: "text-xs", "Copy page" }
}
}
}
}