Skip to content

Commit 814bdcc

Browse files
feat: change events to align with native browser behavior (#476)
* remove bubbles and composed from UUIEvent * list events * UUIButtonInlineCreateEvent * all change events * inner-slot-change * UUIFileDropzoneEvent * Icon + MenuItem * UUIToastNotificationEvent * UUIFormControlEvent not composed * added missing imports * change into a MarkDown table * Cancelable Selectable Event * update dropzone story to accept props and log actions --------- Co-authored-by: Jacob Overgaard <[email protected]>
1 parent b49a238 commit 814bdcc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+433
-114
lines changed

docs/EVENTS.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Events
2+
3+
**Change in version 1.3.0**
4+
In version 1.3.0 the events Bubbles and Composed properties has changed, here is a list of events and the change of them:
5+
6+
| Name | Bubbles | Composed | Description |
7+
| ------------------------- | ------- | -------- | ----------------------------------------------------------------------------------- |
8+
| UUIEvent | No | No | No longer bubbles or composed by default. |
9+
| UUIFormControlEvent | Yes | No | No longer composed. |
10+
| UUISelectableEvent | Yes | No | No longer composed. |
11+
| UUIBooleanInputEvent | Yes | No | No longer composed. |
12+
| UUIButtonInlineEvent | Yes | Yes | Not affected. |
13+
| UUICardEvent | No | No | No longer bubbles or composed. |
14+
| UUIColorAreaEvent(s) | Yes | No | No longer composed. |
15+
| UUIColorPickerEvent(s) | Yes | No | No longer composed. |
16+
| UUIColorSliderEvent(s) | Yes | No | No longer composed. |
17+
| UUIColorSwatchesEvent(s) | Yes | No | No longer composed. |
18+
| UUIComboboxEvent | Yes | No | No longer composed. |
19+
| UUIComboboxListEvent | Yes | No | The event name 'slot-change' is changed to 'inner-slot-change'. No longer composed. |
20+
| UUIFileDropzoneEvent(s) | Yes | No | The event name 'file-change' is changed to 'change'. No longer composed. |
21+
| UUIIconRequestEvent | Yes | Yes | Not affected. |
22+
| UUIInputEvent | Yes | No | No longer composed. |
23+
| UUIMenuItemEvent | No | No | No longer bubbles or composed. |
24+
| UUIPaginationEvent | Yes | No | No longer composed. |
25+
| UUIPopoverEvent | No | No | No longer bubbles or composed. |
26+
| UUIRadioEvent | Yes | No | No longer composed. |
27+
| UUIRadioGroupEvent | Yes | No | No longer composed. |
28+
| UUIRangeSliderEvent | Yes | No | No longer composed. |
29+
| UUIRefEvent | No | No | No longer bubbles or composed. |
30+
| UUISelectEvent | Yes | No | No longer composed. |
31+
| UUISliderEvent(s) | Yes | No | No longer composed. |
32+
| UUITabEvent | No | No | No one is dispatching this class. |
33+
| UUITabGroupEvent | No | No | No one is dispatching this class. |
34+
| UUITextAreaEvent | Yes | No | No longer composed. |
35+
| UUIToastNotificationEvent | No | No | No longer bubbles or composed. |
36+
37+
Also notice events files previously named with a 's' in the end is no longer named this way, they are without the 's' now. (notice only affects direct paths)

packages/uui-base/lib/events/UUIEvent.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
* Umbraco UI implementation of native DOM CustomEvent that propagates out of Shadow DOM context.
33
*/
44

5-
const DefaultInit = {
6-
composed: true,
7-
bubbles: true,
8-
};
95
export class UUIEvent<
106
DetailType extends Record<string, any> = Record<string, any>,
117
EventTargetType extends EventTarget | null = EventTarget | null
@@ -14,10 +10,7 @@ export class UUIEvent<
1410
readonly target!: EventTargetType;
1511

1612
constructor(evName: string, eventInit: any | null = {}) {
17-
super(evName, {
18-
...DefaultInit,
19-
...eventInit,
20-
});
13+
super(evName, { ...eventInit });
2114
this.detail = eventInit.detail || {};
2215
}
2316
}

packages/uui-base/lib/events/UUISelectableEvent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export class UUISelectableEvent extends UUIEvent<{}, SelectableMixinInterface> {
77

88
constructor(evName: string, eventInit: any | null = {}) {
99
super(evName, {
10-
...{ bubbles: true },
10+
...{ bubbles: true, cancelable: true },
1111
...eventInit,
1212
});
1313
}

packages/uui-base/lib/mixins/SelectableMixin.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,20 @@ export const SelectableMixin = <T extends Constructor<LitElement>>(
7373

7474
private _select() {
7575
if (!this.selectable) return;
76+
const selectEvent = new UUISelectableEvent(UUISelectableEvent.SELECTED);
77+
this.dispatchEvent(selectEvent);
78+
if (selectEvent.defaultPrevented) return;
79+
7680
this.selected = true;
77-
this.dispatchEvent(new UUISelectableEvent(UUISelectableEvent.SELECTED));
7881
}
7982

8083
private _unselect() {
8184
if (!this.unselectable) return;
85+
const selectEvent = new UUISelectableEvent(UUISelectableEvent.UNSELECTED);
86+
this.dispatchEvent(selectEvent);
87+
if (selectEvent.defaultPrevented) return;
88+
8289
this.selected = false;
83-
this.dispatchEvent(new UUISelectableEvent(UUISelectableEvent.UNSELECTED));
8490
}
8591

8692
private _handleClick(e: Event) {

packages/uui-boolean-input/lib/UUIBooleanInputEvent.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,11 @@ import { UUIBooleanInputElement } from './uui-boolean-input.element';
33

44
export class UUIBooleanInputEvent extends UUIEvent<{}, UUIBooleanInputElement> {
55
public static readonly CHANGE: string = 'change';
6+
7+
constructor(evName: string, eventInit: any | null = {}) {
8+
super(evName, {
9+
...{ bubbles: true },
10+
...eventInit,
11+
});
12+
}
613
}

packages/uui-boolean-input/lib/uui-boolean-input.test.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable lit/no-invalid-html */
22
/* eslint-disable lit/binding-positions */
3-
import '.';
3+
import { UUIBooleanInputEvent, UUIBooleanInputElement } from '.';
44

55
import {
66
defineCE,
@@ -13,8 +13,6 @@ import {
1313
} from '@open-wc/testing';
1414
import { html as litHTMLLiteral } from 'lit';
1515

16-
import { UUIBooleanInputElement } from './uui-boolean-input.element';
17-
1816
const tagName = defineCE(
1917
class BooleanInputTestElement extends UUIBooleanInputElement {
2018
renderCheckbox() {
@@ -76,12 +74,16 @@ describe('UUIBooleanInputElement', () => {
7674
await elementUpdated(element);
7775
expect(input?.checked).to.equal(true);
7876
});
79-
80-
it('emits an event when the input changes', async () => {
81-
let clicked = false;
82-
element.addEventListener('change', () => (clicked = true));
77+
it('emits an change event when the input changes', async () => {
78+
const listener = oneEvent(element, UUIBooleanInputEvent.CHANGE);
8379
label.click();
84-
expect(clicked).to.equal(true);
80+
81+
const event = await listener;
82+
expect(event).to.exist;
83+
expect(event.type).to.equal(UUIBooleanInputEvent.CHANGE);
84+
expect(event.bubbles).to.be.true;
85+
expect(event.composed).to.be.false;
86+
expect(event!.target).to.equal(element);
8587
});
8688
});
8789

packages/uui-button-inline-create/lib/UUIButtonInlineCreateEvent.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,11 @@ export class UUIButtonInlineCreateEvent extends UUIEvent<
66
UUIButtonInlineCreateElement
77
> {
88
public static readonly CLICK: string = 'click';
9+
10+
constructor(evName: string, eventInit: any | null = {}) {
11+
super(evName, {
12+
...{ bubbles: true, composed: true },
13+
...eventInit,
14+
});
15+
}
916
}

packages/uui-color-area/lib/UUIColorAreaEvents.ts renamed to packages/uui-color-area/lib/UUIColorAreaEvent.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,11 @@ import { UUIColorAreaElement } from './uui-color-area.element';
33

44
export class UUIColorAreaEvent extends UUIEvent<{}, UUIColorAreaElement> {
55
public static readonly CHANGE = 'change';
6+
7+
constructor(evName: string, eventInit: any | null = {}) {
8+
super(evName, {
9+
...{ bubbles: true },
10+
...eventInit,
11+
});
12+
}
613
}

packages/uui-color-area/lib/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
export * from './uui-color-area.element';
2-
export * from './UUIColorAreaEvents';
2+
export * from './UUIColorAreaEvent';

packages/uui-color-area/lib/uui-color-area.element.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { drag, clamp } from '@umbraco-ui/uui-base/lib/utils';
99

1010
import { styleMap } from 'lit/directives/style-map.js';
1111

12-
import { UUIColorAreaEvent } from './UUIColorAreaEvents';
12+
import { UUIColorAreaEvent } from './UUIColorAreaEvent';
1313

1414
/**
1515
* @element uui-color-area

0 commit comments

Comments
 (0)