snort/packages/app/src/Element/Copy.tsx

24 lines
792 B
TypeScript
Raw Normal View History

2023-01-09 11:00:23 +00:00
import "./Copy.css";
2023-03-02 17:47:02 +00:00
import Icon from "Icons/Icon";
2023-01-20 11:11:50 +00:00
import { useCopy } from "useCopy";
2023-01-09 11:00:23 +00:00
2023-01-16 17:48:25 +00:00
export interface CopyProps {
text: string;
maxSize?: number;
2023-03-25 22:55:34 +00:00
className?: string;
2023-01-16 17:48:25 +00:00
}
2023-03-25 22:55:34 +00:00
export default function Copy({ text, maxSize = 32, className }: CopyProps) {
2023-02-07 19:47:57 +00:00
const { copy, copied } = useCopy();
const sliceLength = maxSize / 2;
2023-02-09 12:26:54 +00:00
const trimmed = text.length > maxSize ? `${text.slice(0, sliceLength)}...${text.slice(-sliceLength)}` : text;
return (
2023-03-25 22:55:34 +00:00
<div className={`flex flex-row copy ${className}`} onClick={() => copy(text)}>
<span className="body">{trimmed}</span>
2023-02-09 12:26:54 +00:00
<span className="icon" style={{ color: copied ? "var(--success)" : "var(--highlight)" }}>
2023-03-02 17:47:02 +00:00
{copied ? <Icon name="check" size={14} /> : <Icon name="copy" size={14} />}
</span>
</div>
);
}