timemanager/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.ts
Sebastian Böckelmann 49119b2549
All checks were successful
Java CI with Maven / build-and-push-frontend (push) Successful in 8s
Java CI with Maven / build-and-push-backend (push) Successful in 7s
Newly files in frontend for generating weekly repeating tasks
2024-03-16 09:31:17 +01:00

84 lines
2.7 KiB
TypeScript

import {Component, Inject, OnInit} from '@angular/core';
import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog";
import {TaskEntityInfo, TaskRepeatDayInfo, TaskRepeatWeekDayInfo, TaskseriesService} from "../../../api";
import * as moment from "moment";
import {FormArray, FormBuilder, FormGroup, Validators} from "@angular/forms";
import DeadlineStrategyEnum = TaskRepeatDayInfo.DeadlineStrategyEnum;
@Component({
selector: 'app-task-weekly-series-creator',
templateUrl: './task-weekly-series-creator.component.html',
styleUrls: ['./task-weekly-series-creator.component.css']
})
export class TaskWeeklySeriesCreatorComponent implements OnInit{
repeatingOffsetForm: FormGroup | undefined
availableDeadlineStrategys: DeadlineStrategyEnum[] = ["DEADLINE_EQUAL_START", "DEADLINE_FIT_START"]
constructor(private dialogRef: MatDialogRef<TaskWeeklySeriesCreatorComponent>,
private taskRepeatingService: TaskseriesService,
@Inject(MAT_DIALOG_DATA) public tasks: TaskEntityInfo[],
private formbuilder: FormBuilder) {
}
ngOnInit(): void {
this.repeatingOffsetForm = this.formbuilder.group({
offsets: this.formbuilder.array(this.tasks.map(task => this.formbuilder.group({
offsetCtrl: ['', [Validators.required, Validators.min(1)]]
}))),
deadlineStrategyCtrl: ['', Validators.required],
endingDateCtrl: ['', Validators.required]
})
}
getDayOfWeek(date: string) {
return moment(date).format("dddd")
}
formatDate(date: string): string {
return moment(date).format("dd, DD. MMMM YYYY")
}
removeTaskFromRepeatingList(task: TaskEntityInfo, formIndex: number) {
this.tasks = this.tasks.filter(t => t.taskID !== task.taskID);
this.deleteOffset(formIndex)
}
get offsets() {
return this.repeatingOffsetForm!.controls["offsets"] as FormArray
}
deleteOffset(taskIndex: number) {
this.offsets.removeAt(taskIndex);
}
saveRepeatingTask() {
const weekDayInfos: TaskRepeatWeekDayInfo[] = []
const formArrayValues: {offsetCtrl: string}[] = this.offsets.value
for(let i=0; i<formArrayValues.length; i++) {
weekDayInfos.push({
taskID: this.tasks[i].taskID,
offset: Number(formArrayValues[i].offsetCtrl) * 7
})
}
this.taskRepeatingService.tasksTaskseriesWeeklyPost({
deadlineStrategy: this.repeatingOffsetForm!.controls['deadlineStrategyCtrl']!.value!,
endDate: moment(this.repeatingOffsetForm!.controls['endingDateCtrl']!.value!).format('YYYY-MM-DDTHH:mm:ss.SSSZ'),
weekDayInfos: weekDayInfos
}).subscribe({
next: resp => {
this.dialogRef.close(true)
}
})
}
cancel() {
this.dialogRef.close(false);
}
}