From 9fa41e37f32b7c34d410f1b09fde9bede102c40d Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Fri, 15 Jul 2022 15:48:42 +0200 Subject: [PATCH] Show ban reason in Web UI Show and update live the reason given for someone being banned in the Web UI. --- packages/lib/link/messages.js | 1 + packages/master/src/ControlConnection.js | 2 + .../web_ui/src/components/UserViewPage.jsx | 115 ++++++++++-------- 3 files changed, 66 insertions(+), 52 deletions(-) diff --git a/packages/lib/link/messages.js b/packages/lib/link/messages.js index cd0a00c8..5b5361da 100644 --- a/packages/lib/link/messages.js +++ b/packages/lib/link/messages.js @@ -801,6 +801,7 @@ const userProperties = { "is_admin": { type: "boolean" }, "is_banned": { type: "boolean" }, "is_whitelisted": { type: "boolean" }, + "ban_reason": { type: "string" }, "instances": { type: "array", items: { type: "integer" }}, "is_deleted": { type: "boolean" }, "player_stats": PlayerStats.jsonSchema, diff --git a/packages/master/src/ControlConnection.js b/packages/master/src/ControlConnection.js index 37cc1b6c..e60f1fd5 100644 --- a/packages/master/src/ControlConnection.js +++ b/packages/master/src/ControlConnection.js @@ -577,6 +577,7 @@ class ControlConnection extends BaseConnection { is_admin: user.isAdmin, is_banned: user.isBanned, is_whitelisted: user.isWhitelisted, + ban_reason: user.banReason, instances: [...user.instances], player_stats: user.playerStats, instance_stats: [...user.instanceStats], @@ -614,6 +615,7 @@ class ControlConnection extends BaseConnection { is_admin: user.isAdmin, is_banned: user.isBanned, is_whitelisted: user.isWhitelisted, + ban_reason: user.banReason, instances: [...user.instances], player_stats: user.playerStats, instance_stats: [...user.instanceStats], diff --git a/packages/web_ui/src/components/UserViewPage.jsx b/packages/web_ui/src/components/UserViewPage.jsx index 81a11e00..74520464 100644 --- a/packages/web_ui/src/components/UserViewPage.jsx +++ b/packages/web_ui/src/components/UserViewPage.jsx @@ -2,7 +2,7 @@ import React, { useEffect, useContext, useState } from "react"; import { useHistory, useParams } from "react-router-dom"; import { Button, Col, Descriptions, Form, Input, PageHeader, Popconfirm, - Popover, Row, Table, Tag, Select, Space, Spin, Switch, + Row, Table, Tag, Select, Space, Spin, Switch, } from "antd"; import DeleteOutlined from "@ant-design/icons/DeleteOutlined"; @@ -34,9 +34,9 @@ export default function UserViewPage() { let [roles, setRoles] = useState(null); let [form] = Form.useForm(); let [rolesDirty, setRolesDirty] = useState(false); + let [banReasonDirty, setBanReasonDirty] = useState(false); let [applyingRoles, setApplyingRoles] = useState(false); let [rolesError, setRolesError] = useState(); - let [banUserPopover, setBanUserPopover] = useState(false); useEffect(() => { libLink.messages.listRoles.send(control).then(result => { @@ -46,6 +46,16 @@ export default function UserViewPage() { }); }, []); + useEffect(() => { + if ( + account.hasPermission("core.user.set_banned") + && !banReasonDirty + && user["ban_reason"] !== form.getFieldValue("ban_reason") + ) { + form.setFieldsValue({ "ban_reason": user["ban_reason"] }); + } + }, [account, form, user, banReasonDirty]); + let nav = [{ name: "Users", path: "/users" }, { name: userName }]; if (user.loading) { return @@ -215,64 +225,65 @@ export default function UserViewPage() { }} /> - - - {user["is_banned"] ? "Yes" : "No"} - {account.hasPermission("core.user.set_banned") && { - if (!user["is_banned"]) { - setBanUserPopover(!banUserPopover); - } - }} - content={ - - - - - - - + {account.hasPermission("core.user.set_banned") + ? + + + + { + setBanReasonDirty(e.target.value !== user["ban_reason"]); + }} + /> + + + + {user["is_banned"] + ? - - - } - > - - } - - + >Update + + + : + } + + + + : user["is_banned"] + && {user["ban_reason"]} + }