fix: confirm and version favorite institution updates

This commit is contained in:
2026-09-06 14:09:31 +03:00
parent 525b673e25
commit 463fd06d30
6 changed files with 39 additions and 10 deletions
+3 -1
View File
@@ -3,7 +3,7 @@ import { useApp } from '../context/AppContext';
import { Star, MapPin, Clock, Tag, Package, Building2, AlertTriangle, Sparkles, CalendarDays, Megaphone } from 'lucide-react';
export const TenderCard = ({ tender }) => {
const { toggleTrackTender, setActiveTenderDetail, favoriteKurumlar, toggleFavoriteKurum, kalemEslesen, searchQuery } = useApp();
const { toggleTrackTender, setActiveTenderDetail, favoriteKurumlar, favoriteSaving, toggleFavoriteKurum, kalemEslesen, searchQuery } = useApp();
// Aramada eşleşen kalemler öne alınır — firma kendi ürününü hemen görsün.
const eslesenKalemler = (kalemEslesen && tender.ikn && kalemEslesen.get(tender.ikn)) || null;
const isFavKurum = favoriteKurumlar?.includes((tender.kurum || '').trim());
@@ -80,6 +80,8 @@ export const TenderCard = ({ tender }) => {
<span className="truncate">{tender.kurum}</span>
<button
onClick={(e) => { e.stopPropagation(); toggleFavoriteKurum(tender.kurum); }}
disabled={favoriteSaving || !tender.kurum?.trim()}
aria-busy={favoriteSaving} aria-pressed={Boolean(isFavKurum)}
title={isFavKurum ? 'Favori kurumdan çıkar' : 'Kurumu favorilere ekle'}
className="shrink-0 p-0.5"
>
+15 -8
View File
@@ -357,13 +357,20 @@ export const AppProvider = ({ children }) => {
// --- Favori kurumlar (sunucu kaydı) ---
const [favoriteKurumlar, setFavoriteKurumlar] = useState([]);
useEffect(() => {
if (veriSenkron) ilkYazmaDegil('favori_kurumlar', favoriteKurumlar);
}, [favoriteKurumlar, veriSenkron]);
const toggleFavoriteKurum = (kurum) => {
const ad = (kurum || '').trim();
if (!ad) return;
setFavoriteKurumlar((prev) => (prev.includes(ad) ? prev.filter((k) => k !== ad) : [...prev, ad]));
const favoriteSaveLock=useRef(false);
const [favoriteSaving,setFavoriteSaving]=useState(false);
const toggleFavoriteKurum = async kurum => {
const ad=typeof kurum==='string' ? kurum.trim() : '';
if(!ad || favoriteSaveLock.current)return false;
if(!authUser||!veriSenkron){setSaveError('Hesap verileri yüklenmeden favoriler kaydedilemez.');return false;}
const session=getToken();favoriteSaveLock.current=true;setFavoriteSaving(true);setSavingCount(n=>n+1);setSaveError(null);
const next=favoriteKurumlar.includes(ad)?favoriteKurumlar.filter(k=>k!==ad):[...favoriteKurumlar,ad];
try {
const saved=await setUserData('favori_kurumlar',next,dataRevisions.current.favori_kurumlar ?? null);
if(getToken()!==session)return false;
dataRevisions.current.favori_kurumlar=saved.revision;setFavoriteKurumlar(next);return true;
} catch(error){if(getToken()===session)setSaveError(error.message);return false;}
finally{favoriteSaveLock.current=false;setFavoriteSaving(false);setSavingCount(n=>n-1);}
};
// --- Ekip yönetimi (sunucu kaydı) ---
@@ -824,7 +831,7 @@ export const AppProvider = ({ children }) => {
markNotificationsRead,
refreshNotifications,notificationError,notificationBusy,
isQuietNow,
favoriteKurumlar,
favoriteKurumlar,favoriteSaving,
toggleFavoriteKurum,
teamMembers,teamSaving,teamError,
addTeamMember,