Skip to content

Commit 44784b6

Browse files
committed
[NAE-1758] Task on single task view is not rendering
- added virtual scroll viewport to wrap expansion panel
1 parent 47107d4 commit 44784b6

File tree

2 files changed

+41
-30
lines changed

2 files changed

+41
-30
lines changed

projects/netgrif-components-core/src/lib/view/task-view/abstract-single-task-view.component.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Component, Input, OnDestroy } from '@angular/core';
22
import { AbstractViewWithHeadersComponent } from '../abstract/view-with-headers';
3-
import { Observable, Subject, Subscription } from 'rxjs';
3+
import { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';
44
import { TaskPanelData } from '../../panel/task-panel-list/task-panel-data/task-panel-data';
55
import { TaskViewService } from './service/task-view.service';
66
import { map, takeUntil } from 'rxjs/operators';
@@ -18,22 +18,26 @@ export abstract class AbstractSingleTaskViewComponent extends AbstractViewWithHe
1818

1919
@Input() initiallyExpanded: boolean = true;
2020
@Input() preventCollapse: boolean = true;
21-
public task$: Observable<TaskPanelData>;
21+
public taskPanelData: BehaviorSubject<TaskPanelData>;
2222
public loading$: Observable<boolean>;
2323
private transitionId: string;
2424
private subRoute: Subscription;
25-
protected unsubscribe$: Subject<void>;
25+
protected subPanelData: Subscription;
2626

2727
protected constructor(protected taskViewService: TaskViewService,
2828
activatedRoute: ActivatedRoute) {
2929
super(taskViewService, activatedRoute);
30-
this.unsubscribe$ = new Subject<void>();
30+
this.subPanelData = new Subscription();
31+
this.taskPanelData = new BehaviorSubject<TaskPanelData>(undefined);
3132
this.subRoute = this._activatedRoute.paramMap.subscribe(paramMap => {
3233
if (!!(paramMap?.['params']?.[TaskConst.TRANSITION_ID])) {
3334
this.transitionId = paramMap['params'][TaskConst.TRANSITION_ID];
34-
this.task$ = this.taskViewService.tasks$.pipe(map<Array<TaskPanelData>, TaskPanelData>(tasks => {
35-
return this.resolveTransitionTask(tasks);
36-
}), takeUntil(this.unsubscribe$));
35+
this.subPanelData = this.taskViewService.tasks$.subscribe(tasks => {
36+
if (!!tasks && tasks.length > 0) {
37+
this.taskPanelData.next(this.resolveTransitionTask(tasks));
38+
}
39+
});
40+
console.log('resolveTransition: ' + this.transitionId);
3741
}
3842
});
3943
this.loading$ = this.taskViewService.loading$;
@@ -42,15 +46,19 @@ export abstract class AbstractSingleTaskViewComponent extends AbstractViewWithHe
4246
ngOnDestroy() {
4347
super.ngOnDestroy();
4448
this.subRoute.unsubscribe();
45-
this.unsubscribe$.next();
46-
this.unsubscribe$.complete();
49+
this.subPanelData.unsubscribe();
50+
}
51+
52+
get task$(): Observable<TaskPanelData> {
53+
return this.taskPanelData.asObservable();
4754
}
4855

4956
private resolveTransitionTask(tasks: Array<TaskPanelData>): TaskPanelData {
5057
const transitionTask = tasks.find(t => t.task.transitionId === this.transitionId);
5158
if (!!transitionTask) {
5259
transitionTask.initiallyExpanded = transitionTask.task.finishDate === undefined;
5360
}
61+
console.log('resolveTransitionTask: ' + transitionTask)
5462
return transitionTask;
5563
}
5664
}

projects/netgrif-components/src/lib/panel/task-panel-single/single-task.component.html

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,30 @@
77
<span class='font-size-20'>{{ 'tasks.view.noTasksSatisfyingThisFilter' | translate }}</span>
88
</div>
99

10-
<div class='full-width full-heigh task-tab-background' fxFlex='100'>
11-
<div *ngTemplateOutlet='pageHeader ?? defaultPageHeader'></div>
12-
<nc-task-panel
13-
[textEllipsis]='textEllipsis'
14-
[taskPanelData]='task' [selectedHeaders$]='selectedHeaders$'
15-
[forceLoadDataOnOpen]='forceLoadDataOnOpen'
16-
[responsiveBody]='responsiveBody'
17-
(taskEvent)='emitTaskEvent($event)'
18-
(panelRefOutput)='setPanelRef($event)'
19-
[preventCollapse]='preventCollapse'
20-
[hidePanelHeader]='hidePanelHeader'
21-
[actionButtonTemplates]='actionButtonTemplates'
22-
[actionRowJustifyContent]='actionRowJustifyContent'
23-
class='panel-expanded-spacing'>
24-
</nc-task-panel>
10+
<mat-accordion [multi]="false" class="full-width" fxFlex="100">
11+
<cdk-virtual-scroll-viewport itemSize="52" class="task-panel-scroll-container full-width full-height">
12+
<div *ngTemplateOutlet='pageHeader ?? defaultPageHeader'></div>
13+
<nc-task-panel
14+
[textEllipsis]='textEllipsis'
15+
[taskPanelData]='task'
16+
[selectedHeaders$]='selectedHeaders$'
17+
[forceLoadDataOnOpen]='forceLoadDataOnOpen'
18+
[responsiveBody]='responsiveBody'
19+
(taskEvent)='emitTaskEvent($event)'
20+
(panelRefOutput)='setPanelRef($event)'
21+
[preventCollapse]='preventCollapse'
22+
[hidePanelHeader]='hidePanelHeader'
23+
[actionButtonTemplates]='actionButtonTemplates'
24+
[actionRowJustifyContent]='actionRowJustifyContent'
25+
class='panel-expanded-spacing'>
26+
</nc-task-panel>
2527

26-
<div *ngIf='loading$ | async' fxLayout='column' fxLayoutAlign='center center'>
27-
<mat-spinner color='primary' diameter='52'></mat-spinner>
28-
</div>
29-
<div *ngTemplateOutlet='pageFooter ?? defaultPageFooter'></div>
30-
</div>
28+
<div *ngIf='loading$ | async' fxLayout='column' fxLayoutAlign='center center'>
29+
<mat-spinner color='primary' diameter='52'></mat-spinner>
30+
</div>
31+
<div *ngTemplateOutlet='pageFooter ?? defaultPageFooter'></div>
32+
</cdk-virtual-scroll-viewport>
33+
</mat-accordion>
3134

3235
<ng-template #defaultPageHeader>
3336
<mat-card class="top-card">
@@ -36,7 +39,7 @@
3639
</ng-template>
3740

3841
<ng-template #defaultPageFooter>
39-
<mat-card class='bootom-card footer'>
42+
<mat-card class='bottom-card footer'>
4043
<span class="bottom-card-title footer-font"><strong>{{footerText ?? 'tasks.footer.defaultText' | translate}}</strong></span>
4144
</mat-card>
4245
</ng-template>

0 commit comments

Comments
 (0)