feature: copy ranges

This commit is contained in:
2022-06-27 21:27:37 +02:00
parent b5d5338002
commit 13dae00a2c
4 changed files with 69 additions and 4 deletions

View File

@@ -1,11 +1,15 @@
import {State} from './../index';
import {ActionContext, Module} from 'vuex';
import {CalendarRange, CalendarRangeCreate, CalendarRangeEdit} from "../../../../types";
import {CalendarRange, CalendarRangeCreate, CalendarRangeEdit, isEventInputCalendarRange} from "../../../../types";
import {fetchCalendarRangeForUser} from '../../../Calendar/api';
import {calendarRangeToFullCalendarEvent} from '../../../Calendar/store/utils';
import {EventInput} from '@fullcalendar/vue3';
import {makeFetch} from "../../../../../../../ChillMainBundle/Resources/public/lib/api/apiMethods";
import {datetimeToISO} from "../../../../../../../ChillMainBundle/Resources/public/chill/js/date";
import {
datetimeToISO,
dateToISO,
ISOToDatetime
} from "../../../../../../../ChillMainBundle/Resources/public/chill/js/date";
import type {EventInputCalendarRange} from "../../../../types";
export interface CalendarRangesState {
@@ -35,6 +39,20 @@ export default <Module<CalendarRangesState, State>>{
return false;
},
getRangesOnDate: (state: CalendarRangesState) => (date: Date): EventInputCalendarRange[] => {
const founds = [];
const dateStr = <string>dateToISO(date);
for (let range of state.ranges) {
if (isEventInputCalendarRange(range)
&& range.start.startsWith(dateStr)
) {
founds.push(range);
}
}
return founds;
}
},
mutations: {
addRanges(state: CalendarRangesState, ranges: CalendarRange[]) {
@@ -192,7 +210,21 @@ export default <Module<CalendarRangesState, State>>{
.catch((error) => {
console.log(error);
})
}
},
copyFromDayToAnotherDay(ctx, {from, to}: {from: Date, to: Date}): Promise<null> {
const rangesToCopy: EventInputCalendarRange[] = ctx.getters['getRangesOnDate'](from);
const promises = [];
for (let r of rangesToCopy) {
let start = new Date(<Date>ISOToDatetime(r.start));
start.setFullYear(to.getFullYear(), to.getMonth(), to.getDate())
let end = new Date(<Date>ISOToDatetime(r.end));
end.setFullYear(to.getFullYear(), to.getMonth(), to.getDate());
promises.push(ctx.dispatch('createRange', {start, end}));
}
return Promise.all(promises).then(_ => Promise.resolve(null));
}
}
};