From c339533b7362ab9dd54ea58c16594bbbc2d7fbe0 Mon Sep 17 00:00:00 2001 From: Florian Eisenmenger Date: Tue, 19 Mar 2024 15:59:30 +0100 Subject: [PATCH] tasks and autofill --- matsen-tool/src/app/app.module.ts | 10 ++- .../contacts-detail.component.ts | 1 - .../partners-detail.component.html | 3 +- .../partners-detail.component.ts | 17 +++- .../tasks/new-task/new-task.component.html | 33 +++++++ .../app/tasks/new-task/new-task.component.ts | 87 +++++++++++++++---- matsen-tool/src/assets/i18n/de.json | 6 ++ 7 files changed, 132 insertions(+), 25 deletions(-) diff --git a/matsen-tool/src/app/app.module.ts b/matsen-tool/src/app/app.module.ts index 4dd805e..ff2fc2f 100644 --- a/matsen-tool/src/app/app.module.ts +++ b/matsen-tool/src/app/app.module.ts @@ -38,6 +38,10 @@ import { NewPartnerComponent } from './partners/new-partner/new-partner.componen import { NewDocumentComponent } from './documents/new-document/new-document.component'; import { NewProductComponent } from './products/new-product/new-product.component'; import { NewCommentComponent } from './postings/new-comment/new-comment.component'; +import {MatOptionModule} from "@angular/material/core"; +import {MatAutocompleteModule} from "@angular/material/autocomplete"; +import {MatFormFieldModule} from "@angular/material/form-field"; +import {MatInputModule} from "@angular/material/input"; export function apiConfigFactory(): Configuration { const params: ConfigurationParameters = { @@ -76,7 +80,11 @@ export function HttpLoaderFactory(http: HttpClient) { DocumentsComponent, MatPaginatorModule, MatSortModule, - MatTableModule + MatTableModule, + MatOptionModule, + MatAutocompleteModule, + MatFormFieldModule, + MatInputModule ], declarations: [ AppComponent, diff --git a/matsen-tool/src/app/contacts/contacts-detail/contacts-detail.component.ts b/matsen-tool/src/app/contacts/contacts-detail/contacts-detail.component.ts index 9e55996..c448922 100644 --- a/matsen-tool/src/app/contacts/contacts-detail/contacts-detail.component.ts +++ b/matsen-tool/src/app/contacts/contacts-detail/contacts-detail.component.ts @@ -6,7 +6,6 @@ import {ActivatedRoute} from "@angular/router"; import {MatPaginator, MatPaginatorIntl, PageEvent} from "@angular/material/paginator"; import {MatTableDataSource} from "@angular/material/table"; import {NewPostingComponent} from "@app/postings/new-posting/new-posting.component"; -import {ModalComponent} from "@app/_components/modal/modal.component"; import {NgbModal, NgbModalOptions} from "@ng-bootstrap/ng-bootstrap"; import {NewContactComponent} from "@app/contacts/new-contact/new-contact.component"; import {ModalStatus} from "@app/_helpers/modal.states"; diff --git a/matsen-tool/src/app/partners/partners-detail/partners-detail.component.html b/matsen-tool/src/app/partners/partners-detail/partners-detail.component.html index d133927..0198fff 100644 --- a/matsen-tool/src/app/partners/partners-detail/partners-detail.component.html +++ b/matsen-tool/src/app/partners/partners-detail/partners-detail.component.html @@ -120,7 +120,8 @@

{{task.description}}

Zugewiesen an: {{task.assignedTo}}

- +
diff --git a/matsen-tool/src/app/partners/partners-detail/partners-detail.component.ts b/matsen-tool/src/app/partners/partners-detail/partners-detail.component.ts index 286b3ad..37b57c2 100644 --- a/matsen-tool/src/app/partners/partners-detail/partners-detail.component.ts +++ b/matsen-tool/src/app/partners/partners-detail/partners-detail.component.ts @@ -177,9 +177,8 @@ export class PartnersDetailComponent implements OnInit, AfterViewInit { this.tasksSub = this.taskService.tasksGetCollection( this.tasksPageIndex + 1, this.tasksPageSize, - // TODO: Partner ID muss übergeben werden können, damit man nur die Partner-Tasks bekommt // TODO: User-ID muss übergeben werden können, damit man nur die Tasks bekommt, die einem User zugewiesen sind - // this.id + this.id ).subscribe( data => { this.tasks = data["hydra:member"]; @@ -234,7 +233,8 @@ export class PartnersDetailComponent implements OnInit, AfterViewInit { const modalRefTask = this.modalService.open(NewTaskComponent, this.modalOptions); let task: TaskJsonld = {} as TaskJsonld; task.partner = this.partner.id ?? null; - modalRefTask.componentInstance.posting = task; + task.completed = false; + modalRefTask.componentInstance.task = task; modalRefTask.componentInstance.submit.subscribe((modalStatus: ModalStatus) => { if (modalStatus === ModalStatus.Submitted) { modalRefTask.dismiss(); @@ -269,6 +269,17 @@ export class PartnersDetailComponent implements OnInit, AfterViewInit { }); } + openModalEditTask(task: TaskJsonld) { + const modalRefTaskEdit = this.modalService.open(NewTaskComponent, this.modalOptions); + modalRefTaskEdit.componentInstance.task = task; + modalRefTaskEdit.componentInstance.submit.subscribe((modalStatus: ModalStatus) => { + if (modalStatus === ModalStatus.Submitted) { + modalRefTaskEdit.dismiss(); + this.getPostsData(); + } + }); + } + openModalEditPosting(post: PostJsonld) { const modalRefPostingEdit = this.modalService.open(NewPostingComponent, this.modalOptions); modalRefPostingEdit.componentInstance.posting = post; diff --git a/matsen-tool/src/app/tasks/new-task/new-task.component.html b/matsen-tool/src/app/tasks/new-task/new-task.component.html index 88b5545..4c0388f 100644 --- a/matsen-tool/src/app/tasks/new-task/new-task.component.html +++ b/matsen-tool/src/app/tasks/new-task/new-task.component.html @@ -18,6 +18,39 @@ +
+ + + +
+ {{'form.assign-to' | translate}} {{'form.mandatory' | translate}}. +
+
+ + + + +
+ + +
+ {{'form.due-date' | translate}} {{'form.mandatory' | translate}}. +
+
+ +
+ + +
+ {{'form.prio' | translate}} {{'form.mandatory' | translate}}. +
+
+ diff --git a/matsen-tool/src/app/tasks/new-task/new-task.component.ts b/matsen-tool/src/app/tasks/new-task/new-task.component.ts index 38ff074..08ed4f3 100644 --- a/matsen-tool/src/app/tasks/new-task/new-task.component.ts +++ b/matsen-tool/src/app/tasks/new-task/new-task.component.ts @@ -1,36 +1,85 @@ import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; -import {TaskJsonld} from "@app/core/api/v1"; +import {TaskJsonld, TaskService} from "@app/core/api/v1"; import {ModalStatus} from "@app/_helpers/modal.states"; import {FormGroupInitializer} from "@app/_helpers/formgroup.initializer"; import {FormGroup} from "@angular/forms"; -import {Subscription} from "rxjs"; +import {debounceTime, distinctUntilChanged, Observable, OperatorFunction, Subscription} from "rxjs"; import {taskForm} from "@app/_forms/apiForms"; +import {ApiConverter} from "@app/_helpers/api.converter"; +import {filter, map} from "rxjs/operators"; @Component({ - selector: 'app-new-task', - templateUrl: './new-task.component.html', - styleUrl: './new-task.component.scss' + selector: 'app-new-task', + templateUrl: './new-task.component.html', + styleUrl: './new-task.component.scss' }) export class NewTaskComponent implements OnInit { - @Input() public task!: TaskJsonld; - @Output() public submit: EventEmitter = new EventEmitter(); + @Input() public task!: TaskJsonld; + @Output() public submit: EventEmitter = new EventEmitter(); - protected taskForm: FormGroup; - protected taskSub: Subscription; + protected taskForm: FormGroup; + protected taskSub: Subscription; - constructor( + protected users = [ + { id: '/api/users/1', name: 'Daniel Knudsen' }, + { id: '/api/users/2', name: 'Florian Eisenmenger' }, + { id: '/api/users/3', name: 'Francis Donelly' }, + { id: '/api/users/4', name: 'Jaylen Schmitt' }, + ]; - ) { - this.taskForm = taskForm; - this.taskSub = new Subscription(); - } + protected formatter = (apiData: any) => apiData.name; - ngOnInit(): void { - this.taskForm = FormGroupInitializer.initFormGroup(this.taskForm, this.task); - } + protected search: OperatorFunction = (text$: Observable) => + text$.pipe( + debounceTime(200), + distinctUntilChanged(), + filter((term) => term.length >= 2), + map((term) => this.users.filter((state) => new RegExp(term, 'mi').test(state.name)).slice(0, 10)), + ); - onSubmit() { + constructor( + private taskService: TaskService + ) { + this.taskForm = taskForm; + this.taskSub = new Subscription(); + } - } + ngOnInit(): void { + console.log(this.task); + this.taskForm = FormGroupInitializer.initFormGroup(this.taskForm, this.task); + } + + onAssignedToSelect(selectedItem: any): void { + this.taskForm.get('assignedTo')?.setValue(selectedItem.item.id); + console.log(selectedItem); + console.log(this.taskForm); + } + + onSubmit() { + if (this.taskForm.valid) { + if (this.task.id === null || this.task.id === undefined) { + // Create new post + this.taskSub = this.taskService.tasksPost( + this.taskForm.value as TaskJsonld + ).subscribe( + data => { + this.taskForm.reset(); + this.submit.emit(ModalStatus.Submitted); + } + ); + } else { + // Edit post + this.taskSub = this.taskService.tasksIdPatch( + ApiConverter.extractId(this.task.id), + this.taskForm.value as TaskJsonld + ).subscribe( + data => { + this.taskForm.reset(); + this.submit.emit(ModalStatus.Submitted); + } + ); + } + } + } } diff --git a/matsen-tool/src/assets/i18n/de.json b/matsen-tool/src/assets/i18n/de.json index 9c6dabb..f4ceef8 100644 --- a/matsen-tool/src/assets/i18n/de.json +++ b/matsen-tool/src/assets/i18n/de.json @@ -79,6 +79,12 @@ "headline": "Überschrift", "message": "Nachricht", "comment": "Kommentar", + "assign-to": "Zuweisen an", + "due-date": "Fälligkeitsdatum", + "prio": "Priorität", + "prio-low": "niedrig", + "prio-medium": "mittel", + "prio-high": "hoch", "send": "Abschicken" } } \ No newline at end of file