@@ -4,21 +4,23 @@ import { MatSort } from '@angular/material/sort';
44import { MatTableDataSource } from '@angular/material/table' ;
55import { composeFilterFunctions , filterDropdowns , dropdownsFill , filterSpecificFieldsByWord } from '../shared/table-helpers' ;
66import { Router , ActivatedRoute } from '@angular/router' ;
7- import { takeUntil } from 'rxjs/operators' ;
8- import { Subject , zip } from 'rxjs' ;
7+ import { takeUntil , map } from 'rxjs/operators' ;
8+ import { Subject , zip , forkJoin , of , Observable } from 'rxjs' ;
99import { SubmissionsService } from './submissions.service' ;
1010import { UserService } from '../shared/user.service' ;
1111import { findDocuments } from '../shared/mangoQueries' ;
1212import { DialogsLoadingService } from '../shared/dialogs/dialogs-loading.service' ;
1313import { CoursesService } from '../courses/courses.service' ;
1414import { DeviceInfoService , DeviceType } from '../shared/device-info.service' ;
15+ import { TeamsService } from '../teams/teams.service' ;
16+
1517const columnsByFilterAndMode = {
1618 exam : {
1719 grade : [ 'name' , 'courseTitle' , 'stepNum' , 'status' , 'grade' , 'user' , 'lastUpdateTime' , 'gradeTime' ]
1820 } ,
1921 survey : {
20- grade : [ 'name' , 'courseTitle' , 'stepNum' , 'status' , 'user' , 'lastUpdateTime' ] ,
21- survey : [ 'name' , 'courseTitle' , 'stepNum' , 'status' , 'lastUpdateTime' ]
22+ grade : [ 'name' , 'courseTitle' , 'stepNum' , 'teamInfo' , ' status', 'user' , 'lastUpdateTime' ] ,
23+ survey : [ 'name' , 'courseTitle' , 'stepNum' , 'teamInfo' , ' status', 'lastUpdateTime' ]
2224 }
2325} ;
2426
@@ -31,7 +33,7 @@ export class SubmissionsComponent implements OnInit, AfterViewChecked, OnDestroy
3133
3234 @Input ( ) isDialog = false ;
3335 @Input ( ) parentId : string ;
34- @Input ( ) displayedColumns = [ 'name' , 'courseTitle' , 'stepNum' , 'status' , 'user' , 'lastUpdateTime' , 'gradeTime' ] ;
36+ @Input ( ) displayedColumns = [ 'name' , 'courseTitle' , 'stepNum' , 'teamInfo' , ' status', 'user' , 'lastUpdateTime' , 'gradeTime' ] ;
3537 @Output ( ) submissionClick = new EventEmitter < any > ( ) ;
3638 @ViewChild ( MatPaginator ) paginator : MatPaginator ;
3739 @ViewChild ( MatSort ) sort : MatSort ;
@@ -60,6 +62,7 @@ export class SubmissionsComponent implements OnInit, AfterViewChecked, OnDestroy
6062 private coursesService : CoursesService ,
6163 private dialogsLoadingService : DialogsLoadingService ,
6264 private deviceInfoService : DeviceInfoService ,
65+ private teamsService : TeamsService
6366 ) {
6467 this . dialogsLoadingService . start ( ) ;
6568 this . deviceType = this . deviceInfoService . getDeviceType ( ) ;
@@ -89,13 +92,16 @@ export class SubmissionsComponent implements OnInit, AfterViewChecked, OnDestroy
8992 }
9093 return sList ;
9194 } , [ ] ) . map ( submission => this . appendCourseInfo ( submission , courses ) ) ;
92- // Sort in descending lastUpdateTime order, so the recent submission can be shown on the top
93- submissions . sort ( ( a , b ) => b . lastUpdateTime - a . lastUpdateTime ) ;
94- this . submissions . data = submissions . map ( submission => ( {
95- ...submission , submittedBy : this . submissionsService . submissionName ( submission . user )
96- } ) ) ;
97- this . dialogsLoadingService . stop ( ) ;
98- this . applyFilter ( '' ) ;
95+ forkJoin ( submissions . map ( s => this . appendTeamInfo$ ( s ) ) ) . subscribe ( subs => {
96+ // Sort in descending lastUpdateTime order, so the recent submission can be shown on the top
97+ subs . sort ( ( a , b ) => b . lastUpdateTime - a . lastUpdateTime ) ;
98+ this . submissions . data = subs . map ( submission => ( {
99+ ...submission ,
100+ submittedBy : this . submissionsService . submissionName ( submission . user )
101+ } ) ) ;
102+ this . dialogsLoadingService . stop ( ) ;
103+ this . applyFilter ( '' ) ;
104+ } ) ;
99105 } ) ;
100106 this . submissionsService . updateSubmissions ( { query : this . submissionQuery ( ) } ) ;
101107 this . setupTable ( ) ;
@@ -227,4 +233,9 @@ export class SubmissionsComponent implements OnInit, AfterViewChecked, OnDestroy
227233 return { ...submission , courseTitle : submissionCourse . doc . courseTitle , stepNum } ;
228234 }
229235
236+ appendTeamInfo$ ( submission ) : Observable < any > {
237+ if ( ! submission . team ) { return of ( { ...submission , teamName : '' } ) ; }
238+ return this . teamsService . getTeamName ( submission . team ) . pipe ( map ( ( teamInfo : any ) => ( { ...submission , teamInfo } ) ) ) ;
239+ }
240+
230241}
0 commit comments