Merge "Resolve some TODO(TS) in keyboard-shortcut-mixin"
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
index 58cf489..8b37cf0 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
@@ -171,7 +171,7 @@
import {takeUntil} from 'rxjs/operators';
import {aPluginHasRegistered$} from '../../../services/checks/checks-model';
import {Subject} from 'rxjs';
-import {debounce, DelayedTask} from '../../../utils/async-util';
+import {debounce, DelayedTask, throttleWrap} from '../../../utils/async-util';
import {Interaction, Timing} from '../../../constants/reporting';
import {ChangeStates} from '../../shared/gr-change-status/gr-change-status';
import {getRevertCreatedChangeIds} from '../../../utils/message-util';
@@ -603,7 +603,7 @@
/** @override */
connectedCallback() {
super.connectedCallback();
- this._throttledToggleChangeStar = this._throttleWrap(e =>
+ this._throttledToggleChangeStar = throttleWrap(e =>
this._handleToggleChangeStar(e as CustomKeyboardEvent)
);
this._getServerConfig().then(config => {
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
index dacd8e7..9004517 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
@@ -106,6 +106,7 @@
import {assertIsDefined} from '../../../utils/common-util';
import {toggleClass, getKeyboardEvent} from '../../../utils/dom-util';
import {CursorMoveResult} from '../../../api/core';
+import {throttleWrap} from '../../../utils/async-util';
const ERR_REVIEW_STATUS = 'Couldn’t change file review status.';
const MSG_LOADING_BLAME = 'Loading blame...';
@@ -342,7 +343,7 @@
/** @override */
connectedCallback() {
super.connectedCallback();
- this._throttledToggleFileReviewed = this._throttleWrap(e =>
+ this._throttledToggleFileReviewed = throttleWrap(e =>
this._handleToggleFileReviewed(e as CustomKeyboardEvent)
);
this._getLoggedIn().then(loggedIn => {
diff --git a/polygerrit-ui/app/mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin.ts b/polygerrit-ui/app/mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin.ts
index 555a256..3d5a208 100644
--- a/polygerrit-ui/app/mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin.ts
+++ b/polygerrit-ui/app/mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin.ts
@@ -120,8 +120,6 @@
const V_KEY_TIMEOUT_MS = 1000;
-const THROTTLE_INTERVAL_MS = 500;
-
/**
* Enum for all shortcut sections, where that shortcut should be applied to.
*/
@@ -675,8 +673,6 @@
if (!bindings) {
return null;
}
- // TODO(TS): should check base on length to differentiate two
- // cases
if (bindings[0] === SPECIAL_SHORTCUT.GO_KEY) {
return bindings
.slice(1)
@@ -851,13 +847,6 @@
return getKeyboardEvent(e);
}
- // TODO(TS): maybe remove, no reference in the code base
- getRootTarget(e: CustomKeyboardEvent) {
- // TODO(TS): worth checking if we can limit this to EventApi only
- // dom currently returns DomNativeApi|EventApi
- return (dom(getKeyboardEvent(e)) as EventApi).rootTarget;
- }
-
bindShortcut(shortcut: Shortcut, ...bindings: string[]) {
shortcutManager.bindShortcut(shortcut, ...bindings);
}
@@ -868,20 +857,6 @@
return desc && shortcut ? `${desc} (shortcut: ${shortcut})` : '';
}
- _throttleWrap(fn: (e: Event) => void) {
- let lastCall: number | undefined;
- return (e: Event) => {
- if (
- lastCall !== undefined &&
- Date.now() - lastCall < THROTTLE_INTERVAL_MS
- ) {
- return;
- }
- lastCall = Date.now();
- fn(e);
- };
- }
-
_addOwnKeyBindings(shortcut: Shortcut, handler: string) {
const bindings = shortcutManager.getBindingsForShortcut(shortcut);
if (!bindings) {
@@ -1128,8 +1103,6 @@
modifierPressed(event: CustomKeyboardEvent): boolean;
addKeyboardShortcutDirectoryListener(listener: ShortcutListener): void;
removeKeyboardShortcutDirectoryListener(listener: ShortcutListener): void;
- // TODO(TS): Remove underscore. Apparently not a private method.
- _throttleWrap(eventListener: EventListener): EventListener;
}
export function _testOnly_getShortcutManagerInstance() {
diff --git a/polygerrit-ui/app/utils/async-util.ts b/polygerrit-ui/app/utils/async-util.ts
index 2b36fee..c82f5e4 100644
--- a/polygerrit-ui/app/utils/async-util.ts
+++ b/polygerrit-ui/app/utils/async-util.ts
@@ -110,3 +110,23 @@
existingTask?.cancel();
return new DelayedTask(callback, waitMs);
}
+
+const THROTTLE_INTERVAL_MS = 500;
+
+/**
+ * Ensure only one call is made within THROTTLE_INTERVAL_MS and any call within
+ * this interval is ignored
+ */
+export function throttleWrap(fn: (e: Event) => void) {
+ let lastCall: number | undefined;
+ return (e: Event) => {
+ if (
+ lastCall !== undefined &&
+ Date.now() - lastCall < THROTTLE_INTERVAL_MS
+ ) {
+ return;
+ }
+ lastCall = Date.now();
+ fn(e);
+ };
+}