Meeting Conflict Resolver
Schedule a New Meeting
Conflict Check
Fill out the form to check for conflicts.
Manage Teams
Manage Team Members
Manage Member Availability
Members Unavailable: ${conflicts.availability.join(', ')}
`; } conflictInfo.innerHTML = html; } } function handleScheduleSubmit(e) { e.preventDefault(); const newMeeting = { id: Date.now(), title: meetingTitle.value, teamId: parseInt(meetingTeam.value), start: new Date(`${meetingDate.value}T${meetingStartTime.value}`), end: new Date(`${meetingDate.value}T${meetingEndTime.value}`) }; state.meetings.push(newMeeting); saveState(); alert('Meeting scheduled successfully!'); state.activeTab = 'dashboard'; state.weekStartDate = getStartOfWeek(newMeeting.start); render(); } // ... other handlers for add/delete teams/members, tabs, filters ... // SECTION: Event Listeners Object.values(tabButtons).forEach(btn => btn.addEventListener('click', e => { state.activeTab = e.target.id.split('-')[1]; render(); })); teamFilter.addEventListener('change', e => { state.selectedTeamId = parseInt(e.target.value); renderDashboard(); }); weekStartFilter.addEventListener('change', e => { state.weekStartDate = getStartOfWeek(e.target.value); renderDashboard(); }); scheduleMeetingForm.addEventListener('submit', handleScheduleSubmit); ['team', 'date', 'start-time', 'end-time'].forEach(id => document.getElementById(`meeting-${id}`).addEventListener('change', checkConflicts)); // ... other event listeners ... // SECTION: Initial Load loadState(); render(); });