recover filteredPostTypes getter

This commit is contained in:
Moriz Wahl 2023-06-02 18:05:37 +02:00
parent 2ae6c350e1
commit f252c76670
4 changed files with 39 additions and 125 deletions

View File

@ -40,10 +40,10 @@ export default {
},
computed: {
...mapGetters({
filteredPostTypes: 'posts/filteredPostTypes',
postFilters: 'posts/filter',
}),
eventSetInPostTypeFilter() {
return this.filteredPostTypes.includes('Event')
return this.postTypes.postType_in && this.postTypes.postType_in.includes('Event')
},
},
}

View File

@ -9,7 +9,7 @@
<labeled-button
icon="check"
:label="$t('filter-menu.all')"
:filled="filteredPostTypes === []"
:filled="filteredPostTypes.length === 0"
:title="$t('filter-menu.all')"
@click="togglePostType(null)"
/>

View File

@ -188,8 +188,8 @@ export default {
},
computed: {
...mapGetters({
postsFilter: 'posts/filter',
filteredPostTypes: 'posts/filteredPostTypes',
postsFilter: 'posts/filter',
orderBy: 'posts/orderBy',
}),
filterButtonIcon() {

View File

@ -6,11 +6,6 @@ import isEqual from 'lodash/isEqual'
import clone from 'lodash/clone'
const defaultFilter = {}
const filterPostTypes = ['Article', 'Event']
const orderByTypes = {
creationDate: ['createdAt_asc', 'createdAt_desc'],
startDate: ['eventStart_asc', 'eventStart_desc'],
}
export const state = () => {
return {
@ -21,109 +16,6 @@ export const state = () => {
}
}
const TOGGLE_POST_TYPE = (state, postType) => {
const filter = clone(state.filter)
if (postType && !(filter.postType_in && filter.postType_in.includes(postType))) {
filter.postType_in = [postType]
if (postType === 'Event') {
filter.eventStart_gte = new Date()
state.order = 'eventStart_asc'
} else {
delete filter.eventStart_gte
state.order = 'createdAt_desc'
}
} else {
delete filter.eventStart_gte
delete filter.postType_in
state.order = 'createdAt_desc'
}
state.filter = filter
}
const TOGGLE_UNSET_ALL_POST_TYPES_FILTERS = (state) => {
const beforeEventSetInPostTypeFilter = eventSetInPostTypeFilter(state)
filterPostTypes.forEach((postType) => {
if (filteredPostTypes(state).includes(postType)) TOGGLE_POST_TYPE(state, postType)
})
adjustEventsEnded(state, beforeEventSetInPostTypeFilter)
adjustOrder(state)
}
const TOGGLE_SET_UNSET_POST_TYPE_FILTER = (state, setPostType) => {
const beforeEventSetInPostTypeFilter = eventSetInPostTypeFilter(state)
if (noneSetInPostTypeFilter(state)) {
if (setPostType !== 'All') TOGGLE_POST_TYPE(state, setPostType)
} else {
if (setPostType !== 'All') {
if (filteredPostTypes(state).includes(setPostType)) {
TOGGLE_UNSET_ALL_POST_TYPES_FILTERS(state)
} else {
// if 'setPostType' is not set then set it and unset all others
TOGGLE_POST_TYPE(state, setPostType)
filterPostTypes.forEach((postType) => {
if (postType !== setPostType && filteredPostTypes(state).includes(postType))
TOGGLE_POST_TYPE(state, postType)
})
}
} else {
TOGGLE_UNSET_ALL_POST_TYPES_FILTERS(state)
}
}
adjustEventsEnded(state, beforeEventSetInPostTypeFilter)
adjustOrder(state)
}
const TOGGLE_EVENTS_ENDED = (state) => {
if (state.filter.eventStart_gte) {
delete state.filter.eventStart_gte
} else {
if (state.filter.postType_in && state.filter.postType_in.includes('Event')) {
state.filter.eventStart_gte = new Date()
}
}
}
const TOGGLE_ORDER = (state, value) => {
state.order = value
}
const adjustEventsEnded = (state, beforeEventSetInPostTypeFilter) => {
if (eventSetInPostTypeFilter(state) !== beforeEventSetInPostTypeFilter) {
if (eventSetInPostTypeFilter(state)) {
TOGGLE_EVENTS_ENDED(state, true)
} else {
TOGGLE_EVENTS_ENDED(state, false)
}
}
}
const adjustOrder = (state) => {
if (orderedByCreationDate(state)) {
if (!orderByTypes.creationDate.includes(orderBy(state))) {
TOGGLE_ORDER(state, 'createdAt_desc')
}
} else {
if (!orderByTypes.startDate.includes(orderBy(state))) {
TOGGLE_ORDER(state, 'eventStart_asc')
}
}
}
const filteredPostTypes = (state) => {
return get(state.filter, 'postType_in') || []
}
const noneSetInPostTypeFilter = (state) => {
return !articleSetInPostTypeFilter(state) && !eventSetInPostTypeFilter(state)
}
const articleSetInPostTypeFilter = (state) => {
return filteredPostTypes(state).includes('Article')
}
const eventSetInPostTypeFilter = (state) => {
return filteredPostTypes(state).includes('Event')
}
const orderedByCreationDate = (state) => {
return noneSetInPostTypeFilter(state) || articleSetInPostTypeFilter(state)
}
const orderBy = (state) => {
return state.order
}
export const mutations = {
TOGGLE_FILTER_BY_FOLLOWED(state, currentUserId) {
const filter = clone(state.filter)
@ -190,11 +82,36 @@ export const mutations = {
if (isEmpty(get(filter, 'emotions_some.emotion_in'))) delete filter.emotions_some
state.filter = filter
},
TOGGLE_POST_TYPE,
TOGGLE_UNSET_ALL_POST_TYPES_FILTERS,
TOGGLE_SET_UNSET_POST_TYPE_FILTER,
TOGGLE_EVENTS_ENDED,
TOGGLE_ORDER,
TOGGLE_POST_TYPE(state, postType) {
const filter = clone(state.filter)
if (postType && !(filter.postType_in && filter.postType_in.includes(postType))) {
filter.postType_in = [postType]
if (postType === 'Event') {
filter.eventStart_gte = new Date()
state.order = 'eventStart_asc'
} else {
delete filter.eventStart_gte
state.order = 'createdAt_desc'
}
} else {
delete filter.eventStart_gte
delete filter.postType_in
state.order = 'createdAt_desc'
}
state.filter = filter
},
TOGGLE_EVENTS_ENDED(state) {
if (state.filter.eventStart_gte) {
delete state.filter.eventStart_gte
} else {
if (state.filter.postType_in && state.filter.postType_in.includes('Event')) {
state.filter.eventStart_gte = new Date()
}
}
},
TOGGLE_ORDER(state, value) {
state.order = value
},
}
export const getters = {
@ -207,25 +124,22 @@ export const getters = {
filteredCategoryIds(state) {
return get(state.filter, 'categories_some.id_in') || []
},
filteredPostTypes,
filteredLanguageCodes(state) {
return get(state.filter, 'language_in') || []
},
filteredByUsersFollowed(state) {
return !!get(state.filter, 'author.followedBy_some.id')
},
filteredPostTypes(state) {
return get(state.filter, 'postType_in') || []
},
filteredByPostsInMyGroups(state) {
return !!get(state.filter, 'postsInMyGroups')
},
filteredByEmotions(state) {
return get(state.filter, 'emotions_some.emotion_in') || []
},
noneSetInPostTypeFilter,
articleSetInPostTypeFilter,
eventSetInPostTypeFilter,
orderedByCreationDate,
eventsEnded(state) {
return state.eventsEnded
orderBy(state) {
return state.order
},
orderBy,
}