From f8afed6a61081b35addf73471193031c1681c167 Mon Sep 17 00:00:00 2001 From: James Date: Fri, 20 Mar 2026 01:30:30 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20saveOrg=20also=20fetches=20fresh=20versi?= =?UTF-8?q?on=20before=20writing=20=E2=80=94=20same=20stale=20version=20bu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- portal/templates/app/orgs.html | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/portal/templates/app/orgs.html b/portal/templates/app/orgs.html index bd6e732..aea999b 100644 --- a/portal/templates/app/orgs.html +++ b/portal/templates/app/orgs.html @@ -279,18 +279,21 @@ const domains = domainsRaw ? domainsRaw.split(',').map(d => d.trim().replace(/^@/, '')).filter(Boolean) : undefined; btn.disabled = true; btn.textContent = 'Saving...'; errEl.classList.add('hidden'); try { - const version = parseInt(document.getElementById('eVersion').value) || 1; - // Single write: details + members together via members endpoint first, then details - // Actually: save details (which preserves existing members in orgData), then members - // To avoid version race, save members FIRST then details (or combine) - // Simplest: save members first with current version, details second with version+1 + // Always fetch fresh version to avoid stale version conflicts + const freshRes = await fetchAPI('/api/orgs/' + editingOrgId); + const freshOrg = await freshRes.json(); + let version = freshOrg.version || 1; + + // Save members first const mRes = await fetchAPI('/api/orgs/' + editingOrgId + '/members', { method: 'PUT', body: JSON.stringify({ members: editingMembers, version }) }); const mData = await mRes.json(); - if (!mRes.ok) throw new Error(mData.error || 'Failed to save members'); - const newVersion = mData.version || version + 1; + if (!mRes.ok) throw new Error(mData.error || 'Failed to save contacts'); + version = mData.version; + + // Save details with updated version const res = await fetchAPI('/api/orgs/' + editingOrgId, { method: 'PUT', body: JSON.stringify({ @@ -304,7 +307,7 @@ address: document.getElementById('eAddress').value.trim(), state: document.getElementById('eState').value.trim(), logo: document.getElementById('eLogo').value.trim(), - version: newVersion, + version, }) }); const data = await res.json();