Skip to content

Commit 2b9d1b1

Browse files
authored
Remove use of ember-lifeline (#1002)
1 parent f739da1 commit 2b9d1b1

File tree

10 files changed

+42
-133
lines changed

10 files changed

+42
-133
lines changed
Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Component from '@glimmer/component';
22
import { action } from '@ember/object';
3-
import { runTask, cancelTask } from 'ember-lifeline';
3+
import { task, timeout } from 'ember-concurrency';
44

55
export default class extends Component {
66
notifications = [
@@ -17,23 +17,17 @@ export default class extends Component {
1717

1818
@action
1919
open(dropdown) {
20-
if (this.closeTimer) {
21-
cancelTask(this, this.closeTimer);
22-
this.closeTimer = null;
23-
} else {
24-
dropdown.actions.open();
25-
}
20+
this.closeLaterTask.cancelAll();
21+
dropdown.actions.open();
2622
}
2723

2824
@action
2925
closeLater(dropdown) {
30-
this.closeTimer = runTask(
31-
this,
32-
() => {
33-
this.closeTimer = null;
34-
dropdown.actions.close();
35-
},
36-
200,
37-
);
26+
this.closeLaterTask.perform(dropdown);
3827
}
28+
29+
closeLaterTask = task(async (dropdown) => {
30+
await timeout(200);
31+
dropdown.actions.close();
32+
});
3933
}
Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,6 @@
11
import Controller from '@ember/controller';
2-
import { runTask, cancelTask } from 'ember-lifeline';
3-
import { action } from '@ember/object';
42
import ContentEvents1Component from '../../../components/snippets/content-events-1';
53

64
export default class extends Controller {
75
contentEvents1Component = ContentEvents1Component;
8-
9-
notifications = [
10-
{ text: 'Edward' },
11-
{ text: 'Jonathan' },
12-
{ text: 'Tom' },
13-
{ text: 'Eric' },
14-
];
15-
16-
prevent(e) {
17-
return e.stopImmediatePropagation();
18-
}
19-
20-
@action
21-
open(dropdown) {
22-
if (this.closeTimer) {
23-
cancelTask(this, this.closeTimer);
24-
this.closeTimer = null;
25-
} else {
26-
dropdown.actions.open();
27-
}
28-
}
29-
30-
@action
31-
closeLater(dropdown) {
32-
this.closeTimer = runTask(
33-
this,
34-
() => {
35-
this.closeTimer = null;
36-
dropdown.actions.close();
37-
},
38-
200,
39-
);
40-
}
416
}

docs/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@
7373
"ember-code-snippet": "git://github.com/ef4/ember-code-snippet.git#d054b697098ad52481c94a952ccf8d89ba1f25fe",
7474
"ember-concurrency": "^4.0.4",
7575
"ember-fetch": "^8.1.2",
76-
"ember-lifeline": "^7.0.0",
7776
"ember-load-initializers": "^3.0.1",
7877
"ember-modifier": "^4.2.0",
7978
"ember-page-title": "^9.0.1",

ember-basic-dropdown/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@
6868
"decorator-transforms": "^2.3.0",
6969
"ember-element-helper": "^0.8.7",
7070
"ember-modifier": "^4.2.0",
71-
"ember-lifeline": "^7.0.0",
7271
"ember-style-modifier": "^4.4.0",
7372
"ember-truth-helpers": "^4.0.3"
7473
},

ember-basic-dropdown/src/components/basic-dropdown-content.ts

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import hasMoved from '../utils/has-moved.ts';
1111
import { isTesting } from '@embroider/macros';
1212
import { modifier } from 'ember-modifier';
1313
import type { Dropdown, TRootEventType } from './basic-dropdown.ts';
14-
import { runTask } from 'ember-lifeline';
1514

1615
export interface BasicDropdownContentSignature {
1716
Element: Element;
@@ -205,11 +204,8 @@ export default class BasicDropdownContent extends Component<BasicDropdownContent
205204
);
206205
}
207206

208-
window.addEventListener('resize', this.runloopAwareRepositionBound);
209-
window.addEventListener(
210-
'orientationchange',
211-
this.runloopAwareRepositionBound,
212-
);
207+
window.addEventListener('resize', this.repositionBound);
208+
window.addEventListener('orientationchange', this.repositionBound);
213209

214210
if (this.isTouchDevice) {
215211
document.addEventListener(
@@ -350,7 +346,7 @@ export default class BasicDropdownContent extends Component<BasicDropdownContent
350346
}
351347

352348
if (shouldReposition) {
353-
this.runloopAwareReposition();
349+
this.reposition();
354350
}
355351
});
356352
this.mutationObserver.observe(dropdownElement, {
@@ -405,31 +401,22 @@ export default class BasicDropdownContent extends Component<BasicDropdownContent
405401
}
406402

407403
@action
408-
runloopAwareReposition(): void {
404+
reposition(): void {
409405
if (!this.args.dropdown) {
410406
return;
411407
}
412408

413-
runTask(this, () => {
414-
if (!this.args.dropdown) {
415-
return;
416-
}
417-
418-
this.args.dropdown.actions.reposition();
419-
});
409+
this.args.dropdown.actions.reposition();
420410
}
421411

422412
@action
423413
removeGlobalEvents(): void {
424-
window.removeEventListener('resize', this.runloopAwareRepositionBound);
425-
window.removeEventListener(
426-
'orientationchange',
427-
this.runloopAwareRepositionBound,
428-
);
414+
window.removeEventListener('resize', this.repositionBound);
415+
window.removeEventListener('orientationchange', this.repositionBound);
429416
}
430417

431418
touchMoveHandlerBound = (e: TouchEvent) => this.touchMoveHandler(e);
432-
runloopAwareRepositionBound = () => this.runloopAwareReposition();
419+
repositionBound = () => this.reposition();
433420
touchStartHandlerBound = () => this.touchStartHandler();
434421

435422
// Methods
@@ -522,15 +509,15 @@ export default class BasicDropdownContent extends Component<BasicDropdownContent
522509
// These two functions wire up scroll handling if `preventScroll` is false.
523510
// These trigger reposition of the dropdown.
524511
addScrollEvents(): void {
525-
window.addEventListener('scroll', this.runloopAwareRepositionBound);
512+
window.addEventListener('scroll', this.repositionBound);
526513
this.scrollableAncestors.forEach((el) => {
527-
el.addEventListener('scroll', this.runloopAwareRepositionBound);
514+
el.addEventListener('scroll', this.repositionBound);
528515
});
529516
}
530517
removeScrollEvents(): void {
531-
window.removeEventListener('scroll', this.runloopAwareRepositionBound);
518+
window.removeEventListener('scroll', this.repositionBound);
532519
this.scrollableAncestors.forEach((el) => {
533-
el.removeEventListener('scroll', this.runloopAwareRepositionBound);
520+
el.removeEventListener('scroll', this.repositionBound);
534521
});
535522
}
536523
}

ember-basic-dropdown/src/components/basic-dropdown.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import Component from '@glimmer/component';
22
import { tracked } from '@glimmer/tracking';
33
import { action } from '@ember/object';
44
import { guidFor } from '@ember/object/internals';
5-
import { scheduleTask } from 'ember-lifeline';
65
import calculatePosition from '../utils/calculate-position.ts';
76
import type {
87
CalculatePosition,
@@ -12,6 +11,7 @@ import type {
1211
} from '../utils/calculate-position.ts';
1312
import { getOwner } from '@ember/application';
1413
import type Owner from '@ember/owner';
14+
import { schedule } from '@ember/runloop';
1515
import type { ComponentLike } from '@glint/template';
1616
import type { BasicDropdownTriggerSignature } from './basic-dropdown-trigger.ts';
1717
import type { BasicDropdownContentSignature } from './basic-dropdown-content.ts';
@@ -166,7 +166,8 @@ export default class BasicDropdown extends Component<BasicDropdownSignature> {
166166
this._previousDisabled !== UNINITIALIZED &&
167167
this._previousDisabled !== newVal
168168
) {
169-
scheduleTask(this, 'actions', () => {
169+
// eslint-disable-next-line ember/no-runloop
170+
schedule('actions', () => {
170171
if (newVal && this.publicAPI.isOpen) {
171172
// eslint-disable-next-line ember/no-side-effects
172173
this.isOpen = false;

pnpm-lock.yaml

Lines changed: 6 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test-app/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@
7070
"ember-cli-sri": "^2.1.1",
7171
"ember-cli-terser": "^4.0.2",
7272
"ember-fetch": "^8.1.2",
73-
"ember-lifeline": "^7.0.0",
7473
"ember-load-initializers": "^3.0.1",
7574
"ember-modifier": "^4.2.0",
7675
"ember-page-title": "^9.0.1",

test-app/tests/integration/components/basic-dropdown-test.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { scheduleTask } from 'ember-lifeline';
21
import { registerDeprecationHandler } from '@ember/debug';
32
import { module, test } from 'qunit';
43
import { setupRenderingTest } from 'ember-qunit';
@@ -675,8 +674,7 @@ module('Integration | Component | basic-dropdown', function (hooks) {
675674

676675
this.isDisabled = false;
677676
this.toggleDisabled = () => this.toggleProperty('isDisabled');
678-
this.registerAPI = (api) =>
679-
scheduleTask(this, 'actions', () => this.set('remoteController', api));
677+
this.registerAPI = (api) => this.set('remoteController', api);
680678
await render(hbs`
681679
<BasicDropdown @disabled={{this.isDisabled}} @registerAPI={{this.registerAPI}} as |dropdown|>
682680
<dropdown.Trigger>Click me</dropdown.Trigger>

test-app/tests/integration/components/content-test.js

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { module, test } from 'qunit';
22
import { setupRenderingTest } from 'ember-qunit';
3-
import { runTask } from 'ember-lifeline';
43
import { hbs } from 'ember-cli-htmlbars';
54
import { render, click, triggerEvent, settled } from '@ember/test-helpers';
65

@@ -563,13 +562,11 @@ module('Integration | Component | basic-dropdown-content', function (hooks) {
563562
<div id="content-target-div"></div>
564563
</BasicDropdownContent>
565564
`);
566-
await runTask(this, () => {
567-
let target = this.element
568-
.getRootNode()
569-
.querySelector('#content-target-div');
570-
let span = document.createElement('SPAN');
571-
target.appendChild(span);
572-
});
565+
let target = this.element
566+
.getRootNode()
567+
.querySelector('#content-target-div');
568+
let span = document.createElement('SPAN');
569+
target.appendChild(span);
573570
await settled();
574571
assert.strictEqual(repositions, 2, 'It was repositioned twice');
575572
});
@@ -595,9 +592,7 @@ module('Integration | Component | basic-dropdown-content', function (hooks) {
595592
{{/if}}
596593
</BasicDropdownContent>
597594
`);
598-
await runTask(this, () => {
599-
this.set('divVisible', true);
600-
});
595+
this.set('divVisible', true);
601596
await settled();
602597
assert.strictEqual(repositions, 2, 'It was repositioned twice');
603598
});
@@ -631,13 +626,11 @@ module('Integration | Component | basic-dropdown-content', function (hooks) {
631626
<div id="content-target-div"></div>
632627
</BasicDropdownContent>
633628
`);
634-
runTask(this, () => {
635-
let target = this.element
636-
.getRootNode()
637-
.querySelector('#content-target-div');
638-
let span = document.createElement('SPAN');
639-
target.appendChild(span);
640-
});
629+
let target = this.element
630+
.getRootNode()
631+
.querySelector('#content-target-div');
632+
let span = document.createElement('SPAN');
633+
target.appendChild(span);
641634
});
642635

643636
test('A renderInPlace component is repositioned if the window scrolls', async function (assert) {

0 commit comments

Comments
 (0)