index.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. 'use client'
  2. import React, { useState } from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import { debounce } from 'lodash-es'
  5. import copy from 'copy-to-clipboard'
  6. import TooltipPlus from '../tooltip-plus'
  7. import { Clipboard, ClipboardCheck } from '@/app/components/base/icons/src/vender/line/files'
  8. type Props = {
  9. content: string
  10. }
  11. const prefixEmbedded = 'appOverview.overview.appInfo.embedded'
  12. export const CopyIcon = ({ content }: Props) => {
  13. const { t } = useTranslation()
  14. const [isCopied, setIsCopied] = useState<boolean>(false)
  15. const onClickCopy = debounce(() => {
  16. copy(content)
  17. setIsCopied(true)
  18. }, 100)
  19. const onMouseLeave = debounce(() => {
  20. setIsCopied(false)
  21. }, 100)
  22. return (
  23. <TooltipPlus
  24. popupContent={
  25. (isCopied
  26. ? t(`${prefixEmbedded}.copied`)
  27. : t(`${prefixEmbedded}.copy`)) || ''
  28. }
  29. >
  30. <div onMouseLeave={onMouseLeave}>
  31. {!isCopied
  32. ? (
  33. <Clipboard className='mx-1 w-3 h-3 text-gray-500 cursor-pointer' onClick={onClickCopy} />
  34. )
  35. : (
  36. <ClipboardCheck className='mx-1 w-3 h-3 text-gray-500' />
  37. )
  38. }
  39. </div>
  40. </TooltipPlus>
  41. )
  42. }
  43. export default CopyIcon