Skip to content

Commit

Permalink
Merge pull request #285 from eugenioenko/feat/dropdown-trigger-option…
Browse files Browse the repository at this point in the history
…al-prevent-default

fix: stop event propagation on popover trigger
  • Loading branch information
josemarluedke committed Apr 4, 2024
2 parents 18674c6 + 39d7864 commit d5c8d64
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
7 changes: 6 additions & 1 deletion packages/overlays/src/components/popover.gts
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,12 @@ class Popover extends Component<PopoverSignature> {
return this._isOpen;
}

toggle = () => {
toggle = (event?: Event) => {
// stops event bubbling to prevent parent click event
if (typeof event?.stopPropagation === 'function') {
event.stopPropagation();
}

if (this.isOpen) {
this.close();
} else {
Expand Down
30 changes: 30 additions & 0 deletions test-app/tests/integration/components/overlays/popover-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -182,5 +182,35 @@ module(
this.set('isOpen', false);
assert.dom('[data-test-id="content"]').doesNotExist();
});

test('it prevents trigger event bubbling', async function (assert) {
assert.expect(1);

this.set('parentClick', () => {
assert.ok(false, 'popover trigger should not bubble click event');
});

await render(
hbs`
<div id="my-destination"></div>
<Popover as |p|>
<button {{on "click" this.parentClick}}>
<button {{p.trigger}} {{p.anchor}} data-test-id="trigger">
Trigger
</button>
< </button>
<p.Content
@destinationElementId="my-destination"
data-test-id="content"
>
Content here
</p.Content>
</Popover>`
);

await click('[data-test-id="trigger"]');

assert.dom('[data-test-id="content"]').exists();
});
}
);

0 comments on commit d5c8d64

Please sign in to comment.