Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 3x 2x 1x 1x 2x 1x 1x 2x 2x 1x 2x 2x 1x 1x 1x | import { Component, OnDestroy, OnInit } from '@angular/core';
import { ActivatedRoute, Router, RouterLink } from '@angular/router';
import { JobService } from '@core/services/job.service';
import { catchError, Subject, take, takeUntil, tap } from 'rxjs';
import { Job } from '@core/model/job.interface';
import { Title } from '@angular/platform-browser';
import { ActivityType } from '@core/model/activity-type';
import { MatButton, MatIconButton } from '@angular/material/button';
import { ConfirmDialogService } from '@core/services/confirm-dialog.service';
import { MatCardModule } from '@angular/material/card';
import { ModalService } from '@core/services/modal.service';
import { NotificationService } from '@core/services/notification.service';
import { ApiError } from '@core/errors/api-error';
import { JobAttachmentsComponent } from '@features/jobs/job-attachments/job-attachments.component';
import { JobActivitiesComponent } from "@features/jobs/job-activities/job-activities.component";
import { JobSummaryComponent } from '@features/jobs/job-summary/job-summary.component';
import { MatIcon } from '@angular/material/icon';
import { MatTooltip } from '@angular/material/tooltip';
import { ErrorProcessorService } from '@core/services/error-processor.service';
import { JobEditableFieldComponent } from '../job-editable-field/job-editable-field.component';
@Component({
selector: 'app-job-detail',
imports: [JobSummaryComponent, MatCardModule, MatButton, JobAttachmentsComponent, JobActivitiesComponent, MatButton, MatIconButton, MatIcon, MatTooltip, RouterLink, JobEditableFieldComponent],
templateUrl: './job-detail.component.html',
styleUrl: './job-detail.component.scss'
})
export class JobDetailComponent implements OnInit, OnDestroy {
private destroy$: Subject<boolean> = new Subject<boolean>();
public job!: Job;
public ActivityType = ActivityType;
constructor(
private router: Router,
private activatedRoute: ActivatedRoute,
private jobService: JobService,
private confirmDialogService: ConfirmDialogService,
private modalService: ModalService,
private notificationService: NotificationService,
private title: Title,
private errorProcessorService: ErrorProcessorService
) {}
private loadJob(jobId: string): void {
this.jobService.getJobById(jobId).pipe(
take(1),
// set page title once the job is available
tap((job: Job) =>{
this.title.setTitle(`Job - ${job.title}`);
}),
catchError((error: ApiError) => {
this.router.navigate(["/jobs"]);
return this.errorProcessorService.processError(error);
})
).subscribe((job) => this.job = job);
}
reloadJob(job: Job) {
this.loadJob(job.id);
}
ngOnDestroy(): void {
this.destroy$.next(true);
}
ngOnInit(): void {
this.activatedRoute.params
.pipe(takeUntil(this.destroy$))
.subscribe(params => {
this.loadJob(params['id']);
});
}
editJob(job: Job) :void {
this.modalService.openJobModal('job', job, () => this.loadJob(job.id))
}
// job changed from child component
onJobChanged(job: Job): void {
this.job = job;
}
onDelete(job: Job) :void {
this.notificationService.confirmation($localize`:@@job.deleted:Job successfully deleted.`);
this.router.navigate(["/jobs"]);
}
confirmDeleteJob(job: Job) :void {
this.jobService.deleteJob(job.id).pipe(
take(1),
tap(() => {
this.onDelete(job);
})
).subscribe();
}
deleteJob(job: Job) :void {
this.confirmDialogService.openConfirmDialog($localize `:@@warning.job.delete:Delete job "${job.title}" ? All data will be lost.`, () => this.confirmDeleteJob(job));
}
}
|