const SORT_TABLE = [{ name: "Nom", id: "g_ea_lib_vx" }, { name: "Ville", id: "ville_etab" }, { name: "Dept.", id: "dep" }, { name: "Moyenne", id: "moyenne" }, { name: "Sélectivité", id: "taux_acces_ens" }]; var school = { css: null, exports: { filterSearch() { let input = this.$("input"); if (!input) return; let finalArray = []; //On évite de trier avant d'avoir plus de 1 lettres. if (input.value.length > 1) { finalArray = this.state.schoolList.filter(item => { return item.fields.g_ea_lib_vx.toLowerCase().includes(input.value.toLowerCase()); }); } else { finalArray = this.state.schoolList; } this.update({ filteredSchoolList: finalArray }); }, sortList(sortBy, shouldUpdate) { //Si la liste est déjà triée par la bonne catégorie, on l'inverse if (sortBy == this.state.sortBy) { this.state.filteredSchoolList.reverse(); } //Sinon on l'ordonne par la nouvelle catégorie (ascendant par défaut) else { this.state.sortBy = sortBy; switch (sortBy) { case SORT_TABLE[3].id: case SORT_TABLE[4].id: { this.state.filteredSchoolList.sort((a, b) => { if (a.fields[sortBy] > b.fields[sortBy]) return 1;else return -1; }); break; } default: { this.state.filteredSchoolList.sort((a, b) => { return a.fields[sortBy].localeCompare(b.fields[sortBy]); }); break; } } } this.update(); }, onBeforeUpdate(props, state) { if (props.schoolListUpdating) { state.schoolList = [...props.schoolList]; state.filteredSchoolList = [...state.schoolList]; if (this.$("input")) this.$("input").value = ""; } }, onUpdated(props, state) { if (!state.map && props.shouldShowInfos) { state.map = L.map("map").setView([47, 2.5], 5); state.markers = L.markerClusterGroup(); L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap' }).addTo(state.map); } else if (props.shouldShowInfos) { state.markers.clearLayers(); for (let school of state.filteredSchoolList) { let fields = school.fields; let pos = fields.g_olocalisation_des_formations; let popupHTML = document.createElement("div"); let title = document.createElement("span"); title.textContent = fields.g_ea_lib_vx; title.class = "is-primary"; let linkToForma = document.createElement("a"); linkToForma.onclick = () => props.popup(school); linkToForma.textContent = "Voir les infos de l'établissement"; popupHTML.appendChild(title); popupHTML.appendChild(document.createElement("br")); popupHTML.appendChild(linkToForma); let marker = L.marker(pos); marker.bindPopup(popupHTML); state.markers.addLayer(marker); } state.map.addLayer(state.markers); } }, onBeforeMount(props, state) { this.state = { sortBy: null, schoolList: [], filteredSchoolList: [] }; }, sortFields: SORT_TABLE }, template: (template, expressionTypes, bindingTypes, getComponent) => template('
', [{ type: bindingTypes.IF, evaluate: _scope => _scope.props.shouldShowInfos, redundantAttribute: 'expr51', selector: '[expr51]', template: template('