Skip to content

Instantly share code, notes, and snippets.

@o0
Created August 19, 2020 08:41
Show Gist options
  • Save o0/7f3b001364d1a25a59482d71b37cdab2 to your computer and use it in GitHub Desktop.
Save o0/7f3b001364d1a25a59482d71b37cdab2 to your computer and use it in GitHub Desktop.
// get All forms
const filtersForms = document.querySelectorAll(`.filter-form`);
// Create all filters
const filterByType = (type, arr) => arr.filter((car) => car.characteristics.type === type || type === `car-type-any`);
const filterByPower = (power, arr) => arr.filter((car) => car.characteristics.power >= +power || power === `power-all`);
const filterByFuel = (fuel, arr) => arr.filter((car) => car.characteristics.engine === fuel || fuel === `fuel-all`);
const filterByPrice = (price, arr) => arr.filter((car) => car.minPrice >= price);
const filterByClass = (carClass, arr) => arr.filter((car) => car.class === carClass);
// Do filtration by all the filters, call render func with the filtered data
const filterAll = (data) => {
let filteredData = data;
filteredData = filterByType(type, filteredData);
filteredData = filterByPower(power, filteredData);
filteredData = filterByFuel(fuel, filteredData);
filteredData = filterByPrice(price, filteredData);
filteredData = filterByClass(carClass, filteredData);
return filteredData;
};
// index.js
// Файл index.js знает про то, откуда взять данные (скачать по сети),
// про то, где взять значения для фильтров (из инпутов или адресной строки)
// и про фильтрацию
const newData = filterAll(data, type, power, fuel, price, carClass);
window.filteredData = newData;
// Do filtration on change of form's inputs
// Сильная связанность: знание про разметку, renderTemplate, carsData
filtersForms.forEach((form) => {
form.addEventListener(`change`, () => {
window.renderTemplate(filterAll(window.carsData));
});
});
window.filterAll = filterAll;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment