{bannerUrl && currentTab === Tabs.ServerInfo && (

openImageModal({
url: bannerUrl,
width: 1024
})}
/>
)}
{iconUrl
?

openImageModal({
url: iconUrl,
height: 512,
width: 512,
})}
/>
:
{guild.acronym}
}
{guild.name}
{guild.description && {guild.description}}
Friends
{friendCount !== undefined ? ` (${friendCount})` : ""}
Mutual Members
{mutualMembersCount !== undefined ? ` (${mutualMembersCount})` : ""}
Blocked Users
{blockedCount !== undefined ? ` (${blockedCount})` : ""}
Ignored Users
{ignoredCount !== undefined ? `(${ignoredCount})` : ""}
{currentTab === Tabs.ServerInfo && }
{currentTab === Tabs.Friends && }
{currentTab === Tabs.MutualMembers && }
{currentTab === Tabs.BlockedUsers && }
{currentTab === Tabs.IgnoredUsers && }
);
}
function Owner(guildId: string, owner: User) {
const guildAvatar = GuildMemberStore.getMember(guildId, owner.id)?.avatar;
const ownerAvatarUrl =
guildAvatar
? IconUtils.getGuildMemberAvatarURLSimple({
userId: owner!.id,
avatar: guildAvatar,
guildId,
canAnimate: true
})
: IconUtils.getUserAvatarURL(owner, true);
return (

openImageModal({
url: ownerAvatarUrl,
height: 512,
width: 512
})}
/>
{Parser.parse(`<@${owner.id}>`)}
);
}
function ServerInfoTab({ guild }: GuildProps) {
const [owner] = useAwaiter(() => UserUtils.getUser(guild.ownerId), {
deps: [guild.ownerId],
fallbackValue: null
});
const Fields = {
"Server Owner": owner ? Owner(guild.id, owner) : "Loading...",
"Created At": renderTimestamp(SnowflakeUtils.extractTimestamp(guild.id)),
"Joined At": guild.joinedAt ? renderTimestamp(guild.joinedAt.getTime()) : "-", // Not available in lurked guild
"Vanity Link": guild.vanityURLCode ? (
{Object.entries(Fields).map(([name, node]) =>
{name}
{typeof node === "string" ? {node} : node}
)}
);
}
function FriendsTab({ guild, setCount }: RelationshipProps) {
return UserList("friends", guild, RelationshipStore.getFriendIDs(), setCount);
}
function BlockedUsersTab({ guild, setCount }: RelationshipProps) {
const blockedIds = Object.keys(RelationshipStore.getRelationships()).filter(id => RelationshipStore.isBlocked(id));
return UserList("blocked", guild, blockedIds, setCount);
}
function IgnoredUserTab({ guild, setCount }: RelationshipProps) {
const ignoredIds = Object.keys(RelationshipStore.getRelationships()).filter(id => RelationshipStore.isIgnored(id));
return UserList("ignored", guild, ignoredIds, setCount);
}
function UserList(type: "friends" | "blocked" | "ignored", guild: Guild, ids: string[], setCount: (count: number) => void) {
const missing = [] as string[];
const members = [] as string[];
for (const id of ids) {
if (GuildMemberStore.isMember(guild.id, id))
members.push(id);
else
missing.push(id);
}
// Used for side effects (rerender on member request success)
useStateFromStores(
[GuildMemberStore],
() => GuildMemberStore.getMemberIds(guild.id),
null,
(old, curr) => old.length === curr.length
);
useEffect(() => {
if (!fetched[type] && missing.length) {
fetched[type] = true;
FluxDispatcher.dispatch({
type: "GUILD_MEMBERS_REQUEST",
guildIds: [guild.id],
userIds: missing
});
}
}, []);
useEffect(() => setCount(members.length), [members.length]);
const sortedMembers = members
.map(id => UserStore.getUser(id))
.sort(
(a, b) => {
switch (settings.store.sorting) {
case "username":
return a.username.localeCompare(b.username);
case "displayname":
return a?.globalName?.localeCompare(b?.globalName || b.username)
|| a.username.localeCompare(b?.globalName || b.username);
default:
return 0;
}
}
);
return (
{mutualGuilds.slice(0, MAX_ICONS).map(({ guild, iconUrl }) => (
{iconUrl ? (

) : (
{guild.acronym}
)}
))}
{mutualCount > MAX_ICONS && (
+{mutualCount - MAX_ICONS}
)}
);
}
function MutualMembersTab({ guild, setCount }: RelationshipProps) {
const [members, setMembers] = useState