From 7f6af3c30480b1718de5848d2c93dd43b4165a1b Mon Sep 17 00:00:00 2001 From: WolverinDEV Date: Fri, 12 Mar 2021 18:12:23 +0100 Subject: [PATCH] Fixed some minor permission related ui issues --- ChangeLog.md | 2 + shared/js/ui/modal/ModalGroupCreate.tsx | 4 +- .../permission/ModalPermissionEditor.tsx | 78 ++++++++++--------- shared/js/ui/modal/permission/TabHandler.tsx | 18 ++--- 4 files changed, 55 insertions(+), 47 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 1e6c8bed..126b5e5b 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -2,6 +2,8 @@ * **12.03.21** - Added a new video spotlight mode which allows showing multiple videos at the same time as well as dragging and resizing them + - Fixed a minor bug within the permission editor + - Fixed the creation of channel groups * **20.02.21** - Improved the browser IPC module diff --git a/shared/js/ui/modal/ModalGroupCreate.tsx b/shared/js/ui/modal/ModalGroupCreate.tsx index c4254181..01089892 100644 --- a/shared/js/ui/modal/ModalGroupCreate.tsx +++ b/shared/js/ui/modal/ModalGroupCreate.tsx @@ -328,13 +328,13 @@ function initializeGroupCreateController(connection: ConnectionHandler, events: let promise: Promise; if(event.source <= 0) { /* real group create */ - promise = connection.serverConnection.send_command("servergroupadd", { + promise = connection.serverConnection.send_command(target + "groupadd", { name: event.name, type: event.target === "query" ? 2 : event.target === "template" ? 0 : 1 }); } else { /* group copy */ - promise = connection.serverConnection.send_command("servergroupcopy", { + promise = connection.serverConnection.send_command(target + "groupcopy", { ssgid: event.source, name: event.name, type: event.target === "query" ? 2 : event.target === "template" ? 0 : 1 diff --git a/shared/js/ui/modal/permission/ModalPermissionEditor.tsx b/shared/js/ui/modal/permission/ModalPermissionEditor.tsx index 0c89e753..935874da 100644 --- a/shared/js/ui/modal/permission/ModalPermissionEditor.tsx +++ b/shared/js/ui/modal/permission/ModalPermissionEditor.tsx @@ -104,7 +104,7 @@ export interface PermissionModalEvents { } action_set_permission_editor_subject: { - mode: PermissionEditorSubject; + mode: PermissionEditorSubject | undefined; groupId?: number; channelId?: number; @@ -160,42 +160,27 @@ export interface PermissionModalEvents { query_groups: { target: "server" | "channel", }, - query_groups_result: { - target: "server" | "channel", - groups: GroupProperties[] - }, query_group_clients: { id: number }, - query_group_clients_result: { - id: number, - status: "success" | "error" | "no-permissions", - error?: string; - clients?: { - name: string; - databaseId: number; - uniqueId: string; - }[] - }, - query_channels: {}, - query_channels_result: { - channels: ChannelInfo[] - } - - query_client_permissions: {}, /* will cause the notify_client_permissions */ + query_client_permissions: {}, query_client_info: { client: number | string; /* client database id or unique id */ }, - query_client_info_result: { + + + notify_channels: { + channels: ChannelInfo[] + }, + notify_client_info: { client: number | string; state: "success" | "error" | "no-such-client" | "no-permission"; error?: string; info?: { name: string, uniqueId: string, databaseId: number }, failedPermission?: string; - } - + }, notify_group_updated: { target: "server" | "channel"; id: number; @@ -210,8 +195,21 @@ export interface PermissionModalEvents { target: "server" | "channel"; groups: number[] }, - - notify_groups_reset: {} + notify_group_clients: { + id: number, + status: "success" | "error" | "no-permissions", + error?: string; + clients?: { + name: string; + databaseId: number; + uniqueId: string; + }[] + }, + notify_groups_reset: {}, + notify_groups: { + target: "server" | "channel", + groups: GroupProperties[] + }, notify_client_permissions: { permissionModifyPower: number; @@ -417,7 +415,7 @@ const stringifyError = error => { function initializePermissionModalController(connection: ConnectionHandler, events: Registry) { events.on("query_groups", event => { const groups = event.target === "server" ? connection.groups.serverGroups : connection.groups.channelGroups; - events.fire_react("query_groups_result", { + events.fire_react("notify_groups", { target: event.target, groups: groups.map(group => { return { id: group.id, @@ -613,6 +611,14 @@ function initializePermissionModalController(connection: ConnectionHandler, even clientPermissionList: connection.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_CLIENT_PERMISSION_LIST).granted(1), clientChannelPermissionList: connection.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_CHANNELCLIENT_PERMISSION_LIST).granted(1), }); + + /* Update the permission subject (we may now have or not have any more the permissions to edit him) */ + events.fire("action_set_permission_editor_subject", { + channelId: undefined, + clientDatabaseId: undefined, + groupId: undefined, + mode: undefined + }); }; events.on("query_client_permissions", () => sendClientPermissions()); @@ -621,7 +627,7 @@ function initializePermissionModalController(connection: ConnectionHandler, even events.on("query_group_clients", event => { connection.serverConnection.command_helper.requestClientsByServerGroup(event.id).then(clients => { - events.fire("query_group_clients_result", { + events.fire("notify_group_clients", { id: event.id, status: "success", clients: clients.map(e => { return { name: e.client_nickname, @@ -632,12 +638,12 @@ function initializePermissionModalController(connection: ConnectionHandler, even }); }).catch(error => { if (error instanceof CommandResult && error.id === ErrorCode.SERVER_INSUFFICIENT_PERMISSIONS) { - events.fire("query_group_clients_result", {id: event.id, status: "no-permissions"}); + events.fire("notify_group_clients", {id: event.id, status: "no-permissions"}); return; } logWarn(LogCategory.PERMISSIONS, tr("Failed to request server group client list: %o"), error); - events.fire("query_group_clients_result", {id: event.id, status: "error", error: stringifyError(error)}); + events.fire("notify_group_clients", {id: event.id, status: "error", error: stringifyError(error)}); }); }); @@ -713,7 +719,7 @@ function initializePermissionModalController(connection: ConnectionHandler, even })); events.on("query_channels", () => { - events.fire_react("query_channels_result", { + events.fire_react("notify_channels", { channels: connection.channelTree.channelsOrdered().map(e => { return { id: e.channelId, @@ -734,13 +740,13 @@ function initializePermissionModalController(connection: ConnectionHandler, even } promise.then(result => { if (result.length === 0) { - events.fire("query_client_info_result", { + events.fire("notify_client_info", { client: event.client, state: "no-such-client" }); return; } - events.fire("query_client_info_result", { + events.fire("notify_client_info", { client: event.client, state: "success", info: { @@ -751,7 +757,7 @@ function initializePermissionModalController(connection: ConnectionHandler, even }); }).catch(error => { if (error instanceof CommandResult) { - events.fire("query_client_info_result", { + events.fire("notify_client_info", { client: event.client, state: "no-permission", failedPermission: connection.permissions.resolveInfo(parseInt(error.json["failed_permid"]))?.name || tr("unknwon") @@ -760,7 +766,7 @@ function initializePermissionModalController(connection: ConnectionHandler, even } logWarn(LogCategory.PERMISSIONS, tr("Failed to query client info for %o: %o"), event.client, error); - events.fire("query_client_info_result", { + events.fire("notify_client_info", { client: event.client, state: "error", error: stringifyError(error) @@ -849,7 +855,7 @@ function initializePermissionEditor(connection: ConnectionHandler, modalEvents: clientDatabaseId = typeof event.clientDatabaseId === "number" ? event.clientDatabaseId : clientDatabaseId; groupId = typeof event.groupId === "number" ? event.groupId : groupId; - mode = event.mode; + mode = event.mode || mode; let editorMode: "unset" | "normal" = "unset"; switch (mode) { diff --git a/shared/js/ui/modal/permission/TabHandler.tsx b/shared/js/ui/modal/permission/TabHandler.tsx index d02302ef..decd8fea 100644 --- a/shared/js/ui/modal/permission/TabHandler.tsx +++ b/shared/js/ui/modal/permission/TabHandler.tsx @@ -323,8 +323,8 @@ class GroupsList extends React.Component<{ connection: ConnectionHandler, events this.groups.splice(0, this.groups.length); } - @EventHandler("query_groups_result") - private handleQueryResult(event: PermissionModalEvents["query_groups_result"]) { + @EventHandler("notify_groups") + private handleQueryResult(event: PermissionModalEvents["notify_groups"]) { if (event.target !== this.props.target) return; @@ -585,8 +585,8 @@ class ServerClientList extends React.Component<{ connection: ConnectionHandler, this.setState({state: "loading"}); } - @EventHandler("query_group_clients_result") - private handleQueryClientsResult(event: PermissionModalEvents["query_group_clients_result"]) { + @EventHandler("notify_group_clients") + private handleQueryClientsResult(event: PermissionModalEvents["notify_group_clients"]) { if (event.id !== this.state.selectedGroupId) return; @@ -642,8 +642,8 @@ class ServerClientList extends React.Component<{ connection: ConnectionHandler, }); } - @EventHandler("query_groups_result") - private handleQueryResult(event: PermissionModalEvents["query_groups_result"]) { + @EventHandler("notify_groups") + private handleQueryResult(event: PermissionModalEvents["notify_groups"]) { if (event.target !== "server") return; @@ -862,8 +862,8 @@ class ChannelList extends React.Component<{ connection: ConnectionHandler, event this.props.events.fire("query_channels"); } - @EventHandler("query_channels_result") - private handleQueryChannelsResult(event: PermissionModalEvents["query_channels_result"]) { + @EventHandler("notify_channels") + private handleQueryChannelsResult(event: PermissionModalEvents["notify_channels"]) { this.channels = event.channels.slice(0); if (this.channels.length > 0 && this.channels.findIndex(e => e.id === this.state.selectedChanelId) === -1) this.setState({selectedChanelId: this.channels[0].id}); @@ -988,7 +988,7 @@ const ClientSelect = (props: { events: Registry, tabTarge props.events.fire("action_set_permission_editor_subject", {mode: props.tabTarget, clientDatabaseId: 0}); }); - props.events.reactUse("query_client_info_result", event => { + props.events.reactUse("notify_client_info", event => { if (event.client !== clientIdentifier) return;