| 'use client' | |
| import React, { useState } from 'react' | |
| import { useTranslation } from 'react-i18next' | |
| import { debounce } from 'lodash-es' | |
| import copy from 'copy-to-clipboard' | |
| import Tooltip from '../tooltip' | |
| import { | |
| Clipboard, | |
| ClipboardCheck, | |
| } from '@/app/components/base/icons/src/vender/line/files' | |
| type Props = { | |
| content: string | |
| } | |
| const prefixEmbedded = 'appOverview.overview.appInfo.embedded' | |
| export const CopyIcon = ({ content }: 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 onMouseLeave={onMouseLeave}> | |
| {!isCopied | |
| ? ( | |
| <Clipboard className='mx-1 w-3 h-3 text-gray-500 cursor-pointer' onClick={onClickCopy} /> | |
| ) | |
| : ( | |
| <ClipboardCheck className='mx-1 w-3 h-3 text-gray-500' /> | |
| ) | |
| } | |
| </div> | |
| </Tooltip> | |
| ) | |
| } | |
| export default CopyIcon | |