comic-plus
Version:
<p align="center"> <img width="200px" src="./logo.png"/> </p>
74 lines (73 loc) • 2.51 kB
JavaScript
import { computed, warn } from "vue";
import "../../../utils/config.mjs";
import { randomColor } from "../../../utils/tools.mjs";
import "@vueuse/core";
let temp = 1;
function getUid() {
return Date.now() + temp++;
}
function parseDate(date) {
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);
}
const useSchedules = (props, { year, month, dates }) => {
const scl = computed(() => {
return (props == null ? void 0 : props.schedules) || [];
});
const getSchedules = () => {
var _a;
let schedules = scl.value.map((v) => {
let start = parseDate(v.startDate);
let end = parseDate(v.endDate ?? v.startDate);
if (end.getTime() < start.getTime()) {
warn("The schedules include options where endDate is less than startDate");
}
return {
...v,
_uid: getUid(),
startDate: start,
endDate: end,
color: v.color ?? randomColor()
};
}).sort((a, b) => a.startDate.getTime() - b.startDate.getTime());
let result = dates.value.map((week) => {
return week.map((day) => {
let T = day.isPrevMonth ? -1 : day.isNextMonth ? 1 : 0;
let timeTemp = new Date(year.value, month.value + T, day.value).getTime();
let copy = structuredClone(schedules);
let events = copy.filter((v) => {
return v.startDate.getTime() <= timeTemp && v.endDate.getTime() >= timeTemp;
});
return {
...day,
events
};
});
}).flat();
a: for (let i = 0; i < result.length; i++) {
const item = result[i];
if (item.events.length === 0 || ((_a = result[i - 1]) == null ? void 0 : _a.events.length) === 0) continue a;
b: for (let j = 0; j < item.events.length; j++) {
let event = item.events[j];
let PrevEvent = result[i - 1];
if (!PrevEvent) continue b;
let idx = PrevEvent == null ? void 0 : PrevEvent.events.findIndex((v) => v._uid === event._uid);
if (idx < 0) continue b;
let sum = item.events.slice(0, j).reduce((acc, cur) => acc += cur["top"] ?? 0, 0);
let sum2 = PrevEvent.events.slice(0, idx + 1).reduce((acc, cur) => acc += cur["top"] ?? 0, 0);
let diff = idx - j;
event["top"] = diff * 24 - sum + sum2;
}
}
return result;
};
const filterSchedules = computed(() => {
return props.openSchedule ? getSchedules() : [];
});
return {
filterSchedules
};
};
export {
getUid,
useSchedules
};