From 5a953a606ffc08d81c53e04560a114a9143eff87 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 20 Jun 2023 23:23:10 +0200 Subject: [PATCH] role sorting order and show user avatars that are in role --- src/Pages/AdminArea/Roles/index.js | 88 +++++++++++++++++++++++++----- src/utils.js | 49 +++++++++++++++++ 2 files changed, 124 insertions(+), 13 deletions(-) diff --git a/src/Pages/AdminArea/Roles/index.js b/src/Pages/AdminArea/Roles/index.js index 0caf018..dbf4173 100644 --- a/src/Pages/AdminArea/Roles/index.js +++ b/src/Pages/AdminArea/Roles/index.js @@ -1,4 +1,5 @@ import { + Avatar, Button, Collapse, Input, @@ -11,6 +12,7 @@ import { } from "antd"; import { Constants, + MyAvatar, SentMessagesCommands, WebSocketContext, } from "../../../utils"; @@ -18,8 +20,8 @@ import { ArrowDownOutlined, ArrowUpOutlined, CloseOutlined, + DeleteOutlined, EditOutlined, - ExpandAltOutlined, PlusOutlined, SaveOutlined, } from "@ant-design/icons"; @@ -76,8 +78,6 @@ export default function AdminAreaRoles() { } } - console.log("createListFromArgument", result); - return result; } @@ -93,8 +93,6 @@ export default function AdminAreaRoles() { (r) => r.RoleId === role.Id ); - console.warn("getRolePermissions", rolePermissions); - if (rolePermissions === undefined || rolePermissions.Permissions === null) { return []; } @@ -144,8 +142,8 @@ export default function AdminAreaRoles() { function Role({ treeData, role, webSocketContext, notificationApi }) { const [editMode, setEditMode] = useState(false); - const [roleDisplayName, setRoleDisplayName] = useState(role.DisplayName); - const [roleDescription, setRoleDescription] = useState(role.Description); + const [roleDisplayName, setRoleDisplayName] = useState(""); + const [roleDescription, setRoleDescription] = useState(""); const getRolePermissions = (role) => { const rolePermissions = webSocketContext.AdminAreaRolesPermissions.find( @@ -201,6 +199,9 @@ function Role({ treeData, role, webSocketContext, notificationApi }) { const onEditClick = () => { setCheckedTreeKeyPermissions(rolePermissions); setEditMode(true); + + setRoleDisplayName(role.DisplayName); + setRoleDescription(role.Description); }; const onSaveClick = () => { @@ -282,6 +283,60 @@ function Role({ treeData, role, webSocketContext, notificationApi }) { setRoleDescription(role.Description); }; + const onMoveUpClick = () => { + webSocketContext.SendSocketMessage( + SentMessagesCommands.AdminAreaUpdateRoleSortingOrder, + { + RoleId: role.Id, + Direction: 0, + } + ); + }; + + const onMoveDownClick = () => { + webSocketContext.SendSocketMessage( + SentMessagesCommands.AdminAreaUpdateRoleSortingOrder, + { + RoleId: role.Id, + Direction: 1, + } + ); + }; + + const UserAvatarsInRole = () => { + const usersInRole = webSocketContext.AllUsers.filter( + (user) => user.RoleId === role.Id + ); + + if (usersInRole.length > 0) { + let avatars = []; + + usersInRole.forEach((user) => { + avatars.push( + + ); + }); + + return ( + + {avatars} + + ); + } + + return null; + }; + return ( + + + + - + onMoveUpClick()} /> - + onMoveDownClick()} /> onSaveClick()} /> @@ -305,9 +363,13 @@ function Role({ treeData, role, webSocketContext, notificationApi }) { ) : ( - - onEditClick()} /> - + + + + + onEditClick()} /> + + ), label: ( <> diff --git a/src/utils.js b/src/utils.js index 98928c5..30c906a 100644 --- a/src/utils.js +++ b/src/utils.js @@ -140,6 +140,7 @@ const ReceivedMessagesCommands = { UserProfileUpdated: 18, AdminAreaNewRoleCreated: 19, AdminAreaRoleUpdated: 20, + AdminAreaUpdateRoleSortingOrder: 21, }; // commands sent to the backend server @@ -152,6 +153,7 @@ export const SentMessagesCommands = { UpdateUserProfile: 6, AdminAreaCreateNewRole: 7, AdminAreaUpdateRole: 8, + AdminAreaUpdateRoleSortingOrder: 9, }; export function WebSocketProvider({ @@ -527,6 +529,11 @@ export function WebSocketProvider({ break; case ReceivedMessagesCommands.AdminAreaNewRoleCreated: setAllRoles((arr) => [...arr, body]); + + setAdminAreaRolesPermissions((arr) => [ + ...arr, + { RoleId: body.Id, Permissions: [] }, + ]); break; case ReceivedMessagesCommands.AdminAreaRoleUpdated: setAllRoles((arr) => { @@ -597,7 +604,49 @@ export function WebSocketProvider({ } } } + break; + case ReceivedMessagesCommands.AdminAreaUpdateRoleSortingOrder: + setAllRoles((arr) => { + const newArr = [...arr]; + const updatedRoleIndex = newArr.findIndex( + (role) => role.Id === body.RoleId + ); + + const currentSortingOrder = newArr[updatedRoleIndex].SortingOrder; + + if (body.Direction === 0) { + newArr[updatedRoleIndex].SortingOrder = + newArr[updatedRoleIndex].SortingOrder - 1; + } else { + newArr[updatedRoleIndex].SortingOrder = + newArr[updatedRoleIndex].SortingOrder + 1; + } + + const newSortingOrder = newArr[updatedRoleIndex].SortingOrder; + + for (let i = 0; i < newArr.length; i++) { + if (newArr[i].Id !== newArr[updatedRoleIndex].Id) { + if (newArr[i].SortingOrder === newSortingOrder) { + newArr[i].SortingOrder = currentSortingOrder; + } else if ( + newArr[i].SortingOrder < currentSortingOrder && + newArr[i].SortingOrder >= newSortingOrder + ) { + newArr[i].SortingOrder = newArr[i].SortingOrder + 1; + } else if ( + newArr[i].SortingOrder > currentSortingOrder && + newArr[i].SortingOrder <= newSortingOrder + ) { + newArr[i].SortingOrder = newArr[i] - 1; + } + } + } + + newArr.sort((a, b) => a.SortingOrder - b.SortingOrder); + + return newArr; + }); break; default: