fix and consolidate calendar dates usage and format

This commit is contained in:
Dobromir Popov
2024-03-04 00:20:43 +02:00
parent 6043df6ad1
commit 0bb57ced17
3 changed files with 37 additions and 15 deletions

View File

@ -58,7 +58,9 @@ const AvCalendar = ({ publisherId, events, selectedDate }) => {
useEffect(() => {
const updatedEvents = events.map(event => ({
...event,
date: new Date(event.startTime).setHours(0, 0, 0, 0)
date: new Date(event.startTime).setHours(0, 0, 0, 0),
startTime: new Date(event.startTime),
endTime: event.endTime ? new Date(event.endTime) : undefined
}));
setEvents(updatedEvents);
@ -164,12 +166,15 @@ const AvCalendar = ({ publisherId, events, selectedDate }) => {
const totalHours = maxHour - minHour;
const handleSelect = ({ start, end }) => {
const startdate = typeof start === 'string' ? new Date(start) : start;
const enddate = typeof end === 'string' ? new Date(end) : end;
if (!start || !end) return;
if (start < new Date() || end < new Date() || start > end) return;
if (startdate < new Date() || end < new Date() || startdate > end) return;
// Check if start and end are on the same day
if (start.toDateString() !== end.toDateString()) {
end = common.setTimeHHmm(start, "23:59");
if (startdate.toDateString() !== enddate.toDateString()) {
end = common.setTimeHHmm(startdate, "23:59");
}
const startMinutes = common.getTimeInMinutes(start);
@ -186,7 +191,7 @@ const AvCalendar = ({ publisherId, events, selectedDate }) => {
setDate(start);
// get exising events for the selected date
const existingEvents = evts?.filter(event => (event.publisher?.id || event.publisherId) === publisherId && new Date(event.date).toDateString() === start.toDateString());
const existingEvents = evts?.filter(event => (event.publisher?.id || event.publisherId) === publisherId && new Date(event.date).toDateString() === startdate.toDateString());
// const existingEvents = evts?.filter(event => {
// return event.publisherId === publisherId &&
// new Date(event.startTime).getFullYear() === start.getFullYear() &&

View File

@ -7,7 +7,7 @@ import axiosInstance from '../../src/axiosSecure';
import { monthNamesBG, GetTimeFormat, GetDateFormat } from "../../src/helpers/const"
import common from "../../src/helpers/common";
type Assignment = {
type Assignments = {
items: {
[key: string]: any[];
};
@ -18,7 +18,7 @@ type Assignment = {
};
type ShiftsListProps = {
assignments: Assignment;
assignments: Assignments;
selectedtab: string;
};

View File

@ -4,11 +4,11 @@ import ProtectedRoute from '../../../components/protectedRoute';
import { UserRole } from '@prisma/client';
import axiosServer from '../../../src/axiosServer';
import common from '../../../src/helpers/common';
import { ShiftsList } from '../../../components/publisher/ShiftsList';
import ShiftsList from '../../../components/publisher/ShiftsList';
import { useSession, getSession } from 'next-auth/react';
export default function MySchedulePage({ shifts }) {
export default function MySchedulePage({ assignments }) {
const { data: session, status } = useSession();
if (status === "loading") {
@ -20,7 +20,7 @@ export default function MySchedulePage({ shifts }) {
<ProtectedRoute allowedRoles={[UserRole.ADMIN, UserRole.POWERUSER, UserRole.USER]}>
<div className="container mx-auto p-4">
<h1 className="text-xl font-semibold mb-4">Моите смени</h1>
<ShiftsList assignments={shifts} selectedtab={common.getCurrentYearMonth()} />
<ShiftsList assignments={assignments} selectedtab={common.getCurrentYearMonth()} />
</div>
</ProtectedRoute>
</Layout>
@ -67,6 +67,7 @@ export const getServerSideProps = async (context) => {
});
const assignments = publisher[0]?.assignments;
const transformedAssignments = assignments.map(assignment => {
if (assignment.shift && assignment.shift.startTime) {
return {
@ -81,10 +82,26 @@ export const getServerSideProps = async (context) => {
return assignment;
});
const singleKey = "all";
const assignmentsStructure = {
assignments: {
items: {
[singleKey]: [],
},
keys: [singleKey],
months: {
[singleKey]: "Всички смени",
},
},
selectedtab: singleKey,
};
transformedAssignments.forEach(assignment => {
assignmentsStructure.assignments.items[singleKey].push(assignment);
});
return {
props: {
assignments: transformedAssignments,
},
};
};
props: assignmentsStructure
}
}