fix dates ant TZ, cleanup
This commit is contained in:
@ -11,6 +11,7 @@ import { ToastContainer } from 'react-toastify';
|
||||
const common = require('src/helpers/common');
|
||||
//todo import Availability type from prisma schema
|
||||
import { isBefore, addMinutes, isAfter, isEqual, set, getHours, getMinutes, getSeconds } from 'date-fns'; //ToDo obsolete
|
||||
import { stat } from 'fs';
|
||||
|
||||
const { DateTime, FixedOffsetZone } = require('luxon');
|
||||
|
||||
@ -21,7 +22,7 @@ const fetchConfig = async () => {
|
||||
return config.default;
|
||||
};
|
||||
|
||||
export default function AvailabilityForm({ publisherId, existingItems, inline, onDone, date, datePicker = false }) {
|
||||
export default function AvailabilityForm({ publisherId, existingItems, inline, onDone, date, cartEvent, datePicker = false }) {
|
||||
|
||||
const router = useRouter();
|
||||
const urls = {
|
||||
@ -67,14 +68,13 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o
|
||||
}, []);
|
||||
|
||||
|
||||
// Define the minimum and maximum times
|
||||
const minTime = new Date();
|
||||
minTime.setHours(9, 0, 0, 0); // 8:00 AM
|
||||
const maxTime = new Date();
|
||||
maxTime.setHours(19, 30, 0, 0); // 8:00 PM
|
||||
// get cart event or set default time for Sofia timezone
|
||||
const minTime = cartEvent?.startTime || DateTime.now().set({ hour: 8, minute: 0, second: 0, millisecond: 0, zone: 'Europe/Sofia' }).toJSDate();
|
||||
const maxTime = cartEvent?.endTime || DateTime.now().set({ hour: 20, minute: 0, second: 0, millisecond: 0, zone: 'Europe/Sofia' }).toJSDate();
|
||||
|
||||
useEffect(() => {
|
||||
setTimeSlots(generateTimeSlots(minTime, maxTime, 90, availabilities));
|
||||
setTimeSlots(generateTimeSlots(new Date(minTime), new Date(maxTime), cartEvent.shiftDuration, availabilities));
|
||||
console.log("AvailabilityForm: minTime: " + common.getTimeFormatted(minTime) + ", maxTime: " + common.getTimeFormatted(maxTime), ", " + cartEvent.shiftDuration + " min. shifts");
|
||||
}, []);
|
||||
|
||||
|
||||
@ -189,34 +189,11 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o
|
||||
|
||||
// Common function to set shared properties
|
||||
function setSharedAvailabilityProperties(availability, group, timeSlots) {
|
||||
// Define a fixed offset for Sofia (+2 hours from UTC, ignoring DST)
|
||||
const fixedZone = FixedOffsetZone.instance(120); // Offset in minutes
|
||||
|
||||
// availability.startTime = group[0].startTime;
|
||||
// availability.endTime = group[group.length - 1].endTime;
|
||||
// Adjust start time
|
||||
let startTime = DateTime.fromJSDate(group[0].startTime, { zone: 'utc' })
|
||||
.setZone(fixedZone, { keepLocalTime: true });
|
||||
startTime = startTime.set({
|
||||
hour: group[0].startTime.getUTCHours(),
|
||||
minute: group[0].startTime.getUTCMinutes(),
|
||||
second: group[0].startTime.getUTCSeconds()
|
||||
});
|
||||
|
||||
// Adjust end time
|
||||
let endTime = DateTime.fromJSDate(group[group.length - 1].endTime, { zone: 'utc' })
|
||||
.setZone(fixedZone, { keepLocalTime: true });
|
||||
endTime = endTime.set({
|
||||
hour: group[group.length - 1].endTime.getUTCHours(),
|
||||
minute: group[group.length - 1].endTime.getUTCMinutes(),
|
||||
second: group[group.length - 1].endTime.getUTCSeconds()
|
||||
});
|
||||
|
||||
// Update the availability object with the new times
|
||||
availability.startTime = startTime.toJSDate();
|
||||
availability.endTime = endTime.toJSDate();
|
||||
|
||||
availability.name = common.getTimeFomatted(group[0].startTime) + "-" + common.getTimeFomatted(group[group.length - 1].endTime);
|
||||
let startTime = common.setTimeHHmm(new Date(availability.startTime || day), common.getTimeFormatted(group[0].startTime));
|
||||
let endTime = common.setTimeHHmm(new Date(availability.endTime || day), common.getTimeFormatted(group[group.length - 1].endTime));
|
||||
availability.startTime = startTime;
|
||||
availability.endTime = endTime;
|
||||
availability.name = common.getTimeFormatted(group[0].startTime) + "--" + common.getTimeFormatted(group[group.length - 1].endTime);
|
||||
|
||||
availability.isWithTransportIn = group[0].isFirst && timeSlots[0].isWithTransport;
|
||||
availability.isWithTransportOut = group[group.length - 1].isLast && timeSlots[timeSlots.length - 1].isWithTransport;
|
||||
@ -308,27 +285,19 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o
|
||||
let currentTime = start;
|
||||
|
||||
//const baseDate = new Date(Date.UTC(2000, 0, 1, 0, 0, 0));
|
||||
const baseDate = new Date(start);
|
||||
//const baseDate = new Date(start);
|
||||
|
||||
while (isBefore(currentTime, end)) {
|
||||
let slotStart = normalizeTime(currentTime, baseDate);
|
||||
let slotEnd = normalizeTime(addMinutes(currentTime, increment), baseDate);
|
||||
let slotStart = currentTime;
|
||||
let slotEnd = addMinutes(currentTime, increment);
|
||||
|
||||
const isChecked = items.some(item => {
|
||||
let itemStart = item.startTime ? normalizeTime(new Date(item.startTime), baseDate) : null;
|
||||
let itemEnd = item.endTime ? normalizeTime(new Date(item.endTime), baseDate) : null;
|
||||
|
||||
return itemStart && itemEnd &&
|
||||
(slotStart.getTime() < itemEnd.getTime()) &&
|
||||
(slotEnd.getTime() > itemStart.getTime());
|
||||
});
|
||||
|
||||
slots.push({
|
||||
startTime: slotStart,
|
||||
endTime: slotEnd,
|
||||
isChecked: isChecked,
|
||||
return item.startTime && item.endTime &&
|
||||
(slotStart.getTime() < item.endTime.getTime()) &&
|
||||
(slotEnd.getTime() > item.startTime.getTime());
|
||||
});
|
||||
|
||||
slots.push({ startTime: slotStart, endTime: slotEnd, isChecked: isChecked, });
|
||||
currentTime = addMinutes(currentTime, increment);
|
||||
}
|
||||
|
||||
@ -342,16 +311,6 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o
|
||||
return slots;
|
||||
};
|
||||
|
||||
// Normalize the time part of a date by using a base date
|
||||
function normalizeTime(date, baseDate) {
|
||||
return set(baseDate, {
|
||||
hours: getHours(date),
|
||||
minutes: getMinutes(date),
|
||||
seconds: getSeconds(date),
|
||||
milliseconds: 0
|
||||
});
|
||||
}
|
||||
|
||||
const TimeSlotCheckboxes = ({ slots, setSlots, items: [] }) => {
|
||||
const [allDay, setAllDay] = useState(slots.every(slot => slot.isChecked));
|
||||
const handleAllDayChange = (e) => {
|
||||
|
Reference in New Issue
Block a user