fix dates ant TZ, cleanup

This commit is contained in:
Dobromir Popov
2024-05-05 20:43:47 +02:00
parent 227c1f0ab3
commit 12503409b6
7 changed files with 190 additions and 154 deletions

View File

@ -1,4 +1,4 @@
import React, { useState, useEffect } from 'react';
import React, { useState, useEffect, use } from 'react';
import { Calendar, momentLocalizer, dateFnsLocalizer } from 'react-big-calendar';
import 'react-big-calendar/lib/css/react-big-calendar.css';
import AvailabilityForm from '../availability/AvailabilityForm';
@ -18,11 +18,13 @@ import { MdToday } from 'react-icons/md';
import { useSwipeable } from 'react-swipeable';
import axiosInstance from '../../src/axiosSecure';
import { set } from 'date-fns';
import { get } from 'http';
// import { set, format, addDays } from 'date-fns';
// import { isEqual, isSameDay, getHours, getMinutes } from 'date-fns';
import { filter } from 'jszip';
import e from 'express';
// import { filter } from 'jszip';
// import e from 'express';
@ -46,7 +48,7 @@ const messages = {
// Any other labels you want to translate...
};
const AvCalendar = ({ publisherId, events, selectedDate }) => {
const AvCalendar = ({ publisherId, events, selectedDate, cartEvents }) => {
const isAdmin = ProtectedRoute.IsInRole(UserRole.ADMIN);
@ -65,7 +67,15 @@ const AvCalendar = ({ publisherId, events, selectedDate }) => {
return { start, end };
});
const [cartEvent, setCartEvent] = useState(null);
function getCartEvent(date) {
const dayOfWeek = common.getDayOfWeekNameEnEnumForDate(date);
const ce = cartEvents?.find(e => e.dayofweek === dayOfWeek);
return ce;
}
useEffect(() => { setCartEvent(getCartEvent(date)); },
[date, selectedEvents]);
// Update internal state when `events` prop changes
useEffect(() => {
@ -113,6 +123,7 @@ const AvCalendar = ({ publisherId, events, selectedDate }) => {
//setDisplayedEvents(evts);
}, [visibleRange, evts, currentView]);
// todo: review that
const handlers = useSwipeable({
onSwipedLeft: () => navigate('NEXT'),
onSwipedRight: () => navigate('PREV'),
@ -201,18 +212,13 @@ const AvCalendar = ({ publisherId, events, selectedDate }) => {
return existingEvents;
};
// Define min and max times
const minHour = 8; // 8:00 AM
const maxHour = 20; // 8:00 PM
const minTime = new Date();
minTime.setHours(minHour, 0, 0);
const maxTime = new Date();
maxTime.setHours(maxHour, 0, 0);
const totalHours = maxHour - minHour;
// const totalHours = maxHour - minHour;
const handleSelect = ({ mode, start, end }) => {
const startdate = typeof start === 'string' ? new Date(start) : start;
const enddate = typeof end === 'string' ? new Date(end) : end;
//we set the time to proper timezone
const startdate = common.setTimezone(start);
const enddate = common.setTimezone(end);
if (!start || !end) return;
//readonly for past dates (ToDo: if not admin)
@ -224,27 +230,10 @@ const AvCalendar = ({ publisherId, events, selectedDate }) => {
end = common.setTimeHHmm(startdate, "23:59");
}
const startMinutes = common.getTimeInMinutes(start);
const endMinutes = common.getTimeInMinutes(end);
// Adjust start and end times to be within min and max hours
if (startMinutes < common.getTimeInMinutes(common.setTimeHHmm(start, minHour))) {
start = common.setTimeHHmm(start, minHour);
}
if (endMinutes > common.getTimeInMinutes(common.setTimeHHmm(end, maxHour))) {
end = common.setTimeHHmm(end, maxHour);
}
setDate(start);
// get exising events for the selected date
//ToDo: properly fix this. filterEvents does not return the expcted results
let existingEvents = filterEvents(evts, publisherId, startdate);
// if existingEvents is empty - create new with the selected range
// if (existingEvents.length === 0) {
// existingEvents = [{ startTime: start, endTime: end }];
// }
console.log("handleSelect: " + existingEvents);
setCartEvent(getCartEvent(date));
setSelectedEvents(existingEvents);
setIsModalOpen(true);
};
@ -509,8 +498,8 @@ const AvCalendar = ({ publisherId, events, selectedDate }) => {
onSelectSlot={handleSelect}
onSelectEvent={handleEventClick}
style={{ height: '100%', width: '100%' }}
min={minTime} // Set minimum time
max={maxTime} // Set maximum time
min={cartEvent?.startTime} // Set minimum time
max={cartEvent?.endTime} // Set maximum time
messages={messages}
view={currentView}
views={['month', 'week', 'agenda']}
@ -541,6 +530,7 @@ const AvCalendar = ({ publisherId, events, selectedDate }) => {
date={date}
onDone={handleDialogClose}
inline={true}
cartEvent={cartEvent}
// Pass other props as needed
/>
</div>