diff --git a/web/src/App.tsx b/web/src/App.tsx index 1bfaa25..ff7d637 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -17,6 +17,7 @@ import NotAllowedPage from "./pages/NotAllowed"; import NotFoundPage from "./pages/NotFound"; import ApiServiceEditPage from "./pages/Admin/ApiServices/Update"; import AdminUsersPage from "./pages/Admin/Users"; +import AdminViewUserPage from "./pages/Admin/Users/View"; const router = createBrowserRouter([ { @@ -59,10 +60,10 @@ const router = createBrowserRouter([ children: [ { index: true, element: }, // { path: "create", element: }, - // { - // path: "view/:serviceId", - // element: , - // }, + { + path: "view/:userId", + element: , + }, // { // path: "edit/:serviceId", // element: , diff --git a/web/src/pages/Admin/Users/View/index.tsx b/web/src/pages/Admin/Users/View/index.tsx new file mode 100644 index 0000000..2bc9ac8 --- /dev/null +++ b/web/src/pages/Admin/Users/View/index.tsx @@ -0,0 +1,139 @@ +import Breadcrumbs from "@/components/ui/breadcrumbs"; +import { Button } from "@/components/ui/button"; +import Avatar from "@/feature/Avatar"; +import { useUsers } from "@/store/admin/users"; +import { useEffect, type FC } from "react"; +import { Link, useParams } from "react-router"; + +const InfoCard = ({ + title, + children, +}: { + title: string; + children: React.ReactNode; +}) => ( +
+
+

+ {title} +

+
+
{children}
+
+); + +const AdminViewUserPage: FC = () => { + const { userId } = useParams(); + const user = useUsers((state) => state.current); + // const loading = useApiServices((state) => state.fetchingApiService); + + const loadUser = useUsers((state) => state.fetchUser); + + useEffect(() => { + if (typeof userId === "string") loadUser(userId); + }, [loadUser, userId]); + + if (!user) { + return ( +
+
+
+

Loading User...

+
+
+ ); + } + + return ( +
+ + +
+ {/* 📋 Main Details */} + +
+
+ + Avatar: + + +
+
+ + Full Name: + {" "} + {user.full_name} +
+
+ + Email: + {" "} + {user.email} +
+
+ + Phone Number: + {" "} + {user.phone_number || "-"}{" "} +
+
+ + Is Admin: + {" "} + + {user.is_admin ? "Yes" : "No"} + +
+
+ + Created At: + {" "} + {new Date(user.created_at).toLocaleString()} +
+
+ + Last Login At: + {" "} + {user.last_login + ? new Date(user.last_login).toLocaleString() + : "never"} +
+
+
+ + {/* 🚀 Actions */} +
+ + + +
+ + + +
+
+
+
+ ); +}; + +export default AdminViewUserPage;