Skip to content

Commit 229e3cb

Browse files
committed
Move lazy event setup from component manager to component class after rebase
1 parent dd429e3 commit 229e3cb

File tree

3 files changed

+23
-37
lines changed

3 files changed

+23
-37
lines changed

packages/@ember/-internals/glimmer/lib/component-managers/curly.ts

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
import { privatize as P } from '@ember/-internals/container';
22
import { getOwner } from '@ember/-internals/owner';
33
import { guidFor } from '@ember/-internals/utils';
4-
import {
5-
addChildView,
6-
EventDispatcher,
7-
setElementView,
8-
setViewElement,
9-
} from '@ember/-internals/views';
4+
import { addChildView, setElementView, setViewElement } from '@ember/-internals/views';
105
import { assert, debugFreeze } from '@ember/debug';
116
import { EMBER_COMPONENT_IS_VISIBLE } from '@ember/deprecated-features';
127
import { _instrumentStart } from '@ember/instrumentation';
@@ -119,21 +114,6 @@ const EMPTY_POSITIONAL_ARGS: Reference[] = [];
119114

120115
debugFreeze(EMPTY_POSITIONAL_ARGS);
121116

122-
function _setupLazyEventsForComponent(dispatcher: EventDispatcher | undefined, component: object) {
123-
// non-interactive rendering (e.g. SSR) has no event dispatcher
124-
if (dispatcher === undefined) {
125-
return;
126-
}
127-
128-
let lazyEvents = dispatcher.lazyEvents;
129-
130-
lazyEvents.forEach((mappedEventName: string, event: string) => {
131-
if (mappedEventName !== null && typeof component[mappedEventName] === 'function') {
132-
dispatcher.setupHandlerForBrowserEvent(event);
133-
}
134-
});
135-
}
136-
137117
export default class CurlyComponentManager
138118
extends BaseInternalComponentManager<ComponentStateBucket, DefinitionState>
139119
implements
@@ -338,8 +318,6 @@ export default class CurlyComponentManager
338318
}
339319
}
340320

341-
_setupLazyEventsForComponent(environment.extra.eventDispatcher, component);
342-
343321
// Track additional lifecycle metadata about this component in a state bucket.
344322
// Essentially we're saving off all the state we'll need in the future.
345323
let bucket = new ComponentStateBucket(

packages/@ember/-internals/glimmer/lib/component.ts

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ import {
1414
} from '@ember/-internals/views';
1515
import { assert, deprecate } from '@ember/debug';
1616
import { DEBUG } from '@glimmer/env';
17+
import { Environment } from '@glimmer/interfaces';
1718
import { isUpdatableRef, updateRef } from '@glimmer/reference';
1819
import { normalizeProperty } from '@glimmer/runtime';
1920
import { createTag, dirtyTag } from '@glimmer/validator';
2021
import { Namespace } from '@simple-dom/interface';
21-
import { EmberVMEnvironment } from './environment';
2222

2323
export const ARGS = enumerableSymbol('ARGS');
2424
export const HAS_BLOCK = enumerableSymbol('HAS_BLOCK');
@@ -726,10 +726,20 @@ const Component = CoreView.extend(
726726
this[DIRTY_TAG] = createTag();
727727
this[BOUNDS] = null;
728728

729-
if (DEBUG && this.renderer._destinedForDOM && this.tagName === '') {
729+
let eventDispatcher = this._dispatcher;
730+
if (eventDispatcher) {
731+
let lazyEvents = eventDispatcher.lazyEvents;
732+
733+
lazyEvents.forEach((mappedEventName: string, event: string) => {
734+
if (mappedEventName !== null && typeof this[mappedEventName] === 'function') {
735+
eventDispatcher.setupHandlerForBrowserEvent(event);
736+
}
737+
});
738+
}
739+
740+
if (DEBUG && eventDispatcher && this.tagName === '') {
730741
let eventNames = [];
731-
let eventDispatcher = getOwner(this).lookup<EventDispatcher>('event_dispatcher:main');
732-
let events = (eventDispatcher && eventDispatcher.finalEventNameMapping) || {};
742+
let events = eventDispatcher.finalEventNameMapping;
733743

734744
// tslint:disable-next-line:forin
735745
for (let key in events) {
@@ -788,24 +798,22 @@ const Component = CoreView.extend(
788798
);
789799
},
790800

791-
get setupEventHandler(): (eventName: string) => void | null {
792-
if (this._setupEventHandler === undefined) {
801+
get _dispatcher(): EventDispatcher | null {
802+
if (this.__dispatcher === undefined) {
793803
let owner = getOwner(this);
794-
if (owner.lookup<EmberVMEnvironment>('-environment:main')!.isInteractive) {
795-
let dispatcher = owner.lookup<EventDispatcher>('event_dispatcher:main');
796-
this._setupEventHandler = (eventName: string) =>
797-
dispatcher!.setupHandlerForEmberEvent(eventName);
804+
if (owner.lookup<Environment>('-environment:main')!.isInteractive) {
805+
this.__dispatcher = owner.lookup<EventDispatcher>('event_dispatcher:main');
798806
} else {
799807
// In FastBoot we have no EventDispatcher. Set to null to not try again to look it up.
800-
this._setupEventHandler = null;
808+
this.__dispatcher = null;
801809
}
802810
}
803811

804-
return this._setupEventHandler;
812+
return this.__dispatcher;
805813
},
806814

807815
on(eventName: string) {
808-
this.setupEventHandler?.(eventName);
816+
this._dispatcher?.setupHandlerForEmberEvent(eventName);
809817
return this._super(...arguments);
810818
},
811819

packages/@ember/-internals/glimmer/lib/environment.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ENV } from '@ember/-internals/environment';
22
import { _getProp, get, set } from '@ember/-internals/metal';
33
import { Owner } from '@ember/-internals/owner';
44
import { getDebugName } from '@ember/-internals/utils';
5-
import { constructStyleDeprecationMessage, EventDispatcher } from '@ember/-internals/views';
5+
import { constructStyleDeprecationMessage } from '@ember/-internals/views';
66
import { assert, deprecate, warn } from '@ember/debug';
77
import { backburner, schedule } from '@ember/runloop';
88
import { DEBUG } from '@glimmer/env';

0 commit comments

Comments
 (0)