Skip to content

Commit dfdc97c

Browse files
Tom Zellmantzellman
Tom Zellman
authored andcommitted
fix: resolve deprecations
- https://deprecations.emberjs.com/v4.x/#toc_deprecate-auto-location - updated to latest modifier API
1 parent 513f4cf commit dfdc97c

File tree

9 files changed

+73
-47
lines changed

9 files changed

+73
-47
lines changed

addon/modifiers/on-event.js

+16-15
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,34 @@
1-
import Modifier from 'ember-modifier';
2-
import { inject as service } from '@ember/service';
31
import { assert } from '@ember/debug';
2+
import { registerDestructor } from '@ember/destroyable';
3+
import { inject as service } from '@ember/service';
44
import { tracked } from '@glimmer/tracking';
5+
import Modifier from 'ember-modifier';
56

67
const modifierName = 'on-event';
78

9+
const cleanup = (instance) => {
10+
const { eventName, events } = instance;
11+
if (eventName) {
12+
events.off(eventName, instance, instance._handler);
13+
}
14+
};
15+
816
export default class OnEventModifier extends Modifier {
917
@service events;
1018
@tracked eventName;
19+
@tracked handler;
1120

12-
get handler() {
13-
return this.args.positional[1];
14-
}
15-
16-
didReceiveArguments() {
17-
assert(`You must provide at least 2 arguments for {{${modifierName}}}`, this.args.positional.length > 1);
18-
let eventName = this.args.positional[0];
21+
modify(element, positionalArgs) {
22+
assert(`You must provide at least 2 arguments for {{${modifierName}}}`, positionalArgs.length > 1);
23+
const [eventName, handler] = positionalArgs;
1924
assert(
2025
`You must provide a string as the first positional argument for {{${modifierName}}}`,
2126
typeof eventName === 'string' && eventName.length > 0
2227
);
2328
this.eventName = eventName;
29+
this.handler = handler;
2430
this.events.on(this.eventName, this, this._handler);
25-
}
26-
27-
willRemove() {
28-
if (this.eventName) {
29-
this.events.off(this.eventName, this, this._handler);
30-
}
31+
registerDestructor(this, cleanup);
3132
}
3233

3334
_handler() {

addon/modifiers/trigger-event.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ const modifierName = 'trigger-event';
88
export default class TriggerEventModifier extends Modifier {
99
@service events;
1010

11-
didReceiveArguments() {
12-
assert(`You must provide at least 1 arguments for {{${modifierName}}}`, this.args.positional.length > 0);
13-
const eventName = this.args.positional[0];
11+
modify(element, positionalArgs) {
12+
assert(`You must provide at least 1 argument for {{${modifierName}}}`, positionalArgs.length > 0);
13+
const [eventName] = positionalArgs;
1414
assert(
1515
`You must provide a string as the first positional argument for {{${modifierName}}}`,
1616
typeof eventName === 'string' && eventName.length > 0
1717
);
1818
next(this, () => {
19-
this.events.trigger(eventName, ...this.args.positional.slice(1));
19+
this.events.trigger(eventName, ...positionalArgs.slice(1));
2020
});
2121
}
2222
}

tests/dummy/app/components/value-controls.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import Component from '@glimmer/component';
21
import { action } from '@ember/object';
3-
import { tracked } from '@glimmer/tracking';
42
import { inject as service } from '@ember/service';
3+
import Component from '@glimmer/component';
4+
import { tracked } from '@glimmer/tracking';
55

66
export default class ValueDisplayComponent extends Component {
77
@service events;
@@ -12,4 +12,10 @@ export default class ValueDisplayComponent extends Component {
1212
this.clicked++;
1313
this.events.trigger('valueSet', this.clicked);
1414
}
15+
16+
@action
17+
resetValue() {
18+
this.clicked = 0;
19+
this.events.trigger('valueSet', this.clicked);
20+
}
1521
}

tests/dummy/app/controllers/application.js

-6
This file was deleted.

tests/dummy/app/controllers/index.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import Controller from '@ember/controller';
2+
import { action } from '@ember/object';
3+
import { inject as service } from '@ember/service';
4+
import { tracked } from '@glimmer/tracking';
5+
6+
export default class IndexController extends Controller {
7+
@service events;
8+
@tracked hasClicked = false;
9+
10+
@action
11+
resetValue() {
12+
this.hasClicked = false;
13+
this.events.trigger('valueReset');
14+
}
15+
}
+1-18
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,2 @@
11
{{page-title "ember-events-modifier Demo"}}
2-
<div
3-
class="fixed z-10 inset-0 overflow-y-auto"
4-
{{on-event "hasClicked" (fn (mut this.hasClicked) true)}}
5-
>
6-
<div class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
7-
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
8-
<div
9-
class="inline-block align-bottom bg-white rounded-lg px-4 pt-5 pb-4 text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-sm sm:w-full sm:p-6">
10-
<div class="flex flex-col justify-center space-y-3">
11-
<ValueControls />
12-
<ValueDisplay />
13-
{{#if this.hasClicked}}
14-
<div class="text-red-500 text-center font-2xl">You clicked the button!</div>
15-
{{/if}}
16-
</div>
17-
</div>
18-
</div>
19-
</div>
2+
{{outlet}}

tests/dummy/app/templates/components/value-controls.hbs

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
type="button"
33
class="bg-indigo-600 hover:bg-indigo-700 p-4 rounded text-white text-2xl"
44
{{on "click" this.onClick}}
5+
{{on-event "valueReset" this.resetValue}}
56
>
67
Click Me!
7-
</button>
8+
</button>

tests/dummy/app/templates/index.hbs

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{{page-title "ember-events-modifier Demo"}}
2+
<div class="fixed z-10 inset-0 overflow-y-auto" {{on-event "hasClicked" (fn (mut this.hasClicked) true)}}>
3+
<div class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
4+
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
5+
<div
6+
class="inline-block align-bottom bg-white rounded-lg px-4 pt-5 pb-4 text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-sm sm:w-full sm:p-6"
7+
>
8+
<div class="flex flex-col justify-center space-y-3">
9+
<ValueControls />
10+
<ValueDisplay />
11+
{{#if this.hasClicked}}
12+
<div class="flex-col flex space-y-2 items-center">
13+
<div class="text-red-500 font-2xl">You clicked the button!</div>
14+
<button
15+
type="button"
16+
class="bg-purple-600 text-white p-1 border-purple-700 border rounded text:md"
17+
{{on "click" this.resetValue}}
18+
>
19+
Reset Value
20+
</button>
21+
</div>
22+
{{/if}}
23+
</div>
24+
</div>
25+
</div>
26+
</div>

tests/dummy/config/environment.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module.exports = function (environment) {
55
modulePrefix: 'dummy',
66
environment,
77
rootURL: '/',
8-
locationType: 'auto',
8+
locationType: 'history',
99
EmberENV: {
1010
FEATURES: {
1111
// Here you can enable experimental features on an ember canary build

0 commit comments

Comments
 (0)