wbu-design-system
Version:
WhereBy.Design is the nascent design system for WhereBy.Us
64 lines (51 loc) • 2.08 kB
JavaScript
import { isEmpty } from 'lodash';
import EventService from '../../services/eventService';
export default {
name: 'EventsVuexModule',
state: {
upcomingEvents: [],
},
actions: {
async getUpcomingEvents({ commit }) {
const upcomingEvents = await EventService.getUpcomingEvents();
commit('addMultipleEventsToState', upcomingEvents);
},
},
getters: {
filterUpcomingEvents: (state, getters) => (brand, phrase, startDate) => {
const eventsByBrand = getters.getUpcomingEventsByBrand(brand);
const eventsByDate = getters.getUpcomingEventsByStartDate(startDate);
const eventsByBrandAndDate = eventsByBrand.filter(event => eventsByDate.includes(event));
return EventService.filterEventsByPhraseInDescription(phrase, eventsByBrandAndDate);
},
getUpcomingEventsByBrand: (state, getters) => (brand) => {
if (isEmpty(brand)) {
return getters.getUpcomingEvents();
}
return state.upcomingEvents.filter(event => event.brand === brand);
},
getUpcomingEventsByStartDate: (state, getters) => (startDateString) => {
if (isEmpty(startDateString)) {
return getters.getUpcomingEvents();
}
return state.upcomingEvents.filter(event => event.startDate === startDateString);
},
getUpcomingEvents: state => () => state.upcomingEvents,
},
mutations: {
addSingleEventToState: (state, event) => {
state.upcomingEvents.push(event);
},
addMultipleEventsToState: (state, events) => {
state.upcomingEvents = events; // eslint-disable-line
},
removeEventFromState: (state, { eventToRemove }) => {
const indexOfEventToRemove = state.upcomingEvents.findIndex(event => event.id === eventToRemove.id);
state.upcomingEvents.splice(indexOfEventToRemove, 1);
},
replaceEventInState: (state, { eventToReplace }) => {
const indexOfEventToReplace = state.upcomingEvents.findIndex(event => event.id === eventToReplace.id);
state.upcomingEvents.splice(indexOfEventToReplace, 1, eventToReplace);
},
},
};