antd
Version:
An enterprise-class UI design language and React components implementation
44 lines (43 loc) • 1.58 kB
JavaScript
"use client";
import * as React from 'react';
import CheckOutlined from "@ant-design/icons/es/icons/CheckOutlined";
import CopyOutlined from "@ant-design/icons/es/icons/CopyOutlined";
import LoadingOutlined from "@ant-design/icons/es/icons/LoadingOutlined";
import classNames from 'classnames';
import Tooltip from '../../tooltip';
import { getNode, toList } from './util';
const CopyBtn = _ref => {
let {
prefixCls,
copied,
locale,
iconOnly,
tooltips,
icon,
tabIndex,
onCopy,
loading: btnLoading
} = _ref;
const tooltipNodes = toList(tooltips);
const iconNodes = toList(icon);
const {
copied: copiedText,
copy: copyText
} = locale !== null && locale !== void 0 ? locale : {};
const systemStr = copied ? copiedText : copyText;
const copyTitle = getNode(tooltipNodes[copied ? 1 : 0], systemStr);
const ariaLabel = typeof copyTitle === 'string' ? copyTitle : systemStr;
return /*#__PURE__*/React.createElement(Tooltip, {
title: copyTitle
}, /*#__PURE__*/React.createElement("button", {
type: "button",
className: classNames(`${prefixCls}-copy`, {
[`${prefixCls}-copy-success`]: copied,
[`${prefixCls}-copy-icon-only`]: iconOnly
}),
onClick: onCopy,
"aria-label": ariaLabel,
tabIndex: tabIndex
}, copied ? getNode(iconNodes[1], /*#__PURE__*/React.createElement(CheckOutlined, null), true) : getNode(iconNodes[0], btnLoading ? /*#__PURE__*/React.createElement(LoadingOutlined, null) : /*#__PURE__*/React.createElement(CopyOutlined, null), true)));
};
export default CopyBtn;