[IMP] web: popover service prevent click away to cause a click event
Currently the popover service is closed when you click away from the popover. However, it’s not expected that the click event that closes the popover, triggers another click event. This was causing a frustrating issue in calendar where you would close the popover by clicking on the calendar, and it would open the “new event” form view. The solution is to prevent default when closing the popover. task-3455051 task-3389317 Part-of: odoo/odoo#138670
This commit is contained in:
@@ -42,6 +42,7 @@ export class PopoverController extends Component {
|
||||
!this.popoverRef.el.contains(target)
|
||||
) {
|
||||
this.props.close();
|
||||
ev.preventDefault();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -85,6 +85,30 @@ QUnit.test("close on click away", async (assert) => {
|
||||
assert.containsNone(fixture, ".o_popover #comp");
|
||||
});
|
||||
|
||||
QUnit.test("close on click away should be default prevented", async (assert) => {
|
||||
assert.expect(6);
|
||||
class Comp extends Component {}
|
||||
Comp.template = xml`<div id="comp">in popover</div>`;
|
||||
|
||||
popovers.add(popoverTarget, Comp, {});
|
||||
await nextTick();
|
||||
|
||||
assert.containsOnce(fixture, ".o_popover");
|
||||
assert.containsOnce(fixture, ".o_popover #comp");
|
||||
const closeButton = fixture.querySelector("#close");
|
||||
function clickListener(ev) {
|
||||
assert.step(`click-event-${ev.defaultPrevented ? "default-prevented" : ""}`);
|
||||
}
|
||||
closeButton.addEventListener("pointerdown", clickListener);
|
||||
|
||||
await click(fixture, "#close");
|
||||
|
||||
assert.containsNone(fixture, ".o_popover");
|
||||
assert.containsNone(fixture, ".o_popover #comp");
|
||||
assert.verifySteps(["click-event-default-prevented"]);
|
||||
closeButton.removeEventListener("pointerdown", clickListener);
|
||||
});
|
||||
|
||||
QUnit.test("close on 'Escape' keydown", async (assert) => {
|
||||
class Comp extends Component {}
|
||||
Comp.template = xml`<div id="comp">in popover</div>`;
|
||||
|
||||
Reference in New Issue
Block a user