import BasicTemplate from "../templates/BasicTemplate"; import { Container, Form, Row, Col, Card, Alert, Button, Image } from "react-bootstrap"; import React, { useState, useEffect } from "react"; import validator from "validator"; import axios from "axios"; import DataStorage from "../organisms/DataStorage"; export default function UserInfoPage() { // fetch data: const [error, setErrors] = useState(""); const [initialData, setInitialData] = useState(null); const [formData, setFormData] = useState({ avatar: "/default_avatar.jpg", full_name: "", phone_number: "", address: "", email: "", password: "", confirmPassword: "", }); useEffect(() => { axios .get(process.env.REACT_APP_API_URL + '/authentication/profile', { headers: { Authorization: `Bearer ${DataStorage.get('accessToken')}`, }, }) .then((response) => { if (response.status === 401) { // phiên hết hạn setErrors(JSON.stringify(response)); } else { const { avatar, full_name, address, phone_number, email } = response.data; const fetchedData = { avatar: avatar || "/default_avatar.jpg", full_name: full_name || "", phone_number: phone_number || "", address: address || "", email: email || "", password: "", confirmPassword: "", }; if (fetchedData.full_name !== DataStorage.get('username')) DataStorage.set('username', fetchedData.full_name) setInitialData(fetchedData); setFormData(fetchedData); } }) .catch((error) => { setErrors(JSON.stringify(error)); }); }, []); // console.log('formdata', formData); // console.log('initialdata', initialData); // State để hiển thị lỗi khi validation const [isChanged, setChanged] = useState(false); const handleChange = (e) => { const { name, value } = e.target; setFormData({ ...formData, [name]: value }); }; // Hàm xử lý thay đổi avatar const handleAvatarChange = (e) => { const file = e.target.files[0]; if (file) { const reader = new FileReader(); reader.onloadend = () => { setFormData((prevData) => ({ ...prevData, avatar: reader.result // Cập nhật ảnh đại diện })); }; reader.readAsDataURL(file); setChanged(true); } }; useEffect(() => { const hasChanges = () => { if (initialData) { for (let key in formData) { if (formData[key] !== initialData[key]) { return true; } } return false; } else { return false; } }; setChanged(hasChanges()); }, [formData, initialData]); const handleSubmit = async (e) => { e.preventDefault(); setChanged(false); // prevent another click if (formData.phone_number.trim() !== "" && !validator.isMobilePhone(formData.phone_number, 'vi-VN')) setErrors("Số điện thoại không hợp lệ"); else if (formData.email.trim() !== "" && !validator.isEmail(formData.email)) setErrors("Email không hợp lệ"); else if (formData.password !== "" && formData.confirmPassword !== formData.password) setErrors("Mật khẩu không khớp"); else { // let avatarBase64 = null; // if (formData.avatar) { // // Chuyển ảnh đại diện thành chuỗi Base64 // avatarBase64 = await new Promise((resolve, reject) => { // const reader = new FileReader(); // reader.onloadend = () => resolve(reader.result.split(",")[1]); // Chỉ lấy phần Base64 // reader.onerror = (error) => reject(error); // reader.readAsDataURL(formData.avatar); // }); // } let data = {}; // if (avatarBase64) data.avatar = avatarBase64; if (formData.full_name.trim() !== "" && formData.full_name.trim() !== initialData.full_name) data.full_name = formData.full_name.trim(); if (formData.phone_number.trim() !== "" && formData.phone_number.trim() !== initialData.phone_number) data.phone_number = formData.phone_number.trim(); if (formData.address.trim() !== "" && formData.address.trim() !== initialData.address) data.address = formData.address.trim(); if (formData.email.trim() !== "" && formData.email.trim() !== initialData.email) data.email = formData.email.trim(); if (formData.password.trim() !== "") data.hash_password = formData.password; // gửi request ở đây axios.post(process.env.REACT_APP_API_URL + '/users/updateUser', data, { headers: { Authorization: `Bearer ${DataStorage.get('accessToken')}`, } }).then((response) => { if (response.status === 200 || response.status === 201) { window.location.reload(); // cập nhật lại thông tin } else { setErrors(JSON.stringify(response)); } }).catch((error) => setErrors(JSON.stringify(error))); } }; return Thông tin khách hàng
{error && {error}} {/*Image*/} User Avatar Ảnh đại diện Họ tên người dùng Số điện thoại Địa chỉ giao hàng mặc định Email Password Nhập lại Password
) } /> }