diff --git a/components/tooltip/Tooltip.tsx b/components/tooltip/Tooltip.tsx index a0f3d18e22..aee00e7e82 100644 --- a/components/tooltip/Tooltip.tsx +++ b/components/tooltip/Tooltip.tsx @@ -136,51 +136,53 @@ export default defineComponent({ }) ); }); - + const isTrueProps = (val: boolean | '') => { + return val || val === ''; + }; const getDisabledCompatibleChildren = (ele: any) => { - if ( - ((typeof ele.type === 'object' && - (ele.type.__ANT_BUTTON === true || - ele.type.__ANT_SWITCH === true || - ele.type.__ANT_CHECKBOX === true)) || - ele.type === 'button') && - ele.props && - (ele.props.disabled || ele.props.disabled === '') - ) { - // Pick some layout related style properties up to span - // Prevent layout bugs like https://github.com/ant-design/ant-design/issues/5254 - const { picked, omitted } = splitObject(getStyle(ele), [ - 'position', - 'left', - 'right', - 'top', - 'bottom', - 'float', - 'display', - 'zIndex', - ]); - const spanStyle = { - display: 'inline-block', // default inline-block is important - ...picked, - cursor: 'not-allowed', - width: ele.props && ele.props.block ? '100%' : null, - }; - const buttonStyle = { - ...omitted, - pointerEvents: 'none', - }; - const child = cloneElement( - ele, - { - style: buttonStyle, - }, - true, - ); - return ( - - {child} - - ); + const elementType = ele.type as any; + if (typeof elementType === 'object' && ele.props) { + if ( + ((elementType.__ANT_BUTTON === true || elementType === 'button') && + isTrueProps(ele.props.disabled)) || + (elementType.__ANT_SWITCH === true && + (isTrueProps(ele.props.disabled) || isTrueProps(ele.props.loading))) + ) { + // Pick some layout related style properties up to span + // Prevent layout bugs like https://github.com/ant-design/ant-design/issues/5254 + const { picked, omitted } = splitObject(getStyle(ele), [ + 'position', + 'left', + 'right', + 'top', + 'bottom', + 'float', + 'display', + 'zIndex', + ]); + const spanStyle = { + display: 'inline-block', // default inline-block is important + ...picked, + cursor: 'not-allowed', + width: ele.props && ele.props.block ? '100%' : null, + }; + const buttonStyle = { + ...omitted, + pointerEvents: 'none', + }; + const child = cloneElement( + ele, + { + style: buttonStyle, + }, + true, + ); + return ( + + {child} + + ); + } } return ele; };