diff options
author | V <vendicated@riseup.net> | 2023-05-16 00:19:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-16 00:19:20 +0200 |
commit | 263884cbd86326ed48a6b69c937ff35dec2d529b (patch) | |
tree | 525a227d17cbfa8eba30b2c3f3ac72873722fd0a /src/plugins/permissionsViewer | |
parent | bb83c0b672abc5cb812e23d704880e1750fa61e6 (diff) | |
download | Vencord-263884cbd86326ed48a6b69c937ff35dec2d529b.tar.gz Vencord-263884cbd86326ed48a6b69c937ff35dec2d529b.tar.bz2 Vencord-263884cbd86326ed48a6b69c937ff35dec2d529b.zip |
PermViewer: Fix context menu for roleless users & muted channels (#1138)
Co-authored-by: V <vendicated@riseup.net>
Co-authored-by: Nuckyz <61953774+Nuckyz@users.noreply.github.com>
Diffstat (limited to 'src/plugins/permissionsViewer')
-rw-r--r-- | src/plugins/permissionsViewer/index.tsx | 31 | ||||
-rw-r--r-- | src/plugins/permissionsViewer/styles.css | 3 |
2 files changed, 22 insertions, 12 deletions
diff --git a/src/plugins/permissionsViewer/index.tsx b/src/plugins/permissionsViewer/index.tsx index 793105a..208fef3 100644 --- a/src/plugins/permissionsViewer/index.tsx +++ b/src/plugins/permissionsViewer/index.tsx @@ -57,6 +57,8 @@ export const settings = definePluginSettings({ }); function MenuItem(guildId: string, id?: string, type?: MenuItemParentType) { + if (type === MenuItemParentType.User && !GuildMemberStore.isMember(guildId, id!)) return null; + return ( <Menu.MenuItem id="perm-viewer-permissions" @@ -122,25 +124,32 @@ function MenuItem(guildId: string, id?: string, type?: MenuItemParentType) { ); } -function makeContextMenuPatch(childId: string, type?: MenuItemParentType): NavContextMenuPatchCallback { +function makeContextMenuPatch(childId: string | string[], type?: MenuItemParentType): NavContextMenuPatchCallback { return (children, props) => () => { if (!props) return children; const group = findGroupChildrenByChildId(childId, children); - if (group) { + const item = (() => { switch (type) { case MenuItemParentType.User: - group.push(MenuItem(props.guildId, props.user.id, type)); - break; + return MenuItem(props.guildId, props.user.id, type); case MenuItemParentType.Channel: - group.push(MenuItem(props.guild.id, props.channel.id, type)); - break; + return MenuItem(props.guild.id, props.channel.id, type); case MenuItemParentType.Guild: - group.push(MenuItem(props.guild.id)); - break; + return MenuItem(props.guild.id); + default: + return null; } - } + })(); + + if (item == null) return; + + if (group) + group.push(item); + else if (childId === "roles" && props.guildId) + // "roles" may not be present due to the member not having any roles. In that case, add it above "Copy ID" + children.splice(-1, 0, <Menu.MenuGroup>{item}</Menu.MenuGroup>); }; } @@ -160,10 +169,10 @@ export default definePlugin({ } ], - UserPermissions: (guild: Guild, guildMember: GuildMember) => <UserPermissions guild={guild} guildMember={guildMember} />, + UserPermissions: (guild: Guild, guildMember?: GuildMember) => !!guildMember && <UserPermissions guild={guild} guildMember={guildMember} />, userContextMenuPatch: makeContextMenuPatch("roles", MenuItemParentType.User), - channelContextMenuPatch: makeContextMenuPatch("mute-channel", MenuItemParentType.Channel), + channelContextMenuPatch: makeContextMenuPatch(["mute-channel", "unmute-channel"], MenuItemParentType.Channel), guildContextMenuPatch: makeContextMenuPatch("privacy", MenuItemParentType.Guild), start() { diff --git a/src/plugins/permissionsViewer/styles.css b/src/plugins/permissionsViewer/styles.css index 6d6c137..08e5e1c 100644 --- a/src/plugins/permissionsViewer/styles.css +++ b/src/plugins/permissionsViewer/styles.css @@ -59,7 +59,7 @@ align-items: center; padding: 8px 5px; cursor: pointer; - width: 165px; + width: 230px; } .vc-permviewer-perms-list-item > div { @@ -121,6 +121,7 @@ position: absolute; right: 0; scale: 0.9; + transition: color ease-in 0.1s; } .vc-permviewer-perms-perms-item .vc-info-icon:hover { |