Skip to content

Commit 089a65d

Browse files
committed
chore(select): Adress comments-2 #5911
1 parent c72b380 commit 089a65d

File tree

7 files changed

+44
-46
lines changed

7 files changed

+44
-46
lines changed

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

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { VerticalAlignment, HorizontalAlignment, PositionSettings, Size, Point, Util } from '../services/overlay/utilities';
1+
import { VerticalAlignment, HorizontalAlignment, PositionSettings, Size, Util, ConnectedFit } from '../services/overlay/utilities';
22
import { IPositionStrategy } from '../services/overlay/position';
33
import { fadeOut, fadeIn } from '../animations/main';
44
import { IgxSelectBase } from './select.common';
55
import { isIE } from '../core/utils';
6-
import { BaseFitPositionStrategy, ConnectedFit } from '../services/overlay/position/base-fit-position-strategy';
6+
import { BaseFitPositionStrategy } from '../services/overlay/position/base-fit-position-strategy';
77
import { DisplayDensity } from '../core/density';
88

99
/** @hidden @internal */
@@ -44,7 +44,8 @@ export class SelectPositioningStrategy extends BaseFitPositionStrategy implement
4444
const rects = super.calculateElementRectangles(contentElement);
4545
// selectFit obj, to be used for both cases of initialCall and !initialCall(page scroll/overlay repositionAll)
4646
const selectFit: SelectFit = {
47-
yOffset: this.global_yOffset, xOffset: this.global_xOffset,
47+
verticalOffset: this.global_yOffset,
48+
horizontalOffset: this.global_xOffset,
4849
targetRect: rects.targetRect,
4950
contentElementRect: rects.elementRect,
5051
styles: this.global_styles
@@ -54,7 +55,7 @@ export class SelectPositioningStrategy extends BaseFitPositionStrategy implement
5455
selectFit.viewPortRect = Util.getViewportRect(document);
5556

5657
// Fill in the required selectFit object properties.
57-
this.calculateVariables(contentElement, selectFit);
58+
this.calculateVariables(selectFit);
5859
selectFit.viewPortRect = Util.getViewportRect(document);
5960

6061
// Calculate how much to offset the overlay container.
@@ -118,8 +119,8 @@ export class SelectPositioningStrategy extends BaseFitPositionStrategy implement
118119

119120
// This method can be scrambled and combined in manageScrollToItem()
120121
private compensateYScroll(selectFit: SelectFit, compensation: number ) {
121-
selectFit.yOffset += compensation;
122-
this.global_yOffset = selectFit.yOffset;
122+
selectFit.verticalOffset += compensation;
123+
this.global_yOffset = selectFit.verticalOffset;
123124
}
124125

125126
// Position the items outer container Below or Above the input.
@@ -163,16 +164,12 @@ export class SelectPositioningStrategy extends BaseFitPositionStrategy implement
163164
this.global_styles.contentElementNewWidth = selectFit.styles.contentElementNewWidth;
164165
}
165166

166-
private calculateVariables(contentElement: HTMLElement, selectFit: SelectFit) {
167-
const targetRect = Util.getTargetRect(this.settings);
168-
const contentElementRect = contentElement.getBoundingClientRect();
167+
private calculateVariables(selectFit: SelectFit) {
169168
const itemHeight = this.getInteractionItemElement().getBoundingClientRect().height;
170169
selectFit.styles = {};
171170
selectFit.itemElement = this.getInteractionItemElement();
172171
selectFit.itemHeight = itemHeight;
173172
selectFit.dropDownList = this.select.scrollContainer;
174-
selectFit.targetRect = targetRect;
175-
selectFit.contentElementRect = contentElementRect;
176173
selectFit.inputElement = this.select.getEditElement();
177174
// Calculate input and selected item elements style related variables
178175
this.calculateStyles(selectFit);
@@ -219,14 +216,14 @@ export class SelectPositioningStrategy extends BaseFitPositionStrategy implement
219216

220217
protected calculateYoffset(selectFit: SelectFit) {
221218
const contentElementTopLeftPointY = selectFit.contentElementRect.top;
222-
selectFit.yOffset =
219+
selectFit.verticalOffset =
223220
-(selectFit.itemElement.getBoundingClientRect().top - contentElementTopLeftPointY + selectFit.styles.itemTextToInputTextDiff);
224-
this.global_yOffset = selectFit.yOffset;
221+
this.global_yOffset = selectFit.verticalOffset;
225222
}
226223

227224
protected calculateXoffset(selectFit: SelectFit) {
228-
selectFit.xOffset = selectFit.styles.itemTextIndent - selectFit.styles.itemTextPadding;
229-
this.global_xOffset = selectFit.xOffset;
225+
selectFit.horizontalOffset = selectFit.styles.itemTextIndent - selectFit.styles.itemTextPadding;
226+
this.global_xOffset = selectFit.horizontalOffset;
230227
}
231228
}
232229

@@ -240,8 +237,8 @@ export interface SelectFit extends ConnectedFit {
240237
right?: number;
241238
top?: number;
242239
bottom?: number;
243-
xOffset?: number;
244-
yOffset?: number;
240+
horizontalOffset?: number;
241+
verticalOffset?: number;
245242

246243
// New properties
247244
inputElement?: HTMLElement;

projects/igniteui-angular/src/lib/services/overlay/position/auto-position-strategy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { VerticalAlignment, HorizontalAlignment } from './../utilities';
2-
import { BaseFitPositionStrategy, ConnectedFit } from './base-fit-position-strategy';
1+
import { VerticalAlignment, HorizontalAlignment, ConnectedFit } from './../utilities';
2+
import { BaseFitPositionStrategy } from './base-fit-position-strategy';
33

44
/**
55
* Positions the element as in **Connected** positioning strategy and re-positions the element in

projects/igniteui-angular/src/lib/services/overlay/position/base-fit-position-strategy.ts

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import { ConnectedPositioningStrategy } from './connected-positioning-strategy';
2-
import { HorizontalAlignment, VerticalAlignment, PositionSettings, Size, Util } from '../utilities';
2+
import { HorizontalAlignment, VerticalAlignment, PositionSettings, Size, Util, ConnectedFit } from '../utilities';
33

44
export abstract class BaseFitPositionStrategy extends ConnectedPositioningStrategy {
55
protected _initialSize: Size;
66
protected _initialSettings: PositionSettings;
77

88
/** @inheritdoc */
99
position(contentElement: HTMLElement, size: Size, document?: Document, initialCall?: boolean): void {
10-
const targetRect = Util.getTargetRect(this.settings);
10+
const targetRect = super.calculateElementRectangles(contentElement).targetRect;
1111
const contentElementRect = contentElement.getBoundingClientRect();
12-
// let exposedConnectedFit = {};
1312
const connectedFit: ConnectedFit = {};
1413
if (initialCall) {
1514
connectedFit.targetRect = targetRect;
@@ -21,9 +20,7 @@ export abstract class BaseFitPositionStrategy extends ConnectedPositioningStrate
2120
if (!connectedFit.fitHorizontal || !connectedFit.fitVertical) {
2221
this.fitInViewport(contentElement, connectedFit);
2322
}
24-
//exposedConnectedFit = connectedFit;
2523
}
26-
// this.setStyle(contentElement, targetRect, contentElementRect, exposedConnectedFit);
2724
this.setStyle(contentElement, targetRect, contentElementRect, connectedFit);
2825
}
2926

@@ -38,7 +35,7 @@ export abstract class BaseFitPositionStrategy extends ConnectedPositioningStrate
3835
connectedFit.contentElementRect,
3936
this.settings.horizontalStartPoint,
4037
this.settings.horizontalDirection,
41-
connectedFit.xOffset);
38+
connectedFit.horizontalOffset);
4239
connectedFit.right = connectedFit.left + connectedFit.contentElementRect.width;
4340
connectedFit.fitHorizontal =
4441
connectedFit.viewPortRect.left < connectedFit.left && connectedFit.right < connectedFit.viewPortRect.right;
@@ -48,7 +45,7 @@ export abstract class BaseFitPositionStrategy extends ConnectedPositioningStrate
4845
connectedFit.contentElementRect,
4946
this.settings.verticalStartPoint,
5047
this.settings.verticalDirection,
51-
connectedFit.yOffset);
48+
connectedFit.verticalOffset);
5249
connectedFit.bottom = connectedFit.top + connectedFit.contentElementRect.height;
5350
connectedFit.fitVertical =
5451
connectedFit.viewPortRect.top < connectedFit.top && connectedFit.bottom < connectedFit.viewPortRect.bottom;
@@ -92,17 +89,4 @@ export abstract class BaseFitPositionStrategy extends ConnectedPositioningStrate
9289
connectedFit: ConnectedFit);
9390
}
9491

95-
export interface ConnectedFit {
96-
contentElementRect?: ClientRect;
97-
targetRect?: ClientRect;
98-
viewPortRect?: ClientRect;
99-
fitHorizontal?: boolean;
100-
fitVertical?: boolean;
101-
left?: number;
102-
right?: number;
103-
top?: number;
104-
bottom?: number;
105-
xOffset?: number;
106-
yOffset?: number;
107-
}
10892

projects/igniteui-angular/src/lib/services/overlay/position/connected-positioning-strategy.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
VerticalAlignment
99
} from './../utilities';
1010
import { scaleInVerTop, scaleOutVerTop } from '../../../animations/main';
11-
import { ConnectedFit } from './base-fit-position-strategy';
11+
import { ConnectedFit } from '../utilities';
1212

1313
/**
1414
* Positions the element based on the directions and start point passed in trough PositionSettings.
@@ -65,8 +65,8 @@ export class ConnectedPositioningStrategy implements IPositionStrategy {
6565
*/
6666
protected setStyle(element: HTMLElement, targetRect: ClientRect, elementRect: ClientRect, connectedFit?: ConnectedFit) {
6767
const startPoint: Point = {
68-
x: targetRect.right + targetRect.width * this.settings.horizontalStartPoint + (connectedFit ? connectedFit.xOffset : 0),
69-
y: targetRect.bottom + targetRect.height * this.settings.verticalStartPoint + (connectedFit ? connectedFit.yOffset : 0)
68+
x: targetRect.right + targetRect.width * this.settings.horizontalStartPoint + (connectedFit ? connectedFit.horizontalOffset : 0),
69+
y: targetRect.bottom + targetRect.height * this.settings.verticalStartPoint + (connectedFit ? connectedFit.verticalOffset : 0)
7070
};
7171
const wrapperRect: ClientRect = element.parentElement.getBoundingClientRect();
7272

projects/igniteui-angular/src/lib/services/overlay/position/elastic-position-strategy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { BaseFitPositionStrategy, ConnectedFit } from './base-fit-position-strategy';
2-
import { HorizontalAlignment, VerticalAlignment } from '../utilities';
1+
import { BaseFitPositionStrategy } from './base-fit-position-strategy';
2+
import { HorizontalAlignment, VerticalAlignment, ConnectedFit } from '../utilities';
33

44
/**
55
* Positions the element as in **Connected** positioning strategy and resize the element

projects/igniteui-angular/src/lib/services/overlay/scroll/absolute-scroll-strategy.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ export class AbsoluteScrollStrategy extends ScrollStrategy {
6060
}
6161
}
6262

63-
private onScroll = () => {
64-
this._overlayService.repositionAll();
63+
private onScroll = (e) => {
64+
if (!this._overlayService.getOverlayById(this._id).elementRef.nativeElement.contains(e.target)) {
65+
this._overlayService.reposition(this._id);
66+
}
6567
}
6668
}

projects/igniteui-angular/src/lib/services/overlay/utilities.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,21 @@ export interface OverlayInfo {
106106
transformY?: number;
107107
}
108108

109+
/** @hidden */
110+
export interface ConnectedFit {
111+
contentElementRect?: ClientRect;
112+
targetRect?: ClientRect;
113+
viewPortRect?: ClientRect;
114+
fitHorizontal?: boolean;
115+
fitVertical?: boolean;
116+
left?: number;
117+
right?: number;
118+
top?: number;
119+
bottom?: number;
120+
horizontalOffset?: number;
121+
verticalOffset?: number;
122+
}
123+
109124
/** @hidden */
110125
export class Util {
111126
/**

0 commit comments

Comments
 (0)