Skip to content

Commit e00ec19

Browse files
committed
feat(avatar): use fallback when fetch fails
1 parent 63ba7ce commit e00ec19

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

src/components/common/navbar/NavbarSettingsDopdown.vue

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script setup lang="ts">
22
import { NAvatar, NDropdown, NEllipsis, NIcon, NSpace } from 'naive-ui';
33
4-
import { computed, defineProps, h } from 'vue';
4+
import { computed, defineProps, h, ref } from 'vue';
55
66
import { useRouter } from 'vue-router';
77
@@ -28,7 +28,7 @@ import {
2828
import { Blurs, Colors } from '~/styles/colors.style';
2929
import { useI18n } from '~/utils';
3030
31-
import { createTab } from '~/utils/browser/browser.utils';
31+
import { chromeRuntimeId, createTab } from '~/utils/browser/browser.utils';
3232
3333
const i18n = useI18n('navbar_settings');
3434
const router = useRouter();
@@ -40,6 +40,12 @@ const { syncRestoreAuth } = useAuthSettingsStore();
4040
const avatar = computed(() => userSetting.value?.user?.images?.avatar?.full);
4141
const username = computed(() => userSetting.value?.user?.username);
4242
43+
const fallback = ref<boolean>(!chromeRuntimeId);
44+
const onAvatarError = (event: Event) => {
45+
console.error('Failed to fetch avatar', event);
46+
fallback.value = true;
47+
};
48+
4349
defineProps({
4450
parentElement: {
4551
type: HTMLElement,
@@ -158,12 +164,13 @@ const onSelect: DropdownProps['onSelect'] = async (key: string, { label }) => {
158164
</NEllipsis>
159165

160166
<NAvatar
161-
v-if="avatar"
167+
v-if="!fallback && avatar"
162168
:src="avatar"
163169
round
164170
size="small"
165171
color="transparent"
166172
style="position: absolute; top: 0.125rem; right: 0.5rem; scale: 0.8"
173+
:on-error="onAvatarError"
167174
/>
168175
<NIcon v-else style="position: absolute; top: 0.4rem; right: 0.75rem" size="1.5em">
169176
<IconAccount />

0 commit comments

Comments
 (0)