${escapeHtml(admin.name || '')}
${escapeHtml(admin.email || '')}
${escapeHtml(admin.role || '')}
${sectorNamesForAdmin(admin).map(n=>`${escapeHtml(n)}`).join(' ')}
${admin.role === 'superadmin' ? '' : ''}
`).join('');
// Attach event listeners after rendering to avoid inline onclick issues
// Use event delegation to handle Edit/Delete clicks reliably
// Clear any previous handler then attach a single click handler
ul.onclick = function (e) {
const editBtn = e.target.closest('.btn-edit');
const delBtn = e.target.closest('.btn-delete');
if (editBtn) {
let id = editBtn.closest('[data-admin-id]').getAttribute('data-admin-id') || '';
id = String(id).trim().replace(/^:/, '');
console.debug('Edit clicked for admin id=', id);
openEdit(id);
return;
}
if (delBtn) {
let id = delBtn.closest('[data-admin-id]').getAttribute('data-admin-id') || '';
id = String(id).trim().replace(/^:/, '');
console.debug('Delete clicked for admin id=', id);
removeAdmin(id);
return;
}
};
}
function escapeHtml(value) { return String(value||'').replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"').replace(/'/g,'''); }
function openCreateModal() {
document.getElementById('adminModalTitle').textContent = 'Create Admin';
document.getElementById('adminSubmit').textContent = 'Create admin';
document.getElementById('adminForm').reset();
document.getElementById('adminEditId').value = '';
renderSectorsMulti('sectorsContainer', []);
const roleSelect = document.getElementById('adminRole');
if (!roleSelect.querySelector('option[value="superadmin"]')) {
roleSelect.innerHTML = '