@gouvfr-anct/mediation-numerique
Version:
📚 Bibliothèque pour la cartographie de l’offre de médiation numérique.
229 lines • 72.4 kB
JavaScript
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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