mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-12 13:24:25 +00:00
calendar app: do not store events twice in vuex
This commit is contained in:
parent
b50c51bc2a
commit
b89edc29af
@ -2,15 +2,33 @@ import {USER_CALENDAR_SHOW_RANGES, USER_CALENDAR_SHOW_EVENTS} from './../const';
|
|||||||
import {calendarRangeToFullCalendarEvent} from './utils';
|
import {calendarRangeToFullCalendarEvent} from './utils';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
/**
|
||||||
|
* get the main user of the event/Calendar
|
||||||
|
*
|
||||||
|
* @param state
|
||||||
|
* @returns {*|null}
|
||||||
|
*/
|
||||||
getMainUser(state) {
|
getMainUser(state) {
|
||||||
return state.activity.mainUser || null;
|
return state.activity.mainUser || null;
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* return the date of the event/Calendar
|
||||||
|
*
|
||||||
|
* @param state
|
||||||
|
* @returns {Date}
|
||||||
|
*/
|
||||||
getEventDate(state) {
|
getEventDate(state) {
|
||||||
if (null === state.activity.start) {
|
if (null === state.activity.start) {
|
||||||
return new Date();
|
return new Date();
|
||||||
}
|
}
|
||||||
throw 'transform date to object ?';
|
throw 'transform date to object ?';
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* Compute the event sources to show on the FullCalendar
|
||||||
|
*
|
||||||
|
* @param state
|
||||||
|
* @returns {*[]}
|
||||||
|
*/
|
||||||
getEventSources(state) {
|
getEventSources(state) {
|
||||||
console.log('getEventSources');
|
console.log('getEventSources');
|
||||||
let sources = [];
|
let sources = [];
|
||||||
@ -50,12 +68,32 @@ export default {
|
|||||||
|
|
||||||
return sources;
|
return sources;
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* get the user data for a specific user
|
||||||
|
*
|
||||||
|
* @param state
|
||||||
|
* @returns {function(*): unknown}
|
||||||
|
*/
|
||||||
getUserData: (state) => (user) => {
|
getUserData: (state) => (user) => {
|
||||||
return state.usersData.get(user.id);
|
return state.usersData.get(user.id);
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* return true if the user has an entry in userData
|
||||||
|
*
|
||||||
|
* @param state
|
||||||
|
* @returns {function(*): boolean}
|
||||||
|
*/
|
||||||
hasUserData: (state) => (user) => {
|
hasUserData: (state) => (user) => {
|
||||||
return state.usersData.has(user.id);
|
return state.usersData.has(user.id);
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* return true if there was a fetch query for event between this date (start and end),
|
||||||
|
* those date are included.
|
||||||
|
*
|
||||||
|
* @param state
|
||||||
|
* @param getters
|
||||||
|
* @returns {(function({user: *, start: *, end: *}): (boolean))|*}
|
||||||
|
*/
|
||||||
isCalendarRangeLoadedForUser: (state, getters) => ({user, start, end}) => {
|
isCalendarRangeLoadedForUser: (state, getters) => ({user, start, end}) => {
|
||||||
if (!getters.hasUserData(user)) {
|
if (!getters.hasUserData(user)) {
|
||||||
return false;
|
return false;
|
||||||
@ -69,6 +107,9 @@ export default {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
suggestedEntities(state, getters) {
|
suggestedEntities(state, getters) {
|
||||||
if (typeof (state.activity.accompanyingPeriod) === 'undefined') {
|
if (typeof (state.activity.accompanyingPeriod) === 'undefined') {
|
||||||
return [];
|
return [];
|
||||||
|
@ -22,13 +22,25 @@ const store = createStore({
|
|||||||
activity: mapEntity(window.entity), // activity is the calendar entity actually
|
activity: mapEntity(window.entity), // activity is the calendar entity actually
|
||||||
currentEvent: null,
|
currentEvent: null,
|
||||||
availableLocations: [],
|
availableLocations: [],
|
||||||
|
/**
|
||||||
|
* the current user
|
||||||
|
*/
|
||||||
me: null,
|
me: null,
|
||||||
initialDate: null,
|
/**
|
||||||
|
* store information about current view
|
||||||
|
*/
|
||||||
currentView: {
|
currentView: {
|
||||||
start: null,
|
start: null,
|
||||||
end: null,
|
end: null,
|
||||||
users: new Map(),
|
users: new Map(),
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* store a list of existing event, to avoid storing them twice
|
||||||
|
*/
|
||||||
|
existingEvents: new Set(),
|
||||||
|
/**
|
||||||
|
* store user data
|
||||||
|
*/
|
||||||
usersData: new Map(),
|
usersData: new Map(),
|
||||||
},
|
},
|
||||||
getters,
|
getters,
|
||||||
|
@ -44,6 +44,15 @@ export default {
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* Add CalendarRange object for an user
|
||||||
|
*
|
||||||
|
* @param state
|
||||||
|
* @param user
|
||||||
|
* @param ranges
|
||||||
|
* @param start
|
||||||
|
* @param end
|
||||||
|
*/
|
||||||
addCalendarRangesForUser(state, {user, ranges, start, end}) {
|
addCalendarRangesForUser(state, {user, ranges, start, end}) {
|
||||||
let userData;
|
let userData;
|
||||||
if (state.usersData.has(user.id)) {
|
if (state.usersData.has(user.id)) {
|
||||||
@ -53,7 +62,14 @@ export default {
|
|||||||
state.usersData.set(user.id, userData);
|
state.usersData.set(user.id, userData);
|
||||||
}
|
}
|
||||||
|
|
||||||
const eventRanges = ranges.map(r => calendarRangeToFullCalendarEvent(r));
|
const eventRanges = ranges
|
||||||
|
.filter(r => !state.existingEvents.has(`range_${r.id}`))
|
||||||
|
.map(r => {
|
||||||
|
// add to existing ids
|
||||||
|
state.existingEvents.add(`range_${r.id}`);
|
||||||
|
return r;
|
||||||
|
})
|
||||||
|
.map(r => calendarRangeToFullCalendarEvent(r));
|
||||||
|
|
||||||
userData.calendarRanges = userData.calendarRanges.concat(eventRanges);
|
userData.calendarRanges = userData.calendarRanges.concat(eventRanges);
|
||||||
userData.calendarRangesLoaded.push({start, end});
|
userData.calendarRangesLoaded.push({start, end});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user