From f3ff70b9accc3381e9ff5ee85c53bc8fee44a302 Mon Sep 17 00:00:00 2001 From: Jeremie BRISON <ext.sopra.jbrison@grandlyon.com> Date: Tue, 3 Nov 2020 12:32:19 +0100 Subject: [PATCH] fix(search) : add event click output modal --- src/app/app.module.ts | 4 +++- .../modal-filter/modal-filter.component.html | 10 ++++++++-- .../modal-filter/modal-filter.component.ts | 7 ++++--- .../components/search/search.component.html | 5 ++++- .../components/search/search.component.ts | 10 +++++++++- .../services/modalOutside.directive.ts | 18 ++++++++++++++++++ 6 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 src/app/structure-list/services/modalOutside.directive.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index a2af3088e..a737e0f0f 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -16,9 +16,10 @@ import { StructureListComponent } from './structure-list/structure-list.componen import { CardComponent } from './structure-list/components/card/card.component'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { SearchComponent } from './structure-list/components/search/search.component'; -import { ModalFilterComponent } from './structure-list/components/modal-filter/modal-filter.component'; import { StructureDetailsComponent } from './structure-list/components/structure-details/structure-details.component'; import { StructureOpeningStatusComponent } from './structure-list/components/structure-opening-status/structure-opening-status.component'; +import { ModalOutsideDirective } from './structure-list/services/modalOutside.directive'; +import { ModalFilterComponent } from './structure-list/components/modal-filter/modal-filter.component'; @NgModule({ declarations: [ @@ -32,6 +33,7 @@ import { StructureOpeningStatusComponent } from './structure-list/components/str ModalFilterComponent, StructureDetailsComponent, StructureOpeningStatusComponent, + ModalOutsideDirective, ], imports: [ BrowserModule, diff --git a/src/app/structure-list/components/modal-filter/modal-filter.component.html b/src/app/structure-list/components/modal-filter/modal-filter.component.html index ec2d69fb0..57437de6c 100644 --- a/src/app/structure-list/components/modal-filter/modal-filter.component.html +++ b/src/app/structure-list/components/modal-filter/modal-filter.component.html @@ -1,4 +1,10 @@ -<div *ngIf="modalType" fxLayout="column" fxLayoutAlign="space-between" [ngClass]="['modal', 'modal' + modalType]"> +<div + *ngIf="modalType" + (clickOutside)="emitModules(modules)" + fxLayout="column" + fxLayoutAlign="space-between" + [ngClass]="['modal', 'modal' + modalType]" +> <div class="body-wrap"> <div class="contentModal" fxLayout="row wrap" fxLayoutAlign="flex-start" *ngIf="categories.length > 0"> <div class="blockFiltre" *ngFor="let c of categories"> @@ -27,7 +33,7 @@ </div> <div class="footer" fxLayout="row" fxLayoutAlign="end center" fxLayoutGap="3vw"> <a (click)="clearFilters()">Effacer</a> - <button type="button" (click)="emitModules()">Appliquer</button> + <button type="button" (click)="emitModules(checkedModules)">Appliquer</button> </div> </div> </div> diff --git a/src/app/structure-list/components/modal-filter/modal-filter.component.ts b/src/app/structure-list/components/modal-filter/modal-filter.component.ts index 2f46075fa..ee1a02278 100644 --- a/src/app/structure-list/components/modal-filter/modal-filter.component.ts +++ b/src/app/structure-list/components/modal-filter/modal-filter.component.ts @@ -1,7 +1,6 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { Category } from '../../models/category.model'; -import { Filter } from '../../models/filter.model'; import { Module } from '../../models/module.model'; @Component({ @@ -25,6 +24,7 @@ export class ModalFilterComponent implements OnInit { searchForm: FormGroup; ngOnInit(): void { // Manage checkbox + console.log('init'); this.checkedModules = this.modules.slice(); } @@ -55,10 +55,11 @@ export class ModalFilterComponent implements OnInit { } }); }); + this.emitModules([]); } // Sends an array containing all modules - public emitModules(): void { - this.searchEvent.emit(this.checkedModules); + public emitModules(m: Module[]): void { + this.searchEvent.emit(m); } } diff --git a/src/app/structure-list/components/search/search.component.html b/src/app/structure-list/components/search/search.component.html index 5bd17e8fd..e8acc2e99 100644 --- a/src/app/structure-list/components/search/search.component.html +++ b/src/app/structure-list/components/search/search.component.html @@ -28,6 +28,7 @@ <div class="btnSection" fxLayout="row" fxLayoutAlign="space-between center"> <button type="button" + [disabled]="modalTypeOpened === TypeModal[0]" [ngClass]="{ selected: modalTypeOpened === TypeModal[0] }" (click)="openModal(TypeModal[0])" fxLayout="row" @@ -38,6 +39,7 @@ </button> <button type="button" + [disabled]="modalTypeOpened === TypeModal[1]" [ngClass]="{ selected: modalTypeOpened === TypeModal[1] }" (click)="openModal(TypeModal[1])" fxLayout="row" @@ -48,8 +50,9 @@ </button> <button type="button" + [disabled]="modalTypeOpened === TypeModal[2]" [ngClass]="{ selected: modalTypeOpened === TypeModal[2] }" - (click)="openModal(TypeModal[2])" + (click)="modalTypeOpened === TypeModal[2] ? test() : openModal(TypeModal[2])" fxLayout="row" fxLayoutAlign="space-between center" > diff --git a/src/app/structure-list/components/search/search.component.ts b/src/app/structure-list/components/search/search.component.ts index 10f0393f2..604a1967a 100644 --- a/src/app/structure-list/components/search/search.component.ts +++ b/src/app/structure-list/components/search/search.component.ts @@ -75,12 +75,14 @@ export class SearchComponent implements OnInit { this.checkedModulesFilter = checkedModules; // Close modal after receive filters from her. - this.openModal(this.modalTypeOpened); + this.closeModal(); inputTerm ? this.applyFilter(inputTerm) : this.applyFilter(null); } // Open the modal and display the list according to the right filter button public openModal(option: string): void { + console.log(this.modalTypeOpened); + console.log(option); this.categories = []; if (this.modalTypeOpened !== option) { this.modalTypeOpened = option; @@ -89,6 +91,12 @@ export class SearchComponent implements OnInit { this.modalTypeOpened = null; } } + test() { + console.log('test'); + } + public closeModal(): void { + this.modalTypeOpened = null; + } private fromStringToIdExcel(categ: string): string { const splitStr = categ.toLowerCase().split(' '); diff --git a/src/app/structure-list/services/modalOutside.directive.ts b/src/app/structure-list/services/modalOutside.directive.ts new file mode 100644 index 000000000..b8ebc284c --- /dev/null +++ b/src/app/structure-list/services/modalOutside.directive.ts @@ -0,0 +1,18 @@ +/* tslint:disable:member-ordering */ +import { Directive, ElementRef, HostListener, Output, EventEmitter } from '@angular/core'; + +@Directive({ + selector: '[clickOutside]', +}) +export class ModalOutsideDirective { + constructor(private _elementRef: ElementRef) {} + + @Output('clickOutside') clickOutside: EventEmitter<any> = new EventEmitter(); + + @HostListener('document:mousedown', ['$event.target']) onMouseEnter(targetElement) { + const clickedInside = this._elementRef.nativeElement.contains(targetElement); + if (!clickedInside) { + this.clickOutside.emit(null); + } + } +} -- GitLab