feat: add contact saves immediately without needing Save Changes

This commit is contained in:
James 2026-03-20 01:35:36 -04:00
parent f8afed6a61
commit 579047a54d
1 changed files with 29 additions and 2 deletions

View File

@ -365,7 +365,7 @@
if (editingMembers[i]) editingMembers[i][field] = value; if (editingMembers[i]) editingMembers[i][field] = value;
} }
function addGlobalMember() { async function addGlobalMember() {
const name = document.getElementById('newMemberName').value.trim(); const name = document.getElementById('newMemberName').value.trim();
const email = document.getElementById('newMemberEmail').value.trim(); const email = document.getElementById('newMemberEmail').value.trim();
const title = document.getElementById('newMemberTitle').value.trim(); const title = document.getElementById('newMemberTitle').value.trim();
@ -380,11 +380,38 @@
return; return;
} }
errEl.classList.add('hidden'); errEl.classList.add('hidden');
editingMembers.push({ name, email, title, phone_business, phone_personal, photo: '', bio: '', linkedin: '' }); const newMember = { name, email, title, phone_business, phone_personal, photo: '', bio: '', linkedin: '' };
editingMembers.push(newMember);
['newMemberName','newMemberEmail','newMemberTitle','newMemberPhoneBiz','newMemberPhonePersonal'].forEach(id => document.getElementById(id).value = ''); ['newMemberName','newMemberEmail','newMemberTitle','newMemberPhoneBiz','newMemberPhonePersonal'].forEach(id => document.getElementById(id).value = '');
window._memberExpanded = {}; window._memberExpanded = {};
renderMemberList(); renderMemberList();
document.getElementById('newMemberName').focus(); document.getElementById('newMemberName').focus();
// Save immediately
const btn = document.getElementById('saveOrgBtn');
const addBtn = document.querySelector('[onclick="addGlobalMember()"]');
if (addBtn) { addBtn.disabled = true; addBtn.textContent = 'Saving...'; }
try {
const freshRes = await fetchAPI('/api/orgs/' + editingOrgId);
const freshOrg = await freshRes.json();
const version = freshOrg.version || 1;
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');
document.getElementById('eVersion').value = mData.version;
if (window._orgsMap && window._orgsMap[editingOrgId]) {
window._orgsMap[editingOrgId].version = mData.version;
window._orgsMap[editingOrgId].members = editingMembers;
}
} catch(e) {
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'; }
}
} }
function removeGlobalMember(idx) { function removeGlobalMember(idx) {