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 | 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 2x 24x 6x 6x 1x 3x 2x 2x 2x 2x 2x 1x 1x 1x 1x 1x 1x 1x | import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { FormArray, FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { JobService } from '@core/services/job.service'; import { Job } from '@core/model/job.interface'; import { catchError, take } from 'rxjs'; import { ApiError } from '@core/errors/api-error'; import { CreateJobActivitiesRequest } from '@core/model/create-job-activities-request.interface'; import { NotificationService } from '@core/services/notification.service'; import { CreateJobActivityRequest } from '@core/model/create-job-activity-request.interface'; import { MatButton } from '@angular/material/button'; import { UserActitivityType } from '@core/model/activity-type'; import { ActivityLabelPipe } from '@core/pipe/activity-label.pipe'; import { MatOption, MatSelect } from '@angular/material/select'; import { MatIcon } from '@angular/material/icon'; import { ErrorProcessorService } from '@core/services/error-processor.service'; import { TranslatorService } from '@app/core/services/translator.service'; @Component({ selector: 'app-job-activities-form', imports: [ActivityLabelPipe, ReactiveFormsModule, MatFormField, MatInput, MatLabel, MatButton, MatSelect, MatOption, MatIcon], templateUrl: './job-actitivities-form.component.html', styleUrl: './job-actitivities-form.component.scss' }) export class JobActivitiesFormComponent implements OnInit { @Input({ required: true }) job!: Job; @Input() defaultActivities = 0; @Output() activitiesSaved = new EventEmitter<Job>(); loading = false; activityForm!: FormGroup; activityTypeKeys: string[] = []; constructor( private readonly fb: FormBuilder, private readonly jobService: JobService, private readonly notificationService: NotificationService, private readonly errorProcessorService: ErrorProcessorService, private readonly translatorService: TranslatorService) { this.activityTypeKeys = Object.keys(UserActitivityType); } ngOnInit(): void { this.activityForm = this.fb.group({ activities: this.fb.array([]) }); for(let a=0; a<this.defaultActivities; a++) { this.addActivity(); } } get activities(): FormArray { return this.activityForm.get('activities') as FormArray; } addActivity(): void { const activityGroup = this.fb.group({ type: ['', Validators.required], comment: ['', Validators.required], }); this.activities.push(activityGroup); } removeActivity(index: number): void { this.activities.removeAt(index); } submit(): void { if (this.activityForm.valid) { this.loading = true; const activities: {}[] = new Array(); this.activities.controls.forEach((activity, index) => { activities[index] = {'type': activity.value.type, 'comment': activity.value.comment} as CreateJobActivityRequest; }); this.jobService.createActivities(this.job.id, {activities: activities} as CreateJobActivitiesRequest).pipe( take(1), catchError( (error: ApiError) => { this.loading = false; // set an explicit error message error.message = $localize `:@@error.activities.creation:Activities could not be created.`+this.translatorService.translateError(error.message); return this.errorProcessorService.processError(error); } ) ) .subscribe((job) => { console.log('received job'); this.loading = false; this.notificationService.confirmation( activities.length > 1 ? $localize`:@@message.activities.created:${activities.length} activities created successfully` : $localize`:@@message.activity.created:Activity created successfully` ); this.activitiesSaved.emit(job); }); } } } |