Add auto reloading to change list view
Change-Id: I39b0e479226c15babe2d1bb2a0d0b7629e3366cc
diff --git a/polygerrit-ui/app/constants/constants.ts b/polygerrit-ui/app/constants/constants.ts
index 2acad49..8f94b38 100644
--- a/polygerrit-ui/app/constants/constants.ts
+++ b/polygerrit-ui/app/constants/constants.ts
@@ -304,3 +304,5 @@
theme: 'DEFAULT',
};
}
+
+export const RELOAD_DASHBOARD_INTERVAL_MS = 10 * 1000;
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts
index fae518a..2360312 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts
@@ -39,6 +39,7 @@
import {fireTitleChange} from '../../../utils/event-util';
import {appContext} from '../../../services/app-context';
import {GerritView} from '../../../services/router/router-model';
+import {RELOAD_DASHBOARD_INTERVAL_MS} from '../../../constants/constants';
const LOOKUP_QUERY_PATTERNS: RegExp[] = [
/^\s*i?[0-9a-f]{7,40}\s*$/i, // CHANGE_ID
@@ -112,16 +113,25 @@
private reporting = appContext.reportingService;
+ private lastVisibleTimestampMs = 0;
+
constructor() {
super();
this.addEventListener('next-page', () => this._handleNextPage());
this.addEventListener('previous-page', () => this._handlePreviousPage());
- this.addEventListener('reload', () => {
- this._loading = true;
- this._getChanges().then(changes => {
- this._changes = changes || [];
- this._loading = false;
- });
+ this.addEventListener('reload', () => this.reload());
+ // We are not currently verifying if the view is actually visible. We rely
+ // on gr-app-element to restamp the component if view changes
+ document.addEventListener('visibilitychange', () => {
+ if (document.visibilityState === 'visible') {
+ if (
+ Date.now() - this.lastVisibleTimestampMs >
+ RELOAD_DASHBOARD_INTERVAL_MS
+ )
+ this.reload();
+ } else {
+ this.lastVisibleTimestampMs = Date.now();
+ }
});
}
@@ -130,6 +140,15 @@
this._loadPreferences();
}
+ reload() {
+ if (this._loading) return;
+ this._loading = true;
+ this._getChanges().then(changes => {
+ this._changes = changes || [];
+ this._loading = false;
+ });
+ }
+
_paramsChanged(value: AppElementParams) {
if (value.view !== GerritView.SEARCH) return;
diff --git a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts
index c341dea..456b7cf 100644
--- a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts
+++ b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts
@@ -54,9 +54,9 @@
import {DashboardViewState} from '../../../types/types';
import {firePageError, fireTitleChange} from '../../../utils/event-util';
import {GerritView} from '../../../services/router/router-model';
+import {RELOAD_DASHBOARD_INTERVAL_MS} from '../../../constants/constants';
const PROJECT_PLACEHOLDER_PATTERN = /\${project}/g;
-const RELOAD_DASHBOARD_INTERVAL_MS = 10 * 1000;
export interface GrDashboardView {
$: {
@@ -122,12 +122,9 @@
constructor() {
super();
- }
-
- override connectedCallback() {
- super.connectedCallback();
- this._loadPreferences();
this.addEventListener('reload', () => this._reload(this.params));
+ // We are not currently verifying if the view is actually visible. We rely
+ // on gr-app-element to restamp the component if view changes
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'visible') {
if (
@@ -141,6 +138,11 @@
});
}
+ override connectedCallback() {
+ super.connectedCallback();
+ this._loadPreferences();
+ }
+
_loadPreferences() {
return this.restApiService.getLoggedIn().then(loggedIn => {
if (loggedIn) {