diff --git a/components/Message.vue b/components/Message.vue index 066331b..fa202aa 100644 --- a/components/Message.vue +++ b/components/Message.vue @@ -59,6 +59,9 @@ + \ No newline at end of file diff --git a/types/interfaces.ts b/types/interfaces.ts index bb6489b..02235e0 100644 --- a/types/interfaces.ts +++ b/types/interfaces.ts @@ -140,3 +140,8 @@ export interface NavbarOptions { isDirectMessages?: boolean } +export interface IConfirmationModal { + show: boolean, + actionName: string, + callback: CallableFunction +} diff --git a/utils/createMemberContextMenuItems.ts b/utils/createMemberContextMenuItems.ts index 0ad5e46..06c5032 100644 --- a/utils/createMemberContextMenuItems.ts +++ b/utils/createMemberContextMenuItems.ts @@ -1,7 +1,7 @@ import { Permission } from "~/types/enums"; -import type { ContextMenuItem, GuildMemberResponse } from "~/types/interfaces"; +import type { ContextMenuItem, GuildMemberResponse, IConfirmationModal } from "~/types/interfaces"; -export default async (member: GuildMemberResponse, guildId: string) => { +export default async (member: GuildMemberResponse, guildId: string, confirmationModal?: Ref) => { const menuItems: ContextMenuItem[] = []; const { fetchMeMember } = useApi(); @@ -19,12 +19,46 @@ export default async (member: GuildMemberResponse, guildId: string) => { console.log("[MENUITEM] member is not me"); if (hasPermission(me.value, Permission.KickMember)) { console.log("[MENUITEM] has kick member permission"); - menuItems.splice(Math.min(3, menuItems.length), 0, { name: "Kick", icon: "lucide:user-x", type: "danger", callback: async () => await kickMember(member.uuid) }); + menuItems.splice(Math.min(3, menuItems.length), 0, { + name: "Kick", + icon: "lucide:user-x", + type: "danger", + callback: async () => { + if (confirmationModal) { + console.log("[CONFIRM] HEYO THERE!!"); + confirmationModal.value = { + actionName: "kick", + callback: async () => await kickMember(member.uuid), + show: true + } + } else { + console.log("[CONFIRM] no modal"); + await kickMember(member.uuid) + } + } + }); } if (hasPermission(me.value, Permission.BanMember)) { console.log("[MENUITEM] has ban permission"); - menuItems.splice(Math.min(4, menuItems.length), 0, { name: "Ban (WIP)", icon: "lucide:ban", type: "danger", callback: async () => await banMember(guildId, member.uuid) }); + menuItems.splice(Math.min(4, menuItems.length), 0, { + name: "Ban (WIP)", + icon: "lucide:ban", + type: "danger", + callback: async () => { + if (confirmationModal) { + console.log("[CONFIRM] HEYO THERE!! 2"); + confirmationModal.value = { + actionName: "ban", + callback: async () => await banMember(member.guild_uuid, member.uuid), + show: true + } + } else { + console.log("[CONFIRM] no modal 2"); + await banMember(member.guild_uuid, member.uuid) + } + } + }); } }