fixed code

This commit is contained in:
SlimusMinus
2026-08-11 00:24:07 +03:00
parent c50b75eece
commit 7f59ee1f38
95 changed files with 3623 additions and 2830 deletions

41
src/hooks/useCityFeed.jsx Normal file
View File

@@ -0,0 +1,41 @@
import { useState, useEffect, useCallback } from "react";
import { useSearchPosts } from "./useSearchPosts";
/**
* Поиск объявлений по нескольким выбранным городам, с объединением
* результатов без дублей. Автоматически перезапускается при смене
* selectedCities.
*/
export function useCityFeed(selectedCities) {
const { loading: cityLoading, searchPosts } = useSearchPosts();
const [cityAds, setCityAds] = useState([]);
const searchCities = useCallback((citiesToSearch) => {
if (!citiesToSearch.length) return Promise.resolve([]);
return Promise.all(citiesToSearch.map(c => searchPosts(c))).then(results => {
const seen = new Set();
const merged = [];
results.flat().forEach(ad => {
if (!seen.has(ad.id)) {
seen.add(ad.id);
merged.push(ad);
}
});
return merged;
});
}, [searchPosts]);
useEffect(() => {
if (selectedCities.length === 0) {
setCityAds([]);
return;
}
let cancelled = false;
searchCities(selectedCities).then(result => {
if (!cancelled) setCityAds(result);
});
return () => { cancelled = true; };
}, [selectedCities, searchCities]);
return { cityAds, cityLoading, searchCities };
}