import {HealthPortfolioEditor} from './HealthPortfolioEditor'; import React,{useState,useEffect,useRef,useId} from 'react'; import {useModalFocus} from '../hooks/useModalFocus'; import {useApp} from '../context/AppContext'; import {getToken} from '../services/auth'; import {X,Loader2} from 'lucide-react'; const fields=[['extractedSectors','Sektörler'],['extractedProducts','Ürün ve hizmetler'],['extractedCertifications','Sertifika ve kayıt beyanları'],['ihaleKonulari','İhale konuları']]; export function CompanyScannerModal(){ const {isCompanyScannerOpen,authUser}=useApp(); return isCompanyScannerOpen?:null; } function ProfileEditor(){ const {setIsCompanyScannerOpen,userProfile,scanCompanyWebsite,updateCompanyCapabilities,uyumEsigi}=useApp(); const [url,setUrl]=useState(userProfile.website || ''),[caps,setCaps]=useState(userProfile.scrapedCapabilities || {}); const [threshold,setThreshold]=useState(uyumEsigi),[busy,setBusy]=useState(''),[error,setError]=useState(null),[message,setMessage]=useState(''); const [entries,setEntries]=useState({}); const alive=useRef(true),controller=useRef(null),locked=useRef(false),titleId=useId(); const modalFocus=useModalFocus(true,()=>setIsCompanyScannerOpen(false)); useEffect(()=>{ alive.current=true; return()=>{alive.current=false;controller.current?.abort();}; },[]); const run=async(kind,operation)=>{ if(locked.current)return;locked.current=true;setBusy(kind);setError(null);setMessage(''); try{await operation();}catch(e){if(alive.current)setError(e.message);}finally{locked.current=false;if(alive.current)setBusy('');} }; const scan=e=>{e.preventDefault();void run('scan',async()=>{ controller.current=new AbortController(); const proposal=await scanCompanyWebsite(url,{signal:controller.current.signal}); if(alive.current){setCaps(previous=>({...proposal,healthPortfolio:previous.healthPortfolio || []}));setMessage('Tarama önerileri alındı. Alanları kontrol edip düzenleyin; henüz profilinize kaydedilmedi.');} });}; const save=()=>run('save',async()=>{ await updateCompanyCapabilities(caps,{website:url,threshold}); if(alive.current)setMessage('Firma profili sunucuya kaydedildi. Eşleşmeler kayıtlı profilinizle güncellenir.'); }); const edit=(key,values)=>{setCaps(previous=>({...previous,[key]:values}));setMessage('Kaydedilmemiş değişiklikler var.');}; return

Firma ürün ve faaliyet profili

Ürünlerinizi elle ekleyebilir veya web sitenizden öneri alabilirsiniz. Tarama, ürün uygunluğunu ya da ÜTS/sertifika geçerliliğini doğrulamaz. Kaydetmeden kapatırsanız bu ekrandaki değişiklikler uygulanmaz.

{busy&&

{busy==='scan'?'Site taranıyor; sonuç bekleniyor…':'Profil kaydediliyor…'}

} {error&&

{error}

} {message&&

{message}

} {caps.ozet&&

Tarama özeti: {caps.ozet}

}
{fields.map(([key,label])=>

{label}

{e.preventDefault();const value=(entries[key] || '').trim();if(!value)return;edit(key,[...new Set([...(caps[key] || []),value])]);setEntries(previous=>({...previous,[key]:''}));}} className="flex gap-2"> setEntries(previous=>({...previous,[key]:e.target.value}))} maxLength={300} className="min-w-0 w-full border rounded p-2 text-sm"/>
    {(caps[key] || []).map((value,index)=>
  • {value}
  • )}
)}
edit('healthPortfolio',items)}/>

Uyum skoru terim eşleşmesi ve varsa anlamsal yakınlık girdisidir; başvuru yeterliliği değildir.

; }