From 784050fdde8a184366da96113f0171b07ba69fc9 Mon Sep 17 00:00:00 2001 From: John Cleaver Date: Wed, 16 May 2018 23:20:24 -0400 Subject: [PATCH] Add filtering. --- src/components/search/Search.vue | 64 ++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/src/components/search/Search.vue b/src/components/search/Search.vue index 63f68a3..ebc74e8 100644 --- a/src/components/search/Search.vue +++ b/src/components/search/Search.vue @@ -24,9 +24,15 @@ export default { data () { return { search: { - search_term: '', - search_seasons: this.$store.state.seasons, - search_skills: this.$store.state.skills + name_filter: '', + season_filter: { + selected_seasons: ['spring', 'summer', 'fall', 'winter'], + season_exclusive: false + }, + skill_filter: { + selected_skills: ['farming', 'foraging', 'mining', 'fishing', 'combat'], + skill_exclusive: false + } } } }, @@ -34,7 +40,57 @@ export default { filtered_items () { var self = this return self.$store.state.items - .filter(item => item.name.toLowerCase().indexOf(self.search.search_term.toLowerCase()) !== -1) + .filter(item => item.name.toLowerCase().indexOf(self.search.name_filter.toLowerCase()) !== -1) + .filter(item => this.FilterSeasons(item.seasons.map(ssn => ssn.id), this.search.season_filter)) + .filter(item => this.FilterSkills(item.skills.map(skl => skl.id), this.search.skill_filter)) + } + }, + methods: { + FilterSeasons (itemSeasons, seasonFilter) { + if (seasonFilter.season_exclusive) { + if (itemSeasons.length !== seasonFilter.selected_seasons.length) { + return false + } else { + var a = itemSeasons + var b = seasonFilter.selected_seasons + a.sort() + b.sort() + for (var i = 0; i < a.length; ++i) { + if (a[i] !== b[i]) { return false } + } + return true + } + } else { + for (var season of seasonFilter.selected_seasons) { + if (itemSeasons.indexOf(season) !== -1) { + return true + } + } + return false + } + }, + FilterSkills (itemSkills, skillFilter) { + if (skillFilter.skill_exclusive) { + if (itemSkills.length !== skillFilter.selected_skills.length) { + return false + } else { + var a = itemSkills + var b = skillFilter.selected_skills + a.sort() + b.sort() + for (var i = 0; i < a.length; ++i) { + if (a[i] !== b[i]) { return false } + } + return true + } + } else { + for (var season of skillFilter.selected_skills) { + if (itemSkills.indexOf(season) !== -1) { + return true + } + } + return false + } } }