Home: turn "See all" into a "View All" text button inside SectionHeader #32
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Enhancement
The Home screen's "Recent" section currently uses the
SectionHeadercomposable (app/src/main/java/dev/achmad/ledgerr/ui/screens/home/HomeScreen.kt:421-429), which renders only the title text. The "See all" action is rendered separately as one of twoOutlinedButtons inActionsRow(HomeScreen.kt:397-419) — visually disconnected from the "Recent" header.The user expects "See all" to sit on the same row as "Recent", as a text button on the right edge, matching the pattern implied by the existing
SectionHeadercomposable (the user explicitly references it).Expected behavior
SectionHeaderto optionally take a trailing action. Signature:actionsis empty (default), behavior is unchanged: a singleTextstyled astitleSmallwith the existing top/bottom padding.actionsis non-empty, render aRowwithModifier.fillMaxWidth(): title on the left, actions on the right. The title keeps its styling; actions are typically aTextButton(Material 3) — the row should still feel like a "section header", not a full toolbar.HomeScreen.kt:224-227to pass a "View All"TextButtonas the trailing action:OutlinedButtonfromActionsRow.ActionsRowis now only used foronManageCategories, which is being moved to Settings (see #29) — after #29 lands,ActionsRowitself can be deleted. For this slice, just drop the second button.R.string.home_see_allcopy from "See all" to "View All" inres/values/strings.xml. The string key can stay (or be renamed tohome_view_allif you want to be tidy — adjust both call sites).Acceptance criteria
ExpenseListScreen(sameonSeeAllcallback).TextButtonstyling (no border, primary-color label, ripple on tap) — not anOutlinedButton.recent.isNotEmpty()(current condition at line 224) — the empty branch inDashboardContent(lines 232-239) is replaced by the new empty state (see #33) and should not show the header.actionsis empty (other call sites / future call sites that don't passactionsshould render identically to today).