fix: persist team changes only after versioned server confirmation
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user