From e4c1bced0877a6c6d4b21cd3f0b0e243c9c2a977 Mon Sep 17 00:00:00 2001 From: Bree Hall Date: Wed, 25 Jan 2023 15:00:02 -0500 Subject: [PATCH 1/3] [EuiCard] Resolved a bug that causes the onClick method to be triggered twice when clicking on a card title by creating a condition inside of outerOnClick to ensure the link does not contain a duplicate click event. --- src/components/card/card.test.tsx | 13 +++++++++++++ src/components/card/card.tsx | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/components/card/card.test.tsx b/src/components/card/card.test.tsx index 17a46ab3d13..1841283d15c 100644 --- a/src/components/card/card.test.tsx +++ b/src/components/card/card.test.tsx @@ -138,6 +138,19 @@ describe('EuiCard', () => { component.find('button').simulate('click'); expect(handler.mock.calls.length).toEqual(1); }); + + it('should only call onClick once when title is a React node', () => { + const handler = jest.fn(); + const component = mount( + Hoi} + description="There" + onClick={handler} + /> + ); + component.find('button').simulate('click'); + expect(handler.mock.calls.length).toEqual(1); + }); }); test('titleElement', () => { diff --git a/src/components/card/card.tsx b/src/components/card/card.tsx index b28ec411f3f..0be5be7fe7a 100644 --- a/src/components/card/card.tsx +++ b/src/components/card/card.tsx @@ -193,7 +193,7 @@ export const EuiCard: FunctionComponent = ({ */ let link: HTMLAnchorElement | HTMLButtonElement | null = null; const outerOnClick = (e: React.MouseEvent) => { - if (link && link !== e.target) { + if (link && link !== e.target && !link.contains(e.target as Node)) { link.click(); } }; From 84d58174b784480f75f92d8bdb76763dbbb50147 Mon Sep 17 00:00:00 2001 From: Bree Hall Date: Wed, 25 Jan 2023 15:25:09 -0500 Subject: [PATCH 2/3] Changelog --- upcoming_changelogs/6551.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 upcoming_changelogs/6551.md diff --git a/upcoming_changelogs/6551.md b/upcoming_changelogs/6551.md new file mode 100644 index 00000000000..965e9b5ef64 --- /dev/null +++ b/upcoming_changelogs/6551.md @@ -0,0 +1,3 @@ +**Bug fixes** + +- Fixed `EuiCard` to ensure `onClick` method only runs once when `title` contains a React node From 4e2cb24e5fb4214e8e6517732a8e7293ce38e4b6 Mon Sep 17 00:00:00 2001 From: Bree Hall <40739624+breehall@users.noreply.github.com> Date: Thu, 26 Jan 2023 09:47:39 -0500 Subject: [PATCH 3/3] Update src/components/card/card.test.tsx Co-authored-by: Cee Chen <549407+cee-chen@users.noreply.github.com> --- src/components/card/card.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/card/card.test.tsx b/src/components/card/card.test.tsx index 1841283d15c..6478755394f 100644 --- a/src/components/card/card.test.tsx +++ b/src/components/card/card.test.tsx @@ -143,12 +143,12 @@ describe('EuiCard', () => { const handler = jest.fn(); const component = mount( Hoi} + title={Hoi} description="There" onClick={handler} /> ); - component.find('button').simulate('click'); + component.find('[data-test-subj="click"]').simulate('click'); expect(handler.mock.calls.length).toEqual(1); }); });