From bc2893fca78f65a2375455cc830a25aea8dc2256 Mon Sep 17 00:00:00 2001 From: Alex ORLUC <alex.orluc@maarch.org> Date: Fri, 1 Feb 2019 14:45:08 +0100 Subject: [PATCH] FEAT #9082 add checkbox for select mail in result list --- .../app/list/basket-list.component.html | 4 +- .../app/list/basket-list.component.ts | 44 +++++++++++++++++-- .../list/filters/filters-tool.component.html | 17 ++++--- .../list/filters/filters-tool.component.scss | 4 ++ .../list/filters/filters-tool.component.ts | 6 +++ src/frontend/lang/lang-en.ts | 2 + src/frontend/lang/lang-fr.ts | 2 + src/frontend/lang/lang-nl.ts | 2 + 8 files changed, 66 insertions(+), 15 deletions(-) diff --git a/src/frontend/app/list/basket-list.component.html b/src/frontend/app/list/basket-list.component.html index 29a19550d6b..21b1c1d98ff 100644 --- a/src/frontend/app/list/basket-list.component.html +++ b/src/frontend/app/list/basket-list.component.html @@ -18,7 +18,7 @@ <div class="row" style="margin:0px;"> <div class="col-md-12" style="display:flex;"> <app-filters-tool style="flex:1;" #filtersTool [currentBasketInfo]="currentBasketInfo" - [listProperties]="this.listProperties" [snavR]="snav2" (refreshEvent)="refreshDao()"></app-filters-tool> + [listProperties]="this.listProperties" [snavR]="snav2" [nbSelectedRes]="selectedRes.length" (toggleAllRes)="toggleAllRes($event)" (refreshEvent)="refreshDao()"></app-filters-tool> <mat-paginator #paginatorResultList [length]="resultsLength" [pageSize]="10" class="paginatorResultList"></mat-paginator> </div> </div> @@ -61,7 +61,7 @@ <!-- Primary Info Line --> <div class="resultRow newRow" [class.resultRow-mobile]="mobileMode"> <div *ngIf="!mobileMode" class="checkThis"> - <mat-checkbox color="primary"></mat-checkbox> + <mat-checkbox color="primary" [checked]="row.checked" (change)="toggleRes($event,row.res_id)" (click)="$event.stopPropagation();"></mat-checkbox> </div> <div class="resultCol {{data.class}}" *ngFor="let data of displayedMainData"> <span *ngIf="data.id == 'alt_identifier'"> diff --git a/src/frontend/app/list/basket-list.component.ts b/src/frontend/app/list/basket-list.component.ts index 85eef1d911d..3b969c72034 100755 --- a/src/frontend/app/list/basket-list.component.ts +++ b/src/frontend/app/list/basket-list.component.ts @@ -95,7 +95,7 @@ export class BasketListComponent implements OnInit { ]; resultListDatabase: ResultListHttpDao | null; - data: any[] = []; + data: any; resultsLength = 0; isLoadingResults = true; listProperties: any = {}; @@ -103,6 +103,9 @@ export class BasketListComponent implements OnInit { currentChrono: string = ''; thumbnailUrl: string = ''; + selectedRes: number[] = []; + allResInBasket: number[] = []; + @ViewChild('filtersTool') filtersTool: FiltersToolComponent; @ViewChild(MatPaginator) paginator: MatPaginator; @@ -176,6 +179,7 @@ export class BasketListComponent implements OnInit { this.isLoadingResults = false; data = this.processPostData(data); this.resultsLength = data.count; + this.allResInBasket = data.allResources; this.headerService.setHeader(data.basketLabel, this.resultsLength + ' ' + this.lang.entries); return data.resources; }), @@ -250,27 +254,59 @@ export class BasketListComponent implements OnInit { Object.keys(element).forEach((key) => { if ((element[key] == null || element[key] == '') && ['process_limit_date', 'creation_date', 'closing_date', 'countAttachments', 'countNotes'].indexOf(key) === -1) { element[key] = this.lang.undefined; - } else if (["senders","recipients"].indexOf(key) > 0) { + } else if (["senders", "recipients"].indexOf(key) > 0) { if (element[key].length > 1) { console.log(element[key]); element[key] = this.lang.isMulticontact; } else { element[key] = element[key][0]; - } + } } else if (key == 'status_icon' && element[key] == null) { element[key] = 'fa-question undefined'; } }); + + if (this.selectedRes.indexOf(element['res_id']) === -1) { + element['checked'] = false; + } else { + element['checked'] = true; + } }); return data; } + + toggleRes(e: any, resId: any) { + if (e.checked) { + if (this.selectedRes.indexOf(resId) === -1) { + this.selectedRes.push(resId); + } + } else { + let index = this.selectedRes.indexOf(resId); + this.selectedRes.splice(index, 1); + } + } + + toggleAllRes(e: any) { + this.selectedRes = []; + if (e.checked) { + this.data.forEach((element: any) => { + element['checked'] = true; + }); + this.selectedRes = this.allResInBasket; + } else { + this.data.forEach((element: any) => { + element['checked'] = false; + }); + } + } } export interface BasketList { resources: any[]; count: number; - basketLabel: string + basketLabel: string, + allResources: number[] } diff --git a/src/frontend/app/list/filters/filters-tool.component.html b/src/frontend/app/list/filters/filters-tool.component.html index 22d1363be51..a10462ca28d 100644 --- a/src/frontend/app/list/filters/filters-tool.component.html +++ b/src/frontend/app/list/filters/filters-tool.component.html @@ -1,5 +1,5 @@ <mat-button-toggle-group #group="matButtonToggleGroup" class="envFilter" multiple> - <mat-checkbox color="primary" style="margin: 10px;" title="Sélectionner tous les courriers de la bannette"></mat-checkbox> + <mat-checkbox color="primary" style="margin: 10px;" title="Sélectionner tous les courriers de la bannette" (change)="toggleAll($event)"></mat-checkbox> <form [formGroup]="stateForm" [style.flex]="1"> <mat-form-field appearance="outline" floatLabel="never" [style.fontSize.px]="10" style="top: -2px;"> <input class="metaSearch" type="text" matInput placeholder="{{lang.searchMailInBasket}}" formControlName="stateGroup" @@ -45,22 +45,21 @@ <mat-icon color="primary" fontSet="fas" fontIcon="fa-cog fa-2x"></mat-icon> </button> <mat-menu #menuParamList="matMenu"> - <button mat-menu-item> + <div style="text-align: center;font-size: 10px;opacity: 0.5;margin-top:-10px;"> + {{nbSelectedRes}} {{lang.selectedElements}} + </div> + <button mat-menu-item [disabled]="nbSelectedRes == 0"> <mat-icon fontSet="fas" fontIcon="fa-print fa-2x"></mat-icon> <span>{{lang.printResultList}}</span> </button> - <button mat-menu-item (click)="openSummarySheet();"> + <button mat-menu-item (click)="openSummarySheet();" [disabled]="nbSelectedRes == 0"> <mat-icon fontSet="fas" fontIcon="fa-link fa-2x"></mat-icon> - <span>Fiche(s) de liaison(s)</span> + <span>{{lang.summarySheets}}</span> </button> - <button mat-menu-item (click)="openListAdmin();"> + <button mat-menu-item (click)="openListAdmin();" [disabled]="nbSelectedRes == 0"> <mat-icon fontSet="fas" fontIcon="fa-file-export fa-2x"></mat-icon> <span>{{lang.exportDatas}}</span> </button> - <button mat-menu-item> - <mat-icon fontSet="far" fontIcon="fa-list-alt fa-2x"></mat-icon> - <span>{{lang.settingsList}}</span> - </button> </mat-menu> </mat-button-toggle-group> <div class="filterBadges"> diff --git a/src/frontend/app/list/filters/filters-tool.component.scss b/src/frontend/app/list/filters/filters-tool.component.scss index 259cea60355..19ed6937036 100644 --- a/src/frontend/app/list/filters/filters-tool.component.scss +++ b/src/frontend/app/list/filters/filters-tool.component.scss @@ -99,4 +99,8 @@ .undefined { opacity: 0.5; font-style: italic; +} + +.mat-menu-content:not(:empty) { + padding-top: 18px; } \ No newline at end of file diff --git a/src/frontend/app/list/filters/filters-tool.component.ts b/src/frontend/app/list/filters/filters-tool.component.ts index fee93452a7c..33d28713964 100644 --- a/src/frontend/app/list/filters/filters-tool.component.ts +++ b/src/frontend/app/list/filters/filters-tool.component.ts @@ -63,8 +63,10 @@ export class FiltersToolComponent implements OnInit { @Input('currentBasketInfo') currentBasketInfo: any; @Input('snavR') sidenavRight: MatSidenav; + @Input('nbSelectedRes') nbSelectedRes: number; @Output('refreshEvent') refreshEvent = new EventEmitter<string>(); + @Output('toggleAllRes') toggleAllRes = new EventEmitter<string>(); constructor(public http: HttpClient, private filtersListService: FiltersListService, private fb: FormBuilder, private latinisePipe: LatinisePipe, public dialog: MatDialog) { } @@ -296,4 +298,8 @@ export class FiltersToolComponent implements OnInit { } }); } + + toggleAll(e: any) { + this.toggleAllRes.emit(e); + } } diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index 11a69b66ea5..1adf4cee544 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -781,6 +781,7 @@ export const LANG_EN = { "removeAllDatas" : "Remove all datas", "toExport" : "Export", "summarySheet" : "Summary sheet", + "summarySheets" : "Summary sheet(s)", "appName" : "Application name", "printDate" : "Print date", "genSummarySheets" : "Generate Summary sheets", @@ -796,4 +797,5 @@ export const LANG_EN = { "toggleQrcode" : "Display / Hide mail identifier (qrcode)", "deleteUnit" : "Delete unit", "addCustomUnit" : "Add custom unit", + "selectedElements" : "selected element(s)", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index eda2631d08f..0f0e68ea23c 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -807,6 +807,7 @@ export const LANG_FR = { "removeAllDatas" : "Enlever toutes les données", "toExport" : "Exporter", "summarySheet" : "Fiche de liaison", + "summarySheets" : "Fiche(s) de liaison(s)", "appName" : "Nom de l'application", "printDate" : "Date d'impression", "genSummarySheets" : "Générer les fiches de liaisons", @@ -822,4 +823,5 @@ export const LANG_FR = { "toggleQrcode" : "Afficher / cacher l'identifiant courrier (qrcode)", "deleteUnit" : "Supprimer le bloc", "addCustomUnit" : "Ajouter un bloc custom", + "selectedElements" : "élément(s) sélectionné(s)", }; diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index 83c505f352a..49cc002b169 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -810,6 +810,7 @@ export const LANG_NL = { "removeAllDatas" : "_TO_TRANSLATE", "toExport" : "_TO_TRANSLATE", "summarySheet" : "_TO_TRANSLATE", + "summarySheets" : "_TO_TRANSLATE", "appName" : "_TO_TRANSLATE", "printDate" : "_TO_TRANSLATE", "genSummarySheets" : "_TO_TRANSLATE", @@ -825,4 +826,5 @@ export const LANG_NL = { "toggleQrcode" : "_TO_TRANSLATE", "deleteUnit" : "_TO_TRANSLATE", "addCustomUnit" : "_TO_TRANSLATE", + "selectedElements" : "_TO_TRANSLATE", }; -- GitLab