|
'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 |
|
|