Skip to content

Commit

Permalink
refactor(core): Add a bit to EventInfo to mark resolution. (#55864)
Browse files Browse the repository at this point in the history
This will prevent running `ActionResolver` logic multiple times while
migrating to use `Dispatcher` to resolve actions rather than
`EventContract`.

PR Close #55864
  • Loading branch information
tbondwilkinson authored and dylhunn committed May 21, 2024
1 parent 0b460a7 commit bb13174
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 0 deletions.
4 changes: 4 additions & 0 deletions goldens/public-api/core/primitives/event-dispatch/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ export class EventInfoWrapper {
// (undocumented)
getIsReplay(): boolean | undefined;
// (undocumented)
getResolved(): boolean | undefined;
// (undocumented)
getTargetElement(): Element;
// (undocumented)
getTimestamp(): number;
Expand All @@ -92,6 +94,8 @@ export class EventInfoWrapper {
// (undocumented)
setIsReplay(replay: boolean): void;
// (undocumented)
setResolved(resolved: boolean): void;
// (undocumented)
setTargetElement(targetElement: Element): void;
// (undocumented)
setTimestamp(timestamp: number): void;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,11 @@ export class ActionResolver {
}

resolve(eventInfo: eventInfoLib.EventInfo) {
if (eventInfoLib.getResolved(eventInfo)) {
return;
}
this.populateAction(eventInfo);
eventInfoLib.setResolved(eventInfo, true);
}

/**
Expand Down
21 changes: 21 additions & 0 deletions packages/core/primitives/event-dispatch/src/event_info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ export declare interface EventInfo {
* as a `click`. Only used when a11y click events is on.
*/
eiack?: boolean;
/** Whether action resolution has already run on this `EventInfo`. */
eir?: boolean;
}

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

/** Added for readability when accessing stable property names. */
export function getResolved(eventInfo: EventInfo) {
return eventInfo.eir;
}

/** Added for readability when accessing stable property names. */
export function setResolved(eventInfo: EventInfo, resolved: boolean) {
eventInfo.eir = resolved;
}

/** Clones an `EventInfo` */
export function cloneEventInfo(eventInfo: EventInfo): EventInfo {
return {
Expand All @@ -162,6 +174,7 @@ export function cloneEventInfo(eventInfo: EventInfo): EventInfo {
timeStamp: eventInfo.timeStamp,
eirp: eventInfo.eirp,
eiack: eventInfo.eiack,
eir: eventInfo.eir,
};
}

Expand Down Expand Up @@ -303,6 +316,14 @@ export class EventInfoWrapper {
setIsReplay(this.eventInfo, replay);
}

getResolved() {
return getResolved(this.eventInfo);
}

setResolved(resolved: boolean) {
setResolved(this.eventInfo, resolved);
}

clone() {
return new EventInfoWrapper(cloneEventInfo(this.eventInfo));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,7 @@ describe('EventContract', () => {
expect(eventInfoWrapper.getTargetElement()).toBe(targetElement);
expect(eventInfoWrapper.getAction()?.name).toBe('handleClick');
expect(eventInfoWrapper.getAction()?.element).toBe(actionElement);
expect(eventInfoWrapper.getResolved()).toBe(true);
});

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

0 comments on commit bb13174

Please sign in to comment.