mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-25 02:41:21 +01:00
34 lines
941 B
TypeScript
34 lines
941 B
TypeScript
import { useTimedBoolean } from "@yaakapp-internal/ui";
|
|
import { copyToClipboard } from "../lib/copy";
|
|
import { showToast } from "../lib/toast";
|
|
import type { ButtonProps } from "./core/Button";
|
|
import { Button } from "./core/Button";
|
|
|
|
interface Props extends Omit<ButtonProps, "onClick"> {
|
|
text: string | (() => Promise<string | null>);
|
|
}
|
|
|
|
export function CopyButton({ text, ...props }: Props) {
|
|
const [copied, setCopied] = useTimedBoolean();
|
|
return (
|
|
<Button
|
|
{...props}
|
|
onClick={async () => {
|
|
const content = typeof text === "function" ? await text() : text;
|
|
if (content == null) {
|
|
showToast({
|
|
id: "failed-to-copy",
|
|
color: "danger",
|
|
message: "Failed to copy",
|
|
});
|
|
} else {
|
|
copyToClipboard(content, { disableToast: true });
|
|
setCopied();
|
|
}
|
|
}}
|
|
>
|
|
{copied ? "Copied" : "Copy"}
|
|
</Button>
|
|
);
|
|
}
|