From 02ed954ce4f9a78478c9f93ff22fa7863917879f Mon Sep 17 00:00:00 2001
From: Vendicated <vendicated@riseup.net>
Date: Wed, 28 Sep 2022 12:15:30 +0200
Subject: Add clickableRoleDot plugin, toasts

---
 src/webpack/common.tsx | 45 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

(limited to 'src/webpack/common.tsx')

diff --git a/src/webpack/common.tsx b/src/webpack/common.tsx
index f3cb018..6e93e27 100644
--- a/src/webpack/common.tsx
+++ b/src/webpack/common.tsx
@@ -7,11 +7,50 @@ import type Other from "discord-types/other";
 export let FluxDispatcher: Other.FluxDispatcher;
 export let React: typeof import("react");
 export let UserStore: Stores.UserStore;
-export let Forms: any = {};
+export const Forms: any = {};
 export let Button: any;
 export let Switch: any;
 export let Tooltip: Components.Tooltip;
 
+const ToastType = {
+    MESSAGE: 0,
+    SUCCESS: 1,
+    FAILURE: 2,
+    CUSTOM: 3
+};
+const ToastPosition = {
+    TOP: 0,
+    BOTTOM: 1
+};
+
+export const Toasts = {
+    Type: ToastType,
+    Position: ToastPosition,
+    // what's less likely than getting 0 from Math.random()? Getting it twice in a row
+    genId: () => (Math.random() || Math.random()).toString(36).slice(2)
+} as {
+    Type: typeof ToastType,
+    Position: typeof ToastPosition;
+    genId(): string;
+    show(data: {
+        message: string,
+        id: string,
+        /**
+         * Toasts.Type
+         */
+        type: number,
+        options?: {
+            /**
+             * Toasts.Position
+             */
+            position?: number;
+            component?: React.ReactNode,
+            duration?: number;
+        };
+    }): void;
+    pop(): void;
+};
+
 waitFor("useState", m => React = m);
 waitFor(["dispatch", "subscribe"], m => {
     FluxDispatcher = m;
@@ -35,3 +74,7 @@ waitFor(m => {
     const s = m.toString();
     return s.length < 200 && s.includes("divider");
 }, m => Forms.FormDivider = m);
+
+// This is the same module but this is easier
+waitFor(filters.byCode("currentToast?"), m => Toasts.show = m);
+waitFor(filters.byCode("currentToast:null"), m => Toasts.pop = m);
-- 
cgit 

