From 3426fb7c9720ca7346a1382e7f83224c2e72ea37 Mon Sep 17 00:00:00 2001 From: bansh_dml Date: Fri, 3 Jan 2025 10:14:33 +0530 Subject: [PATCH] Changed Code and fetch data from json api --- src/components/EditUser.jsx | 113 ++++++++++++--------------------- src/components/UserDetails.jsx | 37 ++++++----- src/components/UserList.jsx | 74 ++++++++++----------- 3 files changed, 95 insertions(+), 129 deletions(-) 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 (

{id === "new" ? "Add" : "Edit"} User

- {/* Form Fields */} -
+
( - - )} + rules={{ required: "Name is required" }} + render={({ field }) => } /> - {errors.name && {errors.name.message}} + {errors.name &&

{errors.name.message}

}
-
+
( - - )} + rules={{ required: "Email is required" }} + render={({ field }) => } /> - {errors.email && {errors.email.message}} + {errors.email &&

{errors.email.message}

}
-
+
( - - )} + render={({ field }) => } /> - {errors.phone && {errors.phone.message}}
-
+
( - - )} + render={({ field }) => } /> - {errors.website && {errors.website.message}}
-
- @@ -69,15 +58,23 @@ const UserList = () => {
{user.phone} {user.website} - + View - + Edit @@ -87,6 +84,7 @@ const UserList = () => {
+ {/* Pagination */}
{Array.from({ length: totalPages }, (_, index) => (
-
- - Add New User - -
+ + Add New User +
); };