@@ -109,6 +119,7 @@ import NotificationMenu from '~/components/notifications/NotificationMenu'
import Dropdown from '~/components/Dropdown'
import HcAvatar from '~/components/Avatar/Avatar.vue'
import seo from '~/mixins/seo'
+import FilterPosts from '~/components/FilterPosts/FilterPosts.vue'
export default {
components: {
@@ -118,6 +129,7 @@ export default {
Modal,
NotificationMenu,
HcAvatar,
+ FilterPosts,
},
mixins: [seo],
data() {
@@ -133,6 +145,7 @@ export default {
isAdmin: 'auth/isAdmin',
quickSearchResults: 'search/quickResults',
quickSearchPending: 'search/quickPending',
+ categories: 'categories/categories',
}),
userName() {
const { name } = this.user || {}
@@ -171,10 +184,14 @@ export default {
return routes
},
},
+ mounted() {
+ this.fetchCategories()
+ },
methods: {
...mapActions({
quickSearchClear: 'search/quickClear',
quickSearch: 'search/quickSearch',
+ fetchCategories: 'categories/fetchCategories',
}),
goToPost(item) {
this.$nextTick(() => {
diff --git a/webapp/store/categories.js b/webapp/store/categories.js
new file mode 100644
index 000000000..5fa67ed66
--- /dev/null
+++ b/webapp/store/categories.js
@@ -0,0 +1,42 @@
+import gql from 'graphql-tag'
+
+export const state = () => {
+ return {
+ categories: null,
+ pending: false,
+ }
+}
+
+export const mutations = {
+ SET_CATEGORIES(state, categories) {
+ state.categories = categories || null
+ },
+ SET_PENDING(state, pending) {
+ state.pending = pending
+ },
+}
+
+export const getters = {
+ categories(state) {
+ return state.categories || []
+ },
+}
+
+export const actions = {
+ async fetchCategories({ commit }) {
+ const client = this.app.apolloProvider.defaultClient
+ const {
+ data: { Category },
+ } = await client.query({
+ query: gql(`{
+ Category {
+ id
+ name
+ icon
+ }
+ }`),
+ })
+ commit('SET_CATEGORIES', Category)
+ return Category
+ },
+}