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'; }
}