Skip to content

Commit 45670ed

Browse files
authored
Merge pull request #32 from Gaurav0/mouseenter_deprecation
Fix deprecation for mouseenter / leave events
2 parents 0b351e5 + afa39cc commit 45670ed

File tree

2 files changed

+79
-4
lines changed

2 files changed

+79
-4
lines changed

addon/components/x-tree-node.js

+16-3
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,28 @@ export default Component.extend({
3131
}
3232
},
3333

34-
3534
contextMenu(event) {
3635
if (this.onContextMenu) {
3736
event.preventDefault();
3837
this.onContextMenu(this.model);
3938
}
4039
},
4140

42-
mouseEnter() {
41+
didInsertElement() {
42+
this._super(...arguments);
43+
this._handleMouseEnter = this.handleMouseEnter.bind(this);
44+
this._handleMouseLeave = this.handleMouseLeave.bind(this);
45+
this.element.addEventListener('mouseenter', this._handleMouseEnter);
46+
this.element.addEventListener('mouseleave', this._handleMouseLeave);
47+
},
48+
49+
willDestroyElement() {
50+
this._super(...arguments);
51+
this.element.removeEventListener('mouseenter', this._handleMouseEnter);
52+
this.element.removeEventListener('mouseleave', this._handleMouseLeave);
53+
},
54+
55+
handleMouseEnter() {
4356
if (!get(this, 'model.isDisabled')) {
4457
set(this, 'model.isSelected', true);
4558
}
@@ -50,7 +63,7 @@ export default Component.extend({
5063
}
5164
},
5265

53-
mouseLeave() {
66+
handleMouseLeave() {
5467
set(this, 'model.isSelected', false);
5568

5669
if (this.onHoverOut) {

tests/integration/components/x-tree-node-test.js

+63-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { module, test } from 'qunit';
22
import { setupRenderingTest } from 'ember-qunit';
3-
import { render } from '@ember/test-helpers';
3+
import { render, click, triggerEvent } from '@ember/test-helpers';
44
import hbs from 'htmlbars-inline-precompile';
55

66
module('Integration | Component | x-tree-node', function(hooks) {
@@ -23,4 +23,66 @@ module('Integration | Component | x-tree-node', function(hooks) {
2323

2424
assert.equal(this.element.textContent.trim(), 'template block text');
2525
});
26+
27+
test('select event', async function(assert) {
28+
this.selected = false;
29+
this.model = {
30+
name: 'a',
31+
children: []
32+
};
33+
this.set('onSelect', () => {
34+
this.selected = !this.selected;
35+
});
36+
37+
await render(hbs`{{x-tree-node model=model onSelect=(action onSelect)}}`);
38+
39+
await click('.tree-toggle');
40+
41+
assert.equal(this.selected, true, 'selected');
42+
43+
await click('.tree-toggle');
44+
45+
assert.equal(this.selected, false, 'unselected');
46+
});
47+
48+
test('contextmenu event', async function(assert) {
49+
this.rightClicked = false;
50+
this.model = {
51+
name: 'a',
52+
children: []
53+
};
54+
this.set('onContextMenu', () => {
55+
this.rightClicked = true;
56+
});
57+
58+
await render(hbs`{{x-tree-node model=model onContextMenu=(action onContextMenu)}}`);
59+
60+
await triggerEvent('.tree-toggle', 'contextmenu');
61+
62+
assert.equal(this.rightClicked, true, 'right click detected');
63+
});
64+
65+
test('onHover and onHoverOut events', async function(assert) {
66+
this.hovering = false;
67+
this.model = {
68+
name: 'a',
69+
children: []
70+
};
71+
this.set('onHover', () => {
72+
this.hovering = true;
73+
});
74+
this.set('onHoverOut', () => {
75+
this.hovering = false;
76+
});
77+
78+
await render(hbs`{{x-tree-node model=model onHover=(action onHover) onHoverOut=(action onHoverOut)}}`);
79+
80+
await triggerEvent('.tree-toggle', 'mouseenter');
81+
82+
assert.equal(this.hovering, true, 'hovering');
83+
84+
await triggerEvent('.tree-toggle', 'mouseleave');
85+
86+
assert.equal(this.hovering, false, 'hover out');
87+
});
2688
});

0 commit comments

Comments
 (0)