From d5b0d8d9cfe0f165e64dd9098b1e87e725b542c6 Mon Sep 17 00:00:00 2001 From: Paul Date: Sun, 8 Aug 2021 21:50:29 +0100 Subject: [PATCH] Display all server roles separately. --- .../navigation/right/MemberList.tsx | 4 +- .../navigation/right/MemberSidebar.tsx | 50 ++++++++++++++++--- src/context/revoltjs/FileUploads.tsx | 1 + 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/components/navigation/right/MemberList.tsx b/src/components/navigation/right/MemberList.tsx index 3e15341a..55ae33b2 100644 --- a/src/components/navigation/right/MemberList.tsx +++ b/src/components/navigation/right/MemberList.tsx @@ -50,7 +50,9 @@ export default function MemberList({ const type = entries[index].type; return ( - {type === "online" ? ( + {type === "role" ? ( + <>{entries[index].name} + ) : type === "online" ? ( ) : ( diff --git a/src/components/navigation/right/MemberSidebar.tsx b/src/components/navigation/right/MemberSidebar.tsx index 0bc77a1d..37cc085a 100644 --- a/src/components/navigation/right/MemberSidebar.tsx +++ b/src/components/navigation/right/MemberSidebar.tsx @@ -39,12 +39,24 @@ function useEntries(channel: Channel, keys: string[], isServer?: boolean) { offline: [], }; + const categoryInfo: { [key: string]: string } = {}; + keys.forEach((key) => { - let u; + let u, s; if (isServer) { const { server, user } = JSON.parse(key); if (server !== channel.server_id) return; u = client.users.get(user); + s = client.servers.get(server); + + if (s?.roles) { + for (const id of Object.keys(s.roles)) { + if (categories[id]) continue; + // Check if hoisted. + categories[id] = []; + categoryInfo[id] = s.roles[id].name; + } + } } else { u = client.users.get(key); } @@ -55,16 +67,28 @@ function useEntries(channel: Channel, keys: string[], isServer?: boolean) { const sort = member?.nickname ?? u.username; const entry = [u, sort] as [User, string]; - if (isServer) { - // Sort users into hoisted roles here. - } else { - // Sort users into "participants" list here. - // For voice calls. - } - if (!u.online || u.status?.presence === Presence.Invisible) { categories.offline.push(entry); } else { + if (isServer) { + // Sort users into hoisted roles here. + if (member?.roles && s?.roles) { + let success = false; + for (const id of member.roles) { + if (categories[id]) { + categories[id].push(entry); + success = true; + } + break; + } + + if (success) return; + } + } else { + // Sort users into "participants" list here. + // For voice calls. + } + categories.online.push(entry); } }); @@ -75,6 +99,16 @@ function useEntries(channel: Channel, keys: string[], isServer?: boolean) { const entries: MemberListGroup[] = []; + Object.keys(categoryInfo).forEach((key) => { + if (categories[key].length > 0) { + entries.push({ + type: "role", + name: categoryInfo[key], + users: categories[key].map((x) => x[0]), + }); + } + }); + if (categories.online.length > 0) { entries.push({ type: "online", diff --git a/src/context/revoltjs/FileUploads.tsx b/src/context/revoltjs/FileUploads.tsx index c757f8cd..41cf2ae4 100644 --- a/src/context/revoltjs/FileUploads.tsx +++ b/src/context/revoltjs/FileUploads.tsx @@ -79,6 +79,7 @@ export function grabFiles( const files = (e.currentTarget as HTMLInputElement)?.files; if (!files) return; for (const file of files) { + alert(file.size); if (file.size > maxFileSize) { return tooLarge(); }