Skip to content

Commit 95e1872

Browse files
committed
Avoid flicker of home page when reloading instances: merge received list of instances with current ones to avoid component recreation.
1 parent c7e03d9 commit 95e1872

File tree

6 files changed

+49
-12
lines changed

6 files changed

+49
-12
lines changed

src/app/admin/components/sessions/sessions.component.html

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,11 @@
4949
<visa-tab-title-icon><clr-icon shape="grid-view" class="is-solid"></clr-icon></visa-tab-title-icon>
5050
<visa-tab-title>Grid view</visa-tab-title>
5151
<visa-tab-content>
52-
<div #gridContainer [ngClass]="{ 'admin-container--fullscreen' : isFullScreen()}">
53-
<div class="centered-content-area m-t-20" [hidden]="sessions.length > 0 || !loading">
54-
<clr-spinner [hidden]="!loading"></clr-spinner>
52+
<div #gridContainer class="sessions-content" [ngClass]="{ 'admin-container--fullscreen' : isFullScreen()}">
53+
<div class="sessions-spinner-outer" [hidden]="!loading">
54+
<div class="sessions-spinner">
55+
<clr-spinner></clr-spinner>
56+
</div>
5557
</div>
5658
<div class="blankslate" *ngIf="sessions.length === 0 && !loading">
5759
<div class="title">

src/app/admin/components/sessions/sessions.component.scss

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,22 @@
9797
background-color: #ea5f02;
9898
}
9999
}
100+
101+
.sessions-content {
102+
min-height: 150px;
103+
}
104+
105+
.sessions-spinner-outer {
106+
position: relative;
107+
width: 100%;
108+
}
109+
110+
.sessions-spinner {
111+
height: 150px;
112+
top: 16px;
113+
position: absolute;
114+
display: flex;
115+
justify-content: center;
116+
width: 100%;
117+
z-index: 999999;
118+
}

src/app/user/home/home.component.html

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,12 @@ <h3>Looks like you don't have any instances</h3>
5858
{{ experiment.startDate | date: 'MMM yyyy' }})
5959
</ng-option>
6060
</ng-select>
61-
<div class="centered-content-area m-t-20" [hidden]="!loading">
62-
<clr-spinner [hidden]="!loading"></clr-spinner>
61+
<div class="home-spinner-outer" [hidden]="!loading">
62+
<div class="home-spinner">
63+
<clr-spinner></clr-spinner>
64+
</div>
6365
</div>
64-
<visa-tabs [hidden]="loading">
66+
<visa-tabs>
6567
<visa-tab>
6668
<visa-tab-title>My instances <span class="label">{{ (instances | instanceFilterPipe: ['OWNER']: selectedExperiment).length }}</span></visa-tab-title>
6769
<visa-tab-actions>

src/app/user/home/home.component.scss

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,15 @@
66
padding-top: 8px;
77
padding-bottom: 8px;
88
}
9+
10+
.home-spinner-outer {
11+
position: relative;
12+
width: 100%;
13+
}
14+
15+
.home-spinner {
16+
position: absolute;
17+
display: flex;
18+
justify-content: center;
19+
width: 100%;
20+
}

src/app/user/home/home.component.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ export class HomeComponent implements OnInit, OnDestroy {
138138
public refresh(): void {
139139
this.loading = true;
140140
this.accountService.getInstances().subscribe((instances) => {
141-
this.instances = instances;
141+
this.mergeInstances(instances);
142142
this.experiments = [].concat(...instances.map(instance => instance.experiments))
143143
.filter((v, i, a) => {
144144
return a.findIndex(t => (t.id === v.id)) === i;
@@ -156,6 +156,13 @@ export class HomeComponent implements OnInit, OnDestroy {
156156
this.refresh$.next();
157157
}
158158

159+
private mergeInstances(instances: Instance[]) {
160+
const originalMap = new Map(this.instances.map(instance => [instance.id, instance]));
161+
this.instances = instances.map(newInstance => {
162+
return originalMap.get(newInstance.id) || newInstance;
163+
});
164+
}
165+
159166
private bindEventGatewayListeners(): void {
160167
this._gatewayEventSubscriber = this.eventsGateway.subscribe()
161168
.on('user:instances_changed', _ => {

src/assets/stylesheets/application.scss

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,8 +1086,3 @@ $visa-theme: mat.define-light-theme((
10861086
margin: 0 0 10px !important;
10871087
}
10881088

1089-
.centered-content-area {
1090-
display: flex;
1091-
justify-content: center;
1092-
align-items: center;
1093-
}

0 commit comments

Comments
 (0)