From 12786e71943224e25bfa7741356b5023e4577cee Mon Sep 17 00:00:00 2001 From: Alex ORLUC <alex.orluc@maarch.org> Date: Fri, 27 Dec 2019 10:36:05 +0100 Subject: [PATCH] FEAT #12635 TIME 0:35 add modal contact page + privileges --- .../modal/contact-modal.component.html | 4 +- .../contact/modal/contact-modal.component.ts | 5 +- .../contact-autocomplete.component.html | 2 +- .../contact-autocomplete.component.scss | 13 +++++ .../contact-autocomplete.component.ts | 50 ++++++++++++------- 5 files changed, 53 insertions(+), 21 deletions(-) diff --git a/src/frontend/app/administration/contact/modal/contact-modal.component.html b/src/frontend/app/administration/contact/modal/contact-modal.component.html index 68857ae5906..de8dca2448a 100644 --- a/src/frontend/app/administration/contact/modal/contact-modal.component.html +++ b/src/frontend/app/administration/contact/modal/contact-modal.component.html @@ -1,10 +1,10 @@ <h1 mat-dialog-title> <span style="flex: 1;"> - content + {{creationMode ? lang.contactCreation : lang.contact}} </span> <button [title]="lang.close" mat-icon-button (click)="dialogRef.close();"> <mat-icon class="fa fa-times"></mat-icon> </button></h1> <mat-dialog-content class="modal-container"> - <app-contact-form (onSubmitEvent)="dialogRef.close($event)"></app-contact-form> + <app-contact-form [creationMode]="creationMode" [contactId]="data.contactId" (onSubmitEvent)="dialogRef.close($event)"></app-contact-form> </mat-dialog-content> \ No newline at end of file diff --git a/src/frontend/app/administration/contact/modal/contact-modal.component.ts b/src/frontend/app/administration/contact/modal/contact-modal.component.ts index edb6e9cc77f..5dac984cf50 100644 --- a/src/frontend/app/administration/contact/modal/contact-modal.component.ts +++ b/src/frontend/app/administration/contact/modal/contact-modal.component.ts @@ -9,6 +9,7 @@ import { HttpClient } from '@angular/common/http'; }) export class ContactModalComponent { lang: any = LANG; + creationMode: boolean = true; constructor( public http: HttpClient, @@ -16,5 +17,7 @@ export class ContactModalComponent { public dialogRef: MatDialogRef<ContactModalComponent>) { } - ngOnInit(): void { } + ngOnInit(): void { + this.creationMode = this.data.contactId !== null ? false : true; + } } diff --git a/src/frontend/app/contact/autocomplete/contact-autocomplete.component.html b/src/frontend/app/contact/autocomplete/contact-autocomplete.component.html index b483a86bf60..0a06b620571 100644 --- a/src/frontend/app/contact/autocomplete/contact-autocomplete.component.html +++ b/src/frontend/app/contact/autocomplete/contact-autocomplete.component.html @@ -89,7 +89,7 @@ color="default"> <ng-container *ngIf="!loadingValues"> <mat-chip *ngFor="let item of controlAutocomplete.value;let i=index" class="listAutocomplete" - color="default" [removable]="!controlAutocomplete.disabled" (removed)="removeItem(i)"> + color="default" [removable]="!controlAutocomplete.disabled" (removed)="removeItem(i)" (click)="openContact(item)" [class.locked]="!canOpenContact(item)" [disableRipple]="!canOpenContact(item)"> <span style="display: flex;flex: 1;align-items: center;"> <i class="fa" [class.fa-address-card]="this.valuesToDisplay[item.id].type === 'contact'" [class.fa-sitemap]="this.valuesToDisplay[item.id].type ==='entity'" diff --git a/src/frontend/app/contact/autocomplete/contact-autocomplete.component.scss b/src/frontend/app/contact/autocomplete/contact-autocomplete.component.scss index 6d822ba97d6..893828a2084 100644 --- a/src/frontend/app/contact/autocomplete/contact-autocomplete.component.scss +++ b/src/frontend/app/contact/autocomplete/contact-autocomplete.component.scss @@ -21,9 +21,22 @@ } .listAutocomplete { + cursor: pointer; height: auto; } +.locked { + cursor: default; + + &:active { + box-shadow: none; + } + + &:hover::after, &:focus::after { + opacity: 0; + } +} + .itemChip { display: block; width: 95%; diff --git a/src/frontend/app/contact/autocomplete/contact-autocomplete.component.ts b/src/frontend/app/contact/autocomplete/contact-autocomplete.component.ts index 01657660415..16c34f6c659 100755 --- a/src/frontend/app/contact/autocomplete/contact-autocomplete.component.ts +++ b/src/frontend/app/contact/autocomplete/contact-autocomplete.component.ts @@ -33,6 +33,7 @@ export class ContactAutocompleteComponent implements OnInit { key: string = 'id'; canAdd: boolean = false; + canUpdate: boolean = false; listInfo: string; myControl = new FormControl(); @@ -63,7 +64,8 @@ export class ContactAutocompleteComponent implements OnInit { ngOnInit() { this.controlAutocomplete.setValue(this.controlAutocomplete.value === null || this.controlAutocomplete.value === '' ? [] : this.controlAutocomplete.value); - this.canAdd = this.privilegeService.hasCurrentUserPrivilege('manage_tags_application'); + this.canAdd = this.privilegeService.hasCurrentUserPrivilege('create_contacts'); + this.canUpdate = this.privilegeService.hasCurrentUserPrivilege('update_contacts'); this.initFormValue(); this.initAutocompleteRoute(); } @@ -120,7 +122,7 @@ export class ContactAutocompleteComponent implements OnInit { lastname: data.lastname, company: data.company }; - + }), finalize(() => this.loadingValues = false), catchError((err: any) => { @@ -157,7 +159,7 @@ export class ContactAutocompleteComponent implements OnInit { return of(false); }) ).subscribe(); - } + } }); } @@ -220,20 +222,34 @@ export class ContactAutocompleteComponent implements OnInit { } } - openContact() { - const dialogRef = this.dialog.open(ContactModalComponent, { width : '1200px', maxWidth : '100vw', data: { } }); - - dialogRef.afterClosed().pipe( - //filter((data: string) => data === 'ok'), - tap((data) => { - console.log(data); - - }), - catchError((err: any) => { - this.notify.handleErrors(err); - return of(false); - }) - ).subscribe(); + openContact(contact: any = null) { + if ((this.canAdd && contact === null) || this.canOpenContact(contact)) { + const dialogRef = this.dialog.open(ContactModalComponent, { width: '1200px', maxWidth: '100vw', data: { editMode: this.canUpdate, contactId: contact !== null ? contact.id : null } }); + + dialogRef.afterClosed().pipe( + filter((data: number) => data !== undefined), + tap((contactId: number) => { + const contact = { + type: 'contact', + id: contactId + }; + this.setFormValue(contact); + this.initFormValue(); + }), + catchError((err: any) => { + this.notify.handleErrors(err); + return of(false); + }) + ).subscribe(); + } + } + + canOpenContact(contact: any) { + if (this.canUpdate && contact.type === 'contact') { + return true; + } else { + return false; + } } empty(value: any) { -- GitLab