Created
October 3, 2018 09:27
-
-
Save MrMeison/708e67c97905a574c8fd56ae0f46b90a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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