fix(ui): восстановить показ аватаров и корректный fallback

This commit is contained in:
AidarKC 2026-04-26 09:31:56 +03:00
parent c094af920e
commit 3d5b5b2214
3 changed files with 28 additions and 18 deletions

View File

@ -1,2 +1,2 @@
client.version=1.2.9 client.version=1.2.10
server.version=1.2.9 server.version=1.2.10

View File

@ -57,9 +57,13 @@ export function renderUserAvatar({
img.alt = 'Аватар'; img.alt = 'Аватар';
img.loading = 'lazy'; img.loading = 'lazy';
img.decoding = 'async'; img.decoding = 'async';
img.hidden = true;
wrap.append(img); wrap.append(img);
const setLoadedState = (loaded) => {
wrap.classList.toggle('has-image', Boolean(loaded));
};
setLoadedState(false);
const gateway = state?.entrySettings?.arweaveServer; const gateway = state?.entrySettings?.arweaveServer;
void getCachedAvatarObjectUrl({ gateway, txId }) void getCachedAvatarObjectUrl({ gateway, txId })
.then((objectUrl) => { .then((objectUrl) => {
@ -74,8 +78,7 @@ export function renderUserAvatar({
} }
}; };
img.onload = () => { img.onload = () => {
fallback.hidden = true; setLoadedState(true);
img.hidden = false;
releaseObjectUrl(); releaseObjectUrl();
}; };
img.onerror = () => { img.onerror = () => {
@ -86,8 +89,8 @@ export function renderUserAvatar({
return; return;
} }
releaseObjectUrl(); releaseObjectUrl();
img.hidden = true; img.removeAttribute('src');
fallback.hidden = false; setLoadedState(false);
}; };
img.src = objectUrl; img.src = objectUrl;
}) })
@ -99,17 +102,16 @@ export function renderUserAvatar({
directUrl = ''; directUrl = '';
} }
if (!directUrl) { if (!directUrl) {
img.hidden = true; img.removeAttribute('src');
fallback.hidden = false; setLoadedState(false);
return; return;
} }
img.onload = () => { img.onload = () => {
fallback.hidden = true; setLoadedState(true);
img.hidden = false;
}; };
img.onerror = () => { img.onerror = () => {
img.hidden = true; img.removeAttribute('src');
fallback.hidden = false; setLoadedState(false);
}; };
img.src = directUrl; img.src = directUrl;
}); });

View File

@ -656,11 +656,8 @@
height: 100%; height: 100%;
display: grid; display: grid;
place-items: center; place-items: center;
} opacity: 1;
transition: opacity 120ms ease;
.avatar-fallback[hidden],
.avatar-image img[hidden] {
display: none !important;
} }
.avatar-image img, .avatar-image img,
@ -672,6 +669,17 @@
object-position: center; object-position: center;
border-radius: 50%; border-radius: 50%;
display: block; display: block;
opacity: 0;
transition: opacity 120ms ease;
}
.avatar-image.has-image img {
opacity: 1;
}
.avatar-image.has-image .avatar-fallback {
opacity: 0;
visibility: hidden;
} }
.meta-muted { .meta-muted {