)
diff --git a/src/app/role/RoleTableRows.jsx b/src/app/role/RoleTableRows.jsx
index 5c44906d31bcc24da8220a392a1eb4b50e4dd520..c937dc003abaa06eb94bcdebe535b758c83843a7 100644
--- a/src/app/role/RoleTableRows.jsx
+++ b/src/app/role/RoleTableRows.jsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useRef, useState } from 'react'
+import React, { useState } from 'react'
import fetchRequest from '../lib/fetchRequest'
import DeleteIcon from "@/static/image/svg/delete.svg"
import EditIcon from "@/static/image/svg/edit.svg"
@@ -50,7 +50,7 @@ const RoleTableRows = ({ name, setRoles, id, privileges, setRoleToUpdate }) => {
<>
|
- {name}
+ {name}
|
diff --git a/src/app/role/UpdateRoleForm.jsx b/src/app/role/UpdateRoleForm.jsx
index e980dbf25c93bfccfd131e934585909e7ee45a26..348ebfce5dc70d57d41f4157b2bb2579c29dafca 100644
--- a/src/app/role/UpdateRoleForm.jsx
+++ b/src/app/role/UpdateRoleForm.jsx
@@ -109,13 +109,13 @@ const UpdateRoleForm = ({ setRoleToUpdate, setRoles, roles, privileges: rolePriv
setRoleToUpdate(null)} className="h-8 w-8 cursor-pointer absolute top-2 right-2 fill-neutral-600" />
-
-
+ :
}
)
diff --git a/src/app/user/CreateUserForm.jsx b/src/app/user/CreateUserForm.jsx
index f06c5ca134640ced18395b607c20c204dee24ca6..1b4540dded96560ea804cbd0e84475a0e820fc27 100644
--- a/src/app/user/CreateUserForm.jsx
+++ b/src/app/user/CreateUserForm.jsx
@@ -3,6 +3,7 @@ import Loader from '@/components/Loader/Loader'
import fetchRequest from '../lib/fetchRequest'
import { useNotification } from '@/context/NotificationContext'
import CancelIcon from "@/static/image/svg/cancel.svg"
+import { EMAIL_REGEX } from '../lib/constants'
@@ -35,7 +36,7 @@ const CreateUserForm = ({ setIsOpen, appendUser }) => {
const [isLoading, setIsLoading] = useState(false)
const [selectedRole, setSelectedRole] = useState(null)
const { toggleNotification } = useNotification()
- const [selectProjects, setSelectedProjects] = useState([])
+ const [selectedProject, setSelectedProject] = useState([])
const [roles, setRoles] = useState(null)
const [projects, setProjects] = useState(null)
@@ -70,144 +71,163 @@ const CreateUserForm = ({ setIsOpen, appendUser }) => {
getRoles()
getProjects()
}, [])
- const handleFieldChange = (event) => setUserData({ ...userData, [event.target.name]: event.target.value })
-
+ const handleFieldChange = (event) => {
+ setUserData({ ...userData, [event.target.name]: event.target.value })
+ setErrors({ ...errors, [event.target.name]: "" })
+ }
+ const [errors, setErrors] = useState({ first_name: "", last_name: "", email: "", role: "" })
const [userData, setUserData] = useState({ email: "", password: generateRandomPassword(), first_name: "", last_name: "" })
+
+ const isValidFields = () => {
+ const localErrors = { first_name: "", last_name: "", email: "", role: "" }
+ if (userData.first_name === "") localErrors.first_name = "Le prénom doit être spécifier."
+ if (userData.last_name === "") localErrors.last_name = "Le nom doit être spécifier."
+ if (!selectedRole) localErrors.role = "Le rôle doit être spécifier."
+ if (!userData.email) localErrors.email = "L'email doit être spécifier."
+ else if (!EMAIL_REGEX.test(userData.email)) localErrors.email = "Votre adresse email n'est pas valide."
+ setErrors({ ...localErrors })
+ return Object.values(localErrors).find((element) => element !== "") === undefined
+ }
const handleSubmit = async (event) => {
event.preventDefault()
- setIsLoading(true)
- const { data, errors, isSuccess, status } = await fetchRequest("/users/", {
- method: "POST",
- body: JSON.stringify({ ...userData, username: userData.email, role: selectedRole.id, project_ids: selectProjects.map((element) => element.id) })
- })
- if (isSuccess) {
- setIsLoading(false)
- setSelectedRole(null)
- appendUser(data.data)
- toggleNotification({
- visible: true,
- message: "Le rôle a été créé avec succès",
- type: "success"
+ if (isValidFields()) {
+ setIsLoading(true)
+ const { data, errors: requestErrors, isSuccess, status } = await fetchRequest("/users/", {
+ method: "POST",
+ body: JSON.stringify({ ...userData, username: userData.email, role: selectedRole, projects: selectedProject })
})
- setIsOpen(false)
- } else {
- setIsLoading(false)
- if (errors.type === "ValidationError") {
- if (errors.detail.name) {
- toggleNotification({
- visible: true,
- message: "Le rôle existe déjà",
- type: "warning"
- })
+ if (isSuccess) {
+ setIsLoading(false)
+ setSelectedRole(null)
+ appendUser(data)
+ toggleNotification({
+ visible: true,
+ message: "L'utilisateur a été créé avec succès",
+ type: "success"
+ })
+ setIsOpen(false)
+ } else {
+ setIsLoading(false)
+ if (requestErrors.type === "ValidationError") {
+ if (requestErrors.detail.email) {
+ setErrors({ ...errors, email: "Cette adresse email est déjà utilisée." })
+ }
+ else if (requestErrors.detail.role) {
+ toggleNotification({
+ visible: true,
+ message: "Erreur de validation de rôle (le rôle peut être supprimé)",
+ type: "warning"
+ })
+ }
+ else {
+ toggleNotification({
+ visible: true,
+ message: "Erreur de validation de utilisateur",
+ type: "warning"
+ })
+ setIsOpen(false)
+ }
}
else {
toggleNotification({
visible: true,
- message: "Erreur de validation de rôle",
- type: "warning"
+ message: "Internal Server Error",
+ type: "error"
})
setIsOpen(false)
}
+ console.log(requestErrors)
}
- else if (status === 409) {
- toggleNotification({
- visible: true,
- message: "role created with 2 or more same privileges",
- type: "error"
- })
- setIsOpen(false)
- } else if (errors.detail === "Privilege matching query does not exist.") {
- toggleNotification({
- visible: true,
- message: "Des privilèges que vous avez utilisés ont été supprimés.",
- type: "warning"
- })
- setIsOpen(false)
- } else {
- toggleNotification({
- visible: true,
- message: "Internal Server Error",
- type: "error"
- })
- setIsOpen(false)
- }
- console.log(errors)
}
+
}
- const handleRoleClick = (newRole) => {
- if (selectedRole?.id === newRole.id) {
- setSelectedRole(null)
- } else {
- setSelectedRole(newRole)
- }
+ const handleRoleChange = (event) => {
+ setErrors({ ...errors, role: "" })
+ if (event.target.value)
+ setSelectedRole(event.target.value)
+ else setSelectedRole(null)
}
- const handleProjectClick = (project) => {
- if (selectProjects.find((element) => element.id === project.id)) {
- setSelectedProjects(selectProjects.filter((element) => element.id !== project.id))
- } else {
- setSelectedProjects([...selectProjects, project])
- }
+ const handleProjectChange = (event) => {
+ if (event.target.value)
+ setSelectedProject([event.target.value])
+ else setSelectedProject([])
}
return (
setIsOpen(false)} className="h-8 w-8 cursor-pointer absolute top-2 right-2 fill-neutral-600" />
- |
- |