@@ -11,6 +11,7 @@ import {
1111 SIZES_HEIGHT_DEFAULT ,
1212} from 'ember-element-query' ;
1313import { inject as service } from '@ember/service' ;
14+ import { waitFor } from '@ember/test-waiters' ;
1415export interface SizeObject {
1516 name : string ;
1617 value : number ;
@@ -41,6 +42,7 @@ export default class ElementQueryModifier extends Modifier<ModifierArgs> {
4142 sizesRatioDefault : Sizes = SIZES_RATIO_DEFAULT ;
4243
4344 _element ?: HTMLElement ; // For some reason, this.element is not always available
45+ _promiseResolveHasBeenInstalled ?: ( value ?: unknown ) => void ;
4446
4547 // -------------------
4648 // Computed properties
@@ -541,11 +543,19 @@ export default class ElementQueryModifier extends Modifier<ModifierArgs> {
541543 : sizeObjectsSortedAsc [ sizeObjectsSortedAsc . length - 1 ] ;
542544 }
543545
546+ _maybeRunPromiseResolveHasBeenInstalled ( ) : void {
547+ if ( this . _promiseResolveHasBeenInstalled ) {
548+ this . _promiseResolveHasBeenInstalled ( ) ;
549+ this . _promiseResolveHasBeenInstalled = undefined ;
550+ }
551+ }
552+
544553 _didResizeHandler ( ) : void {
545554 window . requestAnimationFrame ( ( ) => {
546555 if ( ! this . args . named . isDisabled && ! this . isDestroying && ! this . isDestroyed ) {
547556 this . applyAttributesToElement ( ) ;
548557 this . callOnResize ( ) ;
558+ this . _maybeRunPromiseResolveHasBeenInstalled ( ) ;
549559 }
550560 } ) ;
551561 }
@@ -561,13 +571,19 @@ export default class ElementQueryModifier extends Modifier<ModifierArgs> {
561571 // -------------------
562572 // Lifecycle hooks
563573 // -------------------
564-
565- didInstall ( ) : void {
574+ @ waitFor
575+ didInstall ( ) : void | Promise < void > {
566576 if ( ! this . element ) throw new Error ( 'Expected this.element to be available' ) ;
567577
568578 this . _element = this . element ;
569579
570580 this . resizeObserver . observe ( this . element , this . didResizeHandler ) ; // eslint-disable-line @typescript-eslint/unbound-method
581+
582+ if ( ! this . args . named . isDisabled ) {
583+ return new Promise ( ( resolve ) => {
584+ this . _promiseResolveHasBeenInstalled = resolve ;
585+ } ) ;
586+ }
571587 }
572588
573589 didUpdateArguments ( ) : void {
0 commit comments