From 6099179f0230e3c6eb449a2cd7f6a5c5d79201f2 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 8 Sep 2022 22:25:21 +0200 Subject: [PATCH] ViewIcons: Now opens icons in image viewer --- build.mjs | 2 +- src/plugins/{viewIcons.ts => viewIcons.tsx} | 23 +++++++++++++++++++-- src/utils/modal.tsx | 8 +++---- 3 files changed, 26 insertions(+), 7 deletions(-) rename src/plugins/{viewIcons.ts => viewIcons.tsx} (76%) diff --git a/build.mjs b/build.mjs index 6bdeffa..c1ab3cf 100755 --- a/build.mjs +++ b/build.mjs @@ -48,7 +48,7 @@ const globPlugins = { continue; } const mod = `__pluginMod${i}`; - code += `import ${mod} from "./${files[i].replace(".ts", "")}";\n`; + code += `import ${mod} from "./${files[i].replace(/.tsx?$/, "")}";\n`; obj += `[${mod}.name]: ${mod},`; } code += `export default {${obj}}`; diff --git a/src/plugins/viewIcons.ts b/src/plugins/viewIcons.tsx similarity index 76% rename from src/plugins/viewIcons.ts rename to src/plugins/viewIcons.tsx index a6ba4d4..39c4303 100644 --- a/src/plugins/viewIcons.ts +++ b/src/plugins/viewIcons.tsx @@ -1,12 +1,31 @@ import { REACT_GLOBAL } from "../utils/constants"; -import IpcEvents from "../utils/IpcEvents"; +import { Modal, openModal } from "../utils/modal"; import definePlugin from '../utils/types'; +import { filters, waitFor } from "../webpack"; -const OPEN_URL = `VencordNative.ipc.invoke("${IpcEvents.OPEN_EXTERNAL}",`; +let ImageModal: any; +let renderMaskedLink: any; + +waitFor(filters.byDisplayName("ImageModal"), m => ImageModal = m.default); +waitFor("renderMaskedLinkComponent", m => renderMaskedLink = m.renderMaskedLinkComponent); + +const OPEN_URL = "Vencord.Plugins.plugins.ViewIcons.openImage("; export default definePlugin({ name: "ViewIcons", author: "Vendicated", description: "Makes Avatars/Banners in user profiles clickable, and adds Guild Context Menu Entries to View Banner/Icon. Crashes if you don't have Developer Mode enabled, will fix in the future.", + + openImage(url: string) { + openModal(() => ( + + ), { size: Modal.ModalSize.DYNAMIC }); + }, + patches: [ { find: "UserProfileModalHeader", diff --git a/src/utils/modal.tsx b/src/utils/modal.tsx index 5628ebe..63821f3 100644 --- a/src/utils/modal.tsx +++ b/src/utils/modal.tsx @@ -1,8 +1,8 @@ import Components from "discord-types/components"; import { waitFor } from "../webpack"; -let Modal: Components.Modal; -let modals: any; +export let Modal: Components.Modal; +export let modals: any; waitFor("openModalLazy", m => modals = m); waitFor("ModalRoot", m => Modal = m); @@ -14,10 +14,10 @@ let modalId = 1337; * @param Component The component to render in the modal * @returns The key of this modal. This can be used to close the modal later with closeModal */ -export function openModal(Component: React.ComponentType) { +export function openModal(Component: React.ComponentType, modalProps: Record) { let key = `Vencord${modalId++}`; modals.openModal(props => - + , { modalKey: key });