diff --git a/webapp/components/FilterPosts/FilterPosts.vue b/webapp/components/FilterPosts/FilterPosts.vue index 58f0794d2..1dd0fa737 100644 --- a/webapp/components/FilterPosts/FilterPosts.vue +++ b/webapp/components/FilterPosts/FilterPosts.vue @@ -14,6 +14,7 @@ + @@ -24,12 +25,14 @@ import Dropdown from '~/components/Dropdown' import { mapGetters } from 'vuex' import CategoriesFilterMenuItems from './CategoriesFilterMenuItems' import GeneralFilterMenuItems from './GeneralFilterMenuItems' +import LanguageFilterMenuItems from './LanguageFilterMenuItems' export default { components: { Dropdown, CategoriesFilterMenuItems, GeneralFilterMenuItems, + LanguageFilterMenuItems, }, props: { placement: { type: String }, diff --git a/webapp/components/FilterPosts/LanguageFilterMenuItems.vue b/webapp/components/FilterPosts/LanguageFilterMenuItems.vue new file mode 100644 index 000000000..5bfb931cb --- /dev/null +++ b/webapp/components/FilterPosts/LanguageFilterMenuItems.vue @@ -0,0 +1,102 @@ + + + diff --git a/webapp/locales/de.json b/webapp/locales/de.json index 67d3b5bbd..07b0fbc0e 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -86,7 +86,11 @@ }, "followers": { "label": "Benutzern, denen ich folge" - } + }, + "language": { + "header": "Sprachen", + "all": "Alle" + } }, "site": { "thanks": "Danke!", diff --git a/webapp/locales/en.json b/webapp/locales/en.json index d9321b13b..094c88e60 100644 --- a/webapp/locales/en.json +++ b/webapp/locales/en.json @@ -87,7 +87,11 @@ }, "followers": { "label": "Users I follow" - } + }, + "language": { + "header": "Languages", + "all": "All" + } }, "site": { "thanks": "Thanks!", diff --git a/webapp/store/posts.js b/webapp/store/posts.js index 97c0e1245..9437db956 100644 --- a/webapp/store/posts.js +++ b/webapp/store/posts.js @@ -48,12 +48,23 @@ export const mutations = { delete filter.categories_some state.filter = filter }, + RESET_LANGUAGES(state) { + const filter = clone(state.filter) + delete filter.language_in + state.filter = filter + }, TOGGLE_CATEGORY(state, categoryId) { const filter = clone(state.filter) update(filter, 'categories_some.id_in', categoryIds => xor(categoryIds, [categoryId])) if (isEmpty(get(filter, 'categories_some.id_in'))) delete filter.categories_some state.filter = filter }, + TOGGLE_LANGUAGE(state, languageCode) { + const filter = clone(state.filter) + update(filter, 'language_in', languageCodes => xor(languageCodes, [languageCode])) + if (isEmpty(get(filter, 'language_in'))) delete filter.language_in + state.filter = filter + }, TOGGLE_EMOTION(state, emotion) { const filter = clone(state.filter) update(filter, 'emotions_some.emotion_in', emotions => xor(emotions, [emotion])) @@ -75,6 +86,9 @@ export const getters = { filteredCategoryIds(state) { return get(state.filter, 'categories_some.id_in') || [] }, + filteredLanguagesCodes(state) { + return get(state.filter, 'language_in') || [] + }, filteredByUsersFollowed(state) { return !!get(state.filter, 'author.followedBy_some.id') },