Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 66ce031

Browse files
Adding user detail page
1 parent c791e4f commit 66ce031

File tree

4 files changed

+75
-9
lines changed

4 files changed

+75
-9
lines changed

‎client/src/App.jsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import { useState } from "react";
2-
import reactLogo from "./assets/react.svg";
3-
import viteLogo from "/vite.svg";
41
import "./App.css";
5-
import { BrowserRouter, Route, Routes } from "react-router-dom";
2+
import { BrowserRouter, Navigate,Route, Routes } from "react-router-dom";
63
import Home from "./pages/Home";
4+
import UserDetail from "./pages/UserDetail";
75

86
function App() {
97
return (
108
<BrowserRouter>
119
<Routes>
10+
<Route path="/home" element={<Navigate to={"/"} />} />
1211
<Route path="/" element={<Home />} />
12+
<Route path="/user/:id" element={<UserDetail />} />
1313
</Routes>
1414
</BrowserRouter>
1515
);

‎client/src/pages/Home/index.jsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import React,{ useEffect, useState } from "react";
1+
import { useEffect, useState } from "react";
22
import "./index.css";
3-
import { Link,useNavigate } from "react-router-dom";
3+
import { useNavigate } from "react-router-dom";
44

55
const Home = () => {
66
const [users, setUsers] = useState([]);
@@ -48,8 +48,8 @@ const Home = () => {
4848
<tbody className="tbody">
4949
{users.map(({ id, first_name, last_name, email, gender, phone }) => {
5050
return (
51-
// <Link to=>
5251
<tr
52+
key={id}
5353
onClick={() => {
5454
navigate(`/user/${id}`);
5555
}}
@@ -61,7 +61,6 @@ const Home = () => {
6161
<td>{gender}</td>
6262
<td>{phone}</td>
6363
</tr>
64-
// </Link>
6564
);
6665
})}
6766
</tbody>
@@ -72,8 +71,9 @@ const Home = () => {
7271
.map((element, i) => {
7372
return (
7473
<button
74+
key={i}
7575
className={i + 1 === pagination.page ? "button-active" : ""}
76-
onClick={(e) =>
76+
onClick={() =>
7777
setPagination((prevState) => ({ ...prevState, page: i + 1 }))
7878
}
7979
>

‎client/src/pages/UserDetail/index.css

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.usertable td {
2+
border: 1px solid gray;
3+
padding: 0.25rem 0.75rem;
4+
}
5+
6+
.usertable tbody {
7+
background-color: rgb(216, 244, 255);
8+
}
9+
10+
.detail {
11+
display: flex;
12+
flex-direction: column;
13+
gap: 0.75rem;
14+
}

‎client/src/pages/UserDetail/index.jsx

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { useEffect, useState } from "react";
2+
import { Link, useParams } from "react-router-dom";
3+
import "./index.css";
4+
5+
const UserDetail = () => {
6+
const { id } = useParams();
7+
const [user, setUser] = useState(null);
8+
9+
useEffect(() => {
10+
fetch(`${import.meta.env.VITE_SERVER_URL}/user/${id}`)
11+
.then((res) => res.json())
12+
.then((json) => {
13+
setUser(json.data);
14+
})
15+
.catch((err) => {
16+
console.log(err);
17+
setUser(null);
18+
});
19+
}, [id]);
20+
21+
return (
22+
<div className="detail">
23+
<Link to={"/home"}>Go Back</Link>
24+
<table className="usertable">
25+
<tbody>
26+
<tr>
27+
<td>ID</td>
28+
<td>{user?.id}</td>
29+
</tr>
30+
<tr>
31+
<td>First name</td>
32+
<td>{user?.first_name}</td>
33+
</tr>
34+
<tr>
35+
<td>Last name</td>
36+
<td>{user?.last_name}</td>
37+
</tr>
38+
<tr>
39+
<td>Gender</td>
40+
<td>{user?.gender}</td>
41+
</tr>
42+
<tr>
43+
<td>Phone</td>
44+
<td>{user?.phone}</td>
45+
</tr>
46+
</tbody>
47+
</table>
48+
</div>
49+
);
50+
};
51+
52+
export default UserDetail;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /