From 1d34796579ef7088f4eeda31785c5b562956299c Mon Sep 17 00:00:00 2001 From: Bastien DUMONT <bdumont@grandlyon.com> Date: Wed, 5 Apr 2023 08:30:28 +0000 Subject: [PATCH] feat(admin): show deleted structures --- src/app/admin/admin.module.ts | 2 + .../deleted-structures.component.html | 15 +++++ .../deleted-structures.component.scss | 7 +++ .../deleted-structures.component.ts | 57 +++++++++++++++++++ .../components/panel/panel.component.html | 37 ++++++------ .../admin/components/panel/panel.component.ts | 16 ++---- src/app/admin/services/admin.service.ts | 5 ++ src/app/models/structure.model.ts | 2 + src/app/shared/enum/adminPanel.enum.ts | 7 ++- .../structure-details.component.html | 9 ++- 10 files changed, 123 insertions(+), 34 deletions(-) create mode 100644 src/app/admin/components/deleted-structures/deleted-structures.component.html create mode 100644 src/app/admin/components/deleted-structures/deleted-structures.component.scss create mode 100644 src/app/admin/components/deleted-structures/deleted-structures.component.ts diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts index c0b63004e..22525977d 100644 --- a/src/app/admin/admin.module.ts +++ b/src/app/admin/admin.module.ts @@ -20,6 +20,7 @@ import { JobRendererComponent } from './components/manage-users/job-renderer/job import { ManageUsersComponent } from './components/manage-users/manage-users.component'; import { PanelComponent } from './components/panel/panel.component'; import { AdminStructuresListComponent } from './components/structures-list/admin-structures-list.component'; +import { DeletedStructuresComponent } from './components/deleted-structures/deleted-structures.component'; @NgModule({ declarations: [ @@ -40,6 +41,7 @@ import { AdminStructuresListComponent } from './components/structures-list/admin AttachedUsersComponent, ManageJobsComponent, ManageEmployersComponent, + DeletedStructuresComponent, ], imports: [CommonModule, AdminRoutingModule, SharedModule, AgGridModule], }) diff --git a/src/app/admin/components/deleted-structures/deleted-structures.component.html b/src/app/admin/components/deleted-structures/deleted-structures.component.html new file mode 100644 index 000000000..ef140d887 --- /dev/null +++ b/src/app/admin/components/deleted-structures/deleted-structures.component.html @@ -0,0 +1,15 @@ +<div *ngIf="isLoading" class="loader"> + <img class="loader-gif" src="/assets/gif/loader_circle_grey.gif" alt /> +</div> +<div *ngIf="!isLoading" class="deletedStructures"> + <h2>Liste des structures supprimées</h2> + + <ag-grid-angular + *ngIf="deletedStructures" + class="ag-theme-alpine" + domLayout="autoHeight" + style="width: 100%" + [rowData]="deletedStructures" + [columnDefs]="columnDefs" + /> +</div> diff --git a/src/app/admin/components/deleted-structures/deleted-structures.component.scss b/src/app/admin/components/deleted-structures/deleted-structures.component.scss new file mode 100644 index 000000000..74e60b461 --- /dev/null +++ b/src/app/admin/components/deleted-structures/deleted-structures.component.scss @@ -0,0 +1,7 @@ +.deletedStructures { + display: flex; + flex-direction: column; + align-items: center; + margin: auto; + width: 80%; +} diff --git a/src/app/admin/components/deleted-structures/deleted-structures.component.ts b/src/app/admin/components/deleted-structures/deleted-structures.component.ts new file mode 100644 index 000000000..6b48ced90 --- /dev/null +++ b/src/app/admin/components/deleted-structures/deleted-structures.component.ts @@ -0,0 +1,57 @@ +import { DatePipe } from '@angular/common'; +import { Component, OnInit } from '@angular/core'; +import { ColDef } from 'ag-grid-community'; +import { finalize } from 'rxjs/operators'; +import { Structure } from '../../../models/structure.model'; +import { AdminService } from '../../services/admin.service'; + +@Component({ + selector: 'app-deleted-structures', + templateUrl: './deleted-structures.component.html', + styleUrls: ['./deleted-structures.component.scss'], +}) +export class DeletedStructuresComponent implements OnInit { + public deletedStructures: Structure[]; + public selectedStructure: Structure; + public isLoading = true; + + constructor(private adminService: AdminService, private datePipe: DatePipe) {} + + ngOnInit(): void { + this.adminService + .getDeletedStructures() + .pipe(finalize(() => (this.isLoading = false))) + .subscribe((structures) => { + this.deletedStructures = structures; + }); + } + + private renderLink(structure: Structure) { + return `<a href="/acteurs?id=${structure._id}" target="_blank">${structure.structureName}</a>`; + } + + public columnDefs: ColDef<Structure>[] = [ + { + headerName: 'Structure', + field: 'structureName', + minWidth: 450, + sortable: true, + cellRenderer: (params) => this.renderLink(params.data), + }, + { + headerName: 'Date de création', + field: 'createdAt', + width: 190, + sortable: true, + valueFormatter: (params) => this.datePipe.transform(params.value, 'yyyy-MM-dd'), + }, + { + headerName: 'Date de suppression', + field: 'deletedAt', + width: 190, + sortable: true, + sort: 'desc', + valueFormatter: (params) => this.datePipe.transform(params.value, 'yyyy-MM-dd'), + }, + ]; +} diff --git a/src/app/admin/components/panel/panel.component.html b/src/app/admin/components/panel/panel.component.html index 56cf05e40..4afbd9a95 100644 --- a/src/app/admin/components/panel/panel.component.html +++ b/src/app/admin/components/panel/panel.component.html @@ -4,45 +4,42 @@ <app-button [text]="'Revendication structure'" [style]="buttonTypeEnum.Secondary" - (click)="changeActiveFeature(features.pendingStructures)" + (click)="changeActiveFeature(tab.pendingStructures)" /> <app-button [text]="'Liste structures'" [style]="buttonTypeEnum.Secondary" - (click)="changeActiveFeature(features.structuresList)" + (click)="changeActiveFeature(tab.structuresList)" /> <app-button - [text]="'Gestion des utilisateurs'" + [text]="'Structures supprimées'" [style]="buttonTypeEnum.Secondary" - (click)="changeActiveFeature(features.manageUsers)" + (click)="changeActiveFeature(tab.deletedStructures)" /> <app-button - [text]="'Infos covid'" + [text]="'Gestion des utilisateurs'" [style]="buttonTypeEnum.Secondary" - (click)="changeActiveFeature(features.lockdownInfo)" + (click)="changeActiveFeature(tab.manageUsers)" /> <app-button - [text]="'Fonctions'" + [text]="'Infos covid'" [style]="buttonTypeEnum.Secondary" - (click)="changeActiveFeature(features.jobsList)" + (click)="changeActiveFeature(tab.lockdownInfo)" /> + <app-button [text]="'Fonctions'" [style]="buttonTypeEnum.Secondary" (click)="changeActiveFeature(tab.jobsList)" /> <app-button [text]="'Employeurs'" [style]="buttonTypeEnum.Secondary" - (click)="changeActiveFeature(features.employersList)" + (click)="changeActiveFeature(tab.employersList)" /> <a target="_blank" class="custom-link" rel="noopener noreferrer" [href]="ghostLink">Ghost</a> </div> - <app-admin-structures-list *ngIf="selectedFeature === features.structuresList" /> - - <app-admin-manage-users *ngIf="selectedFeature === features.manageUsers" /> - - <app-admin-claim-structure *ngIf="selectedFeature === features.pendingStructures" /> - - <app-admin-manage-lockdown-info *ngIf="selectedFeature === features.lockdownInfo" /> - - <app-admin-manage-jobs *ngIf="selectedFeature === features.jobsList" /> - - <app-admin-manage-employers *ngIf="selectedFeature === features.employersList" /> + <app-deleted-structures *ngIf="selectedTab === tab.deletedStructures" /> + <app-admin-structures-list *ngIf="selectedTab === tab.structuresList" /> + <app-admin-manage-users *ngIf="selectedTab === tab.manageUsers" /> + <app-admin-claim-structure *ngIf="selectedTab === tab.pendingStructures" /> + <app-admin-manage-lockdown-info *ngIf="selectedTab === tab.lockdownInfo" /> + <app-admin-manage-jobs *ngIf="selectedTab === tab.jobsList" /> + <app-admin-manage-employers *ngIf="selectedTab === tab.employersList" /> </div> diff --git a/src/app/admin/components/panel/panel.component.ts b/src/app/admin/components/panel/panel.component.ts index ff37d5f88..94b1bde1c 100644 --- a/src/app/admin/components/panel/panel.component.ts +++ b/src/app/admin/components/panel/panel.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component } from '@angular/core'; import { RuntimeConfigLoaderService } from 'runtime-config-loader'; import { ButtonType } from '../../../shared/components/button/buttonType.enum'; import { AdminPanelEnum } from '../../../shared/enum/adminPanel.enum'; @@ -9,10 +9,10 @@ import { PanelRouteService } from '../../services/panel-route.service'; templateUrl: './panel.component.html', providers: [PanelRouteService], }) -export class PanelComponent implements OnInit { - public features = AdminPanelEnum; +export class PanelComponent { public ghostLink = this.runtimeConfigLoaderService.getConfigObjectKey('ghostAdmin'); - public selectedFeature; + public selectedTab = AdminPanelEnum.pendingStructures; + public tab = AdminPanelEnum; public buttonTypeEnum = ButtonType; constructor( @@ -20,15 +20,11 @@ export class PanelComponent implements OnInit { private runtimeConfigLoaderService: RuntimeConfigLoaderService ) { this.panelRouteService.destinationChanged$.subscribe((selected: AdminPanelEnum) => { - this.selectedFeature = selected; + this.selectedTab = selected; }); } - ngOnInit(): void { - this.selectedFeature = this.features.pendingStructures; - } - public changeActiveFeature(newFeature: AdminPanelEnum): void { - this.selectedFeature = newFeature; + this.selectedTab = newFeature; } } diff --git a/src/app/admin/services/admin.service.ts b/src/app/admin/services/admin.service.ts index 2f5d09e88..b7e5e720b 100644 --- a/src/app/admin/services/admin.service.ts +++ b/src/app/admin/services/admin.service.ts @@ -3,6 +3,7 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { Employer } from '../../models/employer.model'; import { Job } from '../../models/job.model'; +import { Structure } from '../../models/structure.model'; import { User } from '../../models/user.model'; import { StructureAdminInfo } from '../models/demandAttachment.model'; @@ -168,4 +169,8 @@ export class AdminService { structureName, }); } + + public getDeletedStructures(): Observable<Structure[]> { + return this.http.get<Structure[]>(`${this.baseUrl}/getDeletedStructures`); + } } diff --git a/src/app/models/structure.model.ts b/src/app/models/structure.model.ts index 4d0e65207..91c6f4d33 100644 --- a/src/app/models/structure.model.ts +++ b/src/app/models/structure.model.ts @@ -15,6 +15,8 @@ export class Structure { public numero: string = null; public createdAt: string = null; public updatedAt: string = null; + /** This value is only available as an admin */ + public deletedAt?: string = null; public toBeDeletedAt?: string = null; public structureName: string = null; public structureType?: StructureType = null; diff --git a/src/app/shared/enum/adminPanel.enum.ts b/src/app/shared/enum/adminPanel.enum.ts index c6c1e63e5..8432a8294 100644 --- a/src/app/shared/enum/adminPanel.enum.ts +++ b/src/app/shared/enum/adminPanel.enum.ts @@ -1,8 +1,9 @@ export enum AdminPanelEnum { + deletedStructures, + employersList, + jobsList, + lockdownInfo, manageUsers, pendingStructures, structuresList, - jobsList, - employersList, - lockdownInfo, } diff --git a/src/app/structure-list/components/structure-details/structure-details.component.html b/src/app/structure-list/components/structure-details/structure-details.component.html index 1c3d8e369..2faef09c9 100644 --- a/src/app/structure-list/components/structure-details/structure-details.component.html +++ b/src/app/structure-list/components/structure-details/structure-details.component.html @@ -113,7 +113,14 @@ {{ structureAdmin.email }} </div> </div> - <a class="primary" tabindex="0" (click)="toggleDeleteModal()" (keyup.enter)="toggleDeleteModal()"> + <div *ngIf="structure.deletedAt">Supprimée le {{ structure.deletedAt | date : 'mediumDate' }}</div> + <a + *ngIf="!structure.deletedAt" + class="primary" + tabindex="0" + (click)="toggleDeleteModal()" + (keyup.enter)="toggleDeleteModal()" + > Supprimer cette structure </a> </div> -- GitLab