Implement profile modal #52

Merged
twig merged 27 commits from profile-modal into main 2025-08-04 19:06:45 +00:00
3 changed files with 13 additions and 6 deletions
Showing only changes of commit b8cbbf1f86 - Show all commits

View file

@ -24,7 +24,7 @@ let displayAvatar: string | null
const user = props.user || props.member?.user
if (user) {
displayName = getDisplayName(user, props.member)
displayName = getDisplayName(props.member ?? user)
if (user.avatar) {
displayAvatar = user.avatar

View file

@ -1,7 +1,7 @@
<template>
<div class="member-item" @click="togglePopup" @blur="hidePopup" tabindex="0">
<Avatar :member="props.member" class="member-avatar"/>
<span class="member-display-name">{{ getDisplayName(props.member.user, props.member) }}</span>
<span class="member-display-name">{{ getDisplayName(props.member) }}</span>
<UserPopup v-if="isPopupVisible" :user="props.member.user" id="profile-popup" />
</div>
</template>

View file

@ -1,7 +1,14 @@
import type { GuildMemberResponse, UserResponse } from "~/types/interfaces";
export function getDisplayName(user: UserResponse, member?: GuildMemberResponse): string {
if (member?.nickname) return member.nickname
if (user.display_name) return user.display_name
return user.username
export default (profile: UserResponse | GuildMemberResponse): string => {
if ("username" in profile) {
// assume it's a UserRespone
if (profile.display_name) return profile.display_name
return profile.username
} else {
// assume it's a GuildMemberResponse
if (profile.nickname) return profile.nickname
if (profile.user.display_name) return profile.user.display_name
return profile.user.username
}
}