From 8bfec51dd0eb8a4935ad62ce444f1d9d67c8105c Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 4 Aug 2026 01:32:31 -0700 Subject: A quieter pen inside the address box; the header avatar stops flashing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The avatar img was recreated on every render — boot's render bursts made it flash; there is exactly one header avatar, so the node is reused until the profile actually changes. Co-Authored-By: Claude Fable 5 --- src/features/messages.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/features/messages.js') diff --git a/src/features/messages.js b/src/features/messages.js index 8fbc27a..3854f26 100644 --- a/src/features/messages.js +++ b/src/features/messages.js @@ -1660,7 +1660,19 @@ export function messagesFeature(ctx) { // Chat lives behind a header button and takes over the whole screen — // no balance card, no tabs; each view carries its own way back. // The bare avatar node for the app header's identity menu. - headerAvatar(pk) { return avatar(pk, 'chat-avatar header-ava', false); }, + // The header rebuilds every render; recreating the each time makes + // the picture visibly flash during boot's render bursts. There is exactly + // one header avatar, so the node itself is reused until the profile + // (or account) actually changes. + headerAvatar(pk) { + const p = profileOf(pk); + const key = pk + '|' + (p === null ? 'loading' : p.picture || 'fb:' + (p.name || '')); + if (!this._headerAva || this._headerAvaKey !== key) { + this._headerAvaKey = key; + this._headerAva = avatar(pk, 'chat-avatar header-ava', false); + } + return this._headerAva; + }, // Conversations waiting on us, for the header's message button. unreadMessages() { return unreadCount(); }, screenView() { -- cgit v1.2.3