diff --git a/components/ContextMenus.tsx b/components/ContextMenus.tsx
new file mode 100644
index 0000000..0462d88
--- /dev/null
+++ b/components/ContextMenus.tsx
@@ -0,0 +1,94 @@
+import { NavContextMenuPatchCallback } from "@api/ContextMenu";
+import { ChannelStore, Menu, PermissionsBits, PermissionStore, UserStore, useStateFromStores } from "@webpack/common";
+import { ChannelDeckStore } from "../ChannelDeckStore";
+import { Channel, User } from "discord-types/general";
+
+export const UserSettingsContextMenu: NavContextMenuPatchCallback = (children, props) => {
+ const decks = useStateFromStores([ChannelDeckStore], () => ChannelDeckStore.getDecks());
+ if (!props) return;
+ children.push(
+
+
+ {decks.map(deck => {
+ ChannelDeckStore.setDeck({ ...deck, open: !deck.open });
+ }}
+ />)}
+
+ {
+ ChannelDeckStore.createDeck({ name: "New Channel Deck" });
+ }}
+ >
+
+
+ );
+};
+
+interface ChannelLikeContextMenuProps {
+ channel: Channel;
+ guildId?: string;
+ user: User;
+}
+
+function MakeChannelContextMenu(name: "user" | "channel"): NavContextMenuPatchCallback {
+ return (children, { user, channel }: ChannelLikeContextMenuProps) => {
+ const decks = useStateFromStores([ChannelDeckStore], () => ChannelDeckStore.getDecks());
+ const isUser = name === "user";
+ if (isUser && !user) return;
+ if (!isUser && (!channel || channel.type === 4 || channel.type === 15)) return;
+
+ if (isUser && user.id === UserStore.getCurrentUser().id) return;
+ if (!isUser && (!PermissionStore.can(PermissionsBits.VIEW_CHANNEL, channel) && channel.type !== 3)) return;
+
+ const channelId = user ? ChannelStore.getDMFromUserId(user?.id) : channel?.id;
+ if (user && !channelId) return;
+
+ children.push(
+
+
+ {decks.map(deck => c.channelId === channelId)}
+ action={async () => {
+ if (deck.columns.some(c => c.channelId === channelId))
+ ChannelDeckStore.setDeck({ ...deck, columns: deck.columns.filter(c => c.channelId !== channelId) });
+ else
+ ChannelDeckStore.setDeck({ ...deck, columns: [...deck.columns, { channelId: channelId, width: "100%" }] });
+ }}
+ />)}
+
+ {
+ ChannelDeckStore.createDeck({ name: "New Channel Deck", open: true, columns: [{ channelId: channelId, width: "100%" }] });
+ }}
+ >
+
+
+ );
+ };
+}
+
+export const contextMenus = {
+ "user-settings-cog": UserSettingsContextMenu,
+ "user-context": MakeChannelContextMenu("user"),
+ "channel-context": MakeChannelContextMenu("channel"),
+ "thread-context": MakeChannelContextMenu("channel"),
+ "gdm-context": MakeChannelContextMenu("channel"),
+};
diff --git a/components/DeckPopout.tsx b/components/DeckPopout.tsx
index a833512..0281f98 100644
--- a/components/DeckPopout.tsx
+++ b/components/DeckPopout.tsx
@@ -12,7 +12,7 @@ export default function DeckPopout({ deckId, windowKey }: { deckId: string; wind
return
diff --git a/components/LauncherContextMenu.tsx b/components/LauncherContextMenu.tsx
deleted file mode 100644
index 69e7aff..0000000
--- a/components/LauncherContextMenu.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { NavContextMenuPatchCallback } from "@api/ContextMenu";
-import { Menu, PrivateChannelsStore, useStateFromStores } from "@webpack/common";
-import { settings } from "plugins/betterFolders";
-import { ChannelDeckStore } from "../ChannelDeckStore";
-
-export const UserSettingsContextMenu: NavContextMenuPatchCallback = (children, props) => {
- const decks = useStateFromStores([ChannelDeckStore], () => ChannelDeckStore.getDecks());
- if (!props) return;
- children.push(
-
-
- {decks.map(deck => {
- ChannelDeckStore.setDeck({ ...deck, open: !deck.open });
- }}
- />)}
-
-
- );
-};
diff --git a/index.tsx b/index.tsx
index 1d7c7fa..4547639 100644
--- a/index.tsx
+++ b/index.tsx
@@ -2,7 +2,7 @@ import { Devs } from "@utils/constants";
import definePlugin from "@utils/types";
import showUnsupportedMessage from "./unsupportedMessage";
import { ChannelDeckStore } from "./ChannelDeckStore";
-import { UserSettingsContextMenu } from "./components/LauncherContextMenu";
+import { contextMenus } from "./components/ContextMenus";
export default definePlugin({
name: "ChannelDeck",
@@ -18,9 +18,7 @@ export default definePlugin({
ChannelDeckStore.unloadData();
},
- contextMenus: {
- "user-settings-cog": UserSettingsContextMenu
- },
+ contextMenus,
ChannelDeckStore
});