Skip to content

Commit 10e3634

Browse files
authored
Merge pull request #36 from lolmaus/bugfix/issue-35-wait-for-initial
Wait for initial element query attributes in tests, fixes #35
2 parents 7b5dcd7 + 860462a commit 10e3634

File tree

5 files changed

+35
-70
lines changed

5 files changed

+35
-70
lines changed

Diff for: .github/workflows/ci.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ jobs:
5959
- ember-lts-3.16
6060
- ember-lts-3.20
6161
- ember-release
62-
- ember-beta
63-
- ember-canary
62+
# - ember-beta
63+
# - ember-canary
6464
- ember-default-with-jquery
6565
- ember-classic
6666
steps:

Diff for: .travis.yml

-64
This file was deleted.

Diff for: addon/-private/modifier.ts

+22-4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
SIZES_HEIGHT_DEFAULT,
1212
} from 'ember-element-query';
1313
import { inject as service } from '@ember/service';
14+
import { waitFor } from '@ember/test-waiters';
1415
export interface SizeObject {
1516
name: string;
1617
value: number;
@@ -22,6 +23,7 @@ export type RangeDirection = 'at' | 'from' | 'to';
2223
interface ResizeObserverService {
2324
observe(element: HTMLElement, callback?: () => void): void;
2425
unobserve(element: HTMLElement, callback?: () => void): void;
26+
isEnabled: boolean;
2527
}
2628

2729
/** @internal */
@@ -41,6 +43,7 @@ export default class ElementQueryModifier extends Modifier<ModifierArgs> {
4143
sizesRatioDefault: Sizes = SIZES_RATIO_DEFAULT;
4244

4345
_element?: HTMLElement; // For some reason, this.element is not always available
46+
_promiseResolveHasBeenInstalled?: (value?: unknown) => void;
4447

4548
// -------------------
4649
// Computed properties
@@ -541,12 +544,20 @@ export default class ElementQueryModifier extends Modifier<ModifierArgs> {
541544
: sizeObjectsSortedAsc[sizeObjectsSortedAsc.length - 1];
542545
}
543546

547+
_maybeRunPromiseResolveHasBeenInstalled(): void {
548+
if (this._promiseResolveHasBeenInstalled) {
549+
this._promiseResolveHasBeenInstalled();
550+
this._promiseResolveHasBeenInstalled = undefined;
551+
}
552+
}
553+
544554
_didResizeHandler(): void {
545555
window.requestAnimationFrame(() => {
546556
if (!this.args.named.isDisabled && !this.isDestroying && !this.isDestroyed) {
547557
this.applyAttributesToElement();
548558
this.callOnResize();
549559
}
560+
this._maybeRunPromiseResolveHasBeenInstalled?.();
550561
});
551562
}
552563

@@ -561,18 +572,25 @@ export default class ElementQueryModifier extends Modifier<ModifierArgs> {
561572
// -------------------
562573
// Lifecycle hooks
563574
// -------------------
564-
565-
didInstall(): void {
575+
@waitFor
576+
didInstall(): void | Promise<void> {
566577
if (!this.element) throw new Error('Expected this.element to be available');
567578

568579
this._element = this.element;
569580

570581
this.resizeObserver.observe(this.element, this.didResizeHandler); // eslint-disable-line @typescript-eslint/unbound-method
582+
583+
if (!this.args.named.isDisabled && this.resizeObserver.isEnabled) {
584+
return new Promise((resolve) => {
585+
this._promiseResolveHasBeenInstalled = resolve;
586+
});
587+
} else {
588+
return Promise.resolve();
589+
}
571590
}
572591

573592
didUpdateArguments(): void {
574-
// @ts-ignore https://github.com/Microsoft/TypeScript/issues/28502#issuecomment-609607344
575-
if (!ResizeObserver) return;
593+
if (!this.resizeObserver.isEnabled) return;
576594

577595
this.didResizeHandler();
578596
}

Diff for: package.json

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
}
6868
},
6969
"dependencies": {
70+
"@ember/test-waiters": "^3.0.0",
7071
"ember-cli-babel": "^7.26.3",
7172
"ember-cli-htmlbars": "5.7.1",
7273
"ember-cli-typescript": "^4.2.1",

Diff for: yarn.lock

+10
Original file line numberDiff line numberDiff line change
@@ -1826,6 +1826,16 @@
18261826
ember-cli-version-checker "^5.1.2"
18271827
semver "^7.3.2"
18281828

1829+
"@ember/test-waiters@^3.0.0":
1830+
version "3.0.0"
1831+
resolved "https://registry.yarnpkg.com/@ember/test-waiters/-/test-waiters-3.0.0.tgz#b66a35cd5b78ec3c296a6f5f5fb3852780a5d3c8"
1832+
integrity sha512-z6+gIlq/rXLKroWv2wxAoiiLtgSOGQFCw6nUufERausV+jLnA7CYbWwzEo5R7XaOejSDpgA5d6haXIBsD5j0oQ==
1833+
dependencies:
1834+
calculate-cache-key-for-tree "^2.0.0"
1835+
ember-cli-babel "^7.26.6"
1836+
ember-cli-version-checker "^5.1.2"
1837+
semver "^7.3.5"
1838+
18291839
"@embroider/[email protected]", "@embroider/core@^0.33.0":
18301840
version "0.33.0"
18311841
resolved "https://registry.yarnpkg.com/@embroider/core/-/core-0.33.0.tgz#0fb1752d6e34ea45368e65c42e13220a57ffae76"

0 commit comments

Comments
 (0)