Skip to content

Commit 541e299

Browse files
committed
fix(select): Fix last items positioning #5911
1 parent 06bd523 commit 541e299

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

Diff for: projects/igniteui-angular/src/lib/select/select-positioning-strategy.ts

+12-5
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,13 @@ export class SelectPositioningStrategy extends BaseFitPositionStrategy implement
8888
}
8989

9090
/**
91-
* Position the items outer container Below or Above the input
91+
* Position the items outer container so selected item text is positioned over input text and if header
92+
* And/OR footer - both header/footer are visible
9293
* @param selectFit selectFit to use for computation.
9394
*/
9495
protected fitInViewport(contentElement: HTMLElement, selectFit: SelectFit) {
95-
96+
const footer = selectFit.scrollContainer.getBoundingClientRect().bottom - selectFit.contentElementRect.bottom;
97+
const lastItemFitSize = selectFit.targetRect.bottom + selectFit.styles.itemTextToInputTextDiff - footer;
9698
// out of viewPort on Top
9799
if (selectFit.fitVertical.back < 0) {
98100
const possibleScrollAmount = selectFit.scrollContainer.scrollHeight -
@@ -107,17 +109,22 @@ export class SelectPositioningStrategy extends BaseFitPositionStrategy implement
107109
}
108110
// out of viewPort on Bottom
109111
} else if (selectFit.fitVertical.forward < 0) {
110-
if (selectFit.scrollAmount + selectFit.fitVertical.forward > 0) {
112+
if ( lastItemFitSize > selectFit.viewPortRect.bottom) {
113+
this.positionAbove(selectFit);
114+
} else if (selectFit.scrollAmount + selectFit.fitVertical.forward > 0) {
111115
selectFit.scrollAmount += selectFit.fitVertical.forward;
112116
selectFit.verticalOffset += selectFit.fitVertical.forward;
113117
this.global_yOffset = selectFit.verticalOffset;
114118
} else {
115-
selectFit.verticalOffset = -selectFit.contentElementRect.height + selectFit.targetRect.height;
116-
this.global_yOffset = selectFit.verticalOffset;
119+
this.positionAbove(selectFit);
117120
}
118121
}
119122
}
120123

124+
private positionAbove(selectFit: SelectFit) {
125+
selectFit.verticalOffset = -selectFit.contentElementRect.height + selectFit.targetRect.height;
126+
this.global_yOffset = selectFit.verticalOffset;
127+
}
121128

122129
/**
123130
* Sets element's style which effectively positions the provided element

0 commit comments

Comments
 (0)