| 'use client' | |
| import React, { useEffect, useState } from 'react' | |
| import copy from 'copy-to-clipboard' | |
| import { t } from 'i18next' | |
| import s from './style.module.css' | |
| import Tooltip from '@/app/components/base/tooltip' | |
| type IInputCopyProps = { | |
| value?: string | |
| className?: string | |
| readOnly?: boolean | |
| children?: React.ReactNode | |
| } | |
| const InputCopy = ({ | |
| value = '', | |
| className, | |
| readOnly = true, | |
| children, | |
| }: IInputCopyProps) => { | |
| const [isCopied, setIsCopied] = useState(false) | |
| useEffect(() => { | |
| if (isCopied) { | |
| const timeout = setTimeout(() => { | |
| setIsCopied(false) | |
| }, 1000) | |
| return () => { | |
| clearTimeout(timeout) | |
| } | |
| } | |
| }, [isCopied]) | |
| return ( | |
| <div className={`flex rounded-lg bg-gray-50 hover:bg-gray-50 py-2 items-center ${className}`}> | |
| <div className="flex items-center flex-grow h-5"> | |
| {children} | |
| <div className='flex-grow bg-gray-50 text-[13px] relative h-full'> | |
| <div className='absolute top-0 left-0 w-full pl-2 pr-2 truncate cursor-pointer r-0' onClick={() => { | |
| copy(value) | |
| setIsCopied(true) | |
| }}> | |
| <Tooltip | |
| popupContent={isCopied ? `${t('appApi.copied')}` : `${t('appApi.copy')}`} | |
| position='bottom' | |
| > | |
| {value} | |
| </Tooltip> | |
| </div> | |
| </div> | |
| <div className="flex-shrink-0 h-4 bg-gray-200 border" /> | |
| <Tooltip | |
| popupContent={isCopied ? `${t('appApi.copied')}` : `${t('appApi.copy')}`} | |
| position='bottom' | |
| > | |
| <div className="px-0.5 flex-shrink-0"> | |
| <div className={`box-border w-[30px] h-[30px] flex items-center justify-center rounded-lg hover:bg-gray-100 cursor-pointer ${s.copyIcon} ${isCopied ? s.copied : ''}`} onClick={() => { | |
| copy(value) | |
| setIsCopied(true) | |
| }}> | |
| </div> | |
| </div> | |
| </Tooltip> | |
| </div> | |
| </div> | |
| ) | |
| } | |
| export default InputCopy | |