29 lines
875 B
TypeScript
29 lines
875 B
TypeScript
import { isNil } from 'lodash-es';
|
|
import { useCallback, useEffect } from 'react';
|
|
import { useCopyToClipboard } from 'react-use';
|
|
import { NotificationType, useNotification } from '../components/Notifications';
|
|
|
|
export function useCopyColor() {
|
|
const { showToast } = useNotification();
|
|
const [cpState, copyToClipboard] = useCopyToClipboard();
|
|
const copyAction = useCallback((color: string) => {
|
|
if (isNil(color)) return;
|
|
copyToClipboard(color);
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (!isNil(cpState.error)) {
|
|
showToast(NotificationType.ERROR, 'Failed to copy to clipboard', 'tabler:alert-circle', 3000);
|
|
} else if (!isNil(cpState.value)) {
|
|
showToast(
|
|
NotificationType.SUCCESS,
|
|
`${cpState.value} has been copied to clipboard.`,
|
|
'tabler:circle-check',
|
|
3000,
|
|
);
|
|
}
|
|
}, [cpState]);
|
|
|
|
return copyAction;
|
|
}
|