Skip to content

Commit b79b6c1

Browse files
tbondwilkinsondylhunn
authored andcommitted
refactor(core): Add a bit to EventInfo to mark resolution. (#55864)
This will prevent running `ActionResolver` logic multiple times while migrating to use `Dispatcher` to resolve actions rather than `EventContract`. PR Close #55864
1 parent 999bfac commit b79b6c1

File tree

4 files changed

+30
-0
lines changed

4 files changed

+30
-0
lines changed

goldens/public-api/core/primitives/event-dispatch/index.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ export class EventInfoWrapper {
7878
// (undocumented)
7979
getIsReplay(): boolean | undefined;
8080
// (undocumented)
81+
getResolved(): boolean | undefined;
82+
// (undocumented)
8183
getTargetElement(): Element;
8284
// (undocumented)
8385
getTimestamp(): number;
@@ -92,6 +94,8 @@ export class EventInfoWrapper {
9294
// (undocumented)
9395
setIsReplay(replay: boolean): void;
9496
// (undocumented)
97+
setResolved(resolved: boolean): void;
98+
// (undocumented)
9599
setTargetElement(targetElement: Element): void;
96100
// (undocumented)
97101
setTimestamp(timestamp: number): void;

packages/core/primitives/event-dispatch/src/action_resolver.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ export class ActionResolver {
5353
}
5454

5555
resolve(eventInfo: eventInfoLib.EventInfo) {
56+
if (eventInfoLib.getResolved(eventInfo)) {
57+
return;
58+
}
5659
this.populateAction(eventInfo);
60+
eventInfoLib.setResolved(eventInfo, true);
5761
}
5862

5963
/**

packages/core/primitives/event-dispatch/src/event_info.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ export declare interface EventInfo {
5454
* as a `click`. Only used when a11y click events is on.
5555
*/
5656
eiack?: boolean;
57+
/** Whether action resolution has already run on this `EventInfo`. */
58+
eir?: boolean;
5759
}
5860

5961
/** Added for readability when accessing stable property names. */
@@ -151,6 +153,16 @@ export function setA11yClickKey(eventInfo: EventInfo, a11yClickKey: boolean) {
151153
eventInfo.eiack = a11yClickKey;
152154
}
153155

156+
/** Added for readability when accessing stable property names. */
157+
export function getResolved(eventInfo: EventInfo) {
158+
return eventInfo.eir;
159+
}
160+
161+
/** Added for readability when accessing stable property names. */
162+
export function setResolved(eventInfo: EventInfo, resolved: boolean) {
163+
eventInfo.eir = resolved;
164+
}
165+
154166
/** Clones an `EventInfo` */
155167
export function cloneEventInfo(eventInfo: EventInfo): EventInfo {
156168
return {
@@ -162,6 +174,7 @@ export function cloneEventInfo(eventInfo: EventInfo): EventInfo {
162174
timeStamp: eventInfo.timeStamp,
163175
eirp: eventInfo.eirp,
164176
eiack: eventInfo.eiack,
177+
eir: eventInfo.eir,
165178
};
166179
}
167180

@@ -303,6 +316,14 @@ export class EventInfoWrapper {
303316
setIsReplay(this.eventInfo, replay);
304317
}
305318

319+
getResolved() {
320+
return getResolved(this.eventInfo);
321+
}
322+
323+
setResolved(resolved: boolean) {
324+
setResolved(this.eventInfo, resolved);
325+
}
326+
306327
clone() {
307328
return new EventInfoWrapper(cloneEventInfo(this.eventInfo));
308329
}

packages/core/primitives/event-dispatch/test/eventcontract_test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,7 @@ describe('EventContract', () => {
450450
expect(eventInfoWrapper.getTargetElement()).toBe(targetElement);
451451
expect(eventInfoWrapper.getAction()?.name).toBe('handleClick');
452452
expect(eventInfoWrapper.getAction()?.element).toBe(actionElement);
453+
expect(eventInfoWrapper.getResolved()).toBe(true);
453454
});
454455

455456
it('dispatches event when targetElement is actionElement', () => {

0 commit comments

Comments
 (0)