From d0c512fd1588a2fde6ce9ee11a863590bd9f65a9 Mon Sep 17 00:00:00 2001 From: hz Date: Tue, 13 May 2025 17:37:41 -0500 Subject: [PATCH] Adding users grid, allowing the change of user roles --- src/pages/Dashboard.jsx | 174 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 170 insertions(+), 4 deletions(-) diff --git a/src/pages/Dashboard.jsx b/src/pages/Dashboard.jsx index 035387a..131d0fc 100644 --- a/src/pages/Dashboard.jsx +++ b/src/pages/Dashboard.jsx @@ -1,20 +1,186 @@ import React, { useEffect, useState } from "react"; +import config from "../config"; + +const thStyle = { + padding: "0.75rem", + backgroundColor: "#333", + borderBottom: "1px solid #555", + color: "#fff", + position: "sticky", + top: 0, + zIndex: 1, + textAlign: "center", +}; + +const tdStyle = { + padding: "0.5rem 1rem", + borderBottom: "1px solid #444", + textAlign: "center", + color: "#fff", +}; const Dashboard = () => { const [role, setRole] = useState(""); + const [users, setUsers] = useState([]); + const [newRoles, setNewRoles] = useState({}); + const [selectedUsers, setSelectedUsers] = useState([]); useEffect(() => { - const role = localStorage.getItem("role"); - if (role) { - setRole(role); + const currentRole = localStorage.getItem("role"); + setRole(currentRole); + + if (currentRole === "SUPER") { + fetchUsers(); } }, []); + const fetchUsers = async () => { + const token = localStorage.getItem("token"); + + try { + const res = await fetch(`${config.apiBaseUrl}/api/Auth/users`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + if (!res.ok) throw new Error("Failed to fetch users"); + + const data = await res.json(); + setUsers(data); + } catch (err) { + console.error("Error fetching users:", err); + } + }; + + const handleRoleChange = (username, value) => { + setNewRoles({ ...newRoles, [username]: value }); + }; + + const updateUserRole = async (username) => { + const token = localStorage.getItem("token"); + const newRole = newRoles[username]; + + try { + const res = await fetch(`${config.apiBaseUrl}/api/Auth/role`, { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${token}`, + }, + body: JSON.stringify({ username, newRole }), + }); + + if (!res.ok) throw new Error("Failed to update role"); + + fetchUsers(); + } catch (err) { + console.error("Error updating role:", err); + } + }; + + const toggleUserSelection = (username) => { + setSelectedUsers((prev) => + prev.includes(username) + ? prev.filter((u) => u !== username) + : [...prev, username] + ); + }; + return (

Dashboard

Welcome! You are logged in.

- {role === "SUPER" &&

You are SUPER

} + + {role === "SUPER" && ( + <> +

You are SUPER

+ +
+ + + + + + + {selectedUsers.length > 0 && ( + + )} + + + + {users.map((user) => { + const isSelected = selectedUsers.includes(user.username); + const currentNewRole = + newRoles[user.username] ?? user.role; + + return ( + + + + + {selectedUsers.length > 0 && ( + + )} + + ); + })} + +
UsernameRoleAction
+ toggleUserSelection(user.username)} + /> + {user.username} + {isSelected ? ( + + ) : ( + user.role + )} + + {isSelected && ( + + )} +
+
+ + )}
); };