diff --git a/portal/templates/app/orgs.html b/portal/templates/app/orgs.html index eba56bd..4b57f80 100644 --- a/portal/templates/app/orgs.html +++ b/portal/templates/app/orgs.html @@ -386,29 +386,35 @@ window._memberExpanded = {}; renderMemberList(); document.getElementById('newMemberName').focus(); - // Save immediately - const btn = document.getElementById('saveOrgBtn'); + // Save immediately — capture orgId + members snapshot so closing modal mid-flight doesn't break it + const orgIdSnapshot = editingOrgId; + const membersSnapshot = editingMembers.slice(); const addBtn = document.querySelector('[onclick="addGlobalMember()"]'); if (addBtn) { addBtn.disabled = true; addBtn.textContent = 'Saving...'; } try { - const freshRes = await fetchAPI('/api/orgs/' + editingOrgId); + const freshRes = await fetchAPI('/api/orgs/' + orgIdSnapshot); const freshOrg = await freshRes.json(); const version = freshOrg.version || 1; - const mRes = await fetchAPI('/api/orgs/' + editingOrgId + '/members', { + const mRes = await fetchAPI('/api/orgs/' + orgIdSnapshot + '/members', { method: 'PUT', - body: JSON.stringify({ members: editingMembers, version }) + body: JSON.stringify({ members: membersSnapshot, version }) }); const mData = await mRes.json(); if (!mRes.ok) throw new Error(mData.error || 'Failed'); - document.getElementById('eVersion').value = mData.version; - if (window._orgsMap && window._orgsMap[editingOrgId]) { - window._orgsMap[editingOrgId].version = mData.version; - window._orgsMap[editingOrgId].members = editingMembers; + // Update version in modal if still open + const vEl = document.getElementById('eVersion'); + if (vEl) vEl.value = mData.version; + if (window._orgsMap && window._orgsMap[orgIdSnapshot]) { + window._orgsMap[orgIdSnapshot].version = mData.version; + window._orgsMap[orgIdSnapshot].members = membersSnapshot; } + loadOrgs(); } catch(e) { - errEl.textContent = 'Save failed: ' + e.message; - errEl.classList.remove('hidden'); - setTimeout(() => errEl.classList.add('hidden'), 4000); + if (errEl) { + errEl.textContent = 'Save failed: ' + e.message; + errEl.classList.remove('hidden'); + setTimeout(() => errEl.classList.add('hidden'), 4000); + } } finally { if (addBtn) { addBtn.disabled = false; addBtn.textContent = '+ Add contact'; } }