fix: persist team changes only after versioned server confirmation

This commit is contained in:
2026-09-06 14:01:28 +03:00
parent 79654d66f7
commit 3d9aa79624
8 changed files with 80 additions and 20 deletions
+20 -7
View File
@@ -1,3 +1,4 @@
import {validateTeam} from '../services/teamData';
import {savedFilterCriteria} from '../services/savedFilterCriteria';
import {mergeServerNotifications,acknowledgeNotifications} from '../services/notifications';
import { searchTender } from '../services/searchTender';
@@ -165,7 +166,7 @@ export const AppProvider = ({ children }) => {
useEffect(() => {
notificationVersion.current++;notificationMutation.current=null;seenServerNotifications.current.clear();setNotificationError(null);setNotificationBusy(false);
aiRunRef.current=null;setAiAnalyzing(false);setAiJobStatus('');
dataRevisions.current={};
dataRevisions.current={};setTeamError(null);
setVeriSenkron(false); setPlan(null); setSaveError(null);
setFavoriteKurumlar([]); setTeamMembers([]); setSavedFilters([]); setCompetitorWatchlist([]);
setReminderSettings(defaultReminder()); setUserProfile(defaultProfile(authUser));
@@ -367,11 +368,23 @@ export const AppProvider = ({ children }) => {
// --- Ekip yönetimi (sunucu kaydı) ---
const [teamMembers, setTeamMembers] = useState([]);
useEffect(() => {
if (veriSenkron) ilkYazmaDegil('ekip', teamMembers);
}, [teamMembers, veriSenkron]);
const addTeamMember = (m) => setTeamMembers((prev) => [...prev, { id: 'tm-' + Date.now(), ...m }]);
const removeTeamMember = (id) => setTeamMembers((prev) => prev.filter((m) => m.id !== id));
const teamSaveLock=useRef(false);
const [teamSaving,setTeamSaving]=useState(false);
const [teamError,setTeamError]=useState(null);
const persistTeam=async next=>{
if(!authUser||!veriSenkron){setTeamError('Hesap verileri yüklenmeden ekip kaydedilemez.');return false;}
if(teamSaveLock.current)return false;
const session=getToken();teamSaveLock.current=true;setTeamSaving(true);setTeamError(null);
try {
validateTeam(next);
const saved=await setUserData('ekip',next,dataRevisions.current.ekip ?? null);
if(getToken()!==session)return false;
dataRevisions.current.ekip=saved.revision;setTeamMembers(next);return true;
} catch(error){if(getToken()===session)setTeamError(error.message);return false;}
finally{teamSaveLock.current=false;setTeamSaving(false);}
};
const addTeamMember = member => persistTeam([...teamMembers,{...member,id:'tm-'+crypto.randomUUID()}]);
const removeTeamMember = id => persistTeam(teamMembers.filter(member=>member.id!==id));
// Belge kasası — kullanıcı kendi belgelerini ekler (hesaba özel sunucu kaydı)
const [vaultDocuments, setVaultDocuments] = useState([]);
@@ -813,7 +826,7 @@ export const AppProvider = ({ children }) => {
isQuietNow,
favoriteKurumlar,
toggleFavoriteKurum,
teamMembers,
teamMembers,teamSaving,teamError,
addTeamMember,
removeTeamMember,
toggleTrackTender,