UserLink.vue 925 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <script setup lang="ts">
  2. import { ref, onMounted } from "vue";
  3. import { useWebsocketsStore } from "@/stores/websockets";
  4. import { useModels } from "@/composables/useModels";
  5. const props = defineProps({
  6. userId: { type: String, default: "" },
  7. link: { type: Boolean, default: true }
  8. });
  9. const user = ref();
  10. const { socket } = useWebsocketsStore();
  11. const { loadModels } = useModels();
  12. onMounted(() => {
  13. socket.onConnect(async () => {
  14. const [model] = await loadModels("minifiedUsers", props.userId);
  15. if (model) user.value = model;
  16. });
  17. });
  18. </script>
  19. <template>
  20. <router-link
  21. v-if="$props.link && user?.username"
  22. :to="{ path: `/u/${user.username}` }"
  23. :title="userId"
  24. >
  25. {{ user.name }}
  26. </router-link>
  27. <span v-else :title="userId">
  28. {{ user?.name ?? "Unknown" }}
  29. </span>
  30. </template>
  31. <style lang="less" scoped>
  32. a {
  33. color: var(--primary-color);
  34. &:hover,
  35. &:focus {
  36. filter: brightness(90%);
  37. }
  38. }
  39. </style>