all repos — stealth-developers @ ac8770a96c68b498e33d73aa193980b960b15bef

apps/web/src/components/UserChip.vue (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
<script lang="ts" setup>
import type { SanitisedActor } from "@stealth-developers/api";

import { computed } from "vue";

const props = defineProps<{ user?: SanitisedActor }>();

const displayedUser = computed(() => {
	const avatarUrl = props.user?.avatar?.startsWith("https")
		? props.user.avatar
		: `https://cdn.discordapp.com/avatars/${props.user?.discordId}/${props.user?.avatar}.png`;
	return { ...props.user, avatarUrl };
});
</script>

<template>
	<div class="user-chip">
		<img :src="displayedUser?.avatarUrl" alt="avatar" />
		<span>{{ displayedUser?.displayName || displayedUser?.username }}</span>
	</div>
</template>

<style scoped>
.user-chip {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	overflow: hidden;

	img {
		width: 1.5rem;
		height: 1.5rem;
		border-radius: 50%;
		flex-shrink: 0;
	}

	span {
		white-space: nowrap;
		overflow: hidden;
		text-overflow: ellipsis;
	}
}
</style>