Merge pull request #431 from bluewave-labs/feat/udpate-roles

Feat/update roles
This commit is contained in:
Alexander Holliday
2024-07-23 11:39:17 -07:00
committed by GitHub
5 changed files with 77 additions and 15 deletions

View File

@@ -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

View File

@@ -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 },

View File

@@ -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({

View File

@@ -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
View File

@@ -0,0 +1,62 @@
diff --git a/Client/src/Pages/Auth/Register/Register.jsx b/Client/src/Pages/Auth/Register/Register.jsx
index 1eaa99f..a5db763 100644
--- a/Client/src/Pages/Auth/Register/Register.jsx
+++ b/Client/src/Pages/Auth/Register/Register.jsx
@@ -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 },
diff --git a/Client/src/Validation/validation.js b/Client/src/Validation/validation.js
index 779b7c5..00d5a1d 100644
--- a/Client/src/Validation/validation.js
+++ b/Client/src/Validation/validation.js
@@ -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({
diff --git a/Server/validation/joi.js b/Server/validation/joi.js
index a0c5857..ec77363 100644
--- a/Server/validation/joi.js
+++ b/Server/validation/joi.js
@@ -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({