diff --git a/dashboard/src/states/Dashboard/pages/Groups/components/GroupPermissionDialog/GroupPermissionDialog.jsx b/dashboard/src/states/Dashboard/pages/Groups/components/GroupPermissionDialog/GroupPermissionDialog.jsx new file mode 100644 index 0000000..fd61fd6 --- /dev/null +++ b/dashboard/src/states/Dashboard/pages/Groups/components/GroupPermissionDialog/GroupPermissionDialog.jsx @@ -0,0 +1,92 @@ +import { + Button, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + Stack, + Switch, + Typography +} from "@mui/material"; +import {getRequest, patchRequest} from "@/common/utils/RequestUtil.js"; +import {useContext, useEffect, useState} from "react"; +import {ProjectContext} from "@/states/Dashboard/contexts/Project"; +import {AdminPanelSettings} from "@mui/icons-material"; + +export const GroupPermissionDialog = ({group, onClose, fetchGroups}) => { + const {currentProject} = useContext(ProjectContext); + + const [permissions, setPermissions] = useState([]); + const [selectedPermissions, setSelectedPermissions] = useState([]); + + const closeDialog = () => { + onClose(); + + setSelectedPermissions([]); + } + + const updateGroupPermissions = async () => { + try { + await patchRequest(`/group/${currentProject.id}/${group.name}`, {permissions: selectedPermissions}); + fetchGroups(); + + closeDialog(); + } catch (e) { + console.error(e); + } + } + + const updateLocal = (permission) => { + setSelectedPermissions(prev => { + if (prev.includes(permission)) { + return prev.filter(p => p !== permission); + } else { + return [...prev, permission]; + } + }); + } + + useEffect(() => { + if (!group) return; + + setSelectedPermissions(group.permissions); + }, [group]); + + useEffect(() => { + const fetchPermissions = async () => { + try { + const data = await getRequest(`/permission/${currentProject.id}/list`); + + if (!data) return; + + setPermissions(data); + } catch (e) { + console.error(e); + } + } + + fetchPermissions(); + }, []); + + return ( + + Update permissions + + {permissions.map(({permission}, index) => ( + + + + {permission} + + updateLocal(permission)}/> + + ))} + + + + + + + ) +} \ No newline at end of file diff --git a/dashboard/src/states/Dashboard/pages/Groups/components/GroupPermissionDialog/index.js b/dashboard/src/states/Dashboard/pages/Groups/components/GroupPermissionDialog/index.js new file mode 100644 index 0000000..8c93d2a --- /dev/null +++ b/dashboard/src/states/Dashboard/pages/Groups/components/GroupPermissionDialog/index.js @@ -0,0 +1 @@ +export {GroupPermissionDialog as default} from "./GroupPermissionDialog.jsx"; \ No newline at end of file