perf: merge ClickableNote Column into NoteComposeLayout modifier

Move the combinedClickable + background modifiers from the wrapping
ClickableNote Column directly onto NoteComposeLayout's modifier chain.
This eliminates one Column layout node per note item in the feed.

The ClickableNote function is preserved for other callers
(ChannelCardCompose) but now delegates to clickableNoteModifier.

https://claude.ai/code/session_01Fam5VHNaNkKBBafg1gRfFS
This commit is contained in:
Claude
2026-04-05 03:01:32 +00:00
parent 350873b7eb
commit 002d7e631d
@@ -546,17 +546,10 @@ private fun CheckNewAndRenderNote(
accountViewModel,
)
ClickableNote(
baseNote = baseNote,
backgroundColor = backgroundColor,
modifier = modifier,
accountViewModel = accountViewModel,
showPopup = showPopup,
nav = nav,
) {
InnerNoteWithReactions(
baseNote = baseNote,
backgroundColor = backgroundColor,
clickModifier = clickableNoteModifier(baseNote, modifier, accountViewModel, showPopup, nav),
isBoostedNote = isBoostedNote,
isQuotedNote = isQuotedNote,
unPackReply = unPackReply,
@@ -569,20 +562,16 @@ private fun CheckNewAndRenderNote(
moreOptions = moreOptions,
)
}
}
@Composable
@OptIn(ExperimentalFoundationApi::class)
fun ClickableNote(
fun clickableNoteModifier(
baseNote: Note,
modifier: Modifier,
backgroundColor: MutableState<Color>,
accountViewModel: AccountViewModel,
showPopup: () -> Unit,
nav: INav,
content: @Composable () -> Unit,
) {
val updatedModifier =
): Modifier =
remember(baseNote, modifier) {
modifier
.combinedClickable(
@@ -608,13 +597,30 @@ fun ClickableNote(
)
}
Column(modifier = updatedModifier.background(backgroundColor.value)) { content() }
@Composable
fun ClickableNote(
baseNote: Note,
modifier: Modifier,
backgroundColor: MutableState<Color>,
accountViewModel: AccountViewModel,
showPopup: () -> Unit,
nav: INav,
content: @Composable () -> Unit,
) {
Column(
modifier =
clickableNoteModifier(baseNote, modifier, accountViewModel, showPopup, nav)
.background(backgroundColor.value),
) {
content()
}
}
@Composable
fun InnerNoteWithReactions(
baseNote: Note,
backgroundColor: MutableState<Color>,
clickModifier: Modifier = Modifier,
isBoostedNote: Boolean,
isQuotedNote: Boolean,
unPackReply: ReplyRenderType,
@@ -632,7 +638,7 @@ fun InnerNoteWithReactions(
val showSecondRow = isNotRepost && notBoostedNorQuote && accountViewModel.settings.isCompleteUIMode()
NoteComposeLayout(
modifier = Modifier.fillMaxWidth(),
modifier = clickModifier.background(backgroundColor.value).fillMaxWidth(),
addPadding = !isBoostedNote,
showAuthorColumn = notBoostedNorQuote,
showSecondRow = showSecondRow,