mirror of
https://github.com/block/buzz.git
synced 2026-11-01 23:11:58 +00:00
perf(desktop): memoise MessageActionBar, stabilise its onRemindLater callback
Finding [L4] MessageActionBar (Tier 3): the action bar re-rendered with every row render even when its props were unchanged. Wrap it in `React.memo`. The memo was dead on arrival, though — the row passed an inline `onRemindLater` arrow, a fresh function identity every render that defeated the shallow prop compare. Extract it to a `handleRemindLater` useCallback (deps [channelId, openReminder]); all other props are already stable (openReminder and handleReactionSelect are useCallbacks, setBadgeBurstEmoji is a state setter), so the memo now actually skips. Co-authored-by: Tyler Longwell <tlongwell@block.xyz> Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
This commit is contained in:
committed by
npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d
parent
b3c1cde788
commit
17edcc2bc7
@@ -326,7 +326,7 @@ function isCustomEmojiShortcode(emoji: string) {
|
||||
return emoji.startsWith(":") && emoji.endsWith(":");
|
||||
}
|
||||
|
||||
export function MessageActionBar({
|
||||
export const MessageActionBar = React.memo(function MessageActionBar({
|
||||
channelId,
|
||||
message,
|
||||
onDelete,
|
||||
@@ -549,4 +549,6 @@ export function MessageActionBar({
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
MessageActionBar.displayName = "MessageActionBar";
|
||||
|
||||
@@ -153,6 +153,17 @@ export const MessageRow = React.memo(
|
||||
} = useReactionHandler(message, onToggleReaction);
|
||||
const { openReminder, activeReminderEventIds } = useRemindLater();
|
||||
const hasActiveReminder = activeReminderEventIds.has(message.id);
|
||||
const handleRemindLater = React.useCallback(
|
||||
(msg: TimelineMessage) => {
|
||||
openReminder({
|
||||
eventId: msg.id,
|
||||
channelId: channelId ?? "",
|
||||
preview: msg.body.slice(0, 100),
|
||||
authorPubkey: msg.pubkey ?? "",
|
||||
});
|
||||
},
|
||||
[channelId, openReminder],
|
||||
);
|
||||
const mentionNames = React.useMemo(
|
||||
() => resolveMentionNames(message.tags, profiles),
|
||||
[profiles, message.tags],
|
||||
@@ -446,14 +457,7 @@ export const MessageRow = React.memo(
|
||||
onReactionSelect={
|
||||
canToggleReactions ? handleReactionSelect : undefined
|
||||
}
|
||||
onRemindLater={(msg) => {
|
||||
openReminder({
|
||||
eventId: msg.id,
|
||||
channelId: channelId ?? "",
|
||||
preview: msg.body.slice(0, 100),
|
||||
authorPubkey: msg.pubkey ?? "",
|
||||
});
|
||||
}}
|
||||
onRemindLater={handleRemindLater}
|
||||
onReply={onReply}
|
||||
onUnfollowThread={onUnfollowThread}
|
||||
reactionErrorMessage={reactionErrorMessage}
|
||||
|
||||
Reference in New Issue
Block a user