Resolves #1198
Showing 4 of 7 files from the diff.
Other files ignored by Codecov
@@ -12,6 +12,7 @@
Loading
12 | 12 | import { TaskSchedulesDestroyComponent } from '../task-schedules-destroy/task-schedules-destroy.component'; |
|
13 | 13 | import { ViewChild } from '@angular/core'; |
|
14 | 14 | import { ListBarComponent } from '../../shared/components/list/list-bar.component'; |
|
15 | + | import { TasksTabulationComponent } from '../components/tasks-tabulation/tasks-tabulation.component'; |
|
15 | 16 | ||
16 | 17 | /** |
|
17 | 18 | * Provides {@link TaskSchedule} related services. |
@@ -37,6 +38,12 @@
Loading
37 | 38 | @ViewChild('listBar', { static: true }) |
|
38 | 39 | listBar: ListBarComponent; |
|
39 | 40 | ||
41 | + | /** |
|
42 | + | * Tabulation |
|
43 | + | */ |
|
44 | + | @ViewChild('tasksTabulation', { static: false }) |
|
45 | + | tasksTabulation: TasksTabulationComponent; |
|
46 | + | ||
40 | 47 | /** |
|
41 | 48 | * Unsubscribe |
|
42 | 49 | */ |
@@ -212,6 +219,10 @@
Loading
212 | 219 | this.notificationService.error(error); |
|
213 | 220 | } |
|
214 | 221 | ); |
|
222 | + | ||
223 | + | if (this.tasksTabulation) { |
|
224 | + | this.tasksTabulation.forceRefresh(); |
|
225 | + | } |
|
215 | 226 | } |
|
216 | 227 | ||
217 | 228 | /** |
@@ -20,6 +20,7 @@
Loading
20 | 20 | import { ListBarComponent } from '../../shared/components/list/list-bar.component'; |
|
21 | 21 | import { AuthService } from '../../auth/auth.service'; |
|
22 | 22 | import { AppsService } from '../../apps/apps.service'; |
|
23 | + | import { TasksTabulationComponent } from '../components/tasks-tabulation/tasks-tabulation.component'; |
|
23 | 24 | ||
24 | 25 | /** |
|
25 | 26 | * Provides {@link TaskDefinition} related services. |
@@ -53,6 +54,12 @@
Loading
53 | 54 | @ViewChild('listBar', { static: true }) |
|
54 | 55 | listBar: ListBarComponent; |
|
55 | 56 | ||
57 | + | /** |
|
58 | + | * Tabulation |
|
59 | + | */ |
|
60 | + | @ViewChild('tasksTabulation', { static: false }) |
|
61 | + | tasksTabulation: TasksTabulationComponent; |
|
62 | + | ||
56 | 63 | /** |
|
57 | 64 | * Modal reference |
|
58 | 65 | */ |
@@ -281,6 +288,10 @@
Loading
281 | 288 | this.notificationService.error(AppError.is(error) ? error.getMessage() : error); |
|
282 | 289 | } |
|
283 | 290 | ); |
|
291 | + | ||
292 | + | if (this.tasksTabulation) { |
|
293 | + | this.tasksTabulation.forceRefresh(); |
|
294 | + | } |
|
284 | 295 | } |
|
285 | 296 | ||
286 | 297 | /** |
@@ -1,4 +1,4 @@
Loading
1 | - | import { Component, OnInit, OnDestroy } from '@angular/core'; |
|
1 | + | import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core'; |
|
2 | 2 | import { Router } from '@angular/router'; |
|
3 | 3 | import { Page } from '../../shared/model/page'; |
|
4 | 4 | import { TaskExecution } from '../model/task-execution'; |
@@ -12,6 +12,7 @@
Loading
12 | 12 | import { AppError } from '../../shared/model/error.model'; |
|
13 | 13 | import { AuthService } from '../../auth/auth.service'; |
|
14 | 14 | import { TaskDefinition } from '../model/task-definition'; |
|
15 | + | import { TasksTabulationComponent } from '../components/tasks-tabulation/tasks-tabulation.component'; |
|
15 | 16 | ||
16 | 17 | /** |
|
17 | 18 | * Component that display the Task Executions. |
@@ -37,6 +38,11 @@
Loading
37 | 38 | */ |
|
38 | 39 | private ngUnsubscribe$: Subject<any> = new Subject(); |
|
39 | 40 | ||
41 | + | /** |
|
42 | + | * Tabulation |
|
43 | + | */ |
|
44 | + | @ViewChild('tasksTabulation', { static: false }) |
|
45 | + | tasksTabulation: TasksTabulationComponent; |
|
40 | 46 | ||
41 | 47 | /** |
|
42 | 48 | * State of App List Params |
@@ -162,6 +168,10 @@
Loading
162 | 168 | this.notificationService.error(AppError.is(error) ? error.getMessage() : error); |
|
163 | 169 | } |
|
164 | 170 | ); |
|
171 | + | ||
172 | + | if (this.tasksTabulation) { |
|
173 | + | this.tasksTabulation.forceRefresh(); |
|
174 | + | } |
|
165 | 175 | } |
|
166 | 176 | ||
167 | 177 | /** |
@@ -1,5 +1,5 @@
Loading
1 | 1 | import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; |
|
2 | - | import { Observable, forkJoin } from 'rxjs'; |
|
2 | + | import { Observable, forkJoin, BehaviorSubject } from 'rxjs'; |
|
3 | 3 | import { TasksService } from '../../tasks.service'; |
|
4 | 4 | import { map, mergeMap, share } from 'rxjs/operators'; |
|
5 | 5 | import { Page } from '../../../shared/model/page'; |
@@ -27,6 +27,8 @@
Loading
27 | 27 | ||
28 | 28 | counters$: Observable<any>; |
|
29 | 29 | ||
30 | + | hardRefresh: BehaviorSubject<any> = new BehaviorSubject(new Date()); |
|
31 | + | ||
30 | 32 | /** |
|
31 | 33 | * Constructor |
|
32 | 34 | * |
@@ -45,12 +47,24 @@
Loading
45 | 47 | this.refresh(); |
|
46 | 48 | } |
|
47 | 49 | ||
50 | + | forceRefresh() { |
|
51 | + | this.hardRefresh.next(new Date()) |
|
52 | + | } |
|
53 | + | ||
48 | 54 | refresh() { |
|
49 | 55 | this.params$ = this.sharedAboutService.getFeatureInfo() |
|
50 | 56 | .pipe(map((featureInfo: FeatureInfo) => ({ |
|
51 | 57 | schedulesEnabled: featureInfo.schedulesEnabled |
|
52 | 58 | }))); |
|
53 | 59 | this.counters$ = this.sharedAboutService.getFeatureInfo() |
|
60 | + | .pipe(mergeMap( |
|
61 | + | (featureInfo: FeatureInfo) => { |
|
62 | + | return this.hardRefresh.pipe(map((a) => { |
|
63 | + | return featureInfo; |
|
64 | + | } |
|
65 | + | )); |
|
66 | + | } |
|
67 | + | )) |
|
54 | 68 | .pipe(mergeMap( |
|
55 | 69 | (featureInfo: FeatureInfo) => { |
|
56 | 70 | const arr = []; |
Files | Coverage |
---|---|
ui/src | 72.76% |
Project Totals (244 files) | 72.76% |
1979.1
TRAVIS_JDK_VERSION=oraclejdk8 TRAVIS_OS_NAME=linux
1973.1
TRAVIS_JDK_VERSION=oraclejdk8 TRAVIS_OS_NAME=linux
1981.1
TRAVIS_JDK_VERSION=oraclejdk8 TRAVIS_OS_NAME=linux
1980.1
TRAVIS_JDK_VERSION=oraclejdk8 TRAVIS_OS_NAME=linux
1983.1
TRAVIS_JDK_VERSION=oraclejdk8 TRAVIS_OS_NAME=linux
1982.1
TRAVIS_JDK_VERSION=oraclejdk8 TRAVIS_OS_NAME=linux
1985.1
TRAVIS_JDK_VERSION=oraclejdk8 TRAVIS_OS_NAME=linux
1984.1
TRAVIS_JDK_VERSION=oraclejdk8 TRAVIS_OS_NAME=linux
1986.1
TRAVIS_JDK_VERSION=oraclejdk8 TRAVIS_OS_NAME=linux
Sunburst
The inner-most circle is the entire project, moving away from the center are folders then, finally, a single file.
The size and color of each slice is representing the number of statements and the coverage, respectively.
Icicle
The top section represents the entire project. Proceeding with folders and finally individual files.
The size and color of each slice is representing the number of statements and the coverage, respectively.