@@ -9,12 +9,14 @@ import {
9
9
YearsService
10
10
} from '../../../services' ;
11
11
import { AdminTask , AdminTaskDeployResponse , Wave } from '../../../../api/backend' ;
12
- import { BehaviorSubject , combineLatest , Observable , of , timer } from 'rxjs' ;
13
- import { filter , map , mergeMap , take , tap } from 'rxjs/operators' ;
12
+ import { BehaviorSubject , combineLatest , Observable , of , Subject , timer } from 'rxjs' ;
13
+ import { distinctUntilChanged , filter , map , mergeMap , shareReplay , take , tap } from 'rxjs/operators' ;
14
14
import { IAdminTask } from '../../../models' ;
15
- import { Utils } from '../../../util' ;
15
+ import { SubscribedComponent , Utils } from '../../../util' ;
16
+ import { ActivatedRoute , Router } from '@angular/router' ;
16
17
17
18
interface WaveTasks {
19
+ shown : boolean ,
18
20
wave : Wave ,
19
21
tasks : Observable < IAdminTask > [ ]
20
22
}
@@ -25,7 +27,7 @@ interface WaveTasks {
25
27
styleUrls : [ './page-admin-tasks.component.scss' ] ,
26
28
changeDetection : ChangeDetectionStrategy . OnPush
27
29
} )
28
- export class PageAdminTasksComponent implements OnInit {
30
+ export class PageAdminTasksComponent extends SubscribedComponent implements OnInit {
29
31
@ViewChild ( 'modalDeployLog' , { static : true } )
30
32
modalDeployLog : TemplateRef < unknown > ;
31
33
@@ -35,6 +37,9 @@ export class PageAdminTasksComponent implements OnInit {
35
37
private readonly taskDeployQueue : { task : AdminTask , button : HTMLButtonElement } [ ] = [ ] ;
36
38
37
39
waveTasks$ : Observable < WaveTasks [ ] > ;
40
+ waveTasksShown$ : Observable < WaveTasks [ ] > ;
41
+ waveFilter : Subject < number | null > = new BehaviorSubject < number | null > ( null ) ;
42
+ readonly waveFilter$ : Observable < number | null > = this . waveFilter . asObservable ( ) ;
38
43
39
44
constructor (
40
45
private years : YearsService ,
@@ -45,11 +50,21 @@ export class PageAdminTasksComponent implements OnInit {
45
50
private backend : BackendService ,
46
51
private modal : ModalService ,
47
52
private adminTasks : AdminTaskService ,
53
+ private router : Router ,
54
+ private route : ActivatedRoute
48
55
) {
56
+ super ( ) ;
49
57
}
50
58
51
59
ngOnInit ( ) : void {
52
- this . waveTasks$ = this . years . adminTasks$ . pipe (
60
+ this . subscribe ( this . route . queryParams . pipe (
61
+ map ( params => params [ 'wave' ] ) ,
62
+ map ( ( waveId ) => isNaN ( + waveId ) ? null : + waveId ) ,
63
+ distinctUntilChanged ( ) ,
64
+ tap ( ( waveId ) => this . waveFilter . next ( waveId ) )
65
+ ) ) ;
66
+
67
+ const allWaveTasks$ = this . years . adminTasks$ . pipe (
53
68
mergeMap ( ( tasks ) => {
54
69
const waveIdTasks : { [ waveId : number ] : Observable < IAdminTask > [ ] } = { } ;
55
70
tasks . forEach ( ( task ) => {
@@ -74,7 +89,25 @@ export class PageAdminTasksComponent implements OnInit {
74
89
} ) ,
75
90
map ( ( waveTasks ) => {
76
91
return waveTasks . sort ( ( a , b ) => b . wave . id - a . wave . id ) ;
77
- } )
92
+ } ) ,
93
+ shareReplay ( 1 )
94
+ ) ;
95
+
96
+ this . waveTasks$ = combineLatest ( [ allWaveTasks$ , this . waveFilter$ ] ) . pipe (
97
+ map ( ( [ waveTasks , waveFilter ] ) => {
98
+ return waveTasks . map ( ( waveTask ) => {
99
+ return {
100
+ shown : waveFilter === null || waveTask . wave . id === waveFilter ,
101
+ wave : waveTask . wave ,
102
+ tasks : waveTask . tasks
103
+ } ;
104
+ } ) ;
105
+ } ) ,
106
+ shareReplay ( 1 )
107
+ ) ;
108
+
109
+ this . waveTasksShown$ = this . waveTasks$ . pipe (
110
+ map ( ( waveTasks ) => waveTasks . filter ( ( waveTask ) => waveTask . shown ) )
78
111
) ;
79
112
this . title . subtitle = 'admin.root.tasks.title' ;
80
113
}
@@ -144,4 +177,14 @@ export class PageAdminTasksComponent implements OnInit {
144
177
)
145
178
. subscribe ( ) ;
146
179
}
180
+
181
+ filterWave ( event : Event ) : Promise < boolean > {
182
+ const waveId = + ( event . target as HTMLSelectElement ) . value ;
183
+
184
+ return this . router . navigate ( [ ] , {
185
+ relativeTo : this . route ,
186
+ queryParams : { wave : waveId === - 1 ? null : waveId } ,
187
+ queryParamsHandling : 'merge' // Merge with existing query params
188
+ } ) ;
189
+ }
147
190
}
0 commit comments