38 lines
893 B
TypeScript
38 lines
893 B
TypeScript
import * as React from 'react';
|
|
import copy from 'copy-text-to-clipboard';
|
|
import * as styles from './CopyText.scss';
|
|
import { Button } from './Button';
|
|
import { useI18n } from '../util/i18n';
|
|
|
|
export type Props = {
|
|
value: string;
|
|
label: string;
|
|
onCopy?: () => unknown;
|
|
};
|
|
|
|
export const CopyText: React.ComponentType<Props> = React.memo(
|
|
({ label, onCopy, value }) => {
|
|
const i18n = useI18n();
|
|
const handleClick = React.useCallback(() => {
|
|
copy(value);
|
|
if (onCopy) {
|
|
onCopy();
|
|
}
|
|
}, [onCopy, value]);
|
|
|
|
return (
|
|
<div className={styles.container}>
|
|
<input
|
|
type="text"
|
|
className={styles.input}
|
|
value={value}
|
|
aria-label={label}
|
|
readOnly
|
|
/>
|
|
<Button onClick={handleClick}>
|
|
{i18n('StickerCreator--CopyText--button')}
|
|
</Button>
|
|
</div>
|
|
);
|
|
}
|
|
);
|