Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
_scrollToOption() {
const /** @type {?} */ activeOptionIndex = this.autocomplete._keyManager.activeItemIndex || 0;
const /** @type {?} */ labelCount = MatOption.countGroupLabelsBeforeOption(activeOptionIndex, this.autocomplete.options, this.autocomplete.optionGroups);
const /** @type {?} */ optionOffset = (activeOptionIndex + labelCount) * AUTOCOMPLETE_OPTION_HEIGHT;
const /** @type {?} */ panelTop = this.autocomplete._getScrollTop();
if (optionOffset < panelTop) {
// Scroll up to reveal selected option scrolled above the panel top
this.autocomplete._setScrollTop(optionOffset);
}
else if (optionOffset + AUTOCOMPLETE_OPTION_HEIGHT > panelTop + AUTOCOMPLETE_PANEL_HEIGHT) {
// Scroll down to reveal selected option scrolled below the panel bottom
const /** @type {?} */ newScrollTop = optionOffset - AUTOCOMPLETE_PANEL_HEIGHT + AUTOCOMPLETE_OPTION_HEIGHT;
this.autocomplete._setScrollTop(Math.max(0, newScrollTop));
}
}
/**
_calculateOverlayPosition() {
const /** @type {?} */ itemHeight = this._getItemHeight();
const /** @type {?} */ items = this._getItemCount();
const /** @type {?} */ panelHeight = Math.min(items * itemHeight, SELECT_PANEL_MAX_HEIGHT);
const /** @type {?} */ scrollContainerHeight = items * itemHeight;
// The farthest the panel can be scrolled before it hits the bottom
const /** @type {?} */ maxScroll = scrollContainerHeight - panelHeight;
// If no value is selected we open the popup to the first item.
let /** @type {?} */ selectedOptionOffset = this.empty ? 0 : /** @type {?} */ ((this._getOptionIndex(this._selectionModel.selected[0])));
selectedOptionOffset += MatOption.countGroupLabelsBeforeOption(selectedOptionOffset, this.options, this.optionGroups);
// We must maintain a scroll buffer so the selected option will be scrolled to the
// center of the overlay panel rather than the top.
const /** @type {?} */ scrollBuffer = panelHeight / 2;
this._scrollTop = this._calculateOverlayScroll(selectedOptionOffset, scrollBuffer, maxScroll);
this._offsetY = this._calculateOverlayOffsetY(selectedOptionOffset, scrollBuffer, maxScroll);
this._checkOverlayWithinViewport(maxScroll);
}
/**
function () {
var /** @type {?} */ activeOptionIndex = this.autocomplete._keyManager.activeItemIndex || 0;
var /** @type {?} */ labelCount = MatOption.countGroupLabelsBeforeOption(activeOptionIndex, this.autocomplete.options, this.autocomplete.optionGroups);
var /** @type {?} */ optionOffset = (activeOptionIndex + labelCount) * AUTOCOMPLETE_OPTION_HEIGHT;
var /** @type {?} */ panelTop = this.autocomplete._getScrollTop();
if (optionOffset < panelTop) {
// Scroll up to reveal selected option scrolled above the panel top
this.autocomplete._setScrollTop(optionOffset);
}
else if (optionOffset + AUTOCOMPLETE_OPTION_HEIGHT > panelTop + AUTOCOMPLETE_PANEL_HEIGHT) {
// Scroll down to reveal selected option scrolled below the panel bottom
var /** @type {?} */ newScrollTop = optionOffset - AUTOCOMPLETE_PANEL_HEIGHT + AUTOCOMPLETE_OPTION_HEIGHT;
this.autocomplete._setScrollTop(Math.max(0, newScrollTop));
}
};
/**
function () {
var /** @type {?} */ itemHeight = this._getItemHeight();
var /** @type {?} */ items = this._getItemCount();
var /** @type {?} */ panelHeight = Math.min(items * itemHeight, SELECT_PANEL_MAX_HEIGHT);
var /** @type {?} */ scrollContainerHeight = items * itemHeight;
// The farthest the panel can be scrolled before it hits the bottom
var /** @type {?} */ maxScroll = scrollContainerHeight - panelHeight;
// If no value is selected we open the popup to the first item.
var /** @type {?} */ selectedOptionOffset = this.empty ? 0 : /** @type {?} */ ((this._getOptionIndex(this._selectionModel.selected[0])));
selectedOptionOffset += MatOption.countGroupLabelsBeforeOption(selectedOptionOffset, this.options, this.optionGroups);
// We must maintain a scroll buffer so the selected option will be scrolled to the
// center of the overlay panel rather than the top.
var /** @type {?} */ scrollBuffer = panelHeight / 2;
this._scrollTop = this._calculateOverlayScroll(selectedOptionOffset, scrollBuffer, maxScroll);
this._offsetY = this._calculateOverlayOffsetY(selectedOptionOffset, scrollBuffer, maxScroll);
this._checkOverlayWithinViewport(maxScroll);
};
/**
_scrollActiveOptionIntoView() {
const /** @type {?} */ itemHeight = this._getItemHeight();
const /** @type {?} */ activeOptionIndex = this._keyManager.activeItemIndex || 0;
const /** @type {?} */ labelCount = MatOption.countGroupLabelsBeforeOption(activeOptionIndex, this.options, this.optionGroups);
const /** @type {?} */ scrollOffset = (activeOptionIndex + labelCount) * itemHeight;
const /** @type {?} */ panelTop = this.panel.nativeElement.scrollTop;
if (scrollOffset < panelTop) {
this.panel.nativeElement.scrollTop = scrollOffset;
}
else if (scrollOffset + itemHeight > panelTop + SELECT_PANEL_MAX_HEIGHT) {
this.panel.nativeElement.scrollTop =
Math.max(0, scrollOffset - SELECT_PANEL_MAX_HEIGHT + itemHeight);
}
}
/**