normalize account scoped firm storage
This commit is contained in:
@@ -2158,3 +2158,9 @@ Doğrulama: 293 otomatik test ve üretim derlemesi başarılı. Gerçek iki hesa
|
|||||||
AI fallback zinciri daha önce ortak `localStorage` anahtarında tutuluyordu. Ayar artık normalize edilmiş hesap e-postasına bağlı anahtarda saklanıyor; oturum değişiminde yeni hesabın zinciri yeniden yükleniyor ve önceki hesabın değeri yazılmıyor. Depolama erişimi olmayan ortamlarda varsayılan zincir kullanılıyor.
|
AI fallback zinciri daha önce ortak `localStorage` anahtarında tutuluyordu. Ayar artık normalize edilmiş hesap e-postasına bağlı anahtarda saklanıyor; oturum değişiminde yeni hesabın zinciri yeniden yükleniyor ve önceki hesabın değeri yazılmıyor. Depolama erişimi olmayan ortamlarda varsayılan zincir kullanılıyor.
|
||||||
|
|
||||||
Doğrulama: 293 otomatik test ve üretim derlemesi başarılı. Gerçek iki hesaplı AI ayarı tarayıcı kabulü ve canlı sağlayıcı testi ayrıca yapılmalı.
|
Doğrulama: 293 otomatik test ve üretim derlemesi başarılı. Gerçek iki hesaplı AI ayarı tarayıcı kabulü ve canlı sağlayıcı testi ayrıca yapılmalı.
|
||||||
|
|
||||||
|
### 2026-09-06 · Firma bilgilerinin yerel hesap anahtarı
|
||||||
|
|
||||||
|
Teklif dosyası hazırlama ekranındaki firma bilgileri artık ham e-posta yerine normalize edilip URL kodlanmış hesap anahtarında tutuluyor. Büyük/küçük harf farkı aynı hesabı farklı yerel kayda bölmüyor; özel karakterler anahtar yapısını bozamıyor. Eski ortak/normalize edilmemiş anahtarlardan otomatik veri alınmıyor.
|
||||||
|
|
||||||
|
Doğrulama: 293 otomatik test ve üretim derlemesi başarılı. Gerçek iki hesaplı tarayıcı kabulü ve canlı deployment ayrıca yapılmalı.
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import {
|
|||||||
|
|
||||||
|
|
||||||
const FIRMA_ANAHTAR = 'ihaleist_firma_bilgi';
|
const FIRMA_ANAHTAR = 'ihaleist_firma_bilgi';
|
||||||
|
const firmaAnahtari = email => `${FIRMA_ANAHTAR}:${encodeURIComponent(String(email || '').trim().toLowerCase())}`;
|
||||||
|
|
||||||
const bosFirma = () => Object.fromEntries(ALANLAR.map((a) => [a.k, '']));
|
const bosFirma = () => Object.fromEntries(ALANLAR.map((a) => [a.k, '']));
|
||||||
|
|
||||||
@@ -70,7 +71,7 @@ export const BidPackageBuilder = ({ results, tender: selectedTender, initialFocu
|
|||||||
|
|
||||||
const [firma, setFirma] = useState(() => {
|
const [firma, setFirma] = useState(() => {
|
||||||
let kayitli = {};
|
let kayitli = {};
|
||||||
try { kayitli = JSON.parse(localStorage.getItem(FIRMA_ANAHTAR + ':' + authUser?.email) || '{}'); } catch { /* yoksay */ }
|
try { kayitli = JSON.parse(localStorage.getItem(firmaAnahtari(authUser?.email)) || '{}'); } catch { /* yoksay */ }
|
||||||
return {
|
return {
|
||||||
...bosFirma(),
|
...bosFirma(),
|
||||||
firmaUnvan: userProfile?.company || '',
|
firmaUnvan: userProfile?.company || '',
|
||||||
@@ -81,7 +82,7 @@ export const BidPackageBuilder = ({ results, tender: selectedTender, initialFocu
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!authUser?.email || dirty) return;
|
if (!authUser?.email || dirty) return;
|
||||||
let kayitli = {};
|
let kayitli = {};
|
||||||
try { kayitli = JSON.parse(localStorage.getItem(FIRMA_ANAHTAR + ':' + authUser.email) || '{}'); } catch { /* bozuk yerel kayıt yoksayılır */ }
|
try { kayitli = JSON.parse(localStorage.getItem(firmaAnahtari(authUser.email)) || '{}'); } catch { /* bozuk yerel kayıt yoksayılır */ }
|
||||||
setFirma((onceki) => ({
|
setFirma((onceki) => ({
|
||||||
...bosFirma(),
|
...bosFirma(),
|
||||||
firmaUnvan: userProfile?.company || '',
|
firmaUnvan: userProfile?.company || '',
|
||||||
@@ -118,7 +119,7 @@ export const BidPackageBuilder = ({ results, tender: selectedTender, initialFocu
|
|||||||
const alanYaz = (k, v) => {
|
const alanYaz = (k, v) => {
|
||||||
const yeni = { ...firma, [k]: v };
|
const yeni = { ...firma, [k]: v };
|
||||||
setFirma(yeni);
|
setFirma(yeni);
|
||||||
try { localStorage.setItem(FIRMA_ANAHTAR + ':' + authUser?.email, JSON.stringify(yeni)); } catch { /* kota */ }
|
try { localStorage.setItem(firmaAnahtari(authUser?.email), JSON.stringify(yeni)); } catch { /* kota */ }
|
||||||
};
|
};
|
||||||
|
|
||||||
const satirlar = useMemo(
|
const satirlar = useMemo(
|
||||||
|
|||||||
Reference in New Issue
Block a user