From 0a2b11d18138283e5fd1520e1230451f2e41a0c9 Mon Sep 17 00:00:00 2001 From: janekptacijarabaci Date: Sat, 31 Mar 2018 07:05:58 +0200 Subject: Bug 1397114 - Disable smooth scrolling when value changes come from input box --- toolkit/content/widgets/datepicker.js | 11 ++++++----- toolkit/content/widgets/spinner.js | 16 ++-------------- 2 files changed, 8 insertions(+), 19 deletions(-) (limited to 'toolkit/content') diff --git a/toolkit/content/widgets/datepicker.js b/toolkit/content/widgets/datepicker.js index f5659b736..4387ae632 100644 --- a/toolkit/content/widgets/datepicker.js +++ b/toolkit/content/widgets/datepicker.js @@ -124,7 +124,7 @@ function DatePicker(context) { /** * Update date picker and its components. */ - _update() { + _update(options = {}) { const { dateKeeper, isMonthPickerVisible } = this.state; if (isMonthPickerVisible) { @@ -139,7 +139,8 @@ function DatePicker(context) { dateObj: dateKeeper.state.dateObj, months: this.state.months, years: this.state.years, - toggleMonthPicker: this.state.toggleMonthPicker + toggleMonthPicker: this.state.toggleMonthPicker, + noSmoothScroll: options.noSmoothScroll }); this.components.calendar.setProps({ isVisible: !isMonthPickerVisible, @@ -260,7 +261,7 @@ function DatePicker(context) { dateKeeper.setSelection({ year, month, day }); - this._update(); + this._update({ noSmoothScroll: true }); } }; @@ -330,14 +331,14 @@ function DatePicker(context) { items: props.months, isInfiniteScroll: true, isValueSet: this.state.isMonthSet, - smoothScroll: !this.state.firstOpened + smoothScroll: !(this.state.firstOpened || props.noSmoothScroll) }); this.components.year.setState({ value: props.dateObj.getUTCFullYear(), items: props.years, isInfiniteScroll: false, isValueSet: this.state.isYearSet, - smoothScroll: !this.state.firstOpened + smoothScroll: !(this.state.firstOpened || props.noSmoothScroll) }); this.state.firstOpened = false; } else { diff --git a/toolkit/content/widgets/spinner.js b/toolkit/content/widgets/spinner.js index 6ef929f8a..4901320b5 100644 --- a/toolkit/content/widgets/spinner.js +++ b/toolkit/content/widgets/spinner.js @@ -123,8 +123,6 @@ function Spinner(props, context) { /** * Whenever scroll event is detected: * - Update the index state - * - If a smooth scroll has reached its destination, set [isScrolling] state - * to false * - If the value has changed, update the [value] state and call [setValue] * - If infinite scrolling is on, reset the scrolling position if necessary */ @@ -137,14 +135,8 @@ function Spinner(props, context) { const value = itemsView[this.state.index + viewportTopOffset].value; - // Check if smooth scrolling has reached its destination. - // This prevents input box jump when input box changes values. - if (this.state.value == value && this.state.isScrolling) { - this.state.isScrolling = false; - } - - // Call setValue if value has changed, and is not smooth scrolling - if (this.state.value != value && !this.state.isScrolling) { + // Call setValue if value has changed + if (this.state.value != value) { this.state.value = value; this.props.setValue(value); } @@ -443,10 +435,6 @@ function Spinner(props, context) { _smoothScrollToIndex(index) { const element = this.elements.spinner.children[index]; if (element) { - // Set the isScrolling flag before smooth scrolling begins - // and remove it when it has reached the destination. - // This prevents input box jump when input box changes values - this.state.isScrolling = true; element.scrollIntoView({ behavior: "smooth", block: "start" }); -- cgit v1.2.3