From 9dbb4bf623b6261ca9442441d6c039b85d2f3bfe Mon Sep 17 00:00:00 2001 From: Neha Prasad Date: Wed, 26 Nov 2025 04:26:37 +0530 Subject: [PATCH] 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) --- packages/ui/src/views/roles/index.jsx | 63 ++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 5 deletions(-) diff --git a/packages/ui/src/views/roles/index.jsx b/packages/ui/src/views/roles/index.jsx index 3254339de..d090c4acb 100644 --- a/packages/ui/src/views/roles/index.jsx +++ b/packages/ui/src/views/roles/index.jsx @@ -21,7 +21,8 @@ import { useTheme, Typography, Button, - Drawer + Drawer, + TableSortLabel } from '@mui/material' // project imports @@ -185,6 +186,8 @@ function ShowRoleRow(props) { const [openViewPermissionsDrawer, setOpenViewPermissionsDrawer] = useState(false) const [selectedRoleId, setSelectedRoleId] = useState('') const [assignedUsers, setAssignedUsers] = useState([]) + const [order, setOrder] = useState('asc') + const [orderBy, setOrderBy] = useState('workspace') const theme = useTheme() const customization = useSelector((state) => state.customization) @@ -196,6 +199,38 @@ function ShowRoleRow(props) { 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(() => { if (getAllUsersByRoleIdApi.data) { setAssignedUsers(getAllUsersByRoleIdApi.data) @@ -203,12 +238,14 @@ function ShowRoleRow(props) { }, [getAllUsersByRoleIdApi.data]) useEffect(() => { - if (open && selectedRoleId) { + if (openAssignedUsersDrawer && selectedRoleId) { getAllUsersByRoleIdApi.request(selectedRoleId) } else { setOpenAssignedUsersDrawer(false) setSelectedRoleId('') setAssignedUsers([]) + setOrder('asc') + setOrderBy('workspace') } // eslint-disable-next-line react-hooks/exhaustive-deps }, [openAssignedUsersDrawer]) @@ -301,12 +338,28 @@ function ShowRoleRow(props) { }} > - User - Workspace + + handleRequestSort('user')} + > + User + + + + handleRequestSort('workspace')} + > + Workspace + + - {assignedUsers.map((item, index) => ( + {sortedAssignedUsers.map((item, index) => ( {item.user.name || item.user.email} {item.workspace.name}