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;
};