diff --git a/dashboard/src/states/Dashboard/pages/Members/components/MemberCreationDialog/MemberCreationDialog.jsx b/dashboard/src/states/Dashboard/pages/Members/components/MemberCreationDialog/MemberCreationDialog.jsx new file mode 100644 index 0000000..350f9d6 --- /dev/null +++ b/dashboard/src/states/Dashboard/pages/Members/components/MemberCreationDialog/MemberCreationDialog.jsx @@ -0,0 +1,104 @@ +import { + Alert, + Button, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + FormControl, + InputLabel, MenuItem, OutlinedInput, Select, + TextField +} from "@mui/material"; +import {patchRequest, putRequest} from "@/common/utils/RequestUtil.js"; +import {useContext, useEffect, useState} from "react"; +import {ProjectContext} from "@/states/Dashboard/contexts/Project"; +import {Mail} from "@mui/icons-material"; + +export const MemberCreationDialog = ({open, onClose, fetchMembers, editUser, setEditUser}) => { + const {currentProject} = useContext(ProjectContext); + + const [mail, setMail] = useState(""); + const [role, setRole] = useState(0); + + const [creationError, setCreationError] = useState(""); + + const updateMail = (event) => { + setCreationError(""); + setMail(event.target.value); + } + + const updateRole = (event) => { + setCreationError(""); + setRole(event.target.value); + } + + const closeDialog = () => { + onClose(); + + setMail(""); + setRole(0); + setCreationError(""); + setEditUser(null); + } + + const inviteMember = async () => { + try { + await putRequest(`/member/${currentProject.id}`, {user: mail, role}); + fetchMembers(); + + closeDialog(); + } catch (e) { + setCreationError(e.message); + } + } + + const editMember = async () => { + try { + await patchRequest(`/member/${currentProject.id}/role`, {userId: editUser.user.id, role}); + fetchMembers(); + + closeDialog(); + } catch (e) { + setCreationError(e.message); + } + } + + const onKeyUp = (event) => { + if (event.key === "Enter") inviteMember(); + } + + useEffect(() => { + if (editUser) { + setRole(editUser.role); + } + }, [editUser]); + + return ( + + {editUser ? "Edit" : "Invite"} member + + + {creationError && {creationError}} + + {!editUser && }}/>} + + + Role + + + + + + + + + ) +} \ No newline at end of file diff --git a/dashboard/src/states/Dashboard/pages/Members/components/MemberCreationDialog/index.js b/dashboard/src/states/Dashboard/pages/Members/components/MemberCreationDialog/index.js new file mode 100644 index 0000000..1958f30 --- /dev/null +++ b/dashboard/src/states/Dashboard/pages/Members/components/MemberCreationDialog/index.js @@ -0,0 +1 @@ +export {MemberCreationDialog as default} from "./MemberCreationDialog.jsx"; \ No newline at end of file