shift updated fixes
This commit is contained in:
parent
b2641f9daa
commit
d8c08c8451
@ -3,6 +3,16 @@ let adminMap = null;
|
|||||||
let startMarker = null;
|
let startMarker = null;
|
||||||
let storedQRCodes = {};
|
let storedQRCodes = {};
|
||||||
|
|
||||||
|
// Utility function to create a local date from YYYY-MM-DD string
|
||||||
|
// This prevents timezone issues when displaying dates
|
||||||
|
function createLocalDate(dateString) {
|
||||||
|
if (!dateString) return null;
|
||||||
|
const parts = dateString.split('-');
|
||||||
|
if (parts.length !== 3) return new Date(dateString); // fallback to original behavior
|
||||||
|
// Create date using local timezone (year, month-1, day)
|
||||||
|
return new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));
|
||||||
|
}
|
||||||
|
|
||||||
// A function to set viewport dimensions for admin page
|
// A function to set viewport dimensions for admin page
|
||||||
function setAdminViewportDimensions() {
|
function setAdminViewportDimensions() {
|
||||||
const doc = document.documentElement;
|
const doc = document.documentElement;
|
||||||
@ -1162,7 +1172,7 @@ function displayAdminShifts(shifts) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
list.innerHTML = shifts.map(shift => {
|
list.innerHTML = shifts.map(shift => {
|
||||||
const shiftDate = new Date(shift.Date);
|
const shiftDate = createLocalDate(shift.Date);
|
||||||
const signupCount = shift.signups ? shift.signups.length : 0;
|
const signupCount = shift.signups ? shift.signups.length : 0;
|
||||||
|
|
||||||
console.log(`Shift "${shift.Title}" (ID: ${shift.ID}) has ${signupCount} volunteers:`, shift.signups?.map(s => s['User Email']) || []);
|
console.log(`Shift "${shift.Title}" (ID: ${shift.ID}) has ${signupCount} volunteers:`, shift.signups?.map(s => s['User Email']) || []);
|
||||||
@ -2031,7 +2041,7 @@ async function showShiftUserModal(shiftId, shiftData) {
|
|||||||
|
|
||||||
// Update modal title and info
|
// Update modal title and info
|
||||||
document.getElementById('modal-shift-title').textContent = shiftData.Title;
|
document.getElementById('modal-shift-title').textContent = shiftData.Title;
|
||||||
const shiftDate = new Date(shiftData.Date);
|
const shiftDate = createLocalDate(shiftData.Date);
|
||||||
document.getElementById('modal-shift-details').textContent =
|
document.getElementById('modal-shift-details').textContent =
|
||||||
`${shiftDate.toLocaleDateString()} | ${shiftData['Start Time']} - ${shiftData['End Time']} | ${shiftData.Location || 'TBD'}`;
|
`${shiftDate.toLocaleDateString()} | ${shiftData['Start Time']} - ${shiftData['End Time']} | ${shiftData.Location || 'TBD'}`;
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,16 @@ let mySignups = [];
|
|||||||
let currentView = 'grid'; // 'grid' or 'calendar'
|
let currentView = 'grid'; // 'grid' or 'calendar'
|
||||||
let currentCalendarDate = new Date(); // For calendar navigation
|
let currentCalendarDate = new Date(); // For calendar navigation
|
||||||
|
|
||||||
|
// Utility function to create a local date from YYYY-MM-DD string
|
||||||
|
// This prevents timezone issues when displaying dates
|
||||||
|
function createLocalDate(dateString) {
|
||||||
|
if (!dateString) return null;
|
||||||
|
const parts = dateString.split('-');
|
||||||
|
if (parts.length !== 3) return new Date(dateString); // fallback to original behavior
|
||||||
|
// Create date using local timezone (year, month-1, day)
|
||||||
|
return new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));
|
||||||
|
}
|
||||||
|
|
||||||
// Function to set viewport dimensions for shifts page
|
// Function to set viewport dimensions for shifts page
|
||||||
function setShiftsViewportDimensions() {
|
function setShiftsViewportDimensions() {
|
||||||
const doc = document.documentElement;
|
const doc = document.documentElement;
|
||||||
@ -108,7 +118,7 @@ function displayShifts(shifts) {
|
|||||||
grid.innerHTML = shifts.map(shift => {
|
grid.innerHTML = shifts.map(shift => {
|
||||||
const isSignedUp = mySignups.some(signup => signup.shift_id === shift.ID);
|
const isSignedUp = mySignups.some(signup => signup.shift_id === shift.ID);
|
||||||
const isFull = shift['Current Volunteers'] >= shift['Max Volunteers'];
|
const isFull = shift['Current Volunteers'] >= shift['Max Volunteers'];
|
||||||
const shiftDate = new Date(shift.Date);
|
const shiftDate = createLocalDate(shift.Date);
|
||||||
|
|
||||||
return `
|
return `
|
||||||
<div class="shift-card ${isSignedUp ? 'signed-up' : ''} ${isFull && !isSignedUp ? 'full' : ''}">
|
<div class="shift-card ${isSignedUp ? 'signed-up' : ''} ${isFull && !isSignedUp ? 'full' : ''}">
|
||||||
@ -157,7 +167,7 @@ function displayMySignups() {
|
|||||||
}).filter(s => s.shift); // Only show signups where we can find the shift details
|
}).filter(s => s.shift); // Only show signups where we can find the shift details
|
||||||
|
|
||||||
list.innerHTML = signupsWithDetails.map(signup => {
|
list.innerHTML = signupsWithDetails.map(signup => {
|
||||||
const shiftDate = new Date(signup.shift.Date);
|
const shiftDate = createLocalDate(signup.shift.Date);
|
||||||
return `
|
return `
|
||||||
<div class="signup-item">
|
<div class="signup-item">
|
||||||
<div>
|
<div>
|
||||||
@ -280,7 +290,7 @@ function handleMySignupsClick(e) {
|
|||||||
|
|
||||||
// New function to generate calendar URLs
|
// New function to generate calendar URLs
|
||||||
function generateCalendarUrls(shift) {
|
function generateCalendarUrls(shift) {
|
||||||
const shiftDate = new Date(shift.Date);
|
const shiftDate = createLocalDate(shift.Date);
|
||||||
|
|
||||||
// Parse start and end times
|
// Parse start and end times
|
||||||
const [startHour, startMinute] = shift['Start Time'].split(':').map(n => parseInt(n));
|
const [startHour, startMinute] = shift['Start Time'].split(':').map(n => parseInt(n));
|
||||||
@ -497,7 +507,7 @@ function displayShifts(shifts) {
|
|||||||
grid.innerHTML = shifts.map(shift => {
|
grid.innerHTML = shifts.map(shift => {
|
||||||
const isSignedUp = mySignups.some(signup => signup.shift_id === shift.ID);
|
const isSignedUp = mySignups.some(signup => signup.shift_id === shift.ID);
|
||||||
const isFull = shift['Current Volunteers'] >= shift['Max Volunteers'];
|
const isFull = shift['Current Volunteers'] >= shift['Max Volunteers'];
|
||||||
const shiftDate = new Date(shift.Date);
|
const shiftDate = createLocalDate(shift.Date);
|
||||||
|
|
||||||
return `
|
return `
|
||||||
<div class="shift-card ${isSignedUp ? 'signed-up' : ''} ${isFull && !isSignedUp ? 'full' : ''}">
|
<div class="shift-card ${isSignedUp ? 'signed-up' : ''} ${isFull && !isSignedUp ? 'full' : ''}">
|
||||||
@ -547,7 +557,7 @@ function displayMySignups() {
|
|||||||
}).filter(s => s.shift); // Only show signups where we can find the shift details
|
}).filter(s => s.shift); // Only show signups where we can find the shift details
|
||||||
|
|
||||||
list.innerHTML = signupsWithDetails.map(signup => {
|
list.innerHTML = signupsWithDetails.map(signup => {
|
||||||
const shiftDate = new Date(signup.shift.Date);
|
const shiftDate = createLocalDate(signup.shift.Date);
|
||||||
return `
|
return `
|
||||||
<div class="signup-item">
|
<div class="signup-item">
|
||||||
<div>
|
<div>
|
||||||
@ -593,7 +603,7 @@ function showShiftPopup(shift, targetElement) {
|
|||||||
|
|
||||||
const isSignedUp = mySignups.some(signup => signup.shift_id === shift.ID);
|
const isSignedUp = mySignups.some(signup => signup.shift_id === shift.ID);
|
||||||
const isFull = shift['Current Volunteers'] >= shift['Max Volunteers'];
|
const isFull = shift['Current Volunteers'] >= shift['Max Volunteers'];
|
||||||
const shiftDate = new Date(shift.Date);
|
const shiftDate = createLocalDate(shift.Date);
|
||||||
|
|
||||||
popup.innerHTML = `
|
popup.innerHTML = `
|
||||||
<h4>${escapeHtml(shift.Title)}</h4>
|
<h4>${escapeHtml(shift.Title)}</h4>
|
||||||
@ -990,10 +1000,12 @@ function createCalendarDay(dayNumber, isOtherMonth, date) {
|
|||||||
const shiftsContainer = document.createElement('div');
|
const shiftsContainer = document.createElement('div');
|
||||||
shiftsContainer.className = 'calendar-shifts';
|
shiftsContainer.className = 'calendar-shifts';
|
||||||
|
|
||||||
const dateString = date.toISOString().split('T')[0];
|
// Create a consistent date string for comparison without timezone conversion
|
||||||
|
const calendarDateString = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
|
||||||
|
|
||||||
|
// Debug logging to verify date matching
|
||||||
const dayShifts = allShifts.filter(shift => {
|
const dayShifts = allShifts.filter(shift => {
|
||||||
const shiftDate = new Date(shift.Date);
|
return shift.Date === calendarDateString;
|
||||||
return shiftDate.toISOString().split('T')[0] === dateString;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
dayShifts.forEach(shift => {
|
dayShifts.forEach(shift => {
|
||||||
@ -1052,7 +1064,7 @@ function showShiftPopup(shift, targetElement) {
|
|||||||
|
|
||||||
const isSignedUp = mySignups.some(signup => signup.shift_id === shift.ID);
|
const isSignedUp = mySignups.some(signup => signup.shift_id === shift.ID);
|
||||||
const isFull = shift['Current Volunteers'] >= shift['Max Volunteers'];
|
const isFull = shift['Current Volunteers'] >= shift['Max Volunteers'];
|
||||||
const shiftDate = new Date(shift.Date);
|
const shiftDate = createLocalDate(shift.Date);
|
||||||
|
|
||||||
popup.innerHTML = `
|
popup.innerHTML = `
|
||||||
<h4>${escapeHtml(shift.Title)}</h4>
|
<h4>${escapeHtml(shift.Title)}</h4>
|
||||||
|
|||||||
1147
map/app/public/js/shifts.js.backup
Normal file
1147
map/app/public/js/shifts.js.backup
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user