role sorting order and show user avatars that are in role
parent
090e50240a
commit
5a953a606f
|
@ -1,4 +1,5 @@
|
||||||
import {
|
import {
|
||||||
|
Avatar,
|
||||||
Button,
|
Button,
|
||||||
Collapse,
|
Collapse,
|
||||||
Input,
|
Input,
|
||||||
|
@ -11,6 +12,7 @@ import {
|
||||||
} from "antd";
|
} from "antd";
|
||||||
import {
|
import {
|
||||||
Constants,
|
Constants,
|
||||||
|
MyAvatar,
|
||||||
SentMessagesCommands,
|
SentMessagesCommands,
|
||||||
WebSocketContext,
|
WebSocketContext,
|
||||||
} from "../../../utils";
|
} from "../../../utils";
|
||||||
|
@ -18,8 +20,8 @@ import {
|
||||||
ArrowDownOutlined,
|
ArrowDownOutlined,
|
||||||
ArrowUpOutlined,
|
ArrowUpOutlined,
|
||||||
CloseOutlined,
|
CloseOutlined,
|
||||||
|
DeleteOutlined,
|
||||||
EditOutlined,
|
EditOutlined,
|
||||||
ExpandAltOutlined,
|
|
||||||
PlusOutlined,
|
PlusOutlined,
|
||||||
SaveOutlined,
|
SaveOutlined,
|
||||||
} from "@ant-design/icons";
|
} from "@ant-design/icons";
|
||||||
|
@ -76,8 +78,6 @@ export default function AdminAreaRoles() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("createListFromArgument", result);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,8 +93,6 @@ export default function AdminAreaRoles() {
|
||||||
(r) => r.RoleId === role.Id
|
(r) => r.RoleId === role.Id
|
||||||
);
|
);
|
||||||
|
|
||||||
console.warn("getRolePermissions", rolePermissions);
|
|
||||||
|
|
||||||
if (rolePermissions === undefined || rolePermissions.Permissions === null) {
|
if (rolePermissions === undefined || rolePermissions.Permissions === null) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
@ -144,8 +142,8 @@ export default function AdminAreaRoles() {
|
||||||
|
|
||||||
function Role({ treeData, role, webSocketContext, notificationApi }) {
|
function Role({ treeData, role, webSocketContext, notificationApi }) {
|
||||||
const [editMode, setEditMode] = useState(false);
|
const [editMode, setEditMode] = useState(false);
|
||||||
const [roleDisplayName, setRoleDisplayName] = useState(role.DisplayName);
|
const [roleDisplayName, setRoleDisplayName] = useState("");
|
||||||
const [roleDescription, setRoleDescription] = useState(role.Description);
|
const [roleDescription, setRoleDescription] = useState("");
|
||||||
|
|
||||||
const getRolePermissions = (role) => {
|
const getRolePermissions = (role) => {
|
||||||
const rolePermissions = webSocketContext.AdminAreaRolesPermissions.find(
|
const rolePermissions = webSocketContext.AdminAreaRolesPermissions.find(
|
||||||
|
@ -201,6 +199,9 @@ function Role({ treeData, role, webSocketContext, notificationApi }) {
|
||||||
const onEditClick = () => {
|
const onEditClick = () => {
|
||||||
setCheckedTreeKeyPermissions(rolePermissions);
|
setCheckedTreeKeyPermissions(rolePermissions);
|
||||||
setEditMode(true);
|
setEditMode(true);
|
||||||
|
|
||||||
|
setRoleDisplayName(role.DisplayName);
|
||||||
|
setRoleDescription(role.Description);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onSaveClick = () => {
|
const onSaveClick = () => {
|
||||||
|
@ -282,6 +283,60 @@ function Role({ treeData, role, webSocketContext, notificationApi }) {
|
||||||
setRoleDescription(role.Description);
|
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(
|
||||||
|
<MyAvatar
|
||||||
|
key={user.Id}
|
||||||
|
avatarWidth={26}
|
||||||
|
avatar={user.Avatar}
|
||||||
|
tooltip
|
||||||
|
tooltipTitle={user.Username}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Avatar.Group
|
||||||
|
maxCount={6}
|
||||||
|
size={28}
|
||||||
|
maxStyle={{ color: "#f56a00", backgroundColor: "#fde3cf" }}
|
||||||
|
>
|
||||||
|
{avatars}
|
||||||
|
</Avatar.Group>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Collapse
|
<Collapse
|
||||||
collapsible={editMode ? "icon" : "header"}
|
collapsible={editMode ? "icon" : "header"}
|
||||||
|
@ -290,12 +345,15 @@ function Role({ treeData, role, webSocketContext, notificationApi }) {
|
||||||
{
|
{
|
||||||
key: "2",
|
key: "2",
|
||||||
extra: editMode ? (
|
extra: editMode ? (
|
||||||
<Space style={{ paddingLeft: 10 }} size="small">
|
<Space key="spaceedit" style={{ paddingLeft: 10 }} size="small">
|
||||||
|
<Tooltip title="Delete">
|
||||||
|
<DeleteOutlined />
|
||||||
|
</Tooltip>
|
||||||
<Tooltip title="Move role up">
|
<Tooltip title="Move role up">
|
||||||
<ArrowUpOutlined />
|
<ArrowUpOutlined onClick={() => onMoveUpClick()} />
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<Tooltip title="Move role down">
|
<Tooltip title="Move role down">
|
||||||
<ArrowDownOutlined />
|
<ArrowDownOutlined onClick={() => onMoveDownClick()} />
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<Tooltip title="Save">
|
<Tooltip title="Save">
|
||||||
<SaveOutlined onClick={() => onSaveClick()} />
|
<SaveOutlined onClick={() => onSaveClick()} />
|
||||||
|
@ -305,9 +363,13 @@ function Role({ treeData, role, webSocketContext, notificationApi }) {
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</Space>
|
</Space>
|
||||||
) : (
|
) : (
|
||||||
|
<Space style={{ paddingLeft: 10 }} size="small" align="start">
|
||||||
|
<UserAvatarsInRole />
|
||||||
|
|
||||||
<Tooltip title="Edit">
|
<Tooltip title="Edit">
|
||||||
<EditOutlined onClick={() => onEditClick()} />
|
<EditOutlined onClick={() => onEditClick()} />
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
</Space>
|
||||||
),
|
),
|
||||||
label: (
|
label: (
|
||||||
<>
|
<>
|
||||||
|
|
49
src/utils.js
49
src/utils.js
|
@ -140,6 +140,7 @@ const ReceivedMessagesCommands = {
|
||||||
UserProfileUpdated: 18,
|
UserProfileUpdated: 18,
|
||||||
AdminAreaNewRoleCreated: 19,
|
AdminAreaNewRoleCreated: 19,
|
||||||
AdminAreaRoleUpdated: 20,
|
AdminAreaRoleUpdated: 20,
|
||||||
|
AdminAreaUpdateRoleSortingOrder: 21,
|
||||||
};
|
};
|
||||||
|
|
||||||
// commands sent to the backend server
|
// commands sent to the backend server
|
||||||
|
@ -152,6 +153,7 @@ export const SentMessagesCommands = {
|
||||||
UpdateUserProfile: 6,
|
UpdateUserProfile: 6,
|
||||||
AdminAreaCreateNewRole: 7,
|
AdminAreaCreateNewRole: 7,
|
||||||
AdminAreaUpdateRole: 8,
|
AdminAreaUpdateRole: 8,
|
||||||
|
AdminAreaUpdateRoleSortingOrder: 9,
|
||||||
};
|
};
|
||||||
|
|
||||||
export function WebSocketProvider({
|
export function WebSocketProvider({
|
||||||
|
@ -527,6 +529,11 @@ export function WebSocketProvider({
|
||||||
break;
|
break;
|
||||||
case ReceivedMessagesCommands.AdminAreaNewRoleCreated:
|
case ReceivedMessagesCommands.AdminAreaNewRoleCreated:
|
||||||
setAllRoles((arr) => [...arr, body]);
|
setAllRoles((arr) => [...arr, body]);
|
||||||
|
|
||||||
|
setAdminAreaRolesPermissions((arr) => [
|
||||||
|
...arr,
|
||||||
|
{ RoleId: body.Id, Permissions: [] },
|
||||||
|
]);
|
||||||
break;
|
break;
|
||||||
case ReceivedMessagesCommands.AdminAreaRoleUpdated:
|
case ReceivedMessagesCommands.AdminAreaRoleUpdated:
|
||||||
setAllRoles((arr) => {
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue