import {useState, useEffect} from "react"; import {Image, StyleSheet} from "react-native"; import {Button, ButtonText} from "@/components/ui/button"; import {FormControl} from "@/components/ui/form-control"; import {Input, InputField} from "@/components/ui/input"; import {Text} from "@/components/ui/text"; import {VStack} from "@/components/ui/vstack"; import {Textarea, TextareaInput} from "@/components/ui/textarea"; import {ScrollView} from '@gluestack-ui/themed'; import * as ImagePicker from 'expo-image-picker'; import { Select, SelectTrigger, SelectInput, SelectIcon, SelectPortal, SelectBackdrop, SelectContent, SelectItem, SelectScrollView, } from "@/components/ui/select"; import {ChevronDownIcon} from "@/components/ui/icon"; import {useMutation} from "@tanstack/react-query"; import {createNotice} from "@/api/notices"; import {listCategories} from "@/api/categories"; export default function CreateNotice() { const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [price, setPrice] = useState(""); const [category, setCategory] = useState(""); const [image, setImage] = useState([]); const [selectItems, setSelectItems] = useState([]); useEffect(() => { let isMounted = true; const fetchSelectItems = async () => { try { let data = await listCategories(); if (isMounted && Array.isArray(data)) { setSelectItems(data); } } catch (error) { console.error('Error fetching select items:', error); } }; fetchSelectItems(); return () => { isMounted = false; }; }, []); const [error, setError] = useState({ title: false, description: false, price: false, category: false, }); const styles = StyleSheet.create({ container: { flex: 1, alignItems: 'center', justifyContent: 'center', }, image: { width: 100, height: 100, }, }); const noticeMutation = useMutation({ mutationFn: () => createNotice({ title: title, clientId: 1, description: description, price: parseFloat(price), category: category, status: "ACTIVE", image: image, }), onSuccess: () => { console.log("Notice created successfully"); }, onError: (error) => { console.error("Error creating notice. Erroe message: ", error.message); }, }); const addNotice = () => { setError({ title: !title, description: !description, price: !price, category: !category, }); if (!title || !description || !price || !category) { console.log("Error in form"); return; } noticeMutation.mutate(); }; const pickImage = async () => { // No permissions request is necessary for launching the image library let result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ['images'], selectionLimit: 8, allowsEditing: false, allowsMultipleSelection: true, aspect: [4, 3], quality: 0.5, }); if (!result.canceled) { // await uploadImage(1, result.assets[0].uri); setImage(result.assets.map(asset => asset.uri)); } }; return ( Zdjęcia Pierwsze zdjęcie będzie zdjęciem głównym {image && image.length > 0 && ( {image.map((img, index) => ( ))} )} Tytuł setTitle(value)} /> Opis Cena setPrice(value)} /> Kategoria ); }