2022-06-01 17:51:17 -04:00
|
|
|
import { FC, ReactNode } from 'react';
|
2022-05-10 23:38:10 +02:00
|
|
|
|
2022-11-04 21:46:39 -04:00
|
|
|
import { fakeRenderComponent } from '../utils';
|
2022-05-10 23:38:10 +02:00
|
|
|
import { findModuleChild } from '../webpack';
|
|
|
|
|
|
2022-06-01 17:51:17 -04:00
|
|
|
export const showContextMenu: (children: ReactNode, parent?: EventTarget) => void = findModuleChild((m) => {
|
|
|
|
|
if (typeof m !== 'object') return undefined;
|
|
|
|
|
for (let prop in m) {
|
|
|
|
|
if (typeof m[prop] === 'function' && m[prop].toString().includes('stopPropagation))')) {
|
|
|
|
|
return m[prop];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2022-06-05 15:07:47 +02:00
|
|
|
export interface MenuProps {
|
2022-05-10 23:38:10 +02:00
|
|
|
label: string;
|
|
|
|
|
onCancel?(): void;
|
|
|
|
|
cancelText?: string;
|
2022-10-01 19:31:18 -06:00
|
|
|
children?: ReactNode;
|
2022-05-10 23:38:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const Menu: FC<MenuProps> = findModuleChild((m) => {
|
|
|
|
|
if (typeof m !== 'object') return undefined;
|
|
|
|
|
|
|
|
|
|
for (let prop in m) {
|
|
|
|
|
if (m[prop]?.prototype?.HideIfSubmenu && m[prop]?.prototype?.HideMenu) {
|
|
|
|
|
return m[prop];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2022-10-01 19:31:18 -06:00
|
|
|
export interface MenuGroupProps {
|
|
|
|
|
label: string;
|
|
|
|
|
disabled?: boolean;
|
|
|
|
|
children?: ReactNode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const MenuGroup: FC<MenuGroupProps> = findModuleChild((m) => {
|
|
|
|
|
if (typeof m !== 'object') return undefined;
|
|
|
|
|
|
|
|
|
|
for (let prop in m) {
|
2022-11-04 21:46:39 -04:00
|
|
|
if (
|
|
|
|
|
(m[prop]?.toString()?.includes('bInGamepadUI:') &&
|
|
|
|
|
fakeRenderComponent(() => m[prop]())?.type?.prototype?.RenderSubMenu) ||
|
|
|
|
|
(m[prop]?.prototype?.RenderSubMenu && m[prop]?.prototype?.ShowSubMenu)
|
|
|
|
|
) {
|
2022-10-01 19:31:18 -06:00
|
|
|
return m[prop];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2022-06-05 15:07:47 +02:00
|
|
|
export interface MenuItemProps {
|
2022-05-10 23:38:10 +02:00
|
|
|
onSelected?(): void;
|
2022-10-01 19:31:18 -06:00
|
|
|
disabled?: boolean;
|
|
|
|
|
children?: ReactNode;
|
2022-05-10 23:38:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const MenuItem: FC<MenuItemProps> = findModuleChild((m) => {
|
|
|
|
|
if (typeof m !== 'object') return undefined;
|
|
|
|
|
|
|
|
|
|
for (let prop in m) {
|
2022-11-04 21:46:39 -04:00
|
|
|
if (
|
|
|
|
|
m[prop]?.render?.toString()?.includes('bPlayAudio:') ||
|
|
|
|
|
(m[prop]?.prototype?.OnOKButton && m[prop]?.prototype?.OnMouseEnter)
|
|
|
|
|
) {
|
2022-05-10 23:38:10 +02:00
|
|
|
return m[prop];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
all().map(m => {
|
|
|
|
|
if (typeof m !== "object") return undefined;
|
|
|
|
|
for (let prop in m) { if (m[prop]?.prototype?.OK && m[prop]?.prototype?.Cancel && m[prop]?.prototype?.render) return m[prop]}
|
|
|
|
|
}).find(x => x)
|
|
|
|
|
*/
|