diff --git a/portal/templates/app/orgs.html b/portal/templates/app/orgs.html index 4b57f80..888da03 100644 --- a/portal/templates/app/orgs.html +++ b/portal/templates/app/orgs.html @@ -536,24 +536,47 @@ if (window._rescrapeNotFound) window._rescrapeNotFound[idx] = null; } - function confirmRemoveInactive(idx) { + async function confirmRemoveInactive(idx) { const people = window._rescrapeNotFound || []; const p = people[idx]; if (!p) return; const name = p.name || p.email || 'this person'; if (!confirm('Remove ' + name + ' from the organization? This cannot be undone.')) return; - // Remove from editingMembers by matching email or name editingMembers = editingMembers.filter(m => { if (p.email && m.email && m.email.toLowerCase() === p.email.toLowerCase()) return false; if (p.name && m.name && m.name.toLowerCase() === p.name.toLowerCase()) return false; return true; }); - // Remove from notFound list and re-render window._rescrapeNotFound = people.filter((_, i) => i !== idx); renderMemberList(); - // Re-render the not-found section const nfEl = document.querySelector('#rescrapeContent .border-t'); if (window._rescrapeNotFound.length === 0 && nfEl) nfEl.remove(); + // Save immediately + const orgIdSnapshot = editingOrgId; + const membersSnapshot = editingMembers.slice(); + const saveBtn = document.getElementById('saveOrgBtn'); + if (saveBtn) { saveBtn.disabled = true; saveBtn.textContent = 'Saving...'; } + try { + const freshRes = await fetchAPI('/api/orgs/' + orgIdSnapshot); + const freshOrg = await freshRes.json(); + const mRes = await fetchAPI('/api/orgs/' + orgIdSnapshot + '/members', { + method: 'PUT', + body: JSON.stringify({ members: membersSnapshot, version: freshOrg.version || 1 }) + }); + const mData = await mRes.json(); + if (!mRes.ok) throw new Error(mData.error || 'Failed'); + 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; + } + } catch(e) { + const errEl = document.getElementById('editModalError'); + if (errEl) { errEl.textContent = 'Remove failed: ' + e.message; errEl.classList.remove('hidden'); setTimeout(() => errEl.classList.add('hidden'), 4000); } + } finally { + if (saveBtn) { saveBtn.disabled = false; saveBtn.textContent = 'Save Changes'; } + } } function toggleScrapeExpand(i) {