fix: combine detailed tender search fields

This commit is contained in:
2026-09-06 15:59:01 +03:00
parent 9b751296ed
commit 3a5b06cee2
8 changed files with 78 additions and 35 deletions
+41 -29
View File
@@ -5,37 +5,34 @@ import { CITIES_LIST, INSTITUTION_TYPES_LIST } from '../data/constants';
import { SlidersHorizontal, Search, RotateCcw, X } from 'lucide-react';
export const DetailedSearchModal = () => {
const {
isDetailedSearchOpen,
setIsDetailedSearchOpen,
searchQuery,
setSearchQuery,
selectedCity,
setSelectedCity,
selectedAlimTuru,
setSelectedAlimTuru,
selectedSektorler,
setSelectedSektorler,
toggleSektor,
sektorListesi,
selectedKurumTipi,
setSelectedKurumTipi,
onlyValidOnly,
setOnlyValidOnly,
setActiveTab
} = useApp();
const {isDetailedSearchOpen}=useApp();
return isDetailedSearchOpen?<DetailedSearchForm/>:null;
};
const DetailedSearchForm = () => {
const context=useApp();
const {setIsDetailedSearchOpen,setActiveTab,sektorListesi}=context;
const titleId=useId();
const modalFocus=useModalFocus(isDetailedSearchOpen,()=>setIsDetailedSearchOpen(false));
const [iknQuery, setIknQuery] = useState('');
const [kurumQuery, setKurumQuery] = useState('');
if (!isDetailedSearchOpen) return null;
const modalFocus=useModalFocus(true,()=>setIsDetailedSearchOpen(false));
const [searchQuery,setSearchQuery]=useState(context.searchQuery);
const [selectedCity,setSelectedCity]=useState(context.selectedCity);
const [selectedAlimTuru,setSelectedAlimTuru]=useState(context.selectedAlimTuru);
const [selectedKurumTipi,setSelectedKurumTipi]=useState(context.selectedKurumTipi);
const [selectedSektorler,setSelectedSektorler]=useState(context.selectedSektorler);
const [onlyValidOnly,setOnlyValidOnly]=useState(context.onlyValidOnly);
const [iknQuery,setIknQuery]=useState(context.detailedQueries.registration);
const [kurumQuery,setKurumQuery]=useState(context.detailedQueries.institution);
const toggleSektor=sector=>setSelectedSektorler(old=>old.includes(sector)?old.filter(value=>value!==sector):[...old,sector]);
const handleApplySearch = (e) => {
e.preventDefault();
if (kurumQuery) setSearchQuery(kurumQuery);
else if (iknQuery) setSearchQuery(iknQuery);
context.setSearchQuery(searchQuery.trim());
context.setDetailedQueries({institution:kurumQuery.trim(),registration:iknQuery.trim()});
context.setSelectedCity(selectedCity);
context.setSelectedAlimTuru(selectedAlimTuru);
context.setSelectedKurumTipi(selectedKurumTipi);
context.setSelectedSektorler(selectedSektorler);
context.setOnlyValidOnly(onlyValidOnly);
setActiveTab('list');
setIsDetailedSearchOpen(false);
@@ -45,8 +42,9 @@ export const DetailedSearchModal = () => {
setSearchQuery('');
setSelectedCity('');
setSelectedAlimTuru('');
setSelectedSektorler([]);
setSelectedKurumTipi('');
setSelectedSektorler([]);
setOnlyValidOnly(true);
setIknQuery('');
setKurumQuery('');
};
@@ -72,6 +70,7 @@ export const DetailedSearchModal = () => {
{/* Form Body */}
<form onSubmit={handleApplySearch} className="p-6 space-y-4 text-xs">
<p className="text-slate-600">Doldurduğunuz alanlar birlikte uygulanır. Değişiklikler İhaleleri Ara düğmesine bastığınızda listeye yansır.</p>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
@@ -82,7 +81,7 @@ export const DetailedSearchModal = () => {
type="text"
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
placeholder="Başlık, açıklama içinde aranır..."
placeholder="Başlık, kurum, İKN veya kalemde aranır..."
className="w-full bg-slate-50 border border-slate-300 rounded-lg px-3 py-2 text-slate-800 focus:ring-2 focus:ring-blue-500"
/>
</div>
@@ -168,6 +167,19 @@ export const DetailedSearchModal = () => {
</select>
</div>
<div>
<label className="block font-bold text-slate-700 mb-1">Kurum Tipi</label>
<select
aria-label="Kurum Tipi"
value={selectedKurumTipi}
onChange={(e) => setSelectedKurumTipi(e.target.value)}
className="w-full bg-slate-50 border border-slate-300 rounded-lg px-3 py-2 text-slate-800"
>
<option value="">Tümü</option>
{INSTITUTION_TYPES_LIST.map(type => <option key={type} value={type}>{type}</option>)}
</select>
</div>
</div>
<div className="pt-2">