import React from 'react'; import Tooltip, { AbstractTooltipProps } from '../tooltip'; import Icon from '../icon'; import Button from '../button'; import { ButtonType } from '../button/button'; import injectLocale from '../locale-provider/injectLocale'; export interface PopconfirmProps extends AbstractTooltipProps { title: React.ReactNode; onConfirm?: (e: React.MouseEvent) => void; onCancel?: (e: React.MouseEvent) => void; okText?: React.ReactNode; okType?: ButtonType; cancelText?: React.ReactNode; cancelType?: ButtonType; } abstract class Popconfirm extends React.Component { static defaultProps = { prefixCls: 'ant-popover', transitionName: 'zoom-big', placement: 'top', trigger: 'click', okType: 'primary' }; refs: { tooltip: Tooltip, }; constructor(props: PopconfirmProps) { super(props); this.state = { visible: props.visible, }; } abstract getLocale(); componentWillReceiveProps(nextProps: PopconfirmProps) { if ('visible' in nextProps) { this.setState({ visible: nextProps.visible }); } } getPopupDomNode() { return this.refs.tooltip.getPopupDomNode(); } onConfirm = (e) => { this.setVisible(false); const { onConfirm } = this.props; if (onConfirm) { onConfirm.call(this, e); } } onCancel = (e) => { this.setVisible(false); const { onCancel } = this.props; if (onCancel) { onCancel.call(this, e); } } onVisibleChange = (visible) => { this.setVisible(visible); } setVisible(visible) { const props = this.props; if (!('visible' in props)) { this.setState({ visible }); } const { onVisibleChange } = props; if (onVisibleChange) { onVisibleChange(visible); } } render() { const { prefixCls, title, placement, okText, okType, cancelText, cancelType, ...restProps } = this.props; const popconfirmLocale = this.getLocale(); const overlay = (
{title}
); return ( ); } } const injectPopconfirmLocale = injectLocale('Popconfirm', { cancelText: '取消', okText: '确定', }); export default injectPopconfirmLocale(Popconfirm as any);