diff --git a/components/tooltip/Tooltip.jsx b/components/tooltip/Tooltip.jsx index 571dc4ce9..59c098035 100644 --- a/components/tooltip/Tooltip.jsx +++ b/components/tooltip/Tooltip.jsx @@ -50,7 +50,7 @@ export default { }, }, methods: { - onVisibleChange(visible) { + handleVisibleChange(visible) { if (!hasProp(this, 'visible')) { this.sVisible = this.isNoTitle() ? false : visible; } @@ -200,7 +200,7 @@ export default { overlay: this.getOverlay(), visible: sVisible, ref: 'tooltip', - onVisibleChange: this.onVisibleChange, + onVisibleChange: this.handleVisibleChange, onPopupAlign: this.onPopupAlign, }; return ( diff --git a/components/tooltip/__tests__/tooltip.test.js b/components/tooltip/__tests__/tooltip.test.js index 0775b24e4..503217954 100644 --- a/components/tooltip/__tests__/tooltip.test.js +++ b/components/tooltip/__tests__/tooltip.test.js @@ -12,17 +12,13 @@ describe('Tooltip', () => { props: ['title', 'visible'], render() { const props = { - props: { - title: this.title || '', - mouseEnterDelay: 0, - mouseLeaveDelay: 0, - }, - on: { - visibleChange: onVisibleChange, - }, + title: this.title || '', + mouseEnterDelay: 0, + mouseLeaveDelay: 0, + onVisibleChange, }; if (this.visible !== undefined) { - props.props.visible = this.visible; + props.visible = this.visible; } return ( @@ -31,22 +27,22 @@ describe('Tooltip', () => { ); }, }, - { sync: false }, + { sync: false, attachTo: 'body' }, ); let div = null; let lastCount = null; await asyncExpect(() => { // `title` is empty. - div = wrapper.findAll('#hello').at(0); - div.trigger('mouseenter'); + div = wrapper.findAll('#hello')[0].element; + div.dispatchEvent(new MouseEvent('mouseenter')); }); await asyncExpect(() => { expect(onVisibleChange).not.toHaveBeenCalled(); expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false); }); await asyncExpect(() => { - div.trigger('mouseleave'); + div.dispatchEvent(new MouseEvent('mouseleave')); }); await asyncExpect(() => { expect(onVisibleChange).not.toHaveBeenCalled(); @@ -57,17 +53,14 @@ describe('Tooltip', () => { wrapper.setProps({ title: 'Have a nice day!' }); }); await asyncExpect(() => { - wrapper - .findAll('#hello') - .at(0) - .trigger('mouseenter'); + wrapper.findAll('#hello')[0].element.dispatchEvent(new MouseEvent('mouseenter')); }); await asyncExpect(() => { expect(onVisibleChange).toHaveBeenLastCalledWith(true); expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(true); }, 0); await asyncExpect(() => { - wrapper.find('#hello').trigger('mouseleave'); + wrapper.findAll('#hello')[0].element.dispatchEvent(new MouseEvent('mouseleave')); }); await asyncExpect(() => { expect(onVisibleChange).toHaveBeenLastCalledWith(false); @@ -78,7 +71,7 @@ describe('Tooltip', () => { wrapper.setProps({ visible: false }); }); await asyncExpect(() => { - wrapper.find('#hello').trigger('mouseenter'); + wrapper.findAll('#hello')[0].element.dispatchEvent(new MouseEvent('mouseenter')); }); await asyncExpect(() => { expect(onVisibleChange).toHaveBeenLastCalledWith(true); @@ -87,118 +80,11 @@ describe('Tooltip', () => { }); await asyncExpect(() => { // always trigger onVisibleChange - wrapper.trigger('mouseleave'); + wrapper.findAll('#hello')[0].element.dispatchEvent(new MouseEvent('mouseleave')); }); await asyncExpect(() => { expect(onVisibleChange.mock.calls.length).toBe(lastCount); // no change with lastCount expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false); }); - await asyncExpect(() => {}); }); - - // it('should hide when mouse leave native disabled button', () => { - // const onVisibleChange = jest.fn() - // const wrapper = mount( - // - // - // - // ) - - // expect(wrapper.find('span')).toHaveLength(1) - // const button = wrapper.find('span').at(0) - // button.dispatchEvent(new MouseEvent('mouseenter')) - // expect(onVisibleChange).toBeCalledWith(true) - // expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(true) - - // button.trigger('mouseleave') - // expect(onVisibleChange).toBeCalledWith(false) - // expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false) - // }) - - // it('should hide when mouse leave antd disabled Button', () => { - // const onVisibleChange = jest.fn() - // const wrapper = mount( - // - // - // - // ) - - // expect(wrapper.render()).toMatchSnapshot() - // const button = wrapper.find('span').at(0) - // button.dispatchEvent(new MouseEvent('mouseenter')) - // expect(onVisibleChange).toBeCalledWith(true) - // expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(true) - - // button.trigger('mouseleave') - // expect(onVisibleChange).toBeCalledWith(false) - // expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false) - // }) - - // it('should render disabled Button style properly', () => { - // const wrapper1 = mount( - // - // - // - // ) - // const wrapper2 = mount( - // - // - // - // ) - // expect(wrapper1.find('span').at(0).element.style.display).toBe('inline-block') - // expect(wrapper2.find('span').at(0).element.style.display).toBe('block') - // }) - - // it('should works for arrowPointAtCenter', () => { - // const arrowWidth = 5 - // const horizontalArrowShift = 16 - // const triggerWidth = 200 - - // const suit = () => { - // const wrapper = mount( - // - // - // - // ) - // wrapper.find('button').at(0).trigger('click') - // const popupLeftDefault = parseInt(wrapper.instance().getPopupDomNode().style.left, 10) - - // const wrapper2 = mount( - // - // - // - // ) - // wrapper2.find('button').at(0).trigger('click') - // const popupLeftArrowPointAtCenter = parseInt(wrapper2.instance().getPopupDomNode().style.left, 10) - // expect(popupLeftArrowPointAtCenter - popupLeftDefault).toBe((triggerWidth / 2) - horizontalArrowShift - arrowWidth) - // } - // jest.dontMock('rc-trigger', suit) - // }) }); diff --git a/components/tooltip/abstractTooltipProps.js b/components/tooltip/abstractTooltipProps.js index 719585645..1205bd34e 100644 --- a/components/tooltip/abstractTooltipProps.js +++ b/components/tooltip/abstractTooltipProps.js @@ -19,7 +19,7 @@ export default () => ({ 'rightBottom', ]).def('top'), transitionName: PropTypes.string.def('zoom-big-fast'), - // onVisibleChange: PropTypes.func, + overlayStyle: PropTypes.object.def(() => ({})), overlayClassName: PropTypes.string, prefixCls: PropTypes.string, @@ -32,4 +32,6 @@ export default () => ({ align: PropTypes.object.def(() => ({})), builtinPlacements: PropTypes.object, children: PropTypes.any, + onVisibleChange: PropTypes.func, + 'onUpdate:visible': PropTypes.func, }); diff --git a/examples/App.vue b/examples/App.vue index 601357518..780a9abb5 100644 --- a/examples/App.vue +++ b/examples/App.vue @@ -4,7 +4,7 @@