浏览代码

partner: new and edit / cleanup

master
Florian Eisenmenger 2 年前
父节点
当前提交
1e7da61d0b
共有 12 个文件被更改,包括 190 次插入27 次删除
  1. +0
    -1
      matsen-tool/src/app/_components/modal/modal.component.ts
  2. +0
    -3
      matsen-tool/src/app/_interfaces/modalContent.ts
  3. +0
    -3
      matsen-tool/src/app/contacts/contacts-detail/contacts-detail.component.ts
  4. +2
    -3
      matsen-tool/src/app/contacts/new-contact/new-contact.component.ts
  5. +56
    -1
      matsen-tool/src/app/partners/new-partner/new-partner.component.html
  6. +99
    -5
      matsen-tool/src/app/partners/new-partner/new-partner.component.ts
  7. +2
    -0
      matsen-tool/src/app/partners/partners-detail/partners-detail.component.html
  8. +12
    -2
      matsen-tool/src/app/partners/partners-detail/partners-detail.component.ts
  9. +19
    -6
      matsen-tool/src/app/partners/partners.component.ts
  10. +0
    -1
      matsen-tool/src/app/postings/new-comment/new-comment.component.ts
  11. +0
    -1
      matsen-tool/src/app/postings/new-posting/new-posting.component.ts
  12. +0
    -1
      matsen-tool/src/app/products/products-detail/products-detail.component.ts

+ 0
- 1
matsen-tool/src/app/_components/modal/modal.component.ts 查看文件

@@ -1,6 +1,5 @@
import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
import {NgbActiveModal} from "@ng-bootstrap/ng-bootstrap"; import {NgbActiveModal} from "@ng-bootstrap/ng-bootstrap";
import {ModalContent} from "@app/_interfaces/modalContent";


@Component({ @Component({
selector: 'app-modal', selector: 'app-modal',


+ 0
- 3
matsen-tool/src/app/_interfaces/modalContent.ts 查看文件

@@ -1,3 +0,0 @@
export interface ModalContent {
contact: any;
}

+ 0
- 3
matsen-tool/src/app/contacts/contacts-detail/contacts-detail.component.ts 查看文件

@@ -71,7 +71,6 @@ export class ContactsDetailComponent implements OnInit, AfterViewInit {
}); });
this.getContactData(); this.getContactData();
this.getPostsData(); this.getPostsData();
console.log(this.contact.imageUrl);
} }


ngAfterViewInit() { ngAfterViewInit() {
@@ -85,7 +84,6 @@ export class ContactsDetailComponent implements OnInit, AfterViewInit {
).subscribe( ).subscribe(
data => { data => {
this.contact = data; this.contact = data;
console.log(this.contact);
} }
); );
} }
@@ -152,7 +150,6 @@ export class ContactsDetailComponent implements OnInit, AfterViewInit {
} }


openModalEditComment(comment: CommentJsonld) { openModalEditComment(comment: CommentJsonld) {
console.log(comment);
const modalRefComment = this.modalService.open(NewCommentComponent, this.modalOptions); const modalRefComment = this.modalService.open(NewCommentComponent, this.modalOptions);
modalRefComment.componentInstance.comment = comment; modalRefComment.componentInstance.comment = comment;
modalRefComment.componentInstance.submit.subscribe((modalStatus: ModalStatus) => { modalRefComment.componentInstance.submit.subscribe((modalStatus: ModalStatus) => {


+ 2
- 3
matsen-tool/src/app/contacts/new-contact/new-contact.component.ts 查看文件

@@ -1,9 +1,8 @@
import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
import {FormGroup} from "@angular/forms"; import {FormGroup} from "@angular/forms";
import {contactForm} from "@app/_forms/apiForms"; import {contactForm} from "@app/_forms/apiForms";
import {ContactJsonld, ContactService, MediaService, PartnerJsonld} from "@app/core/api/v1";
import {ContactJsonld, ContactService, MediaService} from "@app/core/api/v1";
import {Subscription} from "rxjs"; import {Subscription} from "rxjs";
import {ModalContent} from "@app/_interfaces/modalContent";
import {ModalStatus} from "@app/_helpers/modal.states"; import {ModalStatus} from "@app/_helpers/modal.states";
import {FormGroupInitializer} from "@app/_helpers/formgroup.initializer"; import {FormGroupInitializer} from "@app/_helpers/formgroup.initializer";
import {TranslateService} from "@ngx-translate/core"; import {TranslateService} from "@ngx-translate/core";
@@ -15,7 +14,7 @@ import {ApiConverter} from "@app/_helpers/api.converter";
templateUrl: './new-contact.component.html', templateUrl: './new-contact.component.html',
styleUrl: './new-contact.component.scss' styleUrl: './new-contact.component.scss'
}) })
export class NewContactComponent implements ModalContent, OnInit {
export class NewContactComponent implements OnInit {


@Input() public contact!: ContactJsonld; @Input() public contact!: ContactJsonld;
@Output() public submit: EventEmitter<ModalStatus> = new EventEmitter<ModalStatus>(); @Output() public submit: EventEmitter<ModalStatus> = new EventEmitter<ModalStatus>();


+ 56
- 1
matsen-tool/src/app/partners/new-partner/new-partner.component.html 查看文件

@@ -1 +1,56 @@
<p>new-partner works!</p>
<h2>Neuer Partner</h2>
<div class="spt-form">
<form [formGroup]="partnerForm" (ngSubmit)="onSubmit()">
<div class="mb-3">
<label for="name" class="form-label">Name:</label>
<input type="text" class="form-control" id="name" formControlName="name" />
<div class="form-text" *ngIf="partnerForm.get('name')?.invalid && partnerForm.get('name')?.touched">
Name ist erforderlich.
</div>
</div>

<div class="mb-3">
<label for="street" class="form-label">Straße:</label>
<input type="text" class="form-control" id="street" formControlName="street" />
</div>

<div class="mb-3">
<label for="streetNo" class="form-label">Hausnummer:</label>
<input type="text" class="form-control" id="streetNo" formControlName="streetNo" />
</div>

<div class="mb-3">
<label for="zip" class="form-label">PLZ:</label>
<input type="text" class="form-control" id="zip" formControlName="zip" />
</div>

<div class="mb-3">
<label for="city" class="form-label">Stadt:</label>
<input type="text" class="form-control" id="city" formControlName="city" />
</div>

<div class="mb-3">
<label for="country" class="form-label">Land:</label>
<input type="text" class="form-control" id="country" formControlName="country" />
</div>

<div class="mb-3">
<label for="website" class="form-label">Website:</label>
<input type="text" class="form-control" id="website" formControlName="website" />
</div>

<div class="mb-3">
<label for="logo" class="form-label">Bild hochladen:</label>
<input type="file" class="form-control" id="logo" (change)="onFileSelected($event)" accept="image/*" />
</div>

<div class="mb-3">
<div class="delete-image" (click)="onDeleteImage()">
<img *ngIf="partner.logoUrl !== null" src="{{partner.logoUrl}}" width="40" height="40" />
</div>
</div>

<button type="submit" class="btn btn-primary" [disabled]="partnerForm.invalid">Abschicken</button>
</form>
</div>


+ 99
- 5
matsen-tool/src/app/partners/new-partner/new-partner.component.ts 查看文件

@@ -1,10 +1,104 @@
import { Component } from '@angular/core';
import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
import {partnerForm} from "@app/_forms/apiForms";
import {MediaService, PartnerJsonld, PartnerService} from "@app/core/api/v1";
import {ModalStatus} from "@app/_helpers/modal.states";
import {FormGroup} from "@angular/forms";
import {Subscription} from "rxjs";
import {TranslateService} from "@ngx-translate/core";
import {FormGroupInitializer} from "@app/_helpers/formgroup.initializer";
import {ApiConverter} from "@app/_helpers/api.converter";


@Component({ @Component({
selector: 'app-new-partner',
templateUrl: './new-partner.component.html',
styleUrl: './new-partner.component.scss'
selector: 'app-new-partner',
templateUrl: './new-partner.component.html',
styleUrl: './new-partner.component.scss'
}) })
export class NewPartnerComponent {
export class NewPartnerComponent implements OnInit {
@Input() public partner!: PartnerJsonld;
@Output() public submit: EventEmitter<ModalStatus> = new EventEmitter<ModalStatus>();


protected partnerForm: FormGroup;
protected selectedImage: File | null;
protected partnerSub: Subscription;
protected mediaSub: Subscription;

constructor(
private partnerService: PartnerService,
private mediaService: MediaService,
private translateService: TranslateService
) {
this.partnerForm = partnerForm;
this.selectedImage = null;

this.partnerSub = new Subscription();
this.mediaSub = new Subscription();
}

ngOnInit(): void {
this.partnerForm = FormGroupInitializer.initFormGroup(this.partnerForm, this.partner);
}

// On submit form: Check if image is set
onSubmit() {
if (this.selectedImage !== null) {
this.mediaSub = this.mediaService.mediasPost(
this.selectedImage
).subscribe(
data => {
this.partnerForm.patchValue({"logo": data.id});
this.submitForm();
}
);
} else {
this.submitForm();
}
}

// Submit all values of the form to the backend
submitForm() {
if (this.partnerForm.valid) {
if (this.partner.id === null || this.partner.id === undefined) {
// Create new contact
this.partnerSub = this.partnerService.partnersPost(
this.partnerForm.value as PartnerJsonld
).subscribe(
data => {
this.partnerForm.reset();
this.submit.emit(ModalStatus.Submitted);
}
);
} else {
// Edit contact
this.partnerSub = this.partnerService.partnersIdPatch(
ApiConverter.extractId(this.partner.id),
this.partnerForm.value as PartnerJsonld
).subscribe(
data => {
this.partnerForm.reset();
this.submit.emit(ModalStatus.Submitted);
}
);
}
}
}

// If file is selected, convert it
onFileSelected(event: any) {
const file: File = event.target.files[0];
if (file) {
this.selectedImage = file;
}
}

onDeleteImage() {
let confirmMessage = "";
this.translateService.get('system.delete-image').subscribe((translation: string) => {
confirmMessage = translation;
});
const userConfirmed = window.confirm(confirmMessage);
if (userConfirmed) {
this.partnerForm.patchValue({"logo": null});
this.partnerForm.patchValue({"logoUrl": null});
}
}
} }

+ 2
- 0
matsen-tool/src/app/partners/partners-detail/partners-detail.component.html 查看文件

@@ -29,6 +29,8 @@
<img *ngIf="partner.logoUrl !== null && partner.logoUrl !== undefined" src="{{partner.logoUrl}}" width="247" <img *ngIf="partner.logoUrl !== null && partner.logoUrl !== undefined" src="{{partner.logoUrl}}" width="247"
height="94" alt="{{partner.name}}" title="{{partner.name}}"/> height="94" alt="{{partner.name}}" title="{{partner.name}}"/>
</div> </div>
<span class="position-absolute bi bi-pencil p-2" data-type="user-tool" data-action="edit"
(click)="openModalEditPartner()"></span>
</div> </div>
</div> </div>
</div> </div>


+ 12
- 2
matsen-tool/src/app/partners/partners-detail/partners-detail.component.ts 查看文件

@@ -23,6 +23,7 @@ import {ModalStatus} from "@app/_helpers/modal.states";
import {AccountService} from "@app/_services"; import {AccountService} from "@app/_services";
import {User} from "@app/_models"; import {User} from "@app/_models";
import {NewCommentComponent} from "@app/postings/new-comment/new-comment.component"; import {NewCommentComponent} from "@app/postings/new-comment/new-comment.component";
import {NewPartnerComponent} from "@app/partners/new-partner/new-partner.component";


@Component({ @Component({
selector: 'app-partners-detail', selector: 'app-partners-detail',
@@ -209,7 +210,6 @@ export class PartnersDetailComponent implements OnInit, AfterViewInit {
} }


openModalNewPosting() { openModalNewPosting() {
console.log(this.modalOptions);
const modalRefPosting = this.modalService.open(NewPostingComponent, this.modalOptions); const modalRefPosting = this.modalService.open(NewPostingComponent, this.modalOptions);
let posting: PostJsonld = {} as PostJsonld; let posting: PostJsonld = {} as PostJsonld;
posting.partner = this.partner.id ?? null; posting.partner = this.partner.id ?? null;
@@ -247,7 +247,6 @@ export class PartnersDetailComponent implements OnInit, AfterViewInit {
} }


openModalEditComment(comment: CommentJsonld) { openModalEditComment(comment: CommentJsonld) {
console.log(comment);
const modalRefComment = this.modalService.open(NewCommentComponent, this.modalOptions); const modalRefComment = this.modalService.open(NewCommentComponent, this.modalOptions);
modalRefComment.componentInstance.comment = comment; modalRefComment.componentInstance.comment = comment;
modalRefComment.componentInstance.submit.subscribe((modalStatus: ModalStatus) => { modalRefComment.componentInstance.submit.subscribe((modalStatus: ModalStatus) => {
@@ -263,4 +262,15 @@ export class PartnersDetailComponent implements OnInit, AfterViewInit {
const modalRef = this.modalService.open(ModalComponent, this.modalOptions); const modalRef = this.modalService.open(ModalComponent, this.modalOptions);
modalRef.componentInstance.dynamicComponent = NewTaskComponent; modalRef.componentInstance.dynamicComponent = NewTaskComponent;
} }

openModalEditPartner() {
const modalRef = this.modalService.open(NewPartnerComponent, this.modalOptions);
modalRef.componentInstance.partner = this.partner;
modalRef.componentInstance.submit.subscribe((modalStatus: ModalStatus) => {
if (modalStatus === ModalStatus.Submitted) {
modalRef.dismiss();
this.getPartnerData();
}
});
}
} }

+ 19
- 6
matsen-tool/src/app/partners/partners.component.ts 查看文件

@@ -3,15 +3,18 @@ import {MatSort, Sort, MatSortModule} from "@angular/material/sort";
import {MatTableDataSource, MatTableModule} from "@angular/material/table"; import {MatTableDataSource, MatTableModule} from "@angular/material/table";
import {ActivatedRoute, Router, RouterLink, RouterLinkActive} from "@angular/router"; import {ActivatedRoute, Router, RouterLink, RouterLinkActive} from "@angular/router";
import {Subscription} from "rxjs"; import {Subscription} from "rxjs";
import {PartnerJsonld, PartnerService} from "@app/core/api/v1";
import {ContactJsonld, PartnerJsonld, PartnerService} from "@app/core/api/v1";
import {MatPaginator, MatPaginatorIntl, MatPaginatorModule, PageEvent} from "@angular/material/paginator"; import {MatPaginator, MatPaginatorIntl, MatPaginatorModule, PageEvent} from "@angular/material/paginator";
import {OrderFilter} from "@app/_models/orderFilter"; import {OrderFilter} from "@app/_models/orderFilter";
import {ApiConverter} from "@app/_helpers/api.converter"; import {ApiConverter} from "@app/_helpers/api.converter";
import {NgIf} from "@angular/common"; import {NgIf} from "@angular/common";
import {ModalComponent} from "@app/_components/modal/modal.component"; import {ModalComponent} from "@app/_components/modal/modal.component";
import {NgbModal} from "@ng-bootstrap/ng-bootstrap";
import {NgbModal, NgbModalOptions} from "@ng-bootstrap/ng-bootstrap";
import {NewPartnerComponent} from "@app/partners/new-partner/new-partner.component"; import {NewPartnerComponent} from "@app/partners/new-partner/new-partner.component";
import {TranslateModule, TranslateService} from "@ngx-translate/core"; import {TranslateModule, TranslateService} from "@ngx-translate/core";
import {NewContactComponent} from "@app/contacts/new-contact/new-contact.component";
import {ModalStatus} from "@app/_helpers/modal.states";
import TypeEnum = PartnerJsonld.TypeEnum;


@Component({ @Component({
selector: 'app-partners', selector: 'app-partners',
@@ -42,6 +45,10 @@ export class PartnersComponent implements OnInit, AfterViewInit {
protected pageSize: number; protected pageSize: number;
protected pageIndex: number; protected pageIndex: number;


protected modalOptions: NgbModalOptions = {
centered: true
};

constructor( constructor(
private route: ActivatedRoute, private route: ActivatedRoute,
private partnerService: PartnerService, private partnerService: PartnerService,
@@ -100,7 +107,6 @@ export class PartnersComponent implements OnInit, AfterViewInit {
data => { data => {
this.partners = data["hydra:member"]; this.partners = data["hydra:member"];
this.dataSource = new MatTableDataSource<PartnerJsonld>(this.partners); this.dataSource = new MatTableDataSource<PartnerJsonld>(this.partners);
console.log(data);
this.length = Number(data["hydra:totalItems"]); this.length = Number(data["hydra:totalItems"]);
this.paginator.length = this.length; this.paginator.length = this.length;
} }
@@ -147,12 +153,19 @@ export class PartnersComponent implements OnInit, AfterViewInit {


navigateToPartnerDetails(element: any) { navigateToPartnerDetails(element: any) {
const partner: PartnerJsonld = element as PartnerJsonld; const partner: PartnerJsonld = element as PartnerJsonld;
// console.log(ApiConverter.extractId(partner.id));
this.router.navigate(['/' + partner.type, ApiConverter.extractId(partner.id)]); this.router.navigate(['/' + partner.type, ApiConverter.extractId(partner.id)]);
} }


openModalNewPartner() { openModalNewPartner() {
const modalRef = this.modalService.open(ModalComponent);
modalRef.componentInstance.dynamicComponent = NewPartnerComponent;
const modalRefContact = this.modalService.open(NewPartnerComponent, this.modalOptions);
let partner: PartnerJsonld = {} as PartnerJsonld;
partner.type = this.dataType as TypeEnum;
modalRefContact.componentInstance.partner = partner;
modalRefContact.componentInstance.submit.subscribe((modalStatus: ModalStatus) => {
if (modalStatus === ModalStatus.Submitted) {
modalRefContact.dismiss();
this.getData();
}
});
} }
} }

+ 0
- 1
matsen-tool/src/app/postings/new-comment/new-comment.component.ts 查看文件

@@ -28,7 +28,6 @@ export class NewCommentComponent implements OnInit {


ngOnInit(): void { ngOnInit(): void {
this.commentForm = FormGroupInitializer.initFormGroup(this.commentForm, this.comment); this.commentForm = FormGroupInitializer.initFormGroup(this.commentForm, this.comment);
console.log(this.comment);
} }


onSubmit() { onSubmit() {


+ 0
- 1
matsen-tool/src/app/postings/new-posting/new-posting.component.ts 查看文件

@@ -28,7 +28,6 @@ export class NewPostingComponent implements OnInit {


ngOnInit(): void { ngOnInit(): void {
this.postForm = FormGroupInitializer.initFormGroup(this.postForm, this.posting); this.postForm = FormGroupInitializer.initFormGroup(this.postForm, this.posting);
console.log(this.postForm);
} }


onSubmit() { onSubmit() {


+ 0
- 1
matsen-tool/src/app/products/products-detail/products-detail.component.ts 查看文件

@@ -51,7 +51,6 @@ export class ProductsDetailComponent implements OnInit, AfterViewInit {
).subscribe( ).subscribe(
data => { data => {
this.product = data; this.product = data;
console.log(this.product);
} }
); );
} }


正在加载...
取消
保存