|
'use client' |
|
import React, { useState } from 'react' |
|
import { useTranslation } from 'react-i18next' |
|
import { debounce } from 'lodash-es' |
|
import copy from 'copy-to-clipboard' |
|
import copyStyle from './style.module.css' |
|
import Tooltip from '@/app/components/base/tooltip' |
|
|
|
type Props = { |
|
content: string |
|
className?: string |
|
} |
|
|
|
const prefixEmbedded = 'appOverview.overview.appInfo.embedded' |
|
|
|
const CopyFeedback = ({ content, className }: Props) => { |
|
const { t } = useTranslation() |
|
const [isCopied, setIsCopied] = useState<boolean>(false) |
|
|
|
const onClickCopy = debounce(() => { |
|
copy(content) |
|
setIsCopied(true) |
|
}, 100) |
|
|
|
const onMouseLeave = debounce(() => { |
|
setIsCopied(false) |
|
}, 100) |
|
|
|
return ( |
|
<Tooltip |
|
popupContent={ |
|
(isCopied |
|
? t(`${prefixEmbedded}.copied`) |
|
: t(`${prefixEmbedded}.copy`)) || '' |
|
} |
|
> |
|
<div |
|
className={`w-8 h-8 cursor-pointer hover:bg-gray-100 rounded-lg ${ |
|
className ?? '' |
|
}`} |
|
> |
|
<div |
|
onClick={onClickCopy} |
|
onMouseLeave={onMouseLeave} |
|
className={`w-full h-full ${copyStyle.copyIcon} ${ |
|
isCopied ? copyStyle.copied : '' |
|
}`} |
|
></div> |
|
</div> |
|
</Tooltip> |
|
) |
|
} |
|
|
|
export default CopyFeedback |
|
|
|
export const CopyFeedbackNew = ({ content, className }: Pick<Props, 'className' | 'content'>) => { |
|
const { t } = useTranslation() |
|
const [isCopied, setIsCopied] = useState<boolean>(false) |
|
|
|
const onClickCopy = debounce(() => { |
|
copy(content) |
|
setIsCopied(true) |
|
}, 100) |
|
|
|
const onMouseLeave = debounce(() => { |
|
setIsCopied(false) |
|
}, 100) |
|
|
|
return ( |
|
<Tooltip |
|
popupContent={ |
|
(isCopied |
|
? t(`${prefixEmbedded}.copied`) |
|
: t(`${prefixEmbedded}.copy`)) || '' |
|
} |
|
> |
|
<div |
|
className={`w-8 h-8 cursor-pointer hover:bg-gray-100 rounded-lg ${ |
|
className ?? '' |
|
}`} |
|
> |
|
<div |
|
onClick={onClickCopy} |
|
onMouseLeave={onMouseLeave} |
|
className={`w-full h-full ${copyStyle.copyIcon} ${ |
|
isCopied ? copyStyle.copied : '' |
|
}`} |
|
></div> |
|
</div> |
|
</Tooltip> |
|
) |
|
} |
|
|