diff --git a/shared/js/connection/CommandHelper.ts b/shared/js/connection/CommandHelper.ts index 01f24f32..39cf6ec9 100644 --- a/shared/js/connection/CommandHelper.ts +++ b/shared/js/connection/CommandHelper.ts @@ -109,7 +109,7 @@ export class CommandHelper extends AbstractCommandHandler { for(const clientDatabaseId of uniqueClientDatabaseIds) { request.push({ cldbid: clientDatabaseId }); - const requestCallbacks = this.infoByUniqueIdRequest[clientDatabaseId] || (this.infoByUniqueIdRequest[clientDatabaseId] = []); + const requestCallbacks = this.infoByDatabaseIdRequest[clientDatabaseId] || (this.infoByDatabaseIdRequest[clientDatabaseId] = []); requestCallbacks.push(resolvers[clientDatabaseId] = info => response.push(info)); } diff --git a/shared/js/ui/modal/permission/ModalPermissionEditor.tsx b/shared/js/ui/modal/permission/ModalPermissionEditor.tsx index dc9c7127..fe371044 100644 --- a/shared/js/ui/modal/permission/ModalPermissionEditor.tsx +++ b/shared/js/ui/modal/permission/ModalPermissionEditor.tsx @@ -304,13 +304,13 @@ class PermissionEditorModal extends InternalModal { } protected onInitialize() { - this.modalEvents.fire("query_client_permissions"); - this.modalEvents.fire("action_activate_tab", { + this.modalEvents.fire_later("action_activate_tab", { tab: this.defaultTab, activeChannelId: this.defaultTabValues?.channelId, activeGroupId: this.defaultTabValues?.groupId, activeClientDatabaseId: this.defaultTabValues?.clientDatabaseId }); + this.modalEvents.fire_later("query_client_permissions"); } protected onDestroy() { @@ -870,8 +870,9 @@ function initializePermissionEditor(connection: ConnectionHandler, modalEvents: const failed = failedPermission(); events.fire("action_set_mode", {mode: failed ? "no-permissions" : editorMode, failedPermission: failed}); - if (!failed && editorMode === "normal") + if (!failed && editorMode === "normal") { events.fire("query_permission_values"); + } }); events.on("query_permission_list", () => { @@ -999,14 +1000,16 @@ function initializePermissionEditor(connection: ConnectionHandler, modalEvents: } let prefix = mode === "groups-server" ? "server" : "channel"; - if (mode === "groups-server") + if (mode === "groups-server") { payload[0].sgid = groupId; - else + } else { payload[0].cgid = groupId; + } promise = connection.serverConnection.send_command(prefix + "groupaddperm", payload); break; } + case "channel": if (!channelId) { promise = Promise.reject(tr("Invalid channel id")); diff --git a/shared/js/ui/modal/permission/TabHandler.tsx b/shared/js/ui/modal/permission/TabHandler.tsx index 1dedb110..81cf7c3e 100644 --- a/shared/js/ui/modal/permission/TabHandler.tsx +++ b/shared/js/ui/modal/permission/TabHandler.tsx @@ -894,8 +894,9 @@ class ChannelList extends React.Component<{ connection: ConnectionHandler, event @EventHandler("action_select_channel") private handleActionSelectChannel(event: PermissionModalEvents["action_select_channel"]) { - if (event.target !== this.props.tabTarget) + if (event.target !== this.props.tabTarget) { return; + } this.setState({selectedChanelId: event.id}); if (this.isActiveTab) { @@ -909,13 +910,15 @@ class ChannelList extends React.Component<{ connection: ConnectionHandler, event @EventHandler("action_activate_tab") private handleActionTabSelect(event: PermissionModalEvents["action_activate_tab"]) { this.isActiveTab = event.tab === this.props.tabTarget; - if (!this.isActiveTab) + if (!this.isActiveTab) { return; + } - if (typeof event.activeChannelId === "number") - this.setState({selectedChanelId: event.activeChannelId}); + if (typeof event.activeChannelId === "number") { + this.setState({ selectedChanelId: event.activeChannelId }); + } - this.props.events.fire("action_set_permission_editor_subject", { + this.props.events.fire_later("action_set_permission_editor_subject", { mode: this.props.tabTarget, channelId: typeof event.activeChannelId === "number" ? event.activeChannelId : this.state.selectedChanelId }); @@ -945,8 +948,9 @@ const ClientSelect = (props: { events: Registry, tabTarge const refDatabaseId = useRef(); props.events.reactUse("action_activate_tab", event => { - if (event.tab !== props.tabTarget) + if (event.tab !== props.tabTarget) { return; + } if (typeof event.activeClientDatabaseId !== "undefined") { props.events.fire("action_select_client", { @@ -954,13 +958,14 @@ const ClientSelect = (props: { events: Registry, tabTarge id: event.activeClientDatabaseId === 0 ? "undefined" : event.activeClientDatabaseId }); } else { - if (clientInfo && clientInfo.databaseId) + if (clientInfo && clientInfo.databaseId) { props.events.fire("action_set_permission_editor_subject", { mode: props.tabTarget, clientDatabaseId: clientInfo.databaseId }); - else + } else { props.events.fire("action_set_permission_editor_subject", {mode: props.tabTarget, clientDatabaseId: 0}); + } } }); @@ -1066,13 +1071,15 @@ const ClientSelect = (props: { events: Registry, tabTarge client = undefined; } else { try { - if (arrayBufferBase64(value).byteLength !== 20) { + if (arrayBufferBase64(value).byteLength !== 20 && value !== "serveradmin") { refInput.current?.setState({ isInvalid: true, invalidMessage: tr("Invalid UUID length") }); return; } + + client = value; } catch (e) { refInput.current?.setState({isInvalid: true, invalidMessage: tr("Invalid UUID")}); return; diff --git a/shared/js/ui/react-elements/HTMLRenderer.tsx b/shared/js/ui/react-elements/HTMLRenderer.tsx index ffe34856..ec361a8b 100644 --- a/shared/js/ui/react-elements/HTMLRenderer.tsx +++ b/shared/js/ui/react-elements/HTMLRenderer.tsx @@ -1,14 +1,6 @@ import * as React from "react"; import * as purify from "dompurify"; -/* -export const HTMLRenderer = (props: { purify: boolean, children: string }) => { - const html = props.purify ? purify.sanitize(props.children) : props.children; - - return -}; -*/ - export class HTMLRenderer extends React.PureComponent<{ purify: boolean, children: string }, {}> { private readonly reference = React.createRef(); private readonly newNodes: Element[]; diff --git a/shared/js/ui/react-elements/Helper.ts b/shared/js/ui/react-elements/Helper.ts index 9567e9e4..ad4a899f 100644 --- a/shared/js/ui/react-elements/Helper.ts +++ b/shared/js/ui/react-elements/Helper.ts @@ -1,4 +1,4 @@ -import {Dispatch, SetStateAction, useEffect, useMemo, useState} from "react"; +import {Dispatch, SetStateAction, useMemo, useState} from "react"; export function useDependentState( factory: (prevState?: S) => S,