@@ -82,11 +82,12 @@ export class SelectComponent extends ValueAccessorBase<string | string[]> implem
8282
8383 private lastItemIndexReached = - 1 ;
8484 public dropdownPositionToUse : 'auto' | 'bottom' | 'top' | 'left' | 'right' = 'bottom' ;
85- private isOpen : boolean = false ;
85+ private isOpen = false ;
8686 private dropdownPanelOffsetX = 0 ;
8787 private dropdownPanelOffsetY = 0 ;
8888 private anchorAbsolute : HTMLDivElement ;
8989 private anchorFixed : HTMLDivElement ;
90+ private resizeObserver ?: ResizeObserver ;
9091
9192 constructor (
9293 @Optional ( ) @Host ( ) protected parent : FormElementComponent ,
@@ -101,6 +102,7 @@ export class SelectComponent extends ValueAccessorBase<string | string[]> implem
101102 ngAfterViewInit ( ) : void {
102103 this . addPrefix ( ) ;
103104 this . addTail ( ) ;
105+ this . createSizeObservers ( ) ;
104106 this . updateTailPosition ( ) ;
105107 this . elRef . nativeElement . querySelector ( 'input' ) . addEventListener ( 'keydown' , this . keyListener ) ;
106108 }
@@ -130,6 +132,29 @@ export class SelectComponent extends ValueAccessorBase<string | string[]> implem
130132 }
131133 }
132134
135+ private createSizeObservers ( ) : void {
136+ const ngInput = this . elRef . nativeElement . querySelector ( '.ng-select' ) ;
137+ const arrowWrapper = this . elRef . nativeElement . querySelector ( '.ng-arrow-wrapper' ) ;
138+ const prefixElement = this . elRef . nativeElement . querySelector ( '.prefix-tpl' ) ;
139+
140+ const elementsToObserve : HTMLElement [ ] = [ ] ;
141+ if ( ngInput ) {
142+ elementsToObserve . push ( ngInput ) ;
143+ }
144+ if ( arrowWrapper ) {
145+ elementsToObserve . push ( arrowWrapper ) ;
146+ }
147+ if ( prefixElement ) {
148+ elementsToObserve . push ( prefixElement ) ;
149+ }
150+
151+ this . resizeObserver = new ResizeObserver ( ( ) => {
152+ this . updateTailPosition ( ) ;
153+ } ) ;
154+
155+ elementsToObserve . forEach ( el => this . resizeObserver . observe ( el ) ) ;
156+ }
157+
133158 private updateTailPosition ( ) : void {
134159 if ( this . tailRef ) {
135160 let offset = 0 ;
@@ -263,7 +288,7 @@ export class SelectComponent extends ValueAccessorBase<string | string[]> implem
263288
264289 dropdownPanel . style . position = 'fixed' ;
265290 this . setPanelOffsets ( ) ;
266- } ;
291+ }
267292
268293 private setWidthBasedOnOptionsWidths = async ( ) : Promise < void > => {
269294 if ( this . truncateOptions === false ) {
@@ -300,7 +325,7 @@ export class SelectComponent extends ValueAccessorBase<string | string[]> implem
300325 this . setPanelOffsets ( ) ;
301326 }
302327 }
303- } ;
328+ }
304329
305330 private getAllLimitingContainers ( ) : Array < HTMLElement > {
306331 const result = [ ] ;
@@ -429,5 +454,6 @@ export class SelectComponent extends ValueAccessorBase<string | string[]> implem
429454 ngOnDestroy ( ) : void {
430455 super . ngOnDestroy ( ) ;
431456 this . elRef . nativeElement ?. querySelector ( 'input' ) ?. removeEventListener ( 'keydown' , this . keyListener ) ;
457+ this . resizeObserver ?. disconnect ( ) ;
432458 }
433459}
0 commit comments