diff --git a/firm/src/components/DodawanieProduktów.js b/firm/src/components/DodawanieProduktów.js index a16cfe2..3ae9cbd 100644 --- a/firm/src/components/DodawanieProduktów.js +++ b/firm/src/components/DodawanieProduktów.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import axios from 'axios'; import { useNavigate } from 'react-router-dom'; @@ -13,6 +13,15 @@ const DodawanieProduktu = () => { }); const navigate = useNavigate(); + useEffect(() => { + if (newProduct.type === '0') { + setNewProduct(prevState => ({ + ...prevState, + availability: '', + })); + } + }, [newProduct.type]); + const handleInputChange = (event) => { const { name, value } = event.target; setNewProduct({ ...newProduct, [name]: value }); diff --git a/firm/src/components/EdycjaProduktu.js b/firm/src/components/EdycjaProduktu.js index 6f6cc3a..4af9b68 100644 --- a/firm/src/components/EdycjaProduktu.js +++ b/firm/src/components/EdycjaProduktu.js @@ -11,7 +11,7 @@ const EdycjaProduktu = () => { type: '1', availability: '', }); - const [error, setError] = useState(null); + const [errors, setErrors] = useState({}); const navigate = useNavigate(); useEffect(() => { @@ -19,7 +19,7 @@ const EdycjaProduktu = () => { try { const token = localStorage.getItem('token'); if (!token) { - setError('Brak tokena. Użytkownik musi być zalogowany.'); + setErrors({ general: 'Brak tokena. Użytkownik musi być zalogowany.' }); return; } @@ -28,10 +28,18 @@ const EdycjaProduktu = () => { Authorization: `Bearer ${token}`, }, }); - setProduct(response.data); + + const productData = response.data; + setProduct({ + name: productData.name, + description: productData.description, + price: productData.price, + type: productData.type.toString(), + availability: productData.availability || '', + }); } catch (error) { console.error('Błąd podczas pobierania produktu:', error); - setError('Wystąpił błąd podczas pobierania danych produktu.'); + setErrors({ general: 'Wystąpił błąd podczas pobierania danych produktu.' }); } }; @@ -40,17 +48,45 @@ const EdycjaProduktu = () => { const handleInputChange = (event) => { const { name, value } = event.target; - setProduct({ ...product, [name]: value }); + + if (name === 'type') { + if (value === '0') { + setProduct({ + ...product, + [name]: value, + availability: '', + }); + } else { + setProduct({ + ...product, + [name]: value, + }); + } + } else { + setProduct({ ...product, [name]: value }); + } + setErrors((prevErrors) => ({ + ...prevErrors, + [name]: null, + })); }; const handleSaveChanges = async () => { const { name, description, price, type, availability } = product; - - if (!name || !description || !price || type === '') { - setError('Proszę uzupełnić wszystkie wymagane pola.'); + let validationErrors = {}; + + if (!name) validationErrors.name = 'Nazwa produktu jest wymagana.'; + if (!description) validationErrors.description = 'Opis produktu jest wymagany.'; + if (!price) validationErrors.price = 'Cena produktu jest wymagana.'; + if (type === '') validationErrors.type = 'Typ produktu jest wymagany.'; + if (price < 0) validationErrors.price = 'Cena nie może być ujemna.'; + if (type === '1' && !availability) validationErrors.availability = 'Dostępność jest wymagana dla produktu.'; + + if (Object.keys(validationErrors).length > 0) { + setErrors(validationErrors); return; } - + const payload = { id, name, @@ -59,89 +95,106 @@ const EdycjaProduktu = () => { type: parseInt(type, 10), ...(type === '1' && { availability: availability || 0 }), }; - + try { const token = localStorage.getItem('token'); if (!token) { - setError('Brak tokena. Użytkownik musi być zalogowany.'); + setErrors({ general: 'Brak tokena. Użytkownik musi być zalogowany.' }); return; } - + const config = { headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}`, }, }; - - const response = await axios.put(`https://localhost:7039/api/Products/${id}`, payload, config); - - console.log('Produkt zapisany:', response.data); - - setError(null); + + await axios.put(`https://localhost:7039/api/Products/${id}`, payload, config); + setErrors({}); navigate('/produkty'); } catch (error) { console.error('Błąd podczas zapisywania zmian:', error); - + if (error.response && error.response.status === 400) { - setError('ID produktu nie zgadza się.'); + setErrors({ general: error.response.data }); } else { - setError('Wystąpił błąd podczas zapisywania zmian. Spróbuj ponownie.'); + setErrors({ general: 'Wystąpił błąd podczas zapisywania zmian. Spróbuj ponownie.' }); } } }; - return (
{error}
} -{errors.general}
} + +