Skip to content

Instantly share code, notes, and snippets.

@MrMeison
Created October 3, 2018 09:27
Show Gist options
  • Save MrMeison/708e67c97905a574c8fd56ae0f46b90a to your computer and use it in GitHub Desktop.
Save MrMeison/708e67c97905a574c8fd56ae0f46b90a to your computer and use it in GitHub Desktop.
(function() {
var currentFilter = {
roomCount: 'any',
type: 'any',
price: '0'
}; // <-- объект который будет храить текущее состояние всех фильтров
var filterByRooms = function(offer, roomCount) {
if (roomCount === 'any') {
return true; // <-- показываем элемент если количество комнат не задано
}
return parseInt(roomCount, 10) === offer.rooms;
};
var filterByType = function(type, offer) {
if (type === 'any') {
return true;
}
return offer.type === type;
};
var filterByPrice = function(offer, priceType) {
switch (priceType) {
case 'low': return offer.price < 10000;
case 'middle': return offer.price <= 50000 && offer.price >= 10000;
case 'high': return offer.price < 10000;
}
return true; // <-- по умолчанию показываем всегда
};
// функция изменения фильтров извне (в других модулях, импортируется в window.filter)
var add = function(type, value) {
filter[type] = value;
};
// Применяем фильтр, возвращаем новый массив, который удолетворяет всем критериям
var apply = function(ads) {
return ads.filter(function(ad) {
return
filterByPrice(ad.offer, filter.price) &&
filterByType(ad.offer, filter.type) &&
filterByRooms(ad.offer, filter.roomCount);
});
}
window.filter = {
add: add,
apply: apply
}
})();
// Использование
document.querySelector('.map__filters').addEventListener('change', function(evt) { // <-- подписываемся на изменение всей формы
switch (evt.target.id) {
case 'housing-type':
window.filter.add('type', evt.target.value);
break;
case 'housing-rooms':
window.filter.add('roomCount', evt.target.value);
break;
case 'housing-price':
window.filter.add('price', evt.target.value);
break;
}
var filtered = window.filter.apply(ads); // получаем отфильтрованные данные, дальше их присваиваем глобальной переменной или отравляем на перерисовку, ads - массив со всеми элементами
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment