fix - maintaining sorting after navigation

This commit is contained in:
Nimit Bhargava 2019-10-10 20:32:12 +05:30 committed by roschaefer
parent c819edc293
commit 7330987a69
2 changed files with 29 additions and 9 deletions

View File

@ -11,7 +11,7 @@
:options="sortingOptions" :options="sortingOptions"
size="large" size="large"
v-bind:icon-right="sortingIcon" v-bind:icon-right="sortingIcon"
@input="toggleOnlySorting" @input="updateOrder"
></ds-select> ></ds-select>
</div> </div>
</ds-grid-item> </ds-grid-item>
@ -62,7 +62,7 @@ import HcPostCard from '~/components/PostCard'
import HcLoadMore from '~/components/LoadMore.vue' import HcLoadMore from '~/components/LoadMore.vue'
import MasonryGrid from '~/components/MasonryGrid/MasonryGrid.vue' import MasonryGrid from '~/components/MasonryGrid/MasonryGrid.vue'
import MasonryGridItem from '~/components/MasonryGrid/MasonryGridItem.vue' import MasonryGridItem from '~/components/MasonryGrid/MasonryGridItem.vue'
import { mapGetters } from 'vuex' import { mapGetters, mapMutations } from 'vuex'
import { filterPosts } from '~/graphql/PostQuery.js' import { filterPosts } from '~/graphql/PostQuery.js'
export default { export default {
@ -83,10 +83,8 @@ export default {
offset: 0, offset: 0,
pageSize: 12, pageSize: 12,
hashtag, hashtag,
placeholder: this.$t('sorting.newest'),
selected: this.$t('sorting.newest'),
sortingIcon: 'sort-amount-desc', sortingIcon: 'sort-amount-desc',
sorting: 'createdAt_desc', selected: this.$t('sorting.newest'),
sortingOptions: [ sortingOptions: [
{ {
label: this.$t('sorting.newest'), label: this.$t('sorting.newest'),
@ -103,9 +101,15 @@ export default {
], ],
} }
}, },
mounted() {
if(this.postsOrder.label) {
this.selected = this.postsOrder.label
}
},
computed: { computed: {
...mapGetters({ ...mapGetters({
postsFilter: 'postsFilter/postsFilter', postsFilter: 'postsFilter/postsFilter',
postsOrder: 'postsFilter/postsOrder',
}), }),
finalFilters() { finalFilters() {
let filter = this.postsFilter let filter = this.postsFilter
@ -122,11 +126,15 @@ export default {
}, },
}, },
methods: { methods: {
toggleOnlySorting(x) { ...mapMutations({
setPostsOrder: 'postsFilter/UPDATE_ORDER',
}),
updateOrder(sortingOptions) {
this.offset = 0 this.offset = 0
this.posts = [] this.posts = []
this.sortingIcon = x.icons this.sortingIcon = sortingOptions.icons
this.sorting = x.order this.selected = sortingOptions.label
this.setPostsOrder(sortingOptions)
}, },
clearSearch() { clearSearch() {
this.$router.push({ path: '/' }) this.$router.push({ path: '/' })
@ -176,7 +184,7 @@ export default {
return { return {
filter: this.finalFilters, filter: this.finalFilters,
first: this.pageSize, first: this.pageSize,
orderBy: this.sorting, orderBy: this.postsOrder.order,
offset: 0, offset: 0,
} }
}, },

View File

@ -12,6 +12,12 @@ export const state = () => {
filter: { filter: {
...defaultFilter, ...defaultFilter,
}, },
postsOrder: {
label: null,
value: 'Newest',
icons: 'sort-amount-desc',
order: 'createdAt_desc',
}
} }
} }
@ -46,6 +52,9 @@ export const mutations = {
if (isEmpty(get(filter, 'emotions_some.emotion_in'))) delete filter.emotions_some if (isEmpty(get(filter, 'emotions_some.emotion_in'))) delete filter.emotions_some
state.filter = filter state.filter = filter
}, },
UPDATE_ORDER(state, postsOrder) {
state.postsOrder = postsOrder
}
} }
export const getters = { export const getters = {
@ -64,4 +73,7 @@ export const getters = {
filteredByEmotions(state) { filteredByEmotions(state) {
return get(state.filter, 'emotions_some.emotion_in') || [] return get(state.filter, 'emotions_some.emotion_in') || []
}, },
postsOrder(state) {
return state.postsOrder
}
} }