From 7cfa91ffca0ad6d0720130fc9d4afa52e4eec712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marl=C3=A8ne=20SIMONDANT?= <msimondant@grandlyon.com> Date: Tue, 17 May 2022 09:03:50 +0000 Subject: [PATCH] feat(admin) : add admin page with checkbox to display / hide covid information in structure details --- src/app/admin/admin-pannel.scss | 25 +++++++++++++++ src/app/admin/admin.module.ts | 2 ++ .../manage-lockdown-info.component.html | 19 ++++++++++++ .../manage-lockdown-info.component.spec.ts | 24 ++++++++++++++ .../manage-lockdown-info.component.ts | 31 +++++++++++++++++++ .../components/panel/panel.component.html | 4 +++ src/app/admin/services/parameters.service.ts | 19 ++++++++++++ src/app/shared/enum/adminPanel.enum.ts | 1 + 8 files changed, 125 insertions(+) create mode 100644 src/app/admin/components/lockdown-info/manage-lockdown-info.component.html create mode 100644 src/app/admin/components/lockdown-info/manage-lockdown-info.component.spec.ts create mode 100644 src/app/admin/components/lockdown-info/manage-lockdown-info.component.ts create mode 100644 src/app/admin/services/parameters.service.ts diff --git a/src/app/admin/admin-pannel.scss b/src/app/admin/admin-pannel.scss index 5ced4166a..1b7c40a19 100644 --- a/src/app/admin/admin-pannel.scss +++ b/src/app/admin/admin-pannel.scss @@ -26,3 +26,28 @@ .structure-updated-at { text-align: right; } + +.error { + color: red; + font-weight: bold; +} + +.singleCheckbox { + background: $white; + border-radius: 4px; + padding: 0 16px; + height: 44px; + padding-top: 22px; + outline: none; + border: 1px solid; + margin: 8px 0; + &.checked { + color: $white; + background: $green-1; + border: none; + } + input, + label { + cursor: pointer; + } +} diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts index 29e6689e7..d937cc788 100644 --- a/src/app/admin/admin.module.ts +++ b/src/app/admin/admin.module.ts @@ -6,6 +6,7 @@ import { ManageUsersComponent } from './components/manage-users/manage-users.com import { SharedModule } from '../shared/shared.module'; import { NewsletterUsersComponent } from './components/newsletter-users/newsletter-users.component'; import { AdminStructuresListComponent } from './components/structures-list/admin-structures-list.component'; +import { ManageLockdownInfoComponent } from './components/lockdown-info/manage-lockdown-info.component'; import { AdminRoutingModule } from './admin-routing.module'; import { AgGridModule } from 'ag-grid-angular'; import { DeleteUserComponent } from './components/manage-users/delete-user/delete-user.component'; @@ -17,6 +18,7 @@ import { AdministredStructuresComponent } from './components/manage-users/admini ClaimStructureComponent, NewsletterUsersComponent, AdminStructuresListComponent, + ManageLockdownInfoComponent, ManageUsersComponent, DeleteUserComponent, AdministredStructuresComponent, diff --git a/src/app/admin/components/lockdown-info/manage-lockdown-info.component.html b/src/app/admin/components/lockdown-info/manage-lockdown-info.component.html new file mode 100644 index 000000000..942e5a16c --- /dev/null +++ b/src/app/admin/components/lockdown-info/manage-lockdown-info.component.html @@ -0,0 +1,19 @@ +<div *ngIf="isLoading" class="loader"> + <img class="loader-gif" src="/assets/gif/loader_circle.gif" alt /> +</div> +<div *ngIf="!isLoading" fxLayout="column" fxLayoutAlign="center center"> + <H2>Gestion de l'affichage des infos Covid</H2> + <div *ngIf="lockdownInfoDisplay">Les infos covid sont actuellement affichées dans les fiches structure.</div> + <div *ngIf="!lockdownInfoDisplay">Les infos covid ne sont actuellement pas affichées dans les fiches structure.</div> + <div *ngIf="!error" class="singleCheckbox" [ngClass]="{ checked: lockdownInfoDisplay }"> + <input + type="checkbox" + name="lockdownInfo" + id="lockdownInfo" + [checked]="lockdownInfoDisplay" + (change)="toggleLockdownInfo()" + /> + <label for="lockdownInfo"> Afficher les infos covid</label> + </div> + <p *ngIf="error" class="error">Une erreur s'est produite a l'enregistrement, veuillez ré-essayer plus tard.</p> +</div> diff --git a/src/app/admin/components/lockdown-info/manage-lockdown-info.component.spec.ts b/src/app/admin/components/lockdown-info/manage-lockdown-info.component.spec.ts new file mode 100644 index 000000000..ba95d305f --- /dev/null +++ b/src/app/admin/components/lockdown-info/manage-lockdown-info.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ManageLockdownInfoComponent } from './manage-lockdown-info.component'; + +describe('ManageLockdownInfoComponent', () => { + let component: ManageLockdownInfoComponent; + let fixture: ComponentFixture<ManageLockdownInfoComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ManageLockdownInfoComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ManageLockdownInfoComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/admin/components/lockdown-info/manage-lockdown-info.component.ts b/src/app/admin/components/lockdown-info/manage-lockdown-info.component.ts new file mode 100644 index 000000000..187fb3541 --- /dev/null +++ b/src/app/admin/components/lockdown-info/manage-lockdown-info.component.ts @@ -0,0 +1,31 @@ +import { Component, OnInit } from '@angular/core'; +import { ParametersService } from '../../services/parameters.service'; + +@Component({ + selector: 'app-admin-manage-lockdown-info', + templateUrl: './manage-lockdown-info.component.html', + styleUrls: ['../../admin-pannel.scss'], +}) +export class ManageLockdownInfoComponent implements OnInit { + public isLoading: boolean = true; + public lockdownInfoDisplay: boolean; + public error: boolean = false; + constructor(private parametersService: ParametersService) {} + + ngOnInit(): void { + this.parametersService.getParameters().subscribe((params) => { + this.lockdownInfoDisplay = params.lockdownInfoDisplay; + this.isLoading = false; + }); + } + + public toggleLockdownInfo() { + this.lockdownInfoDisplay = !this.lockdownInfoDisplay; + this.parametersService.SetLockdownInfoDisplay(this.lockdownInfoDisplay).subscribe( + () => {}, + () => { + this.error = true; + } + ); + } +} diff --git a/src/app/admin/components/panel/panel.component.html b/src/app/admin/components/panel/panel.component.html index 0443ed9b8..8cc0ae138 100644 --- a/src/app/admin/components/panel/panel.component.html +++ b/src/app/admin/components/panel/panel.component.html @@ -4,6 +4,7 @@ <button (click)="changeActiveFeature(features.pendingStructures)">Revendication structure</button> <button (click)="changeActiveFeature(features.structuresList)">Liste structures</button> <button (click)="changeActiveFeature(features.deleteUsers)">Gestion des utilisateurs</button> + <button (click)="changeActiveFeature(features.lockdownInfo)">Gestion des infos covid</button> <button (click)="changeActiveFeature(features.newsletterUsers)">Newsletter</button> <a target="_blank" class="custom-link" rel="noopener noreferrer" [href]="ghostLink">Ghost</a> </div> @@ -16,6 +17,9 @@ <div *ngIf="selectedFeature === features.pendingStructures"> <app-admin-claim-structure></app-admin-claim-structure> </div> + <div *ngIf="selectedFeature === features.lockdownInfo"> + <app-admin-manage-lockdown-info></app-admin-manage-lockdown-info> + </div> <div *ngIf="selectedFeature === features.newsletterUsers"> <app-admin-newsletter-users></app-admin-newsletter-users> </div> diff --git a/src/app/admin/services/parameters.service.ts b/src/app/admin/services/parameters.service.ts new file mode 100644 index 000000000..149900697 --- /dev/null +++ b/src/app/admin/services/parameters.service.ts @@ -0,0 +1,19 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class ParametersService { + private readonly baseUrl = 'api/'; + constructor(private http: HttpClient) {} + + public getParameters(): Observable<any> { + return this.http.get<any>(`${this.baseUrl}parameters`); + } + + public SetLockdownInfoDisplay(lockdownInfoDisplay: boolean): Observable<any> { + return this.http.post(`${this.baseUrl}parameters/`, { lockdownInfoDisplay }); + } +} diff --git a/src/app/shared/enum/adminPanel.enum.ts b/src/app/shared/enum/adminPanel.enum.ts index 7608abd46..1c82cf1e5 100644 --- a/src/app/shared/enum/adminPanel.enum.ts +++ b/src/app/shared/enum/adminPanel.enum.ts @@ -3,4 +3,5 @@ export enum AdminPannelEnum { pendingStructures, newsletterUsers, structuresList, + lockdownInfo, } -- GitLab