From 3f2bcd2cab1a7a3c32b9cffd5d4fc5df6dde670b Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Tue, 16 May 2023 14:15:56 -0300 Subject: SHC: Permissions viewer integration (#475) --- .../components/HiddenChannelLockScreen.tsx | 98 +++++++++++++++++----- 1 file changed, 78 insertions(+), 20 deletions(-) (limited to 'src/plugins/showHiddenChannels/components') diff --git a/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx b/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx index dc670bf..b08ffb4 100644 --- a/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx +++ b/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx @@ -16,15 +16,17 @@ * along with this program. If not, see . */ +import { Settings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; import { LazyComponent } from "@utils/react"; import { formatDuration } from "@utils/text"; import { find, findByPropsLazy, findStoreLazy } from "@webpack"; -import { FluxDispatcher, GuildMemberStore, GuildStore, moment, Parser, PermissionStore, SnowflakeUtils, Text, Timestamp, Tooltip } from "@webpack/common"; +import { FluxDispatcher, GuildMemberStore, GuildStore, moment, Parser, PermissionStore, SnowflakeUtils, Text, Timestamp, Tooltip, useEffect, useState } from "@webpack/common"; import type { Channel } from "discord-types/general"; import type { ComponentType } from "react"; -import { VIEW_CHANNEL } from ".."; +import openRolesAndUsersPermissionsModal, { PermissionType, RoleOrUserPermission } from "../../permissionsViewer/components/RolesAndUsersPermissions"; +import { settings, VIEW_CHANNEL } from ".."; enum SortOrderTypes { LATEST_ACTIVITY = 0, @@ -124,6 +126,9 @@ const VideoQualityModesToNames = { const HiddenChannelLogo = "/assets/433e3ec4319a9d11b0cbe39342614982.svg"; function HiddenChannelLockScreen({ channel }: { channel: ExtendedChannel; }) { + const [viewAllowedUsersAndRoles, setViewAllowedUsersAndRoles] = useState(settings.store.defaultAllowedUsersAndRolesDropdownState); + const [permissions, setPermissions] = useState([]); + const { type, topic, @@ -140,27 +145,39 @@ function HiddenChannelLockScreen({ channel }: { channel: ExtendedChannel; }) { bitrate, rtcRegion, videoQualityMode, - permissionOverwrites + permissionOverwrites, + guild_id } = channel; - const membersToFetch: Array = []; + useEffect(() => { + const membersToFetch: Array = []; + + const guildOwnerId = GuildStore.getGuild(guild_id).ownerId; + if (!GuildMemberStore.getMember(guild_id, guildOwnerId)) membersToFetch.push(guildOwnerId); - const guildOwnerId = GuildStore.getGuild(channel.guild_id).ownerId; - if (!GuildMemberStore.getMember(channel.guild_id, guildOwnerId)) membersToFetch.push(guildOwnerId); + Object.values(permissionOverwrites).forEach(({ type, id: userId }) => { + if (type === 1 && !GuildMemberStore.getMember(guild_id, userId)) { + membersToFetch.push(userId); + } + }); - Object.values(permissionOverwrites).forEach(({ type, id: userId }) => { - if (type === 1) { - if (!GuildMemberStore.getMember(channel.guild_id, userId)) membersToFetch.push(userId); + if (membersToFetch.length > 0) { + FluxDispatcher.dispatch({ + type: "GUILD_MEMBERS_REQUEST", + guildIds: [guild_id], + userIds: membersToFetch + }); } - }); - if (membersToFetch.length > 0) { - FluxDispatcher.dispatch({ - type: "GUILD_MEMBERS_REQUEST", - guildIds: [channel.guild_id], - userIds: membersToFetch - }); - } + if (Settings.plugins.PermissionsViewer.enabled) { + setPermissions(Object.values(permissionOverwrites).map(overwrite => ({ + type: overwrite.type as PermissionType, + id: overwrite.id, + overwriteAllow: overwrite.allow, + overwriteDeny: overwrite.deny + }))); + } + }, [channelId]); return (
@@ -182,7 +199,7 @@ function HiddenChannelLockScreen({ channel }: { channel: ExtendedChannel; }) { aria-hidden={true} role="img" > - + )} @@ -268,8 +285,49 @@ function HiddenChannelLockScreen({ channel }: { channel: ExtendedChannel; }) {
}
- Allowed users and roles: - +
+ {Settings.plugins.PermissionsViewer.enabled && ( + + {({ onMouseLeave, onMouseEnter }) => ( + + )} + + )} + Allowed users and roles: + + {({ onMouseLeave, onMouseEnter }) => ( + + )} + +
+ {viewAllowedUsersAndRoles && }
-- cgit