Browse Source

fix onVisibleChange arguments error (#4589)

* fix onVisibleChange arguments error

* add test

* trigger travis
pull/4603/head
Rex 8 years ago
committed by 偏右
parent
commit
6e33285890
  1. 53
      components/tooltip/__tests__/tooltip.test.js
  2. 15
      components/tooltip/index.tsx

53
components/tooltip/__tests__/tooltip.test.js

@ -0,0 +1,53 @@
import React from 'react';
import { mount } from 'enzyme';
import Tooltip from '..';
describe('Tooltip', () => {
it('check `onVisibleChange` arguments', () => {
const onVisibleChange = jest.fn();
const wrapper = mount(
<Tooltip
title=""
mouseEnterDelay={0}
mouseLeaveDelay={0}
onVisibleChange={onVisibleChange}
>
<div>Hello world!</div>
</Tooltip>
);
// `title` is empty.
const div = wrapper.find('div').at(0);
div.simulate('mouseenter');
expect(onVisibleChange).not.toHaveBeenCalled();
expect(wrapper.ref('tooltip').prop('visible')).toBe(false);
div.simulate('mouseleave');
expect(onVisibleChange).not.toHaveBeenCalled();
expect(wrapper.ref('tooltip').prop('visible')).toBe(false);
// update `title` value.
wrapper.setProps({ title: 'Have a nice day!' });
wrapper.simulate('mouseenter');
expect(onVisibleChange).toBeCalledWith(true); // mock.calls.length++
expect(wrapper.ref('tooltip').prop('visible')).toBe(true);
wrapper.simulate('mouseleave');
expect(onVisibleChange).toBeCalledWith(false); // mock.calls.length++
expect(wrapper.ref('tooltip').prop('visible')).toBe(false);
// add `visible` props.
wrapper.setProps({ visible: false });
wrapper.simulate('mouseenter');
expect(onVisibleChange.mock.calls.length).toBe(2);
expect(wrapper.ref('tooltip').prop('visible')).toBe(false);
wrapper.simulate('mouseleave');
expect(onVisibleChange.mock.calls.length).toBe(2);
expect(wrapper.ref('tooltip').prop('visible')).toBe(false);
});
});

15
components/tooltip/index.tsx

@ -51,7 +51,7 @@ export default class Tooltip extends React.Component<TooltipProps, any> {
super(props);
this.state = {
visible: props.visible,
visible: !!props.visible,
};
}
@ -62,16 +62,21 @@ export default class Tooltip extends React.Component<TooltipProps, any> {
}
onVisibleChange = (visible) => {
const props = this.props;
const { props, state } = this;
const { title, overlay, onVisibleChange } = props;
if (!('visible' in props)) {
this.setState({ visible });
if (!title && !overlay) {
visible = false;
}
const onVisibleChange = props.onVisibleChange;
if (onVisibleChange) {
this.setState({ visible });
if (onVisibleChange && (visible !== state.visible)) {
onVisibleChange(visible);
}
}
}
getPopupDomNode() {
return this.refs.tooltip.getPopupDomNode();

Loading…
Cancel
Save