more-customizable CopyButton

This commit is contained in:
Gavin McDonald
2025-04-23 15:39:28 -04:00
parent c9cb28bed9
commit 90fd231fbd

View File

@@ -6,11 +6,18 @@ import { Copy as CopyIcon, Check as CheckIcon } from 'lucide-react';
import ToolTip from '@/components/ToolTip'; import ToolTip from '@/components/ToolTip';
type CopyButtonProps = { type CopyButtonProps = {
title: string; title?: string;
copy: string; copy: string;
tooltip?: string | string[];
className?: string;
}; };
export default function CopyButton({ title, copy }: CopyButtonProps) { export default function CopyButton({
title,
copy,
tooltip = ['Copy', 'Copied'],
className,
}: CopyButtonProps) {
const [copied, setCopied] = useState(false); const [copied, setCopied] = useState(false);
const handleCopy = async () => { const handleCopy = async () => {
@@ -23,21 +30,21 @@ export default function CopyButton({ title, copy }: CopyButtonProps) {
} }
}; };
const ttContent =
Array.isArray(tooltip) && tooltip.length > 1 ? (copied ? tooltip[1] : tooltip[0]) : tooltip;
return ( return (
<ToolTip content={copy}> <button onClick={handleCopy} className={`transition-all cursor-pointer ${className}`}>
<button <ToolTip content={ttContent} className="w-full">
onClick={handleCopy}
className="w-full py-1 px-2 bg-gray-700 hover:bg-gray-600 text-white rounded-lg flex flex-col items-start gap-1 shadow transition-all cursor-pointer"
>
<div className="flex items-center gap-2 w-full text-sm font-medium"> <div className="flex items-center gap-2 w-full text-sm font-medium">
{`Copy ${title}`} {title}
{copied ? ( {copied ? (
<CheckIcon className="ml-auto" size={16} /> <CheckIcon className="ml-auto" size={16} />
) : ( ) : (
<CopyIcon className="ml-auto" size={16} /> <CopyIcon className="ml-auto" size={16} />
)} )}
</div> </div>
</button>
</ToolTip> </ToolTip>
</button>
); );
} }