diff --git a/src/frontend/app/list/basket-list.component.html b/src/frontend/app/list/basket-list.component.html index 29a19550d6b4bb62c363659fbeac23e74cf00c6e..21b1c1d98ff47153900ec9ca678a7d8a854bfe46 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 85eef1d911d387b466e7e7859324623c1fbafb79..3b969c720342718ee9227ff6e81ca4caf7f1a771 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 22d1363be51f8344a83b85a25e9769fc6d17607a..a10462ca28d0812a1c578e5a0c6a64f1911f49c5 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 259cea60355d912ed716e5a66da5858ead054d02..19ed693703602d298ecdec012f7136f873dcdcbc 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 fee93452a7cb5aa6d25fa183ff41c61ef1b7e47d..33d28713964c7a54b4f8f73bc6d2c49acc4fc5c1 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 11a69b66ea552ef71d26347f3e8216d9728f504a..1adf4cee544dec0f46df3198e9d8f58196550693 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 eda2631d08f7f738cdbf264c44aa516ffe8456bd..0f0e68ea23ccda8cd97fa598c36539c4fa1ea016 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 83c505f352ac8d15f211e6c98fdd7986350de6a6..49cc002b169b6a688bd0b1d9a515f77b50b86656 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", };