feat: Add sorting to role assigned users table (workspaces asc, users asc) (#5486)
fat: add sorting to role assigned users table (workspaces asc, users asc)
This commit is contained in:
parent
1f3f7a7194
commit
9dbb4bf623
|
|
@ -21,7 +21,8 @@ import {
|
||||||
useTheme,
|
useTheme,
|
||||||
Typography,
|
Typography,
|
||||||
Button,
|
Button,
|
||||||
Drawer
|
Drawer,
|
||||||
|
TableSortLabel
|
||||||
} from '@mui/material'
|
} from '@mui/material'
|
||||||
|
|
||||||
// project imports
|
// project imports
|
||||||
|
|
@ -185,6 +186,8 @@ function ShowRoleRow(props) {
|
||||||
const [openViewPermissionsDrawer, setOpenViewPermissionsDrawer] = useState(false)
|
const [openViewPermissionsDrawer, setOpenViewPermissionsDrawer] = useState(false)
|
||||||
const [selectedRoleId, setSelectedRoleId] = useState('')
|
const [selectedRoleId, setSelectedRoleId] = useState('')
|
||||||
const [assignedUsers, setAssignedUsers] = useState([])
|
const [assignedUsers, setAssignedUsers] = useState([])
|
||||||
|
const [order, setOrder] = useState('asc')
|
||||||
|
const [orderBy, setOrderBy] = useState('workspace')
|
||||||
|
|
||||||
const theme = useTheme()
|
const theme = useTheme()
|
||||||
const customization = useSelector((state) => state.customization)
|
const customization = useSelector((state) => state.customization)
|
||||||
|
|
@ -196,6 +199,38 @@ function ShowRoleRow(props) {
|
||||||
setSelectedRoleId(roleId)
|
setSelectedRoleId(roleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleRequestSort = (property) => {
|
||||||
|
const isAsc = orderBy === property && order === 'asc'
|
||||||
|
setOrder(isAsc ? 'desc' : 'asc')
|
||||||
|
setOrderBy(property)
|
||||||
|
}
|
||||||
|
|
||||||
|
const sortedAssignedUsers = [...assignedUsers].sort((a, b) => {
|
||||||
|
let comparison = 0
|
||||||
|
|
||||||
|
if (orderBy === 'workspace') {
|
||||||
|
const workspaceA = (a.workspace?.name || '').toLowerCase()
|
||||||
|
const workspaceB = (b.workspace?.name || '').toLowerCase()
|
||||||
|
comparison = workspaceA.localeCompare(workspaceB)
|
||||||
|
if (comparison === 0) {
|
||||||
|
const userA = (a.user?.name || a.user?.email || '').toLowerCase()
|
||||||
|
const userB = (b.user?.name || b.user?.email || '').toLowerCase()
|
||||||
|
comparison = userA.localeCompare(userB)
|
||||||
|
}
|
||||||
|
} else if (orderBy === 'user') {
|
||||||
|
const userA = (a.user?.name || a.user?.email || '').toLowerCase()
|
||||||
|
const userB = (b.user?.name || b.user?.email || '').toLowerCase()
|
||||||
|
comparison = userA.localeCompare(userB)
|
||||||
|
if (comparison === 0) {
|
||||||
|
const workspaceA = (a.workspace?.name || '').toLowerCase()
|
||||||
|
const workspaceB = (b.workspace?.name || '').toLowerCase()
|
||||||
|
comparison = workspaceA.localeCompare(workspaceB)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return order === 'asc' ? comparison : -comparison
|
||||||
|
})
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (getAllUsersByRoleIdApi.data) {
|
if (getAllUsersByRoleIdApi.data) {
|
||||||
setAssignedUsers(getAllUsersByRoleIdApi.data)
|
setAssignedUsers(getAllUsersByRoleIdApi.data)
|
||||||
|
|
@ -203,12 +238,14 @@ function ShowRoleRow(props) {
|
||||||
}, [getAllUsersByRoleIdApi.data])
|
}, [getAllUsersByRoleIdApi.data])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (open && selectedRoleId) {
|
if (openAssignedUsersDrawer && selectedRoleId) {
|
||||||
getAllUsersByRoleIdApi.request(selectedRoleId)
|
getAllUsersByRoleIdApi.request(selectedRoleId)
|
||||||
} else {
|
} else {
|
||||||
setOpenAssignedUsersDrawer(false)
|
setOpenAssignedUsersDrawer(false)
|
||||||
setSelectedRoleId('')
|
setSelectedRoleId('')
|
||||||
setAssignedUsers([])
|
setAssignedUsers([])
|
||||||
|
setOrder('asc')
|
||||||
|
setOrderBy('workspace')
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [openAssignedUsersDrawer])
|
}, [openAssignedUsersDrawer])
|
||||||
|
|
@ -301,12 +338,28 @@ function ShowRoleRow(props) {
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<StyledTableCell sx={{ width: '50%' }}>User</StyledTableCell>
|
<StyledTableCell sx={{ width: '50%' }}>
|
||||||
<StyledTableCell sx={{ width: '50%' }}>Workspace</StyledTableCell>
|
<TableSortLabel
|
||||||
|
active={orderBy === 'user'}
|
||||||
|
direction={orderBy === 'user' ? order : 'asc'}
|
||||||
|
onClick={() => handleRequestSort('user')}
|
||||||
|
>
|
||||||
|
User
|
||||||
|
</TableSortLabel>
|
||||||
|
</StyledTableCell>
|
||||||
|
<StyledTableCell sx={{ width: '50%' }}>
|
||||||
|
<TableSortLabel
|
||||||
|
active={orderBy === 'workspace'}
|
||||||
|
direction={orderBy === 'workspace' ? order : 'asc'}
|
||||||
|
onClick={() => handleRequestSort('workspace')}
|
||||||
|
>
|
||||||
|
Workspace
|
||||||
|
</TableSortLabel>
|
||||||
|
</StyledTableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
{assignedUsers.map((item, index) => (
|
{sortedAssignedUsers.map((item, index) => (
|
||||||
<TableRow key={index}>
|
<TableRow key={index}>
|
||||||
<StyledTableCell>{item.user.name || item.user.email}</StyledTableCell>
|
<StyledTableCell>{item.user.name || item.user.email}</StyledTableCell>
|
||||||
<StyledTableCell>{item.workspace.name}</StyledTableCell>
|
<StyledTableCell>{item.workspace.name}</StyledTableCell>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue