fix: snapshot orgId+members before async save — closing modal mid-flight no longer breaks it
This commit is contained in:
parent
579047a54d
commit
3a1520cc91
|
|
@ -386,29 +386,35 @@
|
||||||
window._memberExpanded = {};
|
window._memberExpanded = {};
|
||||||
renderMemberList();
|
renderMemberList();
|
||||||
document.getElementById('newMemberName').focus();
|
document.getElementById('newMemberName').focus();
|
||||||
// Save immediately
|
// Save immediately — capture orgId + members snapshot so closing modal mid-flight doesn't break it
|
||||||
const btn = document.getElementById('saveOrgBtn');
|
const orgIdSnapshot = editingOrgId;
|
||||||
|
const membersSnapshot = editingMembers.slice();
|
||||||
const addBtn = document.querySelector('[onclick="addGlobalMember()"]');
|
const addBtn = document.querySelector('[onclick="addGlobalMember()"]');
|
||||||
if (addBtn) { addBtn.disabled = true; addBtn.textContent = 'Saving...'; }
|
if (addBtn) { addBtn.disabled = true; addBtn.textContent = 'Saving...'; }
|
||||||
try {
|
try {
|
||||||
const freshRes = await fetchAPI('/api/orgs/' + editingOrgId);
|
const freshRes = await fetchAPI('/api/orgs/' + orgIdSnapshot);
|
||||||
const freshOrg = await freshRes.json();
|
const freshOrg = await freshRes.json();
|
||||||
const version = freshOrg.version || 1;
|
const version = freshOrg.version || 1;
|
||||||
const mRes = await fetchAPI('/api/orgs/' + editingOrgId + '/members', {
|
const mRes = await fetchAPI('/api/orgs/' + orgIdSnapshot + '/members', {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
body: JSON.stringify({ members: editingMembers, version })
|
body: JSON.stringify({ members: membersSnapshot, version })
|
||||||
});
|
});
|
||||||
const mData = await mRes.json();
|
const mData = await mRes.json();
|
||||||
if (!mRes.ok) throw new Error(mData.error || 'Failed');
|
if (!mRes.ok) throw new Error(mData.error || 'Failed');
|
||||||
document.getElementById('eVersion').value = mData.version;
|
// Update version in modal if still open
|
||||||
if (window._orgsMap && window._orgsMap[editingOrgId]) {
|
const vEl = document.getElementById('eVersion');
|
||||||
window._orgsMap[editingOrgId].version = mData.version;
|
if (vEl) vEl.value = mData.version;
|
||||||
window._orgsMap[editingOrgId].members = editingMembers;
|
if (window._orgsMap && window._orgsMap[orgIdSnapshot]) {
|
||||||
|
window._orgsMap[orgIdSnapshot].version = mData.version;
|
||||||
|
window._orgsMap[orgIdSnapshot].members = membersSnapshot;
|
||||||
}
|
}
|
||||||
|
loadOrgs();
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
errEl.textContent = 'Save failed: ' + e.message;
|
if (errEl) {
|
||||||
errEl.classList.remove('hidden');
|
errEl.textContent = 'Save failed: ' + e.message;
|
||||||
setTimeout(() => errEl.classList.add('hidden'), 4000);
|
errEl.classList.remove('hidden');
|
||||||
|
setTimeout(() => errEl.classList.add('hidden'), 4000);
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (addBtn) { addBtn.disabled = false; addBtn.textContent = '+ Add contact'; }
|
if (addBtn) { addBtn.disabled = false; addBtn.textContent = '+ Add contact'; }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue