Replace Polymer Legacy this.debounce with simple debounce utility
Change-Id: I23e4388d047062cb093144978d0c3a646bf8517f
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.ts b/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.ts
index fb28e2b..5ccb3b3 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.ts
@@ -30,6 +30,7 @@
import {GrDiffBuilderElement} from '../gr-diff-builder/gr-diff-builder-element';
import {FILE} from '../gr-diff/gr-diff-line';
import {getRange, getSide} from '../gr-diff/gr-diff-utils';
+import {debounce, DelayedTask} from '../../../utils/async-util';
interface SidedRange {
side: Side;
@@ -53,8 +54,6 @@
rootId: string;
}
-const DEBOUNCER_SELECTION_CHANGE = 'selectionChange';
-
@customElement('gr-diff-highlight')
export class GrDiffHighlight extends LegacyElementMixin(PolymerElement) {
static get template() {
@@ -73,6 +72,8 @@
@property({type: Object, notify: true})
selectedRange?: SidedRange;
+ private selectionChangeTask?: DelayedTask;
+
/** @override */
created() {
super.created();
@@ -89,7 +90,7 @@
/** @override */
disconnectedCallback() {
- this.cancelDebouncer(DEBOUNCER_SELECTION_CHANGE);
+ this.selectionChangeTask?.cancel();
super.disconnectedCallback();
}
@@ -127,8 +128,8 @@
// quick 'c' press after the selection change. If you wait less than 10
// ms, then you will have about 50 _handleSelection calls when doing a
// simple drag for select.
- this.debounce(
- DEBOUNCER_SELECTION_CHANGE,
+ this.selectionChangeTask = debounce(
+ this.selectionChangeTask,
() => this._handleSelection(selection, isMouseUp),
10
);
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
index 0bb7e7e..53a2404 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
@@ -158,6 +158,7 @@
element.reload();
// Multiple cascading microtasks are scheduled.
await flush();
+ await flush();
// Reporting can be called with other parameters (ex. PluginsLoaded),
// but only 'Diff Total Render' is important in this test.
assert.equal(
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts
index 178f1aa..4b91ead 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts
@@ -32,6 +32,7 @@
import {customElement, property} from '@polymer/decorators';
import {DiffContent} from '../../../types/diff';
import {Side} from '../../../constants/constants';
+import {debounce, DelayedTask} from '../../../utils/async-util';
const WHOLE_FILE = -1;
@@ -63,8 +64,6 @@
*/
const MAX_GROUP_SIZE = 120;
-const DEBOUNCER_RESET_IS_SCROLLING = 'resetIsScrolling';
-
/**
* Converts the API's `DiffContent`s to `GrDiffGroup`s for rendering.
*
@@ -113,6 +112,8 @@
@property({type: Boolean})
_isScrolling?: boolean;
+ private resetIsScrollingTask?: DelayedTask;
+
/** @override */
connectedCallback() {
super.connectedCallback();
@@ -121,7 +122,7 @@
/** @override */
disconnectedCallback() {
- this.cancelDebouncer(DEBOUNCER_RESET_IS_SCROLLING);
+ this.resetIsScrollingTask?.cancel();
this.cancel();
window.removeEventListener('scroll', this.handleWindowScroll);
super.disconnectedCallback();
@@ -129,11 +130,9 @@
private readonly handleWindowScroll = () => {
this._isScrolling = true;
- this.debounce(
- DEBOUNCER_RESET_IS_SCROLLING,
- () => {
- this._isScrolling = false;
- },
+ this.resetIsScrollingTask = debounce(
+ this.resetIsScrollingTask,
+ () => (this._isScrolling = false),
50
);
};
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts
index d36c1fd..3ee87c0 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts
@@ -75,6 +75,7 @@
} from '../../../api/diff';
import {isSafari} from '../../../utils/dom-util';
import {assertIsDefined} from '../../../utils/common-util';
+import {debounce, DelayedTask} from '../../../utils/async-util';
const NO_NEWLINE_BASE = 'No newline at end of base file.';
const NO_NEWLINE_REVISION = 'No newline at end of revision file.';
@@ -92,8 +93,6 @@
*/
const COMMIT_MSG_LINE_LENGTH = 72;
-const RENDER_DIFF_TABLE_DEBOUNCE_NAME = 'renderDiffTable';
-
export interface LineOfInterest {
number: number;
leftSide: boolean;
@@ -283,6 +282,8 @@
@property({type: Array})
layers?: DiffLayer[];
+ private renderDiffTableTask?: DelayedTask;
+
/** @override */
created() {
super.created();
@@ -302,7 +303,7 @@
/** @override */
disconnectedCallback() {
- this.cancelDebouncer(RENDER_DIFF_TABLE_DEBOUNCE_NAME);
+ this.renderDiffTableTask?.cancel();
this._unobserveIncrementalNodes();
this._unobserveNodes();
super.disconnectedCallback();
@@ -475,7 +476,7 @@
/** Cancel any remaining diff builder rendering work. */
cancel() {
this.$.diffBuilder.cancel();
- this.cancelDebouncer(RENDER_DIFF_TABLE_DEBOUNCE_NAME);
+ this.renderDiffTableTask?.cancel();
}
getCursorStops(): Array<HTMLElement | AbortStop> {
@@ -774,7 +775,7 @@
* render once.
*/
_debounceRenderDiffTable() {
- this.debounce(RENDER_DIFF_TABLE_DEBOUNCE_NAME, () =>
+ this.renderDiffTableTask = debounce(this.renderDiffTableTask, () =>
this._renderDiffTable()
);
}
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js
index c6bd8d6..1827def 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js
@@ -660,14 +660,14 @@
change_type: 'MODIFIED',
content: [{skip: 66}],
};
- element.flushDebouncer('renderDiffTable');
+ element.renderDiffTableTask.flush();
});
test('change in preferences re-renders diff', () => {
sinon.stub(element, '_renderDiffTable');
element.prefs = {
...MINIMAL_PREFS, time_format: 'HHMM_12'};
- element.flushDebouncer('renderDiffTable');
+ element.renderDiffTableTask.flush();
assert.isTrue(element._renderDiffTable.called);
});
@@ -676,14 +676,14 @@
const newPrefs1 = {...MINIMAL_PREFS,
line_wrapping: true};
element.prefs = newPrefs1;
- element.flushDebouncer('renderDiffTable');
+ element.renderDiffTableTask.flush();
assert.isTrue(element._renderDiffTable.called);
stub.reset();
const newPrefs2 = {...newPrefs1};
delete newPrefs2.line_wrapping;
element.prefs = newPrefs2;
- element.flushDebouncer('renderDiffTable');
+ element.renderDiffTableTask.flush();
assert.isTrue(element._renderDiffTable.called);
});
@@ -693,7 +693,7 @@
element.noRenderOnPrefsChange = true;
element.prefs = {
...MINIMAL_PREFS, time_format: 'HHMM_12'};
- element.flushDebouncer('renderDiffTable');
+ element.renderDiffTableTask.flush();
assert.isFalse(element._renderDiffTable.called);
});
});