fix initial calendar loading;
show unpublished events in calendar for ADMINS mark unavailable publishers when they are available on another time on the same day;
This commit is contained in:
@ -76,8 +76,8 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o
|
|||||||
const maxTime = d.set({ hour: 19, minute: 30 }).toJSDate();
|
const maxTime = d.set({ hour: 19, minute: 30 }).toJSDate();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setTimeSlots(generateTimeSlots(new Date(minTime), new Date(maxTime), cartEvent.shiftDuration, availabilities));
|
setTimeSlots(generateTimeSlots(new Date(minTime), new Date(maxTime), cartEvent?.shiftDuration || 90, availabilities));
|
||||||
console.log("AvailabilityForm: minTime: " + common.getTimeFormatted(minTime) + ", maxTime: " + common.getTimeFormatted(maxTime), ", " + cartEvent.shiftDuration + " min. shifts");
|
console.log("AvailabilityForm: minTime: " + common.getTimeFormatted(minTime) + ", maxTime: " + common.getTimeFormatted(maxTime), ", " + cartEvent?.shiftDuration || 90 + " min. shifts", cartEvent ? "cartEvent" : "cartEvent MISSING!!!");
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|
||||||
|
@ -173,6 +173,9 @@ function ShiftComponent({ shift, onShiftSelect, isSelected, onPublisherSelect, a
|
|||||||
borderStyles += 'border-l-2 border-blue-500 '; // Left border for specific availability conditions
|
borderStyles += 'border-l-2 border-blue-500 '; // Left border for specific availability conditions
|
||||||
ass.canTransport = av.isWithTransportIn || av.isWithTransportOut;
|
ass.canTransport = av.isWithTransportIn || av.isWithTransportOut;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
borderStyles += 'border-l-4 border-red-500 ';
|
||||||
|
}
|
||||||
|
|
||||||
if (publisherInfo.hasUpToDateAvailabilities) {
|
if (publisherInfo.hasUpToDateAvailabilities) {
|
||||||
//add green right border
|
//add green right border
|
||||||
|
@ -74,7 +74,10 @@ const AvCalendar = ({ publisherId, events, selectedDate, cartEvents }) => {
|
|||||||
return ce;
|
return ce;
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => { setCartEvent(getCartEvent(date)); },
|
useEffect(() => {
|
||||||
|
//console.log("useEffect: ", date, selectedEvents, cartEvents);
|
||||||
|
setCartEvent(getCartEvent(date));
|
||||||
|
},
|
||||||
[date, selectedEvents]);
|
[date, selectedEvents]);
|
||||||
|
|
||||||
// Update internal state when `events` prop changes
|
// Update internal state when `events` prop changes
|
||||||
@ -236,7 +239,9 @@ const AvCalendar = ({ publisherId, events, selectedDate, cartEvents }) => {
|
|||||||
console.log("handleSelect: ", existingEvents);
|
console.log("handleSelect: ", existingEvents);
|
||||||
|
|
||||||
// Use the updated startdate for getCartEvent and ensure it reflects in the state properly
|
// Use the updated startdate for getCartEvent and ensure it reflects in the state properly
|
||||||
setCartEvent(getCartEvent(startdate));
|
const cartEvent = getCartEvent(startdate);
|
||||||
|
setCartEvent(cartEvent);
|
||||||
|
console.log("cartEvent: ", cartEvent.dayofweek);
|
||||||
setSelectedEvents(existingEvents);
|
setSelectedEvents(existingEvents);
|
||||||
setIsModalOpen(true);
|
setIsModalOpen(true);
|
||||||
};
|
};
|
||||||
|
@ -24,7 +24,7 @@ function PublisherSearchBox({ id, selectedId, onChange, isFocused, filterDate, s
|
|||||||
const fetchPublishers = async () => {
|
const fetchPublishers = async () => {
|
||||||
console.log("fetchPublishers called");
|
console.log("fetchPublishers called");
|
||||||
try {
|
try {
|
||||||
let url = `/api/?action=filterPublishers&select=id,firstName,lastName,email,isActive&searchText=${searchText}&availabilities=false`;
|
let url = `/api/?action=filterPublishers&select=id,firstName,lastName,email,isActive&availabilities=false`;
|
||||||
|
|
||||||
if (filterDate) {
|
if (filterDate) {
|
||||||
url += `&filterDate=${common.getISODateOnly(filterDate)}`;
|
url += `&filterDate=${common.getISODateOnly(filterDate)}`;
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { getToken } from "next-auth/jwt";
|
import { getToken } from "next-auth/jwt";
|
||||||
|
import { authOptions } from './auth/[...nextauth]'
|
||||||
|
import { getServerSession } from "next-auth/next"
|
||||||
import { NextApiRequest, NextApiResponse } from 'next'
|
import { NextApiRequest, NextApiResponse } from 'next'
|
||||||
import { DayOfWeek, AvailabilityType } from '@prisma/client';
|
import { DayOfWeek, AvailabilityType, UserRole } from '@prisma/client'; s
|
||||||
const common = require('../../src/helpers/common');
|
const common = require('../../src/helpers/common');
|
||||||
const dataHelper = require('../../src/helpers/data');
|
const dataHelper = require('../../src/helpers/data');
|
||||||
const subq = require('../../prisma/bl/subqueries');
|
const subq = require('../../prisma/bl/subqueries');
|
||||||
@ -46,6 +48,9 @@ export default async function handler(req, res) {
|
|||||||
let monthInfo = common.getMonthDatesInfo(day);
|
let monthInfo = common.getMonthDatesInfo(day);
|
||||||
const searchText = req.query.searchText?.normalize('NFC');
|
const searchText = req.query.searchText?.normalize('NFC');
|
||||||
|
|
||||||
|
const sessionServer = await getServerSession(req, res, authOptions)
|
||||||
|
var isAdmin = sessionServer?.user.role == UserRole.ADMIN
|
||||||
|
|
||||||
try {
|
try {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case "initDb":
|
case "initDb":
|
||||||
@ -137,7 +142,7 @@ export default async function handler(req, res) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case "getCalendarEvents":
|
case "getCalendarEvents":
|
||||||
let events = await dataHelper.getCalendarEvents(req.query.publisherId, day);
|
let events = await dataHelper.getCalendarEvents(req.query.publisherId, true, true, isAdmin);
|
||||||
res.status(200).json(events);
|
res.status(200).json(events);
|
||||||
|
|
||||||
case "getPublisherInfo":
|
case "getPublisherInfo":
|
||||||
|
@ -194,15 +194,24 @@ export const getServerSideProps = async (context) => {
|
|||||||
req: context.req,
|
req: context.req,
|
||||||
allowedRoles: [/* ...allowed roles... */]
|
allowedRoles: [/* ...allowed roles... */]
|
||||||
});
|
});
|
||||||
const session = await getSession(context);
|
// const session = await getSession(context);
|
||||||
const sessionServer = await getServerSession(context.req, context.res, authOptions)
|
const sessionServer = await getServerSession(context.req, context.res, authOptions)
|
||||||
|
|
||||||
if (!session) { return { props: {} } }
|
if (!sessionServer) {
|
||||||
const role = session?.user.role;
|
return {
|
||||||
console.log("server role: " + role);
|
redirect: {
|
||||||
const userId = session?.user.id;
|
destination: '/auth/signin',
|
||||||
|
permanent: false,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
var items = await dataHelper.getCalendarEvents(session.user.id);
|
const role = sessionServer?.user.role;
|
||||||
|
console.log("server role: " + role);
|
||||||
|
const userId = sessionServer?.user.id;
|
||||||
|
var isAdmin = sessionServer?.user.role == UserRole.ADMIN;//role.localeCompare(UserRole.ADMIN) === 0;
|
||||||
|
|
||||||
|
var items = await dataHelper.getCalendarEvents(userId, true, true, isAdmin);
|
||||||
// common.convertDatesToISOStrings(items);
|
// common.convertDatesToISOStrings(items);
|
||||||
//serializable dates
|
//serializable dates
|
||||||
items = items.map(item => {
|
items = items.map(item => {
|
||||||
@ -210,7 +219,8 @@ export const getServerSideProps = async (context) => {
|
|||||||
...item,
|
...item,
|
||||||
startTime: item.startTime.toISOString(),
|
startTime: item.startTime.toISOString(),
|
||||||
endTime: item.endTime.toISOString(),
|
endTime: item.endTime.toISOString(),
|
||||||
date: item.date.toISOString()
|
date: item.date.toISOString(),
|
||||||
|
name: common.getTimeFormatted(item.startTime) + "-" + common.getTimeFormatted(item.endTime)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (updatedItem.shift) {
|
if (updatedItem.shift) {
|
||||||
@ -246,7 +256,7 @@ export const getServerSideProps = async (context) => {
|
|||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
initialItems: items,
|
initialItems: items,
|
||||||
userId: session?.user.id,
|
userId: sessionServer?.user.id,
|
||||||
cartEvents: cartEvents,
|
cartEvents: cartEvents,
|
||||||
// messages: (await import(`../content/i18n/${context.locale}.json`)).default
|
// messages: (await import(`../content/i18n/${context.locale}.json`)).default
|
||||||
},
|
},
|
||||||
|
@ -614,7 +614,7 @@ function convertShiftDates(assignments) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async function getCalendarEvents(publisherId, date, availabilities = true, assignments = true) {
|
async function getCalendarEvents(publisherId, availabilities = true, assignments = true, includeUnpublished = false) {
|
||||||
const result = [];
|
const result = [];
|
||||||
// let pubs = await filterPublishers("id,firstName,lastName,email".split(","), "", date, assignments, availabilities, date ? true : false, publisherId);
|
// let pubs = await filterPublishers("id,firstName,lastName,email".split(","), "", date, assignments, availabilities, date ? true : false, publisherId);
|
||||||
|
|
||||||
@ -682,7 +682,7 @@ async function getCalendarEvents(publisherId, date, availabilities = true, assig
|
|||||||
//only published shifts
|
//only published shifts
|
||||||
|
|
||||||
publisher.assignments?.filter(
|
publisher.assignments?.filter(
|
||||||
assignment => assignment.shift.isPublished
|
assignment => assignment.shift.isPublished || includeUnpublished
|
||||||
).forEach(item => {
|
).forEach(item => {
|
||||||
result.push({
|
result.push({
|
||||||
...item,
|
...item,
|
||||||
|
Reference in New Issue
Block a user