import React, { useState } from 'react' import { useTranslation } from 'react-i18next' import { useAuthState } from '@xrengine/client-core/src/user/services/AuthService' import { ProjectInterface } from '@xrengine/common/src/interfaces/ProjectInterface' import { ProjectPermissionInterface } from '@xrengine/common/src/interfaces/ProjectPermissionInterface' import HighlightOffIcon from '@mui/icons-material/HighlightOff' import { Dialog, DialogContent, DialogTitle, TextField } from '@mui/material' import Fade from '@mui/material/Fade' import FormControl from '@mui/material/FormControl' import IconButton from '@mui/material/IconButton' import List from '@mui/material/List' import ListItem from '@mui/material/ListItem' import ListItemText from '@mui/material/ListItemText' import Switch from '@mui/material/Switch' import { Button } from '../inputs/Button' import styles from './styles.module.scss' interface Props { open: boolean onClose: any projectPermissions: ProjectPermissionInterface[] project: ProjectInterface removePermission: (id: string) => Promise addPermission: (userId: string, projectId: string) => Promise patchPermission: (id: string, role: string) => Promise } export const EditPermissionsDialog = ({ open, onClose, project, addPermission, patchPermission, removePermission }: Props): any => { const { t } = useTranslation() const [error, setError] = useState('') const [userInviteCode, setUserInviteCode] = useState('') const onCreatePermission = async () => { if (!userInviteCode) return setError('') try { await addPermission(userInviteCode, project.id) } catch (err) { setError(err.message) } setUserInviteCode('') } const onRemovePermission = async (id: string) => { try { await removePermission(id) } catch (err) { setError(err.message) } } const onPatchPermission = async (permission: ProjectPermissionInterface) => { try { await patchPermission(permission.id, permission.type === 'owner' ? 'user' : 'owner') } catch (err) { setError(err.message) } } const handleSubmitOnEnter = async (event) => { if (event.key === 'Enter') await onCreatePermission() } const closeDialog = () => { setUserInviteCode('') onClose() } const selfUser = useAuthState().user const selfUserPermission = project.project_permissions?.find((permission) => permission.userId === selfUser.id.value)?.type === 'owner' ? 'owner' : 'user' return ( {`${t('editor.projects.editProjectPermissions')}: ${project.name}`} {selfUserPermission === 'owner' && ( setUserInviteCode(e.target.value)} onKeyDown={handleSubmitOnEnter} /> {error && error.length > 0 &&

{error}

}
)} {project.project_permissions && ( {project.project_permissions.map((permission) => ( onPatchPermission(permission)} checked={permission.type === 'owner'} inputProps={{ 'aria-labelledby': permission.id }} disabled={selfUserPermission !== 'owner' || selfUser.id.value === permission.userId} /> {selfUserPermission === 'owner' && selfUser.id.value !== permission.userId && ( onRemovePermission(permission.id)}> )} ))} )}
) }