feat: preserve search text in saved tender filters
This commit is contained in:
@@ -7,6 +7,9 @@ export const SmartFilterBuilder = () => {
|
||||
const { savedFilters, applySavedFilter, addSavedFilter, deleteSavedFilter, setActiveTab, sektorListesi, savingCount, saveError } = useApp();
|
||||
|
||||
const [filterName, setFilterName] = useState('');
|
||||
const [keyword,setKeyword] = useState('');
|
||||
const [institutionName,setInstitutionName] = useState('');
|
||||
const [registration,setRegistration] = useState('');
|
||||
const [selectedKurumTip, setSelectedKurumTip] = useState('');
|
||||
const [selectedUsul, setSelectedUsul] = useState('');
|
||||
const [selectedCity, setSelectedCity] = useState('');
|
||||
@@ -33,6 +36,9 @@ export const SmartFilterBuilder = () => {
|
||||
setSuccessMessage('');
|
||||
const saved=await addSavedFilter({
|
||||
name: filterName.trim(),
|
||||
anahtarKelime: keyword.trim(),
|
||||
kurumAdi: institutionName.trim(),
|
||||
ikn: registration.trim(),
|
||||
kurumTipi: selectedKurumTip,
|
||||
usul: selectedUsul,
|
||||
sehir: selectedCity,
|
||||
@@ -139,6 +145,18 @@ export const SmartFilterBuilder = () => {
|
||||
<p className="text-[11px] text-slate-400">Bu ad kayıtlı filtre listenizde görünür.</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-white rounded-xl border border-slate-200 p-5 space-y-3">
|
||||
<h3 className="font-bold text-sm">Arama metinleri</h3>
|
||||
<p className="text-xs text-slate-600">Dolu alanlar birlikte uygulanır. Boş bıraktığınız alan aramayı sınırlamaz.</p>
|
||||
{[
|
||||
['Anahtar kelime',keyword,setKeyword],
|
||||
['Kurum adı',institutionName,setInstitutionName],
|
||||
['İKN / DT no',registration,setRegistration],
|
||||
].map(([label,value,setValue])=><label key={label} className="block text-xs font-semibold text-slate-600">
|
||||
{label}<input type="text" value={value} onChange={e=>setValue(e.target.value)} className="mt-1 w-full bg-slate-50 border border-slate-300 rounded-lg px-3 py-2 text-sm"/>
|
||||
</label>)}
|
||||
</div>
|
||||
|
||||
{/* Middle Grid */}
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
|
||||
|
||||
@@ -735,8 +735,8 @@ export const AppProvider = ({ children }) => {
|
||||
const applySavedFilter = filter => {
|
||||
try {
|
||||
const criteria=savedFilterCriteria(filter);
|
||||
setDetailedQueries({institution:'',registration:''});
|
||||
setSearchQuery('');setSelectedCpvler([]);setQuickFilter('all');
|
||||
setDetailedQueries({institution:criteria.institutionName,registration:criteria.registration});
|
||||
setSearchQuery(criteria.keyword);setSelectedCpvler([]);setQuickFilter('all');
|
||||
setSelectedCity(criteria.city);setSelectedRegion(criteria.region);
|
||||
setSelectedAlimTuru(criteria.procedure);setSelectedKurumTipi(criteria.institution);
|
||||
setSelectedSektorler(criteria.sector?[criteria.sector]:[]);setActiveTab('list');setSaveError(null);
|
||||
|
||||
@@ -15,5 +15,5 @@ export function savedFilterCriteria(filter){
|
||||
const read=key=>{if(filter[key]!=null&&typeof filter[key]!=='string')throw new Error('Kayıtlı filtre ölçütü geçersiz.');return (filter[key] || '').trim();};
|
||||
const region=read('bolge');
|
||||
if(region&&!Object.keys(REGION_CITIES).includes(norm(region)))throw new Error('Kayıtlı bölge tanınmadı; filtreyi yeniden düzenleyin.');
|
||||
return {city:read('sehir'),region:region?norm(region):'',sector:read('sektor'),institution:read('kurumTipi'),procedure:read('usul')};
|
||||
return {city:read('sehir'),region:region?norm(region):'',sector:read('sektor'),institution:read('kurumTipi'),procedure:read('usul'),keyword:read('anahtarKelime'),institutionName:read('kurumAdi'),registration:read('ikn')};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user