From af280bfaa52dcd79aeb5b930547f3c3ede2dca40 Mon Sep 17 00:00:00 2001 From: Kermit Date: Wed, 20 May 2020 23:29:29 +0800 Subject: [PATCH] chore: upgrade trigger to 4.2.1 --- README.md | 4 +-- examples/simple.js | 50 ++++++++++++++++++++------------- package.json | 2 +- src/Tooltip.tsx | 19 +++++++++++-- tests/index.test.js | 68 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 118 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 2fa423b..1a44a95 100644 --- a/README.md +++ b/README.md @@ -182,9 +182,9 @@ Online examples: destroyTooltipOnHide - boolean + boolean | { keepParent: boolean } false - whether destroy tooltip when tooltip is hidden + whether destroy tooltip when tooltip is hidden.In general, destroyTooltipOnHide will only remove itself instead of parent container of it.Parent container will be removed include tooltip when keepParent is true id diff --git a/examples/simple.js b/examples/simple.js index 425b20c..5aad9b4 100644 --- a/examples/simple.js +++ b/examples/simple.js @@ -6,6 +6,20 @@ import { placements } from '../src/placements'; class Test extends Component { state = { destroyTooltipOnHide: false, + destroyTooltipOptions: [ + { + name: "don't destroy", + value: 0, + }, + { + name: 'destroy parent', + value: 1, + }, + { + name: 'keep parent', + value: 2, + }, + ], placement: 'right', trigger: { hover: 1, @@ -60,10 +74,11 @@ class Test extends Component { console.log('tooltip', visible); // eslint-disable-line no-console }; - onDestroyCheck = () => { - this.setState(prevState => ({ - destroyTooltipOnHide: !prevState.destroyTooltipOnHide, - })); + onDestroyChange = e => { + const { value } = e.target; + this.setState({ + destroyTooltipOnHide: [false, { keepParent: false }, { keepParent: true }][value], + }); }; preventDefault = e => { @@ -78,10 +93,7 @@ class Test extends Component {
          trigger:
diff --git a/package.json b/package.json index 3436944..108ab4b 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "test": "father test" }, "dependencies": { - "rc-trigger": "^4.0.0" + "rc-trigger": "^4.2.1" }, "devDependencies": { "@types/jest": "^25.1.0", diff --git a/src/Tooltip.tsx b/src/Tooltip.tsx index 603e21e..ef23c98 100644 --- a/src/Tooltip.tsx +++ b/src/Tooltip.tsx @@ -20,7 +20,11 @@ export interface TooltipProps extends Pick HTMLElement; - destroyTooltipOnHide?: boolean; + destroyTooltipOnHide?: + | boolean + | { + keepParent?: boolean; + }; align?: AlignType; arrowContent?: React.ReactNode; id?: string; @@ -67,6 +71,16 @@ const Tooltip = (props: TooltipProps, ref) => { ]; }; + let destroyTooltip = false; + let autoDestroy = false; + if (typeof destroyTooltipOnHide === 'boolean') { + destroyTooltip = destroyTooltipOnHide; + } else if (destroyTooltipOnHide && typeof destroyTooltipOnHide === 'object') { + const { keepParent } = destroyTooltipOnHide; + destroyTooltip = keepParent === true; + autoDestroy = keepParent === false; + } + return ( { popupTransitionName={transitionName} popupAnimation={animation} defaultPopupVisible={defaultVisible} - destroyPopupOnHide={destroyTooltipOnHide} + destroyPopupOnHide={destroyTooltip} + autoDestroy={autoDestroy} mouseLeaveDelay={mouseLeaveDelay} popupStyle={overlayStyle} mouseEnterDelay={mouseEnterDelay} diff --git a/tests/index.test.js b/tests/index.test.js index 81166a7..3f71908 100644 --- a/tests/index.test.js +++ b/tests/index.test.js @@ -64,4 +64,72 @@ describe('rc-tooltip', () => { expect(domRef.current).toBeTruthy(); }); }); + describe('destroyTooltipOnHide', () => { + const destroyVerifyContent = (wrapper, content) => { + wrapper.find('.target').simulate('click'); + expect(wrapper.find('.x-content').text()).toBe(content); + expect( + wrapper + .find('Trigger') + .instance() + .getPopupDomNode(), + ).toBeTruthy(); + wrapper.find('.target').simulate('click'); + }; + it('default value', () => { + const wrapper = mount( + Tooltip content} + > +
Click this
+
, + ); + wrapper.find('.target').simulate('click'); + verifyContent(wrapper, 'Tooltip content'); + }); + it('should only remove tooltip when value is true', () => { + const wrapper = mount( + Tooltip content} + > +
Click this
+
, + ); + destroyVerifyContent(wrapper, 'Tooltip content'); + expect(wrapper.html()).toBe('
Click this
'); + }); + it('should only remove tooltip when keepParent is true', () => { + const wrapper = mount( + Tooltip content} + > +
Click this
+
, + ); + destroyVerifyContent(wrapper, 'Tooltip content'); + expect(wrapper.html()).toBe('
Click this
'); + }); + it('should remove tooltip and container when keepParent is false', () => { + const wrapper = mount( + Tooltip content} + > +
Click this
+
, + ); + destroyVerifyContent(wrapper, 'Tooltip content'); + expect(wrapper.html()).toBe('
Click this
'); + }); + }); });