import React, { useState, useEffect, Dispatch, SetStateAction } from 'react' import axios from 'axios' import { Button, Grid, Dialog, DialogContent, DialogActions, TextField, CircularProgress, Autocomplete } from '@mui/material' import { styled } from '@mui/material/styles' import { BootstrapDialogTitle } from '../../components/dialogTitle' import { UserResponse, GroupResponse, RegisterPermissionPayload } from '../../utils/types' const BootstrapDialog = styled(Dialog)(({ theme }) => ({ '& .MuiDialogContent-root': { padding: theme.spacing(2) }, '& .MuiDialogActions-root': { padding: theme.spacing(1) } })) type AddPermissionModalProps = { open: boolean handleOpen: Dispatch> addPermission: (addPermissionPayload: RegisterPermissionPayload) => void } const AddPermissionModal = ({ open, handleOpen, addPermission }: AddPermissionModalProps) => { const [URIs, setURIs] = useState([]) const [loadingURIs, setLoadingURIs] = useState(false) const [uri, setUri] = useState() const [principalType, setPrincipalType] = useState('user') const [userPrincipal, setUserPrincipal] = useState() const [groupPrincipal, setGroupPrincipal] = useState() const [permissionSetting, setPermissionSetting] = useState('Grant') const [loadingPrincipals, setLoadingPrincipals] = useState(false) const [userPrincipals, setUserPrincipals] = useState([]) const [groupPrincipals, setGroupPrincipals] = useState([]) useEffect(() => { setLoadingURIs(true) axios .get('/SASjsApi/info/authorizedRoutes') .then((res: any) => { if (res.data) { setURIs(res.data.URIs) } }) .catch((err) => { console.log(err) }) .finally(() => { setLoadingURIs(false) }) }, []) useEffect(() => { setLoadingPrincipals(true) axios .get(`/SASjsApi/${principalType}`) .then((res: any) => { if (res.data) { if (principalType === 'user') { const users: UserResponse[] = res.data const nonAdminUsers = users.filter((user) => !user.isAdmin) setUserPrincipals(nonAdminUsers) } else { setGroupPrincipals(res.data) } } }) .catch((err) => { console.log(err) }) .finally(() => { setLoadingPrincipals(false) }) }, [principalType]) const handleAddPermission = () => { const addPermissionPayload: any = { uri, setting: permissionSetting, principalType } if (principalType === 'user' && userPrincipal) { addPermissionPayload.principalId = userPrincipal.id } else if (principalType === 'group' && groupPrincipal) { addPermissionPayload.principalId = groupPrincipal.groupId } addPermission(addPermissionPayload) } const addButtonDisabled = !uri || (principalType === 'user' ? !userPrincipal : !groupPrincipal) return ( handleOpen(false)} open={open}> Add Permission setUri(newValue)} renderInput={(params) => loadingURIs ? ( ) : ( ) } /> setPrincipalType(newValue) } renderInput={(params) => ( )} /> {principalType === 'user' ? ( option.displayName} disableClearable value={userPrincipal} onChange={(event: any, newValue: UserResponse) => setUserPrincipal(newValue) } renderInput={(params) => loadingPrincipals ? ( ) : ( ) } /> ) : ( option.name} disableClearable value={groupPrincipal} onChange={(event: any, newValue: GroupResponse) => setGroupPrincipal(newValue) } renderInput={(params) => loadingPrincipals ? ( ) : ( ) } /> )} setPermissionSetting(newValue) } renderInput={(params) => ( )} /> ) } export default AddPermissionModal