frontend/components/Avatar.vue
JustTemmie 1ac3042470
All checks were successful
ci/woodpecker/push/build-and-publish Pipeline was successful
ci/woodpecker/pr/build-and-publish Pipeline was successful
style: move profile functions into a composable
2025-07-19 17:19:14 +02:00

50 lines
1.1 KiB
Vue

<template>
<NuxtImg v-if="displayAvatar"
class="display-avatar"
:src="displayAvatar"
:alt="displayName" />
<Icon v-else
name="lucide:user"
:alt="displayName" />
</template>
<script lang="ts" setup>
import { NuxtImg } from '#components';
import type { GuildMemberResponse, UserResponse } from '~/types/interfaces';
const { getDisplayName } = useProfile()
const props = defineProps<{
profile: UserResponse | GuildMemberResponse,
}>();
const displayName = getDisplayName(props.profile)
let displayAvatar: string | null
if ("username" in props.profile) {
// assume it's a UserRespone
displayAvatar = props.profile.avatar
if (!displayAvatar) {
if (!isCanvasBlocked()) {
displayAvatar = generateDefaultIcon(displayName, props.profile.uuid)
}
}
} else {
// assume it's a GuildMemberResponse
displayAvatar = props.profile.user.avatar
if (!displayAvatar) {
if (!isCanvasBlocked()) {
displayAvatar = generateDefaultIcon(displayName, props.profile.user_uuid)
}
}
}
</script>
<style scoped>
.display-avatar {
border-radius: var(--pfp-radius);
}
</style>