From 54b17b48baa2b073e2da03b7c08f706a2cf8b98e Mon Sep 17 00:00:00 2001 From: ShanaMaid Date: Thu, 8 Nov 2018 15:18:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96modal=E3=80=81Button?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/Button/Button.tsx | 16 ++++++++- components/Modal/Modal.tsx | 36 +++++++++++++++---- docs/pages/components/Modal/api.tsx | 16 +++++++-- .../components/Modal/demo/modalInner.tsx | 1 + 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/components/Button/Button.tsx b/components/Button/Button.tsx index d097f1a..9ded10d 100644 --- a/components/Button/Button.tsx +++ b/components/Button/Button.tsx @@ -56,11 +56,24 @@ export class Button extends Component { size: 'default', }; + onClick = () => { + const { loading, disabled, onClick } = this.props; + const ban = loading || disabled; + if (ban) { + return; + } + if (onClick) { + onClick(); + } + } + render() { const { className, style, disabled, type, shape, size, icon, ghost, children, - tail, loading, ...otherProps} = this.props; + tail, loading, onClick, + ...otherProps + } = this.props; const preCls = 'yoshino-button'; const btnCls = { [`${preCls}-${type}`]: type && !disabled && !loading || type === 'dashed', @@ -86,6 +99,7 @@ export class Button extends Component { className={clsName} style={style} disabled={ban} + onClick={this.onClick} {...otherProps} >
diff --git a/components/Modal/Modal.tsx b/components/Modal/Modal.tsx index ee42d42..98c3c61 100644 --- a/components/Modal/Modal.tsx +++ b/components/Modal/Modal.tsx @@ -7,6 +7,7 @@ import Button from '../Button'; import Icon from '../Icon'; import { render } from 'react-dom'; import { Dialog } from '../utils/'; +import { IButtonProps } from '../Button/Button'; export interface IModalProps extends IBaseComponent { zIndex?: number; @@ -15,7 +16,9 @@ export interface IModalProps extends IBaseComponent { onCancel?: () => void; onClose?: () => void; okText?: React.ReactNode; + okButtonProps?: IButtonProps; cancelText?: React.ReactNode; + cancelButtonProps?: IButtonProps; showCancel?: boolean; closeText?: React.ReactNode; showClose?: boolean; @@ -105,7 +108,7 @@ class Modal extends Component { content, icon, width, zIndex, showCancel, okText, cancelText, type = 'confirm', closeText, showClose, maskStyle, maskClosable, showMask, maskClick, onOk, - onCancel, children, + onCancel, children, okButtonProps, cancelButtonProps, ...otherProps } = this.props; const preCls = 'yoshino-modal'; @@ -121,6 +124,8 @@ class Modal extends Component { const hasIcon = type !== 'confirm' || icon; const visible = this.getVisible(); const conetnt = children || bodyContent; + const okTextIsString = typeof okText === 'string' || okText === undefined; + const cancelTextIsString = typeof cancelText === 'string' || cancelText === undefined ; return visible ? ( {
{ type === 'confirm' && showCancel ? ( -
+
{ - typeof cancelText === 'string' || !cancelText ? ( - + cancelTextIsString ? ( + ) : cancelText }
) : null } -
+
{ - typeof okText === 'string' || !okText ? ( - + okTextIsString ? ( + ) : okText }
diff --git a/docs/pages/components/Modal/api.tsx b/docs/pages/components/Modal/api.tsx index c978c1d..c4a2f52 100644 --- a/docs/pages/components/Modal/api.tsx +++ b/docs/pages/components/Modal/api.tsx @@ -37,13 +37,25 @@ export default [ }, { props: 'okText', - intro: '确认按钮文本', + intro: '确认按钮文本,也可以是一个`Element`', + type: 'ReactNode', + defaultValue: '确定', + }, + { + props: 'okButtonProps', + intro: '确认按钮的`props`,详情见`Button Props`', type: 'ReactNode', defaultValue: '确定', }, { props: 'cancelText', - intro: '取消按钮文本', + intro: '取消按钮文本,也可以是一个`Element`', + type: 'ReactNode', + defaultValue: '取消', + }, + { + props: 'cancelButtonProps', + intro: '取消按钮的`props`,,详情见`Button Props`', type: 'ReactNode', defaultValue: '取消', }, diff --git a/docs/pages/components/Modal/demo/modalInner.tsx b/docs/pages/components/Modal/demo/modalInner.tsx index 99bcd27..03a587e 100644 --- a/docs/pages/components/Modal/demo/modalInner.tsx +++ b/docs/pages/components/Modal/demo/modalInner.tsx @@ -22,6 +22,7 @@ export default class App extends React.Component { visible={this.state.visible} bodyContent={this.state.count} onClose={() => this.setState({visible: false})} + okButtonProps={{loading: true}} />
);