1
1
<script setup lang="ts">
2
2
import { NAvatar , NDropdown , NEllipsis , NIcon , NSpace } from ' naive-ui' ;
3
3
4
- import { computed , defineProps , h } from ' vue' ;
4
+ import { computed , defineProps , h , ref } from ' vue' ;
5
5
6
6
import { useRouter } from ' vue-router' ;
7
7
@@ -28,7 +28,7 @@ import {
28
28
import { Blurs , Colors } from ' ~/styles/colors.style' ;
29
29
import { useI18n } from ' ~/utils' ;
30
30
31
- import { createTab } from ' ~/utils/browser/browser.utils' ;
31
+ import { chromeRuntimeId , createTab } from ' ~/utils/browser/browser.utils' ;
32
32
33
33
const i18n = useI18n (' navbar_settings' );
34
34
const router = useRouter ();
@@ -40,6 +40,12 @@ const { syncRestoreAuth } = useAuthSettingsStore();
40
40
const avatar = computed (() => userSetting .value ?.user ?.images ?.avatar ?.full );
41
41
const username = computed (() => userSetting .value ?.user ?.username );
42
42
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
+
43
49
defineProps ({
44
50
parentElement: {
45
51
type: HTMLElement ,
@@ -158,12 +164,13 @@ const onSelect: DropdownProps['onSelect'] = async (key: string, { label }) => {
158
164
</NEllipsis >
159
165
160
166
<NAvatar
161
- v-if =" avatar"
167
+ v-if =" !fallback && avatar"
162
168
:src =" avatar"
163
169
round
164
170
size =" small"
165
171
color =" transparent"
166
172
style =" position : absolute ; top : 0.125rem ; right : 0.5rem ; scale : 0.8 "
173
+ :on-error =" onAvatarError"
167
174
/>
168
175
<NIcon v-else style =" position : absolute ; top : 0.4rem ; right : 0.75rem " size =" 1.5em" >
169
176
<IconAccount />
0 commit comments