UserLink.vue 926 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <script setup lang="ts">
  2. import { useStore } from "vuex";
  3. import { ref, onMounted } from "vue";
  4. const props = defineProps({
  5. userId: { type: String, default: "" },
  6. link: { type: Boolean, default: true }
  7. });
  8. const store = useStore();
  9. const user = ref({
  10. name: "Unknown",
  11. username: null
  12. });
  13. const getBasicUser = userId => store.dispatch("user/auth/getBasicUser", userId);
  14. onMounted(() => {
  15. getBasicUser(props.userId).then(basicUser => {
  16. if (basicUser) {
  17. const { name, username } = basicUser;
  18. user.value = {
  19. name,
  20. username
  21. };
  22. }
  23. });
  24. });
  25. </script>
  26. <template>
  27. <router-link
  28. v-if="$props.link && user.username"
  29. :to="{ path: `/u/${user.username}` }"
  30. :title="userId"
  31. >
  32. {{ user.name }}
  33. </router-link>
  34. <span v-else :title="userId">
  35. {{ user.name }}
  36. </span>
  37. </template>
  38. <style lang="less" scoped>
  39. a {
  40. color: var(--primary-color);
  41. &:hover,
  42. &:focus {
  43. filter: brightness(90%);
  44. }
  45. }
  46. </style>