diff --git a/src/components/EditUser.jsx b/src/components/EditUser.jsx index 1943dd9..1598c61 100644 --- a/src/components/EditUser.jsx +++ b/src/components/EditUser.jsx @@ -1,24 +1,14 @@ -import React, { useState, useEffect } from "react"; -import { useParams, useNavigate } from "react-router-dom"; +import React, { useEffect, useState } from "react"; +import { useParams, useNavigate, useLocation } from "react-router-dom"; import { useForm, Controller } from "react-hook-form"; const EditUser = () => { const { id } = useParams(); const navigate = useNavigate(); + const location = useLocation(); + const [users, setUsers] = useState(location.state?.users || []); - const [users, setUsers] = useState([]); - - useEffect(() => { - const storedUsers = JSON.parse(localStorage.getItem("users")) || []; - setUsers(storedUsers); - }, []); - - const { - control, - handleSubmit, - reset, - formState: { errors }, - } = useForm({ + const { control, handleSubmit, reset, formState: { errors } } = useForm({ defaultValues: { name: "", email: "", @@ -28,112 +18,87 @@ const EditUser = () => { }); useEffect(() => { - if (id && id !== "new") { - const existingUser = users.find((user) => user.id === parseInt(id)); - if (existingUser) { - reset(existingUser); - } + if (users.length === 0) { + const fetchUsers = async () => { + const response = await fetch("https://jsonplaceholder.typicode.com/users"); + const data = await response.json(); + setUsers(data); + }; + fetchUsers(); } - }, [id, users, reset]); + }, [users]); + + const user = users.find((user) => user.id === parseInt(id)); + + useEffect(() => { + if (user) { + reset(user); + } + }, [user, reset]); const onSubmit = (data) => { let updatedUsers; if (id === "new") { - const newUser = { ...data, id: users.length + 1 }; + const newUser = { ...data, id: users.length + 1 }; updatedUsers = [...users, newUser]; alert("User added successfully!"); } else { - updatedUsers = users.map((user) => - user.id === parseInt(id) ? { ...data, id: user.id } : user + updatedUsers = users.map((u) => + u.id === parseInt(id) ? { ...data, id: u.id } : u ); alert("User updated successfully!"); } + setUsers(updatedUsers); - localStorage.setItem("users", JSON.stringify(updatedUsers)); - navigate("/"); + navigate("/", { state: { users: updatedUsers } }); }; const handleDelete = () => { const updatedUsers = users.filter((user) => user.id !== parseInt(id)); setUsers(updatedUsers); - localStorage.setItem("users", JSON.stringify(updatedUsers)); alert(`User with ID ${id} deleted.`); - navigate("/"); + navigate("/", { state: { users: updatedUsers } }); }; return (