fix: validate firm email consistently before bid output
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { bidFirmFields as ALANLAR } from '../services/bidFirmFields';
|
||||
import { bidFirmFields as ALANLAR, bidFirmIssues } from '../services/bidFirmFields';
|
||||
import { preparationAnalysisSource, preparationConditionSections, conditionText } from '../services/preparationAnalysis';
|
||||
import { preparationDeadlineProblem } from '../services/preparationDeadline';
|
||||
import { bidValidityForForm, bidTypeForForm } from '../services/bidTerms';
|
||||
@@ -130,7 +130,7 @@ export const BidPackageBuilder = ({ results, tender: selectedTender, initialFocu
|
||||
|
||||
const toplam = teklifTuru === 'goturu' ? bidAmount(goturuBedel) : kalemToplami;
|
||||
|
||||
const eksikler = ALANLAR.filter((a) => a.zorunlu && !String(firma[a.k] || '').trim());
|
||||
const eksikler = bidFirmIssues(firma);
|
||||
const kalemEksik = teklifTuru === 'birim' && validateBidRows(satirlar).length > 0;
|
||||
const turCeliskisi = !['birim','goturu'].includes(teklifTuru) || kaynakTeklifTuru.status === 'conflict' || (kaynakTeklifTuru.type && teklifTuru !== kaynakTeklifTuru.type);
|
||||
const sureEksik = !Number.isInteger(Number(gecerlilikGun)) || !(Number(gecerlilikGun) > 0) || kaynakGecerlilik.status === 'conflict' || (kaynakGecerlilik.days && Number(gecerlilikGun) < kaynakGecerlilik.days);
|
||||
@@ -146,7 +146,7 @@ export const BidPackageBuilder = ({ results, tender: selectedTender, initialFocu
|
||||
...(kaynakKontrolGerekli ? [{target:'source',text:'Resmi dokümanla kaynak karşılaştırmasını tamamlayın.'}] : []),
|
||||
...(analizEksik ? [{target:'analysis',text:'Kısmi analizi tam ve doğrulanabilir kaynakla tamamlayın.'}] : []),
|
||||
...(sourceOptions.needsSelection ? [{target:'itemSource',text:'Resmi cetvele uygun kalem kaynağını seçin.'}] : []),
|
||||
...eksikler.map(a=>({target:`firm:${a.k}`,text:`${a.l} bilgisini doldurun.`})),
|
||||
...eksikler.map(a=>({target:`firm:${a.k}`,text:a.message})),
|
||||
...(turCeliskisi ? [{target:'bidType',text:'Teklif türünü kaynak dokümana göre doğrulayın.'}] : []),
|
||||
...(sureEksik ? [{target:'validity',text:'Teklif geçerlilik süresini doğrulayın.'}] : []),
|
||||
...lotSelection.errors.map(text=>({target:'lots',text})),
|
||||
@@ -331,7 +331,8 @@ export const BidPackageBuilder = ({ results, tender: selectedTender, initialFocu
|
||||
<h5 className="font-extrabold text-xs text-slate-900">İstekli (firma) bilgileri</h5>
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-2.5">
|
||||
{ALANLAR.map((a) => {
|
||||
const eksik = a.zorunlu && !String(firma[a.k] || '').trim();
|
||||
const issue = eksikler.find(field=>field.k===a.k);
|
||||
const eksik = Boolean(issue);
|
||||
return (
|
||||
<label key={a.k} className={a.genis ? 'sm:col-span-2' : ''}>
|
||||
<span className="text-[11px] font-semibold text-slate-600 block mb-1">
|
||||
@@ -340,6 +341,9 @@ export const BidPackageBuilder = ({ results, tender: selectedTender, initialFocu
|
||||
<input
|
||||
ref={targetRef(`firm:${a.k}`)}
|
||||
aria-invalid={eksik || undefined}
|
||||
type={a.k==='eposta' ? 'email' : a.k==='telefon' ? 'tel' : 'text'}
|
||||
aria-invalid={eksik}
|
||||
aria-describedby={eksik ? `${fieldPrefix}-firm-error-${a.k}` : undefined}
|
||||
value={firma[a.k] || ''}
|
||||
onChange={(e) => alanYaz(a.k, e.target.value)}
|
||||
placeholder={a.ph || ''}
|
||||
@@ -347,6 +351,7 @@ export const BidPackageBuilder = ({ results, tender: selectedTender, initialFocu
|
||||
eksik ? 'border-amber-400 bg-amber-50/40' : 'border-slate-300'
|
||||
}`}
|
||||
/>
|
||||
{issue&&<p id={`${fieldPrefix}-firm-error-${a.k}`} className="text-xs text-amber-800 mt-1">{issue.message}</p>}
|
||||
</label>
|
||||
);
|
||||
})}
|
||||
|
||||
Reference in New Issue
Block a user