Files
mwitnessing/pages/cart/publishers/myschedule.tsx
2024-03-04 00:20:43 +02:00

108 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { useState } from 'react';
import Layout from "../../../components/layout";
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 { useSession, getSession } from 'next-auth/react';
export default function MySchedulePage({ assignments }) {
const { data: session, status } = useSession();
if (status === "loading") {
return <div>Loading...</div>;
}
return (
<Layout>
<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={assignments} selectedtab={common.getCurrentYearMonth()} />
</div>
</ProtectedRoute>
</Layout>
);
}
//get future assignmenrs for the current user (session.user.id)
export const getServerSideProps = async (context) => {
const session = await getSession(context);
context.res.setHeader("Cache-Control", "s-maxage=1, stale-while-revalidate");
if (!session) {
return {
redirect: {
destination: '/auth/login', // Adjust the login path as needed
permanent: false,
},
};
}
const prisma = common.getPrismaClient();
const publisher = await prisma.publisher.findMany({
where: {
id: session.user.id,
assignments: {
some: {
shift: {
startTime: {
gte: new Date(),
},
},
},
},
},
include: {
assignments: {
include: {
shift: true,
},
},
},
});
const assignments = publisher[0]?.assignments;
const transformedAssignments = assignments.map(assignment => {
if (assignment.shift && assignment.shift.startTime) {
return {
...assignment,
shift: {
...assignment.shift,
startTime: assignment.shift.startTime.toISOString(),
endTime: assignment.shift.endTime.toISOString(),
},
};
}
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: assignmentsStructure
}
}