1
0
mirror of https://github.com/sasjs/server.git synced 2025-12-11 19:44:35 +00:00

fix: move permission filter modal to separate file and icons for different actions

This commit is contained in:
2022-05-17 15:42:29 +05:00
parent 5652325452
commit d000f7508f
2 changed files with 156 additions and 123 deletions

View File

@@ -1,8 +1,7 @@
import React, { useState, useEffect, Dispatch, SetStateAction } from 'react' import React, { useState, useEffect } from 'react'
import axios from 'axios' import axios from 'axios'
import { import {
Box, Box,
Button,
Table, Table,
TableBody, TableBody,
TableCell, TableCell,
@@ -13,18 +12,17 @@ import {
Grid, Grid,
CircularProgress, CircularProgress,
IconButton, IconButton,
Dialog, Tooltip
DialogContent,
DialogActions,
TextField
} from '@mui/material' } from '@mui/material'
import Autocomplete from '@mui/material/Autocomplete'
import FilterListIcon from '@mui/icons-material/FilterList' import FilterListIcon from '@mui/icons-material/FilterList'
import AddIcon from '@mui/icons-material/Add'
import EditIcon from '@mui/icons-material/Edit'
import DeleteForeverIcon from '@mui/icons-material/DeleteForever'
import { styled } from '@mui/material/styles' import { styled } from '@mui/material/styles'
import { BootstrapDialogTitle } from '../../components/dialogTitle' import PermissionFilterModal from './permissionFilterModal'
interface UserResponse { interface UserResponse {
id: number id: number
@@ -38,7 +36,7 @@ interface GroupResponse {
description: string description: string
} }
interface PermissionResponse { export interface PermissionResponse {
permissionId: number permissionId: number
uri: string uri: string
setting: string setting: string
@@ -50,15 +48,6 @@ const BootstrapTableCell = styled(TableCell)({
textAlign: 'left' textAlign: 'left'
}) })
const BootstrapDialog = styled(Dialog)(({ theme }) => ({
'& .MuiDialogContent-root': {
padding: theme.spacing(2)
},
'& .MuiDialogActions-root': {
padding: theme.spacing(1)
}
}))
const Permission = () => { const Permission = () => {
const [isLoading, setIsLoading] = useState(false) const [isLoading, setIsLoading] = useState(false)
const [filterModalOpen, setFilterModalOpen] = useState(false) const [filterModalOpen, setFilterModalOpen] = useState(false)
@@ -147,10 +136,17 @@ const Permission = () => {
<Box className="permissions-page"> <Box className="permissions-page">
<Grid container direction="column" spacing={1}> <Grid container direction="column" spacing={1}>
<Grid item xs={12}> <Grid item xs={12}>
<Paper elevation={3}> <Paper elevation={3} sx={{ display: 'flex' }}>
<Tooltip title="Filter Permissions">
<IconButton> <IconButton>
<FilterListIcon onClick={() => setFilterModalOpen(true)} /> <FilterListIcon onClick={() => setFilterModalOpen(true)} />
</IconButton> </IconButton>
</Tooltip>
<Tooltip title="Add Permission" placement="bottom-end">
<IconButton sx={{ flexGrow: 1, justifyContent: 'flex-end' }}>
<AddIcon />
</IconButton>
</Tooltip>
</Paper> </Paper>
</Grid> </Grid>
<Grid item xs={12}> <Grid item xs={12}>
@@ -159,7 +155,7 @@ const Permission = () => {
/> />
</Grid> </Grid>
</Grid> </Grid>
<FilterModal <PermissionFilterModal
open={filterModalOpen} open={filterModalOpen}
handleClose={setFilterModalOpen} handleClose={setFilterModalOpen}
permissions={permissions} permissions={permissions}
@@ -191,6 +187,7 @@ const PermissionTable = ({ permissions }: PermissionTableProps) => {
<BootstrapTableCell>Uri</BootstrapTableCell> <BootstrapTableCell>Uri</BootstrapTableCell>
<BootstrapTableCell>Principal</BootstrapTableCell> <BootstrapTableCell>Principal</BootstrapTableCell>
<BootstrapTableCell>Setting</BootstrapTableCell> <BootstrapTableCell>Setting</BootstrapTableCell>
<BootstrapTableCell>Action</BootstrapTableCell>
</TableRow> </TableRow>
</TableHead> </TableHead>
<TableBody> <TableBody>
@@ -201,6 +198,18 @@ const PermissionTable = ({ permissions }: PermissionTableProps) => {
{displayPrincipal(permission)} {displayPrincipal(permission)}
</BootstrapTableCell> </BootstrapTableCell>
<BootstrapTableCell>{permission.setting}</BootstrapTableCell> <BootstrapTableCell>{permission.setting}</BootstrapTableCell>
<BootstrapTableCell>
<Tooltip title="Edit Permission">
<IconButton>
<EditIcon />
</IconButton>
</Tooltip>
<Tooltip title="Delete Permission">
<IconButton color="error">
<DeleteForeverIcon />
</IconButton>
</Tooltip>
</BootstrapTableCell>
</TableRow> </TableRow>
))} ))}
</TableBody> </TableBody>
@@ -216,103 +225,3 @@ const displayPrincipal = (permission: PermissionResponse) => {
return permission.group?.name return permission.group?.name
} }
} }
type FilterModalProps = {
open: boolean
handleClose: Dispatch<SetStateAction<boolean>>
permissions: PermissionResponse[]
uriFilter: string[]
setUriFilter: Dispatch<SetStateAction<string[]>>
principalFilter: string[]
setPrincipalFilter: Dispatch<SetStateAction<string[]>>
settingFilter: string[]
setSettingFilter: Dispatch<SetStateAction<string[]>>
applyFilter: () => void
resetFilter: () => void
}
const FilterModal = ({
open,
handleClose,
permissions,
uriFilter,
setUriFilter,
principalFilter,
setPrincipalFilter,
settingFilter,
setSettingFilter,
applyFilter,
resetFilter
}: FilterModalProps) => {
const URIs = permissions.map((permission) => permission.uri)
const principals = permissions
.map((permission) => {
if (permission.user) return permission.user.displayName
if (permission.group) return permission.group.name
return ''
})
.filter((principal) => principal !== '')
return (
<BootstrapDialog onClose={handleClose} open={open}>
<BootstrapDialogTitle
id="permission-filter-dialog-title"
onClose={handleClose}
>
Permission Filter
</BootstrapDialogTitle>
<DialogContent dividers>
<Grid container spacing={1}>
<Grid item xs={12}>
<Autocomplete
multiple
options={URIs}
filterSelectedOptions
value={uriFilter}
onChange={(event: any, newValue: string[]) => {
setUriFilter(newValue)
}}
renderInput={(params) => <TextField {...params} label="URIs" />}
/>
</Grid>
<Grid item xs={12}>
<Autocomplete
multiple
options={principals}
filterSelectedOptions
value={principalFilter}
onChange={(event: any, newValue: string[]) => {
setPrincipalFilter(newValue)
}}
renderInput={(params) => (
<TextField {...params} label="Principals" />
)}
/>
</Grid>
<Grid item xs={12}>
<Autocomplete
multiple
options={['Grant', 'Deny']}
filterSelectedOptions
value={settingFilter}
onChange={(event: any, newValue: string[]) => {
setSettingFilter(newValue)
}}
renderInput={(params) => (
<TextField {...params} label="Settings" />
)}
/>
</Grid>
</Grid>
</DialogContent>
<DialogActions>
<Button variant="outlined" color="error" onClick={resetFilter}>
Reset
</Button>
<Button variant="outlined" onClick={applyFilter}>
Apply
</Button>
</DialogActions>
</BootstrapDialog>
)
}

View File

@@ -0,0 +1,124 @@
import React, { Dispatch, SetStateAction } from 'react'
import {
Button,
Grid,
Dialog,
DialogContent,
DialogActions,
TextField
} from '@mui/material'
import { styled } from '@mui/material/styles'
import Autocomplete from '@mui/material/Autocomplete'
import { PermissionResponse } from './permission'
import { BootstrapDialogTitle } from '../../components/dialogTitle'
const BootstrapDialog = styled(Dialog)(({ theme }) => ({
'& .MuiDialogContent-root': {
padding: theme.spacing(2)
},
'& .MuiDialogActions-root': {
padding: theme.spacing(1)
}
}))
type FilterModalProps = {
open: boolean
handleClose: Dispatch<SetStateAction<boolean>>
permissions: PermissionResponse[]
uriFilter: string[]
setUriFilter: Dispatch<SetStateAction<string[]>>
principalFilter: string[]
setPrincipalFilter: Dispatch<SetStateAction<string[]>>
settingFilter: string[]
setSettingFilter: Dispatch<SetStateAction<string[]>>
applyFilter: () => void
resetFilter: () => void
}
const PermissionFilterModal = ({
open,
handleClose,
permissions,
uriFilter,
setUriFilter,
principalFilter,
setPrincipalFilter,
settingFilter,
setSettingFilter,
applyFilter,
resetFilter
}: FilterModalProps) => {
const URIs = permissions.map((permission) => permission.uri)
const principals = permissions
.map((permission) => {
if (permission.user) return permission.user.displayName
if (permission.group) return permission.group.name
return ''
})
.filter((principal) => principal !== '')
return (
<BootstrapDialog onClose={handleClose} open={open}>
<BootstrapDialogTitle
id="permission-filter-dialog-title"
onClose={handleClose}
>
Permission Filter
</BootstrapDialogTitle>
<DialogContent dividers>
<Grid container spacing={1}>
<Grid item xs={12}>
<Autocomplete
multiple
options={URIs}
filterSelectedOptions
value={uriFilter}
onChange={(event: any, newValue: string[]) => {
setUriFilter(newValue)
}}
renderInput={(params) => <TextField {...params} label="URIs" />}
/>
</Grid>
<Grid item xs={12}>
<Autocomplete
multiple
options={principals}
filterSelectedOptions
value={principalFilter}
onChange={(event: any, newValue: string[]) => {
setPrincipalFilter(newValue)
}}
renderInput={(params) => (
<TextField {...params} label="Principals" />
)}
/>
</Grid>
<Grid item xs={12}>
<Autocomplete
multiple
options={['Grant', 'Deny']}
filterSelectedOptions
value={settingFilter}
onChange={(event: any, newValue: string[]) => {
setSettingFilter(newValue)
}}
renderInput={(params) => (
<TextField {...params} label="Settings" />
)}
/>
</Grid>
</Grid>
</DialogContent>
<DialogActions>
<Button variant="outlined" color="error" onClick={resetFilter}>
Reset
</Button>
<Button variant="outlined" onClick={applyFilter}>
Apply
</Button>
</DialogActions>
</BootstrapDialog>
)
}
export default PermissionFilterModal