From 1bc7877a8b4360010aed75834b09d553a2f0ed51 Mon Sep 17 00:00:00 2001 From: SauceyRed Date: Thu, 7 Aug 2025 08:53:11 +0200 Subject: [PATCH 01/14] feat: add util to create context menu items for when right-clicking members in chat or in sidebar --- utils/createMemberContextMenuItems.ts | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 utils/createMemberContextMenuItems.ts diff --git a/utils/createMemberContextMenuItems.ts b/utils/createMemberContextMenuItems.ts new file mode 100644 index 0000000..0ad5e46 --- /dev/null +++ b/utils/createMemberContextMenuItems.ts @@ -0,0 +1,33 @@ +import { Permission } from "~/types/enums"; +import type { ContextMenuItem, GuildMemberResponse } from "~/types/interfaces"; + +export default async (member: GuildMemberResponse, guildId: string) => { + const menuItems: ContextMenuItem[] = []; + + const { fetchMeMember } = useApi(); + const me = useState("me"); + if (!me.value) { + const fetchedMe = await fetchMeMember(member.guild_uuid); + me.value = fetchedMe; + } + const { banMember, kickMember } = useApi(); + + console.log("[MENUITEM] hi"); + console.log("[MENUITEM] member:", member.user.username); + console.log("[MENUITEM] me:", me.value?.user.username); + if (me.value && member.uuid != me.value.uuid) { + 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) }); + } + + 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) }); + } + } + + console.log("[MENUITEM] returning menu items:", menuItems); + return menuItems; +} -- 2.47.3 From dc4494a1db74da9babc1c92d57c1eb9733453701 Mon Sep 17 00:00:00 2001 From: SauceyRed Date: Thu, 7 Aug 2025 08:54:00 +0200 Subject: [PATCH 02/14] style(ui): set cursor for usernames in chat to pointer --- components/Message.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/Message.vue b/components/Message.vue index c926616..dce92ae 100644 --- a/components/Message.vue +++ b/components/Message.vue @@ -234,6 +234,10 @@ function getDayDifference(date1: Date, date2: Date) { max-width: 2em; } +.message-author-username { + cursor: pointer; +} + .left-column { min-width: 2rem; display: flex; -- 2.47.3 From 0d0dccaf8481fb73ef716fd736eb7700e7675443 Mon Sep 17 00:00:00 2001 From: SauceyRed Date: Thu, 7 Aug 2025 08:54:31 +0200 Subject: [PATCH 03/14] style(ui): set cursor for usernames in members list sidebar to pointer --- components/Guild/MemberEntry.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/components/Guild/MemberEntry.vue b/components/Guild/MemberEntry.vue index baf0e67..80272c1 100644 --- a/components/Guild/MemberEntry.vue +++ b/components/Guild/MemberEntry.vue @@ -31,6 +31,7 @@ function hideModalPopup() { -- 2.47.3 From 25c5a0e4a8ce6fd0c9606e0aa4ee9fc3fc2f445d Mon Sep 17 00:00:00 2001 From: SauceyRed Date: Thu, 7 Aug 2025 08:55:33 +0200 Subject: [PATCH 04/14] feat: add context menu for usernames in chat --- components/Message.vue | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/components/Message.vue b/components/Message.vue index dce92ae..bfb6af6 100644 --- a/components/Message.vue +++ b/components/Message.vue @@ -1,5 +1,5 @@