index.tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 Tooltip from '../tooltip'
  7. import TooltipPlus from '../tooltip-plus'
  8. import copyStyle from './style.module.css'
  9. type Props = {
  10. content: string
  11. selectorId: string
  12. className?: string
  13. }
  14. const prefixEmbedded = 'appOverview.overview.appInfo.embedded'
  15. const CopyFeedback = ({ content, selectorId, className }: Props) => {
  16. const { t } = useTranslation()
  17. const [isCopied, setIsCopied] = useState<boolean>(false)
  18. const onClickCopy = debounce(() => {
  19. copy(content)
  20. setIsCopied(true)
  21. }, 100)
  22. const onMouseLeave = debounce(() => {
  23. setIsCopied(false)
  24. }, 100)
  25. return (
  26. <Tooltip
  27. selector={`common-copy-feedback-${selectorId}`}
  28. content={
  29. (isCopied
  30. ? t(`${prefixEmbedded}.copied`)
  31. : t(`${prefixEmbedded}.copy`)) || ''
  32. }
  33. >
  34. <div
  35. className={`w-8 h-8 cursor-pointer hover:bg-gray-100 rounded-lg ${
  36. className ?? ''
  37. }`}
  38. onMouseLeave={onMouseLeave}
  39. >
  40. <div
  41. onClick={onClickCopy}
  42. className={`w-full h-full ${copyStyle.copyIcon} ${
  43. isCopied ? copyStyle.copied : ''
  44. }`}
  45. ></div>
  46. </div>
  47. </Tooltip>
  48. )
  49. }
  50. export default CopyFeedback
  51. export const CopyFeedbackNew = ({ content, className }: Pick<Props, 'className' | 'content'>) => {
  52. const { t } = useTranslation()
  53. const [isCopied, setIsCopied] = useState<boolean>(false)
  54. const onClickCopy = debounce(() => {
  55. copy(content)
  56. setIsCopied(true)
  57. }, 100)
  58. const onMouseLeave = debounce(() => {
  59. setIsCopied(false)
  60. }, 100)
  61. return (
  62. <TooltipPlus
  63. popupContent={
  64. (isCopied
  65. ? t(`${prefixEmbedded}.copied`)
  66. : t(`${prefixEmbedded}.copy`)) || ''
  67. }
  68. >
  69. <div
  70. className={`w-8 h-8 cursor-pointer hover:bg-gray-100 rounded-lg ${
  71. className ?? ''
  72. }`}
  73. onMouseLeave={onMouseLeave}
  74. >
  75. <div
  76. onClick={onClickCopy}
  77. className={`w-full h-full ${copyStyle.copyIcon} ${
  78. isCopied ? copyStyle.copied : ''
  79. }`}
  80. ></div>
  81. </div>
  82. </TooltipPlus>
  83. )
  84. }