'use client' import type { FC } from 'react' import React, { useCallback, useEffect, useState } from 'react' import copy from 'copy-to-clipboard' import { RiClipboardLine, } from '@remixicon/react' import { useTranslation } from 'react-i18next' import { ClipboardCheck } from '../../base/icons/src/vender/line/files' import Tooltip from '../../base/tooltip' import cn from '@/utils/classnames' import ActionButton from '@/app/components/base/action-button' type Props = { label: string labelWidthClassName?: string value: string maskedValue?: string valueMaxWidthClassName?: string } const KeyValueItem: FC = ({ label, labelWidthClassName = 'w-10', value, maskedValue, valueMaxWidthClassName = 'max-w-[162px]', }) => { const { t } = useTranslation() const [isCopied, setIsCopied] = useState(false) const handleCopy = useCallback(() => { copy(value) setIsCopied(true) }, [value]) useEffect(() => { if (isCopied) { const timer = setTimeout(() => { setIsCopied(false) }, 2000) return () => { clearTimeout(timer) } } }, [isCopied]) const CopyIcon = isCopied ? ClipboardCheck : RiClipboardLine return (
{label}
{maskedValue || value}
) } export default React.memo(KeyValueItem)