aboutsummaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
authorV <vendicated@riseup.net>2023-05-16 00:19:20 +0200
committerGitHub <noreply@github.com>2023-05-16 00:19:20 +0200
commit263884cbd86326ed48a6b69c937ff35dec2d529b (patch)
tree525a227d17cbfa8eba30b2c3f3ac72873722fd0a /src/api
parentbb83c0b672abc5cb812e23d704880e1750fa61e6 (diff)
downloadVencord-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/api')
-rw-r--r--src/api/ContextMenu.ts17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/api/ContextMenu.ts b/src/api/ContextMenu.ts
index f1ebfdb..156ae20 100644
--- a/src/api/ContextMenu.ts
+++ b/src/api/ContextMenu.ts
@@ -25,14 +25,14 @@ type ContextMenuPatchCallbackReturn = (() => void) | void;
* @param args Any arguments passed into making the context menu, like the guild, channel, user or message for example
* @returns A callback which is only ran once used to modify the context menu elements (Use to avoid duplicates)
*/
-export type NavContextMenuPatchCallback = (children: Array<React.ReactElement>, ...args: Array<any>) => ContextMenuPatchCallbackReturn;
+export type NavContextMenuPatchCallback = (children: Array<ReactElement | null>, ...args: Array<any>) => ContextMenuPatchCallbackReturn;
/**
* @param navId The navId of the context menu being patched
* @param children The rendered context menu elements
* @param args Any arguments passed into making the context menu, like the guild, channel, user or message for example
* @returns A callback which is only ran once used to modify the context menu elements (Use to avoid duplicates)
*/
-export type GlobalContextMenuPatchCallback = (navId: string, children: Array<React.ReactElement>, ...args: Array<any>) => ContextMenuPatchCallbackReturn;
+export type GlobalContextMenuPatchCallback = (navId: string, children: Array<ReactElement | null>, ...args: Array<any>) => ContextMenuPatchCallbackReturn;
const ContextMenuLogger = new Logger("ContextMenu");
@@ -89,15 +89,18 @@ export function removeGlobalContextMenuPatch(patch: GlobalContextMenuPatchCallba
}
/**
- * A helper function for finding the children array of a group nested inside a context menu based on the id of one of its childs
- * @param id The id of the child
+ * A helper function for finding the children array of a group nested inside a context menu based on the id(s) of its children
+ * @param id The id of the child. If an array is specified, all ids will be tried
* @param children The context menu children
*/
-export function findGroupChildrenByChildId(id: string, children: Array<React.ReactElement>, _itemsArray?: Array<React.ReactElement>): Array<React.ReactElement> | null {
+export function findGroupChildrenByChildId(id: string | string[], children: Array<ReactElement | null>, _itemsArray?: Array<ReactElement | null>): Array<ReactElement | null> | null {
for (const child of children) {
if (child == null) continue;
- if (child.props?.id === id) return _itemsArray ?? null;
+ if (
+ (Array.isArray(id) && id.some(id => child.props?.id === id))
+ || child.props?.id === id
+ ) return _itemsArray ?? null;
let nextChildren = child.props?.children;
if (nextChildren) {
@@ -117,7 +120,7 @@ export function findGroupChildrenByChildId(id: string, children: Array<React.Rea
interface ContextMenuProps {
contextMenuApiArguments?: Array<any>;
navId: string;
- children: Array<ReactElement>;
+ children: Array<ReactElement | null>;
"aria-label": string;
onSelect: (() => void) | undefined;
onClose: (callback: (...args: Array<any>) => any) => void;