mirror of
https://github.com/bluewave-labs/Checkmate.git
synced 2026-02-16 14:29:20 -06:00
Merge pull request #431 from bluewave-labs/feat/udpate-roles
Feat/update roles
This commit is contained in:
@@ -44,7 +44,7 @@ const TeamPanel = () => {
|
||||
});
|
||||
const [toInvite, setToInvite] = useState({
|
||||
email: "",
|
||||
role: "",
|
||||
role: [""],
|
||||
});
|
||||
const [tableData, setTableData] = useState({});
|
||||
const [members, setMembers] = useState([]);
|
||||
@@ -72,7 +72,7 @@ const TeamPanel = () => {
|
||||
useEffect(() => {
|
||||
let team = members;
|
||||
if (filter !== "all")
|
||||
team = members.filter((member) => member.role[0] === filter);
|
||||
team = members.filter((member) => member.role.includes(filter));
|
||||
|
||||
const data = {
|
||||
cols: [
|
||||
@@ -104,7 +104,7 @@ const TeamPanel = () => {
|
||||
{
|
||||
// TODO - Add select dropdown
|
||||
id: idx + 2,
|
||||
data: member.role[0] === "admin" ? "Administrator" : "Member",
|
||||
data: member.role.includes("admin") ? "Administrator" : "Member",
|
||||
},
|
||||
{
|
||||
// TODO - Add delete onClick
|
||||
@@ -167,8 +167,8 @@ const TeamPanel = () => {
|
||||
};
|
||||
|
||||
const handleInviteMember = async () => {
|
||||
if (toInvite.role !== "user" || toInvite !== "admin")
|
||||
setToInvite((prev) => ({ ...prev, role: "user" }));
|
||||
if (!toInvite.role.includes("user") || !toInvite.role.includes("admin"))
|
||||
setToInvite((prev) => ({ ...prev, role: ["user"] }));
|
||||
|
||||
const { error } = credentials.validate(
|
||||
{ email: toInvite.email },
|
||||
@@ -185,7 +185,7 @@ const TeamPanel = () => {
|
||||
"/auth/invite",
|
||||
{
|
||||
email: toInvite.email,
|
||||
role: toInvite.role,
|
||||
role: [toInvite.role],
|
||||
},
|
||||
{ headers: { Authorization: `Bearer ${authToken}` } }
|
||||
);
|
||||
@@ -202,7 +202,7 @@ const TeamPanel = () => {
|
||||
};
|
||||
const closeInviteModal = () => {
|
||||
setIsOpen(false);
|
||||
setToInvite({ email: "", role: "" });
|
||||
setToInvite({ email: "", role: [""] });
|
||||
setErrors({});
|
||||
};
|
||||
|
||||
@@ -368,11 +368,11 @@ const TeamPanel = () => {
|
||||
/>
|
||||
<Select
|
||||
id="team-member-role"
|
||||
value={toInvite.role}
|
||||
value={toInvite.role[0]}
|
||||
onChange={(event) =>
|
||||
setToInvite((prev) => ({
|
||||
...prev,
|
||||
role: event.target.value,
|
||||
role: [event.target.value],
|
||||
}))
|
||||
}
|
||||
displayEmpty
|
||||
|
||||
@@ -14,10 +14,12 @@ import { credentials } from "../../../Validation/validation";
|
||||
import { createToast } from "../../../Utils/toastUtils";
|
||||
import Field from "../../../Components/Inputs/Field";
|
||||
import { register } from "../../../Features/Auth/authSlice";
|
||||
import { useParams } from "react-router-dom";
|
||||
|
||||
const Register = ({ isAdmin }) => {
|
||||
const dispatch = useDispatch();
|
||||
const navigate = useNavigate();
|
||||
const { token } = useParams();
|
||||
const theme = useTheme();
|
||||
|
||||
// TODO If possible, change the IDs of these fields to match the backend
|
||||
@@ -35,14 +37,14 @@ const Register = ({ isAdmin }) => {
|
||||
email: "",
|
||||
password: "",
|
||||
confirm: "",
|
||||
role: "",
|
||||
role: [],
|
||||
});
|
||||
const [errors, setErrors] = useState({});
|
||||
|
||||
const handleSubmit = async (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
const registerForm = { ...form, role: isAdmin ? "admin" : "user" };
|
||||
const registerForm = { ...form, role: isAdmin ? ["admin"] : [] };
|
||||
const { error } = credentials.validate(registerForm, {
|
||||
abortEarly: false,
|
||||
context: { password: form.password },
|
||||
|
||||
@@ -68,9 +68,7 @@ const credentials = joi.object({
|
||||
}
|
||||
return value;
|
||||
}),
|
||||
role: joi.string().messages({
|
||||
"string.empty": "Role is required",
|
||||
}),
|
||||
role: joi.array().required(),
|
||||
});
|
||||
|
||||
const monitorValidation = joi.object({
|
||||
|
||||
@@ -44,7 +44,7 @@ const registerValidation = joi.object({
|
||||
/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*()])[A-Za-z0-9!@#$%^&*()]+$/
|
||||
),
|
||||
profileImage: joi.any(),
|
||||
role: joi.string().required(),
|
||||
role: joi.array().required(),
|
||||
});
|
||||
|
||||
const editUserParamValidation = joi.object({
|
||||
|
||||
62
tq
Normal file
62
tq
Normal file
@@ -0,0 +1,62 @@
|
||||
[1mdiff --git a/Client/src/Pages/Auth/Register/Register.jsx b/Client/src/Pages/Auth/Register/Register.jsx[m
|
||||
[1mindex 1eaa99f..a5db763 100644[m
|
||||
[1m--- a/Client/src/Pages/Auth/Register/Register.jsx[m
|
||||
[1m+++ b/Client/src/Pages/Auth/Register/Register.jsx[m
|
||||
[36m@@ -14,10 +14,12 @@[m [mimport { credentials } from "../../../Validation/validation";[m
|
||||
import { createToast } from "../../../Utils/toastUtils";[m
|
||||
import Field from "../../../Components/Inputs/Field";[m
|
||||
import { register } from "../../../Features/Auth/authSlice";[m
|
||||
[32m+[m[32mimport { useParams } from "react-router-dom";[m
|
||||
[m
|
||||
const Register = ({ isAdmin }) => {[m
|
||||
const dispatch = useDispatch();[m
|
||||
const navigate = useNavigate();[m
|
||||
[32m+[m[32m const { token } = useParams();[m
|
||||
const theme = useTheme();[m
|
||||
[m
|
||||
// TODO If possible, change the IDs of these fields to match the backend[m
|
||||
[36m@@ -35,14 +37,14 @@[m [mconst Register = ({ isAdmin }) => {[m
|
||||
email: "",[m
|
||||
password: "",[m
|
||||
confirm: "",[m
|
||||
[31m- role: "",[m
|
||||
[32m+[m[32m role: [],[m
|
||||
});[m
|
||||
const [errors, setErrors] = useState({});[m
|
||||
[m
|
||||
const handleSubmit = async (e) => {[m
|
||||
e.preventDefault();[m
|
||||
[m
|
||||
[31m- const registerForm = { ...form, role: isAdmin ? "admin" : "user" };[m
|
||||
[32m+[m[32m const registerForm = { ...form, role: isAdmin ? ["admin"] : [] };[m
|
||||
const { error } = credentials.validate(registerForm, {[m
|
||||
abortEarly: false,[m
|
||||
context: { password: form.password },[m
|
||||
[1mdiff --git a/Client/src/Validation/validation.js b/Client/src/Validation/validation.js[m
|
||||
[1mindex 779b7c5..00d5a1d 100644[m
|
||||
[1m--- a/Client/src/Validation/validation.js[m
|
||||
[1m+++ b/Client/src/Validation/validation.js[m
|
||||
[36m@@ -68,9 +68,7 @@[m [mconst credentials = joi.object({[m
|
||||
}[m
|
||||
return value;[m
|
||||
}),[m
|
||||
[31m- role: joi.string().messages({[m
|
||||
[31m- "string.empty": "Role is required",[m
|
||||
[31m- }),[m
|
||||
[32m+[m[32m role: joi.array().required(),[m
|
||||
});[m
|
||||
[m
|
||||
const monitorValidation = joi.object({[m
|
||||
[1mdiff --git a/Server/validation/joi.js b/Server/validation/joi.js[m
|
||||
[1mindex a0c5857..ec77363 100644[m
|
||||
[1m--- a/Server/validation/joi.js[m
|
||||
[1m+++ b/Server/validation/joi.js[m
|
||||
[36m@@ -44,7 +44,7 @@[m [mconst registerValidation = joi.object({[m
|
||||
/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*()])[A-Za-z0-9!@#$%^&*()]+$/[m
|
||||
),[m
|
||||
profileImage: joi.any(),[m
|
||||
[31m- role: joi.string().required(),[m
|
||||
[32m+[m[32m role: joi.array().required(),[m
|
||||
});[m
|
||||
[m
|
||||
const editUserParamValidation = joi.object({[m
|
||||
Reference in New Issue
Block a user