UNPKG

@gouvfr-anct/mediation-numerique

Version:

📚 Bibliothèque pour la cartographie de l’offre de médiation numérique.

229 lines 72.4 kB
import { Component, EventEmitter, Inject, Output } from '@angular/core'; import { ButtonType } from '@gouvfr-anct/mediation-numerique/shared'; import { TypeModal } from '../../models/enum/typeModal.enum'; import { Filter } from '../../models/filter.model'; import { Module } from '../../models/module.model'; import { SEARCH_TOKEN } from '../../repositories/search.repository'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "@angular/router"; import * as i3 from "@angular/common"; import * as i4 from "@angular/flex-layout"; import * as i5 from "@gouvfr-anct/mediation-numerique/shared"; import * as i6 from "../modal-filter/modal-filter.component"; export class StructureListSearchComponent { constructor(searchService, fb, activatedRoute, route, router) { this.searchService = searchService; this.fb = fb; this.activatedRoute = activatedRoute; this.route = route; this.router = router; this.searchEvent = new EventEmitter(); this.locate = false; // Show/hide form createStructure this.addStructureFormModal = false; this.buttonTypeEnum = ButtonType; this.numberTrainingChecked = 0; this.numberAccompanimentChecked = 0; this.numberPublicChecked = 0; this.numberEquipmentChecked = 0; this.numberMoreFiltersChecked = 0; // Modal categories this.categoriesTraining = []; this.categoriesAccompaniment = []; this.categoriesPublic = []; this.categoriesEquipment = []; this.categoriesMoreFilters = []; // Modal confirmation variable this.isConfirmationModalOpen = false; this.confirmationModalContent = 'Afin d’ajouter votre structure,vous allez être redirigé vers le formulaire Grand Lyon à remplir.'; this.searchForm = this.fb.group({ searchTerm: this.activatedRoute.snapshot.queryParamMap.get('search') ? this.activatedRoute.snapshot.queryParamMap.get('search') : '' }); } ngOnInit() { // Will store the different categories this.getData(); this.queryString = this.activatedRoute.snapshot.queryParamMap.get('search'); this.checkedModulesFilter = new Array(); if (this.queryString) { const filters = []; filters.push(new Filter('query', this.queryString)); this.searchEvent.emit(filters); } } convertModulesTofilters(modules, term) { const filters = []; if (term) { filters.push(new Filter('query', term)); } // Add checked box filter modules.forEach((cm) => { filters.push(new Filter(cm.text, cm.id, cm.displayText)); }); return filters; } // Accessor to template angular. get TypeModal() { return TypeModal; } // Clear input search clearInput() { this.searchForm.reset(); this.applyFilter(null); } // Sends an array containing all filters applyFilter(term) { // Add search input filter if (term) { this.router.navigate(['/acteurs'], { relativeTo: this.route, queryParams: { search: term }, queryParamsHandling: 'merge' }); } else if (!term) { this.router.navigate(['/acteurs'], { relativeTo: this.route }); } const filters = this.convertModulesTofilters(this.checkedModulesFilter, term); // Send filters this.searchEvent.emit(filters); } fetchResults(checkedModules) { const inputTerm = this.searchForm.get('searchTerm').value; // Check if some modules is checked in filters if (this.checkedModulesFilter !== checkedModules) { this.countCheckFiltersOnModules(checkedModules); } // Store checked modules this.checkedModulesFilter = checkedModules; // Close modal after receive filters from her. this.closeModal(); this.applyFilter(inputTerm); } // Check if some modules is checked on filter and store number of modules checked countCheckFiltersOnModules(checkedModules) { this.numberAccompanimentChecked = checkedModules.filter((module) => module.text === 'proceduresAccompaniment').length; this.numberTrainingChecked = checkedModules.filter((module) => module.text === 'baseSkills' || module.text === 'socialAndProfessional' || module.text === 'parentingHelp' || module.text === 'accessRight' || module.text === 'digitalCultureSecurity').length; this.numberPublicChecked = checkedModules.filter((module) => module.text === 'publicsAccompaniment').length; this.numberEquipmentChecked = checkedModules.filter((module) => module.text === 'equipmentsAndServices').length; this.numberMoreFiltersChecked = checkedModules.filter((module) => module.text === 'labelsQualifications' || module.text === 'accessModality').length; } getModalCategory() { switch (this.modalTypeOpened) { case TypeModal.accompaniment: return this.categoriesAccompaniment; case TypeModal.training: return this.categoriesTraining; case TypeModal.public: return this.categoriesPublic; case TypeModal.equipments: return this.categoriesEquipment; case TypeModal.moreFilters: return this.categoriesMoreFilters; default: throw new Error('Modal type not handle'); } } // Open the modal and display the list according to the right filter button openModal(modalType) { // if modal already opened, reset type if (this.modalTypeOpened === modalType) { this.closeModal(); } else if (this.modalTypeOpened !== modalType) { this.modalTypeOpened = modalType; } } closeModal() { this.modalTypeOpened = undefined; } // Management of the checkbox event (Check / Uncheck) externalCheckboxCheck(event, categ, displayName) { const checkValue = event.target.value; const inputTerm = this.searchForm.get('searchTerm').value; if (event.target.checked) { this.checkedModulesFilter.push(new Module(checkValue, categ, displayName)); this.numberMoreFiltersChecked++; } else { // Check if the module is present in the list and remove it const index = this.checkedModulesFilter.findIndex((m) => m.id === checkValue && m.text === categ); if (index > -1) { this.checkedModulesFilter.splice(index, 1); this.countCheckFiltersOnModules(this.checkedModulesFilter); } } this.applyFilter(inputTerm); } // Get the categories for each modal type getData() { this.searchService.getCategoriesAccompaniment().subscribe((res) => { const categories = res; categories.forEach((category) => { this.categoriesAccompaniment.push(category); }); }); this.searchService.getCategoriesTraining().subscribe((res) => { const categories = res; categories.forEach((category) => { this.categoriesTraining.push(category); }); }); this.searchService.getCategoriesOthers().subscribe((res) => { const categories = res; categories.forEach((category) => { if (category.id === 'publicsAccompaniment') { this.categoriesPublic.push(category); } else if (category.id === 'equipmentsAndServices') { this.categoriesEquipment.push(category); } else if (category.id === 'labelsQualifications' || category.id === 'accessModality') { this.categoriesMoreFilters.push(category); } }); }); } resetFilters() { this.checkedModulesFilter = []; this.numberTrainingChecked = 0; this.numberAccompanimentChecked = 0; this.numberPublicChecked = 0; this.numberEquipmentChecked = 0; this.numberMoreFiltersChecked = 0; const inputTerm = this.searchForm.get('searchTerm').value; const filters = this.convertModulesTofilters(this.checkedModulesFilter, inputTerm); this.searchEvent.emit(filters); } removeFilter(module) { const index = this.checkedModulesFilter.findIndex((m) => m.id === module.id); this.checkedModulesFilter.splice(index, 1); const inputTerm = this.searchForm.get('searchTerm').value; const filters = this.convertModulesTofilters(this.checkedModulesFilter, inputTerm); this.countCheckFiltersOnModules(this.checkedModulesFilter); this.searchEvent.emit(filters); } } StructureListSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: StructureListSearchComponent, deps: [{ token: SEARCH_TOKEN }, { token: i1.FormBuilder }, { token: i2.ActivatedRoute }, { token: i2.ActivatedRoute }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); StructureListSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: StructureListSearchComponent, selector: "app-structure-list-search", outputs: { searchEvent: "searchEvent" }, ngImport: i0, template: "<div class=\"block\">\n <div class=\"content\">\n <form\n class=\"inputSearch\"\n [formGroup]=\"searchForm\"\n fxLayout=\"row\"\n fxLayoutGap=\"4px\"\n fxLayoutAlign=\" center\"\n (ngSubmit)=\"applyFilter(searchForm.value.searchTerm)\">\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"container\">\n <input type=\"text\" formControlName=\"searchTerm\" placeholder=\"Rechercher une association, une commune...\" />\n <button\n *ngIf=\"this.searchForm.get('searchTerm').value?.length > 0\"\n (click)=\"clearInput()\"\n class=\"icon close\"\n type=\"button\">\n <div class=\"ico-close-search\"></div>\n </button>\n <span *ngIf=\"this.searchForm.get('searchTerm').value?.length > 0\" class=\"separation\"></span>\n <app-button [style]=\"buttonTypeEnum.searchIcon\" [iconBtn]=\"'search'\" [type]=\"'submit'\"></app-button>\n </div>\n </form>\n <div (clickOutside)=\"closeModal()\" class=\"btn-container\">\n <div class=\"btnSection\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"4px\">\n <button\n class=\"btn-filter isntPhoneContent\"\n type=\"button\"\n fxLayout=\"row\"\n [ngClass]=\"{\n selected: modalTypeOpened === TypeModal.accompaniment,\n containCheckedFilters: numberAccompanimentChecked\n }\"\n fxLayoutAlign=\"space-between center\"\n (click)=\"openModal(TypeModal.accompaniment)\">\n <span>Aide num\u00E9rique</span>\n <div class=\"arrow\"></div>\n </button>\n <button\n class=\"btn-filter isntPhoneContent\"\n type=\"button\"\n fxLayout=\"row\"\n [ngClass]=\"{\n selected: modalTypeOpened === TypeModal.training,\n containCheckedFilters: numberTrainingChecked\n }\"\n fxLayoutAlign=\"space-between center\"\n (click)=\"openModal(TypeModal.training)\">\n <span>Ateliers</span>\n <div class=\"arrow\"></div>\n </button>\n <button\n class=\"btn-filter isntPhoneContent\"\n type=\"button\"\n fxLayout=\"row\"\n [ngClass]=\"{\n selected: modalTypeOpened === TypeModal.public,\n containCheckedFilters: numberPublicChecked\n }\"\n fxLayoutAlign=\"space-between center\"\n (click)=\"openModal(TypeModal.public)\">\n <span>Public</span>\n <div class=\"arrow\"></div>\n </button>\n <button\n class=\"btn-filter isntPhoneContent\"\n type=\"button\"\n fxLayout=\"row\"\n [ngClass]=\"{\n selected: modalTypeOpened === TypeModal.equipments,\n containCheckedFilters: numberEquipmentChecked\n }\"\n fxLayoutAlign=\"space-between center\"\n (click)=\"openModal(TypeModal.equipments)\">\n <span>Mat\u00E9riel et wifi</span>\n <div class=\"arrow\"></div>\n </button>\n <div\n class=\"checkboxButton\"\n [ngClass]=\"{\n checked: searchService.getIndex(checkedModulesFilter, 'passNumerique', 'labelsQualifications') > -1\n }\">\n <label fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <input\n type=\"checkbox\"\n value=\"passNumerique\"\n [checked]=\"searchService.getIndex(checkedModulesFilter, 'passNumerique', 'labelsQualifications') > -1\"\n (change)=\"externalCheckboxCheck($event, 'labelsQualifications', 'Pass num\u00E9rique')\" />\n <div class=\"label pass\">Pass num\u00E9rique</div>\n </label>\n </div>\n <div\n class=\"checkboxButton\"\n [ngClass]=\"{\n checked: searchService.getIndex(checkedModulesFilter, 'conseillerNumFranceServices', 'labelsQualifications') > -1\n }\">\n <label fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <input\n type=\"checkbox\"\n value=\"conseillerNumFranceServices\"\n [checked]=\"\n searchService.getIndex(checkedModulesFilter, 'conseillerNumFranceServices', 'labelsQualifications') > -1\n \"\n (change)=\"externalCheckboxCheck($event, 'labelsQualifications', 'Conseillers num\u00E9riques')\" />\n <div class=\"label pass\">Conseillers num\u00E9riques</div>\n </label>\n </div>\n <div\n class=\"checkboxButton isntPhoneContent\"\n [ngClass]=\"{\n checked: searchService.getIndex(checkedModulesFilter, 'accesLibre', 'accessModality') > -1\n }\">\n <label fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <input\n type=\"checkbox\"\n value=\"accesLibre\"\n [checked]=\"searchService.getIndex(checkedModulesFilter, 'accesLibre', 'accessModality') > -1\"\n (change)=\"externalCheckboxCheck($event, 'accessModality', 'Acc\u00E8s libre')\" />\n <div class=\"label pass\">Acc\u00E8s libre</div>\n </label>\n </div>\n <app-button\n class=\"isntPhoneContent last-button\"\n [style]=\"buttonTypeEnum.Tertiary\"\n [text]=\"'Plus de filtres'\"\n fxLayout=\"row\"\n fxLayoutAlign=\"space-between center\"\n (action)=\"openModal(TypeModal.moreFilters)\"></app-button>\n <div *ngIf=\"modalTypeOpened\">\n <app-modal-filter\n [modalType]=\"modalTypeOpened\"\n [categories]=\"getModalCategory()\"\n [modules]=\"checkedModulesFilter\"\n (searchEvent)=\"fetchResults($event)\"\n (closeEvent)=\"closeModal()\"></app-modal-filter>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedModulesFilter.length\" fxLayout=\"row wrap\" fxLayoutGap=\"4px\" class=\"filterTags isntPhoneContent\">\n <div class=\"title\">Filtres :</div>\n <app-button\n *ngFor=\"let filter of checkedModulesFilter\"\n [style]=\"buttonTypeEnum.TagCloudButton\"\n [text]=\"filter.displayText ? filter.displayText : filter.id\"\n (action)=\"removeFilter(filter)\"></app-button>\n <div class=\"reset-icon\" (click)=\"resetFilters()\">\n <app-svg-icon [type]=\"'ico'\" [icon]=\"'tagReset'\" [iconColor]=\"'black'\"></app-svg-icon>\n </div>\n </div>\n</div>\n", styles: ["html,body,p,span,label,h1,h2,h3,h4,h5,h6,.card-header-text,.welcome-message,.user-name,.profile-user-name,.project-name,.annuaire-label,.event_title,.objective_title{font-family:Lato,Helvetica,sans-serif}.form-input{width:296px;background:#f8f8f8;border:1px solid #dedede;box-sizing:border-box;border-radius:4px;height:36px;padding:8px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:.875em}.form-input:focus{border:1px solid #696969;outline:none!important}.switch{position:relative;display:inline-block;margin-left:-55px;height:34px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;top:10px;background-color:#fff;border-radius:7px;width:34px;height:14px;border:1px solid #bdbdbd}.slider:before{position:absolute;content:\"\";height:20px;width:20px;left:-6px;bottom:-3px;background-color:#bdbdbd;transition:.4s;border-radius:50%}input:checked+.slider{border:1px solid #da3635}input:checked+.slider:before{transform:translate(26px);background-color:#da3635}html,body,p,span,label,h1,h2,h3,h4,h5,h6,.card-header-text,.welcome-message,.user-name,.profile-user-name,.project-name,.annuaire-label,.event_title,.objective_title{font-family:Lato,Helvetica,sans-serif}.btn-primary{background:#da3635;border-radius:4px;outline:none;cursor:pointer;color:#fff;height:40px;width:192px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1em;line-height:18px;stroke:#fff;border:1px solid #333333}.btn-primary.small{width:149px}.btn-primary.invalid{opacity:.4}.btn-primary:focus{background:white;color:#da3635;border:1px solid #da3635;stroke:#da3635}.btn-grid{display:inline-flex;flex-wrap:wrap;gap:8px}.tags-cloud{font-style:normal;justify-content:center;align-items:center;height:28px;border-radius:20px;padding:5px 15px;color:#fff;border-style:none;margin-top:5px;background:#333333}.tags-cloud.unchecked{background:#bdbdbd}.block{padding:0 .5rem;border-bottom:solid 1px #bdbdbd}@media only screen and (max-width : 1024px){.block{padding:0 10px}}.content{margin-bottom:.5rem;display:flex;align-items:center}.content input{font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:.813em;width:100%;border:none;padding-left:10px;text-overflow:ellipsis;background-color:#f8f8f8;color:#696969;outline:none;font-style:italic;margin-top:unset}.content .inputSearch{padding:6px 10px 6px 6px;width:200px;min-width:200px;background-color:#f8f8f8;color:#696969;height:36px;border-radius:50px;margin-right:.25rem}@media only screen and (min-width : 1201px){.content .inputSearch{width:300px;min-width:250px}}@media only screen and (max-width : 1024px){.content .inputSearch{width:100%;margin-bottom:.5rem;margin-right:0}}.content .inputSearch .container{width:100%;height:40px}.content .inputSearch .container .separation{border-right:solid 1px #bdbdbd;width:5px;height:23px;margin-right:5px}@media only screen and (max-width : 1024px){.content{flex-direction:column!important}}.btn-container{width:100%;display:flex}.btnSection{width:100%}@media only screen and (max-width : 1024px){.btnSection{display:contents!important}}.btnSection button{background:white;height:36px;border:1px solid #bdbdbd;padding:10px 12px;outline:none;border-radius:50px;cursor:pointer;text-align:left;transition:all .3s ease;line-height:110%;font-size:1em;line-height:19px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:.813em}.btnSection button:hover:not(.selected){background:#f4f4f4}.btnSection button .arrow{background-color:transparent;border-bottom:1px solid black;border-right:1px solid black;transform:translateY(-25%) rotate(45deg);margin:0 5px 0 10px;height:7px;width:7px;transition:all .3s ease}.btnSection button:focus{border-color:#333}.btnSection .selected{background-color:#da3635;border-color:#da3635!important;color:#fff}.btnSection .selected .arrow{background-color:transparent;border-bottom:1px solid white;border-right:1px solid white;transform:translateY(25%) rotate(-135deg);margin:0 5px 0 10px;height:7px;width:7px}.btnSection .btn-filter{height:40px}.btnSection .btn-filter span{line-height:110%}.btnSection .containCheckedFilters{border-color:#da3635}.btnSection .checkboxButton{box-sizing:border-box;background:white;height:40px;width:190px;border:1px solid #bdbdbd;outline:none;cursor:pointer;font-size:1em;line-height:19px;width:auto;border-radius:50px;padding:0 10px;display:flex;align-items:center;justify-content:center;transition:all .3s ease;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:.813em;line-height:110%}.btnSection .checkboxButton>*{transition:all .3s ease}@media only screen and (max-width : 1024px){.btnSection .checkboxButton{width:max-content}}.btnSection .checkboxButton.checked{border-color:#da3635;background:#fef0f0}.btnSection .checkboxButton:hover:not(.checked){background:#f8f8f8}.btnSection .checkboxButton label{cursor:pointer;font-size:inherit;font-weight:inherit}.btnSection .checkboxButton input[type=checkbox]{-webkit-appearance:none;appearance:none;border-radius:50%;width:20px;min-width:20px;height:20px;border:solid 1px #bdbdbd;background:white;margin:0 5px 0 0;transition:all .3s ease;position:relative}.btnSection .checkboxButton input[type=checkbox]:checked{background:#da3635;border:none}.btnSection .checkboxButton input[type=checkbox]:checked:after{border-bottom:2px solid white;border-left:2px solid white;content:\"\";height:4px;left:4px;opacity:1;position:absolute;top:6px;transform:rotate(-45deg);width:10px}::ng-deep .btn-regular.tertiary{height:40px!important}::ng-deep .btn-regular.tertiary div{line-height:normal}.last-button{margin-left:auto}.footerSearchSection{margin:8px 0;height:40px}.icon{background-color:transparent;border:1px solid transparent;outline:none;cursor:pointer}.icon.pin{padding:4px 6px 8px}.icon.pin:hover .ico-pin-search{background-color:#da3635}.icon.pin:focus{border-color:#da3635}.icon.pin:focus .ico-pin-search{background-color:#da3635}.icon.pin:active{border-color:transparent}.icon.pin:active .ico-pin-search{background-color:#c9ecf3}.icon.close:focus{border-color:#da3635}.icon.close:active{border-color:transparent}a{border:1px solid transparent;padding:8px 8px 6px;color:#da3635;outline:none;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1em;line-height:18px;text-decoration:underline;text-align:right}a:hover{color:#b85959}a:focus{color:#da3635;border-color:#da3635;border-radius:4px}a:active{border:none;color:#c9ecf3}.phoneSection{margin:9px 0 18px;display:none}.phoneSection .btnSection{padding:0}@media only screen and (max-width : 1024px){.isntPhoneContent{display:none!important}.phoneSection{display:block}}.filterTags{margin:.5rem 0 0}.filterTags .title{margin-top:5px;color:#696969}.filterTags .reset-icon{padding-top:.2rem;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i4.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.SvgIconComponent, selector: "app-svg-icon", inputs: ["icon", "iconClass", "type", "iconColor", "title"] }, { kind: "component", type: i5.ButtonComponent, selector: "app-button", inputs: ["style", "text", "type", "iconType", "iconBtn", "iconPos", "extraClass", "disabled", "active"], outputs: ["action"] }, { kind: "directive", type: i5.ModalOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { kind: "component", type: i6.ModalFilterComponent, selector: "app-modal-filter", inputs: ["modalType", "categories", "modules"], outputs: ["searchEvent", "closeEvent"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: StructureListSearchComponent, decorators: [{ type: Component, args: [{ selector: 'app-structure-list-search', template: "<div class=\"block\">\n <div class=\"content\">\n <form\n class=\"inputSearch\"\n [formGroup]=\"searchForm\"\n fxLayout=\"row\"\n fxLayoutGap=\"4px\"\n fxLayoutAlign=\" center\"\n (ngSubmit)=\"applyFilter(searchForm.value.searchTerm)\">\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"container\">\n <input type=\"text\" formControlName=\"searchTerm\" placeholder=\"Rechercher une association, une commune...\" />\n <button\n *ngIf=\"this.searchForm.get('searchTerm').value?.length > 0\"\n (click)=\"clearInput()\"\n class=\"icon close\"\n type=\"button\">\n <div class=\"ico-close-search\"></div>\n </button>\n <span *ngIf=\"this.searchForm.get('searchTerm').value?.length > 0\" class=\"separation\"></span>\n <app-button [style]=\"buttonTypeEnum.searchIcon\" [iconBtn]=\"'search'\" [type]=\"'submit'\"></app-button>\n </div>\n </form>\n <div (clickOutside)=\"closeModal()\" class=\"btn-container\">\n <div class=\"btnSection\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"4px\">\n <button\n class=\"btn-filter isntPhoneContent\"\n type=\"button\"\n fxLayout=\"row\"\n [ngClass]=\"{\n selected: modalTypeOpened === TypeModal.accompaniment,\n containCheckedFilters: numberAccompanimentChecked\n }\"\n fxLayoutAlign=\"space-between center\"\n (click)=\"openModal(TypeModal.accompaniment)\">\n <span>Aide num\u00E9rique</span>\n <div class=\"arrow\"></div>\n </button>\n <button\n class=\"btn-filter isntPhoneContent\"\n type=\"button\"\n fxLayout=\"row\"\n [ngClass]=\"{\n selected: modalTypeOpened === TypeModal.training,\n containCheckedFilters: numberTrainingChecked\n }\"\n fxLayoutAlign=\"space-between center\"\n (click)=\"openModal(TypeModal.training)\">\n <span>Ateliers</span>\n <div class=\"arrow\"></div>\n </button>\n <button\n class=\"btn-filter isntPhoneContent\"\n type=\"button\"\n fxLayout=\"row\"\n [ngClass]=\"{\n selected: modalTypeOpened === TypeModal.public,\n containCheckedFilters: numberPublicChecked\n }\"\n fxLayoutAlign=\"space-between center\"\n (click)=\"openModal(TypeModal.public)\">\n <span>Public</span>\n <div class=\"arrow\"></div>\n </button>\n <button\n class=\"btn-filter isntPhoneContent\"\n type=\"button\"\n fxLayout=\"row\"\n [ngClass]=\"{\n selected: modalTypeOpened === TypeModal.equipments,\n containCheckedFilters: numberEquipmentChecked\n }\"\n fxLayoutAlign=\"space-between center\"\n (click)=\"openModal(TypeModal.equipments)\">\n <span>Mat\u00E9riel et wifi</span>\n <div class=\"arrow\"></div>\n </button>\n <div\n class=\"checkboxButton\"\n [ngClass]=\"{\n checked: searchService.getIndex(checkedModulesFilter, 'passNumerique', 'labelsQualifications') > -1\n }\">\n <label fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <input\n type=\"checkbox\"\n value=\"passNumerique\"\n [checked]=\"searchService.getIndex(checkedModulesFilter, 'passNumerique', 'labelsQualifications') > -1\"\n (change)=\"externalCheckboxCheck($event, 'labelsQualifications', 'Pass num\u00E9rique')\" />\n <div class=\"label pass\">Pass num\u00E9rique</div>\n </label>\n </div>\n <div\n class=\"checkboxButton\"\n [ngClass]=\"{\n checked: searchService.getIndex(checkedModulesFilter, 'conseillerNumFranceServices', 'labelsQualifications') > -1\n }\">\n <label fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <input\n type=\"checkbox\"\n value=\"conseillerNumFranceServices\"\n [checked]=\"\n searchService.getIndex(checkedModulesFilter, 'conseillerNumFranceServices', 'labelsQualifications') > -1\n \"\n (change)=\"externalCheckboxCheck($event, 'labelsQualifications', 'Conseillers num\u00E9riques')\" />\n <div class=\"label pass\">Conseillers num\u00E9riques</div>\n </label>\n </div>\n <div\n class=\"checkboxButton isntPhoneContent\"\n [ngClass]=\"{\n checked: searchService.getIndex(checkedModulesFilter, 'accesLibre', 'accessModality') > -1\n }\">\n <label fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <input\n type=\"checkbox\"\n value=\"accesLibre\"\n [checked]=\"searchService.getIndex(checkedModulesFilter, 'accesLibre', 'accessModality') > -1\"\n (change)=\"externalCheckboxCheck($event, 'accessModality', 'Acc\u00E8s libre')\" />\n <div class=\"label pass\">Acc\u00E8s libre</div>\n </label>\n </div>\n <app-button\n class=\"isntPhoneContent last-button\"\n [style]=\"buttonTypeEnum.Tertiary\"\n [text]=\"'Plus de filtres'\"\n fxLayout=\"row\"\n fxLayoutAlign=\"space-between center\"\n (action)=\"openModal(TypeModal.moreFilters)\"></app-button>\n <div *ngIf=\"modalTypeOpened\">\n <app-modal-filter\n [modalType]=\"modalTypeOpened\"\n [categories]=\"getModalCategory()\"\n [modules]=\"checkedModulesFilter\"\n (searchEvent)=\"fetchResults($event)\"\n (closeEvent)=\"closeModal()\"></app-modal-filter>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedModulesFilter.length\" fxLayout=\"row wrap\" fxLayoutGap=\"4px\" class=\"filterTags isntPhoneContent\">\n <div class=\"title\">Filtres :</div>\n <app-button\n *ngFor=\"let filter of checkedModulesFilter\"\n [style]=\"buttonTypeEnum.TagCloudButton\"\n [text]=\"filter.displayText ? filter.displayText : filter.id\"\n (action)=\"removeFilter(filter)\"></app-button>\n <div class=\"reset-icon\" (click)=\"resetFilters()\">\n <app-svg-icon [type]=\"'ico'\" [icon]=\"'tagReset'\" [iconColor]=\"'black'\"></app-svg-icon>\n </div>\n </div>\n</div>\n", styles: ["html,body,p,span,label,h1,h2,h3,h4,h5,h6,.card-header-text,.welcome-message,.user-name,.profile-user-name,.project-name,.annuaire-label,.event_title,.objective_title{font-family:Lato,Helvetica,sans-serif}.form-input{width:296px;background:#f8f8f8;border:1px solid #dedede;box-sizing:border-box;border-radius:4px;height:36px;padding:8px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:.875em}.form-input:focus{border:1px solid #696969;outline:none!important}.switch{position:relative;display:inline-block;margin-left:-55px;height:34px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;top:10px;background-color:#fff;border-radius:7px;width:34px;height:14px;border:1px solid #bdbdbd}.slider:before{position:absolute;content:\"\";height:20px;width:20px;left:-6px;bottom:-3px;background-color:#bdbdbd;transition:.4s;border-radius:50%}input:checked+.slider{border:1px solid #da3635}input:checked+.slider:before{transform:translate(26px);background-color:#da3635}html,body,p,span,label,h1,h2,h3,h4,h5,h6,.card-header-text,.welcome-message,.user-name,.profile-user-name,.project-name,.annuaire-label,.event_title,.objective_title{font-family:Lato,Helvetica,sans-serif}.btn-primary{background:#da3635;border-radius:4px;outline:none;cursor:pointer;color:#fff;height:40px;width:192px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1em;line-height:18px;stroke:#fff;border:1px solid #333333}.btn-primary.small{width:149px}.btn-primary.invalid{opacity:.4}.btn-primary:focus{background:white;color:#da3635;border:1px solid #da3635;stroke:#da3635}.btn-grid{display:inline-flex;flex-wrap:wrap;gap:8px}.tags-cloud{font-style:normal;justify-content:center;align-items:center;height:28px;border-radius:20px;padding:5px 15px;color:#fff;border-style:none;margin-top:5px;background:#333333}.tags-cloud.unchecked{background:#bdbdbd}.block{padding:0 .5rem;border-bottom:solid 1px #bdbdbd}@media only screen and (max-width : 1024px){.block{padding:0 10px}}.content{margin-bottom:.5rem;display:flex;align-items:center}.content input{font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:.813em;width:100%;border:none;padding-left:10px;text-overflow:ellipsis;background-color:#f8f8f8;color:#696969;outline:none;font-style:italic;margin-top:unset}.content .inputSearch{padding:6px 10px 6px 6px;width:200px;min-width:200px;background-color:#f8f8f8;color:#696969;height:36px;border-radius:50px;margin-right:.25rem}@media only screen and (min-width : 1201px){.content .inputSearch{width:300px;min-width:250px}}@media only screen and (max-width : 1024px){.content .inputSearch{width:100%;margin-bottom:.5rem;margin-right:0}}.content .inputSearch .container{width:100%;height:40px}.content .inputSearch .container .separation{border-right:solid 1px #bdbdbd;width:5px;height:23px;margin-right:5px}@media only screen and (max-width : 1024px){.content{flex-direction:column!important}}.btn-container{width:100%;display:flex}.btnSection{width:100%}@media only screen and (max-width : 1024px){.btnSection{display:contents!important}}.btnSection button{background:white;height:36px;border:1px solid #bdbdbd;padding:10px 12px;outline:none;border-radius:50px;cursor:pointer;text-align:left;transition:all .3s ease;line-height:110%;font-size:1em;line-height:19px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:.813em}.btnSection button:hover:not(.selected){background:#f4f4f4}.btnSection button .arrow{background-color:transparent;border-bottom:1px solid black;border-right:1px solid black;transform:translateY(-25%) rotate(45deg);margin:0 5px 0 10px;height:7px;width:7px;transition:all .3s ease}.btnSection button:focus{border-color:#333}.btnSection .selected{background-color:#da3635;border-color:#da3635!important;color:#fff}.btnSection .selected .arrow{background-color:transparent;border-bottom:1px solid white;border-right:1px solid white;transform:translateY(25%) rotate(-135deg);margin:0 5px 0 10px;height:7px;width:7px}.btnSection .btn-filter{height:40px}.btnSection .btn-filter span{line-height:110%}.btnSection .containCheckedFilters{border-color:#da3635}.btnSection .checkboxButton{box-sizing:border-box;background:white;height:40px;width:190px;border:1px solid #bdbdbd;outline:none;cursor:pointer;font-size:1em;line-height:19px;width:auto;border-radius:50px;padding:0 10px;display:flex;align-items:center;justify-content:center;transition:all .3s ease;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:.813em;line-height:110%}.btnSection .checkboxButton>*{transition:all .3s ease}@media only screen and (max-width : 1024px){.btnSection .checkboxButton{width:max-content}}.btnSection .checkboxButton.checked{border-color:#da3635;background:#fef0f0}.btnSection .checkboxButton:hover:not(.checked){background:#f8f8f8}.btnSection .checkboxButton label{cursor:pointer;font-size:inherit;font-weight:inherit}.btnSection .checkboxButton input[type=checkbox]{-webkit-appearance:none;appearance:none;border-radius:50%;width:20px;min-width:20px;height:20px;border:solid 1px #bdbdbd;background:white;margin:0 5px 0 0;transition:all .3s ease;position:relative}.btnSection .checkboxButton input[type=checkbox]:checked{background:#da3635;border:none}.btnSection .checkboxButton input[type=checkbox]:checked:after{border-bottom:2px solid white;border-left:2px solid white;content:\"\";height:4px;left:4px;opacity:1;position:absolute;top:6px;transform:rotate(-45deg);width:10px}::ng-deep .btn-regular.tertiary{height:40px!important}::ng-deep .btn-regular.tertiary div{line-height:normal}.last-button{margin-left:auto}.footerSearchSection{margin:8px 0;height:40px}.icon{background-color:transparent;border:1px solid transparent;outline:none;cursor:pointer}.icon.pin{padding:4px 6px 8px}.icon.pin:hover .ico-pin-search{background-color:#da3635}.icon.pin:focus{border-color:#da3635}.icon.pin:focus .ico-pin-search{background-color:#da3635}.icon.pin:active{border-color:transparent}.icon.pin:active .ico-pin-search{background-color:#c9ecf3}.icon.close:focus{border-color:#da3635}.icon.close:active{border-color:transparent}a{border:1px solid transparent;padding:8px 8px 6px;color:#da3635;outline:none;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1em;line-height:18px;text-decoration:underline;text-align:right}a:hover{color:#b85959}a:focus{color:#da3635;border-color:#da3635;border-radius:4px}a:active{border:none;color:#c9ecf3}.phoneSection{margin:9px 0 18px;display:none}.phoneSection .btnSection{padding:0}@media only screen and (max-width : 1024px){.isntPhoneContent{display:none!important}.phoneSection{display:block}}.filterTags{margin:.5rem 0 0}.filterTags .title{margin-top:5px;color:#696969}.filterTags .reset-icon{padding-top:.2rem;cursor:pointer}\n"] }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [SEARCH_TOKEN] }] }, { type: i1.FormBuilder }, { type: i2.ActivatedRoute }, { type: i2.ActivatedRoute }, { type: i2.Router }]; }, propDecorators: { searchEvent: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlLWxpc3Qtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL0Bnb3V2ZnItYW5jdC9tZWRpYXRpb24tbnVtZXJpcXVlL3NyYy9saWIvc3RydWN0dXJlL2NvbXBvbmVudHMvc2VhcmNoL3N0cnVjdHVyZS1saXN0LXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9AZ291dmZyLWFuY3QvbWVkaWF0aW9uLW51bWVyaXF1ZS9zcmMvbGliL3N0cnVjdHVyZS9jb21wb25lbnRzL3NlYXJjaC9zdHJ1Y3R1cmUtbGlzdC1zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7QUFPdEYsTUFBTSxPQUFPLDRCQUE0QjtJQWdDdkMsWUFDaUMsYUFBK0IsRUFDdEQsRUFBZSxFQUNmLGNBQThCLEVBQzlCLEtBQXFCLEVBQ3JCLE1BQWM7UUFKUyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDdEQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFR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