fix(#25): render expense tab counts via TabText

Replace the plain Text inside PrimaryTabRow's Tab with the shared
TabText composable. Pass the current size of the expenses and
recurring state flows as badgeCount so each tab shows a small pill
with the (post-filter) list size. Counts update reactively as
items are added, deleted, or filtered by search/date.
This commit is contained in:
Achmad Setyabudi Susilo
2026-06-28 21:22:09 +07:00
parent b698f5084f
commit 5953111897
@@ -68,6 +68,7 @@ import dev.achmad.ledgerr.ui.components.ExpandedFabScrim
import dev.achmad.ledgerr.ui.components.ExportAction
import dev.achmad.ledgerr.ui.components.MiniFab
import dev.achmad.ledgerr.ui.components.SingleSelectFilterChipGroup
import dev.achmad.ledgerr.ui.components.TabText
import dev.achmad.ledgerr.ui.screens.add_edit_expense.AddEditExpenseScreen
import dev.achmad.ledgerr.ui.screens.add_edit_recurring.AddEditRecurringScreen
import dev.achmad.ledgerr.ui.screens.import_bank_statement.ImportBankStatementScreen
@@ -136,10 +137,11 @@ object ExpenseListScreen : Screen {
) {
Column(modifier = Modifier.fillMaxSize()) {
PrimaryTabRow(selectedTabIndex = selectedTab) {
listOf(
stringResource(R.string.expense_list_tab_expenses),
stringResource(R.string.expense_list_tab_recurring),
).forEachIndexed { index, title ->
val tabs = listOf(
stringResource(R.string.expense_list_tab_expenses) to expenses.size,
stringResource(R.string.expense_list_tab_recurring) to recurring.size,
)
tabs.forEachIndexed { index, (title, count) ->
Tab(
selected = selectedTab == index,
onClick = {
@@ -147,7 +149,7 @@ object ExpenseListScreen : Screen {
pagerState.animateScrollToPage(index)
}
},
text = { Text(text = title) },
text = { TabText(text = title, badgeCount = count) },
)
}
}