diff --git a/ArtisanConnect/app/(tabs)/notice/create.jsx b/ArtisanConnect/app/(tabs)/notice/create.jsx index 06b7af4..88c9040 100644 --- a/ArtisanConnect/app/(tabs)/notice/create.jsx +++ b/ArtisanConnect/app/(tabs)/notice/create.jsx @@ -31,6 +31,7 @@ import { ChevronDownIcon } from "@/components/ui/icon"; import { useNoticesStore } from "@/store/noticesStore"; import { listCategories } from "@/api/categories"; import { useRouter } from "expo-router"; +import { attributes } from "@/data/attributesData"; // Assuming you have a separate file for attributes data} export default function CreateNotice() { const router = useRouter(); @@ -84,35 +85,6 @@ export default function CreateNotice() { }, }); - const attributes = { - Kolor: [ - "Zielony", - "Czerwony", - "Niebieski", - "Żółty", - "Biały", - "Czarny", - "Różowy", - "Szary", - "Fioletowy", - "Pomarańczowy", - "Inny", - ], - Materiał: [ - "Bawełna", - "Wełna", - "Syntetyk", - "Skóra", - "Len", - "Jedwab", - "Poliester", - "Akryl", - "Wiskoza", - "Nylon", - "Inny", - ], - }; - const handleAddNotice = async () => { setError({ title: !title, diff --git a/ArtisanConnect/app/(tabs)/notices.jsx b/ArtisanConnect/app/(tabs)/notices.jsx index 44a60e3..c7ac4cf 100644 --- a/ArtisanConnect/app/(tabs)/notices.jsx +++ b/ArtisanConnect/app/(tabs)/notices.jsx @@ -39,11 +39,11 @@ import { SelectDragIndicator, SelectDragIndicatorWrapper, SelectItem, + SelectScrollView, } from "@/components/ui/select"; -import { ScrollView } from "react-native-gesture-handler"; +import { attributes } from "@/data/attributesData"; export default function Notices() { - // Hooks const { notices, fetchNotices } = useNoticesStore(); const [refreshing, setRefreshing] = useState(false); const [isLoading, setIsLoading] = useState(true); @@ -52,6 +52,7 @@ export default function Notices() { const [showSortSheet, setShowSortSheet] = useState(false); const [categories, setCategories] = useState([]); const [filteredNotices, setFilteredNotices] = useState([]); + const [selectedAttributes, setSelectedAttributes] = useState({}); const params = useLocalSearchParams(); const router = useRouter(); @@ -131,6 +132,21 @@ export default function Notices() { }); } + Object.keys(params).forEach((key) => { + if (key.startsWith("attribute_")) { + // console.log("Filtering by attribute:", key); + const attributeName = key.replace("attribute_", ""); + const attributeValue = params[key]; + + result = result.filter((notice) => + notice.attributes?.some( + (attr) => + attr.name === attributeName && attr.value === attributeValue + ) + ); + } + }); + setFilteredNotices(result); }, [ notices, @@ -139,6 +155,8 @@ export default function Notices() { params.priceFrom, params.priceTo, params.search, + params.attribute_Kolor, + params.attribute_Materiał, ]); let filterActive = @@ -146,7 +164,8 @@ export default function Notices() { !!params.sort || !!params.priceFrom || !!params.priceTo || - !!params.search; + !!params.search || + Object.keys(params).some((key) => key.startsWith("attribute_")); const loadData = async () => { setIsLoading(true); @@ -181,6 +200,20 @@ export default function Notices() { }); }; + const handleAttributeSelect = (attributeName, value) => { + const newParams = { ...params }; + + if (value) { + newParams[`attribute_${attributeName}`] = value; + } + + // console.log("New Params:", newParams); + router.replace({ + pathname: "/notices", + params: newParams, + }); + }; + const handleClose = () => setShowActionsheet(false); const handleSort = (value) => { @@ -217,6 +250,8 @@ export default function Notices() { categories?.find((cat) => cat.value === params.category)) || null; + // console.log("Filtered Notices:", filteredNotices); + return ( <> + + {Object.entries(attributes).map(([label, options]) => ( + + {/* {label} */} + + + ))} + diff --git a/ArtisanConnect/data/attributesData.jsx b/ArtisanConnect/data/attributesData.jsx new file mode 100644 index 0000000..179e62c --- /dev/null +++ b/ArtisanConnect/data/attributesData.jsx @@ -0,0 +1,28 @@ +export const attributes = { + Kolor: [ + "Zielony", + "Czerwony", + "Niebieski", + "Żółty", + "Biały", + "Czarny", + "Różowy", + "Szary", + "Fioletowy", + "Pomarańczowy", + "Inny", + ], + Materiał: [ + "Bawełna", + "Wełna", + "Syntetyk", + "Skóra", + "Len", + "Jedwab", + "Poliester", + "Akryl", + "Wiskoza", + "Nylon", + "Inny", + ], +};