`).join('');
};
const renderMeetingDetails = () => {
const headerEl = document.getElementById('meeting-details-header').querySelector('h2');
const dateEl = document.getElementById('meeting-details-date');
const contentArea = document.getElementById('meeting-content-area');
const downloadBtn = document.getElementById('download-pdf-btn');
if (!data.activeMeetingId) {
headerEl.textContent = 'Select a meeting to view details';
dateEl.textContent = '';
contentArea.classList.add('hidden');
downloadBtn.classList.add('hidden');
return;
}
const meeting = data.meetings.find(m => m.id === data.activeMeetingId);
headerEl.textContent = meeting.title;
dateEl.textContent = `Date: ${meeting.date}`;
contentArea.classList.remove('hidden');
downloadBtn.classList.remove('hidden');
renderFileList(meeting.id);
renderSharingList(meeting.id);
};
const renderFileList = (meetingId) => {
const fileContainer = document.getElementById('file-list');
const files = data.files[meetingId] || [];
if (files.length === 0) {
fileContainer.innerHTML = '${u.id} ${u.name} N/A
`).join('');
const meetingsTable = document.getElementById('config-meetings-table');
meetingsTable.innerHTML = data.meetings.map(m => `
${m.id} ${m.title} ${m.date} N/A
`).join('');
};
// --- CORE LOGIC (global for inline onclick) ---
window.selectMeeting = (meetingId) => {
data.activeMeetingId = meetingId;
fullRender();
};
window.togglePermission = (meetingId, userId) => {
const permissions = data.permissions[meetingId];
if (!permissions) return;
const userIndex = permissions.indexOf(userId);
if (userIndex > -1) {
permissions.splice(userIndex, 1);
} else {
permissions.push(userId);
}
// No need to call fullRender, just re-render the sharing list for performance
renderSharingList(meetingId);
};
// --- PDF DOWNLOAD ---
const downloadPDF = () => {
if (!data.activeMeetingId) return;
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
const meeting = data.meetings.find(m => m.id === data.activeMeetingId);
const files = data.files[data.activeMeetingId] || [];
const permittedUserIds = data.permissions[data.activeMeetingId] || [];
const usersWithAccess = data.users.filter(u => permittedUserIds.includes(u.id));
doc.setFontSize(20);
doc.text(`Meeting Report: ${meeting.title}`, 14, 22);
doc.setFontSize(12);
doc.setTextColor(100);
doc.text(`Date: ${meeting.date}`, 14, 30);
doc.autoTable({
startY: 40,
head: [['Files & Documents']],
body: files.map(f => [f.name]),
theme: 'striped',
headStyles: { fillColor: [8, 145, 178] }
});
doc.autoTable({
startY: doc.autoTable.previous.finalY + 10,
head: [['Users with Access']],
body: usersWithAccess.map(u => [u.name]),
theme: 'striped',
headStyles: { fillColor: [8, 145, 178] }
});
doc.save(`Meeting_Report_${meeting.title}.pdf`);
};
document.getElementById('download-pdf-btn').addEventListener('click', downloadPDF);
// --- TAB NAVIGATION ---
const tabs = document.querySelectorAll('[role="tab"]');
const prevBtn = document.getElementById('prev-tab-btn');
const nextBtn = document.getElementById('next-tab-btn');
let currentTabIndex = 0;
const switchTab = (newIndex) => {
tabs.forEach((tab, index) => {
const panel = document.getElementById(tab.getAttribute('aria-controls'));
if (index === newIndex) {
tab.classList.remove('tab-inactive');
tab.classList.add('tab-active');
if (panel) panel.classList.remove('hidden');
} else {
tab.classList.remove('tab-active');
tab.classList.add('tab-inactive');
if (panel) panel.classList.add('hidden');
}
});
currentTabIndex = newIndex;
updateNavButtons();
};
const updateNavButtons = () => {
prevBtn.disabled = currentTabIndex === 0;
nextBtn.disabled = currentTabIndex === tabs.length - 1;
prevBtn.classList.toggle('opacity-50', prevBtn.disabled);
nextBtn.classList.toggle('opacity-50', nextBtn.disabled);
};
tabs.forEach((tab, index) => tab.addEventListener('click', () => switchTab(index)));
prevBtn.addEventListener('click', () => { if (currentTabIndex > 0) switchTab(currentTabIndex - 1); });
nextBtn.addEventListener('click', () => { if (currentTabIndex < tabs.length - 1) switchTab(currentTabIndex + 1); });
// --- INITIALIZATION ---
const fullRender = () => {
renderMeetingList();
renderMeetingDetails();
renderConfig();
};
fullRender();
updateNavButtons();
});
No files uploaded for this meeting.
'; return; } fileContainer.innerHTML = files.map(file => `
${file.name}
`).join('');
};
const renderSharingList = (meetingId) => {
const sharingContainer = document.getElementById('sharing-list');
const permittedUserIds = data.permissions[meetingId] || [];
sharingContainer.innerHTML = data.users.map(user => {
const hasAccess = permittedUserIds.includes(user.id);
return `
${user.name}
`;
}).join('');
};
const renderConfig = () => {
const usersTable = document.getElementById('config-users-table');
usersTable.innerHTML = data.users.map(u => `
