function showContactDetails(contactId) {
openContactDetailsModal(contactId);
}
// ── OPEN CONTACT DETAILS MODAL/DRAWER ──
function openContactDetailsModal(contactId, isEditMode = false) {
const c = mockContacts.find(x => x.id === contactId);
if (!c) {
alert("Contact not found.");
return;
}
let backdrop = document.getElementById('contact-details-backdrop');
if (!backdrop) {
backdrop = document.createElement('div');
backdrop.id = 'contact-details-backdrop';
backdrop.className = 'sidepanel-backdrop';
document.body.appendChild(backdrop);
}
let sidepanel = document.getElementById('contact-details-drawer');
if (!sidepanel) {
sidepanel = document.createElement('div');
sidepanel.id = 'contact-details-drawer';
sidepanel.className = 'sidepanel';
document.body.appendChild(sidepanel);
}
if (isEditMode) {
const companyOptions = mockCompanies.map(comp => ``).join('');
sidepanel.innerHTML = `
${escapeHtml(c.first_name[0] || '')}${escapeHtml(c.last_name[0] || '')}
${escapeHtml(c.first_name)} ${escapeHtml(c.last_name)}
${escapeHtml(c.title || 'No Title')}
Professional Identity
Associated Company
${escapeHtml(c.company || 'No Company')}
Role / Title
${escapeHtml(c.title) || 'No Data'}
Contact Role Status
${c.is_primary ? `Primary Contact` : `Standard Contact`}
Contact Details
Phone
${escapeHtml(c.phone) || 'No Data'}
`;
}
const closeBtn = document.getElementById('contact-details-close-btn');
const closeDrawer = () => {
sidepanel.classList.remove('show');
backdrop.classList.remove('show');
};
if (closeBtn) {
closeBtn.addEventListener('click', closeDrawer);
}
backdrop.onclick = closeDrawer;
if (isEditMode) {
const cancelBtn = document.getElementById('contact-edit-cancel-btn');
const form = document.getElementById('contact-edit-form');
if (cancelBtn) {
cancelBtn.addEventListener('click', () => {
openContactDetailsModal(contactId, false);
});
}
if (form) {
form.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(form);
const payload = {};
formData.forEach((val, key) => {
payload[key] = val;
});
payload.company_id = parseInt(payload.company_id, 10);
payload.is_primary = document.getElementById('contact-edit-is-primary').checked ? 1 : 0;
try {
const response = await fetch(`/api/contacts/${contactId}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
const result = await response.json();
if (response.ok && result.success) {
closeDrawer();
await loadDataFromDb();
handleNavigation();
} else {
alert("Error: " + (result.error || "Could not save contact."));
}
} catch (err) {
console.error("Error updating contact:", err);
alert("Error sending update request to backend.");
}
});
}
} else {
const editBtn = document.getElementById('contact-details-edit-btn');
const okBtn = document.getElementById('contact-details-ok-btn');
if (editBtn) {
editBtn.addEventListener('click', () => {
openContactDetailsModal(contactId, true);
});
}
if (okBtn) {
okBtn.addEventListener('click', closeDrawer);
}
}
setTimeout(() => {
sidepanel.classList.add('show');
backdrop.classList.add('show');
}, 10);
}
// ── OPEN AGENT SPACE DRAWER/SIDEPANEL ──