Meeting Scheduler

Meeting Scheduler

Configure your availability, then select a date and time to book a new meeting.

Sun
Mon
Tue
Wed
Thu
Fri
Sat

Select a date to see available time slots.

Scheduled Meetings

Working Hours

Meeting Settings

Available Days

${meeting.time}

${meeting.name} (${meeting.email})

`; }); }; // --- Modal & Form Handling --- const openBookingModal = (date, time) => { getElem('booking-date').value = date.toISOString().split('T')[0]; getElem('booking-time').value = time; getElem('modal-title').textContent = `Book Meeting for ${time}`; const modal = getElem('booking-modal'); modal.classList.remove('hidden'); setTimeout(() => modal.classList.remove('opacity-0'), 10); }; const closeBookingModal = () => { const modal = getElem('booking-modal'); modal.classList.add('opacity-0'); setTimeout(() => modal.classList.add('hidden'), 300); }; getElem('booking-form').addEventListener('submit', (e) => { e.preventDefault(); const dateStr = getElem('booking-date').value; const newMeeting = { time: getElem('booking-time').value, name: getElem('booker-name').value, email: getElem('booker-email').value }; if (!meetings[dateStr]) meetings[dateStr] = []; meetings[dateStr].push(newMeeting); closeBookingModal(); renderCalendar(); if (selectedDate) { renderTimeSlots(selectedDate); renderScheduledMeetings(selectedDate); } }); // --- PDF Generation --- const downloadPDF = () => { if(!selectedDate) { alert("Please select a date to download the schedule."); return; } const dateStr = selectedDate.toISOString().split('T')[0]; const dayMeetings = meetings[dateStr] || []; if (dayMeetings.length === 0) { alert("No meetings scheduled for the selected date."); return; } dayMeetings.sort((a,b) => new Date('1970/01/01 ' + a.time.replace(/( AM| PM)/, '')) - new Date('1970/01/01 ' + b.time.replace(/( AM| PM)/, ''))); let html = `

Meeting Schedule

${selectedDate.toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}


`; dayMeetings.forEach(m => { html += `

${m.time}

Name: ${m.name}

Email: ${m.email}

`; }); html += '
'; getElem('pdf-output').innerHTML = html; const { jsPDF } = window.jspdf; html2canvas(getElem('pdf-output'), { scale: 2 }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'p', unit: 'px', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = (canvas.height * pdfWidth) / canvas.width; pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight); pdf.save(`Schedule_${dateStr}.pdf`); }); }; // --- Event Listeners & Initial Load --- tabBtns.forEach((btn, i) => btn.addEventListener('click', () => changeTab(i + 1))); getElem('prev-month-btn').addEventListener('click', () => { currentDate.setMonth(currentDate.getMonth() - 1); renderCalendar(); }); getElem('next-month-btn').addEventListener('click', () => { currentDate.setMonth(currentDate.getMonth() + 1); renderCalendar(); }); getElem('save-config-btn').addEventListener('click', saveConfig); getElem('cancel-btn').addEventListener('click', closeBookingModal); getElem('download-btn').addEventListener('click', downloadPDF); const daysOfWeek = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; getElem('available-days').innerHTML = daysOfWeek.map((day, i) => ` `).join(''); saveConfig(); renderCalendar(); changeTab(1); });
Scroll to Top