From 93236a76a59e3398f03145beca5eb8ab270d5f86 Mon Sep 17 00:00:00 2001 From: Alex Orluc <alex.orluc@maarch.org> Date: Thu, 22 Mar 2018 20:57:54 +0100 Subject: [PATCH] FIX #244, #249 add select parent_entity_id --- .../entities-administration.component.html | 35 +++++++++++++------ .../administration/administration.module.ts | 5 ++- .../entities-administration.component.ts | 22 ++++++++---- .../js/angular/app/app.module.ts | 2 +- .../js/angular/plugins/sorting.pipe.ts | 17 +++++++++ 5 files changed, 62 insertions(+), 19 deletions(-) create mode 100644 apps/maarch_entreprise/js/angular/plugins/sorting.pipe.ts diff --git a/apps/maarch_entreprise/Views/entities-administration.component.html b/apps/maarch_entreprise/Views/entities-administration.component.html index 213d4d318dc..96cbb41064d 100644 --- a/apps/maarch_entreprise/Views/entities-administration.component.html +++ b/apps/maarch_entreprise/Views/entities-administration.component.html @@ -62,12 +62,26 @@ <div class="form-group"> <div class="col-sm-12"> <mat-form-field> - <input matInput [(ngModel)]="currentEntity.parent_entity_id" required name="parent_entity_id" id="parent_entity_id" title="{{lang.isLinkedTo}}" type="text" - placeholder="{{lang.isLinkedTo}}" maxlength="32" disabled> + <mat-select id="parent_entity_id" name="parent_entity_id" title="{{lang.isLinkedTo}}" placeholder="{{lang.isLinkedTo}}" [(ngModel)]="currentEntity.parent_entity_id" + (change)="selectParentEntity(currentEntity.parent_entity_id)" *ngIf="creationMode"> + <mat-option value=""> + </mat-option> + <mat-option *ngFor="let entity of entities | sortBy : 'entity_label'" [value]="entity.entity_id"> + {{entity.entity_label}} + </mat-option> + </mat-select> + <mat-select id="parent_entity_id" name="parent_entity_id" title="{{lang.isLinkedTo}}" placeholder="{{lang.isLinkedTo}}" [(ngModel)]="currentEntity.parent_entity_id" + *ngIf="!creationMode"> + <mat-option value=""> + </mat-option> + <mat-option *ngFor="let entity of entities | sortBy : 'entity_label'" [value]="entity.entity_id"> + {{entity.entity_label}} + </mat-option> + </mat-select> </mat-form-field> <mat-form-field> - <mat-select id="entity_type" name="entity_type" title="{{lang.entityType}}" placeholder="{{lang.entityType}}" [(ngModel)]="currentEntity.entity_type" maxlength="32" - required> + <mat-select id="entity_type" name="entity_type" title="{{lang.entityType}}" placeholder="{{lang.entityType}}" [(ngModel)]="currentEntity.entity_type" + maxlength="32" required> <mat-option *ngFor="let entity_type of entityTypeList" [value]="entity_type.id"> {{entity_type.label}} </mat-option> @@ -144,12 +158,14 @@ </div> <div class="col-sm-4"> <mat-form-field> - <input matInput [(ngModel)]="currentEntity.city" name="city" id="city" title="{{lang.city}}" type="text" placeholder="{{lang.city}}" maxlength="255"> + <input matInput [(ngModel)]="currentEntity.city" name="city" id="city" title="{{lang.city}}" type="text" placeholder="{{lang.city}}" + maxlength="255"> </mat-form-field> </div> <div class="col-sm-4"> <mat-form-field> - <input matInput [(ngModel)]="currentEntity.country" name="country" id="country" title="{{lang.country}}" type="text" placeholder="{{lang.country}}" maxlength="255"> + <input matInput [(ngModel)]="currentEntity.country" name="country" id="country" title="{{lang.country}}" type="text" placeholder="{{lang.country}}" + maxlength="255"> </mat-form-field> </div> </div> @@ -200,8 +216,7 @@ <div class="row" style="margin:0px;"> <div class="col-md-12"> <mat-form-field> - <input #autocompleteFilter type="text" placeholder="{{lang.addUserOrEntity}}" matInput [matAutocomplete]="auto" - [formControl]="elementCtrl"> + <input #autocompleteFilter type="text" placeholder="{{lang.addUserOrEntity}}" matInput [matAutocomplete]="auto" [formControl]="elementCtrl"> <mat-autocomplete #auto="matAutocomplete"> <mat-option *ngFor="let elem of filteredElements | async" [value]="elem.id" (click)="addElemListModel(elem)"> <p mat-line> @@ -260,8 +275,8 @@ </mat-form-field> <mat-list> <span dnd-sortable-container [dropZones]="['boxers-zone']" [sortableData]="currentEntity.visaTemplate"> - <mat-list-item disableRipple="true" *ngFor="let template of currentEntity.visaTemplate; let i = index" title="{{lang.move}}" dnd-sortable - [sortableIndex]="i" (onDropSuccess)="updateDiffListVisa(template)"> + <mat-list-item disableRipple="true" *ngFor="let template of currentEntity.visaTemplate; let i = index" title="{{lang.move}}" + dnd-sortable [sortableIndex]="i" (onDropSuccess)="updateDiffListVisa(template)"> <mat-icon color="primary" [class]="template.item_mode == 'visa' ? 'fa fa-user' : 'fa fa-certificate'" mat-list-icon></mat-icon> <p mat-line>{{template.idToDisplay}} <small style="opacity:0.5;">{{template.descriptionToDisplay}}</small> diff --git a/apps/maarch_entreprise/js/angular/app/administration/administration.module.ts b/apps/maarch_entreprise/js/angular/app/administration/administration.module.ts index 5a2bd8f8931..6a16810ccf6 100644 --- a/apps/maarch_entreprise/js/angular/app/administration/administration.module.ts +++ b/apps/maarch_entreprise/js/angular/app/administration/administration.module.ts @@ -3,6 +3,8 @@ import { CommonModule } from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { HttpClientModule } from '@angular/common/http'; +import { SortPipe } from '../../plugins/sorting.pipe'; + import { MenuComponent } from '../menu/menu.component'; import { MenuNavComponent } from '../menu/menu-nav.component'; import { AppMaterialModule } from '../app-material.module'; @@ -76,7 +78,8 @@ import { NotificationAdministrationComponent } from './notification-adm BasketAdministrationGroupListModalComponent, DoctypesAdministrationRedirectModalComponent, DiffusionModelsAdministrationComponent, - DiffusionModelAdministrationComponent + DiffusionModelAdministrationComponent, + SortPipe ], entryComponents: [ UsersAdministrationRedirectModalComponent, diff --git a/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts b/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts index 137706a1dbb..1e4598f98b2 100644 --- a/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts +++ b/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts @@ -6,14 +6,13 @@ import { ConfirmModalComponent } from '../confirmModal.component'; import { NotificationService } from '../notification.service'; import { MatSidenav, MatPaginator, MatTableDataSource, MatSort, MatDialog, MatDialogConfig, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; - +import { SortPipe } from '../../plugins/sorting.pipe'; import { AutoCompletePlugin } from '../../plugins/autocomplete.plugin'; declare function $j(selector: any): any; declare var angularGlobals: any; - @Component({ templateUrl: "../../../../Views/entities-administration.component.html", providers: [NotificationService] @@ -99,10 +98,13 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen 'data': this.entities, "check_callback": function (operation: any, node: any, node_parent: any, node_position: any, more: any) { if (operation == 'move_node') { - if (!node_parent.original.allowed) { - return false - } else + if (node_parent.id =='#') { + return false; + } else if (!node_parent.original.allowed) { + return false; + } else { return true; + } } } }, @@ -333,14 +335,15 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen this.currentEntity.parent_entity_id = ''; } - if (this.creationMode) { + if (this.creationMode) { this.http.post(this.coreUrl + "rest/entities", this.currentEntity) .subscribe((data: any) => { + this.currentEntity.listTemplate = []; this.entities = data['entities']; + this.creationMode = false; $j('#jstree').jstree(true).settings.core.data = this.entities; $j('#jstree').jstree("refresh"); this.notify.success(this.lang.entityAdded); - this.creationMode = false; }, (err) => { this.notify.error(err.error.errors); }); @@ -378,6 +381,11 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen } } + selectParentEntity(entity_id:any) { + $j('#jstree').jstree('deselect_all'); + $j('#jstree').jstree('select_node', entity_id); + } + removeEntity() { if (this.currentEntity.documents > 0 || this.currentEntity.redirects > 0 || this.currentEntity.instances > 0 || this.currentEntity.users.length > 0) { this.config = { data: { entity: this.currentEntity } }; diff --git a/apps/maarch_entreprise/js/angular/app/app.module.ts b/apps/maarch_entreprise/js/angular/app/app.module.ts index c4eaac18c78..d4a6e49773c 100755 --- a/apps/maarch_entreprise/js/angular/app/app.module.ts +++ b/apps/maarch_entreprise/js/angular/app/app.module.ts @@ -14,7 +14,7 @@ import { AdministrationModule } from './administration/administr import { ProfileComponent } from './profile.component'; import { SignatureBookComponent, SafeUrlPipe } from './signature-book.component'; -import { SaveNumericPackageComponent } from './save-numeric-package.component'; +import { SaveNumericPackageComponent } from './save-numeric-package.component'; @NgModule({ imports: [ diff --git a/apps/maarch_entreprise/js/angular/plugins/sorting.pipe.ts b/apps/maarch_entreprise/js/angular/plugins/sorting.pipe.ts new file mode 100644 index 00000000000..d7a07746c3b --- /dev/null +++ b/apps/maarch_entreprise/js/angular/plugins/sorting.pipe.ts @@ -0,0 +1,17 @@ +import { Pipe } from '@angular/core'; + +@Pipe({name: "sortBy"}) +export class SortPipe { + transform(array: Array<string>, args: string): Array<string> { + array.sort((a: any, b: any) => { + if ( a[args] < b[args] ){ + return -1; + }else if( a[args] > b[args] ){ + return 1; + }else{ + return 0; + } + }); + return array; + } +} \ No newline at end of file -- GitLab