Skip to content

Commit 96c1137

Browse files
committed
Deprecate Evented Mixin and 'on'
1 parent 2fe9ba3 commit 96c1137

File tree

27 files changed

+667
-289
lines changed

27 files changed

+667
-289
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@
213213
"@ember/-internals/runtime/lib/mixins/action_handler.js": "ember-source/@ember/-internals/runtime/lib/mixins/action_handler.js",
214214
"@ember/-internals/runtime/lib/mixins/comparable.js": "ember-source/@ember/-internals/runtime/lib/mixins/comparable.js",
215215
"@ember/-internals/runtime/lib/mixins/container_proxy.js": "ember-source/@ember/-internals/runtime/lib/mixins/container_proxy.js",
216+
"@ember/-internals/runtime/lib/mixins/evented.js": "ember-source/@ember/-internals/runtime/lib/mixins/evented.js",
216217
"@ember/-internals/runtime/lib/mixins/registry_proxy.js": "ember-source/@ember/-internals/runtime/lib/mixins/registry_proxy.js",
217218
"@ember/-internals/runtime/lib/mixins/target_action_support.js": "ember-source/@ember/-internals/runtime/lib/mixins/target_action_support.js",
218219
"@ember/-internals/string/index.js": "ember-source/@ember/-internals/string/index.js",

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

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ import {
55
setOwner,
66
} from '@ember/-internals/owner';
77
import { enumerableSymbol, guidFor } from '@ember/-internals/utils';
8-
import { addChildView, setElementView, setViewElement } from '@ember/-internals/views';
8+
import {
9+
addChildView,
10+
sendCoreViewEvent,
11+
setElementView,
12+
setViewElement,
13+
} from '@ember/-internals/views';
914
import type { Nullable } from '@ember/-internals/utility-types';
1015
import { assert, debugFreeze } from '@ember/debug';
1116
import { _instrumentStart } from '@ember/instrumentation';
@@ -305,20 +310,20 @@ export default class CurlyComponentManager
305310
addChildView(parentView, component);
306311
}
307312

308-
component.trigger('didReceiveAttrs');
313+
sendCoreViewEvent(component, 'didReceiveAttrs');
309314

310315
let hasWrappedElement = component.tagName !== '';
311316

312317
// We usually do this in the `didCreateElement`, but that hook doesn't fire for tagless components
313318
if (!hasWrappedElement) {
314319
if (isInteractive) {
315-
component.trigger('willRender');
320+
sendCoreViewEvent(component, 'willRender');
316321
}
317322

318323
component._transitionTo('hasElement');
319324

320325
if (isInteractive) {
321-
component.trigger('willInsertElement');
326+
sendCoreViewEvent(component, 'willInsertElement');
322327
}
323328
}
324329

@@ -342,7 +347,7 @@ export default class CurlyComponentManager
342347
}
343348

344349
if (isInteractive && hasWrappedElement) {
345-
component.trigger('willRender');
350+
sendCoreViewEvent(component, 'willRender');
346351
}
347352

348353
endUntrackFrame();
@@ -407,7 +412,7 @@ export default class CurlyComponentManager
407412

408413
if (isInteractive) {
409414
beginUntrackFrame();
410-
component.trigger('willInsertElement');
415+
sendCoreViewEvent(component, 'willInsertElement');
411416
endUntrackFrame();
412417
}
413418
}
@@ -420,8 +425,8 @@ export default class CurlyComponentManager
420425
didCreate({ component, isInteractive }: ComponentStateBucket): void {
421426
if (isInteractive) {
422427
component._transitionTo('inDOM');
423-
component.trigger('didInsertElement');
424-
component.trigger('didRender');
428+
sendCoreViewEvent(component, 'didInsertElement');
429+
sendCoreViewEvent(component, 'didRender');
425430
}
426431
}
427432

@@ -443,13 +448,13 @@ export default class CurlyComponentManager
443448
component.setProperties(props);
444449
component[IS_DISPATCHING_ATTRS] = false;
445450

446-
component.trigger('didUpdateAttrs');
447-
component.trigger('didReceiveAttrs');
451+
sendCoreViewEvent(component, 'didUpdateAttrs');
452+
sendCoreViewEvent(component, 'didReceiveAttrs');
448453
}
449454

450455
if (isInteractive) {
451-
component.trigger('willUpdate');
452-
component.trigger('willRender');
456+
sendCoreViewEvent(component, 'willUpdate');
457+
sendCoreViewEvent(component, 'willRender');
453458
}
454459

455460
endUntrackFrame();
@@ -464,8 +469,8 @@ export default class CurlyComponentManager
464469

465470
didUpdate({ component, isInteractive }: ComponentStateBucket): void {
466471
if (isInteractive) {
467-
component.trigger('didUpdate');
468-
component.trigger('didRender');
472+
sendCoreViewEvent(component, 'didUpdate');
473+
sendCoreViewEvent(component, 'didRender');
469474
}
470475
}
471476

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import CurlyComponentManager, {
2020
initialRenderInstrumentDetails,
2121
processComponentInitializationAssertions,
2222
} from './curly';
23+
import { sendEvent } from '@ember/-internals/metal';
2324

2425
class RootComponentManager extends CurlyComponentManager {
2526
component: Component;
@@ -47,13 +48,13 @@ class RootComponentManager extends CurlyComponentManager {
4748
// We usually do this in the `didCreateElement`, but that hook doesn't fire for tagless components
4849
if (!hasWrappedElement) {
4950
if (isInteractive) {
50-
component.trigger('willRender');
51+
sendEvent(component, 'willRender');
5152
}
5253

5354
component._transitionTo('hasElement');
5455

5556
if (isInteractive) {
56-
component.trigger('willInsertElement');
57+
sendEvent(component, 'willInsertElement');
5758
}
5859
}
5960

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { ENV } from '@ember/-internals/environment';
33
import type { InternalOwner } from '@ember/-internals/owner';
44
import { getOwner } from '@ember/-internals/owner';
55
import { guidFor } from '@ember/-internals/utils';
6-
import { getViewElement, getViewId } from '@ember/-internals/views';
6+
import { getViewElement, getViewId, sendCoreViewEvent } from '@ember/-internals/views';
77
import { assert } from '@ember/debug';
88
import { _backburner, _getCurrentRunLoop } from '@ember/runloop';
99
import { destroy } from '@glimmer/destroyable';
@@ -446,7 +446,7 @@ export class Renderer {
446446
this.cleanupRootFor(view);
447447

448448
if (this._isInteractive) {
449-
view.trigger('didDestroyElement');
449+
sendCoreViewEvent(view, 'didDestroyElement');
450450
}
451451
}
452452

packages/@ember/-internals/glimmer/lib/utils/curly-component-state-bucket.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { clearElementView, clearViewElement, getViewElement } from '@ember/-internals/views';
1+
import {
2+
clearElementView,
3+
clearViewElement,
4+
getViewElement,
5+
sendCoreViewEvent,
6+
} from '@ember/-internals/views';
27
import { registerDestructor } from '@glimmer/destroyable';
38
import type { CapturedNamedArguments } from '@glimmer/interfaces';
49
import type { Reference } from '@glimmer/reference';
@@ -46,8 +51,8 @@ export default class ComponentStateBucket {
4651

4752
if (isInteractive) {
4853
beginUntrackFrame();
49-
component.trigger('willDestroyElement');
50-
component.trigger('willClearRender');
54+
sendCoreViewEvent(component, 'willDestroyElement');
55+
sendCoreViewEvent(component, 'willClearRender');
5156
endUntrackFrame();
5257

5358
let element = getViewElement(component);

packages/@ember/-internals/glimmer/tests/integration/components/append-test.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { moduleFor, RenderingTestCase, strip, runTask } from 'internal-test-helpers';
1+
import {
2+
moduleFor,
3+
RenderingTestCase,
4+
strip,
5+
runTask,
6+
expectDeprecation,
7+
} from 'internal-test-helpers';
28

39
import { set } from '@ember/object';
410

@@ -56,7 +62,9 @@ class AbstractAppendTest extends RenderingTestCase {
5662
}
5763
componentsByName[name] = this;
5864
pushHook('init');
59-
this.on('init', () => pushHook('on(init)'));
65+
expectDeprecation(() => {
66+
this.on('init', () => pushHook('on(init)'));
67+
}, /`on` is deprecated/);
6068
}
6169

6270
didReceiveAttrs() {
@@ -299,7 +307,9 @@ class AbstractAppendTest extends RenderingTestCase {
299307
}
300308
componentsByName[name] = this;
301309
pushHook('init');
302-
this.on('init', () => pushHook('on(init)'));
310+
expectDeprecation(() => {
311+
this.on('init', () => pushHook('on(init)'));
312+
}, /`on` is deprecated/);
303313
}
304314

305315
didReceiveAttrs() {

packages/@ember/-internals/glimmer/tests/integration/components/curly-components-test.js

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
equalsElement,
88
runTask,
99
runLoopSettled,
10+
expectDeprecation,
1011
} from 'internal-test-helpers';
1112

1213
import { action } from '@ember/object';
@@ -3162,45 +3163,49 @@ moduleFor(
31623163
['@test triggering an event only attempts to invoke an identically named method, if it actually is a function (GH#15228)'](
31633164
assert
31643165
) {
3165-
assert.expect(3);
3166+
assert.expect(5);
31663167

31673168
let payload = ['arbitrary', 'event', 'data'];
31683169

3169-
this.registerComponent('evented-component', {
3170-
ComponentClass: Component.extend({
3171-
someTruthyProperty: true,
3172-
3173-
init() {
3174-
this._super(...arguments);
3175-
this.trigger('someMethod', ...payload);
3176-
this.trigger('someTruthyProperty', ...payload);
3177-
},
3178-
3179-
someMethod(...data) {
3180-
assert.deepEqual(
3181-
data,
3182-
payload,
3183-
'the method `someMethod` should be called, when `someMethod` is triggered'
3184-
);
3185-
},
3170+
expectDeprecation(() => {
3171+
this.registerComponent('evented-component', {
3172+
ComponentClass: Component.extend({
3173+
someTruthyProperty: true,
3174+
3175+
init() {
3176+
this._super(...arguments);
3177+
expectDeprecation(() => {
3178+
this.trigger('someMethod', ...payload);
3179+
this.trigger('someTruthyProperty', ...payload);
3180+
}, /`trigger` is deprecated/);
3181+
},
31863182

3187-
listenerForSomeMethod: on('someMethod', function (...data) {
3188-
assert.deepEqual(
3189-
data,
3190-
payload,
3191-
'the listener `listenerForSomeMethod` should be called, when `someMethod` is triggered'
3192-
);
3193-
}),
3183+
someMethod(...data) {
3184+
assert.deepEqual(
3185+
data,
3186+
payload,
3187+
'the method `someMethod` should be called, when `someMethod` is triggered'
3188+
);
3189+
},
31943190

3195-
listenerForSomeTruthyProperty: on('someTruthyProperty', function (...data) {
3196-
assert.deepEqual(
3197-
data,
3198-
payload,
3199-
'the listener `listenerForSomeTruthyProperty` should be called, when `someTruthyProperty` is triggered'
3200-
);
3191+
listenerForSomeMethod: on('someMethod', function (...data) {
3192+
assert.deepEqual(
3193+
data,
3194+
payload,
3195+
'the listener `listenerForSomeMethod` should be called, when `someMethod` is triggered'
3196+
);
3197+
}),
3198+
3199+
listenerForSomeTruthyProperty: on('someTruthyProperty', function (...data) {
3200+
assert.deepEqual(
3201+
data,
3202+
payload,
3203+
'the listener `listenerForSomeTruthyProperty` should be called, when `someTruthyProperty` is triggered'
3204+
);
3205+
}),
32013206
}),
3202-
}),
3203-
});
3207+
});
3208+
}, /`on` is deprecated/);
32043209

32053210
this.render(`{{evented-component}}`);
32063211
}

packages/@ember/-internals/glimmer/tests/integration/components/life-cycle-test.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
1-
import { classes, moduleFor, RenderingTestCase, runTask, strip } from 'internal-test-helpers';
1+
import {
2+
classes,
3+
expectDeprecation,
4+
moduleFor,
5+
RenderingTestCase,
6+
runTask,
7+
strip,
8+
} from 'internal-test-helpers';
29

310
import { schedule } from '@ember/runloop';
411
import { set, setProperties } from '@ember/object';
512
import { A as emberA } from '@ember/array';
613
import { getViewElement, getViewId } from '@ember/-internals/views';
714

815
import { Component } from '../../utils/helpers';
16+
import { addListener } from '@ember/object/events';
917

1018
class LifeCycleHooksTest extends RenderingTestCase {
1119
constructor() {
@@ -174,7 +182,7 @@ class LifeCycleHooksTest extends RenderingTestCase {
174182
assertNoElement('init', this);
175183
assertState('init', 'preRender', this);
176184

177-
this.on('init', () => pushHook('on(init)'));
185+
addListener(this, 'init', () => pushHook('on(init)'));
178186

179187
schedule('afterRender', () => {
180188
this.isInitialRender = false;

packages/@ember/-internals/glimmer/tests/integration/event-dispatcher-test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { moduleFor, RenderingTestCase, runTask } from 'internal-test-helpers';
1+
import { expectDeprecation, moduleFor, RenderingTestCase, runTask } from 'internal-test-helpers';
22

33
import { Component } from '../utils/helpers';
44
import { _getCurrentRunLoop } from '@ember/runloop';
@@ -159,7 +159,9 @@ moduleFor(
159159
init() {
160160
super.init();
161161
Object.keys(SUPPORTED_EMBER_EVENTS).forEach((browserEvent) => {
162-
this.on(SUPPORTED_EMBER_EVENTS[browserEvent], (event) => (receivedEvent = event));
162+
expectDeprecation(() => {
163+
this.on(SUPPORTED_EMBER_EVENTS[browserEvent], (event) => (receivedEvent = event));
164+
}, /`on` is deprecated/);
163165
});
164166
}
165167
},

packages/@ember/-internals/glimmer/tests/integration/syntax/each-test.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import { moduleFor, RenderingTestCase, applyMixins, strip, runTask } from 'internal-test-helpers';
1+
import {
2+
moduleFor,
3+
RenderingTestCase,
4+
applyMixins,
5+
strip,
6+
runTask,
7+
expectDeprecation,
8+
} from 'internal-test-helpers';
29

310
import { notifyPropertyChange, on } from '@ember/-internals/metal';
411
import { get, set, computed } from '@ember/object';
@@ -1121,11 +1128,14 @@ moduleFor(
11211128
class extends EachTest {
11221129
createList(items) {
11231130
let wrapped = emberA(items);
1124-
let proxy = ArrayProxy.extend({
1125-
setup: on('init', function () {
1126-
this.set('content', emberA(wrapped));
1127-
}),
1128-
}).create();
1131+
let proxy;
1132+
expectDeprecation(() => {
1133+
proxy = ArrayProxy.extend({
1134+
setup: on('init', function () {
1135+
this.set('content', emberA(wrapped));
1136+
}),
1137+
}).create();
1138+
}, /`on` is deprecated/);
11291139

11301140
return { list: proxy, delegate: wrapped };
11311141
}

0 commit comments

Comments
 (0)