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('
', [{ redundantAttribute: 'expr52', selector: '[expr52]', expressions: [{ type: expressionTypes.EVENT, name: 'onkeyup', evaluate: _scope => _scope.filterSearch }] }, { type: bindingTypes.EACH, getKey: null, condition: null, template: template(' ', [{ expressions: [{ type: expressionTypes.TEXT, childNodeIndex: 0, evaluate: _scope => [_scope.sortField.name].join('') }] }, { redundantAttribute: 'expr54', selector: '[expr54]', expressions: [{ type: expressionTypes.ATTRIBUTE, name: 'id', evaluate: _scope => _scope.sortField.id }, { type: expressionTypes.EVENT, name: 'onclick', evaluate: _scope => () => _scope.sortList(_scope.sortField.id, true) }] }]), redundantAttribute: 'expr53', selector: '[expr53]', itemName: 'sortField', indexName: null, evaluate: _scope => _scope.sortFields }, { type: bindingTypes.EACH, getKey: null, condition: null, template: template(' ', [{ redundantAttribute: 'expr56', selector: '[expr56]', expressions: [{ type: expressionTypes.TEXT, childNodeIndex: 0, evaluate: _scope => _scope.school.fields.g_ea_lib_vx }, { type: expressionTypes.EVENT, name: 'onclick', evaluate: _scope => () => _scope.props.popup(_scope.school) }] }, { redundantAttribute: 'expr57', selector: '[expr57]', expressions: [{ type: expressionTypes.TEXT, childNodeIndex: 0, evaluate: _scope => _scope.school.fields.ville_etab }] }, { redundantAttribute: 'expr58', selector: '[expr58]', expressions: [{ type: expressionTypes.TEXT, childNodeIndex: 0, evaluate: _scope => _scope.school.fields.dep }] }, { redundantAttribute: 'expr59', selector: '[expr59]', expressions: [{ type: expressionTypes.TEXT, childNodeIndex: 0, evaluate: _scope => _scope.school.fields.moyenne }] }, { type: bindingTypes.TAG, getComponent: getComponent, evaluate: _scope => 'title-progress', slots: [], attributes: [{ type: expressionTypes.ATTRIBUTE, name: 'value', evaluate: _scope => _scope.school.fields.taux_acces_ens }], redundantAttribute: 'expr60', selector: '[expr60]' }]), redundantAttribute: 'expr55', selector: '[expr55]', itemName: 'school', indexName: null, evaluate: _scope => _scope.state.filteredSchoolList }]) }]), name: 'school' }; export { school as default };