UserLink.vue 953 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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 { [props.userId]: model } = await loadModels(
  15. "minifiedUsers",
  16. props.userId
  17. );
  18. if (model) user.value = model;
  19. });
  20. });
  21. </script>
  22. <template>
  23. <router-link
  24. v-if="$props.link && user?.username"
  25. :to="{ path: `/u/${user.username}` }"
  26. :title="userId"
  27. >
  28. {{ user.name }}
  29. </router-link>
  30. <span v-else :title="userId">
  31. {{ user?.name ?? "Unknown" }}
  32. </span>
  33. </template>
  34. <style lang="less" scoped>
  35. a {
  36. color: var(--primary-color);
  37. &:hover,
  38. &:focus {
  39. filter: brightness(90%);
  40. }
  41. }
  42. </style>