diff --git a/src/components/feed/FeedContent.jsx b/src/components/feed/FeedContent.jsx index 67e0a9d..ffdecb1 100644 --- a/src/components/feed/FeedContent.jsx +++ b/src/components/feed/FeedContent.jsx @@ -7,6 +7,7 @@ export default function FeedContent({ error, filteredAds, activeNav, + searchPrompt, liked, likeCountAdj, onLike, @@ -38,6 +39,16 @@ export default function FeedContent({ ); } + if (searchPrompt) { + return ( +
+
πŸ”
+
{t('feed.searchPromptTitle')}
+
{t('feed.searchPromptSub')}
+
+ ); + } + if (!filteredAds.length) { const emptyMsg = activeNav === "myads" ? { title: t('feed.emptyMyAdsTitle'), sub: t('feed.emptyMyAdsSub') } diff --git a/src/hooks/useFeedPosts.jsx b/src/hooks/useFeedPosts.jsx index 1768558..9761f1d 100644 --- a/src/hooks/useFeedPosts.jsx +++ b/src/hooks/useFeedPosts.jsx @@ -8,7 +8,7 @@ const PAGE_SIZE = 20; */ export function useFeedPosts() { const [ads, setAds] = useState([]); - const [loading, setLoading] = useState(true); + const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const [page, setPage] = useState(0); const [hasMore, setHasMore] = useState(true); diff --git a/src/locales/en.json b/src/locales/en.json index a3adebc..26d833d 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -127,6 +127,8 @@ "emptyMyAdsSub": "Create your first one β€” click the button above", "emptyAllTitle": "No ads yet", "emptyAllSub": "Be the first β€” post an ad
about a loss or find", + "searchPromptTitle": "Enter search parameters", + "searchPromptSub": "Type a name or select a city to find an ad", "createPost": "Create ad", "login": "Log in", "searchPlaceholder": "Search by title or description...", diff --git a/src/locales/ru.json b/src/locales/ru.json index 290c3b5..0d1b231 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -128,6 +128,8 @@ "emptyMyAdsSub": "Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ β€” Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π²Ρ‹ΡˆΠ΅", "emptyAllTitle": "ОбъявлСний ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚", "emptyAllSub": "Π‘ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ β€” размСститС объявлСниС
ΠΎ ΠΏΠΎΡ‚Π΅Ρ€Π΅ ΠΈΠ»ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΊΠ΅", + "searchPromptTitle": "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ поиска", + "searchPromptSub": "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π³ΠΎΡ€ΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ объявлСниС", "createPost": "Π Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ объявлСниС", "login": "Π’ΠΎΠΉΡ‚ΠΈ", "searchPlaceholder": "Поиск ΠΏΠΎ названию ΠΈΠ»ΠΈ описанию...", diff --git a/src/pages/MainFeed.jsx b/src/pages/MainFeed.jsx index 339ad08..347624d 100644 --- a/src/pages/MainFeed.jsx +++ b/src/pages/MainFeed.jsx @@ -51,6 +51,8 @@ export default function MainFeed() { const isSearchView = new URLSearchParams(location.search).get("view") === "search"; const hasActiveFilters = searchQuery.trim().length > 0 || selectedCities.length > 0; + const hasSearchParams = searchQuery.trim().length > 0 || selectedCities.length > 0; + const searchPrompt = isSearchView && !hasSearchParams; const feed = useFeedPosts(); const myPosts = useMyPosts(user?.id); @@ -113,15 +115,24 @@ export default function MainFeed() { } }, [location.state]); // eslint-disable-line react-hooks/exhaustive-deps - // ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π»Π΅Π½Ρ‚Ρ‹ (дСбаунс поиска), Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΏΠΎ Π³ΠΎΡ€ΠΎΠ΄Π°ΠΌ + // Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° основной Π»Π΅Π½Ρ‚Ρ‹ (Π½Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ поиска) useEffect(() => { - if (selectedCities.length > 0) return; + if (!isSearchView && selectedCities.length === 0 && !searchQuery.trim()) { + feed.loadFeed(0, "", false); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [isSearchView]); + + // ДСбаунс поиска: Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π² search view ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ + useEffect(() => { + if (!isSearchView) return; + if (!hasSearchParams) return; const timer = setTimeout(() => { feed.loadFeed(0, searchQuery, false); }, 400); return () => clearTimeout(timer); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchQuery, selectedCities]); + }, [searchQuery, selectedCities, isSearchView]); // Когда ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° «Мои объявлСния» β€” ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ с бэкСнда useEffect(() => { @@ -239,6 +250,7 @@ export default function MainFeed() { error={listError} filteredAds={filteredAds} activeNav={activeNav} + searchPrompt={searchPrompt} liked={liked} likeCountAdj={likeCountAdj} onLike={actions.toggleLike}