add search section to home

This commit is contained in:
2025-06-03 20:31:16 +02:00
parent 0bae3bf212
commit f05d5b7500
5 changed files with 48 additions and 6 deletions

View File

@@ -72,14 +72,14 @@ export async function getAllImagesByNoticeId(noticeId) {
`${API_URL}/images/get/${imageName}` `${API_URL}/images/get/${imageName}`
); );
console.log(`Pobrano ${imageUrls.length} zdjęć dla ogłoszenia o id: ${noticeId}`); // console.log(`Pobrano ${imageUrls.length} zdjęć dla ogłoszenia o id: ${noticeId}`);
return imageUrls; return imageUrls;
} }
console.log(`Brak zdjęć dla ogłoszenia o id: ${noticeId}`); // console.log(`Brak zdjęć dla ogłoszenia o id: ${noticeId}`);
return ["https://http.cat/404.jpg"]; return ["https://http.cat/404.jpg"];
} catch (err) { } catch (err) {
console.log(`Błąd podczas pobierania listy zdjęć dla ogłoszenia o id: ${noticeId}`, err); // console.log(`Błąd podczas pobierania listy zdjęć dla ogłoszenia o id: ${noticeId}`, err);
return ["https://http.cat/404.jpg"]; return ["https://http.cat/404.jpg"];
} }
} }

View File

@@ -1,8 +1,9 @@
import { ScrollView, Text } from "react-native"; import { ScrollView, View } from "react-native";
import { useNoticesStore } from '@/store/noticesStore'; import { useNoticesStore } from '@/store/noticesStore';
import { CategorySection } from "@/components/CategorySection"; import { CategorySection } from "@/components/CategorySection";
import { NoticeSection } from "@/components/NoticeSection"; import { NoticeSection } from "@/components/NoticeSection";
import { UserSection } from "@/components/UserSection"; import { UserSection } from "@/components/UserSection";
import { SearchSection } from "@/components/SearchSection";
import { FlatList } from 'react-native'; import { FlatList } from 'react-native';
export default function Home() { export default function Home() {
@@ -14,11 +15,14 @@ export default function Home() {
.sort(() => Math.random() - 0.5) .sort(() => Math.random() - 0.5)
.slice(0, 6); .slice(0, 6);
return ( return (
<View>
<SearchSection/>
<ScrollView showsVerticalScrollIndicator={false} className='m-2'> <ScrollView showsVerticalScrollIndicator={false} className='m-2'>
<CategorySection title="Polecane kategorie" notices={notices} /> <CategorySection title="Polecane kategorie" notices={notices} />
<NoticeSection title="Najnowsze ogłoszenia" notices={latestNotices} ctaLink="/notices?sort=latest"/> <NoticeSection title="Najnowsze ogłoszenia" notices={latestNotices} ctaLink="/notices?sort=latest"/>
<UserSection title="Popularni sprzedawcy" notices={notices} /> <UserSection title="Popularni sprzedawcy" notices={notices} />
<NoticeSection title="Proponowane ogłoszenia" notices={recomendedNotices} ctaLink="/notices"/> <NoticeSection title="Proponowane ogłoszenia" notices={recomendedNotices} ctaLink="/notices"/>
</ScrollView> </ScrollView>
</View>
); );
} }

View File

@@ -11,7 +11,6 @@ import { listCategories } from "@/api/categories";
import { FormControl, FormControlLabel } from "@/components/ui/form-control"; import { FormControl, FormControlLabel } from "@/components/ui/form-control";
import { Input, InputField } from "@/components/ui/input"; import { Input, InputField } from "@/components/ui/input";
import { HStack } from "@/components/ui/hstack"; import { HStack } from "@/components/ui/hstack";
import { import {
Actionsheet, Actionsheet,
ActionsheetContent, ActionsheetContent,
@@ -95,8 +94,16 @@ export default function Notices() {
}); });
} }
if (params.search) {
const searchTerm = params.search.toLowerCase();
result = result.filter(notice =>{
return notice.title.toLowerCase().includes(searchTerm);
});
}
setFilteredNotices(result); setFilteredNotices(result);
}, [notices, params.category, params.sort, params.priceFrom, params.priceTo]); }, );
let filterActive = !!params.category || params.sort === "latest"; let filterActive = !!params.category || params.sort === "latest";

View File

@@ -0,0 +1,31 @@
import { Input, InputField, InputIcon, InputSlot } from "@/components/ui/input"
import { SearchIcon } from "@/components/ui/icon"
import { Box } from "@/components/ui/box"
import { useRouter } from "expo-router";
export function SearchSection({ searchQuery, setSearchQuery }) {
const router = useRouter();
const handleSubmit = (e) => {
const value = e.nativeEvent.text;
router.push({
pathname: "/notices",
params: { search: value }
});
};
return (
<Box className="m-2 bg-white">
<Input>
<InputSlot>
<InputIcon as={SearchIcon} />
</InputSlot>
<InputField placeholder="Wyszukaj.."
value={searchQuery}
onChangeText={setSearchQuery}
onSubmitEditing={handleSubmit}
returnKeyType="search" />
</Input>
</Box>
)
}