diff --git a/src/frontend/app/list/basket-list.component.html b/src/frontend/app/list/basket-list.component.html index 24ca1bd005d9013242d9d1577268038c7b9ab7a2..6238ddb6850c10b25cda8b63fb4e5ab3d716e87e 100644 --- a/src/frontend/app/list/basket-list.component.html +++ b/src/frontend/app/list/basket-list.component.html @@ -56,6 +56,7 @@ </mat-button-toggle-group> <div class="filterBadges"> <span class="label label-info" title="{{lang.currentFilters}}" *ngFor="let category of this.listProperties.categories" (click)="openFilter()">{{category.label}}</span> + <span class="label label-info" title="{{lang.currentFilters}}" *ngFor="let status of this.listProperties.statuses" (click)="openFilter()">{{status.label}}</span> <span class="label label-info" title="{{lang.currentFilters}}" (click)="openFilter()">{{this.listProperties.reference}}</span> <span class="label label-info" title="{{lang.currentFilters}}" (click)="openFilter()">{{this.listProperties.subject}}</span> <span class="label label-info" title="{{lang.currentFilters}}" *ngFor="let priority of this.listProperties.priorities" (click)="openFilter()">{{priority.label}}</span> diff --git a/src/frontend/app/list/filters/filters-list.component.html b/src/frontend/app/list/filters/filters-list.component.html index ba361a2a9125248570bae90fd232100bd5642b63..401e2570f99ab9018edd948e2c5bf33d392c30d2 100644 --- a/src/frontend/app/list/filters/filters-list.component.html +++ b/src/frontend/app/list/filters/filters-list.component.html @@ -1,4 +1,4 @@ -<mat-nav-list disableRipple="true"> +<mat-nav-list disableRipple="true" class="filterList"> <h3 mat-subheader>{{lang.filterBy}}</h3> <mat-expansion-panel #referencePan (opened)="setFocus(reference)"> <mat-expansion-panel-header> @@ -9,8 +9,7 @@ </mat-panel-description> </mat-expansion-panel-header> <mat-form-field appearance="outline"> - - <input #reference matInput [(ngModel)]="this.listProperties.reference" (keyup.enter)="this.triggerEvent.emit();" (blur)="this.triggerEvent.emit();" placeholder="3 {{lang.passwordminLength}}"> + <input #reference matInput [(ngModel)]="this.listProperties.reference" (keyup.enter)="this.triggerEvent.emit();" placeholder="3 {{lang.passwordminLength}}"> <button mat-button *ngIf="this.listProperties.reference" matSuffix mat-icon-button aria-label="Clear" (click)="this.listProperties.reference='';this.triggerEvent.emit();"> <mat-icon color="primary" fontSet="fas" fontIcon="fa-times"></mat-icon> @@ -26,7 +25,7 @@ </mat-panel-description> </mat-expansion-panel-header> <mat-form-field appearance="outline"> - <input #subject matInput [(ngModel)]="this.listProperties.subject" (keyup.enter)="this.triggerEvent.emit();" (blur)="this.triggerEvent.emit();" placeholder="3 {{lang.passwordminLength}}"> + <input #subject matInput [(ngModel)]="this.listProperties.subject" (keyup.enter)="this.triggerEvent.emit();" placeholder="3 {{lang.passwordminLength}}"> <button mat-button *ngIf="this.listProperties.subject" matSuffix mat-icon-button aria-label="Clear" (click)="this.listProperties.subject='';this.triggerEvent.emit();"> <mat-icon color="primary" fontSet="fas" fontIcon="fa-times"></mat-icon> </button> @@ -62,6 +61,24 @@ </mat-list-option> </mat-selection-list> </mat-expansion-panel> + <mat-expansion-panel #statusesPan> + <mat-expansion-panel-header> + <mat-panel-title> + {{lang.statuses}} + </mat-panel-title> + <mat-panel-description> + </mat-panel-description> + </mat-expansion-panel-header> + <mat-form-field floatLabel="never"> + <input matInput placeholder="Filtrer" #listFilter> + </mat-form-field> + <mat-selection-list #statuses (selectionChange)="updateFilters(statuses, 'statuses')"> + <mat-list-option checkboxPosition="before" color="primary" [value]="status.id" *ngFor="let status of statusesList | filterList:listFilter.value:'label_status'" + [selected]="status.selected"> + {{status.label_status}} + </mat-list-option> + </mat-selection-list> + </mat-expansion-panel> <mat-expansion-panel #entitiesPan> <mat-expansion-panel-header> <mat-panel-title> diff --git a/src/frontend/app/list/filters/filters-list.component.scss b/src/frontend/app/list/filters/filters-list.component.scss index 30b25308723ffc6d557a34e2cb5e3076157f773e..a399beeeed3b21ab60e9c26802aaf62de88dabe3 100644 --- a/src/frontend/app/list/filters/filters-list.component.scss +++ b/src/frontend/app/list/filters/filters-list.component.scss @@ -1,6 +1,6 @@ -.mat-form-field-suffix { +.filterList>.mat-form-field-suffix { top : 10px !important; -} +} .mat-expansion-panel-header-title { color: #F99830; diff --git a/src/frontend/app/list/filters/filters-list.component.ts b/src/frontend/app/list/filters/filters-list.component.ts index 07d4f8826b341cb244f02af2afa1747198c6df83..2b9ded5eb45aa64d891c7e8d7046951bb3496093 100644 --- a/src/frontend/app/list/filters/filters-list.component.ts +++ b/src/frontend/app/list/filters/filters-list.component.ts @@ -23,6 +23,7 @@ export class FiltersListComponent implements OnInit { prioritiesList: any[] = []; categoriesList: any[] = []; entitiesList: any[] = []; + statusesList: any[] = []; @Input('listProperties') listProperties: any; @@ -31,6 +32,7 @@ export class FiltersListComponent implements OnInit { @ViewChild('entitiesPan') entitiesPan: MatExpansionPanel; @ViewChild('subjectPan') subjectPan: MatExpansionPanel; @ViewChild('referencePan') referencePan: MatExpansionPanel; + @ViewChild('statusesPan') statusesPan: MatExpansionPanel; @Output() triggerEvent = new EventEmitter<string>(); @@ -71,12 +73,27 @@ export class FiltersListComponent implements OnInit { }); }); }); + + this.http.get("../../rest/statuses") + .subscribe((data: any) => { + console.log(data); + this.statusesList = data.statuses; + this.statusesList.forEach(element => { + element.selected = false; + this.listProperties.statuses.forEach((listPropertyStatus: any) => { + if (element.id === listPropertyStatus.id) { + element.selected = true; + this.statusesPan.open(); + } + }); + }); + }); } updateFilters(e: MatSelectionList, id: string) { this.listProperties[id] = []; e.selectedOptions.selected.forEach(element => { this.listProperties[id].push({ - 'id' : element.value, + 'id': element.value, 'label': element._text.nativeElement.innerText }); }); @@ -86,6 +103,6 @@ export class FiltersListComponent implements OnInit { setFocus(elem: MatInput) { setTimeout(() => { elem.focus(); - }, 200); + }, 200); } } \ No newline at end of file diff --git a/src/frontend/plugins/filterList.pipe.ts b/src/frontend/plugins/filterList.pipe.ts index 588c0f72b50013dcdfe36a216812cb30e9e1aac1..4d3174c7cc264c7932655b7e4165ae8aa5055b9d 100755 --- a/src/frontend/plugins/filterList.pipe.ts +++ b/src/frontend/plugins/filterList.pipe.ts @@ -7,10 +7,15 @@ import { Pipe, PipeTransform } from "@angular/core"; }) export class FilterListPipe implements PipeTransform { - transform(value: any, args: string): any { - - let filter = args.toLocaleLowerCase(); - return filter ? value.filter((basket:any) => basket.basket_name.toLocaleLowerCase().indexOf(filter) != -1) : value; + transform(value: any, args: string, id: string): any { + if (id !== undefined) { + let filter = args.toLocaleLowerCase(); + return filter ? value.filter((elem:any) => elem[id].toLocaleLowerCase().indexOf(filter) != -1) : value; + } else { + console.log('Init filter failed for values : '); + console.log(value); + } + } } diff --git a/src/frontend/service/filtersList.service.ts b/src/frontend/service/filtersList.service.ts index b4389928b7f1378ef4f09672f282ffb2c8d8d9f4..cf65fdb84e7debb10d63fc5796c12b36975b53a9 100644 --- a/src/frontend/service/filtersList.service.ts +++ b/src/frontend/service/filtersList.service.ts @@ -12,7 +12,8 @@ interface listProperties { 'delayed': boolean, 'categories' : string[], 'priorities' : string[], - 'entities' : string[] + 'entities' : string[], + 'statuses' : string[] } @Injectable() @@ -55,6 +56,7 @@ export class FiltersListService { 'categories' : [], 'priorities' : [], 'entities' : [], + 'statuses' : [], }; this.listsProperties.push(listProperties); this.saveListsProperties(); @@ -106,6 +108,14 @@ export class FiltersListService { filters += '&priorities='+prio.join(','); } + if (this.listsProperties[this.listsPropertiesIndex].statuses.length > 0) { + let status: any[] = []; + this.listsProperties[this.listsPropertiesIndex].statuses.forEach((element: any) => { + status.push(element.id); + }); + + filters += '&statuses='+status.join(','); + } return filters; }