eleven-solutions-common-website-unique-web 2.0.2 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
@@ -1,2 +1,2 @@
|
|
1
|
-
declare
|
1
|
+
declare const UserForm: () => import("react/jsx-runtime").JSX.Element;
|
2
2
|
export default UserForm;
|
@@ -1,5 +1,111 @@
|
|
1
|
-
|
2
|
-
function
|
3
|
-
return
|
4
|
-
}
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
11
|
+
import { useState, useEffect } from "react";
|
12
|
+
import { addUserApi, updateUserApi, fetchUserByIdApi } from "../api/user";
|
13
|
+
const UserForm = () => {
|
14
|
+
const [userName, setUserName] = useState("");
|
15
|
+
const [email, setEmail] = useState("");
|
16
|
+
const [mobile, setMobile] = useState("");
|
17
|
+
const [address, setAddress] = useState("");
|
18
|
+
const [roleType, setRoleType] = useState("");
|
19
|
+
const [, setUser] = useState(null);
|
20
|
+
const [isEditMode, setIsEditMode] = useState(false);
|
21
|
+
const validateForm = () => {
|
22
|
+
if (!userName || !email || !roleType) {
|
23
|
+
alert("Please fill in all required fields: User Name, Email, and Role Type.");
|
24
|
+
return false;
|
25
|
+
}
|
26
|
+
return true;
|
27
|
+
};
|
28
|
+
// const location = useLocation();
|
29
|
+
// // const navigate = useNavigate();
|
30
|
+
// const { id } = location.state || {};
|
31
|
+
const queryParams = new URLSearchParams(window.location.search);
|
32
|
+
const id = queryParams.get("id");
|
33
|
+
useEffect(() => {
|
34
|
+
if (id) {
|
35
|
+
const fetchUserData = () => __awaiter(void 0, void 0, void 0, function* () {
|
36
|
+
try {
|
37
|
+
const fetchedUser = yield fetchUserByIdApi(id);
|
38
|
+
if (fetchedUser) {
|
39
|
+
const user = fetchedUser;
|
40
|
+
setIsEditMode(true);
|
41
|
+
setUser(user);
|
42
|
+
setUserName(user.name);
|
43
|
+
setEmail(user.email);
|
44
|
+
setMobile(user.mobile);
|
45
|
+
setAddress(user.address);
|
46
|
+
setRoleType(user.roleType);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
catch (error) {
|
50
|
+
console.error("Unable to fetch user data", error);
|
51
|
+
}
|
52
|
+
});
|
53
|
+
fetchUserData();
|
54
|
+
}
|
55
|
+
}, [id]);
|
56
|
+
// const handleSubmit = async (event: React.MouseEvent<HTMLButtonElement>) => {
|
57
|
+
// event.preventDefault();
|
58
|
+
// if (!validateForm()) return;
|
59
|
+
// try {
|
60
|
+
// if (isEditMode) {
|
61
|
+
// await updateUserApi(id, userName, mobile, address, roleType);
|
62
|
+
// alert("User updated successfully");
|
63
|
+
// } else {
|
64
|
+
// await addUserApi(userName, email, mobile, address, roleType);
|
65
|
+
// alert("User added successfully");
|
66
|
+
// }
|
67
|
+
// navigate("/admin/user");
|
68
|
+
// } catch (error) {
|
69
|
+
// console.error("Error adding/updating User:", error);
|
70
|
+
// alert("Failed to add/update User");
|
71
|
+
// }
|
72
|
+
// };
|
73
|
+
const handleSubmit = (event) => __awaiter(void 0, void 0, void 0, function* () {
|
74
|
+
event.preventDefault();
|
75
|
+
if (!validateForm())
|
76
|
+
return;
|
77
|
+
try {
|
78
|
+
if (isEditMode) {
|
79
|
+
yield updateUserApi(id, userName, mobile, address, roleType);
|
80
|
+
alert("User updated successfully");
|
81
|
+
}
|
82
|
+
else {
|
83
|
+
yield addUserApi(userName, email, mobile, address, roleType);
|
84
|
+
alert("User added successfully");
|
85
|
+
}
|
86
|
+
window.location.href = "/admin/users";
|
87
|
+
}
|
88
|
+
catch (error) {
|
89
|
+
console.error("Error adding/updating User:", error);
|
90
|
+
alert("Failed to add/update User");
|
91
|
+
}
|
92
|
+
});
|
93
|
+
// const handleCancelClick = () => {
|
94
|
+
// setUserName("");
|
95
|
+
// setEmail("");
|
96
|
+
// setMobile("");
|
97
|
+
// setAddress("");
|
98
|
+
// setRoleType("");
|
99
|
+
// navigate("/admin/user");
|
100
|
+
// };
|
101
|
+
const handleCancelClick = () => {
|
102
|
+
setUserName("");
|
103
|
+
setEmail("");
|
104
|
+
setMobile("");
|
105
|
+
setAddress("");
|
106
|
+
setRoleType("");
|
107
|
+
window.location.href = "/admin/users";
|
108
|
+
};
|
109
|
+
return (_jsx("div", { className: "max-w-4xl p-6 mx-auto dark:bg-gray-800", children: _jsx("div", { children: _jsxs("form", { children: [_jsx("h1", { className: "text-3xl font-bold text-center text-blue-600 capitalize dark:text-white mb-4", children: isEditMode ? "Edit User" : "Add User" }), _jsxs("div", { className: "mb-6 w-full", children: [_jsxs("label", { className: "text-gray-900 dark:text-gray-200 font-semibold", children: ["User Name ", _jsx("span", { className: "text-red-500", children: "*" })] }), _jsx("input", { required: true, value: userName, onChange: (e) => setUserName(e.target.value), type: "text", className: "w-full px-4 py-2 mt-2 text-gray-800 bg-white border border-gray-400 rounded-md dark:bg-gray-800 dark:text-gray-300 dark:border-gray-800 focus:border-blue-400 focus:ring-blue-300 focus:ring-opacity-40 dark:focus:border-blue-300 focus:outline-none focus:ring", placeholder: "Enter User Name" })] }), _jsxs("div", { className: "mb-6 w-full", children: [_jsxs("label", { className: "text-gray-900 dark:text-gray-200 font-semibold", children: ["Email ", _jsx("span", { className: "text-red-500", children: "*" })] }), _jsx("input", { required: true, value: email, onChange: (e) => setEmail(e.target.value), type: "email", className: "w-full px-4 py-2 mt-2 text-gray-800 bg-white border border-gray-400 rounded-md dark:bg-gray-800 dark:text-gray-300 dark:border-gray-800 focus:border-blue-400 focus:ring-blue-300 focus:ring-opacity-40 dark:focus:border-blue-300 focus:outline-none focus:ring", placeholder: "Enter Email", disabled: isEditMode })] }), _jsxs("div", { className: "mb-6 w-full", children: [_jsx("label", { className: "text-gray-900 dark:text-gray-200 font-semibold", children: "Moblie Number" }), _jsx("input", { required: true, value: mobile, onChange: (e) => setMobile(e.target.value), type: "number", className: "w-full px-4 py-2 mt-2 text-gray-800 bg-white border border-gray-400 rounded-md dark:bg-gray-800 dark:text-gray-300 dark:border-gray-800 focus:border-blue-400 focus:ring-blue-300 focus:ring-opacity-40 dark:focus:border-blue-300 focus:outline-none focus:ring", placeholder: "Enter Mobile Number" })] }), _jsxs("div", { className: "mb-6 w-full", children: [_jsx("label", { className: "text-gray-900 dark:text-gray-200 font-semibold", children: "Address" }), _jsx("input", { required: true, value: address, onChange: (e) => setAddress(e.target.value), type: "text", className: "w-full px-4 py-2 mt-2 text-gray-800 bg-white border border-gray-400 rounded-md dark:bg-gray-800 dark:text-gray-300 dark:border-gray-800 focus:border-blue-400 focus:ring-blue-300 focus:ring-opacity-40 dark:focus:border-blue-300 focus:outline-none focus:ring", placeholder: "Address" })] }), _jsxs("div", { className: "mb-6 w-full", children: [_jsxs("label", { className: "text-gray-900 dark:text-gray-200 font-semibold", children: ["Role Type ", _jsx("span", { className: "text-red-500", children: "*" })] }), _jsxs("select", { required: true, value: roleType, onChange: (e) => setRoleType(e.target.value), className: "w-full px-4 py-2 mt-2 text-gray-800 bg-white border border-gray-400 rounded-md dark:bg-gray-800 dark:text-gray-300 dark:border-gray-800 focus:border-blue-400 focus:ring-blue-300 focus:ring-opacity-40 dark:focus:border-blue-300 focus:outline-none focus:ring", children: [_jsx("option", { value: "", children: "Select a Role Type" }), _jsx("option", { value: "1", children: "Guest" }), _jsx("option", { value: "2", children: "Admin" })] })] }), _jsxs("div", { className: "flex space-x-4 mt-6 justify-end", children: [_jsx("button", { type: "submit", onClick: handleSubmit, className: "px-8 py-2.5 leading-5 text-white transition-colors duration-300 transform bg-blue-600 rounded-md hover:bg-blue-500 focus:outline-none focus:bg-gray-600", children: isEditMode ? "Edit" : "Add" }), _jsx("button", { type: "button", onClick: handleCancelClick, className: "px-8 py-2.5 leading-5 text-white transition-colors duration-300 transform bg-blue-600 rounded-md hover:bg-blue-500 focus:outline-none focus:bg-gray-600", children: "Cancel" })] })] }) }) }));
|
110
|
+
};
|
5
111
|
export default UserForm;
|
@@ -1,10 +1,81 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
1
10
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
11
|
+
import { useState, useEffect } from "react";
|
12
|
+
import { FaPlus } from "react-icons/fa";
|
13
|
+
import { fetchUsersApi, deleteUserApi } from "../api/user";
|
2
14
|
function Users() {
|
15
|
+
const [users, setUsers] = useState([]);
|
16
|
+
const fetchUsersData = () => __awaiter(this, void 0, void 0, function* () {
|
17
|
+
const data = yield fetchUsersApi();
|
18
|
+
if (data) {
|
19
|
+
setUsers(data);
|
20
|
+
}
|
21
|
+
else {
|
22
|
+
console.error("Failed to fetch users");
|
23
|
+
}
|
24
|
+
});
|
25
|
+
useEffect(() => {
|
26
|
+
fetchUsersData();
|
27
|
+
}, []);
|
28
|
+
// const handleNav = (e: React.FormEvent) => {
|
29
|
+
// e.preventDefault();
|
30
|
+
// window.history.pushState({}, "", "/admin/users/userform");
|
31
|
+
// // Trigger React's routing logic manually if required
|
32
|
+
// const navEvent = new PopStateEvent("popstate");
|
33
|
+
// window.dispatchEvent(navEvent);
|
34
|
+
// };
|
3
35
|
const handleNavigation = (event, path) => {
|
4
36
|
event.preventDefault();
|
5
37
|
window.history.pushState({}, "", path);
|
6
38
|
window.dispatchEvent(new PopStateEvent("popstate"));
|
7
39
|
};
|
8
|
-
|
40
|
+
const [currentPage, setCurrentPage] = useState(1);
|
41
|
+
const itemsPerPage = 10;
|
42
|
+
const totalPages = Math.ceil(users.length / itemsPerPage);
|
43
|
+
const handleNextPage = () => {
|
44
|
+
if (currentPage < totalPages) {
|
45
|
+
setCurrentPage(currentPage + 1);
|
46
|
+
}
|
47
|
+
};
|
48
|
+
const handlePreviousPage = () => {
|
49
|
+
if (currentPage > 1) {
|
50
|
+
setCurrentPage(currentPage - 1);
|
51
|
+
}
|
52
|
+
};
|
53
|
+
const handlePageClick = (pageNumber) => {
|
54
|
+
setCurrentPage(pageNumber);
|
55
|
+
};
|
56
|
+
const paginatedUsers = users.slice((currentPage - 1) * itemsPerPage, currentPage * itemsPerPage);
|
57
|
+
const handleDeleteClick = (id) => __awaiter(this, void 0, void 0, function* () {
|
58
|
+
try {
|
59
|
+
yield deleteUserApi(id);
|
60
|
+
alert("User deleted successfully");
|
61
|
+
fetchUsersData();
|
62
|
+
}
|
63
|
+
catch (error) {
|
64
|
+
console.error("Error deleting User:", error);
|
65
|
+
}
|
66
|
+
});
|
67
|
+
// const handleEditClick = (id: string) => {
|
68
|
+
// navigate("/admin/user/userform", { state: { id } });
|
69
|
+
// };
|
70
|
+
const handleEditClick = (id) => {
|
71
|
+
return (_jsx("a", { href: `/admin/users/userform?id=${id}`, onClick: (e) => e.preventDefault(), children: "Edit User" }));
|
72
|
+
};
|
73
|
+
return (_jsxs("div", { className: "container px-4 mx-auto mt-6", children: [_jsx("div", { className: "w-3/4", children: _jsx("h1", { className: "text-3xl font-bold text-blue-600 mb-5", children: "Users" }) }), _jsx("div", { className: "flex-grow ml-0 w-full mt-10", children: _jsxs("form", { className: "w-full ", children: [_jsx("label", { htmlFor: "default-search", className: "mb-2 text-sm font-medium text-gray-900 sr-only dark:text-white", children: "Search" }), _jsxs("div", { className: "relative w-full", children: [_jsx("div", { className: "absolute inset-y-0 start-0 flex items-center ps-3 pointer-events-none", children: _jsx("svg", { className: "w-4 h-4 text-gray-500 dark:text-gray-400", "aria-hidden": "true", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 20 20", children: _jsx("path", { stroke: "currentColor", "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", d: "m19 19-4-4m0-7A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z" }) }) }), _jsx("input", { type: "search", id: "default-search", className: "inline-block min-w-full p-3 ps-10 outline-none text-sm text-gray-900 border border-gray-300 rounded-lg bg-gray-50 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500", placeholder: "Search Users", required: true }), _jsx("button", { type: "submit", className: "text-white absolute end-1.5 bottom-1.5 bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-4 py-2 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800", children: "Search" })] })] }) }), _jsx("div", { className: "flex-grow ml-0 w-3/4", children: _jsx("form", { className: "w-auto" }) }), _jsxs("div", { className: "flex-grow ml-0 mt-4 w-full", children: [_jsx("div", { className: "overflow-hidden border border-gray-200 dark:border-gray-700 md:rounded-lg mt-6", children: _jsxs("table", { className: "min-w-full divide-y divide-gray-200 dark:divide-gray-700", children: [_jsx("thead", { className: "bg-gray-50 dark:bg-gray-800", children: _jsxs("tr", { children: [_jsx("th", { scope: "col", className: "px-4 py-3.5 text-md font-normal text-left rtl:text-right text-gray-500 dark:text-gray-400", children: "Edit/Delete" }), _jsx("th", { scope: "col", className: "py-3.5 px-4 text-md font-normal text-left rtl:text-right text-gray-500 dark:text-gray-400", children: _jsx("div", { className: "flex items-center gap-x-3", children: _jsx("span", { children: "Name" }) }) }), _jsx("th", { scope: "col", className: "px-4 py-3.5 text-md font-normal text-left rtl:text-right text-gray-500 dark:text-gray-400", children: _jsx("button", { className: "flex items-center gap-x-2", children: _jsx("span", { children: "Email" }) }) }), _jsx("th", { scope: "col", className: "px-4 py-3.5 text-md font-normal text-left rtl:text-right text-gray-500 dark:text-gray-400", children: _jsx("button", { className: "flex items-center gap-x-2", children: _jsx("span", { children: "Mobile" }) }) }), _jsx("th", { scope: "col", className: "px-4 py-3.5 text-md font-normal text-left rtl:text-right text-gray-500 dark:text-gray-400", children: "Address" }), _jsx("th", { scope: "col", className: "px-4 py-3.5 text-md font-normal text-left rtl:text-right text-gray-500 dark:text-gray-400", children: "Role Type" })] }) }), _jsx("tbody", { className: "bg-white divide-y divide-gray-200 dark:divide-gray-700 dark:bg-gray-900", children: paginatedUsers.map((user, index) => (_jsxs("tr", { children: [_jsx("td", { className: "px-4 py-4 text-sm whitespace-nowrap", children: _jsxs("div", { className: "flex items-center gap-x-6", children: [_jsx("button", { onClick: () => handleDeleteClick(user.id), className: "text-gray-500 transition-colors duration-200 dark:hover:text-red-600 dark:text-gray-300 hover:text-red-500 focus:outline-none", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", className: "w-5 h-5", children: _jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" }) }) }), _jsx("a", { href: `/admin/users/userform?id=${user.id}`, onClick: (e) => {
|
74
|
+
e.preventDefault(); // Prevent default navigation
|
75
|
+
handleEditClick(user.id); // Trigger the edit functionality
|
76
|
+
window.location.href = `/admin/users/userform?id=${user.id}`; // Manually navigate
|
77
|
+
}, children: _jsx("button", { className: "text-gray-500 transition-colors duration-200 dark:hover:text-yellow-500 dark:text-gray-300 hover:text-yellow-500 focus:outline-none", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: "1.5", stroke: "currentColor", className: "w-5 h-5", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L10.582 16.07a4.5 4.5 0 01-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 011.13-1.897l8.932-8.931zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0115.75 21H5.25A2.25 2.25 0 013 18.75V8.25A2.25 2.25 0 015.25 6H10" }) }) }) })] }) }), _jsx("td", { className: "px-4 py-4 text-sm font-medium text-gray-700 whitespace-nowrap", children: _jsx("div", { className: "inline-flex items-center gap-x-3", children: _jsx("div", { className: "flex items-center gap-x-2", children: _jsx("div", { children: _jsx("h2", { className: " text-sm font-medium text-gray-800 dark:text-white ", children: user.name }) }) }) }) }), _jsx("td", { className: "px-4 py-4 text-sm text-gray-500 dark:text-gray-300 whitespace-nowrap", children: user.email }), _jsx("td", { className: "px-4 py-4 text-sm text-gray-500 dark:text-gray-300 whitespace-nowrap", children: (user === null || user === void 0 ? void 0 : user.mobile) || "Not Provided" }), _jsx("td", { className: "px-4 py-4 text-sm text-gray-500 dark:text-gray-300 whitespace-nowrap", children: (user === null || user === void 0 ? void 0 : user.address) || "Not Provided" }), _jsx("td", { className: "px-4 py-4 text-sm text-gray-500 dark:text-gray-300 whitespace-nowrap", children: user.roleType === "1" ? "Guest" : "Admin" })] }, user.id || index))) })] }) }), _jsxs("div", { className: "flex items-center justify-between mt-6", children: [_jsxs("button", { onClick: handlePreviousPage, disabled: currentPage === 1, className: "flex items-center px-5 py-2 text-sm text-gray-700 capitalize transition-colors duration-200 bg-white border rounded-md gap-x-2 hover:bg-gray-100 dark:bg-gray-900 dark:text-gray-200 dark:border-gray-700 dark:hover:bg-gray-800", children: [_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", className: "w-5 h-5 rtl:-scale-x-100", children: _jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M6.75 15.75L3 12m0 0l3.75-3.75M3 12h18" }) }), _jsx("span", { children: "previous" })] }), _jsx("div", { className: "items-center hidden lg:flex gap-x-3", children: Array.from({ length: totalPages }, (_, index) => (_jsx("button", { onClick: () => handlePageClick(index + 1), className: `px-2 py-1 text-sm ${currentPage === index + 1
|
78
|
+
? "text-blue-500 bg-blue-100"
|
79
|
+
: "text-gray-500 hover:bg-gray-100"} rounded-md`, children: index + 1 }, index + 1))) }), _jsxs("button", { onClick: handleNextPage, disabled: currentPage === totalPages, className: "flex items-center px-5 py-2 text-sm text-gray-700 capitalize transition-colors duration-200 bg-white border rounded-md gap-x-2 hover:bg-gray-100 dark:bg-gray-900 dark:text-gray-200 dark:border-gray-700 dark:hover:bg-gray-800", children: [_jsx("span", { children: "Next" }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", className: "w-5 h-5 rtl:-scale-x-100", children: _jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M17.25 8.25L21 12m0 0l-3.75 3.75M21 12H3" }) })] })] }), _jsx("div", { className: "flex-grow ml-0 mt-4 w-0", children: _jsxs("button", { type: "button", onClick: (event) => handleNavigation(event, "/admin/users/userform"), className: "flex items-center justify-center px-6 py-2 font-medium tracking-wide text-white capitalize transition-colors duration-300 transform bg-blue-600 rounded-lg hover:bg-blue-500 focus:outline-none focus:ring focus:ring-blue-300 focus:ring-opacity-80", children: [_jsx(FaPlus, { className: "mr-2 font-medium" }), "User"] }) })] })] }));
|
9
80
|
}
|
10
81
|
export default Users;
|