Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(Balloon): add mouseEnterDelay and mouseLeaveDelay, with higher p… #4867

Merged
merged 1 commit into from
Jul 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions components/balloon/__tests__/balloon-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -321,3 +321,29 @@ describe('Balloon onClose ComponentWillReceiveProps closeIcon', () => {
assert(document.querySelector('.next-balloon') === null);
});
});

describe('balloon delay', () => {
it('add mouseEnterDelay and mouseLeaveDelay, with higher priority than delay.', async () => {
const wrapper = mount(
<Balloon trigger={<div>trigger1111111</div>} delay={500} mouseEnterDelay={1000} mouseLeaveDelay={1000} triggerType="hover">
trigger
</Balloon>
);

wrapper.find('div').simulate('mouseenter');
await delay(500);
assert(document.querySelector('.next-balloon') === null);

await delay(550);
assert(document.querySelector('.next-balloon') !== null);

wrapper.find('div').simulate('mouseleave');

await delay(550);
assert(document.querySelector('.next-balloon') !== null);

await delay(1000);
assert(document.querySelector('.next-balloon') === null);

});
})
22 changes: 22 additions & 0 deletions components/balloon/__tests__/tooltip-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ const trigger = (
xiachi
</span>
);
const delay = time => new Promise(resolve => setTimeout(resolve, time));

describe('Tooltip', () => {
let defaultWrapper = {};

Expand Down Expand Up @@ -99,4 +101,24 @@ describe('Tooltip', () => {
done();
}, 300);
});

it('add mouseEnterDelay and mouseLeaveDelay, with higher priority than delay.', async () => {
const wrapper = mount(<Tooltip trigger={<div>trigger1111111</div>} delay={500} mouseEnterDelay={1000} mouseLeaveDelay={1000}>test</Tooltip>);

wrapper.find('div').simulate('mouseenter');

await delay(500);
assert(document.querySelector('.next-balloon-tooltip') === null);

await delay(550);
assert(document.querySelector('.next-balloon-tooltip') !== null);

wrapper.find('div').simulate('mouseleave');

await delay(500);
assert(document.querySelector('.next-balloon-tooltip') !== null);

await delay(1000);
assert(document.querySelector('.next-balloon-tooltip') === null);
});
});
12 changes: 12 additions & 0 deletions components/balloon/balloon.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,14 @@ class Balloon extends React.Component {
* 弹层在触发以后的延时显示, 单位毫秒 ms
*/
delay: PropTypes.number,
/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: PropTypes.number,
/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: PropTypes.number,
/**
* 浮层关闭后触发的事件, 如果有动画,则在动画结束后触发
*/
Expand Down Expand Up @@ -327,6 +335,8 @@ class Balloon extends React.Component {
closable,
shouldUpdatePosition,
delay,
mouseEnterDelay,
mouseLeaveDelay,
needAdjust,
autoAdjust,
safeId,
Expand Down Expand Up @@ -401,6 +411,8 @@ class Balloon extends React.Component {

const otherProps = {
delay: delay,
mouseEnterDelay: mouseEnterDelay,
mouseLeaveDelay: mouseLeaveDelay,
shouldUpdatePosition: shouldUpdatePosition,
needAdjust: needAdjust,
align: alignMap[align].align,
Expand Down
20 changes: 20 additions & 0 deletions components/balloon/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,16 @@ export interface TooltipProps extends React.HTMLAttributes<HTMLElement>, CommonP
*/
delay?: number;

/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: number;

/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: number;

/**
* 是否pure render
*/
Expand Down Expand Up @@ -175,6 +185,16 @@ export interface BalloonProps extends HTMLAttributesWeak, CommonProps {
*/
delay?: number;

/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: number;

/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: number;

/**
* 浮层关闭后触发的事件, 如果有动画,则在动画结束后触发
*/
Expand Down
12 changes: 12 additions & 0 deletions components/balloon/tooltip.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,14 @@ export default class Tooltip extends React.Component {
* 如果需要让 Tooltip 内容可被点击,可以设置这个参数,例如 100
*/
delay: PropTypes.number,
/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: PropTypes.number,
/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: PropTypes.number,
/**
* 开启 v2 版本
*/
Expand Down Expand Up @@ -165,6 +173,8 @@ export default class Tooltip extends React.Component {
autoAdjust,
rtl,
delay,
mouseEnterDelay,
mouseLeaveDelay,
v2,
arrowPointToCenter,
...others
Expand Down Expand Up @@ -219,6 +229,8 @@ export default class Tooltip extends React.Component {

const otherProps = {
delay: delay,
mouseEnterDelay: mouseEnterDelay,
mouseLeaveDelay: mouseLeaveDelay,
shouldUpdatePosition: true,
needAdjust: false,
align: alignMap[align].align,
Expand Down
10 changes: 10 additions & 0 deletions components/overlay/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,16 @@ export interface PopupProps extends React.HTMLAttributes<HTMLElement>, CommonPro
*/
delay?: number;

/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: number;

/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: number;

/**
* trigger 是否可以关闭弹层
*/
Expand Down
12 changes: 10 additions & 2 deletions components/overlay/popup.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ class Popup extends Component {
* 弹层显示或隐藏的延时时间(以毫秒为单位),在 triggerType 被设置为 hover 时生效
*/
delay: PropTypes.number,
/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: PropTypes.number,
/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: PropTypes.number,
/**
* trigger 是否可以关闭弹层
*/
Expand Down Expand Up @@ -184,7 +192,7 @@ class Popup extends Component {
if (!this.state.visible) {
this._showTimer = setTimeout(() => {
this.handleVisibleChange(true, 'fromTrigger', e);
}, this.props.delay);
}, (this.props.mouseEnterDelay === null || this.props.mouseEnterDelay === undefined) ? this.props.delay : this.props.mouseEnterDelay);
eamonzym marked this conversation as resolved.
Show resolved Hide resolved
}
}

Expand All @@ -196,7 +204,7 @@ class Popup extends Component {
if (this.state.visible) {
this._hideTimer = setTimeout(() => {
this.handleVisibleChange(false, type || 'fromTrigger', e);
}, this.props.delay);
}, (this.props.mouseLeaveDelay === null || this.props.mouseLeaveDelay === undefined) ? this.props.delay : this.props.mouseLeaveDelay);
}
}

Expand Down
Loading